From 769fd4ce202225ba1f2621bbefb803ee9a268ebf Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 3 Dec 2012 16:57:01 -0500 Subject: [PATCH] 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. --- include/dirent.h | 9 ++------- include/signal.h | 2 +- include/stdio.h | 3 --- include/string.h | 3 --- include/sys/stat.h | 5 +---- 5 files changed, 4 insertions(+), 18 deletions(-) diff --git a/include/dirent.h b/include/dirent.h index 726067f6..d445f80a 100644 --- a/include/dirent.h +++ b/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 } diff --git a/include/signal.h b/include/signal.h index 89080ab6..b24f43a5 100644 --- a/include/signal.h +++ b/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 diff --git a/include/stdio.h b/include/stdio.h index 9a209376..6e8e6454 100644 --- a/include/stdio.h +++ b/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 diff --git a/include/string.h b/include/string.h index 33f01378..c2f8eb55 100644 --- a/include/string.h +++ b/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 diff --git a/include/sys/stat.h b/include/sys/stat.h index c63c6b8b..c6abab5a 100644 --- a/include/sys/stat.h +++ b/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