1 | #ifndef _SSP_WCHAR_H_ |
---|
2 | #define _SSP_WCHAR_H_ |
---|
3 | |
---|
4 | #include <sys/cdefs.h> |
---|
5 | #include <ssp/ssp.h> |
---|
6 | |
---|
7 | #if __SSP_FORTIFY_LEVEL > 0 |
---|
8 | |
---|
9 | /* wide character variant, __wlen is number of wchar_t */ |
---|
10 | #define __ssp_redirect_wc(rtype, fun, args, call, cond, bos) \ |
---|
11 | __ssp_decl(rtype, fun, args) \ |
---|
12 | { \ |
---|
13 | if (cond) \ |
---|
14 | __ssp_check(__buf, __wlen * sizeof(wchar_t), bos); \ |
---|
15 | return __ssp_real_(fun) call; \ |
---|
16 | } |
---|
17 | |
---|
18 | #define __ssp_bos_wicheck3(fun) \ |
---|
19 | __ssp_redirect_wc(wchar_t *, fun, \ |
---|
20 | (wchar_t *__buf, const wchar_t *__src, size_t __wlen), \ |
---|
21 | (__buf, __src, __wlen), 1, __ssp_bos0) |
---|
22 | |
---|
23 | #define __ssp_bos_wicheck3_restrict(fun) \ |
---|
24 | __ssp_redirect_wc(wchar_t *, fun, \ |
---|
25 | (wchar_t *__restrict __buf, const wchar_t *__restrict __src, size_t __wlen), \ |
---|
26 | (__buf, __src, __wlen), 1, __ssp_bos0) |
---|
27 | |
---|
28 | #define __ssp_bos_wicheck2_restrict(fun) \ |
---|
29 | __ssp_decl(wchar_t *, fun, (wchar_t *__restrict __buf, const wchar_t *__restrict __src)) \ |
---|
30 | { \ |
---|
31 | __ssp_check(__buf, (wcslen(__src) + 1) * sizeof(wchar_t), __ssp_bos0); \ |
---|
32 | return __ssp_real_(fun) (__buf, __src); \ |
---|
33 | } |
---|
34 | |
---|
35 | __BEGIN_DECLS |
---|
36 | #if __POSIX_VISIBLE >= 200809 |
---|
37 | __ssp_bos_wicheck2_restrict(wcpcpy) |
---|
38 | __ssp_bos_wicheck3_restrict(wcpncpy) |
---|
39 | #endif |
---|
40 | __ssp_bos_wicheck2_restrict(wcscpy) |
---|
41 | __ssp_bos_wicheck2_restrict(wcscat) |
---|
42 | __ssp_bos_wicheck3_restrict(wcsncpy) |
---|
43 | __ssp_bos_wicheck3_restrict(wcsncat) |
---|
44 | __ssp_bos_wicheck3_restrict(wmemcpy) |
---|
45 | __ssp_bos_wicheck3(wmemmove) |
---|
46 | #if __GNU_VISIBLE |
---|
47 | __ssp_bos_wicheck3_restrict(wmempcpy) |
---|
48 | #endif |
---|
49 | __ssp_redirect_wc(wchar_t *, wmemset, \ |
---|
50 | (wchar_t *__buf, wchar_t __src, size_t __wlen), \ |
---|
51 | (__buf, __src, __wlen), 1, __ssp_bos0) |
---|
52 | |
---|
53 | __ssp_decl(size_t, wcrtomb, (char *__buf, wchar_t __src, mbstate_t *__ps)) |
---|
54 | { |
---|
55 | if (__buf != NULL && __src != L'\0') |
---|
56 | __ssp_check(__buf, sizeof(wchar_t), __ssp_bos); |
---|
57 | return __ssp_real_wcrtomb (__buf, __src, __ps); |
---|
58 | } |
---|
59 | |
---|
60 | __ssp_redirect_wc(size_t, mbsrtowcs, \ |
---|
61 | (wchar_t *__buf, const char **__src, size_t __wlen, mbstate_t *__ps), \ |
---|
62 | (__buf, __src, __wlen, __ps), __buf != NULL, __ssp_bos) |
---|
63 | |
---|
64 | __ssp_redirect_raw(size_t, wcsrtombs, \ |
---|
65 | (char *__buf, const wchar_t **__src, size_t __len, mbstate_t *__ps), \ |
---|
66 | (__buf, __src, __len, __ps), __buf != NULL, __ssp_bos) |
---|
67 | |
---|
68 | #if __POSIX_VISIBLE >= 200809 |
---|
69 | __ssp_redirect_wc(size_t, mbsnrtowcs, \ |
---|
70 | (wchar_t *__buf, const char **__src, size_t __nms, size_t __wlen, mbstate_t *__ps), \ |
---|
71 | (__buf, __src, __nms, __wlen, __ps), __buf != NULL, __ssp_bos) |
---|
72 | |
---|
73 | __ssp_redirect_raw(size_t, wcsnrtombs, \ |
---|
74 | (char *__buf, const wchar_t **__src, size_t __nwc, size_t __len, mbstate_t *__ps), \ |
---|
75 | (__buf, __src, __nwc, __len, __ps), __buf != NULL, __ssp_bos) |
---|
76 | #endif |
---|
77 | |
---|
78 | __ssp_decl(wchar_t *, fgetws, (wchar_t *__restrict __buf, int __wlen, FILE *__restrict __fp)) |
---|
79 | { |
---|
80 | if (__wlen > 0) |
---|
81 | __ssp_check(__buf, (size_t)__wlen * sizeof(wchar_t) , __ssp_bos); |
---|
82 | return __ssp_real_fgetws(__buf, __wlen, __fp); |
---|
83 | } |
---|
84 | |
---|
85 | #if __GNU_VISIBLE |
---|
86 | __ssp_decl(wchar_t *, fgetws_unlocked, (wchar_t *__buf, int __wlen, FILE *__fp)) |
---|
87 | { |
---|
88 | if (__wlen > 0) |
---|
89 | __ssp_check(__buf, (size_t)__wlen * sizeof(wchar_t) , __ssp_bos); |
---|
90 | return __ssp_real_fgetws_unlocked(__buf, __wlen, __fp); |
---|
91 | } |
---|
92 | #endif /* __GNU_VISIBLE */ |
---|
93 | |
---|
94 | __END_DECLS |
---|
95 | |
---|
96 | #endif /* __SSP_FORTIFY_LEVEL > 0 */ |
---|
97 | #endif /* _SSP_WCHAR_H_ */ |
---|