X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fsd-daemon.c;h=29bd20468001a012417ba7e3e686512b4454c803;hp=eec4722709cb15f89eaca9ad8e2a8aa64ad75cec;hb=695d1ef183a2200cf5f32998f9bd7eb0d8b56ac2;hpb=88ce42f6944774788f610598fccdc6bab4283497;ds=sidebyside diff --git a/src/sd-daemon.c b/src/sd-daemon.c index eec472270..29bd20468 100644 --- a/src/sd-daemon.c +++ b/src/sd-daemon.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -41,7 +42,7 @@ int sd_listen_fds(int unset_environment) { #ifdef DISABLE_SYSTEMD return 0; #else - int r; + int r, fd; const char *e; char *p = NULL; unsigned long l; @@ -88,6 +89,23 @@ int sd_listen_fds(int unset_environment) { goto finish; } + for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + (int) l; fd ++) { + int flags; + + if ((flags = fcntl(fd, F_GETFD)) < 0) { + r = -errno; + goto finish; + } + + if (flags & FD_CLOEXEC) + continue; + + if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) { + r = -errno; + goto finish; + } + } + r = (int) l; finish: