Files
RedBear-OS/local/patches/relibc/P3-wchar-stdio-include-order.patch
T

50 lines
1.4 KiB
Diff

diff --git a/src/header/wchar/cbindgen.toml b/src/header/wchar/cbindgen.toml
index a31881ba..9e206fd1 100644
--- a/src/header/wchar/cbindgen.toml
+++ b/src/header/wchar/cbindgen.toml
@@ -1,17 +1,13 @@
sys_includes = [
- "stdio.h",
- "time.h",
+ "stdarg.h",
"features.h",
]
after_includes = """
-// int32_t, uint32_t, WCHAR_MIN, WCHAR_MAX
-#include <stdint.h>
-
#ifndef _WCHAR_T
#define _WCHAR_T
#ifndef __cplusplus
#ifndef __WCHAR_TYPE__
- #define __WCHAR_TYPE__ int32_t
+ #define __WCHAR_TYPE__ int
#endif
typedef __WCHAR_TYPE__ wchar_t;
#endif // __cplusplus
@@ -20,7 +16,7 @@ after_includes = """
#ifndef _WINT_T
#define _WINT_T
#ifndef __WINT_TYPE__
- #define __WINT_TYPE__ uint32_t
+ #define __WINT_TYPE__ unsigned int
#endif
typedef __WINT_TYPE__ wint_t;
#endif // _WINT_T
@@ -31,6 +27,15 @@ after_includes = """
#include <stddef.h>
#define WEOF (0xffffffffu)
+
+// FILE. Avoid including stdio.h from wchar.h: gnulib wrappers can reach wchar.h
+// recursively through stdio.h -> stdint.h -> inttypes.h before wchar prerequisite
+// types are visible. wchar.h only needs FILE as an opaque pointer type.
+typedef struct FILE FILE;
+
+// Avoid including time.h from wchar.h for the same wrapper-recursion reason.
+// wcsftime only needs struct tm as an opaque pointer type.
+struct tm;
"""
include_guard = "_RELIBC_WCHAR_H"
language = "C"