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 84f165476d33aa55dc10c159d05b64d51f44a7f2..2185614c43822572fccdf51f559c8b18d90b2255 100644 (file)
@@ -30,7 +30,7 @@ CLEANFILES =
 # libudev
 # ------------------------------------------------------------------------------
 LIBUDEV_CURRENT=5
 # libudev
 # ------------------------------------------------------------------------------
 LIBUDEV_CURRENT=5
-LIBUDEV_REVISION=0
+LIBUDEV_REVISION=1
 LIBUDEV_AGE=5
 
 SUBDIRS += libudev/docs
 LIBUDEV_AGE=5
 
 SUBDIRS += libudev/docs
index 4d70bca32256879610bde8fd6d191123a768b9e0..ff2dd363b109e8e0af825eee4b7034836d3938a6 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_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
 udev_enumerate_add_syspath
 udev_enumerate_scan_devices
 udev_enumerate_scan_subsystems
index ee855afac49f8e07a4509e45799599bf23cd4d4b..96c153fbd7db27b443370272c2fd5dc2d56394e9 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;
        }
                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;
        }
        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;
 
        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;
 
        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;
        }
        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;
 
        udev_monitor->snl.nl_family = AF_NETLINK;
        udev_monitor->snl.nl_groups = group;
index 285b9d48c13a1e8b31f737ad19d0ae17f2ce7599..28110d191c6963a46ab495990563ff2ab8afc3be 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);
 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 */
 unsigned int util_string_hash32(const char *str);
 
 /* libudev-util-private.c */
index 9a656b5a98ae5ef9cf408eb7c27b4bf5f33840ae..c0209f9cc613cdaaf54c4ec533edf4bf91e6d10b 100644 (file)
@@ -481,18 +481,6 @@ err:
        return -1;
 }
 
        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;
 unsigned int util_string_hash32(const char *str)
 {
        unsigned int hash = 0;
index 102e16f81d0fbfc21a7310024ac5e4e8d6461be0..d67083b51b3a67e3d14f9d2a7b6b4ef5113646a2 100644 (file)
@@ -38,10 +38,8 @@ static int inotify_fd = -1;
  */
 int udev_watch_init(struct udev *udev)
 {
  */
 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;
 }
                err(udev, "inotify_init failed: %m\n");
        return inotify_fd;
 }
index dfdbb4c245b37b41f6115d7845f53f97dd6044bd..88e117f50a1f46807688aeafebaaa4e7295510e9 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);
        /* 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)
 
        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 */
        }
 
        /* 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];
                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) {
 
        rules = udev_rules_new(udev, resolve_names);
        if (rules == NULL) {