X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev%2Fudevd.c;h=1f8483c301dde3c91e7e775ffede2332c903ca6d;hp=d24d8430ca68cf508a5b0174dd1778e54101d428;hb=4aa0b15efbb44dbcbb0a4fa6e7bb45e70e1ec537;hpb=4f4b12c20388ff2cb158b040e3193f86cf7a3b96 diff --git a/udev/udevd.c b/udev/udevd.c index d24d8430c..1f8483c30 100644 --- a/udev/udevd.c +++ b/udev/udevd.c @@ -1,24 +1,21 @@ /* - * Copyright (C) 2004-2006 Kay Sievers + * Copyright (C) 2004-2008 Kay Sievers * Copyright (C) 2004 Chris Friesen * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation version 2 of the License. + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ -#include "config.h" - #include #include #include @@ -142,7 +139,7 @@ static int udev_event_process(struct udevd_uevent_msg *msg) udevice = udev_device_init(msg->udev); if (udevice == NULL) return -1; - strlcpy(udevice->action, msg->action, sizeof(udevice->action)); + util_strlcpy(udevice->action, msg->action, sizeof(udevice->action)); sysfs_device_set_values(udevice->udev, udevice->dev, msg->devpath, msg->subsystem, msg->driver); udevice->devpath_old = msg->devpath_old; udevice->devt = msg->devt; @@ -169,19 +166,19 @@ enum event_state { static void export_event_state(struct udevd_uevent_msg *msg, enum event_state state) { - char filename[PATH_SIZE]; - char filename_failed[PATH_SIZE]; + char filename[UTIL_PATH_SIZE]; + char filename_failed[UTIL_PATH_SIZE]; size_t start; /* location of queue file */ snprintf(filename, sizeof(filename), "%s/.udev/queue/%llu", udev_get_dev_path(msg->udev), msg->seqnum); /* location of failed file */ - strlcpy(filename_failed, udev_get_dev_path(msg->udev), sizeof(filename_failed)); - strlcat(filename_failed, "/", sizeof(filename_failed)); - start = strlcat(filename_failed, ".udev/failed/", sizeof(filename_failed)); - strlcat(filename_failed, msg->devpath, sizeof(filename_failed)); - path_encode(&filename_failed[start], sizeof(filename_failed) - start); + util_strlcpy(filename_failed, udev_get_dev_path(msg->udev), sizeof(filename_failed)); + util_strlcat(filename_failed, "/", sizeof(filename_failed)); + start = util_strlcat(filename_failed, ".udev/failed/", sizeof(filename_failed)); + util_strlcat(filename_failed, msg->devpath, sizeof(filename_failed)); + util_path_encode(&filename_failed[start], sizeof(filename_failed) - start); switch (state) { case EVENT_QUEUED: @@ -195,13 +192,13 @@ static void export_event_state(struct udevd_uevent_msg *msg, enum event_state st case EVENT_FINISHED: if (msg->devpath_old != NULL) { /* "move" event - rename failed file to current name, do not delete failed */ - char filename_failed_old[PATH_SIZE]; + char filename_failed_old[UTIL_PATH_SIZE]; - strlcpy(filename_failed_old, udev_get_dev_path(msg->udev), sizeof(filename_failed_old)); - strlcat(filename_failed_old, "/", sizeof(filename_failed_old)); - start = strlcat(filename_failed_old, ".udev/failed/", sizeof(filename_failed_old)); - strlcat(filename_failed_old, msg->devpath_old, sizeof(filename_failed_old)); - path_encode(&filename_failed_old[start], sizeof(filename) - start); + util_strlcpy(filename_failed_old, udev_get_dev_path(msg->udev), sizeof(filename_failed_old)); + util_strlcat(filename_failed_old, "/", sizeof(filename_failed_old)); + start = util_strlcat(filename_failed_old, ".udev/failed/", sizeof(filename_failed_old)); + util_strlcat(filename_failed_old, msg->devpath_old, sizeof(filename_failed_old)); + util_path_encode(&filename_failed_old[start], sizeof(filename) - start); if (rename(filename_failed_old, filename_failed) == 0) info(msg->udev, "renamed devpath, moved failed state of '%s' to %s'\n", @@ -267,7 +264,7 @@ static void udev_event_run(struct udevd_uevent_msg *msg) exit(1); exit(0); case -1: - err(msg->udev, "fork of child failed: %s\n", strerror(errno)); + err(msg->udev, "fork of child failed: %m\n"); msg_queue_delete(msg); break; default: @@ -280,7 +277,7 @@ static void udev_event_run(struct udevd_uevent_msg *msg) static void msg_queue_insert(struct udevd_uevent_msg *msg) { - char filename[PATH_SIZE]; + char filename[UTIL_PATH_SIZE]; int fd; msg->queue_time = time(NULL); @@ -288,8 +285,8 @@ static void msg_queue_insert(struct udevd_uevent_msg *msg) export_event_state(msg, EVENT_QUEUED); info(msg->udev, "seq %llu queued, '%s' '%s'\n", msg->seqnum, msg->action, msg->subsystem); - strlcpy(filename, udev_get_dev_path(msg->udev), sizeof(filename)); - strlcat(filename, "/.udev/uevent_seqnum", sizeof(filename)); + util_strlcpy(filename, udev_get_dev_path(msg->udev), sizeof(filename)); + util_strlcat(filename, "/.udev/uevent_seqnum", sizeof(filename)); fd = open(filename, O_WRONLY|O_TRUNC|O_CREAT, 0644); if (fd >= 0) { char str[32]; @@ -347,7 +344,7 @@ static int compare_devpath(const char *running, const char *waiting) { int i; - for (i = 0; i < PATH_SIZE; i++) { + for (i = 0; i < UTIL_PATH_SIZE; i++) { /* identical device event found */ if (running[i] == '\0' && waiting[i] == '\0') return 1; @@ -622,7 +619,7 @@ static struct udevd_uevent_msg *get_netlink_msg(struct udev *udev) size = recv(uevent_netlink_sock, &buffer, sizeof(buffer), 0); if (size < 0) { if (errno != EINTR) - err(udev, "unable to receive kernel netlink message: %s\n", strerror(errno)); + err(udev, "unable to receive kernel netlink message: %m\n"); return NULL; } @@ -732,7 +729,7 @@ static int init_uevent_netlink_sock(struct udev *udev) uevent_netlink_sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT); if (uevent_netlink_sock == -1) { - err(udev, "error getting socket: %s\n", strerror(errno)); + err(udev, "error getting socket: %m\n"); return -1; } @@ -741,7 +738,7 @@ static int init_uevent_netlink_sock(struct udev *udev) retval = bind(uevent_netlink_sock, (struct sockaddr *) &snl, sizeof(struct sockaddr_nl)); if (retval < 0) { - err(udev, "bind failed: %s\n", strerror(errno)); + err(udev, "bind failed: %m\n"); close(uevent_netlink_sock); uevent_netlink_sock = -1; return -1; @@ -751,13 +748,13 @@ static int init_uevent_netlink_sock(struct udev *udev) static void export_initial_seqnum(struct udev *udev) { - char filename[PATH_SIZE]; + char filename[UTIL_PATH_SIZE]; int fd; char seqnum[32]; ssize_t len = 0; - strlcpy(filename, udev_get_sys_path(udev), sizeof(filename)); - strlcat(filename, "/kernel/uevent_seqnum", sizeof(filename)); + util_strlcpy(filename, udev_get_sys_path(udev), sizeof(filename)); + util_strlcat(filename, "/kernel/uevent_seqnum", sizeof(filename)); fd = open(filename, O_RDONLY); if (fd >= 0) { len = read(fd, seqnum, sizeof(seqnum)-1); @@ -767,8 +764,8 @@ static void export_initial_seqnum(struct udev *udev) strcpy(seqnum, "0\n"); len = 3; } - strlcpy(filename, udev_get_dev_path(udev), sizeof(filename)); - strlcat(filename, "/.udev/uevent_seqnum", sizeof(filename)); + util_strlcpy(filename, udev_get_dev_path(udev), sizeof(filename)); + util_strlcat(filename, "/.udev/uevent_seqnum", sizeof(filename)); create_path(udev, filename); fd = open(filename, O_WRONLY|O_TRUNC|O_CREAT, 0644); if (fd >= 0) { @@ -879,29 +876,29 @@ int main(int argc, char *argv[]) retval = pipe(signal_pipe); if (retval < 0) { - err(udev, "error getting pipes: %s\n", strerror(errno)); + err(udev, "error getting pipes: %m\n"); goto exit; } retval = fcntl(signal_pipe[READ_END], F_GETFL, 0); if (retval < 0) { - err(udev, "error fcntl on read pipe: %s\n", strerror(errno)); + err(udev, "error fcntl on read pipe: %m\n"); goto exit; } retval = fcntl(signal_pipe[READ_END], F_SETFL, retval | O_NONBLOCK); if (retval < 0) { - err(udev, "error fcntl on read pipe: %s\n", strerror(errno)); + err(udev, "error fcntl on read pipe: %m\n"); goto exit; } retval = fcntl(signal_pipe[WRITE_END], F_GETFL, 0); if (retval < 0) { - err(udev, "error fcntl on write pipe: %s\n", strerror(errno)); + err(udev, "error fcntl on write pipe: %m\n"); goto exit; } retval = fcntl(signal_pipe[WRITE_END], F_SETFL, retval | O_NONBLOCK); if (retval < 0) { - err(udev, "error fcntl on write pipe: %s\n", strerror(errno)); + err(udev, "error fcntl on write pipe: %m\n"); goto exit; } @@ -920,7 +917,7 @@ int main(int argc, char *argv[]) dbg(udev, "daemonized fork running\n"); break; case -1: - err(udev, "fork of daemon failed: %s\n", strerror(errno)); + err(udev, "fork of daemon failed: %m\n"); rc = 4; goto exit; default: @@ -948,7 +945,7 @@ int main(int argc, char *argv[]) /* OOM_DISABLE == -17 */ fd = open("/proc/self/oom_adj", O_RDWR); if (fd < 0) - err(udev, "error disabling OOM: %s\n", strerror(errno)); + err(udev, "error disabling OOM: %m\n"); else { write(fd, "-17", 3); close(fd); @@ -987,15 +984,15 @@ int main(int argc, char *argv[]) IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE); /* watch dynamic rules directory */ - strlcpy(filename, udev_get_dev_path(udev), sizeof(filename)); - strlcat(filename, "/.udev/rules.d", sizeof(filename)); + util_strlcpy(filename, udev_get_dev_path(udev), sizeof(filename)); + util_strlcat(filename, "/.udev/rules.d", sizeof(filename)); inotify_add_watch(inotify_fd, filename, IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE); } } else if (errno == ENOSYS) err(udev, "the kernel does not support inotify, udevd can't monitor rules file changes\n"); else - err(udev, "inotify_init failed: %s\n", strerror(errno)); + err(udev, "inotify_init failed: %m\n"); /* maximum limit of forked childs */ value = getenv("UDEVD_MAX_CHILDS"); @@ -1038,7 +1035,7 @@ int main(int argc, char *argv[]) fdcount = select(maxfd+1, &readfds, NULL, NULL, NULL); if (fdcount < 0) { if (errno != EINTR) - err(udev, "error in select: %s\n", strerror(errno)); + err(udev, "error in select: %m\n"); continue; }