diff options
author | Yaakov Selkowitz <yselkowi@redhat.com> | 2016-08-12 03:16:52 -0500 |
---|---|---|
committer | Yaakov Selkowitz <yselkowi@redhat.com> | 2016-08-12 11:43:14 -0500 |
commit | b14a1dbc8643f4f93ab31c19a1ebf338d7108baa (patch) | |
tree | 60a924540fb17bafa67b7c8654ae191b53a08c9b | |
parent | 9169111acfc85729f151b5f33a30738351164f83 (diff) | |
download | cygnal-b14a1dbc8643f4f93ab31c19a1ebf338d7108baa.tar.gz cygnal-b14a1dbc8643f4f93ab31c19a1ebf338d7108baa.tar.bz2 cygnal-b14a1dbc8643f4f93ab31c19a1ebf338d7108baa.zip |
Define va_list in stdio.h and wchar.h
This typedef, along with that of FILE in wchar.h, were XSI prior to
inclusion in POSIX.1-2008.
Fixes: https://sourceware.org/ml/newlib/2016/msg00640.html
Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
-rw-r--r-- | newlib/libc/include/stdio.h | 13 | ||||
-rw-r--r-- | newlib/libc/include/wchar.h | 21 |
2 files changed, 31 insertions, 3 deletions
diff --git a/newlib/libc/include/stdio.h b/newlib/libc/include/stdio.h index 866d8167d..097b0f665 100644 --- a/newlib/libc/include/stdio.h +++ b/newlib/libc/include/stdio.h @@ -35,9 +35,22 @@ #include <sys/cdefs.h> #include <stddef.h> +/* typedef only __gnuc_va_list, used throughout the header */ #define __need___va_list #include <stdarg.h> +/* typedef va_list only when required */ +#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE +#ifdef __GNUC__ +#ifndef _VA_LIST_DEFINED +typedef __gnuc_va_list va_list; +#define _VA_LIST_DEFINED +#endif +#else /* !__GNUC__ */ +#include <stdarg.h> +#endif +#endif /* __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE */ + /* * <sys/reent.h> defines __FILE, _fpos_t. * They must be defined there because struct _reent needs them (and we don't diff --git a/newlib/libc/include/wchar.h b/newlib/libc/include/wchar.h index e5b840dbe..f4996ecc5 100644 --- a/newlib/libc/include/wchar.h +++ b/newlib/libc/include/wchar.h @@ -11,15 +11,28 @@ #define __need_NULL #include <stddef.h> -#define __need___va_list -#include <stdarg.h> - /* For _mbstate_t definition. */ #include <sys/_types.h> #include <sys/cdefs.h> /* For __STDC_ISO_10646__ */ #include <sys/features.h> +/* typedef only __gnuc_va_list, used throughout the header */ +#define __need___va_list +#include <stdarg.h> + +/* typedef va_list only when required */ +#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE +#ifdef __GNUC__ +#ifndef _VA_LIST_DEFINED +typedef __gnuc_va_list va_list; +#define _VA_LIST_DEFINED +#endif +#else /* !__GNUC__ */ +#include <stdarg.h> +#endif +#endif /* __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE */ + #if __XSI_VISIBLE /* && __XSI_VISIBLE < 800 */ #include <wctype.h> #endif @@ -52,11 +65,13 @@ _BEGIN_STD_C +#if __POSIX_VISIBLE >= 200809 || _XSI_VISIBLE /* As in stdio.h, <sys/reent.h> defines __FILE. */ #if !defined(__FILE_defined) typedef __FILE FILE; # define __FILE_defined #endif +#endif /* As required by POSIX.1-2008, declare tm as incomplete type. The actual definition is in time.h. */ |