mirror of
https://github.com/AuxXxilium/eudev.git
synced 2024-12-28 06:35:34 +07:00
udevd: export initial sequence number on startup
This commit is contained in:
parent
d59c84effd
commit
90cd961e2c
47
udevd.c
47
udevd.c
@ -250,7 +250,7 @@ static void udev_event_run(struct uevent_msg *msg)
|
|||||||
/* child */
|
/* child */
|
||||||
close(uevent_netlink_sock);
|
close(uevent_netlink_sock);
|
||||||
close(udevd_sock);
|
close(udevd_sock);
|
||||||
if (inotify_fd > 0)
|
if (inotify_fd >= 0)
|
||||||
close(inotify_fd);
|
close(inotify_fd);
|
||||||
close(signal_pipe[READ_END]);
|
close(signal_pipe[READ_END]);
|
||||||
close(signal_pipe[WRITE_END]);
|
close(signal_pipe[WRITE_END]);
|
||||||
@ -287,7 +287,7 @@ static void msg_queue_insert(struct uevent_msg *msg)
|
|||||||
strlcpy(filename, udev_root, sizeof(filename));
|
strlcpy(filename, udev_root, sizeof(filename));
|
||||||
strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename));
|
strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename));
|
||||||
fd = open(filename, O_WRONLY|O_TRUNC|O_CREAT, 0644);
|
fd = open(filename, O_WRONLY|O_TRUNC|O_CREAT, 0644);
|
||||||
if (fd > 0) {
|
if (fd >= 0) {
|
||||||
char str[32];
|
char str[32];
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
@ -821,6 +821,33 @@ static int init_uevent_netlink_sock(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void export_initial_seqnum(void)
|
||||||
|
{
|
||||||
|
char filename[PATH_SIZE];
|
||||||
|
int fd;
|
||||||
|
char seqnum[32];
|
||||||
|
ssize_t len = 0;
|
||||||
|
|
||||||
|
strlcpy(filename, sysfs_path, sizeof(filename));
|
||||||
|
strlcat(filename, "/kernel/uevent_seqnum", sizeof(filename));
|
||||||
|
fd = open(filename, O_RDONLY);
|
||||||
|
if (fd >= 0) {
|
||||||
|
len = read(fd, seqnum, sizeof(seqnum)-1);
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
if (len <= 0) {
|
||||||
|
strcpy(seqnum, "0\n");
|
||||||
|
len = 3;
|
||||||
|
}
|
||||||
|
strlcpy(filename, udev_root, sizeof(filename));
|
||||||
|
strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename));
|
||||||
|
fd = open(filename, O_WRONLY|O_TRUNC|O_CREAT, 0644);
|
||||||
|
if (fd >= 0) {
|
||||||
|
write(fd, seqnum, len);
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[], char *envp[])
|
int main(int argc, char *argv[], char *envp[])
|
||||||
{
|
{
|
||||||
int retval;
|
int retval;
|
||||||
@ -893,6 +920,8 @@ int main(int argc, char *argv[], char *envp[])
|
|||||||
sysfs_init();
|
sysfs_init();
|
||||||
udev_rules_init(&rules, 1);
|
udev_rules_init(&rules, 1);
|
||||||
|
|
||||||
|
export_initial_seqnum();
|
||||||
|
|
||||||
if (daemonize) {
|
if (daemonize) {
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
|
||||||
@ -1014,7 +1043,7 @@ int main(int argc, char *argv[], char *envp[])
|
|||||||
FD_SET(signal_pipe[READ_END], &readfds);
|
FD_SET(signal_pipe[READ_END], &readfds);
|
||||||
FD_SET(udevd_sock, &readfds);
|
FD_SET(udevd_sock, &readfds);
|
||||||
FD_SET(uevent_netlink_sock, &readfds);
|
FD_SET(uevent_netlink_sock, &readfds);
|
||||||
if (inotify_fd > 0)
|
if (inotify_fd >= 0)
|
||||||
FD_SET(inotify_fd, &readfds);
|
FD_SET(inotify_fd, &readfds);
|
||||||
|
|
||||||
fdcount = select(maxfd+1, &readfds, NULL, NULL, NULL);
|
fdcount = select(maxfd+1, &readfds, NULL, NULL, NULL);
|
||||||
@ -1046,7 +1075,7 @@ int main(int argc, char *argv[], char *envp[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* rules directory inotify watch */
|
/* rules directory inotify watch */
|
||||||
if ((inotify_fd > 0) && FD_ISSET(inotify_fd, &readfds)) {
|
if ((inotify_fd >= 0) && FD_ISSET(inotify_fd, &readfds)) {
|
||||||
int nbytes;
|
int nbytes;
|
||||||
|
|
||||||
/* discard all possible events, we can just reload the config */
|
/* discard all possible events, we can just reload the config */
|
||||||
@ -1089,16 +1118,16 @@ exit:
|
|||||||
udev_rules_cleanup(&rules);
|
udev_rules_cleanup(&rules);
|
||||||
sysfs_cleanup();
|
sysfs_cleanup();
|
||||||
|
|
||||||
if (signal_pipe[READ_END] > 0)
|
if (signal_pipe[READ_END] >= 0)
|
||||||
close(signal_pipe[READ_END]);
|
close(signal_pipe[READ_END]);
|
||||||
if (signal_pipe[WRITE_END] > 0)
|
if (signal_pipe[WRITE_END] >= 0)
|
||||||
close(signal_pipe[WRITE_END]);
|
close(signal_pipe[WRITE_END]);
|
||||||
|
|
||||||
if (udevd_sock > 0)
|
if (udevd_sock >= 0)
|
||||||
close(udevd_sock);
|
close(udevd_sock);
|
||||||
if (inotify_fd > 0)
|
if (inotify_fd >= 0)
|
||||||
close(inotify_fd);
|
close(inotify_fd);
|
||||||
if (uevent_netlink_sock > 0)
|
if (uevent_netlink_sock >= 0)
|
||||||
close(uevent_netlink_sock);
|
close(uevent_netlink_sock);
|
||||||
|
|
||||||
logging_close();
|
logging_close();
|
||||||
|
Loading…
Reference in New Issue
Block a user