Take care of possible surprising sem_init implementations.
authorWerner Koch <wk@gnupg.org>
Wed, 9 May 2012 15:08:30 +0000 (17:08 +0200)
committerWerner Koch <wk@gnupg.org>
Wed, 9 May 2012 15:08:30 +0000 (17:08 +0200)
* src/npth.c (npth_init): Return an error only for POSIX.1-2008.
--

Although, I doubt that there is a sem_init version which does not
return 0 on success, it is better to avoid such surprises.  Most
callers will not test for the error return anyway.

src/npth.c

index 171b7cb..151d6a3 100644 (file)
@@ -163,9 +163,16 @@ npth_init (void)
   main_thread = pthread_self();
 
   /* The semaphore is not shared and binary.  */
-  sem_init(&sceptre, 0, 1);
+  res = sem_init(&sceptre, 0, 1);
   if (res < 0)
-    return errno;
+    {
+      /* POSIX.1-2001 defines the semaphore interface but does not
+         specify the return value for success.  Thus we better bail
+         out on error only on a POSIX.1-2008 system.  */
+#if _POSIX_C_SOURCE >= 200809L
+      return errno;
+#endif
+    }
 
   LEAVE();
   return 0;