1 /* -*- buffer-read-only: t -*- 2 * 3 * reentr.h 4 * 5 * Copyright (C) 2002, 2003, 2005 by Larry Wall and others 6 * 7 * You may distribute under the terms of either the GNU General Public 8 * License or the Artistic License, as specified in the README file. 9 * 10 * !!!!!!! DO NOT EDIT THIS FILE !!!!!!! 11 * This file is built by reentr.pl from data in reentr.pl. 12 */ 13 14 #ifndef REENTR_H 15 #define REENTR_H 16 17 #ifdef USE_REENTRANT_API 18 19 #ifdef PERL_CORE 20 # define PL_REENTRANT_RETINT PL_reentrant_retint 21 #endif 22 23 /* Deprecations: some platforms have the said reentrant interfaces 24 * but they are declared obsolete and are not to be used. Often this 25 * means that the platform has threadsafed the interfaces (hopefully). 26 * All this is OS version dependent, so we are of course fooling ourselves. 27 * If you know of more deprecations on some platforms, please add your own. */ 28 29 #ifdef __hpux 30 # undef HAS_CRYPT_R 31 # undef HAS_DRAND48_R 32 # undef HAS_ENDGRENT_R 33 # undef HAS_ENDPWENT_R 34 # undef HAS_GETGRENT_R 35 # undef HAS_GETPWENT_R 36 # undef HAS_SETLOCALE_R 37 # undef HAS_SRAND48_R 38 # undef HAS_STRERROR_R 39 # define NETDB_R_OBSOLETE 40 #endif 41 42 #if defined(__osf__) && defined(__alpha) /* Tru64 aka Digital UNIX */ 43 # undef HAS_CRYPT_R 44 # undef HAS_STRERROR_R 45 # define NETDB_R_OBSOLETE 46 #endif 47 48 #ifdef NETDB_R_OBSOLETE 49 # undef HAS_ENDHOSTENT_R 50 # undef HAS_ENDNETENT_R 51 # undef HAS_ENDPROTOENT_R 52 # undef HAS_ENDSERVENT_R 53 # undef HAS_GETHOSTBYADDR_R 54 # undef HAS_GETHOSTBYNAME_R 55 # undef HAS_GETHOSTENT_R 56 # undef HAS_GETNETBYADDR_R 57 # undef HAS_GETNETBYNAME_R 58 # undef HAS_GETNETENT_R 59 # undef HAS_GETPROTOBYNAME_R 60 # undef HAS_GETPROTOBYNUMBER_R 61 # undef HAS_GETPROTOENT_R 62 # undef HAS_GETSERVBYNAME_R 63 # undef HAS_GETSERVBYPORT_R 64 # undef HAS_GETSERVENT_R 65 # undef HAS_SETHOSTENT_R 66 # undef HAS_SETNETENT_R 67 # undef HAS_SETPROTOENT_R 68 # undef HAS_SETSERVENT_R 69 #endif 70 71 #ifdef I_PWD 72 # include <pwd.h> 73 #endif 74 #ifdef I_GRP 75 # include <grp.h> 76 #endif 77 #ifdef I_NETDB 78 # include <netdb.h> 79 #endif 80 #ifdef I_STDLIB 81 # include <stdlib.h> /* drand48_data */ 82 #endif 83 #ifdef I_CRYPT 84 # ifdef I_CRYPT 85 # include <crypt.h> 86 # endif 87 #endif 88 #ifdef HAS_GETSPNAM_R 89 # ifdef I_SHADOW 90 # include <shadow.h> 91 # endif 92 #endif 93 94 #define REENTRANT_PROTO_B_B 1 95 #define REENTRANT_PROTO_B_BI 2 96 #define REENTRANT_PROTO_B_BW 3 97 #define REENTRANT_PROTO_B_CCD 4 98 #define REENTRANT_PROTO_B_CCS 5 99 #define REENTRANT_PROTO_B_IBI 6 100 #define REENTRANT_PROTO_B_IBW 7 101 #define REENTRANT_PROTO_B_SB 8 102 #define REENTRANT_PROTO_B_SBI 9 103 #define REENTRANT_PROTO_I_BI 10 104 #define REENTRANT_PROTO_I_BW 11 105 #define REENTRANT_PROTO_I_CCSBWR 12 106 #define REENTRANT_PROTO_I_CCSD 13 107 #define REENTRANT_PROTO_I_CII 14 108 #define REENTRANT_PROTO_I_CIISD 15 109 #define REENTRANT_PROTO_I_CSBI 16 110 #define REENTRANT_PROTO_I_CSBIR 17 111 #define REENTRANT_PROTO_I_CSBWR 18 112 #define REENTRANT_PROTO_I_CSBWRE 19 113 #define REENTRANT_PROTO_I_CSD 20 114 #define REENTRANT_PROTO_I_CWISBWRE 21 115 #define REENTRANT_PROTO_I_CWISD 22 116 #define REENTRANT_PROTO_I_D 23 117 #define REENTRANT_PROTO_I_H 24 118 #define REENTRANT_PROTO_I_IBI 25 119 #define REENTRANT_PROTO_I_IBW 26 120 #define REENTRANT_PROTO_I_ICBI 27 121 #define REENTRANT_PROTO_I_ICSBWR 28 122 #define REENTRANT_PROTO_I_ICSD 29 123 #define REENTRANT_PROTO_I_ID 30 124 #define REENTRANT_PROTO_I_IISD 31 125 #define REENTRANT_PROTO_I_ISBWR 32 126 #define REENTRANT_PROTO_I_ISD 33 127 #define REENTRANT_PROTO_I_LISBI 34 128 #define REENTRANT_PROTO_I_LISD 35 129 #define REENTRANT_PROTO_I_LS 36 130 #define REENTRANT_PROTO_I_SB 37 131 #define REENTRANT_PROTO_I_SBI 38 132 #define REENTRANT_PROTO_I_SBIE 39 133 #define REENTRANT_PROTO_I_SBIH 40 134 #define REENTRANT_PROTO_I_SBIR 41 135 #define REENTRANT_PROTO_I_SBWR 42 136 #define REENTRANT_PROTO_I_SBWRE 43 137 #define REENTRANT_PROTO_I_SD 44 138 #define REENTRANT_PROTO_I_ST 45 139 #define REENTRANT_PROTO_I_St 46 140 #define REENTRANT_PROTO_I_TISD 47 141 #define REENTRANT_PROTO_I_TS 48 142 #define REENTRANT_PROTO_I_TSBI 49 143 #define REENTRANT_PROTO_I_TSBIR 50 144 #define REENTRANT_PROTO_I_TSBWR 51 145 #define REENTRANT_PROTO_I_TSR 52 146 #define REENTRANT_PROTO_I_TsISBWRE 53 147 #define REENTRANT_PROTO_I_UISBWRE 54 148 #define REENTRANT_PROTO_I_iS 55 149 #define REENTRANT_PROTO_I_lS 56 150 #define REENTRANT_PROTO_I_uISBWRE 57 151 #define REENTRANT_PROTO_S_CBI 58 152 #define REENTRANT_PROTO_S_CCSBI 59 153 #define REENTRANT_PROTO_S_CIISBIE 60 154 #define REENTRANT_PROTO_S_CSBI 61 155 #define REENTRANT_PROTO_S_CSBIE 62 156 #define REENTRANT_PROTO_S_CWISBIE 63 157 #define REENTRANT_PROTO_S_CWISBWIE 64 158 #define REENTRANT_PROTO_S_ICSBI 65 159 #define REENTRANT_PROTO_S_ISBI 66 160 #define REENTRANT_PROTO_S_LISBI 67 161 #define REENTRANT_PROTO_S_SBI 68 162 #define REENTRANT_PROTO_S_SBIE 69 163 #define REENTRANT_PROTO_S_SBW 70 164 #define REENTRANT_PROTO_S_TISBI 71 165 #define REENTRANT_PROTO_S_TS 72 166 #define REENTRANT_PROTO_S_TSBI 73 167 #define REENTRANT_PROTO_S_TSBIE 74 168 #define REENTRANT_PROTO_S_TWISBIE 75 169 #define REENTRANT_PROTO_V_D 76 170 #define REENTRANT_PROTO_V_H 77 171 #define REENTRANT_PROTO_V_ID 78 172 173 /* Defines for indicating which special features are supported. */ 174 175 /* The getgrent getgrgid getgrnam using buffer? */ 176 177 #if defined(HAS_GETGRENT_R) && (GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIR || GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBW || GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBI || GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBI || GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIH) 178 # define GETGRENT_R_HAS_BUFFER 179 #else 180 # undef GETGRENT_R_HAS_BUFFER 181 #endif 182 #if defined(HAS_GETGRGID_R) && (GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBWR || GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBIR || GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBI || GETGRGID_R_PROTO == REENTRANT_PROTO_S_TSBI) 183 # define GETGRGID_R_HAS_BUFFER 184 #else 185 # undef GETGRGID_R_HAS_BUFFER 186 #endif 187 #if defined(HAS_GETGRNAM_R) && (GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR || GETGRNAM_R_PROTO == REENTRANT_PROTO_S_CBI || GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBI || GETGRNAM_R_PROTO == REENTRANT_PROTO_S_CSBI) 188 # define GETGRNAM_R_HAS_BUFFER 189 #else 190 # undef GETGRNAM_R_HAS_BUFFER 191 #endif 192 193 /* Any of the getgrent getgrgid getgrnam using buffer? */ 194 195 #if (defined(GETGRENT_R_HAS_BUFFER) || defined(GETGRGID_R_HAS_BUFFER) || defined(GETGRNAM_R_HAS_BUFFER)) 196 # define USE_GRENT_BUFFER 197 #else 198 # undef USE_GRENT_BUFFER 199 #endif 200 201 /* The getgrent getgrgid getgrnam using ptr? */ 202 203 #if defined(HAS_GETGRENT_R) && (GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIR) 204 # define GETGRENT_R_HAS_PTR 205 #else 206 # undef GETGRENT_R_HAS_PTR 207 #endif 208 #if defined(HAS_GETGRGID_R) && (GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBWR || GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBIR) 209 # define GETGRGID_R_HAS_PTR 210 #else 211 # undef GETGRGID_R_HAS_PTR 212 #endif 213 #if defined(HAS_GETGRNAM_R) && (GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR) 214 # define GETGRNAM_R_HAS_PTR 215 #else 216 # undef GETGRNAM_R_HAS_PTR 217 #endif 218 219 /* Any of the getgrent getgrgid getgrnam using ptr? */ 220 221 #if (defined(GETGRENT_R_HAS_PTR) || defined(GETGRGID_R_HAS_PTR) || defined(GETGRNAM_R_HAS_PTR)) 222 # define USE_GRENT_PTR 223 #else 224 # undef USE_GRENT_PTR 225 #endif 226 227 /* The getpwent getpwnam getpwuid using ptr? */ 228 229 #if defined(HAS_GETPWENT_R) && (GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIR) 230 # define GETPWENT_R_HAS_PTR 231 #else 232 # undef GETPWENT_R_HAS_PTR 233 #endif 234 #if defined(HAS_GETPWNAM_R) && (GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR) 235 # define GETPWNAM_R_HAS_PTR 236 #else 237 # undef GETPWNAM_R_HAS_PTR 238 #endif 239 #if defined(HAS_GETPWUID_R) && (GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBWR || GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBIR) 240 # define GETPWUID_R_HAS_PTR 241 #else 242 # undef GETPWUID_R_HAS_PTR 243 #endif 244 245 /* Any of the getpwent getpwnam getpwuid using ptr? */ 246 247 #if (defined(GETPWENT_R_HAS_PTR) || defined(GETPWNAM_R_HAS_PTR) || defined(GETPWUID_R_HAS_PTR)) 248 # define USE_PWENT_PTR 249 #else 250 # undef USE_PWENT_PTR 251 #endif 252 253 /* The getspent getspnam using ptr? */ 254 255 #if defined(HAS_GETSPNAM_R) && (GETSPNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR) 256 # define GETSPNAM_R_HAS_PTR 257 #else 258 # undef GETSPNAM_R_HAS_PTR 259 #endif 260 261 /* Any of the getspent getspnam using ptr? */ 262 263 #if (defined(GETSPENT_R_HAS_PTR) || defined(GETSPNAM_R_HAS_PTR)) 264 # define USE_SPENT_PTR 265 #else 266 # undef USE_SPENT_PTR 267 #endif 268 269 /* The getgrent getgrgid getgrnam setgrent endgrent using fptr? */ 270 271 #if defined(HAS_GETGRENT_R) && (GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIH) 272 # define GETGRENT_R_HAS_FPTR 273 #else 274 # undef GETGRENT_R_HAS_FPTR 275 #endif 276 #if defined(HAS_SETGRENT_R) && (SETGRENT_R_PROTO == REENTRANT_PROTO_I_H || SETGRENT_R_PROTO == REENTRANT_PROTO_V_H) 277 # define SETGRENT_R_HAS_FPTR 278 #else 279 # undef SETGRENT_R_HAS_FPTR 280 #endif 281 #if defined(HAS_ENDGRENT_R) && (ENDGRENT_R_PROTO == REENTRANT_PROTO_I_H || ENDGRENT_R_PROTO == REENTRANT_PROTO_V_H) 282 # define ENDGRENT_R_HAS_FPTR 283 #else 284 # undef ENDGRENT_R_HAS_FPTR 285 #endif 286 287 /* Any of the getgrent getgrgid getgrnam setgrent endgrent using fptr? */ 288 289 #if (defined(GETGRENT_R_HAS_FPTR) || defined(GETGRGID_R_HAS_FPTR) || defined(GETGRNAM_R_HAS_FPTR) || defined(SETGRENT_R_HAS_FPTR) || defined(ENDGRENT_R_HAS_FPTR)) 290 # define USE_GRENT_FPTR 291 #else 292 # undef USE_GRENT_FPTR 293 #endif 294 295 /* The getpwent getpwnam getpwuid setpwent endpwent using fptr? */ 296 297 #if defined(HAS_GETPWENT_R) && (GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIH) 298 # define GETPWENT_R_HAS_FPTR 299 #else 300 # undef GETPWENT_R_HAS_FPTR 301 #endif 302 #if defined(HAS_SETPWENT_R) && (SETPWENT_R_PROTO == REENTRANT_PROTO_I_H || SETPWENT_R_PROTO == REENTRANT_PROTO_V_H) 303 # define SETPWENT_R_HAS_FPTR 304 #else 305 # undef SETPWENT_R_HAS_FPTR 306 #endif 307 #if defined(HAS_ENDPWENT_R) && (ENDPWENT_R_PROTO == REENTRANT_PROTO_I_H || ENDPWENT_R_PROTO == REENTRANT_PROTO_V_H) 308 # define ENDPWENT_R_HAS_FPTR 309 #else 310 # undef ENDPWENT_R_HAS_FPTR 311 #endif 312 313 /* Any of the getpwent getpwnam getpwuid setpwent endpwent using fptr? */ 314 315 #if (defined(GETPWENT_R_HAS_FPTR) || defined(GETPWNAM_R_HAS_FPTR) || defined(GETPWUID_R_HAS_FPTR) || defined(SETPWENT_R_HAS_FPTR) || defined(ENDPWENT_R_HAS_FPTR)) 316 # define USE_PWENT_FPTR 317 #else 318 # undef USE_PWENT_FPTR 319 #endif 320 321 /* The getpwent getpwgid getpwnam using buffer? */ 322 323 #if defined(HAS_GETPWENT_R) && (GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIR || GETPWENT_R_PROTO == REENTRANT_PROTO_S_SBW || GETPWENT_R_PROTO == REENTRANT_PROTO_S_SBI || GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBI || GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIH) 324 # define GETPWENT_R_HAS_BUFFER 325 #else 326 # undef GETPWENT_R_HAS_BUFFER 327 #endif 328 #if defined(HAS_GETPWNAM_R) && (GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR || GETPWNAM_R_PROTO == REENTRANT_PROTO_S_CSBI || GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBI) 329 # define GETPWNAM_R_HAS_BUFFER 330 #else 331 # undef GETPWNAM_R_HAS_BUFFER 332 #endif 333 334 /* Any of the getpwent getpwgid getpwnam using buffer? */ 335 336 #if (defined(GETPWENT_R_HAS_BUFFER) || defined(GETPWGID_R_HAS_BUFFER) || defined(GETPWNAM_R_HAS_BUFFER)) 337 # define USE_PWENT_BUFFER 338 #else 339 # undef USE_PWENT_BUFFER 340 #endif 341 342 /* The gethostent gethostbyaddr gethostbyname using ptr? */ 343 344 #if defined(HAS_GETHOSTENT_R) && (GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBWRE) 345 # define GETHOSTENT_R_HAS_PTR 346 #else 347 # undef GETHOSTENT_R_HAS_PTR 348 #endif 349 #if defined(HAS_GETHOSTBYADDR_R) && (GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISBWRE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_TsISBWRE) 350 # define GETHOSTBYADDR_R_HAS_PTR 351 #else 352 # undef GETHOSTBYADDR_R_HAS_PTR 353 #endif 354 #if defined(HAS_GETHOSTBYNAME_R) && (GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE) 355 # define GETHOSTBYNAME_R_HAS_PTR 356 #else 357 # undef GETHOSTBYNAME_R_HAS_PTR 358 #endif 359 360 /* Any of the gethostent gethostbyaddr gethostbyname using ptr? */ 361 362 #if (defined(GETHOSTENT_R_HAS_PTR) || defined(GETHOSTBYADDR_R_HAS_PTR) || defined(GETHOSTBYNAME_R_HAS_PTR)) 363 # define USE_HOSTENT_PTR 364 #else 365 # undef USE_HOSTENT_PTR 366 #endif 367 368 /* The getnetent getnetbyaddr getnetbyname using ptr? */ 369 370 #if defined(HAS_GETNETENT_R) && (GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBWRE) 371 # define GETNETENT_R_HAS_PTR 372 #else 373 # undef GETNETENT_R_HAS_PTR 374 #endif 375 #if defined(HAS_GETNETBYADDR_R) && (GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE) 376 # define GETNETBYADDR_R_HAS_PTR 377 #else 378 # undef GETNETBYADDR_R_HAS_PTR 379 #endif 380 #if defined(HAS_GETNETBYNAME_R) && (GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE) 381 # define GETNETBYNAME_R_HAS_PTR 382 #else 383 # undef GETNETBYNAME_R_HAS_PTR 384 #endif 385 386 /* Any of the getnetent getnetbyaddr getnetbyname using ptr? */ 387 388 #if (defined(GETNETENT_R_HAS_PTR) || defined(GETNETBYADDR_R_HAS_PTR) || defined(GETNETBYNAME_R_HAS_PTR)) 389 # define USE_NETENT_PTR 390 #else 391 # undef USE_NETENT_PTR 392 #endif 393 394 /* The getprotoent getprotobyname getprotobynumber using ptr? */ 395 396 #if defined(HAS_GETPROTOENT_R) && (GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBWR) 397 # define GETPROTOENT_R_HAS_PTR 398 #else 399 # undef GETPROTOENT_R_HAS_PTR 400 #endif 401 #if defined(HAS_GETPROTOBYNAME_R) && (GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWR) 402 # define GETPROTOBYNAME_R_HAS_PTR 403 #else 404 # undef GETPROTOBYNAME_R_HAS_PTR 405 #endif 406 #if defined(HAS_GETPROTOBYNUMBER_R) && (GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISBWR) 407 # define GETPROTOBYNUMBER_R_HAS_PTR 408 #else 409 # undef GETPROTOBYNUMBER_R_HAS_PTR 410 #endif 411 412 /* Any of the getprotoent getprotobyname getprotobynumber using ptr? */ 413 414 #if (defined(GETPROTOENT_R_HAS_PTR) || defined(GETPROTOBYNAME_R_HAS_PTR) || defined(GETPROTOBYNUMBER_R_HAS_PTR)) 415 # define USE_PROTOENT_PTR 416 #else 417 # undef USE_PROTOENT_PTR 418 #endif 419 420 /* The getservent getservbyname getservbyport using ptr? */ 421 422 #if defined(HAS_GETSERVENT_R) && (GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBWR) 423 # define GETSERVENT_R_HAS_PTR 424 #else 425 # undef GETSERVENT_R_HAS_PTR 426 #endif 427 #if defined(HAS_GETSERVBYNAME_R) && (GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSBWR) 428 # define GETSERVBYNAME_R_HAS_PTR 429 #else 430 # undef GETSERVBYNAME_R_HAS_PTR 431 #endif 432 #if defined(HAS_GETSERVBYPORT_R) && (GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSBWR) 433 # define GETSERVBYPORT_R_HAS_PTR 434 #else 435 # undef GETSERVBYPORT_R_HAS_PTR 436 #endif 437 438 /* Any of the getservent getservbyname getservbyport using ptr? */ 439 440 #if (defined(GETSERVENT_R_HAS_PTR) || defined(GETSERVBYNAME_R_HAS_PTR) || defined(GETSERVBYPORT_R_HAS_PTR)) 441 # define USE_SERVENT_PTR 442 #else 443 # undef USE_SERVENT_PTR 444 #endif 445 446 /* The gethostent gethostbyaddr gethostbyname using buffer? */ 447 448 #if defined(HAS_GETHOSTENT_R) && (GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBWRE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBIE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBIE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBI || GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBI) 449 # define GETHOSTENT_R_HAS_BUFFER 450 #else 451 # undef GETHOSTENT_R_HAS_BUFFER 452 #endif 453 #if defined(HAS_GETHOSTBYADDR_R) && (GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISBWRE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBWIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TWISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CIISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CSBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TSBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_TsISBWRE) 454 # define GETHOSTBYADDR_R_HAS_BUFFER 455 #else 456 # undef GETHOSTBYADDR_R_HAS_BUFFER 457 #endif 458 #if defined(HAS_GETHOSTBYNAME_R) && (GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE || GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBIE) 459 # define GETHOSTBYNAME_R_HAS_BUFFER 460 #else 461 # undef GETHOSTBYNAME_R_HAS_BUFFER 462 #endif 463 464 /* Any of the gethostent gethostbyaddr gethostbyname using buffer? */ 465 466 #if (defined(GETHOSTENT_R_HAS_BUFFER) || defined(GETHOSTBYADDR_R_HAS_BUFFER) || defined(GETHOSTBYNAME_R_HAS_BUFFER)) 467 # define USE_HOSTENT_BUFFER 468 #else 469 # undef USE_HOSTENT_BUFFER 470 #endif 471 472 /* The getnetent getnetbyaddr getnetbyname using buffer? */ 473 474 #if defined(HAS_GETNETENT_R) && (GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBWRE || GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBIE || GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBIE || GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBI || GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBI) 475 # define GETNETENT_R_HAS_BUFFER 476 #else 477 # undef GETNETENT_R_HAS_BUFFER 478 #endif 479 #if defined(HAS_GETNETBYADDR_R) && (GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_LISBI || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_S_TISBI || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_S_LISBI || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE) 480 # define GETNETBYADDR_R_HAS_BUFFER 481 #else 482 # undef GETNETBYADDR_R_HAS_BUFFER 483 #endif 484 #if defined(HAS_GETNETBYNAME_R) && (GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE || GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBI || GETNETBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBI) 485 # define GETNETBYNAME_R_HAS_BUFFER 486 #else 487 # undef GETNETBYNAME_R_HAS_BUFFER 488 #endif 489 490 /* Any of the getnetent getnetbyaddr getnetbyname using buffer? */ 491 492 #if (defined(GETNETENT_R_HAS_BUFFER) || defined(GETNETBYADDR_R_HAS_BUFFER) || defined(GETNETBYNAME_R_HAS_BUFFER)) 493 # define USE_NETENT_BUFFER 494 #else 495 # undef USE_NETENT_BUFFER 496 #endif 497 498 /* The getprotoent getprotobyname getprotobynumber using buffer? */ 499 500 #if defined(HAS_GETPROTOENT_R) && (GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBI || GETPROTOENT_R_PROTO == REENTRANT_PROTO_S_SBI) 501 # define GETPROTOENT_R_HAS_BUFFER 502 #else 503 # undef GETPROTOENT_R_HAS_BUFFER 504 #endif 505 #if defined(HAS_GETPROTOBYNAME_R) && (GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBI) 506 # define GETPROTOBYNAME_R_HAS_BUFFER 507 #else 508 # undef GETPROTOBYNAME_R_HAS_BUFFER 509 #endif 510 #if defined(HAS_GETPROTOBYNUMBER_R) && (GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISBWR || GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_S_ISBI) 511 # define GETPROTOBYNUMBER_R_HAS_BUFFER 512 #else 513 # undef GETPROTOBYNUMBER_R_HAS_BUFFER 514 #endif 515 516 /* Any of the getprotoent getprotobyname getprotobynumber using buffer? */ 517 518 #if (defined(GETPROTOENT_R_HAS_BUFFER) || defined(GETPROTOBYNAME_R_HAS_BUFFER) || defined(GETPROTOBYNUMBER_R_HAS_BUFFER)) 519 # define USE_PROTOENT_BUFFER 520 #else 521 # undef USE_PROTOENT_BUFFER 522 #endif 523 524 /* The getservent getservbyname getservbyport using buffer? */ 525 526 #if defined(HAS_GETSERVENT_R) && (GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBI || GETSERVENT_R_PROTO == REENTRANT_PROTO_S_SBI) 527 # define GETSERVENT_R_HAS_BUFFER 528 #else 529 # undef GETSERVENT_R_HAS_BUFFER 530 #endif 531 #if defined(HAS_GETSERVBYNAME_R) && (GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSBWR || GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_S_CCSBI) 532 # define GETSERVBYNAME_R_HAS_BUFFER 533 #else 534 # undef GETSERVBYNAME_R_HAS_BUFFER 535 #endif 536 #if defined(HAS_GETSERVBYPORT_R) && (GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSBWR || GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_S_ICSBI) 537 # define GETSERVBYPORT_R_HAS_BUFFER 538 #else 539 # undef GETSERVBYPORT_R_HAS_BUFFER 540 #endif 541 542 /* Any of the getservent getservbyname getservbyport using buffer? */ 543 544 #if (defined(GETSERVENT_R_HAS_BUFFER) || defined(GETSERVBYNAME_R_HAS_BUFFER) || defined(GETSERVBYPORT_R_HAS_BUFFER)) 545 # define USE_SERVENT_BUFFER 546 #else 547 # undef USE_SERVENT_BUFFER 548 #endif 549 550 /* The gethostent gethostbyaddr gethostbyname using errno? */ 551 552 #if defined(HAS_GETHOSTENT_R) && (GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBWRE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBIE || GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBIE) 553 # define GETHOSTENT_R_HAS_ERRNO 554 #else 555 # undef GETHOSTENT_R_HAS_ERRNO 556 #endif 557 #if defined(HAS_GETHOSTBYADDR_R) && (GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISBWRE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBWIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TWISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CIISBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CSBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TSBIE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_TsISBWRE) 558 # define GETHOSTBYADDR_R_HAS_ERRNO 559 #else 560 # undef GETHOSTBYADDR_R_HAS_ERRNO 561 #endif 562 #if defined(HAS_GETHOSTBYNAME_R) && (GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE || GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBIE) 563 # define GETHOSTBYNAME_R_HAS_ERRNO 564 #else 565 # undef GETHOSTBYNAME_R_HAS_ERRNO 566 #endif 567 568 /* Any of the gethostent gethostbyaddr gethostbyname using errno? */ 569 570 #if (defined(GETHOSTENT_R_HAS_ERRNO) || defined(GETHOSTBYADDR_R_HAS_ERRNO) || defined(GETHOSTBYNAME_R_HAS_ERRNO)) 571 # define USE_HOSTENT_ERRNO 572 #else 573 # undef USE_HOSTENT_ERRNO 574 #endif 575 576 /* The getnetent getnetbyaddr getnetbyname using errno? */ 577 578 #if defined(HAS_GETNETENT_R) && (GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBWRE || GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBIE || GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBIE) 579 # define GETNETENT_R_HAS_ERRNO 580 #else 581 # undef GETNETENT_R_HAS_ERRNO 582 #endif 583 #if defined(HAS_GETNETBYADDR_R) && (GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE) 584 # define GETNETBYADDR_R_HAS_ERRNO 585 #else 586 # undef GETNETBYADDR_R_HAS_ERRNO 587 #endif 588 #if defined(HAS_GETNETBYNAME_R) && (GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE) 589 # define GETNETBYNAME_R_HAS_ERRNO 590 #else 591 # undef GETNETBYNAME_R_HAS_ERRNO 592 #endif 593 594 /* Any of the getnetent getnetbyaddr getnetbyname using errno? */ 595 596 #if (defined(GETNETENT_R_HAS_ERRNO) || defined(GETNETBYADDR_R_HAS_ERRNO) || defined(GETNETBYNAME_R_HAS_ERRNO)) 597 # define USE_NETENT_ERRNO 598 #else 599 # undef USE_NETENT_ERRNO 600 #endif 601 602 603 typedef struct { 604 #ifdef HAS_ASCTIME_R 605 char* _asctime_buffer; 606 size_t _asctime_size; 607 #endif /* HAS_ASCTIME_R */ 608 #ifdef HAS_CRYPT_R 609 #if CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD 610 CRYPTD* _crypt_data; 611 #else 612 struct crypt_data _crypt_struct; 613 #endif 614 #endif /* HAS_CRYPT_R */ 615 #ifdef HAS_CTIME_R 616 char* _ctime_buffer; 617 size_t _ctime_size; 618 #endif /* HAS_CTIME_R */ 619 #ifdef HAS_DRAND48_R 620 struct drand48_data _drand48_struct; 621 double _drand48_double; 622 #endif /* HAS_DRAND48_R */ 623 #ifdef HAS_GETGRNAM_R 624 struct group _grent_struct; 625 char* _grent_buffer; 626 size_t _grent_size; 627 # ifdef USE_GRENT_PTR 628 struct group* _grent_ptr; 629 # endif 630 # ifdef USE_GRENT_FPTR 631 FILE* _grent_fptr; 632 # endif 633 #endif /* HAS_GETGRNAM_R */ 634 #ifdef HAS_GETHOSTBYNAME_R 635 struct hostent _hostent_struct; 636 # if GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD 637 struct hostent_data _hostent_data; 638 # else 639 char* _hostent_buffer; 640 size_t _hostent_size; 641 # endif 642 # ifdef USE_HOSTENT_PTR 643 struct hostent* _hostent_ptr; 644 # endif 645 # ifdef USE_HOSTENT_ERRNO 646 int _hostent_errno; 647 # endif 648 #endif /* HAS_GETHOSTBYNAME_R */ 649 #ifdef HAS_GETLOGIN_R 650 char* _getlogin_buffer; 651 size_t _getlogin_size; 652 #endif /* HAS_GETLOGIN_R */ 653 #ifdef HAS_GETNETBYNAME_R 654 struct netent _netent_struct; 655 # if GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD 656 struct netent_data _netent_data; 657 # else 658 char* _netent_buffer; 659 size_t _netent_size; 660 # endif 661 # ifdef USE_NETENT_PTR 662 struct netent* _netent_ptr; 663 # endif 664 # ifdef USE_NETENT_ERRNO 665 int _netent_errno; 666 # endif 667 #endif /* HAS_GETNETBYNAME_R */ 668 #ifdef HAS_GETPROTOBYNAME_R 669 struct protoent _protoent_struct; 670 # if GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD 671 struct protoent_data _protoent_data; 672 # else 673 char* _protoent_buffer; 674 size_t _protoent_size; 675 # endif 676 # ifdef USE_PROTOENT_PTR 677 struct protoent* _protoent_ptr; 678 # endif 679 # ifdef USE_PROTOENT_ERRNO 680 int _protoent_errno; 681 # endif 682 #endif /* HAS_GETPROTOBYNAME_R */ 683 #ifdef HAS_GETPWNAM_R 684 struct passwd _pwent_struct; 685 char* _pwent_buffer; 686 size_t _pwent_size; 687 # ifdef USE_PWENT_PTR 688 struct passwd* _pwent_ptr; 689 # endif 690 # ifdef USE_PWENT_FPTR 691 FILE* _pwent_fptr; 692 # endif 693 #endif /* HAS_GETPWNAM_R */ 694 #ifdef HAS_GETSERVBYNAME_R 695 struct servent _servent_struct; 696 # if GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD 697 struct servent_data _servent_data; 698 # else 699 char* _servent_buffer; 700 size_t _servent_size; 701 # endif 702 # ifdef USE_SERVENT_PTR 703 struct servent* _servent_ptr; 704 # endif 705 # ifdef USE_SERVENT_ERRNO 706 int _servent_errno; 707 # endif 708 #endif /* HAS_GETSERVBYNAME_R */ 709 #ifdef HAS_GETSPNAM_R 710 struct spwd _spent_struct; 711 char* _spent_buffer; 712 size_t _spent_size; 713 # ifdef USE_SPENT_PTR 714 struct spwd* _spent_ptr; 715 # endif 716 # ifdef USE_SPENT_FPTR 717 FILE* _spent_fptr; 718 # endif 719 #endif /* HAS_GETSPNAM_R */ 720 #ifdef HAS_GMTIME_R 721 struct tm _gmtime_struct; 722 #endif /* HAS_GMTIME_R */ 723 #ifdef HAS_LOCALTIME_R 724 struct tm _localtime_struct; 725 #endif /* HAS_LOCALTIME_R */ 726 #ifdef HAS_RANDOM_R 727 # if RANDOM_R_PROTO != REENTRANT_PROTO_I_St 728 struct random_data _random_struct; 729 # endif 730 #endif /* HAS_RANDOM_R */ 731 #ifdef HAS_READDIR_R 732 struct dirent* _readdir_struct; 733 size_t _readdir_size; 734 # if READDIR_R_PROTO == REENTRANT_PROTO_I_TSR 735 struct dirent* _readdir_ptr; 736 # endif 737 #endif /* HAS_READDIR_R */ 738 #ifdef HAS_READDIR64_R 739 struct dirent64* _readdir64_struct; 740 size_t _readdir64_size; 741 # if READDIR64_R_PROTO == REENTRANT_PROTO_I_TSR 742 struct dirent64* _readdir64_ptr; 743 # endif 744 #endif /* HAS_READDIR64_R */ 745 #ifdef HAS_SETLOCALE_R 746 char* _setlocale_buffer; 747 size_t _setlocale_size; 748 #endif /* HAS_SETLOCALE_R */ 749 #ifdef HAS_STRERROR_R 750 char* _strerror_buffer; 751 size_t _strerror_size; 752 #endif /* HAS_STRERROR_R */ 753 #ifdef HAS_TTYNAME_R 754 char* _ttyname_buffer; 755 size_t _ttyname_size; 756 #endif /* HAS_TTYNAME_R */ 757 #ifdef HAS_CRYPT_R 758 #if CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD 759 #else 760 struct crypt_data *_crypt_struct_buffer; 761 #endif 762 #endif /* HAS_CRYPT_R */ 763 #ifdef HAS_RANDOM_R 764 # if RANDOM_R_PROTO == REENTRANT_PROTO_I_iS 765 int _random_retval; 766 # endif 767 # if RANDOM_R_PROTO == REENTRANT_PROTO_I_lS 768 long _random_retval; 769 # endif 770 # if RANDOM_R_PROTO == REENTRANT_PROTO_I_St 771 struct random_data _random_struct; 772 int32_t _random_retval; 773 # endif 774 #endif /* HAS_RANDOM_R */ 775 #ifdef HAS_SRANDOM_R 776 struct random_data _srandom_struct; 777 #endif /* HAS_SRANDOM_R */ 778 779 int dummy; /* cannot have empty structs */ 780 } REENTR; 781 782 #endif /* USE_REENTRANT_API */ 783 784 #endif 785