Browse Source

feature test macros: make _GNU_SOURCE enable everything

previously, a few BSD features were enabled only by _BSD_SOURCE, not
by _GNU_SOURCE. since _BSD_SOURCE is default in the absence of other
feature test macros, this made adding _GNU_SOURCE to a project not a
purely additive feature test macro; it actually caused some features
to be suppressed.

most of the changes made by this patch actually bring musl in closer
alignment with the glibc behavior for _GNU_SOURCE. the only exceptions
are the added visibility of functions like strlcpy which were BSD-only
due to being disliked/rejected by glibc maintainers. here, I feel the
consistency of having _GNU_SOURCE mean "everything", and especially
the property of it being purely additive, are more valuable than
hiding functions which glibc does not have.
Rich Felker 12 years ago
parent
commit
769fd4ce20
5 changed files with 4 additions and 18 deletions
  1. 2 7
      include/dirent.h
  2. 1 1
      include/signal.h
  3. 0 3
      include/stdio.h
  4. 0 3
      include/string.h
  5. 1 4
      include/sys/stat.h

+ 2 - 7
include/dirent.h

@@ -9,7 +9,7 @@ extern "C" {
 
 #define __NEED_ino_t
 #define __NEED_off_t
-#ifdef _BSD_SOURCE
+#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
 #define __NEED_size_t
 #endif
 
@@ -53,16 +53,13 @@ int scandir(const char *, struct dirent ***, int (*)(const struct dirent *), int
 #define DT_WHT 14
 #define IFTODT(x) ((x)>>12 & 017)
 #define DTTOIF(x) ((x)<<12)
+int getdents(int, struct dirent *, size_t);
 #endif
 
 #ifdef _GNU_SOURCE
 int versionsort(const struct dirent **, const struct dirent **);
 #endif
 
-#ifdef _BSD_SOURCE
-int getdents(int, struct dirent *, size_t);
-#endif
-
 #if defined(_LARGEFILE64_SOURCE) || defined(_GNU_SOURCE)
 #define dirent64 dirent
 #define readdir64 readdir
@@ -72,10 +69,8 @@ int getdents(int, struct dirent *, size_t);
 #define versionsort64 versionsort
 #define off64_t off_t
 #define ino64_t ino_t
-#ifdef _BSD_SOURCE
 #define getdents64 getdents
 #endif
-#endif
 
 #ifdef __cplusplus
 }

+ 1 - 1
include/signal.h

@@ -212,7 +212,7 @@ void (*sigset(int, void (*)(int)))(int);
 #define NSIG _NSIG
 #endif
 
-#ifdef _BSD_SOURCE
+#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
 typedef void (*sig_t)(int);
 #endif
 

+ 0 - 3
include/stdio.h

@@ -174,9 +174,6 @@ int ferror_unlocked(FILE *);
 int fileno_unlocked(FILE *);
 int getw(FILE *);
 int putw(int, FILE *);
-#endif
-
-#ifdef _BSD_SOURCE
 char *fgetln(FILE *, size_t *);
 #endif
 

+ 0 - 3
include/string.h

@@ -81,9 +81,6 @@ void *memccpy (void *__restrict, const void *__restrict, int, size_t);
 
 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
 char *strsep(char **, const char *);
-#endif
-
-#ifdef _BSD_SOURCE
 size_t strlcat (char *, const char *, size_t);
 size_t strlcpy (char *, const char *, size_t);
 #endif

+ 1 - 4
include/sys/stat.h

@@ -88,11 +88,8 @@ int mkfifoat(int, const char *, mode_t);
 int futimens(int, const struct timespec [2]);
 int utimensat(int, const char *, const struct timespec [2], int);
 
-#ifdef _BSD_SOURCE
-int lchmod(const char *, mode_t);
-#endif
-
 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
+int lchmod(const char *, mode_t);
 #define S_IREAD S_IRUSR
 #define S_IWRITE S_IWUSR
 #define S_IEXEC S_IXUSR