Fix possible AIX problem with sysconf in rndunix.
authorWerner Koch <wk@gnupg.org>
Fri, 15 Jan 2016 14:51:37 +0000 (15:51 +0100)
committerWerner Koch <wk@gnupg.org>
Fri, 15 Jan 2016 14:52:11 +0000 (15:52 +0100)
* cipher/rndunix.c [HAVE_STDINT_H]: Include stdint.h.
(start_gatherer): Detect misbehaving sysconf.
--

See
GnuPG-bug-id: 1778
for the reason of this patch. There is no concrete bug report but this
chnage should not harm.

Signed-off-by: Werner Koch <wk@gnupg.org>
cipher/rndunix.c

index 72905e6..5cf2b9e 100644 (file)
@@ -50,6 +50,9 @@
 #include <config.h>
 #include <stdlib.h>
 #include <stdio.h>
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
 #include <string.h>
 #include <assert.h>
 
@@ -700,12 +703,18 @@ start_gatherer( int pipefd )
     {  int nmax, n1, i;
 #ifdef _SC_OPEN_MAX
        if( (nmax=sysconf( _SC_OPEN_MAX )) < 0 ) {
-#ifdef _POSIX_OPEN_MAX
+# ifdef _POSIX_OPEN_MAX
            nmax = _POSIX_OPEN_MAX;
-#else
+# else
            nmax = 20; /* assume a reasonable value */
-#endif
+# endif
        }
+        /* AIX returns INT32_MAX instead of a proper value.  We assume that
+         * this is always an error and use a reasonable value.  */
+# ifdef INT32_MAX
+        if (nmax == INT32_MAX)
+          nmax = 20;
+# endif
 #else
        nmax = 20; /* assume a reasonable value */
 #endif