mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-28 07:21:32 +03:00
use CLOEXEC flags instead of fcntl()
This commit is contained in:
parent
82c6558e01
commit
26347a4c55
@ -30,7 +30,7 @@ CLEANFILES =
|
||||
# libudev
|
||||
# ------------------------------------------------------------------------------
|
||||
LIBUDEV_CURRENT=5
|
||||
LIBUDEV_REVISION=0
|
||||
LIBUDEV_REVISION=1
|
||||
LIBUDEV_AGE=5
|
||||
|
||||
SUBDIRS += libudev/docs
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user