Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1restore #undef'ed macro values after we're done 2 3some programs that define these miss them if removed 4 5push_macro and pop_macro pragmas allegedly well supported 6by gcc, clang and msvc 7 8--- a/include/fortify/poll.h 9+++ b/include/fortify/poll.h 10@@ -29,6 +29,7 @@ __extension__ 11 extern "C" { 12 #endif 13 14+#pragma push_macro("poll") 15 #undef poll 16 17 _FORTIFY_FN(poll) int poll(struct pollfd * _FORTIFY_POS0 __f, nfds_t __n, int __s) 18@@ -40,6 +41,8 @@ _FORTIFY_FN(poll) int poll(struct pollfd * _FORTIFY_POS0 __f, nfds_t __n, int __ 19 return __orig_poll(__f, __n, __s); 20 } 21 22+#pragma pop_macro("poll") 23+ 24 #ifdef __cplusplus 25 } 26 #endif 27--- a/include/fortify/stdio.h 28+++ b/include/fortify/stdio.h 29@@ -29,12 +29,19 @@ __extension__ 30 extern "C" { 31 #endif 32 33+#pragma push_macro("fgets") 34 #undef fgets 35+#pragma push_macro("fread") 36 #undef fread 37+#pragma push_macro("fwrite") 38 #undef fwrite 39+#pragma push_macro("vsprintf") 40 #undef vsprintf 41+#pragma push_macro("vsnprintf") 42 #undef vsnprintf 43+#pragma push_macro("snprintf") 44 #undef snprintf 45+#pragma push_macro("sprintf") 46 #undef sprintf 47 48 _FORTIFY_FN(fgets) char *fgets(char * _FORTIFY_POS0 __s, int __n, FILE *__f) 49@@ -140,6 +147,14 @@ _FORTIFY_FN(sprintf) int sprintf(char *__s, const char *__f, ...) 50 #endif /* __has_builtin(__builtin_va_arg_pack) */ 51 #endif /* defined(__has_builtin) */ 52 53+#pragma pop_macro("fgets") 54+#pragma pop_macro("fread") 55+#pragma pop_macro("fwrite") 56+#pragma pop_macro("vsprintf") 57+#pragma pop_macro("vsnprintf") 58+#pragma pop_macro("snprintf") 59+#pragma pop_macro("sprintf") 60+ 61 #ifdef __cplusplus 62 } 63 #endif 64--- a/include/fortify/stdlib.h 65+++ b/include/fortify/stdlib.h 66@@ -38,7 +38,10 @@ extern "C" { 67 68 /* FIXME clang */ 69 #if (defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)) && !defined(__clang__) 70+ 71+#pragma push_macro("realpath") 72 #undef realpath 73+ 74 _FORTIFY_FN(realpath) char *realpath(const char *__p, char *__r) 75 { 76 #ifndef PATH_MAX 77@@ -60,6 +63,9 @@ _FORTIFY_FN(realpath) char *realpath(const char *__p, char *__r) 78 return __orig_realpath(__p, __r); 79 #endif 80 } 81+ 82+#pragma pop_macro("realpath") 83+ 84 #endif 85 86 #ifdef __cplusplus 87--- a/include/fortify/string.h 88+++ b/include/fortify/string.h 89@@ -29,12 +29,19 @@ __extension__ 90 extern "C" { 91 #endif 92 93+#pragma push_macro("memcpy") 94 #undef memcpy 95+#pragma push_macro("memmove") 96 #undef memmove 97+#pragma push_macro("memset") 98 #undef memset 99+#pragma push_macro("strcat") 100 #undef strcat 101+#pragma push_macro("strcpy") 102 #undef strcpy 103+#pragma push_macro("strncat") 104 #undef strncat 105+#pragma push_macro("strncpy") 106 #undef strncpy 107 108 _FORTIFY_FN(memcpy) void *memcpy(void * _FORTIFY_POS0 __od, 109@@ -183,6 +190,14 @@ _FORTIFY_FN(strlcpy) size_t strlcpy(char * _FORTIFY_POS0 __d, 110 } 111 #endif 112 113+#pragma pop_macro("memcpy") 114+#pragma pop_macro("memmove") 115+#pragma pop_macro("memset") 116+#pragma pop_macro("strcat") 117+#pragma pop_macro("strcpy") 118+#pragma pop_macro("strncat") 119+#pragma pop_macro("strncpy") 120+ 121 #ifdef __cplusplus 122 } 123 #endif 124--- a/include/fortify/strings.h 125+++ b/include/fortify/strings.h 126@@ -29,8 +29,12 @@ extern "C" { 127 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_POSIX_SOURCE) \ 128 || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE+0 < 200809L) \ 129 || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700) 130+ 131+#pragma push_macro("bcopy") 132 #undef bcopy 133+#pragma push_macro("bzero") 134 #undef bzero 135+ 136 _FORTIFY_FN(bcopy) void bcopy(const void * _FORTIFY_POS0 __s, 137 void * _FORTIFY_POS0 __d, size_t __n) 138 { 139@@ -52,6 +56,9 @@ _FORTIFY_FN(bzero) void bzero(void * _FORTIFY_POS0 __s, size_t __n) 140 } 141 #endif 142 143+#pragma pop_macro("bcopy") 144+#pragma pop_macro("bzero") 145+ 146 #ifdef __cplusplus 147 } 148 #endif 149--- a/include/fortify/sys/socket.h 150+++ b/include/fortify/sys/socket.h 151@@ -29,9 +29,13 @@ __extension__ 152 extern "C" { 153 #endif 154 155+#pragma push_macro("recv") 156 #undef recv 157+#pragma push_macro("recvfrom") 158 #undef recvfrom 159+#pragma push_macro("send") 160 #undef send 161+#pragma push_macro("sendto") 162 #undef sendto 163 164 _FORTIFY_FN(recv) ssize_t recv(int __f, void * _FORTIFY_POS0 __s, size_t __n, 165@@ -76,6 +80,11 @@ _FORTIFY_FN(sendto) ssize_t sendto(int __f, const void * _FORTIFY_POS0 __s, 166 return __orig_sendto(__f, __s, __n, __fl, __a, __l); 167 } 168 169+#pragma push_macro("recv") 170+#pragma push_macro("recvfrom") 171+#pragma push_macro("send") 172+#pragma push_macro("sendto") 173+ 174 #ifdef __cplusplus 175 } 176 #endif 177--- a/include/fortify/unistd.h 178+++ b/include/fortify/unistd.h 179@@ -29,16 +29,27 @@ __extension__ 180 extern "C" { 181 #endif 182 183+#pragma push_macro("confstr") 184 #undef confstr 185+#pragma push_macro("getcwd") 186 #undef getcwd 187+#pragma push_macro("getgroups") 188 #undef getgroups 189+#pragma push_macro("gethostname") 190 #undef gethostname 191+#pragma push_macro("getlogin_r") 192 #undef getlogin_r 193+#pragma push_macro("pread") 194 #undef pread 195+#pragma push_macro("read") 196 #undef read 197+#pragma push_macro("readlink") 198 #undef readlink 199+#pragma push_macro("readlinkat") 200 #undef readlinkat 201+#pragma push_macro("ttyname_r") 202 #undef ttyname_r 203+#pragma push_macro("write") 204 #undef write 205 206 _FORTIFY_FN(confstr) size_t confstr(int __n, char * _FORTIFY_POS0 __s, size_t __l) 207@@ -158,6 +169,18 @@ _FORTIFY_FN(write) ssize_t write(int __f, const void * _FORTIFY_POS0 __s, 208 return __orig_write(__f, __s, __n); 209 } 210 211+#pragma pop_macro("confstr") 212+#pragma pop_macro("getcwd") 213+#pragma pop_macro("getgroups") 214+#pragma pop_macro("gethostname") 215+#pragma pop_macro("getlogin_r") 216+#pragma pop_macro("pread") 217+#pragma pop_macro("read") 218+#pragma pop_macro("readlink") 219+#pragma pop_macro("readlinkat") 220+#pragma pop_macro("ttyname_r") 221+#pragma pop_macro("write") 222+ 223 #ifdef __cplusplus 224 } 225 #endif 226--- a/include/fortify/wchar.h 227+++ b/include/fortify/wchar.h 228@@ -43,19 +43,33 @@ __extension__ 229 extern "C" { 230 #endif 231 232+#pragma push_macro("fgetws") 233 #undef fgetws 234+#pragma push_macro("mbsrtowcs") 235 #undef mbsrtowcs 236+#pragma push_macro("mbstowcs") 237 #undef mbstowcs 238+#pragma push_macro("wcrtomb") 239 #undef wcrtomb 240+#pragma push_macro("wcscat") 241 #undef wcscat 242+#pragma push_macro("wcscpy") 243 #undef wcscpy 244+#pragma push_macro("wcsncat") 245 #undef wcsncat 246+#pragma push_macro("wcsncpy") 247 #undef wcsncpy 248+#pragma push_macro("wcsrtombs") 249 #undef wcsrtombs 250+#pragma push_macro("wcstombs") 251 #undef wcstombs 252+#pragma push_macro("wctomb") 253 #undef wctomb 254+#pragma push_macro("wmemcpy") 255 #undef wmemcpy 256+#pragma push_macro("wmemmove") 257 #undef wmemmove 258+#pragma push_macro("wmemset") 259 #undef wmemset 260 261 _FORTIFY_FN(fgetws) wchar_t *fgetws(wchar_t * _FORTIFY_POS0 __s, 262@@ -269,6 +283,21 @@ _FORTIFY_FN(wmemset) wchar_t *wmemset(wchar_t * _FORTIFY_POS0 __s, 263 return __orig_wmemset(__s, __c, __n); 264 } 265 266+#pragma pop_macro("fgetws") 267+#pragma pop_macro("mbsrtowcs") 268+#pragma pop_macro("mbstowcs") 269+#pragma pop_macro("wcrtomb") 270+#pragma pop_macro("wcscat") 271+#pragma pop_macro("wcscpy") 272+#pragma pop_macro("wcsncat") 273+#pragma pop_macro("wcsncpy") 274+#pragma pop_macro("wcsrtombs") 275+#pragma pop_macro("wcstombs") 276+#pragma pop_macro("wctomb") 277+#pragma pop_macro("wmemcpy") 278+#pragma pop_macro("wmemmove") 279+#pragma pop_macro("wmemset") 280+ 281 #ifdef __cplusplus 282 } 283 #endif