diff options
| author | jvoisin | 2023-03-18 14:01:02 +0100 |
|---|---|---|
| committer | jvoisin | 2025-10-31 22:16:21 +0100 |
| commit | 249492e08adbf034976770ab3b021ba093a2ab18 (patch) | |
| tree | cd04ae414fa7ef646a31f767b9295946fd2c9987 /include/wchar.h | |
| parent | e3fee64643279c144efd3d6856ed4e818c0d5ca2 (diff) | |
Make use of __builtin_dynamic_object_size
GCC and Clang provide __builtin_dynamic_object_size
(see documentation: https://gcc.gnu.org/onlinedocs/gcc/Object-Size-Checking.html),
so we should make use of it when its available.
Diffstat (limited to 'include/wchar.h')
| -rw-r--r-- | include/wchar.h | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/include/wchar.h b/include/wchar.h index c5d0e5d..0fba370 100644 --- a/include/wchar.h +++ b/include/wchar.h | |||
| @@ -57,7 +57,7 @@ extern "C" { | |||
| 57 | 57 | ||
| 58 | _FORTIFY_FN(fgetws) wchar_t *fgetws(wchar_t *__s, int __n, FILE *__f) | 58 | _FORTIFY_FN(fgetws) wchar_t *fgetws(wchar_t *__s, int __n, FILE *__f) |
| 59 | { | 59 | { |
| 60 | size_t __b = __builtin_object_size(__s, 0); | 60 | size_t __b = __bos(__s, 0); |
| 61 | 61 | ||
| 62 | if ((size_t)__n > __b / sizeof(wchar_t)) | 62 | if ((size_t)__n > __b / sizeof(wchar_t)) |
| 63 | __builtin_trap(); | 63 | __builtin_trap(); |
| @@ -70,7 +70,7 @@ _FORTIFY_FN(fgetws) wchar_t *fgetws(wchar_t *__s, int __n, FILE *__f) | |||
| 70 | _FORTIFY_FN(mbsnrtowcs) size_t mbsnrtowcs(wchar_t *__d, const char **__s, size_t __n, | 70 | _FORTIFY_FN(mbsnrtowcs) size_t mbsnrtowcs(wchar_t *__d, const char **__s, size_t __n, |
| 71 | size_t __wn, mbstate_t *__st) | 71 | size_t __wn, mbstate_t *__st) |
| 72 | { | 72 | { |
| 73 | size_t __b = __builtin_object_size(__d, 0); | 73 | size_t __b = __bos(__d, 0); |
| 74 | size_t __r; | 74 | size_t __r; |
| 75 | 75 | ||
| 76 | if (__wn > __n / sizeof(wchar_t)) { | 76 | if (__wn > __n / sizeof(wchar_t)) { |
| @@ -90,7 +90,7 @@ _FORTIFY_FN(mbsnrtowcs) size_t mbsnrtowcs(wchar_t *__d, const char **__s, size_t | |||
| 90 | _FORTIFY_FN(mbsrtowcs) size_t mbsrtowcs(wchar_t *__d, const char **__s, size_t __wn, | 90 | _FORTIFY_FN(mbsrtowcs) size_t mbsrtowcs(wchar_t *__d, const char **__s, size_t __wn, |
| 91 | mbstate_t *__st) | 91 | mbstate_t *__st) |
| 92 | { | 92 | { |
| 93 | size_t __b = __builtin_object_size(__d, 0); | 93 | size_t __b = __bos(__d, 0); |
| 94 | size_t __r; | 94 | size_t __r; |
| 95 | 95 | ||
| 96 | __b /= sizeof(wchar_t); | 96 | __b /= sizeof(wchar_t); |
| @@ -102,7 +102,7 @@ _FORTIFY_FN(mbsrtowcs) size_t mbsrtowcs(wchar_t *__d, const char **__s, size_t _ | |||
| 102 | 102 | ||
| 103 | _FORTIFY_FN(mbstowcs) size_t mbstowcs(wchar_t *__ws, const char *__s, size_t __wn) | 103 | _FORTIFY_FN(mbstowcs) size_t mbstowcs(wchar_t *__ws, const char *__s, size_t __wn) |
| 104 | { | 104 | { |
| 105 | size_t __b = __builtin_object_size(__ws, 0); | 105 | size_t __b = __bos(__ws, 0); |
| 106 | 106 | ||
| 107 | if (__ws && __wn > __b / sizeof(wchar_t)) | 107 | if (__ws && __wn > __b / sizeof(wchar_t)) |
| 108 | __builtin_trap(); | 108 | __builtin_trap(); |
| @@ -111,14 +111,14 @@ _FORTIFY_FN(mbstowcs) size_t mbstowcs(wchar_t *__ws, const char *__s, size_t __w | |||
| 111 | 111 | ||
| 112 | _FORTIFY_FN(wcrtomb) size_t wcrtomb(char *__s, wchar_t __w, mbstate_t *__st) | 112 | _FORTIFY_FN(wcrtomb) size_t wcrtomb(char *__s, wchar_t __w, mbstate_t *__st) |
| 113 | { | 113 | { |
| 114 | if (__s && MB_LEN_MAX > __builtin_object_size(__s, 2)) { | 114 | if (__s && MB_LEN_MAX > __bos(__s, 2)) { |
| 115 | char __buf[MB_LEN_MAX]; | 115 | char __buf[MB_LEN_MAX]; |
| 116 | size_t __r; | 116 | size_t __r; |
| 117 | 117 | ||
| 118 | __r = __orig_wcrtomb(__buf, __w, __st); | 118 | __r = __orig_wcrtomb(__buf, __w, __st); |
| 119 | if (__r == (size_t)-1) | 119 | if (__r == (size_t)-1) |
| 120 | return __r; | 120 | return __r; |
| 121 | if (__r > __builtin_object_size(__s, 0)) | 121 | if (__r > __bos(__s, 0)) |
| 122 | __builtin_trap(); | 122 | __builtin_trap(); |
| 123 | __builtin_memcpy(__s, __buf, __r); | 123 | __builtin_memcpy(__s, __buf, __r); |
| 124 | return __r; | 124 | return __r; |
| @@ -128,7 +128,7 @@ _FORTIFY_FN(wcrtomb) size_t wcrtomb(char *__s, wchar_t __w, mbstate_t *__st) | |||
| 128 | 128 | ||
| 129 | _FORTIFY_FN(wcscat) wchar_t *wcscat(wchar_t *__d, const wchar_t *__s) | 129 | _FORTIFY_FN(wcscat) wchar_t *wcscat(wchar_t *__d, const wchar_t *__s) |
| 130 | { | 130 | { |
| 131 | size_t __b = __builtin_object_size(__d, 0); | 131 | size_t __b = __bos(__d, 0); |
| 132 | 132 | ||
| 133 | if (wcslen(__s) + wcslen(__d) + 1 > __b / sizeof(wchar_t)) | 133 | if (wcslen(__s) + wcslen(__d) + 1 > __b / sizeof(wchar_t)) |
| 134 | __builtin_trap(); | 134 | __builtin_trap(); |
| @@ -137,7 +137,7 @@ _FORTIFY_FN(wcscat) wchar_t *wcscat(wchar_t *__d, const wchar_t *__s) | |||
| 137 | 137 | ||
| 138 | _FORTIFY_FN(wcscpy) wchar_t *wcscpy(wchar_t *__d, const wchar_t *__s) | 138 | _FORTIFY_FN(wcscpy) wchar_t *wcscpy(wchar_t *__d, const wchar_t *__s) |
| 139 | { | 139 | { |
| 140 | size_t __b = __builtin_object_size(__d, 0); | 140 | size_t __b = __bos(__d, 0); |
| 141 | 141 | ||
| 142 | if (wcslen(__s) + 1 > __b / sizeof(wchar_t)) | 142 | if (wcslen(__s) + 1 > __b / sizeof(wchar_t)) |
| 143 | __builtin_trap(); | 143 | __builtin_trap(); |
| @@ -146,7 +146,7 @@ _FORTIFY_FN(wcscpy) wchar_t *wcscpy(wchar_t *__d, const wchar_t *__s) | |||
| 146 | 146 | ||
| 147 | _FORTIFY_FN(wcsncat) wchar_t *wcsncat(wchar_t *__d, const wchar_t *__s, size_t __n) | 147 | _FORTIFY_FN(wcsncat) wchar_t *wcsncat(wchar_t *__d, const wchar_t *__s, size_t __n) |
| 148 | { | 148 | { |
| 149 | size_t __b = __builtin_object_size(__d, 0); | 149 | size_t __b = __bos(__d, 0); |
| 150 | size_t __sl, __dl; | 150 | size_t __sl, __dl; |
| 151 | 151 | ||
| 152 | if (__n > __b / sizeof(wchar_t)) { | 152 | if (__n > __b / sizeof(wchar_t)) { |
| @@ -162,7 +162,7 @@ _FORTIFY_FN(wcsncat) wchar_t *wcsncat(wchar_t *__d, const wchar_t *__s, size_t _ | |||
| 162 | 162 | ||
| 163 | _FORTIFY_FN(wcsncpy) wchar_t *wcsncpy(wchar_t *__d, const wchar_t *__s, size_t __n) | 163 | _FORTIFY_FN(wcsncpy) wchar_t *wcsncpy(wchar_t *__d, const wchar_t *__s, size_t __n) |
| 164 | { | 164 | { |
| 165 | size_t __b = __builtin_object_size(__d, 0); | 165 | size_t __b = __bos(__d, 0); |
| 166 | 166 | ||
| 167 | if (__n > __b / sizeof(wchar_t)) | 167 | if (__n > __b / sizeof(wchar_t)) |
| 168 | __builtin_trap(); | 168 | __builtin_trap(); |
| @@ -175,7 +175,7 @@ _FORTIFY_FN(wcsncpy) wchar_t *wcsncpy(wchar_t *__d, const wchar_t *__s, size_t _ | |||
| 175 | _FORTIFY_FN(wcsnrtombs) size_t wcsnrtombs(char *__d, const wchar_t **__s, size_t __wn, | 175 | _FORTIFY_FN(wcsnrtombs) size_t wcsnrtombs(char *__d, const wchar_t **__s, size_t __wn, |
| 176 | size_t __n, mbstate_t *__st) | 176 | size_t __n, mbstate_t *__st) |
| 177 | { | 177 | { |
| 178 | size_t __b = __builtin_object_size(__d, 0); | 178 | size_t __b = __bos(__d, 0); |
| 179 | size_t __r; | 179 | size_t __r; |
| 180 | 180 | ||
| 181 | if (__wn > __n / sizeof(wchar_t)) { | 181 | if (__wn > __n / sizeof(wchar_t)) { |
| @@ -195,7 +195,7 @@ _FORTIFY_FN(wcsnrtombs) size_t wcsnrtombs(char *__d, const wchar_t **__s, size_t | |||
| 195 | _FORTIFY_FN(wcsrtombs) size_t wcsrtombs(char *__d, const wchar_t **__s, size_t __n, | 195 | _FORTIFY_FN(wcsrtombs) size_t wcsrtombs(char *__d, const wchar_t **__s, size_t __n, |
| 196 | mbstate_t *__st) | 196 | mbstate_t *__st) |
| 197 | { | 197 | { |
| 198 | size_t __b = __builtin_object_size(__d, 0); | 198 | size_t __b = __bos(__d, 0); |
| 199 | size_t __r; | 199 | size_t __r; |
| 200 | 200 | ||
| 201 | __r = __orig_wcsrtombs(__d, __s, __n > __b ? __b : __n, __st); | 201 | __r = __orig_wcsrtombs(__d, __s, __n > __b ? __b : __n, __st); |
| @@ -206,7 +206,7 @@ _FORTIFY_FN(wcsrtombs) size_t wcsrtombs(char *__d, const wchar_t **__s, size_t _ | |||
| 206 | 206 | ||
| 207 | _FORTIFY_FN(wcstombs) size_t wcstombs(char *__s, const wchar_t *__ws, size_t __n) | 207 | _FORTIFY_FN(wcstombs) size_t wcstombs(char *__s, const wchar_t *__ws, size_t __n) |
| 208 | { | 208 | { |
| 209 | size_t __b = __builtin_object_size(__s, 0); | 209 | size_t __b = __bos(__s, 0); |
| 210 | 210 | ||
| 211 | if (__s && __n > __b) | 211 | if (__s && __n > __b) |
| 212 | __builtin_trap(); | 212 | __builtin_trap(); |
| @@ -215,7 +215,7 @@ _FORTIFY_FN(wcstombs) size_t wcstombs(char *__s, const wchar_t *__ws, size_t __n | |||
| 215 | 215 | ||
| 216 | _FORTIFY_FN(wctomb) int wctomb(char *__s, wchar_t __w) | 216 | _FORTIFY_FN(wctomb) int wctomb(char *__s, wchar_t __w) |
| 217 | { | 217 | { |
| 218 | size_t __b = __builtin_object_size(__s, 0); | 218 | size_t __b = __bos(__s, 0); |
| 219 | 219 | ||
| 220 | if (__s && MB_LEN_MAX > __b && MB_CUR_MAX > __b) | 220 | if (__s && MB_LEN_MAX > __b && MB_CUR_MAX > __b) |
| 221 | __builtin_trap(); | 221 | __builtin_trap(); |
| @@ -224,7 +224,7 @@ _FORTIFY_FN(wctomb) int wctomb(char *__s, wchar_t __w) | |||
| 224 | 224 | ||
| 225 | _FORTIFY_FN(wmemcpy) wchar_t *wmemcpy(wchar_t *__d, const wchar_t *__s, size_t __n) | 225 | _FORTIFY_FN(wmemcpy) wchar_t *wmemcpy(wchar_t *__d, const wchar_t *__s, size_t __n) |
| 226 | { | 226 | { |
| 227 | size_t __b = __builtin_object_size(__d, 0); | 227 | size_t __b = __bos(__d, 0); |
| 228 | 228 | ||
| 229 | if (__n > __b / sizeof(wchar_t)) | 229 | if (__n > __b / sizeof(wchar_t)) |
| 230 | __builtin_trap(); | 230 | __builtin_trap(); |
| @@ -233,7 +233,7 @@ _FORTIFY_FN(wmemcpy) wchar_t *wmemcpy(wchar_t *__d, const wchar_t *__s, size_t _ | |||
| 233 | 233 | ||
| 234 | _FORTIFY_FN(wmemmove) wchar_t *wmemmove(wchar_t *__d, const wchar_t *__s, size_t __n) | 234 | _FORTIFY_FN(wmemmove) wchar_t *wmemmove(wchar_t *__d, const wchar_t *__s, size_t __n) |
| 235 | { | 235 | { |
| 236 | size_t __b = __builtin_object_size(__d, 0); | 236 | size_t __b = __bos(__d, 0); |
| 237 | 237 | ||
| 238 | if (__n > __b / sizeof(wchar_t)) | 238 | if (__n > __b / sizeof(wchar_t)) |
| 239 | __builtin_trap(); | 239 | __builtin_trap(); |
| @@ -242,7 +242,7 @@ _FORTIFY_FN(wmemmove) wchar_t *wmemmove(wchar_t *__d, const wchar_t *__s, size_t | |||
| 242 | 242 | ||
| 243 | _FORTIFY_FN(wmemset) wchar_t *wmemset(wchar_t *__s, wchar_t __c, size_t __n) | 243 | _FORTIFY_FN(wmemset) wchar_t *wmemset(wchar_t *__s, wchar_t __c, size_t __n) |
| 244 | { | 244 | { |
| 245 | size_t __b = __builtin_object_size(__s, 0); | 245 | size_t __b = __bos(__s, 0); |
| 246 | 246 | ||
| 247 | if (__n > __b / sizeof(wchar_t)) | 247 | if (__n > __b / sizeof(wchar_t)) |
| 248 | __builtin_trap(); | 248 | __builtin_trap(); |
