diff options
| author | Rich Felker <dalias@aerifal.cx> | 2013-06-25 22:26:20 -0400 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2013-06-25 22:26:20 -0400 | 
| commit | a3e2f3c2b15053a2f9faccc62947b82f2219599f (patch) | |
| tree | c5b3ffd73fa661da51da13e76c897f2ab90aa968 | |
| parent | 8813c956e506d57065b7089a98c8fcef1ef58c47 (diff) | |
| download | musl-a3e2f3c2b15053a2f9faccc62947b82f2219599f.tar.gz | |
respect iso c namespace in stdio.h and wchar.h regarding va_list
despite declaring functions that take arguments of type va_list, these
headers are not permitted by the c standard to expose the definition
of va_list, so an alias for the type must be used. the name
__isoc_va_list was chosen to convey that the purpose of this alternate
name is for iso c conformance, and to avoid the multitude of names
which gcc mangles with its hideous "fixincludes" monstrosity, leading
to serious header breakage if these "fixes" are run.
| -rwxr-xr-x | arch/arm/bits/alltypes.h.sh | 1 | ||||
| -rwxr-xr-x | arch/i386/bits/alltypes.h.sh | 2 | ||||
| -rwxr-xr-x | arch/microblaze/bits/alltypes.h.sh | 1 | ||||
| -rwxr-xr-x | arch/mips/bits/alltypes.h.sh | 1 | ||||
| -rwxr-xr-x | arch/powerpc/bits/alltypes.h.sh | 1 | ||||
| -rwxr-xr-x | arch/x86_64/bits/alltypes.h.sh | 1 | ||||
| -rw-r--r-- | include/stdio.h | 21 | ||||
| -rw-r--r-- | include/wchar.h | 15 | 
8 files changed, 26 insertions, 17 deletions
| diff --git a/arch/arm/bits/alltypes.h.sh b/arch/arm/bits/alltypes.h.sh index 62e0327c..748b8730 100755 --- a/arch/arm/bits/alltypes.h.sh +++ b/arch/arm/bits/alltypes.h.sh @@ -21,6 +21,7 @@ TYPEDEF int ssize_t;  TYPEDEF int ptrdiff_t;  TYPEDEF __builtin_va_list va_list; +TYPEDEF __builtin_va_list __isoc_va_list;  #ifndef __cplusplus  TYPEDEF unsigned wchar_t; diff --git a/arch/i386/bits/alltypes.h.sh b/arch/i386/bits/alltypes.h.sh index 76c50ec1..85776a83 100755 --- a/arch/i386/bits/alltypes.h.sh +++ b/arch/i386/bits/alltypes.h.sh @@ -22,8 +22,10 @@ TYPEDEF int ptrdiff_t;  #if __GNUC__ >= 3  TYPEDEF __builtin_va_list va_list; +TYPEDEF __builtin_va_list __isoc_va_list;  #else  TYPEDEF struct __va_list * va_list; +TYPEDEF struct __va_list * __isoc_va_list;  #endif  #ifndef __cplusplus diff --git a/arch/microblaze/bits/alltypes.h.sh b/arch/microblaze/bits/alltypes.h.sh index 268321a1..a5acd494 100755 --- a/arch/microblaze/bits/alltypes.h.sh +++ b/arch/microblaze/bits/alltypes.h.sh @@ -21,6 +21,7 @@ TYPEDEF int ssize_t;  TYPEDEF int ptrdiff_t;  TYPEDEF __builtin_va_list va_list; +TYPEDEF __builtin_va_list __isoc_va_list;  #ifndef __cplusplus  TYPEDEF int wchar_t; diff --git a/arch/mips/bits/alltypes.h.sh b/arch/mips/bits/alltypes.h.sh index 268321a1..a5acd494 100755 --- a/arch/mips/bits/alltypes.h.sh +++ b/arch/mips/bits/alltypes.h.sh @@ -21,6 +21,7 @@ TYPEDEF int ssize_t;  TYPEDEF int ptrdiff_t;  TYPEDEF __builtin_va_list va_list; +TYPEDEF __builtin_va_list __isoc_va_list;  #ifndef __cplusplus  TYPEDEF int wchar_t; diff --git a/arch/powerpc/bits/alltypes.h.sh b/arch/powerpc/bits/alltypes.h.sh index 5fe05e27..77d335bb 100755 --- a/arch/powerpc/bits/alltypes.h.sh +++ b/arch/powerpc/bits/alltypes.h.sh @@ -21,6 +21,7 @@ TYPEDEF int ssize_t;  TYPEDEF int ptrdiff_t;  TYPEDEF __builtin_va_list va_list; +TYPEDEF __builtin_va_list __isoc_va_list;  #ifndef __cplusplus  TYPEDEF long wchar_t; diff --git a/arch/x86_64/bits/alltypes.h.sh b/arch/x86_64/bits/alltypes.h.sh index a6c90327..d3550f56 100755 --- a/arch/x86_64/bits/alltypes.h.sh +++ b/arch/x86_64/bits/alltypes.h.sh @@ -20,6 +20,7 @@ TYPEDEF unsigned long size_t;  TYPEDEF long ssize_t;  TYPEDEF long ptrdiff_t;  TYPEDEF __builtin_va_list va_list; +TYPEDEF __builtin_va_list __isoc_va_list;  #ifndef __cplusplus  TYPEDEF int wchar_t; diff --git a/include/stdio.h b/include/stdio.h index f6488017..fe7ff51d 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -8,7 +8,7 @@ extern "C" {  #include <features.h>  #define __NEED_FILE -#define __NEED_va_list +#define __NEED___isoc_va_list  #define __NEED_size_t  #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ @@ -16,6 +16,7 @@ extern "C" {   || defined(_BSD_SOURCE)  #define __NEED_ssize_t  #define __NEED_off_t +#define __NEED_va_list  #endif  #include <bits/alltypes.h> @@ -99,17 +100,17 @@ int fprintf(FILE *__restrict, const char *__restrict, ...);  int sprintf(char *__restrict, const char *__restrict, ...);  int snprintf(char *__restrict, size_t, const char *__restrict, ...); -int vprintf(const char *__restrict, va_list); -int vfprintf(FILE *__restrict, const char *__restrict, va_list); -int vsprintf(char *__restrict, const char *__restrict, va_list); -int vsnprintf(char *__restrict, size_t, const char *__restrict, va_list); +int vprintf(const char *__restrict, __isoc_va_list); +int vfprintf(FILE *__restrict, const char *__restrict, __isoc_va_list); +int vsprintf(char *__restrict, const char *__restrict, __isoc_va_list); +int vsnprintf(char *__restrict, size_t, const char *__restrict, __isoc_va_list);  int scanf(const char *__restrict, ...);  int fscanf(FILE *__restrict, const char *__restrict, ...);  int sscanf(const char *__restrict, const char *__restrict, ...); -int vscanf(const char *__restrict, va_list); -int vfscanf(FILE *__restrict, const char *__restrict, va_list); -int vsscanf(const char *__restrict, const char *__restrict, va_list); +int vscanf(const char *__restrict, __isoc_va_list); +int vfscanf(FILE *__restrict, const char *__restrict, __isoc_va_list); +int vsscanf(const char *__restrict, const char *__restrict, __isoc_va_list);  void perror(const char *); @@ -131,7 +132,7 @@ int fileno(FILE *);  int fseeko(FILE *, off_t, int);  off_t ftello(FILE *);  int dprintf(int, const char *__restrict, ...); -int vdprintf(int, const char *__restrict, va_list); +int vdprintf(int, const char *__restrict, __isoc_va_list);  void flockfile(FILE *);  int ftrylockfile(FILE *);  void funlockfile(FILE *); @@ -171,7 +172,7 @@ int getw(FILE *);  int putw(int, FILE *);  char *fgetln(FILE *, size_t *);  int asprintf(char **, const char *, ...); -int vasprintf(char **, const char *, va_list); +int vasprintf(char **, const char *, __isoc_va_list);  #endif  #ifdef _GNU_SOURCE diff --git a/include/wchar.h b/include/wchar.h index d8738818..0f1f6d26 100644 --- a/include/wchar.h +++ b/include/wchar.h @@ -8,7 +8,7 @@ extern "C" {  #include <features.h>  #define __NEED_FILE -#define __NEED_va_list +#define __NEED___isoc_va_list  #define __NEED_size_t  #define __NEED_wchar_t  #define __NEED_wint_t @@ -16,6 +16,7 @@ extern "C" {  #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \   || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)  #define __NEED_locale_t +#define __NEED_va_list  #endif  #if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) @@ -105,17 +106,17 @@ int wprintf (const wchar_t *__restrict, ...);  int fwprintf (FILE *__restrict, const wchar_t *__restrict, ...);  int swprintf (wchar_t *__restrict, size_t, const wchar_t *__restrict, ...); -int vwprintf (const wchar_t *__restrict, va_list); -int vfwprintf (FILE *__restrict, const wchar_t *__restrict, va_list); -int vswprintf (wchar_t *__restrict, size_t, const wchar_t *__restrict, va_list); +int vwprintf (const wchar_t *__restrict, __isoc_va_list); +int vfwprintf (FILE *__restrict, const wchar_t *__restrict, __isoc_va_list); +int vswprintf (wchar_t *__restrict, size_t, const wchar_t *__restrict, __isoc_va_list);  int wscanf (const wchar_t *__restrict, ...);  int fwscanf (FILE *__restrict, const wchar_t *__restrict, ...);  int swscanf (const wchar_t *__restrict, const wchar_t *__restrict, ...); -int vwscanf (const wchar_t *__restrict, va_list); -int vfwscanf (FILE *__restrict, const wchar_t *__restrict, va_list); -int vswscanf (const wchar_t *__restrict, const wchar_t *__restrict, va_list); +int vwscanf (const wchar_t *__restrict, __isoc_va_list); +int vfwscanf (FILE *__restrict, const wchar_t *__restrict, __isoc_va_list); +int vswscanf (const wchar_t *__restrict, const wchar_t *__restrict, __isoc_va_list);  wint_t fgetwc (FILE *);  wint_t getwc (FILE *); | 
