source: trunk/libs/newlib/src/newlib/libc/include/ssp/wchar.h @ 444

Last change on this file since 444 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 3.1 KB
Line 
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_ */
Note: See TracBrowser for help on using the repository browser.