chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
update RELEASE-NOTES
[elogind.git]
/
udevd.c
diff --git
a/udevd.c
b/udevd.c
index 209b9fcd870074ed0db22e8c1a932e98b959f0a2..8782c615e325878bb7a7701a2f480209c82a7840 100644
(file)
--- a/
udevd.c
+++ b/
udevd.c
@@
-48,6
+48,10
@@
#include "udevd.h"
#include "logging.h"
#include "udevd.h"
#include "logging.h"
+#ifndef NETLINK_KOBJECT_UEVENT
+#define NETLINK_KOBJECT_UEVENT 15
+#endif
+
/* global variables*/
static int udevd_sock;
static int uevent_netlink_sock;
/* global variables*/
static int udevd_sock;
static int uevent_netlink_sock;
@@
-101,7
+105,7
@@
static void msg_dump_queue(void)
#endif
}
#endif
}
-static void
run
_queue_delete(struct uevent_msg *msg)
+static void
msg
_queue_delete(struct uevent_msg *msg)
{
list_del(&msg->node);
free(msg);
{
list_del(&msg->node);
free(msg);
@@
-185,7
+189,7
@@
static void execute_udev(struct uevent_msg *msg)
break;
case -1:
err("fork of child failed");
break;
case -1:
err("fork of child failed");
-
run
_queue_delete(msg);
+
msg
_queue_delete(msg);
break;
default:
/* get SIGCHLD in main loop */
break;
default:
/* get SIGCHLD in main loop */
@@
-453,6
+457,8
@@
static struct uevent_msg *get_msg_from_envbuf(const char *buf, int buf_size)
int bufpos;
int i;
struct uevent_msg *msg;
int bufpos;
int i;
struct uevent_msg *msg;
+ int major = 0;
+ int minor = 0;
msg = malloc(sizeof(struct uevent_msg) + buf_size);
if (msg == NULL)
msg = malloc(sizeof(struct uevent_msg) + buf_size);
if (msg == NULL)
@@
-475,22
+481,22
@@
static struct uevent_msg *get_msg_from_envbuf(const char *buf, int buf_size)
/* remember some keys for further processing */
if (strncmp(key, "ACTION=", 7) == 0)
msg->action = &key[7];
/* remember some keys for further processing */
if (strncmp(key, "ACTION=", 7) == 0)
msg->action = &key[7];
-
- if (strncmp(key, "DEVPATH=", 8) == 0)
+ else if (strncmp(key, "DEVPATH=", 8) == 0)
msg->devpath = &key[8];
msg->devpath = &key[8];
-
- if (strncmp(key, "SUBSYSTEM=", 10) == 0)
+ else if (strncmp(key, "SUBSYSTEM=", 10) == 0)
msg->subsystem = &key[10];
msg->subsystem = &key[10];
-
- if (strncmp(key, "SEQNUM=", 7) == 0)
+ else if (strncmp(key, "SEQNUM=", 7) == 0)
msg->seqnum = strtoull(&key[7], NULL, 10);
msg->seqnum = strtoull(&key[7], NULL, 10);
-
- if (strncmp(key, "PHYSDEVPATH=", 12) == 0)
+ else if (strncmp(key, "PHYSDEVPATH=", 12) == 0)
msg->physdevpath = &key[12];
msg->physdevpath = &key[12];
-
- if (strncmp(key, "TIMEOUT=", 8) == 0)
+ else if (strncmp(key, "MAJOR=", 6) == 0)
+ major = strtoull(&key[6], NULL, 10);
+ else if (strncmp(key, "MINOR=", 6) == 0)
+ minor = strtoull(&key[6], NULL, 10);
+ else if (strncmp(key, "TIMEOUT=", 8) == 0)
msg->timeout = strtoull(&key[8], NULL, 10);
}
msg->timeout = strtoull(&key[8], NULL, 10);
}
+ msg->devt = makedev(major, minor);
msg->envp[i++] = "UDEVD_EVENT=1";
msg->envp[i] = NULL;
msg->envp[i++] = "UDEVD_EVENT=1";
msg->envp[i] = NULL;
@@
-600,7
+606,7
@@
static struct uevent_msg *get_netlink_msg(void)
if ((size_t)size > sizeof(buffer)-1)
size = sizeof(buffer)-1;
buffer[size] = '\0';
if ((size_t)size > sizeof(buffer)-1)
size = sizeof(buffer)-1;
buffer[size] = '\0';
- dbg("uevent_size=%i", size);
+ dbg("uevent_size=%
z
i", size);
/* start of event payload */
bufpos = strlen(buffer)+1;
/* start of event payload */
bufpos = strlen(buffer)+1;
@@
-675,7
+681,7
@@
static void udev_done(int pid)
if (msg->pid == pid) {
sysinfo(&info);
info("seq %llu exit, %ld seconds old", msg->seqnum, info.uptime - msg->queue_time);
if (msg->pid == pid) {
sysinfo(&info);
info("seq %llu exit, %ld seconds old", msg->seqnum, info.uptime - msg->queue_time);
-
run
_queue_delete(msg);
+
msg
_queue_delete(msg);
/* we want to run the exec queue manager since there may
* be events waiting with the devpath of the one that
/* we want to run the exec queue manager since there may
* be events waiting with the devpath of the one that