chiark / gitweb /
use CLOEXEC flags instead of fcntl()
authorKay Sievers <kay.sievers@vrfy.org>
Fri, 30 Oct 2009 11:31:59 +0000 (12:31 +0100)
committerKay Sievers <kay.sievers@vrfy.org>
Fri, 30 Oct 2009 11:39:04 +0000 (12:39 +0100)
Makefile.am
libudev/docs/libudev-sections.txt
libudev/libudev-monitor.c
libudev/libudev-private.h
libudev/libudev-util.c
udev/udev-watch.c
udev/udevd.c

index 84f1654..2185614 100644 (file)
@@ -30,7 +30,7 @@ CLEANFILES =
 # libudev
 # ------------------------------------------------------------------------------
 LIBUDEV_CURRENT=5
-LIBUDEV_REVISION=0
+LIBUDEV_REVISION=1
 LIBUDEV_AGE=5
 
 SUBDIRS += libudev/docs
index 4d70bca..ff2dd36 100644 (file)
@@ -83,6 +83,7 @@ udev_enumerate_add_nomatch_subsystem
 udev_enumerate_add_match_sysattr
 udev_enumerate_add_nomatch_sysattr
 udev_enumerate_add_match_property
+udev_enumerate_add_match_sysname
 udev_enumerate_add_syspath
 udev_enumerate_scan_devices
 udev_enumerate_scan_subsystems
index ee855af..96c153f 100644 (file)
@@ -139,13 +139,12 @@ struct udev_monitor *udev_monitor_new_from_socket(struct udev *udev, const char
                util_strscpy(&udev_monitor->sun.sun_path[1], sizeof(udev_monitor->sun.sun_path)-1, socket_path);
                udev_monitor->addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(socket_path)+1;
        }
-       udev_monitor->sock = socket(AF_LOCAL, SOCK_DGRAM, 0);
+       udev_monitor->sock = socket(AF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0);
        if (udev_monitor->sock == -1) {
                err(udev, "error getting socket: %m\n");
                free(udev_monitor);
                return NULL;
        }
-       util_set_fd_cloexec(udev_monitor->sock);
 
        dbg(udev, "monitor %p created with '%s'\n", udev_monitor, socket_path);
        return udev_monitor;
@@ -197,13 +196,12 @@ struct udev_monitor *udev_monitor_new_from_netlink(struct udev *udev, const char
        if (udev_monitor == NULL)
                return NULL;
 
-       udev_monitor->sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);
+       udev_monitor->sock = socket(PF_NETLINK, SOCK_DGRAM|SOCK_CLOEXEC, NETLINK_KOBJECT_UEVENT);
        if (udev_monitor->sock == -1) {
                err(udev, "error getting socket: %m\n");
                free(udev_monitor);
                return NULL;
        }
-       util_set_fd_cloexec(udev_monitor->sock);
 
        udev_monitor->snl.nl_family = AF_NETLINK;
        udev_monitor->snl.nl_groups = group;
index 285b9d4..28110d1 100644 (file)
@@ -205,7 +205,6 @@ size_t util_strscpyl(char *dest, size_t size, const char *src, ...) __attribute_
 int udev_util_replace_whitespace(const char *str, char *to, size_t len);
 int udev_util_replace_chars(char *str, const char *white);
 int udev_util_encode_string(const char *str, char *str_enc, size_t len);
-void util_set_fd_cloexec(int fd);
 unsigned int util_string_hash32(const char *str);
 
 /* libudev-util-private.c */
index 9a656b5..c0209f9 100644 (file)
@@ -481,18 +481,6 @@ err:
        return -1;
 }
 
-void util_set_fd_cloexec(int fd)
-{
-       int flags;
-
-       flags = fcntl(fd, F_GETFD);
-       if (flags < 0)
-               flags = FD_CLOEXEC;
-       else
-               flags |= FD_CLOEXEC;
-       fcntl(fd, F_SETFD, flags);
-}
-
 unsigned int util_string_hash32(const char *str)
 {
        unsigned int hash = 0;
index 102e16f..d67083b 100644 (file)
@@ -38,10 +38,8 @@ static int inotify_fd = -1;
  */
 int udev_watch_init(struct udev *udev)
 {
-       inotify_fd = inotify_init();
-       if (inotify_fd >= 0)
-               util_set_fd_cloexec(inotify_fd);
-       else
+       inotify_fd = inotify_init1(IN_CLOEXEC);
+       if (inotify_fd < 0)
                err(udev, "inotify_init failed: %m\n");
        return inotify_fd;
 }
index dfdbb4c..88e117f 100644 (file)
@@ -223,7 +223,6 @@ static void worker_new(struct event *event)
        /* allow the main daemon netlink address to send devices to the worker */
        udev_monitor_allow_unicast_sender(worker_monitor, monitor);
        udev_monitor_enable_receiving(worker_monitor);
-       util_set_fd_cloexec(udev_monitor_get_fd(worker_monitor));
 
        worker = calloc(1, sizeof(struct worker));
        if (worker == NULL)
@@ -945,14 +944,13 @@ int main(int argc, char *argv[])
        }
 
        /* unnamed socket from workers to the main daemon */
-       if (socketpair(AF_LOCAL, SOCK_DGRAM, 0, worker_watch) < 0) {
+       if (socketpair(AF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0, worker_watch) < 0) {
                fprintf(stderr, "error getting socketpair\n");
                err(udev, "error getting socketpair\n");
                rc = 6;
                goto exit;
        }
        pfd[FD_WORKER].fd = worker_watch[READ_END];
-       util_set_fd_cloexec(worker_watch[WRITE_END]);
 
        rules = udev_rules_new(udev, resolve_names);
        if (rules == NULL) {