EVENT_FAILED,
};
-#define PATH_TO_NAME_CHAR '@'
-#define EVENT_QUEUE_DIR ".udev/queue"
-#define EVENT_FAILED_DIR ".udev/failed"
static void export_event_state(struct uevent_msg *msg, enum event_state state)
{
char filename[PATH_SIZE];
switch (state) {
case EVENT_QUEUED:
unlink(filename_failed);
+ delete_path(filename_failed);
strlcpy(target, sysfs_path, sizeof(target));
strlcat(target, msg->devpath, sizeof(target));
symlink(target, filename);
return;
case EVENT_FINISHED:
+ case EVENT_FAILED:
unlink(filename_failed);
+ delete_path(filename_failed);
- /* don't remove if events for the same path are still pending */
+ /* don't remove, if events for the same path are still pending */
list_for_each_entry(loop_msg, &running_list, node)
if (loop_msg->devpath && strcmp(loop_msg->devpath, msg->devpath) == 0)
return;
- unlink(filename);
- case EVENT_FAILED:
- create_path(filename_failed);
- rename(filename, filename_failed);
+
+ /* move failed events to the failed directory */
+ if (state == EVENT_FAILED) {
+ create_path(filename_failed);
+ rename(filename, filename_failed);
+ } else {
+ unlink(filename);
+ }
+
+ /* clean up the queue directory */
+ delete_path(filename);
+
return;
}
}
size = recvmsg(udevd_sock, &smsg, 0);
if (size < 0) {
if (errno != EINTR)
- err("unable to receive udevd message: %s", strerror(errno));
+ err("unable to receive user udevd message: %s", strerror(errno));
return NULL;
}
cmsg = CMSG_FIRSTHDR(&smsg);
size = recv(uevent_netlink_sock, &buffer, sizeof(buffer), 0);
if (size < 0) {
if (errno != EINTR)
- err("unable to receive udevd message: %s", strerror(errno));
+ err("unable to receive kernel netlink message: %s", strerror(errno));
return NULL;
}
break;
if (WIFEXITED(status))
status = WEXITSTATUS(status);
+ else if (WIFSIGNALED(status))
+ status = WTERMSIG(status) + 128;
else
status = 0;
udev_done(pid, status);
/* get user socket message */
if (FD_ISSET(udevd_sock, &readfds)) {
msg = get_udevd_msg();
- if (msg) {
- if (msg->type == UDEVD_UEVENT_UDEVSEND && msg->seqnum != 0) {
- info("skip non-kernel message with SEQNUM");
- free(msg);
- } else
- msg_queue_insert(msg);
- }
+ if (msg)
+ msg_queue_insert(msg);
}
/* get kernel netlink message */