summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/fortify-headers.h2
-rw-r--r--include/poll.h18
-rw-r--r--include/stdio.h78
-rw-r--r--include/stdlib.h12
-rw-r--r--include/string.h122
-rw-r--r--include/strings.h18
-rw-r--r--include/sys/select.h16
-rw-r--r--include/sys/socket.h36
-rw-r--r--include/unistd.h96
-rw-r--r--include/wchar.h182
10 files changed, 290 insertions, 290 deletions
diff --git a/include/fortify-headers.h b/include/fortify-headers.h
index fcb862d..288a973 100644
--- a/include/fortify-headers.h
+++ b/include/fortify-headers.h
@@ -18,7 +18,7 @@
18 18
19#define _FORTIFY_STR(s) #s 19#define _FORTIFY_STR(s) #s
20#define _FORTIFY_ORIG(p,fn) __typeof__(fn) __orig_##fn __asm__(_FORTIFY_STR(p) #fn) 20#define _FORTIFY_ORIG(p,fn) __typeof__(fn) __orig_##fn __asm__(_FORTIFY_STR(p) #fn)
21#define fortify_fn(fn) _FORTIFY_ORIG(__USER_LABEL_PREFIX__,fn); \ 21#define _FORTIFY_FN(fn) _FORTIFY_ORIG(__USER_LABEL_PREFIX__,fn); \
22 extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) 22 extern __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__))
23 23
24#endif 24#endif
diff --git a/include/poll.h b/include/poll.h
index 6ca08a7..d9b602c 100644
--- a/include/poll.h
+++ b/include/poll.h
@@ -27,25 +27,25 @@ extern "C" {
27 27
28#undef poll 28#undef poll
29 29
30fortify_fn(poll) int poll(struct pollfd *fds, nfds_t nfds, int timeout) 30_FORTIFY_FN(poll) int poll(struct pollfd *__f, nfds_t __n, int __s)
31{ 31{
32 __typeof__(sizeof 0) bos = __builtin_object_size(fds, 0); 32 __typeof__(sizeof 0) __b = __builtin_object_size(__f, 0);
33 33
34 if (nfds > bos / sizeof(struct pollfd)) 34 if (__n > __b / sizeof(struct pollfd))
35 __builtin_trap(); 35 __builtin_trap();
36 return __orig_poll(fds, nfds, timeout); 36 return __orig_poll(__f, __n, __s);
37} 37}
38 38
39#ifdef _GNU_SOURCE 39#ifdef _GNU_SOURCE
40#undef ppoll 40#undef ppoll
41fortify_fn(ppoll) int ppoll(struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, 41_FORTIFY_FN(ppoll) int ppoll(struct pollfd *__f, nfds_t __n, const struct timespec *__s,
42 const sigset_t *mask) 42 const sigset_t *__m)
43{ 43{
44 __typeof__(sizeof 0) bos = __builtin_object_size(fds, 0); 44 __typeof__(sizeof 0) __b = __builtin_object_size(__f, 0);
45 45
46 if (nfds > bos / sizeof(struct pollfd)) 46 if (__n > __b / sizeof(struct pollfd))
47 __builtin_trap(); 47 __builtin_trap();
48 return __orig_ppoll(fds, nfds, timeout, mask); 48 return __orig_ppoll(__f, __n, __s, __m);
49} 49}
50#endif 50#endif
51 51
diff --git a/include/stdio.h b/include/stdio.h
index 6689519..996c661 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -33,84 +33,84 @@ extern "C" {
33#undef snprintf 33#undef snprintf
34#undef sprintf 34#undef sprintf
35 35
36fortify_fn(fgets) char *fgets(char *s, int n, FILE *fp) 36_FORTIFY_FN(fgets) char *fgets(char *__s, int __n, FILE *__f)
37{ 37{
38 size_t bos = __builtin_object_size(s, 0); 38 size_t __b = __builtin_object_size(__s, 0);
39 39
40 if ((size_t)n > bos) 40 if ((size_t)__n > __b)
41 __builtin_trap(); 41 __builtin_trap();
42 return __orig_fgets(s, n, fp); 42 return __orig_fgets(__s, __n, __f);
43} 43}
44 44
45fortify_fn(fread) size_t fread(void *dst, size_t n, size_t nmemb, FILE *fp) 45_FORTIFY_FN(fread) size_t fread(void *__d, size_t __n, size_t __m, FILE *__f)
46{ 46{
47 size_t bos = __builtin_object_size(dst, 0); 47 size_t __b = __builtin_object_size(__d, 0);
48 48
49 if (n != 0 && (n * nmemb) / n != nmemb) 49 if (__n != 0 && (__n * __m) / __n != __m)
50 __builtin_trap(); 50 __builtin_trap();
51 if (n * nmemb > bos) 51 if (__n * __m > __b)
52 __builtin_trap(); 52 __builtin_trap();
53 return __orig_fread(dst, n, nmemb, fp); 53 return __orig_fread(__d, __n, __m, __f);
54} 54}
55 55
56fortify_fn(fwrite) size_t fwrite(const void *dst, size_t n, size_t nmemb, FILE *fp) 56_FORTIFY_FN(fwrite) size_t fwrite(const void *__d, size_t __n, size_t __m, FILE *__f)
57{ 57{
58 size_t bos = __builtin_object_size(dst, 0); 58 size_t __b = __builtin_object_size(__d, 0);
59 59
60 if (n != 0 && (n * nmemb) / n != nmemb) 60 if (__n != 0 && (__n * __m) / __n != __m)
61 __builtin_trap(); 61 __builtin_trap();
62 if (n * nmemb > bos) 62 if (__n * __m > __b)
63 __builtin_trap(); 63 __builtin_trap();
64 return __orig_fwrite(dst, n, nmemb, fp); 64 return __orig_fwrite(__d, __n, __m, __f);
65} 65}
66 66
67fortify_fn(vsnprintf) int vsnprintf(char *s, size_t n, const char *fmt, 67_FORTIFY_FN(vsnprintf) int vsnprintf(char *__s, size_t __n, const char *__f,
68 __builtin_va_list ap) 68 __builtin_va_list __v)
69{ 69{
70 size_t bos = __builtin_object_size(s, 0); 70 size_t __b = __builtin_object_size(__s, 0);
71 71
72 if (n > bos) 72 if (__n > __b)
73 __builtin_trap(); 73 __builtin_trap();
74 return __orig_vsnprintf(s, n, fmt, ap); 74 return __orig_vsnprintf(__s, __n, __f, __v);
75} 75}
76 76
77fortify_fn(vsprintf) int vsprintf(char *s, const char *fmt, __builtin_va_list ap) 77_FORTIFY_FN(vsprintf) int vsprintf(char *__s, const char *__f, __builtin_va_list __v)
78{ 78{
79 size_t bos = __builtin_object_size(s, 0); 79 size_t __b = __builtin_object_size(__s, 0);
80 int r; 80 int __r;
81 81
82 if (bos != (size_t)-1) { 82 if (__b != (size_t)-1) {
83 r = __orig_vsnprintf(s, bos, fmt, ap); 83 __r = __orig_vsnprintf(__s, __b, __f, __v);
84 if (r != -1 && (size_t)r >= bos) 84 if (__r != -1 && (size_t)__r >= __b)
85 __builtin_trap(); 85 __builtin_trap();
86 } else { 86 } else {
87 r = __orig_vsprintf(s, fmt, ap); 87 __r = __orig_vsprintf(__s, __f, __v);
88 } 88 }
89 return r; 89 return __r;
90} 90}
91 91
92fortify_fn(snprintf) int snprintf(char *s, size_t n, const char *fmt, ...) 92_FORTIFY_FN(snprintf) int snprintf(char *__s, size_t __n, const char *__f, ...)
93{ 93{
94 size_t bos = __builtin_object_size(s, 0); 94 size_t __b = __builtin_object_size(__s, 0);
95 95
96 if (n > bos) 96 if (__n > __b)
97 __builtin_trap(); 97 __builtin_trap();
98 return __orig_snprintf(s, n, fmt, __builtin_va_arg_pack()); 98 return __orig_snprintf(__s, __n, __f, __builtin_va_arg_pack());
99} 99}
100 100
101fortify_fn(sprintf) int sprintf(char *s, const char *fmt, ...) 101_FORTIFY_FN(sprintf) int sprintf(char *__s, const char *__f, ...)
102{ 102{
103 size_t bos = __builtin_object_size(s, 0); 103 size_t __b = __builtin_object_size(__s, 0);
104 int r; 104 int __r;
105 105
106 if (bos != (size_t)-1) { 106 if (__b != (size_t)-1) {
107 r = __orig_snprintf(s, bos, fmt, __builtin_va_arg_pack()); 107 __r = __orig_snprintf(__s, __b, __f, __builtin_va_arg_pack());
108 if (r != -1 && (size_t)r >= bos) 108 if (__r != -1 && (size_t)__r >= __b)
109 __builtin_trap(); 109 __builtin_trap();
110 } else { 110 } else {
111 r = __orig_sprintf(s, fmt, __builtin_va_arg_pack()); 111 __r = __orig_sprintf(__s, __f, __builtin_va_arg_pack());
112 } 112 }
113 return r; 113 return __r;
114} 114}
115 115
116#ifdef __cplusplus 116#ifdef __cplusplus
diff --git a/include/stdlib.h b/include/stdlib.h
index 5566ab4..2b67235 100644
--- a/include/stdlib.h
+++ b/include/stdlib.h
@@ -31,20 +31,20 @@ extern "C" {
31 31
32#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 32#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
33#undef realpath 33#undef realpath
34fortify_fn(realpath) char *realpath(const char *path, char *resolved) 34_FORTIFY_FN(realpath) char *realpath(const char *__p, char *__r)
35{ 35{
36 size_t bos; 36 size_t __b;
37 37
38 if (resolved) { 38 if (__r) {
39#ifndef PATH_MAX 39#ifndef PATH_MAX
40#error PATH_MAX unset. A fortified realpath will not work. 40#error PATH_MAX unset. A fortified realpath will not work.
41#else 41#else
42 bos = __builtin_object_size(resolved, 0); 42 __b = __builtin_object_size(__r, 0);
43 if (PATH_MAX > bos) 43 if (PATH_MAX > __b)
44 __builtin_trap(); 44 __builtin_trap();
45#endif 45#endif
46 } 46 }
47 return __orig_realpath(path, resolved); 47 return __orig_realpath(__p, __r);
48} 48}
49#endif 49#endif
50 50
diff --git a/include/string.h b/include/string.h
index 5db7ac9..98bfea1 100644
--- a/include/string.h
+++ b/include/string.h
@@ -33,141 +33,141 @@ extern "C" {
33#undef strncat 33#undef strncat
34#undef strncpy 34#undef strncpy
35 35
36fortify_fn(memcpy) void *memcpy(void *dst, const void *src, size_t n) 36_FORTIFY_FN(memcpy) void *memcpy(void *__od, const void *__os, size_t __n)
37{ 37{
38 size_t bos_dst = __builtin_object_size(dst, 0); 38 size_t __bd = __builtin_object_size(__od, 0);
39 size_t bos_src = __builtin_object_size(src, 0); 39 size_t __bs = __builtin_object_size(__os, 0);
40 char *d = (char *)dst; 40 char *__d = (char *)__od;
41 const char *s = (const char *)src; 41 const char *__s = (const char *)__os;
42 42
43 /* trap if pointers are overlapping but not if dst == src. 43 /* trap if pointers are overlapping but not if dst == src.
44 * gcc seems to like to generate code that relies on dst == src */ 44 * gcc seems to like to generate code that relies on dst == src */
45 if ((d < s && d + n > s) || 45 if ((__d < __s && __d + __n > __s) ||
46 (s < d && s + n > d)) 46 (__s < __d && __s + __n > __d))
47 __builtin_trap(); 47 __builtin_trap();
48 if (n > bos_dst || n > bos_src) 48 if (__n > __bd || __n > __bs)
49 __builtin_trap(); 49 __builtin_trap();
50 return __orig_memcpy(dst, src, n); 50 return __orig_memcpy(__od, __os, __n);
51} 51}
52 52
53fortify_fn(memmove) void *memmove(void *dst, const void *src, size_t n) 53_FORTIFY_FN(memmove) void *memmove(void *__d, const void *__s, size_t __n)
54{ 54{
55 size_t bos_dst = __builtin_object_size(dst, 0); 55 size_t __bd = __builtin_object_size(__d, 0);
56 size_t bos_src = __builtin_object_size(src, 0); 56 size_t __bs = __builtin_object_size(__s, 0);
57 57
58 if (n > bos_dst || n > bos_src) 58 if (__n > __bd || __n > __bs)
59 __builtin_trap(); 59 __builtin_trap();
60 return __orig_memmove(dst, src, n); 60 return __orig_memmove(__d, __s, __n);
61} 61}
62 62
63fortify_fn(memset) void *memset(void *dst, int c, size_t n) 63_FORTIFY_FN(memset) void *memset(void *__d, int __c, size_t __n)
64{ 64{
65 size_t bos = __builtin_object_size(dst, 0); 65 size_t __b = __builtin_object_size(__d, 0);
66 66
67 if (n > bos) 67 if (__n > __b)
68 __builtin_trap(); 68 __builtin_trap();
69 return __orig_memset(dst, c, n); 69 return __orig_memset(__d, __c, __n);
70} 70}
71 71
72#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ 72#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
73 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \ 73 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
74 || defined(_BSD_SOURCE) 74 || defined(_BSD_SOURCE)
75#undef stpcpy 75#undef stpcpy
76fortify_fn(stpcpy) char *stpcpy(char *dst, const char *src) 76_FORTIFY_FN(stpcpy) char *stpcpy(char *__d, const char *__s)
77{ 77{
78 size_t bos = __builtin_object_size(dst, 0); 78 size_t __b = __builtin_object_size(__d, 0);
79 79
80 if (strlen(src) + 1 > bos) 80 if (strlen(__s) + 1 > __b)
81 __builtin_trap(); 81 __builtin_trap();
82 return __orig_stpcpy(dst, src); 82 return __orig_stpcpy(__d, __s);
83} 83}
84 84
85#undef stpncpy 85#undef stpncpy
86fortify_fn(stpncpy) char *stpncpy(char *dst, const char *src, size_t n) 86_FORTIFY_FN(stpncpy) char *stpncpy(char *__d, const char *__s, size_t __n)
87{ 87{
88 size_t bos = __builtin_object_size(dst, 0); 88 size_t __b = __builtin_object_size(__d, 0);
89 89
90 if (n > bos) 90 if (__n > __b)
91 __builtin_trap(); 91 __builtin_trap();
92 return __orig_stpncpy(dst, src, n); 92 return __orig_stpncpy(__d, __s, __n);
93} 93}
94#endif 94#endif
95 95
96fortify_fn(strcat) char *strcat(char *dst, const char *src) 96_FORTIFY_FN(strcat) char *strcat(char *__d, const char *__s)
97{ 97{
98 size_t bos = __builtin_object_size(dst, 0); 98 size_t __b = __builtin_object_size(__d, 0);
99 99
100 if (strlen(src) + strlen(dst) + 1 > bos) 100 if (strlen(__s) + strlen(__d) + 1 > __b)
101 __builtin_trap(); 101 __builtin_trap();
102 return __orig_strcat(dst, src); 102 return __orig_strcat(__d, __s);
103} 103}
104 104
105fortify_fn(strcpy) char *strcpy(char *dst, const char *src) 105_FORTIFY_FN(strcpy) char *strcpy(char *__d, const char *__s)
106{ 106{
107 size_t bos = __builtin_object_size(dst, 0); 107 size_t __b = __builtin_object_size(__d, 0);
108 108
109 if (strlen(src) + 1 > bos) 109 if (strlen(__s) + 1 > __b)
110 __builtin_trap(); 110 __builtin_trap();
111 return __orig_strcpy(dst, src); 111 return __orig_strcpy(__d, __s);
112} 112}
113 113
114fortify_fn(strncat) char *strncat(char *dst, const char *src, size_t n) 114_FORTIFY_FN(strncat) char *strncat(char *__d, const char *__s, size_t __n)
115{ 115{
116 size_t bos = __builtin_object_size(dst, 0); 116 size_t __b = __builtin_object_size(__d, 0);
117 size_t slen, dlen; 117 size_t __sl, __dl;
118 118
119 if (n > bos) { 119 if (__n > __b) {
120 slen = strlen(src); 120 __sl = strlen(__s);
121 dlen = strlen(dst); 121 __dl = strlen(__d);
122 if (slen > n) 122 if (__sl > __n)
123 slen = n; 123 __sl = __n;
124 if (slen + dlen + 1 > bos) 124 if (__sl + __dl + 1 > __b)
125 __builtin_trap(); 125 __builtin_trap();
126 } 126 }
127 return __orig_strncat(dst, src, n); 127 return __orig_strncat(__d, __s, __n);
128} 128}
129 129
130fortify_fn(strncpy) char *strncpy(char *dst, const char *src, size_t n) 130_FORTIFY_FN(strncpy) char *strncpy(char *__d, const char *__s, size_t __n)
131{ 131{
132 size_t bos = __builtin_object_size(dst, 0); 132 size_t __b = __builtin_object_size(__d, 0);
133 133
134 if (n > bos) 134 if (__n > __b)
135 __builtin_trap(); 135 __builtin_trap();
136 return __orig_strncpy(dst, src, n); 136 return __orig_strncpy(__d, __s, __n);
137} 137}
138 138
139#ifdef _GNU_SOURCE 139#ifdef _GNU_SOURCE
140#undef mempcpy 140#undef mempcpy
141fortify_fn(mempcpy) void *mempcpy(void *dst, const void *src, size_t n) 141_FORTIFY_FN(mempcpy) void *mempcpy(void *__d, const void *__s, size_t __n)
142{ 142{
143 size_t bos_dst = __builtin_object_size(dst, 0); 143 size_t __bd = __builtin_object_size(__d, 0);
144 size_t bos_src = __builtin_object_size(src, 0); 144 size_t __bs = __builtin_object_size(__s, 0);
145 145
146 if (n > bos_dst || n > bos_src) 146 if (__n > __bd || __n > __bs)
147 __builtin_trap(); 147 __builtin_trap();
148 return __orig_mempcpy(dst, src, n); 148 return __orig_mempcpy(__d, __s, __n);
149} 149}
150#endif 150#endif
151 151
152#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 152#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
153#undef strlcat 153#undef strlcat
154#undef strlcpy 154#undef strlcpy
155fortify_fn(strlcat) size_t strlcat(char *dst, const char *src, size_t n) 155_FORTIFY_FN(strlcat) size_t strlcat(char *__d, const char *__s, size_t __n)
156{ 156{
157 size_t bos = __builtin_object_size(dst, 0); 157 size_t __b = __builtin_object_size(__d, 0);
158 158
159 if (n > bos) 159 if (__n > __b)
160 __builtin_trap(); 160 __builtin_trap();
161 return __orig_strlcat(dst, src, n); 161 return __orig_strlcat(__d, __s, __n);
162} 162}
163 163
164fortify_fn(strlcpy) size_t strlcpy(char *dst, const char *src, size_t n) 164_FORTIFY_FN(strlcpy) size_t strlcpy(char *__d, const char *__s, size_t __n)
165{ 165{
166 size_t bos = __builtin_object_size(dst, 0); 166 size_t __b = __builtin_object_size(__d, 0);
167 167
168 if (n > bos) 168 if (__n > __b)
169 __builtin_trap(); 169 __builtin_trap();
170 return __orig_strlcpy(dst, src, n); 170 return __orig_strlcpy(__d, __s, __n);
171} 171}
172#endif 172#endif
173 173
diff --git a/include/strings.h b/include/strings.h
index ed8efdb..4eb5486 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -30,23 +30,23 @@ extern "C" {
30 || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700) 30 || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700)
31#undef bcopy 31#undef bcopy
32#undef bzero 32#undef bzero
33fortify_fn(bcopy) void bcopy(const void *src, void *dst, size_t n) 33_FORTIFY_FN(bcopy) void bcopy(const void *__s, void *__d, size_t __n)
34{ 34{
35 size_t bos_dst = __builtin_object_size(dst, 0); 35 size_t __bd = __builtin_object_size(__d, 0);
36 size_t bos_src = __builtin_object_size(src, 0); 36 size_t __bs = __builtin_object_size(__s, 0);
37 37
38 if (n > bos_dst || n > bos_src) 38 if (__n > __bd || __n > __bs)
39 __builtin_trap(); 39 __builtin_trap();
40 return __orig_bcopy(src, dst, n); 40 return __orig_bcopy(__s, __d, __n);
41} 41}
42 42
43fortify_fn(bzero) void bzero(void *src, size_t n) 43_FORTIFY_FN(bzero) void bzero(void *__s, size_t __n)
44{ 44{
45 size_t bos = __builtin_object_size(src, 0); 45 size_t __b = __builtin_object_size(__s, 0);
46 46
47 if (n > bos) 47 if (__n > __b)
48 __builtin_trap(); 48 __builtin_trap();
49 return __orig_bzero(src, n); 49 return __orig_bzero(__s, __n);
50} 50}
51#endif 51#endif
52 52
diff --git a/include/sys/select.h b/include/sys/select.h
index 0f1e1df..4623071 100644
--- a/include/sys/select.h
+++ b/include/sys/select.h
@@ -25,23 +25,23 @@ extern "C" {
25#endif 25#endif
26 26
27static __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) 27static __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__))
28void __fortify_FD_CLR(int fd, fd_set *set) 28void __fortify_FD_CLR(int __f, fd_set *__s)
29{ 29{
30 size_t bos = __builtin_object_size(set, 0); 30 size_t __b = __builtin_object_size(__s, 0);
31 31
32 if (fd < 0 || fd >= FD_SETSIZE || bos < sizeof(fd_set)) 32 if (__f < 0 || __f >= FD_SETSIZE || __b < sizeof(fd_set))
33 __builtin_trap(); 33 __builtin_trap();
34 FD_CLR(fd, set); 34 FD_CLR(__f, __s);
35} 35}
36 36
37static __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__)) 37static __inline __attribute__((__always_inline__,__gnu_inline__,__artificial__))
38void __fortify_FD_SET(int fd, fd_set *set) 38void __fortify_FD_SET(int __f, fd_set *__s)
39{ 39{
40 size_t bos = __builtin_object_size(set, 0); 40 size_t __b = __builtin_object_size(__s, 0);
41 41
42 if (fd < 0 || fd >= FD_SETSIZE || bos < sizeof(fd_set)) 42 if (__f < 0 || __f >= FD_SETSIZE || __b < sizeof(fd_set))
43 __builtin_trap(); 43 __builtin_trap();
44 FD_SET(fd, set); 44 FD_SET(__f, __s);
45} 45}
46 46
47#undef FD_CLR 47#undef FD_CLR
diff --git a/include/sys/socket.h b/include/sys/socket.h
index c6e4c35..e68e21c 100644
--- a/include/sys/socket.h
+++ b/include/sys/socket.h
@@ -30,42 +30,42 @@ extern "C" {
30#undef send 30#undef send
31#undef sendto 31#undef sendto
32 32
33fortify_fn(recv) ssize_t recv(int sockfd, void *buf, size_t n, int flags) 33_FORTIFY_FN(recv) ssize_t recv(int __f, void *__s, size_t __n, int __fl)
34{ 34{
35 size_t bos = __builtin_object_size(buf, 0); 35 size_t __b = __builtin_object_size(__s, 0);
36 36
37 if (n > bos) 37 if (__n > __b)
38 __builtin_trap(); 38 __builtin_trap();
39 return __orig_recv(sockfd, buf, n, flags); 39 return __orig_recv(__f, __s, __n, __fl);
40} 40}
41 41
42fortify_fn(recvfrom) ssize_t recvfrom(int sockfd, void *buf, size_t n, int flags, 42_FORTIFY_FN(recvfrom) ssize_t recvfrom(int __f, void *__s, size_t __n, int __fl,
43 struct sockaddr *sa, socklen_t *salen) 43 struct sockaddr *__a, socklen_t *__l)
44{ 44{
45 size_t bos = __builtin_object_size(buf, 0); 45 size_t __b = __builtin_object_size(__s, 0);
46 46
47 if (n > bos) 47 if (__n > __b)
48 __builtin_trap(); 48 __builtin_trap();
49 return __orig_recvfrom(sockfd, buf, n, flags, sa, salen); 49 return __orig_recvfrom(__f, __s, __n, __fl, __a, __l);
50} 50}
51 51
52fortify_fn(send) ssize_t send(int sockfd, const void *buf, size_t n, int flags) 52_FORTIFY_FN(send) ssize_t send(int __f, const void *__s, size_t __n, int __fl)
53{ 53{
54 size_t bos = __builtin_object_size(buf, 0); 54 size_t __b = __builtin_object_size(__s, 0);
55 55
56 if (n > bos) 56 if (__n > __b)
57 __builtin_trap(); 57 __builtin_trap();
58 return __orig_send(sockfd, buf, n, flags); 58 return __orig_send(__f, __s, __n, __fl);
59} 59}
60 60
61fortify_fn(sendto) ssize_t sendto(int sockfd, const void *buf, size_t n, int flags, 61_FORTIFY_FN(sendto) ssize_t sendto(int __f, const void *__s, size_t __n, int __fl,
62 const struct sockaddr *sa, socklen_t salen) 62 const struct sockaddr *__a, socklen_t __l)
63{ 63{
64 size_t bos = __builtin_object_size(buf, 0); 64 size_t __b = __builtin_object_size(__s, 0);
65 65
66 if (n > bos) 66 if (__n > __b)
67 __builtin_trap(); 67 __builtin_trap();
68 return __orig_sendto(sockfd, buf, n, flags, sa, salen); 68 return __orig_sendto(__f, __s, __n, __fl, __a, __l);
69} 69}
70 70
71#ifdef __cplusplus 71#ifdef __cplusplus
diff --git a/include/unistd.h b/include/unistd.h
index 7986e52..45304e1 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -37,115 +37,115 @@ extern "C" {
37#undef ttyname_r 37#undef ttyname_r
38#undef write 38#undef write
39 39
40fortify_fn(confstr) size_t confstr(int name, char *buf, size_t len) 40_FORTIFY_FN(confstr) size_t confstr(int __n, char *__s, size_t __l)
41{ 41{
42 size_t bos = __builtin_object_size(buf, 0); 42 size_t __b = __builtin_object_size(__s, 0);
43 43
44 if (len > bos) 44 if (__l > __b)
45 __builtin_trap(); 45 __builtin_trap();
46 return __orig_confstr(name, buf, len); 46 return __orig_confstr(__n, __s, __l);
47} 47}
48 48
49fortify_fn(getcwd) char *getcwd(char *buf, size_t len) 49_FORTIFY_FN(getcwd) char *getcwd(char *__s, size_t __l)
50{ 50{
51 size_t bos = __builtin_object_size(buf, 0); 51 size_t __b = __builtin_object_size(__s, 0);
52 52
53 if (len > bos) 53 if (__l > __b)
54 __builtin_trap(); 54 __builtin_trap();
55 return __orig_getcwd(buf, len); 55 return __orig_getcwd(__s, __l);
56} 56}
57 57
58#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 58#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
59#undef getdomainname 59#undef getdomainname
60fortify_fn(getdomainname) int getdomainname(char *name, size_t len) 60_FORTIFY_FN(getdomainname) int getdomainname(char *__s, size_t __l)
61{ 61{
62 size_t bos = __builtin_object_size(name, 0); 62 size_t __b = __builtin_object_size(__s, 0);
63 63
64 if (len > bos) 64 if (__l > __b)
65 __builtin_trap(); 65 __builtin_trap();
66 return __orig_getdomainname(name, len); 66 return __orig_getdomainname(__s, __l);
67} 67}
68#endif 68#endif
69 69
70fortify_fn(getgroups) int getgroups(int len, gid_t *set) 70_FORTIFY_FN(getgroups) int getgroups(int __l, gid_t *__s)
71{ 71{
72 size_t bos = __builtin_object_size(set, 0); 72 size_t __b = __builtin_object_size(__s, 0);
73 73
74 if (len > bos / sizeof(gid_t)) 74 if (__l > __b / sizeof(gid_t))
75 __builtin_trap(); 75 __builtin_trap();
76 return __orig_getgroups(len, set); 76 return __orig_getgroups(__l, __s);
77} 77}
78 78
79fortify_fn(gethostname) int gethostname(char *name, size_t len) 79_FORTIFY_FN(gethostname) int gethostname(char *__s, size_t __l)
80{ 80{
81 size_t bos = __builtin_object_size(name, 0); 81 size_t __b = __builtin_object_size(__s, 0);
82 82
83 if (len > bos) 83 if (__l > __b)
84 __builtin_trap(); 84 __builtin_trap();
85 return __orig_gethostname(name, len); 85 return __orig_gethostname(__s, __l);
86} 86}
87 87
88fortify_fn(getlogin_r) int getlogin_r(char *name, size_t len) 88_FORTIFY_FN(getlogin_r) int getlogin_r(char *__s, size_t __l)
89{ 89{
90 size_t bos = __builtin_object_size(name, 0); 90 size_t __b = __builtin_object_size(__s, 0);
91 91
92 if (len > bos) 92 if (__l > __b)
93 __builtin_trap(); 93 __builtin_trap();
94 return __orig_getlogin_r(name, len); 94 return __orig_getlogin_r(__s, __l);
95} 95}
96 96
97fortify_fn(pread) ssize_t pread(int fd, void *buf, size_t n, off_t offset) 97_FORTIFY_FN(pread) ssize_t pread(int __f, void *__s, size_t __n, off_t __o)
98{ 98{
99 size_t bos = __builtin_object_size(buf, 0); 99 size_t __b = __builtin_object_size(__s, 0);
100 100
101 if (n > bos) 101 if (__n > __b)
102 __builtin_trap(); 102 __builtin_trap();
103 return __orig_pread(fd, buf, n, offset); 103 return __orig_pread(__f, __s, __n, __o);
104} 104}
105 105
106fortify_fn(read) ssize_t read(int fd, void *buf, size_t n) 106_FORTIFY_FN(read) ssize_t read(int __f, void *__s, size_t __n)
107{ 107{
108 size_t bos = __builtin_object_size(buf, 0); 108 size_t __b = __builtin_object_size(__s, 0);
109 109
110 if (n > bos) 110 if (__n > __b)
111 __builtin_trap(); 111 __builtin_trap();
112 return __orig_read(fd, buf, n); 112 return __orig_read(__f, __s, __n);
113} 113}
114 114
115fortify_fn(readlink) ssize_t readlink(const char *path, char *buf, size_t n) 115_FORTIFY_FN(readlink) ssize_t readlink(const char *__p, char *__s, size_t __n)
116{ 116{
117 size_t bos = __builtin_object_size(buf, 0); 117 size_t __b = __builtin_object_size(__s, 0);
118 118
119 if (n > bos) 119 if (__n > __b)
120 __builtin_trap(); 120 __builtin_trap();
121 return __orig_readlink(path, buf, n); 121 return __orig_readlink(__p, __s, __n);
122} 122}
123 123
124fortify_fn(readlinkat) ssize_t readlinkat(int fd, const char *path, char *buf, size_t n) 124_FORTIFY_FN(readlinkat) ssize_t readlinkat(int __f, const char *__p, char *__s, size_t __n)
125{ 125{
126 size_t bos = __builtin_object_size(buf, 0); 126 size_t __b = __builtin_object_size(__s, 0);
127 127
128 if (n > bos) 128 if (__n > __b)
129 __builtin_trap(); 129 __builtin_trap();
130 return __orig_readlinkat(fd, path, buf, n); 130 return __orig_readlinkat(__f, __p, __s, __n);
131} 131}
132 132
133fortify_fn(ttyname_r) int ttyname_r(int fd, char *name, size_t n) 133_FORTIFY_FN(ttyname_r) int ttyname_r(int __f, char *__s, size_t __n)
134{ 134{
135 size_t bos = __builtin_object_size(name, 0); 135 size_t __b = __builtin_object_size(__s, 0);
136 136
137 if (n > bos) 137 if (__n > __b)
138 __builtin_trap(); 138 __builtin_trap();
139 return __orig_ttyname_r(fd, name, n); 139 return __orig_ttyname_r(__f, __s, __n);
140} 140}
141 141
142fortify_fn(write) ssize_t write(int fd, const void *buf, size_t n) 142_FORTIFY_FN(write) ssize_t write(int __f, const void *__s, size_t __n)
143{ 143{
144 size_t bos = __builtin_object_size(buf, 0); 144 size_t __b = __builtin_object_size(__s, 0);
145 145
146 if (n > bos) 146 if (__n > __b)
147 __builtin_trap(); 147 __builtin_trap();
148 return __orig_write(fd, buf, n); 148 return __orig_write(__f, __s, __n);
149} 149}
150 150
151#ifdef __cplusplus 151#ifdef __cplusplus
diff --git a/include/wchar.h b/include/wchar.h
index 64618f1..6fa86f2 100644
--- a/include/wchar.h
+++ b/include/wchar.h
@@ -41,190 +41,190 @@ extern "C" {
41#undef wmemmove 41#undef wmemmove
42#undef wmemset 42#undef wmemset
43 43
44fortify_fn(fgetws) wchar_t *fgetws(wchar_t *s, int n, FILE *fp) 44_FORTIFY_FN(fgetws) wchar_t *fgetws(wchar_t *__s, int __n, FILE *__f)
45{ 45{
46 size_t bos = __builtin_object_size(s, 0); 46 size_t __b = __builtin_object_size(__s, 0);
47 47
48 if ((size_t)n > bos / sizeof(wchar_t)) 48 if ((size_t)__n > __b / sizeof(wchar_t))
49 __builtin_trap(); 49 __builtin_trap();
50 return __orig_fgetws(s, n, fp); 50 return __orig_fgetws(__s, __n, __f);
51} 51}
52 52
53#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ 53#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
54 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 54 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
55#undef mbsnrtowcs 55#undef mbsnrtowcs
56fortify_fn(mbsnrtowcs) size_t mbsnrtowcs(wchar_t *d, const char **s, size_t n, 56_FORTIFY_FN(mbsnrtowcs) size_t mbsnrtowcs(wchar_t *__d, const char **__s, size_t __n,
57 size_t wn, mbstate_t *st) 57 size_t __wn, mbstate_t *__st)
58{ 58{
59 size_t bos = __builtin_object_size(d, 0); 59 size_t __b = __builtin_object_size(__d, 0);
60 size_t r; 60 size_t __r;
61 61
62 if (wn > n / sizeof(wchar_t)) { 62 if (__wn > __n / sizeof(wchar_t)) {
63 bos /= sizeof(wchar_t); 63 __b /= sizeof(wchar_t);
64 r = __orig_mbsnrtowcs(d, s, n, wn > bos ? bos : wn, st); 64 __r = __orig_mbsnrtowcs(__d, __s, __n, __wn > __b ? __b : __wn, __st);
65 if (bos < wn && d && *s && r != (size_t)-1) 65 if (__b < __wn && __d && *__s && __r != (size_t)-1)
66 __builtin_trap(); 66 __builtin_trap();
67 } else { 67 } else {
68 r = __orig_mbsnrtowcs(d, s, n > bos ? bos : n, wn, st); 68 __r = __orig_mbsnrtowcs(__d, __s, __n > __b ? __b : __n, __wn, __st);
69 if (bos < n && d && *s && r != (size_t)-1) 69 if (__b < __n && __d && *__s && __r != (size_t)-1)
70 __builtin_trap(); 70 __builtin_trap();
71 } 71 }
72 return r; 72 return __r;
73} 73}
74#endif 74#endif
75 75
76fortify_fn(mbsrtowcs) size_t mbsrtowcs(wchar_t *d, const char **s, size_t wn, 76_FORTIFY_FN(mbsrtowcs) size_t mbsrtowcs(wchar_t *__d, const char **__s, size_t __wn,
77 mbstate_t *st) 77 mbstate_t *__st)
78{ 78{
79 size_t bos = __builtin_object_size(d, 0); 79 size_t __b = __builtin_object_size(__d, 0);
80 size_t r; 80 size_t __r;
81 81
82 bos /= sizeof(wchar_t); 82 __b /= sizeof(wchar_t);
83 r = __orig_mbsrtowcs(d, s, wn > bos ? bos : wn, st); 83 __r = __orig_mbsrtowcs(__d, __s, __wn > __b ? __b : __wn, __st);
84 if (bos < wn && d && *s && r != (size_t)-1) 84 if (__b < __wn && __d && *__s && __r != (size_t)-1)
85 __builtin_trap(); 85 __builtin_trap();
86 return r; 86 return __r;
87} 87}
88 88
89fortify_fn(mbstowcs) size_t mbstowcs(wchar_t *ws, const char *s, size_t wn) 89_FORTIFY_FN(mbstowcs) size_t mbstowcs(wchar_t *__ws, const char *__s, size_t __wn)
90{ 90{
91 size_t bos = __builtin_object_size(ws, 0); 91 size_t __b = __builtin_object_size(__ws, 0);
92 92
93 if (ws && wn > bos / sizeof(wchar_t)) 93 if (__ws && __wn > __b / sizeof(wchar_t))
94 __builtin_trap(); 94 __builtin_trap();
95 return __orig_mbstowcs(ws, s, wn); 95 return __orig_mbstowcs(__ws, __s, __wn);
96} 96}
97 97
98fortify_fn(wcrtomb) size_t wcrtomb(char *s, wchar_t wc, mbstate_t *st) 98_FORTIFY_FN(wcrtomb) size_t wcrtomb(char *__s, wchar_t __w, mbstate_t *__st)
99{ 99{
100 size_t bos = __builtin_object_size(s, 0); 100 size_t __b = __builtin_object_size(__s, 0);
101 101
102 if (s && MB_CUR_MAX > bos) 102 if (__s && MB_CUR_MAX > __b)
103 __builtin_trap(); 103 __builtin_trap();
104 return __orig_wcrtomb(s, wc, st); 104 return __orig_wcrtomb(__s, __w, __st);
105} 105}
106 106
107fortify_fn(wcscat) wchar_t *wcscat(wchar_t *d, const wchar_t *s) 107_FORTIFY_FN(wcscat) wchar_t *wcscat(wchar_t *__d, const wchar_t *__s)
108{ 108{
109 size_t bos = __builtin_object_size(d, 0); 109 size_t __b = __builtin_object_size(__d, 0);
110 110
111 if (wcslen(s) + wcslen(d) + 1 > bos / sizeof(wchar_t)) 111 if (wcslen(__s) + wcslen(__d) + 1 > __b / sizeof(wchar_t))
112 __builtin_trap(); 112 __builtin_trap();
113 return __orig_wcscat(d, s); 113 return __orig_wcscat(__d, __s);
114} 114}
115 115
116fortify_fn(wcscpy) wchar_t *wcscpy(wchar_t *d, const wchar_t *s) 116_FORTIFY_FN(wcscpy) wchar_t *wcscpy(wchar_t *__d, const wchar_t *__s)
117{ 117{
118 size_t bos = __builtin_object_size(d, 0); 118 size_t __b = __builtin_object_size(__d, 0);
119 119
120 if (wcslen(s) + 1 > bos / sizeof(wchar_t)) 120 if (wcslen(__s) + 1 > __b / sizeof(wchar_t))
121 __builtin_trap(); 121 __builtin_trap();
122 return __orig_wcscpy(d, s); 122 return __orig_wcscpy(__d, __s);
123} 123}
124 124
125fortify_fn(wcsncat) wchar_t *wcsncat(wchar_t *d, const wchar_t *s, size_t n) 125_FORTIFY_FN(wcsncat) wchar_t *wcsncat(wchar_t *__d, const wchar_t *__s, size_t __n)
126{ 126{
127 size_t bos = __builtin_object_size(d, 0); 127 size_t __b = __builtin_object_size(__d, 0);
128 size_t slen, dlen; 128 size_t __sl, __dl;
129 129
130 if (n > bos / sizeof(wchar_t)) { 130 if (__n > __b / sizeof(wchar_t)) {
131 slen = wcslen(s); 131 __sl = wcslen(__s);
132 dlen = wcslen(d); 132 __dl = wcslen(__d);
133 if (slen > n) 133 if (__sl > __n)
134 slen = n; 134 __sl = __n;
135 if (slen + dlen + 1 > bos / sizeof(wchar_t)) 135 if (__sl + __dl + 1 > __b / sizeof(wchar_t))
136 __builtin_trap(); 136 __builtin_trap();
137 } 137 }
138 return __orig_wcsncat(d, s, n); 138 return __orig_wcsncat(__d, __s, __n);
139} 139}
140 140
141fortify_fn(wcsncpy) wchar_t *wcsncpy(wchar_t *d, const wchar_t *s, size_t n) 141_FORTIFY_FN(wcsncpy) wchar_t *wcsncpy(wchar_t *__d, const wchar_t *__s, size_t __n)
142{ 142{
143 size_t bos = __builtin_object_size(d, 0); 143 size_t __b = __builtin_object_size(__d, 0);
144 144
145 if (n > bos / sizeof(wchar_t)) 145 if (__n > __b / sizeof(wchar_t))
146 __builtin_trap(); 146 __builtin_trap();
147 return __orig_wcsncpy(d, s, n); 147 return __orig_wcsncpy(__d, __s, __n);
148} 148}
149 149
150#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ 150#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
151 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) 151 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
152#undef wcsnrtombs 152#undef wcsnrtombs
153fortify_fn(wcsnrtombs) size_t wcsnrtombs(char *d, const wchar_t **s, size_t wn, 153_FORTIFY_FN(wcsnrtombs) size_t wcsnrtombs(char *__d, const wchar_t **__s, size_t __wn,
154 size_t n, mbstate_t *st) 154 size_t __n, mbstate_t *__st)
155{ 155{
156 size_t bos = __builtin_object_size(d, 0); 156 size_t __b = __builtin_object_size(__d, 0);
157 size_t r; 157 size_t __r;
158 158
159 if (wn > n / sizeof(wchar_t)) { 159 if (__wn > __n / sizeof(wchar_t)) {
160 bos /= sizeof(wchar_t); 160 __b /= sizeof(wchar_t);
161 r = __orig_wcsnrtombs(d, s, wn > bos ? bos : wn, n, st); 161 __r = __orig_wcsnrtombs(__d, __s, __wn > __b ? __b : __wn, __n, __st);
162 if (bos < wn && d && *s && r != (size_t)-1) 162 if (__b < __wn && __d && *__s && __r != (size_t)-1)
163 __builtin_trap(); 163 __builtin_trap();
164 } else { 164 } else {
165 r = __orig_wcsnrtombs(d, s, wn, n > bos ? bos : n, st); 165 __r = __orig_wcsnrtombs(__d, __s, __wn, __n > __b ? __b : __n, __st);
166 if (bos < n && d && *s && r != (size_t)-1) 166 if (__b < __n && __d && *__s && __r != (size_t)-1)
167 __builtin_trap(); 167 __builtin_trap();
168 } 168 }
169 return r; 169 return __r;
170} 170}
171#endif 171#endif
172 172
173fortify_fn(wcsrtombs) size_t wcsrtombs(char *d, const wchar_t **s, size_t n, 173_FORTIFY_FN(wcsrtombs) size_t wcsrtombs(char *__d, const wchar_t **__s, size_t __n,
174 mbstate_t *st) 174 mbstate_t *__st)
175{ 175{
176 size_t bos = __builtin_object_size(d, 0); 176 size_t __b = __builtin_object_size(__d, 0);
177 size_t r; 177 size_t __r;
178 178
179 r = __orig_wcsrtombs(d, s, n > bos ? bos : n, st); 179 __r = __orig_wcsrtombs(__d, __s, __n > __b ? __b : __n, __st);
180 if (bos < n && d && *s && r != (size_t)-1) 180 if (__b < __n && __d && *__s && __r != (size_t)-1)
181 __builtin_trap(); 181 __builtin_trap();
182 return r; 182 return __r;
183} 183}
184 184
185fortify_fn(wcstombs) size_t wcstombs(char *s, const wchar_t *ws, size_t n) 185_FORTIFY_FN(wcstombs) size_t wcstombs(char *__s, const wchar_t *__ws, size_t __n)
186{ 186{
187 size_t bos = __builtin_object_size(s, 0); 187 size_t __b = __builtin_object_size(__s, 0);
188 188
189 if (s && n > bos) 189 if (__s && __n > __b)
190 __builtin_trap(); 190 __builtin_trap();
191 return __orig_wcstombs(s, ws, n); 191 return __orig_wcstombs(__s, __ws, __n);
192} 192}
193 193
194fortify_fn(wctomb) int wctomb(char *s, wchar_t wc) 194_FORTIFY_FN(wctomb) int wctomb(char *__s, wchar_t __w)
195{ 195{
196 size_t bos = __builtin_object_size(s, 0); 196 size_t __b = __builtin_object_size(__s, 0);
197 197
198 if (s && MB_CUR_MAX > bos) 198 if (__s && MB_CUR_MAX > __b)
199 __builtin_trap(); 199 __builtin_trap();
200 return __orig_wctomb(s, wc); 200 return __orig_wctomb(__s, __w);
201} 201}
202 202
203fortify_fn(wmemcpy) wchar_t *wmemcpy(wchar_t *d, const wchar_t *s, size_t n) 203_FORTIFY_FN(wmemcpy) wchar_t *wmemcpy(wchar_t *__d, const wchar_t *__s, size_t __n)
204{ 204{
205 size_t bos = __builtin_object_size(d, 0); 205 size_t __b = __builtin_object_size(__d, 0);
206 206
207 if (n > bos / sizeof(wchar_t)) 207 if (__n > __b / sizeof(wchar_t))
208 __builtin_trap(); 208 __builtin_trap();
209 return __orig_wmemcpy(d, s, n); 209 return __orig_wmemcpy(__d, __s, __n);
210} 210}
211 211
212fortify_fn(wmemmove) wchar_t *wmemmove(wchar_t *d, const wchar_t *s, size_t n) 212_FORTIFY_FN(wmemmove) wchar_t *wmemmove(wchar_t *__d, const wchar_t *__s, size_t __n)
213{ 213{
214 size_t bos = __builtin_object_size(d, 0); 214 size_t __b = __builtin_object_size(__d, 0);
215 215
216 if (n > bos / sizeof(wchar_t)) 216 if (__n > __b / sizeof(wchar_t))
217 __builtin_trap(); 217 __builtin_trap();
218 return __orig_wmemmove(d, s, n); 218 return __orig_wmemmove(__d, __s, __n);
219} 219}
220 220
221fortify_fn(wmemset) wchar_t *wmemset(wchar_t *s, wchar_t c, size_t n) 221_FORTIFY_FN(wmemset) wchar_t *wmemset(wchar_t *__s, wchar_t __c, size_t __n)
222{ 222{
223 size_t bos = __builtin_object_size(s, 0); 223 size_t __b = __builtin_object_size(__s, 0);
224 224
225 if (n > bos / sizeof(wchar_t)) 225 if (__n > __b / sizeof(wchar_t))
226 __builtin_trap(); 226 __builtin_trap();
227 return __orig_wmemset(s, c, n); 227 return __orig_wmemset(__s, __c, __n);
228} 228}
229 229
230#ifdef __cplusplus 230#ifdef __cplusplus