Fix usage of _GNU_SOURCE
authorDan Winship <danw@gnome.org>
Sun, 1 May 2011 15:17:14 +0000 (11:17 -0400)
committerDan Winship <danw@gnome.org>
Tue, 3 May 2011 11:07:41 +0000 (07:07 -0400)
_GNU_SOURCE must be defined before including any other (system)
header, so defining it in glib-unix.h (and hoping no one has included
anything else before that) is wrong. And the "#define _USE_GNU"
workaround for this problem in gnetworkingprivate.h is even wronger
(and still prone to failure anyway due to single-include guards).

Fix this by defining _GNU_SOURCE in config.h when building against
glibc. In theory this is bad because new releases of glibc may include
symbols that conflict with glib symbols, which could then cause
compile failures. However, most people only see new releases of glibc
when they upgrade their distro, at which point they also generally get
new releases of gcc, which have new warnings/errors to clean up
anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=649201

16 files changed:
configure.ac
gio/gfile.c
gio/glib-compile-schemas.c
gio/glocalfileinfo.c
gio/gnetworkingprivate.h
gio/gsettings.c
gio/gunixcredentialsmessage.c
gio/gunixfdlist.c
gio/libasyncns/g-asyncns.h
gio/tests/gdbus-peer.c
glib/glib-unix.h
glib/gmain.c
glib/gprintf.c
glib/gqsort.c
glib/gslice.c
glib/gstrfuncs.c

index a44c77ad9e2367b34322380f0e3b15e580130223..378b0823eebf9d4aaf985e3a08ffe35ed79858cc 100644 (file)
@@ -206,6 +206,10 @@ if test "x$glib_have_carbon" = "xyes"; then
   LDFLAGS="$LDFLAGS -framework Carbon"
 fi
 
+gl_GLIBC21
+if test "x$GLIBC21" = "xyes"; then
+  AC_DEFINE([_GNU_SOURCE], 1, [Make all glibc extensions visible])
+fi
 
 dnl declare --enable-* args and collect ac_help strings
 AC_ARG_ENABLE(debug,
@@ -412,7 +416,6 @@ else
   fi
 fi
 
-gl_GLIBC21
 AC_ARG_ENABLE(iconv-cache, 
               [AC_HELP_STRING([--enable-iconv-cache=@<:@yes/no/auto@:>@],
                               [cache iconv descriptors [default=auto]])],,
@@ -929,7 +932,6 @@ AC_CHECK_MEMBERS([struct tm.tm_gmtoff, struct tm.__tm_gmtoff],,,[#include <time.
 
 # Checks for libcharset
 AM_LANGINFO_CODESET
-gl_GLIBC21
 AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
 AC_CHECK_FUNCS(setlocale)
 
index 4cecc8ae7c45824f47602d1b5e83c7c21d191e81..a5d00fe26efbfb953f40ba95fa3e8e0d9745b0ea 100644 (file)
@@ -24,7 +24,6 @@
 
 #include "config.h"
 #ifdef HAVE_SPLICE
-#define _GNU_SOURCE
 #include <sys/stat.h>
 #include <unistd.h>
 #include <fcntl.h>
index a301dff9a071258acb4d98d5514feb2edb7ccfa8..7369c6711f0c571e787b25fda78bb049b66ecbb4 100644 (file)
@@ -20,7 +20,6 @@
  */
 
 /* Prologue {{{1 */
-#define _GNU_SOURCE
 #include "config.h"
 
 #include <gstdio.h>
index 5e4def74a5554a5d92afca2826ba2f8bdd7cdec1..6c1fe20fe8c30a3cdab1bc22132239b447f2bb58 100644 (file)
@@ -33,7 +33,6 @@
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#define _GNU_SOURCE
 #include <fcntl.h>
 #include <errno.h>
 #ifdef HAVE_GRP_H
index 92d2645b0c865fd20687c2795f73c501c9f04baa..d38928b930d9121b477f63d41632179f9ef2e691 100644 (file)
 
 #else /* !G_OS_WIN32 */
 
-/* need this for struct ucred on Linux */
-#ifdef __linux__
-#define __USE_GNU
 #include <sys/types.h>
-#include <sys/socket.h>
-#undef __USE_GNU
-#endif
 
-#include <sys/types.h>
 #include <arpa/inet.h>
 #include <arpa/nameser.h>
 #if defined(HAVE_ARPA_NAMESER_COMPAT_H) && !defined(GETSHORT)
 #include <arpa/nameser_compat.h>
 #endif
-
-#ifndef T_SRV
-#define T_SRV 33
-#endif
-
-/* We're supposed to define _GNU_SOURCE to get EAI_NODATA, but that
- * won't actually work since <features.h> has already been included at
- * this point. So we define __USE_GNU instead.
- */
-#define __USE_GNU
 #include <netdb.h>
-#undef __USE_GNU
 #include <netinet/in.h>
 #include <netinet/tcp.h>
 #include <resolv.h>
 #include <sys/socket.h>
 #include <sys/un.h>
 
+#ifndef T_SRV
+#define T_SRV 33
+#endif
+
 #ifndef _PATH_RESCONF
 #define _PATH_RESCONF "/etc/resolv.conf"
 #endif
index 275edf16b4d39763af8a46538842e6d8a3bdf9b2..e75d5b8d8436f6f177e45d9327858dd5994c29d2 100644 (file)
@@ -20,7 +20,6 @@
  */
 
 /* Prelude {{{1 */
-#define _GNU_SOURCE
 #include "config.h"
 
 #include <glib.h>
index a1094be78b2f83aed93dcc8b734f61c3166126f0..8658b6703f557df9cf72d1e329b4b49900982e37 100644 (file)
@@ -37,8 +37,6 @@
 
 /* ---------------------------------------------------------------------------------------------------- */
 #ifdef __linux__
-
-#define _GNU_SOURCE
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/un.h>
index 0348512fc840b8c981953b8a50ff78629a2115c0..b92238f2ded3b2efb355baba981a85b9d97e9e83 100644 (file)
@@ -31,8 +31,6 @@
  * <filename>gio-unix-2.0.pc</filename> pkg-config file when using it.
  */
 
-#define _GNU_SOURCE /* for F_DUPFD_CLOEXEC */
-
 #include "config.h"
 
 #include <sys/types.h>
index a8fbf4636ab0a4a571463aeaf73e7d4f2600bb8f..8a526d1f53e179e0dea8ab0bd9d8a1da61c33d10 100644 (file)
@@ -20,8 +20,6 @@
 
 #include "config.h"
 
-#define _GNU_SOURCE
-
 /* We want to build the fork-based version, not the threaded version. */
 #undef HAVE_PTHREAD
 
index e582d570f7f3aa119469d939e42f3928bd843238..3fba622c3dd2f38c888067f4f93a73e42ff03439 100644 (file)
@@ -20,6 +20,8 @@
  * Author: David Zeuthen <davidz@redhat.com>
  */
 
+#include "config.h"
+
 #include <gio/gio.h>
 #include <unistd.h>
 #include <string.h>
index e7247785262841ffc2902abd32c6dc18428693c8..c6eef4a52614567d0ba1ba951975a8a6bad7f358 100644 (file)
  * system, work around it here (or better, fix the system or tell
  * people to use a better one).
  */
-#ifndef _GNU_SOURCE
-#define _G_GNU_SOURCE_TEMPORARILY_DEFINED
-#define _GNU_SOURCE
-#endif
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 #include <sys/wait.h>
 #include <stdlib.h>
 #include <fcntl.h>
-#ifdef _G_GNU_SOURCE_TEMPORARILY_DEFINED
-#undef _GNU_SOURCE
-#undef _G_GNU_SOURCE_TEMPORARILY_DEFINED
-#endif
 
 #include <glib.h>
 
index 0be3733dbcd59eebf7c0d44ea56d1b345bd01203..f31405aa83e9b735484dc9ce7be257af67efdd26 100644 (file)
  * MT safe
  */
 
-#ifndef _WIN32
-/* for pipe2; need to define it first to avoid
- * other headers pulling in unistd.h
- */
-/* The meaning of_GNU_SOURCE that is intended here is present only on
- * Linux; avoid the possibility that some misguided header in MinGW
- * looks at it. Ideally we should define _GNU_SOURCE only on platforms
- * where we know what it means and that is what we want here
- * (i.e. Linux with glibc). After all, there might be some other POSIX
- * platform even where _GNU_SOURCE is used for some unrelated change
- * in semantics that isn't wanted. Sigh.
- */
-#define _GNU_SOURCE
-#endif
-
 #include "config.h"
 #include "glibconfig.h"
 
index 7ef15d3d8db79f399d9167df6dc26d226b5bdc3c..9108acb1b2fc7dba503ce3e83fc2385b4e1ec6dd 100644 (file)
 
 #include "config.h"
 
-#ifndef _WIN32
-#define _GNU_SOURCE            /* For vasprintf */
-#endif
-
 #include <stdarg.h>
 #include <stdlib.h>
 #include <stdio.h>
index 03b2db929f2ca587413bea877f89ac84c19c6194..db4bed21e6d5108a7f2beee46658d94eafcb4faf 100644 (file)
@@ -34,7 +34,6 @@
 
 #include "config.h"
 
-#define _GNU_SOURCE
 #include <limits.h>
 #include <stdlib.h>
 #include <string.h>
index 05de6b368157ca8a9b6c431f68877cd40251066f..76bcf0485b7e3da9bcf3a4a632026bb26731e329 100644 (file)
@@ -25,7 +25,7 @@
 #  define HAVE_COMPLIANT_POSIX_MEMALIGN 1
 #endif
 
-#ifdef HAVE_COMPLIANT_POSIX_MEMALIGN
+#if defined(HAVE_COMPLIANT_POSIX_MEMALIGN) && !defined(_XOPEN_SOURCE)
 #define _XOPEN_SOURCE 600       /* posix_memalign() */
 #endif
 #include <stdlib.h>             /* posix_memalign() */
index 04f686b401f2969c02fa50d0109aff8fa0aa81c4..3924b028de58ce6c6885a7712ebafbc89701612c 100644 (file)
@@ -30,8 +30,6 @@
 
 #include "config.h"
 
-#define _GNU_SOURCE             /* For stpcpy */
-
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>