提交 a3e2f3c2 编写于 作者: R Rich Felker

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.
上级 8813c956
...@@ -21,6 +21,7 @@ TYPEDEF int ssize_t; ...@@ -21,6 +21,7 @@ TYPEDEF int ssize_t;
TYPEDEF int ptrdiff_t; TYPEDEF int ptrdiff_t;
TYPEDEF __builtin_va_list va_list; TYPEDEF __builtin_va_list va_list;
TYPEDEF __builtin_va_list __isoc_va_list;
#ifndef __cplusplus #ifndef __cplusplus
TYPEDEF unsigned wchar_t; TYPEDEF unsigned wchar_t;
......
...@@ -22,8 +22,10 @@ TYPEDEF int ptrdiff_t; ...@@ -22,8 +22,10 @@ TYPEDEF int ptrdiff_t;
#if __GNUC__ >= 3 #if __GNUC__ >= 3
TYPEDEF __builtin_va_list va_list; TYPEDEF __builtin_va_list va_list;
TYPEDEF __builtin_va_list __isoc_va_list;
#else #else
TYPEDEF struct __va_list * va_list; TYPEDEF struct __va_list * va_list;
TYPEDEF struct __va_list * __isoc_va_list;
#endif #endif
#ifndef __cplusplus #ifndef __cplusplus
......
...@@ -21,6 +21,7 @@ TYPEDEF int ssize_t; ...@@ -21,6 +21,7 @@ TYPEDEF int ssize_t;
TYPEDEF int ptrdiff_t; TYPEDEF int ptrdiff_t;
TYPEDEF __builtin_va_list va_list; TYPEDEF __builtin_va_list va_list;
TYPEDEF __builtin_va_list __isoc_va_list;
#ifndef __cplusplus #ifndef __cplusplus
TYPEDEF int wchar_t; TYPEDEF int wchar_t;
......
...@@ -21,6 +21,7 @@ TYPEDEF int ssize_t; ...@@ -21,6 +21,7 @@ TYPEDEF int ssize_t;
TYPEDEF int ptrdiff_t; TYPEDEF int ptrdiff_t;
TYPEDEF __builtin_va_list va_list; TYPEDEF __builtin_va_list va_list;
TYPEDEF __builtin_va_list __isoc_va_list;
#ifndef __cplusplus #ifndef __cplusplus
TYPEDEF int wchar_t; TYPEDEF int wchar_t;
......
...@@ -21,6 +21,7 @@ TYPEDEF int ssize_t; ...@@ -21,6 +21,7 @@ TYPEDEF int ssize_t;
TYPEDEF int ptrdiff_t; TYPEDEF int ptrdiff_t;
TYPEDEF __builtin_va_list va_list; TYPEDEF __builtin_va_list va_list;
TYPEDEF __builtin_va_list __isoc_va_list;
#ifndef __cplusplus #ifndef __cplusplus
TYPEDEF long wchar_t; TYPEDEF long wchar_t;
......
...@@ -20,6 +20,7 @@ TYPEDEF unsigned long size_t; ...@@ -20,6 +20,7 @@ TYPEDEF unsigned long size_t;
TYPEDEF long ssize_t; TYPEDEF long ssize_t;
TYPEDEF long ptrdiff_t; TYPEDEF long ptrdiff_t;
TYPEDEF __builtin_va_list va_list; TYPEDEF __builtin_va_list va_list;
TYPEDEF __builtin_va_list __isoc_va_list;
#ifndef __cplusplus #ifndef __cplusplus
TYPEDEF int wchar_t; TYPEDEF int wchar_t;
......
...@@ -8,7 +8,7 @@ extern "C" { ...@@ -8,7 +8,7 @@ extern "C" {
#include <features.h> #include <features.h>
#define __NEED_FILE #define __NEED_FILE
#define __NEED_va_list #define __NEED___isoc_va_list
#define __NEED_size_t #define __NEED_size_t
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
...@@ -16,6 +16,7 @@ extern "C" { ...@@ -16,6 +16,7 @@ extern "C" {
|| defined(_BSD_SOURCE) || defined(_BSD_SOURCE)
#define __NEED_ssize_t #define __NEED_ssize_t
#define __NEED_off_t #define __NEED_off_t
#define __NEED_va_list
#endif #endif
#include <bits/alltypes.h> #include <bits/alltypes.h>
...@@ -99,17 +100,17 @@ int fprintf(FILE *__restrict, const char *__restrict, ...); ...@@ -99,17 +100,17 @@ int fprintf(FILE *__restrict, const char *__restrict, ...);
int sprintf(char *__restrict, const char *__restrict, ...); int sprintf(char *__restrict, const char *__restrict, ...);
int snprintf(char *__restrict, size_t, const char *__restrict, ...); int snprintf(char *__restrict, size_t, const char *__restrict, ...);
int vprintf(const char *__restrict, va_list); int vprintf(const char *__restrict, __isoc_va_list);
int vfprintf(FILE *__restrict, const char *__restrict, va_list); int vfprintf(FILE *__restrict, const char *__restrict, __isoc_va_list);
int vsprintf(char *__restrict, const char *__restrict, va_list); int vsprintf(char *__restrict, const char *__restrict, __isoc_va_list);
int vsnprintf(char *__restrict, size_t, const char *__restrict, va_list); int vsnprintf(char *__restrict, size_t, const char *__restrict, __isoc_va_list);
int scanf(const char *__restrict, ...); int scanf(const char *__restrict, ...);
int fscanf(FILE *__restrict, const char *__restrict, ...); int fscanf(FILE *__restrict, const char *__restrict, ...);
int sscanf(const char *__restrict, const char *__restrict, ...); int sscanf(const char *__restrict, const char *__restrict, ...);
int vscanf(const char *__restrict, va_list); int vscanf(const char *__restrict, __isoc_va_list);
int vfscanf(FILE *__restrict, const char *__restrict, va_list); int vfscanf(FILE *__restrict, const char *__restrict, __isoc_va_list);
int vsscanf(const char *__restrict, const char *__restrict, va_list); int vsscanf(const char *__restrict, const char *__restrict, __isoc_va_list);
void perror(const char *); void perror(const char *);
...@@ -131,7 +132,7 @@ int fileno(FILE *); ...@@ -131,7 +132,7 @@ int fileno(FILE *);
int fseeko(FILE *, off_t, int); int fseeko(FILE *, off_t, int);
off_t ftello(FILE *); off_t ftello(FILE *);
int dprintf(int, const char *__restrict, ...); 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 *); void flockfile(FILE *);
int ftrylockfile(FILE *); int ftrylockfile(FILE *);
void funlockfile(FILE *); void funlockfile(FILE *);
...@@ -171,7 +172,7 @@ int getw(FILE *); ...@@ -171,7 +172,7 @@ int getw(FILE *);
int putw(int, FILE *); int putw(int, FILE *);
char *fgetln(FILE *, size_t *); char *fgetln(FILE *, size_t *);
int asprintf(char **, const char *, ...); int asprintf(char **, const char *, ...);
int vasprintf(char **, const char *, va_list); int vasprintf(char **, const char *, __isoc_va_list);
#endif #endif
#ifdef _GNU_SOURCE #ifdef _GNU_SOURCE
......
...@@ -8,7 +8,7 @@ extern "C" { ...@@ -8,7 +8,7 @@ extern "C" {
#include <features.h> #include <features.h>
#define __NEED_FILE #define __NEED_FILE
#define __NEED_va_list #define __NEED___isoc_va_list
#define __NEED_size_t #define __NEED_size_t
#define __NEED_wchar_t #define __NEED_wchar_t
#define __NEED_wint_t #define __NEED_wint_t
...@@ -16,6 +16,7 @@ extern "C" { ...@@ -16,6 +16,7 @@ extern "C" {
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
#define __NEED_locale_t #define __NEED_locale_t
#define __NEED_va_list
#endif #endif
#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) #if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
...@@ -105,17 +106,17 @@ int wprintf (const wchar_t *__restrict, ...); ...@@ -105,17 +106,17 @@ int wprintf (const wchar_t *__restrict, ...);
int fwprintf (FILE *__restrict, const wchar_t *__restrict, ...); int fwprintf (FILE *__restrict, const wchar_t *__restrict, ...);
int swprintf (wchar_t *__restrict, size_t, const wchar_t *__restrict, ...); int swprintf (wchar_t *__restrict, size_t, const wchar_t *__restrict, ...);
int vwprintf (const wchar_t *__restrict, va_list); int vwprintf (const wchar_t *__restrict, __isoc_va_list);
int vfwprintf (FILE *__restrict, const wchar_t *__restrict, va_list); int vfwprintf (FILE *__restrict, const wchar_t *__restrict, __isoc_va_list);
int vswprintf (wchar_t *__restrict, size_t, const wchar_t *__restrict, va_list); int vswprintf (wchar_t *__restrict, size_t, const wchar_t *__restrict, __isoc_va_list);
int wscanf (const wchar_t *__restrict, ...); int wscanf (const wchar_t *__restrict, ...);
int fwscanf (FILE *__restrict, const wchar_t *__restrict, ...); int fwscanf (FILE *__restrict, const wchar_t *__restrict, ...);
int swscanf (const wchar_t *__restrict, const wchar_t *__restrict, ...); int swscanf (const wchar_t *__restrict, const wchar_t *__restrict, ...);
int vwscanf (const wchar_t *__restrict, va_list); int vwscanf (const wchar_t *__restrict, __isoc_va_list);
int vfwscanf (FILE *__restrict, const wchar_t *__restrict, va_list); int vfwscanf (FILE *__restrict, const wchar_t *__restrict, __isoc_va_list);
int vswscanf (const wchar_t *__restrict, const wchar_t *__restrict, va_list); int vswscanf (const wchar_t *__restrict, const wchar_t *__restrict, __isoc_va_list);
wint_t fgetwc (FILE *); wint_t fgetwc (FILE *);
wint_t getwc (FILE *); wint_t getwc (FILE *);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册