diff options
-rw-r--r-- | udev.h | 4 | ||||
-rw-r--r-- | udev_lib.h | 6 | ||||
-rw-r--r-- | udevd.c | 35 | ||||
-rw-r--r-- | udevd.h | 2 | ||||
-rw-r--r-- | udevsend.c | 26 |
5 files changed, 29 insertions, 44 deletions
@@ -43,7 +43,7 @@ #define FAKE 1 #define NOFAKE 0 -/* length of public data */ +/* length of public data to store in udevdb */ #define UDEVICE_LEN (offsetof(struct udevice, bus_id)) struct udevice { @@ -71,8 +71,6 @@ extern int udev_add_device(const char *path, const char *subsystem, int fake); extern int udev_remove_device(const char *path, const char *subsystem); extern void udev_init_config(void); extern int udev_start(void); -extern int __udev_hotplug(char *action, const char *devpath, - const char *subsystem); extern int parse_get_pair(char **orig_string, char **left, char **right); extern void dev_d_send(struct udevice *dev, const char *subsystem, const char *devpath); diff --git a/udev_lib.h b/udev_lib.h index 53ad92d505..18ce25ccc7 100644 --- a/udev_lib.h +++ b/udev_lib.h @@ -59,12 +59,6 @@ do { \ snprintf((to) + strlen(to), maxsize - strlen(to)-1, "%u", i); \ } while (0) -#define strlongcat(to, i) \ -do { \ - to[sizeof(to)-1] = '\0'; \ - snprintf((to) + strlen(to), sizeof(to) - strlen(to)-1, "%li", i); \ -} while (0) - #define foreach_strpart(str, separator, pos, len) \ for(pos = str, len = 0; \ (pos) < ((str) + strlen(str)); \ @@ -44,7 +44,7 @@ #include "logging.h" static int pipefds[2]; -static long expected_seqnum = 0; +static unsigned long long expected_seqnum = 0; volatile static int children_waiting; volatile static int run_msg_q; volatile static int sig_flag; @@ -73,7 +73,7 @@ void log_message (int level, const char *format, ...) #endif #define msg_dump(msg) \ - dbg("msg_dump: sequence %d, '%s', '%s', '%s'", \ + dbg("msg_dump: sequence %llu, '%s', '%s', '%s'", \ msg->seqnum, msg->action, msg->devpath, msg->subsystem); static void msg_dump_queue(void) @@ -82,7 +82,7 @@ static void msg_dump_queue(void) struct hotplug_msg *msg; list_for_each_entry(msg, &msg_list, list) - dbg("sequence %li in queue", msg->seqnum); + dbg("sequence %llu in queue", msg->seqnum); #endif } @@ -120,7 +120,7 @@ static void msg_queue_insert(struct hotplug_msg *msg) msg->queue_time = info.uptime; list_add(&msg->list, &loop_msg->list); - dbg("queued message seq %li", msg->seqnum); + dbg("queued message seq %llu", msg->seqnum); /* run msg queue manager */ run_msg_q = 1; @@ -137,12 +137,11 @@ static void udev_run(struct hotplug_msg *msg) char seqnum[SEQNUM_SIZE]; char *env[] = { action, devpath, seqnum, NULL }; - strcpy(action, "ACTION="); - strfieldcat(action, msg->action); - strcpy(devpath, "DEVPATH="); - strfieldcat(devpath, msg->devpath); - strcpy(seqnum, "SEQNUM="); - strlongcat(seqnum, msg->seqnum); + snprintf(action, ACTION_SIZE-1, "ACTION=%s", msg->action); + action[ACTION_SIZE-1] = '\0'; + snprintf(devpath, DEVPATH_SIZE-1, "DEVPATH=%s", msg->devpath); + devpath[DEVPATH_SIZE-1] = '\0'; + sprintf(seqnum, "SEQNUM=%llu", msg->seqnum); pid = fork(); switch (pid) { @@ -161,7 +160,7 @@ static void udev_run(struct hotplug_msg *msg) break; default: /* get SIGCHLD in main loop */ - dbg("==> exec seq %li [%d] working at '%s'", msg->seqnum, pid, msg->devpath); + dbg("==> exec seq %llu [%d] working at '%s'", msg->seqnum, pid, msg->devpath); msg->pid = pid; } } @@ -189,9 +188,9 @@ static void exec_queue_manager() /* move event to run list */ list_move_tail(&loop_msg->list, &running_list); udev_run(loop_msg); - dbg("moved seq %li to running list", loop_msg->seqnum); + dbg("moved seq %llu to running list", loop_msg->seqnum); } else { - dbg("delay seq %li, cause seq %li already working on '%s'", + dbg("delay seq %llu, cause seq %llu already working on '%s'", loop_msg->seqnum, msg->seqnum, msg->devpath); } } @@ -202,7 +201,7 @@ static void msg_move_exec(struct hotplug_msg *msg) list_move_tail(&msg->list, &exec_list); run_exec_q = 1; expected_seqnum = msg->seqnum+1; - dbg("moved seq %li to exec, next expected is %li", + dbg("moved seq %llu to exec, next expected is %llu", msg->seqnum, expected_seqnum); } @@ -214,7 +213,7 @@ static void msg_queue_manager() struct sysinfo info; long msg_age = 0; - dbg("msg queue manager, next expected is %li", expected_seqnum); + dbg("msg queue manager, next expected is %llu", expected_seqnum); recheck: list_for_each_entry_safe(loop_msg, tmp_msg, &msg_list, list) { /* move event with expected sequence to the exec list */ @@ -226,7 +225,7 @@ recheck: /* move event with expired timeout to the exec list */ sysinfo(&info); msg_age = info.uptime - loop_msg->queue_time; - dbg("seq %li is %li seconds old", loop_msg->seqnum, msg_age); + dbg("seq %llu is %li seconds old", loop_msg->seqnum, msg_age); if (msg_age > EVENT_TIMEOUT_SEC-1) { msg_move_exec(loop_msg); goto recheck; @@ -296,7 +295,7 @@ static void handle_msg(int sock) } /* if no seqnum is given, we move straight to exec queue */ - if (msg->seqnum == -1) { + if (msg->seqnum == 0) { list_add(&msg->list, &exec_list); run_exec_q = 1; } else { @@ -353,7 +352,7 @@ static void udev_done(int pid) list_for_each_entry(msg, &running_list, list) { if (msg->pid == pid) { - dbg("<== exec seq %li came back", msg->seqnum); + dbg("<== exec seq %llu came back", msg->seqnum); run_queue_delete(msg); /* we want to run the exec queue manager since there may @@ -33,7 +33,7 @@ struct hotplug_msg { char magic[20]; struct list_head list; pid_t pid; - long seqnum; + unsigned long long seqnum; long queue_time; char action[ACTION_SIZE]; char devpath[DEVPATH_SIZE]; diff --git a/udevsend.c b/udevsend.c index a52d6ec165..842a2a4bc4 100644 --- a/udevsend.c +++ b/udevsend.c @@ -53,17 +53,6 @@ void log_message (int level, const char *format, ...) } #endif -static void build_hotplugmsg(struct hotplug_msg *msg, char *action, - char *devpath, char *subsystem, int seqnum) -{ - memset(msg, 0x00, sizeof(struct hotplug_msg)); - strfieldcpy(msg->magic, UDEV_MAGIC); - msg->seqnum = seqnum; - strfieldcpy(msg->action, action); - strfieldcpy(msg->devpath, devpath); - strfieldcpy(msg->subsystem, subsystem); -} - static int start_daemon(void) { pid_t pid; @@ -125,7 +114,7 @@ int main(int argc, char* argv[]) char *devpath; char *subsystem; char *seqnum; - int seq; + unsigned long long seq; int retval = 1; int loop; struct timespec tspec; @@ -160,10 +149,10 @@ int main(int argc, char* argv[]) seqnum = get_seqnum(); if (seqnum == NULL) - seq = -1; + seq = 0; else - seq = atoi(seqnum); - dbg("SEQNUM = '%d'", seq); + seq = strtoull(seqnum, NULL, 10); + dbg("SEQNUM = '%llu'", seq); sock = socket(AF_LOCAL, SOCK_DGRAM, 0); if (sock == -1) { @@ -177,7 +166,12 @@ int main(int argc, char* argv[]) strcpy(&saddr.sun_path[1], UDEVD_SOCK_PATH); addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path+1) + 1; - build_hotplugmsg(&msg, action, devpath, subsystem, seq); + memset(&msg, 0x00, sizeof(struct hotplug_msg)); + strcpy(msg.magic, UDEV_MAGIC); + msg.seqnum = seq; + strfieldcpy(msg.action, action); + strfieldcpy(msg.devpath, devpath); + strfieldcpy(msg.subsystem, subsystem); /* If we can't send, try to start daemon and resend message */ loop = UDEVSEND_CONNECT_RETRY; |