]> granicus.if.org Git - gc/commitdiff
Fix gc.h compliance to strict ANSI (pthreads)
authorIvan Maidanski <ivmai@mail.ru>
Thu, 30 Mar 2017 21:11:04 +0000 (00:11 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Fri, 7 Apr 2017 15:22:39 +0000 (18:22 +0300)
(Cherry-pick commits 15542970970110 from 'master' branch.)

If -std=cXX option is passed to gcc/clang then sigset_t is undefined,
thus GC_pthread_sigmask declaration should be omitted.  However, this
symbol should be available during GC source code audit by cppcheck.

* include/gc_pthread_redirects.h [!GC_NO_PTHREAD_SIGMASK]
(GC_pthread_sigmask): Declare only if GC_PTHREAD_SIGMASK_NEEDED or
_POSIX_C_SOURCE >= 199506 or _XOPEN_SOURCE >= 500, or _BSD_SOURCE
or _GNU_SOURCE.
* tests/test.c [CPPCHECK && !_GNU_SOURCE && GC_PTHREADS] (_GNU_SOURCE):
Likewise.

include/gc_pthread_redirects.h
tests/test.c

index 0d571e913e3957b0160dc484e2da819d9e50b211..534d6c907b7eb5787138cc10c71ec08ba445be28 100644 (file)
 # endif /* !GC_NO_DLOPEN */
 
 # ifndef GC_NO_PTHREAD_SIGMASK
-#   include <signal.h>
-    GC_API int GC_pthread_sigmask(int /* how */, const sigset_t *,
-                                  sigset_t * /* oset */);
+#   include <signal.h>  /* needed anyway for proper redirection */
+#   if defined(GC_PTHREAD_SIGMASK_NEEDED) \
+        || defined(_BSD_SOURCE) || defined(_GNU_SOURCE) \
+        || (_POSIX_C_SOURCE >= 199506L) || (_XOPEN_SOURCE >= 500)
+      GC_API int GC_pthread_sigmask(int /* how */, const sigset_t *,
+                                    sigset_t * /* oset */);
+#   endif
 # endif /* !GC_NO_PTHREAD_SIGMASK */
 
 # ifndef GC_PTHREAD_CREATE_CONST
index 6ca22e05b915db5ca07e6009166e03fd55c4526e..37c65ccc6f3cc66548c4248fa36b035393b2133a 100644 (file)
@@ -28,6 +28,9 @@
 #  define GC_DEBUG
 #endif
 
+#if defined(CPPCHECK) && defined(GC_PTHREADS) && !defined(_GNU_SOURCE)
+# define _GNU_SOURCE 1
+#endif
 #undef GC_NO_THREAD_REDIRECTS
 #include "gc.h"