]> err.no Git - dpkg/commitdiff
s-s-d: Refactor max open fd into a new function and coalesce close loop
authorGuillem Jover <guillem@debian.org>
Mon, 21 Jan 2008 02:25:33 +0000 (04:25 +0200)
committerGuillem Jover <guillem@debian.org>
Mon, 21 Jan 2008 02:25:33 +0000 (04:25 +0200)
ChangeLog
configure.ac
utils/start-stop-daemon.c

index a108f5ebced4bb68850b59d675101d7da39919b8..bcfeabfe54a686656ee2f4697a4af721e3f46b63 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-01-21  Guillem Jover  <guillem@debian.org>
+
+       * configure.ac (AC_CHECK_FUNCS): Add getdtablesize.
+       * utils/start-stop-daemon.c (get_open_fd_max): New function.
+       (main) [OShpux]: Remove.
+       [!OShpux]: Use get_open_fd_max instead of hardcoded getdtablesize.
+
 2008-01-21  Guillem Jover  <guillem@debian.org>
 
        * man/start-stop-daemon.8: Fix quotation to get rid of a spurious
index 72612793a52f21955253013ba6da93f78ba618b9..40774c94a427abe1fb9f2d3a90b4aef7818cb4c2 100644 (file)
@@ -93,7 +93,7 @@ DPKG_C_ATTRIBUTE
 # Checks for library functions.
 DPKG_FUNC_VA_COPY
 AC_CHECK_FUNCS([vsnprintf snprintf strerror strsignal scandir alphasort])
-AC_CHECK_FUNCS([unsetenv lchown setsid bcopy isascii memcpy]) 
+AC_CHECK_FUNCS([unsetenv lchown setsid bcopy isascii memcpy getdtablesize])
 
 SJR_COMPILER_WARNINGS
 SJR_COMPILER_OPTIMISATIONS
index d973cb007831cc4b6034a4b9df2395a4b533ed6b..cf34c6d5ade219c2dd0374b68b78b411d7a2e6fa 100644 (file)
@@ -257,6 +257,15 @@ xgettimeofday(struct timeval *tv)
        if (gettimeofday(tv, NULL) != 0)
                fatal("gettimeofday failed: %s", strerror(errno));
 }
+static long
+get_open_fd_max(void)
+{
+#ifdef HAVE_GETDTABLESIZE
+       return getdtablesize();
+#else
+       return sysconf(_SC_OPEN_MAX);
+#endif
+}
 
 static void
 daemonize(void)
@@ -1430,15 +1439,10 @@ main(int argc, char **argv)
                dup2(devnull_fd, 0); /* stdin */
                dup2(devnull_fd, 1); /* stdout */
                dup2(devnull_fd, 2); /* stderr */
-#if defined(OShpux)
-                /* Now close all extra fds */
-               for (i = sysconf(_SC_OPEN_MAX) - 1; i >= 3; --i)
-                       close(i);
-#else
+
                 /* Now close all extra fds */
-               for (i = getdtablesize() - 1; i >= 3; --i)
+               for (i = get_open_fd_max() - 1; i >= 3; --i)
                        close(i);
-#endif
        }
        execv(startas, argv);
        fatal("Unable to start %s: %s", startas, strerror(errno));