summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/wchar.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/include/wchar.h b/include/wchar.h
index 69c2188..2f405b9 100644
--- a/include/wchar.h
+++ b/include/wchar.h
@@ -87,6 +87,35 @@ __fortify_wcscpy(wchar_t *d, const wchar_t *s)
87 87
88static inline __attribute__ ((always_inline)) 88static inline __attribute__ ((always_inline))
89wchar_t * 89wchar_t *
90__fortify_wcsncat(wchar_t *d, const wchar_t *s, size_t n)
91{
92 size_t bos = __builtin_object_size(d, 0);
93 size_t slen, dlen;
94
95 if (n > bos / sizeof(wchar_t)) {
96 slen = wcslen(s);
97 dlen = wcslen(d);
98 if (slen > n)
99 slen = n;
100 if (slen + dlen + 1 > bos / sizeof(wchar_t))
101 __builtin_trap();
102 }
103 return wcsncat(d, s, n);
104}
105
106static inline __attribute__ ((always_inline))
107wchar_t *
108__fortify_wcsncpy(wchar_t *d, const wchar_t *s, size_t n)
109{
110 size_t bos = __builtin_object_size(d, 0);
111
112 if (n > bos / sizeof(wchar_t))
113 __builtin_trap();
114 return wcsncpy(d, s, n);
115}
116
117static inline __attribute__ ((always_inline))
118wchar_t *
90__fortify_wmemcpy(wchar_t *d, const wchar_t *s, size_t n) 119__fortify_wmemcpy(wchar_t *d, const wchar_t *s, size_t n)
91{ 120{
92 size_t bos = __builtin_object_size(d, 0); 121 size_t bos = __builtin_object_size(d, 0);
@@ -132,6 +161,10 @@ __fortify_wmemset(wchar_t *s, wchar_t c, size_t n)
132#define wcscat(d, s) __fortify_wcscat(d, s) 161#define wcscat(d, s) __fortify_wcscat(d, s)
133#undef wcscpy 162#undef wcscpy
134#define wcscpy(d, s) __fortify_wcscpy(d, s) 163#define wcscpy(d, s) __fortify_wcscpy(d, s)
164#undef wcsncat
165#define wcsncat(d, s, n) __fortify_wcsncat(d, s, n)
166#undef wcsncpy
167#define wcsncpy(d, s, n) __fortify_wcsncpy(d, s, n)
135#undef wmemcpy 168#undef wmemcpy
136#define wmemcpy(d, s, n) __fortify_wmemcpy(d, s, n) 169#define wmemcpy(d, s, n) __fortify_wmemcpy(d, s, n)
137#undef wmemmove 170#undef wmemmove