summaryrefslogtreecommitdiff
path: root/include/wchar.h
diff options
context:
space:
mode:
authorjvoisin2023-12-15 16:08:12 +0100
committerjvoisin2023-12-15 21:41:08 +0100
commit57a3e9c1c7507b5ce56122429cc3649009a4ecc7 (patch)
treef4fb73a124fd3de49e5cef291077003d797dc2c9 /include/wchar.h
parent8342bc50a16a2158fef729db6cbfef874734e4dc (diff)
Remove superfluous includes
This should fix #32
Diffstat (limited to 'include/wchar.h')
-rw-r--r--include/wchar.h106
1 files changed, 34 insertions, 72 deletions
diff --git a/include/wchar.h b/include/wchar.h
index e696ddf..7a2a192 100644
--- a/include/wchar.h
+++ b/include/wchar.h
@@ -20,18 +20,6 @@
20#if !defined(__cplusplus) && !defined(__clang__) 20#if !defined(__cplusplus) && !defined(__clang__)
21__extension__ 21__extension__
22#endif 22#endif
23#include_next <limits.h>
24#if !defined(__cplusplus) && !defined(__clang__)
25__extension__
26#endif
27#include_next <stdlib.h>
28#if !defined(__cplusplus) && !defined(__clang__)
29__extension__
30#endif
31#include_next <string.h>
32#if !defined(__cplusplus) && !defined(__clang__)
33__extension__
34#endif
35#include_next <wchar.h> 23#include_next <wchar.h>
36 24
37#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 && defined(__OPTIMIZE__) && __OPTIMIZE__ > 0 25#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 0 && defined(__OPTIMIZE__) && __OPTIMIZE__ > 0
@@ -43,15 +31,12 @@ extern "C" {
43 31
44#undef fgetws 32#undef fgetws
45#undef mbsrtowcs 33#undef mbsrtowcs
46#undef mbstowcs
47#undef wcrtomb 34#undef wcrtomb
48#undef wcscat 35#undef wcscat
49#undef wcscpy 36#undef wcscpy
50#undef wcsncat 37#undef wcsncat
51#undef wcsncpy 38#undef wcsncpy
52#undef wcsrtombs 39#undef wcsrtombs
53#undef wcstombs
54#undef wctomb
55#undef wmemcpy 40#undef wmemcpy
56#undef wmemmove 41#undef wmemmove
57#undef wmemset 42#undef wmemset
@@ -62,9 +47,9 @@ __diagnose_as_builtin(__builtin_fgetws, 1, 2, 3)
62_FORTIFY_FN(fgetws) wchar_t *fgetws(wchar_t * _FORTIFY_POS0 __s, 47_FORTIFY_FN(fgetws) wchar_t *fgetws(wchar_t * _FORTIFY_POS0 __s,
63 int __n, FILE *__f) 48 int __n, FILE *__f)
64{ 49{
65 size_t __b = __bos(__s, 0); 50 __fh_size_t __b = __bos(__s, 0);
66 51
67 if ((size_t)__n > __b / sizeof(wchar_t)) 52 if ((__fh_size_t)__n > __b / sizeof(wchar_t))
68 __builtin_trap(); 53 __builtin_trap();
69 return __orig_fgetws(__s, __n, __f); 54 return __orig_fgetws(__s, __n, __f);
70} 55}
@@ -79,17 +64,17 @@ _FORTIFY_FN(mbsnrtowcs) size_t mbsnrtowcs(wchar_t * _FORTIFY_POS0 __d,
79 const char **__s, size_t __n, 64 const char **__s, size_t __n,
80 size_t __wn, mbstate_t *__st) 65 size_t __wn, mbstate_t *__st)
81{ 66{
82 size_t __b = __bos(__d, 0); 67 __fh_size_t __b = __bos(__d, 0);
83 size_t __r; 68 __fh_size_t __r;
84 69
85 if (__wn > __n / sizeof(wchar_t)) { 70 if (__wn > __n / sizeof(wchar_t)) {
86 __b /= sizeof(wchar_t); 71 __b /= sizeof(wchar_t);
87 __r = __orig_mbsnrtowcs(__d, __s, __n, __wn > __b ? __b : __wn, __st); 72 __r = __orig_mbsnrtowcs(__d, __s, __n, __wn > __b ? __b : __wn, __st);
88 if (__b < __wn && __d && *__s && __r != (size_t)-1) 73 if (__b < __wn && __d && *__s && __r != (__fh_size_t)-1)
89 __builtin_trap(); 74 __builtin_trap();
90 } else { 75 } else {
91 __r = __orig_mbsnrtowcs(__d, __s, __n > __b ? __b : __n, __wn, __st); 76 __r = __orig_mbsnrtowcs(__d, __s, __n > __b ? __b : __n, __wn, __st);
92 if (__b < __n && __d && *__s && __r != (size_t)-1) 77 if (__b < __n && __d && *__s && __r != (__fh_size_t)-1)
93 __builtin_trap(); 78 __builtin_trap();
94 } 79 }
95 return __r; 80 return __r;
@@ -103,29 +88,16 @@ _FORTIFY_FN(mbsrtowcs) size_t mbsrtowcs(wchar_t * _FORTIFY_POS0 __d,
103 const char **__s, size_t __wn, 88 const char **__s, size_t __wn,
104 mbstate_t *__st) 89 mbstate_t *__st)
105{ 90{
106 size_t __b = __bos(__d, 0); 91 __fh_size_t __b = __bos(__d, 0);
107 size_t __r; 92 __fh_size_t __r;
108 93
109 __b /= sizeof(wchar_t); 94 __b /= sizeof(wchar_t);
110 __r = __orig_mbsrtowcs(__d, __s, __wn > __b ? __b : __wn, __st); 95 __r = __orig_mbsrtowcs(__d, __s, __wn > __b ? __b : __wn, __st);
111 if (__b < __wn && __d && *__s && __r != (size_t)-1) 96 if (__b < __wn && __d && *__s && __r != (__fh_size_t)-1)
112 __builtin_trap(); 97 __builtin_trap();
113 return __r; 98 return __r;
114} 99}
115 100
116#if __has_builtin(__builtin_mbstowcs)
117__diagnose_as_builtin(__builtin_mbstowcs, 1, 2, 3)
118#endif
119_FORTIFY_FN(mbstowcs) size_t mbstowcs(wchar_t * _FORTIFY_POS0 __ws,
120 const char *__s, size_t __wn)
121{
122 size_t __b = __bos(__ws, 0);
123
124 if (__ws && __wn > __b / sizeof(wchar_t))
125 __builtin_trap();
126 return __orig_mbstowcs(__ws, __s, __wn);
127}
128
129/* FIXME clang */ 101/* FIXME clang */
130#ifndef __clang__ 102#ifndef __clang__
131#if __has_builtin(__builtin_wcrtomb) 103#if __has_builtin(__builtin_wcrtomb)
@@ -133,12 +105,13 @@ __diagnose_as_builtin(__builtin_wcrtomb, 1, 2, 3)
133#endif 105#endif
134_FORTIFY_FN(wcrtomb) size_t wcrtomb(char * __s, wchar_t __w, mbstate_t *__st) 106_FORTIFY_FN(wcrtomb) size_t wcrtomb(char * __s, wchar_t __w, mbstate_t *__st)
135{ 107{
136 if (__s && MB_LEN_MAX > __bos(__s, 2)) { 108 // In glibc, MB_LEN_MAX is typically 16 (6 in glibc versions earlier than 2.2)
137 char __buf[MB_LEN_MAX]; 109 if (__s && 16 > __bos(__s, 2)) {
138 size_t __r; 110 char __buf[16];
111 __fh_size_t __r;
139 112
140 __r = __orig_wcrtomb(__buf, __w, __st); 113 __r = __orig_wcrtomb(__buf, __w, __st);
141 if (__r == (size_t)-1) 114 if (__r == (__fh_size_t)-1)
142 return __r; 115 return __r;
143 if (__r > __bos(__s, 0)) 116 if (__r > __bos(__s, 0))
144 __builtin_trap(); 117 __builtin_trap();
@@ -155,7 +128,7 @@ __diagnose_as_builtin(__builtin_wcscat, 1, 2)
155_FORTIFY_FN(wcscat) wchar_t *wcscat(wchar_t * _FORTIFY_POS0 __d, 128_FORTIFY_FN(wcscat) wchar_t *wcscat(wchar_t * _FORTIFY_POS0 __d,
156 const wchar_t *__s) 129 const wchar_t *__s)
157{ 130{
158 size_t __b = __bos(__d, 0); 131 __fh_size_t __b = __bos(__d, 0);
159 132
160 if (wcslen(__s) + wcslen(__d) + 1 > __b / sizeof(wchar_t)) 133 if (wcslen(__s) + wcslen(__d) + 1 > __b / sizeof(wchar_t))
161 __builtin_trap(); 134 __builtin_trap();
@@ -168,7 +141,7 @@ __diagnose_as_builtin(__builtin_wcscpy, 1, 2)
168_FORTIFY_FN(wcscpy) wchar_t *wcscpy(wchar_t * _FORTIFY_POS0 __d, 141_FORTIFY_FN(wcscpy) wchar_t *wcscpy(wchar_t * _FORTIFY_POS0 __d,
169 const wchar_t *__s) 142 const wchar_t *__s)
170{ 143{
171 size_t __b = __bos(__d, 0); 144 __fh_size_t __b = __bos(__d, 0);
172 145
173 if (wcslen(__s) + 1 > __b / sizeof(wchar_t)) 146 if (wcslen(__s) + 1 > __b / sizeof(wchar_t))
174 __builtin_trap(); 147 __builtin_trap();
@@ -181,8 +154,8 @@ __diagnose_as_builtin(__builtin_wcsncat, 1, 2, 3)
181_FORTIFY_FN(wcsncat) wchar_t *wcsncat(wchar_t * _FORTIFY_POS0 __d, 154_FORTIFY_FN(wcsncat) wchar_t *wcsncat(wchar_t * _FORTIFY_POS0 __d,
182 const wchar_t *__s, size_t __n) 155 const wchar_t *__s, size_t __n)
183{ 156{
184 size_t __b = __bos(__d, 0); 157 __fh_size_t __b = __bos(__d, 0);
185 size_t __sl, __dl; 158 __fh_size_t __sl, __dl;
186 159
187 if (__n > __b / sizeof(wchar_t)) { 160 if (__n > __b / sizeof(wchar_t)) {
188 __sl = wcslen(__s); 161 __sl = wcslen(__s);
@@ -201,7 +174,7 @@ __diagnose_as_builtin(__builtin_wcsncpy, 1, 2, 3)
201_FORTIFY_FN(wcsncpy) wchar_t *wcsncpy(wchar_t * _FORTIFY_POS0 __d, 174_FORTIFY_FN(wcsncpy) wchar_t *wcsncpy(wchar_t * _FORTIFY_POS0 __d,
202 const wchar_t *__s, size_t __n) 175 const wchar_t *__s, size_t __n)
203{ 176{
204 size_t __b = __bos(__d, 0); 177 __fh_size_t __b = __bos(__d, 0);
205 178
206 if (__n > __b / sizeof(wchar_t)) 179 if (__n > __b / sizeof(wchar_t))
207 __builtin_trap(); 180 __builtin_trap();
@@ -218,17 +191,17 @@ _FORTIFY_FN(wcsnrtombs) size_t wcsnrtombs(char * _FORTIFY_POS0 __d,
218 const wchar_t **__s, size_t __wn, 191 const wchar_t **__s, size_t __wn,
219 size_t __n, mbstate_t *__st) 192 size_t __n, mbstate_t *__st)
220{ 193{
221 size_t __b = __bos(__d, 0); 194 __fh_size_t __b = __bos(__d, 0);
222 size_t __r; 195 __fh_size_t __r;
223 196
224 if (__wn > __n / sizeof(wchar_t)) { 197 if (__wn > __n / sizeof(wchar_t)) {
225 __b /= sizeof(wchar_t); 198 __b /= sizeof(wchar_t);
226 __r = __orig_wcsnrtombs(__d, __s, __wn > __b ? __b : __wn, __n, __st); 199 __r = __orig_wcsnrtombs(__d, __s, __wn > __b ? __b : __wn, __n, __st);
227 if (__b < __wn && __d && *__s && __r != (size_t)-1) 200 if (__b < __wn && __d && *__s && __r != (__fh_size_t)-1)
228 __builtin_trap(); 201 __builtin_trap();
229 } else { 202 } else {
230 __r = __orig_wcsnrtombs(__d, __s, __wn, __n > __b ? __b : __n, __st); 203 __r = __orig_wcsnrtombs(__d, __s, __wn, __n > __b ? __b : __n, __st);
231 if (__b < __n && __d && *__s && __r != (size_t)-1) 204 if (__b < __n && __d && *__s && __r != (__fh_size_t)-1)
232 __builtin_trap(); 205 __builtin_trap();
233 } 206 }
234 return __r; 207 return __r;
@@ -242,40 +215,29 @@ _FORTIFY_FN(wcsrtombs) size_t wcsrtombs(char * _FORTIFY_POS0 __d,
242 const wchar_t **__s, size_t __n, 215 const wchar_t **__s, size_t __n,
243 mbstate_t *__st) 216 mbstate_t *__st)
244{ 217{
245 size_t __b = __bos(__d, 0); 218 __fh_size_t __b = __bos(__d, 0);
246 size_t __r; 219 __fh_size_t __r;
247 220
248 __r = __orig_wcsrtombs(__d, __s, __n > __b ? __b : __n, __st); 221 __r = __orig_wcsrtombs(__d, __s, __n > __b ? __b : __n, __st);
249 if (__b < __n && __d && *__s && __r != (size_t)-1) 222 if (__b < __n && __d && *__s && __r != (__fh_size_t)-1)
250 __builtin_trap(); 223 __builtin_trap();
251 return __r; 224 return __r;
252} 225}
253 226
254__access(write_only, 1, 3) 227#ifdef MB_CUR_MAX
255#if __has_builtin(__builtin_wcstombs) 228#undef wctomb
256__diagnose_as_builtin(__builtin_wcstombs, 1, 2, 3)
257#endif
258_FORTIFY_FN(wcstombs) size_t wcstombs(char * _FORTIFY_POS0 __s,
259 const wchar_t *__ws, size_t __n)
260{
261 size_t __b = __bos(__s, 0);
262
263 if (__s && __n > __b)
264 __builtin_trap();
265 return __orig_wcstombs(__s, __ws, __n);
266}
267
268#if __has_builtin(__builtin_wctomb) 229#if __has_builtin(__builtin_wctomb)
269__diagnose_as_builtin(__builtin_wctomb, 1, 2) 230__diagnose_as_builtin(__builtin_wctomb, 1, 2)
270#endif 231#endif
271_FORTIFY_FN(wctomb) int wctomb(char * _FORTIFY_POS0 __s, wchar_t __w) 232_FORTIFY_FN(wctomb) int wctomb(char * _FORTIFY_POS0 __s, wchar_t __w)
272{ 233{
273 size_t __b = __bos(__s, 0); 234 __fh_size_t __b = __bos(__s, 0);
274 235
275 if (__s && MB_LEN_MAX > __b && MB_CUR_MAX > __b) 236 if (__s && 16 > __b && MB_CUR_MAX > __b)
276 __builtin_trap(); 237 __builtin_trap();
277 return __orig_wctomb(__s, __w); 238 return __orig_wctomb(__s, __w);
278} 239}
240#endif // MB_CUR_MAX
279 241
280#if __has_builtin(__builtin_wmemcpy) 242#if __has_builtin(__builtin_wmemcpy)
281__diagnose_as_builtin(__builtin_wmemcpy, 1, 2, 3) 243__diagnose_as_builtin(__builtin_wmemcpy, 1, 2, 3)
@@ -283,7 +245,7 @@ __diagnose_as_builtin(__builtin_wmemcpy, 1, 2, 3)
283_FORTIFY_FN(wmemcpy) wchar_t *wmemcpy(wchar_t * _FORTIFY_POS0 __d, 245_FORTIFY_FN(wmemcpy) wchar_t *wmemcpy(wchar_t * _FORTIFY_POS0 __d,
284 const wchar_t *__s, size_t __n) 246 const wchar_t *__s, size_t __n)
285{ 247{
286 size_t __b = __bos(__d, 0); 248 __fh_size_t __b = __bos(__d, 0);
287 249
288 if (__n > __b / sizeof(wchar_t)) 250 if (__n > __b / sizeof(wchar_t))
289 __builtin_trap(); 251 __builtin_trap();
@@ -296,7 +258,7 @@ __diagnose_as_builtin(__builtin_wmemmove, 1, 2, 3)
296_FORTIFY_FN(wmemmove) wchar_t *wmemmove(wchar_t * _FORTIFY_POS0 __d, 258_FORTIFY_FN(wmemmove) wchar_t *wmemmove(wchar_t * _FORTIFY_POS0 __d,
297 const wchar_t *__s, size_t __n) 259 const wchar_t *__s, size_t __n)
298{ 260{
299 size_t __b = __bos(__d, 0); 261 __fh_size_t __b = __bos(__d, 0);
300 262
301 if (__n > __b / sizeof(wchar_t)) 263 if (__n > __b / sizeof(wchar_t))
302 __builtin_trap(); 264 __builtin_trap();
@@ -309,7 +271,7 @@ __diagnose_as_builtin(__builtin_wmemset, 1, 2, 3)
309_FORTIFY_FN(wmemset) wchar_t *wmemset(wchar_t * _FORTIFY_POS0 __s, 271_FORTIFY_FN(wmemset) wchar_t *wmemset(wchar_t * _FORTIFY_POS0 __s,
310 wchar_t __c, size_t __n) 272 wchar_t __c, size_t __n)
311{ 273{
312 size_t __b = __bos(__s, 0); 274 __fh_size_t __b = __bos(__s, 0);
313 275
314 if (__n > __b / sizeof(wchar_t)) 276 if (__n > __b / sizeof(wchar_t))
315 __builtin_trap(); 277 __builtin_trap();