summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYaakov Selkowitz <yselkowi@redhat.com>2016-08-12 03:16:52 -0500
committerYaakov Selkowitz <yselkowi@redhat.com>2016-08-12 11:43:14 -0500
commitb14a1dbc8643f4f93ab31c19a1ebf338d7108baa (patch)
tree60a924540fb17bafa67b7c8654ae191b53a08c9b
parent9169111acfc85729f151b5f33a30738351164f83 (diff)
downloadcygnal-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.h13
-rw-r--r--newlib/libc/include/wchar.h21
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. */