X-Git-Url: https://git.hcoop.net/hcoop/debian/courier-authlib.git/blobdiff_plain/432ecdf4a9444ffeee98178829d51fc588911cdd..0fde1ce3109f2259ded7e8bff8d2b1c984252bc0:/liblock/lockdaemon.c diff --git a/liblock/lockdaemon.c b/liblock/lockdaemon.c index 5ff83a1..0b0151a 100644 --- a/liblock/lockdaemon.c +++ b/liblock/lockdaemon.c @@ -31,31 +31,9 @@ #include #endif -#ifndef OPEN_MAX -#ifdef HAVE_SYSCONF -#ifdef _SC_OPEN_MAX -#define OPEN_MAX (my_open_max()) - -static int my_open_max() -{ - long n=sysconf(_SC_OPEN_MAX); - - if (n == -1) - n=64; - return n; -} - -#endif -#endif -#endif - -#ifndef OPEN_MAX -#define OPEN_MAX 64 -#endif - #define exit(_a_) _exit(_a_) -static const char rcsid[]="$Id: lockdaemon.c,v 1.13 2007/09/26 02:36:59 mrsam Exp $"; +static const char rcsid[]="$Id: lockdaemon.c,v 1.14 2007/10/11 01:46:34 mrsam Exp $"; static int start1(const char *, int); @@ -133,7 +111,7 @@ int i; static int start1(const char *lockfile, int fd) { -int lockfd; +int lockfd, maxfd; #if HAVE_SETPGRP #if SETPGRP_VOID @@ -168,14 +146,27 @@ int lockfd; lockfd=open(lockfile, O_RDWR|O_CREAT, 0600); } - if (lockfd < 0 || dup2(lockfd, OPEN_MAX-1) != OPEN_MAX-1) +#if HAVE_GETDTABLESIZE + maxfd=getdtablesize()-1; +#elif defined(OPEN_MAX) + maxfd=OPEN_MAX-1; +#elif HAVE_SYSCONF && defined(_SC_OPEN_MAX) + if ((maxfd=sysconf(_SC_OPEN_MAX)) < 0) + maxfd=63; + else if (maxfd > 0) + maxfd--; +#else + maxfd=63; +#endif + + if (lockfd < 0 || dup2(lockfd, maxfd) != maxfd) { perror(lockfile); exit(1); } close(lockfd); - lockfd=OPEN_MAX-1; + lockfd=maxfd; #ifdef FD_CLOEXEC if (fcntl(lockfd, F_SETFD, FD_CLOEXEC) < 0)