1/* -*- mode: C; buffer-read-only: t -*-
2 *
3 *    reentr.h
4 *
5 *    Copyright (C) 2002, 2003, 2005, 2006, 2007 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 regen/reentr.pl from data in regen/reentr.pl.
12 * Any changes made here will be lost!
13 */
14
15#ifndef PERL_REENTR_H_
16#define PERL_REENTR_H_
17
18/* If compiling for a threaded perl, we will macro-wrap the system/library
19 * interfaces (e.g. getpwent()) which have threaded versions
20 * (e.g. getpwent_r()), which will handle things correctly for
21 * the Perl interpreter.  This is done automatically for the perl core and
22 * extensions, but not generally for XS modules unless they
23 *    #define PERL_REENTRANT
24 * See L<perlxs/Thread-aware system interfaces>.
25 *
26 * For a function 'foo', use the compile-time directive
27 *    #ifdef PERL_REENTR_USING_FOO_R
28 * to test if the function actually did get replaced by the reentrant version.
29 * (If it isn't getting replaced, it might mean it uses a different prototype
30 * on the given platform than any we are expecting.  To fix that, add the
31 * prototype to the __DATA__ section of regen/reentr.pl.)
32 */
33
34#ifndef PERL_REENTR_API
35#  if defined(PERL_CORE) || defined(PERL_EXT) || defined(PERL_REENTRANT)
36#    define PERL_REENTR_API 1
37#  else
38#    define PERL_REENTR_API 0
39#  endif
40#endif
41
42#ifdef USE_REENTRANT_API
43
44/* For thread-safe builds, alternative methods are used to make calls to this
45 * safe. */
46#ifdef USE_THREAD_SAFE_LOCALE
47#   undef HAS_SETLOCALE_R
48#endif
49
50/* Deprecations: some platforms have the said reentrant interfaces
51 * but they are declared obsolete and are not to be used.  Often this
52 * means that the platform has threadsafed the interfaces (hopefully).
53 * All this is OS version dependent, so we are of course fooling ourselves.
54 * If you know of more deprecations on some platforms, please add your own
55 * (by editing reentr.pl, mind!) */
56
57#  ifdef __hpux
58#    undef HAS_CRYPT_R
59#    undef HAS_ENDGRENT_R
60#    undef HAS_ENDPWENT_R
61#    undef HAS_GETGRENT_R
62#    undef HAS_GETPWENT_R
63#    undef HAS_SETLOCALE_R
64#    undef HAS_STRERROR_R
65#    define NETDB_R_OBSOLETE
66#  endif
67
68#  if defined(__osf__) && defined(__alpha) /* Tru64 aka Digital UNIX */
69#    undef HAS_CRYPT_R
70#    undef HAS_STRERROR_R
71#    define NETDB_R_OBSOLETE
72#  endif
73
74#  if defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 24))
75#    undef HAS_READDIR_R
76#    undef HAS_READDIR64_R
77#  endif
78
79/*
80 * As of OpenBSD 3.7, reentrant functions are now working, they just are
81 * incompatible with everyone else.  To make OpenBSD happy, we have to
82 * memzero out certain structures before calling the functions.
83 */
84#  if defined(__OpenBSD__)
85#    define REENTR_MEMZERO(a,b) memzero(a,b)
86#  else
87#    define REENTR_MEMZERO(a,b) 0
88#  endif
89
90#  ifdef NETDB_R_OBSOLETE
91#    undef HAS_ENDHOSTENT_R
92#    undef HAS_ENDNETENT_R
93#    undef HAS_ENDPROTOENT_R
94#    undef HAS_ENDSERVENT_R
95#    undef HAS_GETHOSTBYADDR_R
96#    undef HAS_GETHOSTBYNAME_R
97#    undef HAS_GETHOSTENT_R
98#    undef HAS_GETNETBYADDR_R
99#    undef HAS_GETNETBYNAME_R
100#    undef HAS_GETNETENT_R
101#    undef HAS_GETPROTOBYNAME_R
102#    undef HAS_GETPROTOBYNUMBER_R
103#    undef HAS_GETPROTOENT_R
104#    undef HAS_GETSERVBYNAME_R
105#    undef HAS_GETSERVBYPORT_R
106#    undef HAS_GETSERVENT_R
107#    undef HAS_SETHOSTENT_R
108#    undef HAS_SETNETENT_R
109#    undef HAS_SETPROTOENT_R
110#    undef HAS_SETSERVENT_R
111#  endif
112
113#  ifdef I_PWD
114#    include <pwd.h>
115#  endif
116#  ifdef I_GRP
117#    include <grp.h>
118#  endif
119#  ifdef I_NETDB
120#    include <netdb.h>
121#  endif
122#  ifdef I_CRYPT
123#    ifdef I_CRYPT
124#      include <crypt.h>
125#    endif
126#  endif
127#  ifdef HAS_GETSPNAM_R
128#    ifdef I_SHADOW
129#      include <shadow.h>
130#    endif
131#  endif
132
133#  define REENTRANT_PROTO_B_B	1
134#  define REENTRANT_PROTO_B_BI	2
135#  define REENTRANT_PROTO_B_BW	3
136#  define REENTRANT_PROTO_B_CCD	4
137#  define REENTRANT_PROTO_B_CCS	5
138#  define REENTRANT_PROTO_B_IBI	6
139#  define REENTRANT_PROTO_B_IBW	7
140#  define REENTRANT_PROTO_B_SB	8
141#  define REENTRANT_PROTO_B_SBI	9
142#  define REENTRANT_PROTO_I_BI	10
143#  define REENTRANT_PROTO_I_BW	11
144#  define REENTRANT_PROTO_I_CCSBWR	12
145#  define REENTRANT_PROTO_I_CCSD	13
146#  define REENTRANT_PROTO_I_CII	14
147#  define REENTRANT_PROTO_I_CIISD	15
148#  define REENTRANT_PROTO_I_CSBI	16
149#  define REENTRANT_PROTO_I_CSBIR	17
150#  define REENTRANT_PROTO_I_CSBWR	18
151#  define REENTRANT_PROTO_I_CSBWRE	19
152#  define REENTRANT_PROTO_I_CSD	20
153#  define REENTRANT_PROTO_I_CWISBWRE	21
154#  define REENTRANT_PROTO_I_CWISD	22
155#  define REENTRANT_PROTO_I_D	23
156#  define REENTRANT_PROTO_I_H	24
157#  define REENTRANT_PROTO_I_IBI	25
158#  define REENTRANT_PROTO_I_IBW	26
159#  define REENTRANT_PROTO_I_ICBI	27
160#  define REENTRANT_PROTO_I_ICSBWR	28
161#  define REENTRANT_PROTO_I_ICSD	29
162#  define REENTRANT_PROTO_I_ID	30
163#  define REENTRANT_PROTO_I_IISD	31
164#  define REENTRANT_PROTO_I_ISBWR	32
165#  define REENTRANT_PROTO_I_ISD	33
166#  define REENTRANT_PROTO_I_LISBI	34
167#  define REENTRANT_PROTO_I_LISD	35
168#  define REENTRANT_PROTO_I_SB	36
169#  define REENTRANT_PROTO_I_SBI	37
170#  define REENTRANT_PROTO_I_SBIE	38
171#  define REENTRANT_PROTO_I_SBIH	39
172#  define REENTRANT_PROTO_I_SBIR	40
173#  define REENTRANT_PROTO_I_SBWR	41
174#  define REENTRANT_PROTO_I_SBWRE	42
175#  define REENTRANT_PROTO_I_SD	43
176#  define REENTRANT_PROTO_I_TISD	44
177#  define REENTRANT_PROTO_I_TS	45
178#  define REENTRANT_PROTO_I_TSBI	46
179#  define REENTRANT_PROTO_I_TSBIR	47
180#  define REENTRANT_PROTO_I_TSBWR	48
181#  define REENTRANT_PROTO_I_TSR	49
182#  define REENTRANT_PROTO_I_TsISBWRE	50
183#  define REENTRANT_PROTO_I_UISBWRE	51
184#  define REENTRANT_PROTO_I_uISBWRE	52
185#  define REENTRANT_PROTO_S_CBI	53
186#  define REENTRANT_PROTO_S_CCSBI	54
187#  define REENTRANT_PROTO_S_CIISBIE	55
188#  define REENTRANT_PROTO_S_CSBI	56
189#  define REENTRANT_PROTO_S_CSBIE	57
190#  define REENTRANT_PROTO_S_CWISBIE	58
191#  define REENTRANT_PROTO_S_CWISBWIE	59
192#  define REENTRANT_PROTO_S_ICSBI	60
193#  define REENTRANT_PROTO_S_ISBI	61
194#  define REENTRANT_PROTO_S_LISBI	62
195#  define REENTRANT_PROTO_S_SBI	63
196#  define REENTRANT_PROTO_S_SBIE	64
197#  define REENTRANT_PROTO_S_SBW	65
198#  define REENTRANT_PROTO_S_TISBI	66
199#  define REENTRANT_PROTO_S_TS	67
200#  define REENTRANT_PROTO_S_TSBI	68
201#  define REENTRANT_PROTO_S_TSBIE	69
202#  define REENTRANT_PROTO_S_TWISBIE	70
203#  define REENTRANT_PROTO_V_D	71
204#  define REENTRANT_PROTO_V_H	72
205#  define REENTRANT_PROTO_V_ID	73
206
207/* Defines for indicating which special features are supported. */
208
209/* The getgrent getgrgid getgrnam using buffer? */
210
211#  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)
212#    define GETGRENT_R_HAS_BUFFER
213#  else
214#    undef  GETGRENT_R_HAS_BUFFER
215#  endif
216#  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)
217#    define GETGRGID_R_HAS_BUFFER
218#  else
219#    undef  GETGRGID_R_HAS_BUFFER
220#  endif
221#  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)
222#    define GETGRNAM_R_HAS_BUFFER
223#  else
224#    undef  GETGRNAM_R_HAS_BUFFER
225#  endif
226
227/* Any of the getgrent getgrgid getgrnam using buffer? */
228
229#  if (defined(GETGRENT_R_HAS_BUFFER) || defined(GETGRGID_R_HAS_BUFFER) || defined(GETGRNAM_R_HAS_BUFFER))
230#    define USE_GRENT_BUFFER
231#  else
232#    undef  USE_GRENT_BUFFER
233#  endif
234
235/* The getgrent getgrgid getgrnam using ptr? */
236
237#  if defined(HAS_GETGRENT_R) && (GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIR)
238#    define GETGRENT_R_HAS_PTR
239#  else
240#    undef  GETGRENT_R_HAS_PTR
241#  endif
242#  if defined(HAS_GETGRGID_R) && (GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBWR || GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBIR)
243#    define GETGRGID_R_HAS_PTR
244#  else
245#    undef  GETGRGID_R_HAS_PTR
246#  endif
247#  if defined(HAS_GETGRNAM_R) && (GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR)
248#    define GETGRNAM_R_HAS_PTR
249#  else
250#    undef  GETGRNAM_R_HAS_PTR
251#  endif
252
253/* Any of the getgrent getgrgid getgrnam using ptr? */
254
255#  if (defined(GETGRENT_R_HAS_PTR) || defined(GETGRGID_R_HAS_PTR) || defined(GETGRNAM_R_HAS_PTR))
256#    define USE_GRENT_PTR
257#  else
258#    undef  USE_GRENT_PTR
259#  endif
260
261/* The getpwent getpwnam getpwuid using ptr? */
262
263#  if defined(HAS_GETPWENT_R) && (GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBWR || GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIR)
264#    define GETPWENT_R_HAS_PTR
265#  else
266#    undef  GETPWENT_R_HAS_PTR
267#  endif
268#  if defined(HAS_GETPWNAM_R) && (GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR)
269#    define GETPWNAM_R_HAS_PTR
270#  else
271#    undef  GETPWNAM_R_HAS_PTR
272#  endif
273#  if defined(HAS_GETPWUID_R) && (GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBWR || GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBIR)
274#    define GETPWUID_R_HAS_PTR
275#  else
276#    undef  GETPWUID_R_HAS_PTR
277#  endif
278
279/* Any of the getpwent getpwnam getpwuid using ptr? */
280
281#  if (defined(GETPWENT_R_HAS_PTR) || defined(GETPWNAM_R_HAS_PTR) || defined(GETPWUID_R_HAS_PTR))
282#    define USE_PWENT_PTR
283#  else
284#    undef  USE_PWENT_PTR
285#  endif
286
287/* The getspent getspnam using ptr? */
288
289#  if defined(HAS_GETSPNAM_R) && (GETSPNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR)
290#    define GETSPNAM_R_HAS_PTR
291#  else
292#    undef  GETSPNAM_R_HAS_PTR
293#  endif
294
295/* Any of the getspent getspnam using ptr? */
296
297#  if (defined(GETSPENT_R_HAS_PTR) || defined(GETSPNAM_R_HAS_PTR))
298#    define USE_SPENT_PTR
299#  else
300#    undef  USE_SPENT_PTR
301#  endif
302
303/* The getgrent getgrgid getgrnam setgrent endgrent using fptr? */
304
305#  if defined(HAS_GETGRENT_R) && (GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIH)
306#    define GETGRENT_R_HAS_FPTR
307#  else
308#    undef  GETGRENT_R_HAS_FPTR
309#  endif
310#  if defined(HAS_SETGRENT_R) && (SETGRENT_R_PROTO == REENTRANT_PROTO_I_H || SETGRENT_R_PROTO == REENTRANT_PROTO_V_H)
311#    define SETGRENT_R_HAS_FPTR
312#  else
313#    undef  SETGRENT_R_HAS_FPTR
314#  endif
315#  if defined(HAS_ENDGRENT_R) && (ENDGRENT_R_PROTO == REENTRANT_PROTO_I_H || ENDGRENT_R_PROTO == REENTRANT_PROTO_V_H)
316#    define ENDGRENT_R_HAS_FPTR
317#  else
318#    undef  ENDGRENT_R_HAS_FPTR
319#  endif
320
321/* Any of the getgrent getgrgid getgrnam setgrent endgrent using fptr? */
322
323#  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))
324#    define USE_GRENT_FPTR
325#  else
326#    undef  USE_GRENT_FPTR
327#  endif
328
329/* The getpwent getpwnam getpwuid setpwent endpwent using fptr? */
330
331#  if defined(HAS_GETPWENT_R) && (GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIH)
332#    define GETPWENT_R_HAS_FPTR
333#  else
334#    undef  GETPWENT_R_HAS_FPTR
335#  endif
336#  if defined(HAS_SETPWENT_R) && (SETPWENT_R_PROTO == REENTRANT_PROTO_I_H || SETPWENT_R_PROTO == REENTRANT_PROTO_V_H)
337#    define SETPWENT_R_HAS_FPTR
338#  else
339#    undef  SETPWENT_R_HAS_FPTR
340#  endif
341#  if defined(HAS_ENDPWENT_R) && (ENDPWENT_R_PROTO == REENTRANT_PROTO_I_H || ENDPWENT_R_PROTO == REENTRANT_PROTO_V_H)
342#    define ENDPWENT_R_HAS_FPTR
343#  else
344#    undef  ENDPWENT_R_HAS_FPTR
345#  endif
346
347/* Any of the getpwent getpwnam getpwuid setpwent endpwent using fptr? */
348
349#  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))
350#    define USE_PWENT_FPTR
351#  else
352#    undef  USE_PWENT_FPTR
353#  endif
354
355/* The getpwent getpwgid getpwnam using buffer? */
356
357#  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)
358#    define GETPWENT_R_HAS_BUFFER
359#  else
360#    undef  GETPWENT_R_HAS_BUFFER
361#  endif
362#  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)
363#    define GETPWNAM_R_HAS_BUFFER
364#  else
365#    undef  GETPWNAM_R_HAS_BUFFER
366#  endif
367
368/* Any of the getpwent getpwgid getpwnam using buffer? */
369
370#  if (defined(GETPWENT_R_HAS_BUFFER) || defined(GETPWGID_R_HAS_BUFFER) || defined(GETPWNAM_R_HAS_BUFFER))
371#    define USE_PWENT_BUFFER
372#  else
373#    undef  USE_PWENT_BUFFER
374#  endif
375
376/* The getspent getspnam using buffer? */
377
378#  if defined(HAS_GETSPNAM_R) && (GETSPNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETSPNAM_R_PROTO == REENTRANT_PROTO_S_CSBI)
379#    define GETSPNAM_R_HAS_BUFFER
380#  else
381#    undef  GETSPNAM_R_HAS_BUFFER
382#  endif
383
384/* Any of the getspent getspnam using buffer? */
385
386#  if (defined(GETSPENT_R_HAS_BUFFER) || defined(GETSPNAM_R_HAS_BUFFER))
387#    define USE_SPENT_BUFFER
388#  else
389#    undef  USE_SPENT_BUFFER
390#  endif
391
392/* The gethostent gethostbyaddr gethostbyname using ptr? */
393
394#  if defined(HAS_GETHOSTENT_R) && (GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBWRE)
395#    define GETHOSTENT_R_HAS_PTR
396#  else
397#    undef  GETHOSTENT_R_HAS_PTR
398#  endif
399#  if defined(HAS_GETHOSTBYADDR_R) && (GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISBWRE || GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_TsISBWRE)
400#    define GETHOSTBYADDR_R_HAS_PTR
401#  else
402#    undef  GETHOSTBYADDR_R_HAS_PTR
403#  endif
404#  if defined(HAS_GETHOSTBYNAME_R) && (GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE)
405#    define GETHOSTBYNAME_R_HAS_PTR
406#  else
407#    undef  GETHOSTBYNAME_R_HAS_PTR
408#  endif
409
410/* Any of the gethostent gethostbyaddr gethostbyname using ptr? */
411
412#  if (defined(GETHOSTENT_R_HAS_PTR) || defined(GETHOSTBYADDR_R_HAS_PTR) || defined(GETHOSTBYNAME_R_HAS_PTR))
413#    define USE_HOSTENT_PTR
414#  else
415#    undef  USE_HOSTENT_PTR
416#  endif
417
418/* The getnetent getnetbyaddr getnetbyname using ptr? */
419
420#  if defined(HAS_GETNETENT_R) && (GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBWRE)
421#    define GETNETENT_R_HAS_PTR
422#  else
423#    undef  GETNETENT_R_HAS_PTR
424#  endif
425#  if defined(HAS_GETNETBYADDR_R) && (GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE)
426#    define GETNETBYADDR_R_HAS_PTR
427#  else
428#    undef  GETNETBYADDR_R_HAS_PTR
429#  endif
430#  if defined(HAS_GETNETBYNAME_R) && (GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE)
431#    define GETNETBYNAME_R_HAS_PTR
432#  else
433#    undef  GETNETBYNAME_R_HAS_PTR
434#  endif
435
436/* Any of the getnetent getnetbyaddr getnetbyname using ptr? */
437
438#  if (defined(GETNETENT_R_HAS_PTR) || defined(GETNETBYADDR_R_HAS_PTR) || defined(GETNETBYNAME_R_HAS_PTR))
439#    define USE_NETENT_PTR
440#  else
441#    undef  USE_NETENT_PTR
442#  endif
443
444/* The getprotoent getprotobyname getprotobynumber using ptr? */
445
446#  if defined(HAS_GETPROTOENT_R) && (GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBWR)
447#    define GETPROTOENT_R_HAS_PTR
448#  else
449#    undef  GETPROTOENT_R_HAS_PTR
450#  endif
451#  if defined(HAS_GETPROTOBYNAME_R) && (GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWR)
452#    define GETPROTOBYNAME_R_HAS_PTR
453#  else
454#    undef  GETPROTOBYNAME_R_HAS_PTR
455#  endif
456#  if defined(HAS_GETPROTOBYNUMBER_R) && (GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISBWR)
457#    define GETPROTOBYNUMBER_R_HAS_PTR
458#  else
459#    undef  GETPROTOBYNUMBER_R_HAS_PTR
460#  endif
461
462/* Any of the getprotoent getprotobyname getprotobynumber using ptr? */
463
464#  if (defined(GETPROTOENT_R_HAS_PTR) || defined(GETPROTOBYNAME_R_HAS_PTR) || defined(GETPROTOBYNUMBER_R_HAS_PTR))
465#    define USE_PROTOENT_PTR
466#  else
467#    undef  USE_PROTOENT_PTR
468#  endif
469
470/* The getservent getservbyname getservbyport using ptr? */
471
472#  if defined(HAS_GETSERVENT_R) && (GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBWR)
473#    define GETSERVENT_R_HAS_PTR
474#  else
475#    undef  GETSERVENT_R_HAS_PTR
476#  endif
477#  if defined(HAS_GETSERVBYNAME_R) && (GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSBWR)
478#    define GETSERVBYNAME_R_HAS_PTR
479#  else
480#    undef  GETSERVBYNAME_R_HAS_PTR
481#  endif
482#  if defined(HAS_GETSERVBYPORT_R) && (GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSBWR)
483#    define GETSERVBYPORT_R_HAS_PTR
484#  else
485#    undef  GETSERVBYPORT_R_HAS_PTR
486#  endif
487
488/* Any of the getservent getservbyname getservbyport using ptr? */
489
490#  if (defined(GETSERVENT_R_HAS_PTR) || defined(GETSERVBYNAME_R_HAS_PTR) || defined(GETSERVBYPORT_R_HAS_PTR))
491#    define USE_SERVENT_PTR
492#  else
493#    undef  USE_SERVENT_PTR
494#  endif
495
496/* The gethostent gethostbyaddr gethostbyname using buffer? */
497
498#  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)
499#    define GETHOSTENT_R_HAS_BUFFER
500#  else
501#    undef  GETHOSTENT_R_HAS_BUFFER
502#  endif
503#  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)
504#    define GETHOSTBYADDR_R_HAS_BUFFER
505#  else
506#    undef  GETHOSTBYADDR_R_HAS_BUFFER
507#  endif
508#  if defined(HAS_GETHOSTBYNAME_R) && (GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE || GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBIE)
509#    define GETHOSTBYNAME_R_HAS_BUFFER
510#  else
511#    undef  GETHOSTBYNAME_R_HAS_BUFFER
512#  endif
513
514/* Any of the gethostent gethostbyaddr gethostbyname using buffer? */
515
516#  if (defined(GETHOSTENT_R_HAS_BUFFER) || defined(GETHOSTBYADDR_R_HAS_BUFFER) || defined(GETHOSTBYNAME_R_HAS_BUFFER))
517#    define USE_HOSTENT_BUFFER
518#  else
519#    undef  USE_HOSTENT_BUFFER
520#  endif
521
522/* The getnetent getnetbyaddr getnetbyname using buffer? */
523
524#  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)
525#    define GETNETENT_R_HAS_BUFFER
526#  else
527#    undef  GETNETENT_R_HAS_BUFFER
528#  endif
529#  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)
530#    define GETNETBYADDR_R_HAS_BUFFER
531#  else
532#    undef  GETNETBYADDR_R_HAS_BUFFER
533#  endif
534#  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)
535#    define GETNETBYNAME_R_HAS_BUFFER
536#  else
537#    undef  GETNETBYNAME_R_HAS_BUFFER
538#  endif
539
540/* Any of the getnetent getnetbyaddr getnetbyname using buffer? */
541
542#  if (defined(GETNETENT_R_HAS_BUFFER) || defined(GETNETBYADDR_R_HAS_BUFFER) || defined(GETNETBYNAME_R_HAS_BUFFER))
543#    define USE_NETENT_BUFFER
544#  else
545#    undef  USE_NETENT_BUFFER
546#  endif
547
548/* The getprotoent getprotobyname getprotobynumber using buffer? */
549
550#  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)
551#    define GETPROTOENT_R_HAS_BUFFER
552#  else
553#    undef  GETPROTOENT_R_HAS_BUFFER
554#  endif
555#  if defined(HAS_GETPROTOBYNAME_R) && (GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWR || GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBI)
556#    define GETPROTOBYNAME_R_HAS_BUFFER
557#  else
558#    undef  GETPROTOBYNAME_R_HAS_BUFFER
559#  endif
560#  if defined(HAS_GETPROTOBYNUMBER_R) && (GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISBWR || GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_S_ISBI)
561#    define GETPROTOBYNUMBER_R_HAS_BUFFER
562#  else
563#    undef  GETPROTOBYNUMBER_R_HAS_BUFFER
564#  endif
565
566/* Any of the getprotoent getprotobyname getprotobynumber using buffer? */
567
568#  if (defined(GETPROTOENT_R_HAS_BUFFER) || defined(GETPROTOBYNAME_R_HAS_BUFFER) || defined(GETPROTOBYNUMBER_R_HAS_BUFFER))
569#    define USE_PROTOENT_BUFFER
570#  else
571#    undef  USE_PROTOENT_BUFFER
572#  endif
573
574/* The getservent getservbyname getservbyport using buffer? */
575
576#  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)
577#    define GETSERVENT_R_HAS_BUFFER
578#  else
579#    undef  GETSERVENT_R_HAS_BUFFER
580#  endif
581#  if defined(HAS_GETSERVBYNAME_R) && (GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSBWR || GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_S_CCSBI)
582#    define GETSERVBYNAME_R_HAS_BUFFER
583#  else
584#    undef  GETSERVBYNAME_R_HAS_BUFFER
585#  endif
586#  if defined(HAS_GETSERVBYPORT_R) && (GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSBWR || GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_S_ICSBI)
587#    define GETSERVBYPORT_R_HAS_BUFFER
588#  else
589#    undef  GETSERVBYPORT_R_HAS_BUFFER
590#  endif
591
592/* Any of the getservent getservbyname getservbyport using buffer? */
593
594#  if (defined(GETSERVENT_R_HAS_BUFFER) || defined(GETSERVBYNAME_R_HAS_BUFFER) || defined(GETSERVBYPORT_R_HAS_BUFFER))
595#    define USE_SERVENT_BUFFER
596#  else
597#    undef  USE_SERVENT_BUFFER
598#  endif
599
600/* The gethostent gethostbyaddr gethostbyname using errno? */
601
602#  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)
603#    define GETHOSTENT_R_HAS_ERRNO
604#  else
605#    undef  GETHOSTENT_R_HAS_ERRNO
606#  endif
607#  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)
608#    define GETHOSTBYADDR_R_HAS_ERRNO
609#  else
610#    undef  GETHOSTBYADDR_R_HAS_ERRNO
611#  endif
612#  if defined(HAS_GETHOSTBYNAME_R) && (GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE || GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBIE)
613#    define GETHOSTBYNAME_R_HAS_ERRNO
614#  else
615#    undef  GETHOSTBYNAME_R_HAS_ERRNO
616#  endif
617
618/* Any of the gethostent gethostbyaddr gethostbyname using errno? */
619
620#  if (defined(GETHOSTENT_R_HAS_ERRNO) || defined(GETHOSTBYADDR_R_HAS_ERRNO) || defined(GETHOSTBYNAME_R_HAS_ERRNO))
621#    define USE_HOSTENT_ERRNO
622#  else
623#    undef  USE_HOSTENT_ERRNO
624#  endif
625
626/* The getnetent getnetbyaddr getnetbyname using errno? */
627
628#  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)
629#    define GETNETENT_R_HAS_ERRNO
630#  else
631#    undef  GETNETENT_R_HAS_ERRNO
632#  endif
633#  if defined(HAS_GETNETBYADDR_R) && (GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE || GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE)
634#    define GETNETBYADDR_R_HAS_ERRNO
635#  else
636#    undef  GETNETBYADDR_R_HAS_ERRNO
637#  endif
638#  if defined(HAS_GETNETBYNAME_R) && (GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE)
639#    define GETNETBYNAME_R_HAS_ERRNO
640#  else
641#    undef  GETNETBYNAME_R_HAS_ERRNO
642#  endif
643
644/* Any of the getnetent getnetbyaddr getnetbyname using errno? */
645
646#  if (defined(GETNETENT_R_HAS_ERRNO) || defined(GETNETBYADDR_R_HAS_ERRNO) || defined(GETNETBYNAME_R_HAS_ERRNO))
647#    define USE_NETENT_ERRNO
648#  else
649#    undef  USE_NETENT_ERRNO
650#  endif
651
652
653typedef struct {
654
655#  ifdef HAS_ASCTIME_R
656        char*	_asctime_buffer;
657        size_t	_asctime_size;
658#  endif /* HAS_ASCTIME_R */
659
660#  ifdef HAS_CRYPT_R
661#  if CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD
662        CRYPTD* _crypt_data;
663#  else
664        struct crypt_data *_crypt_struct_buffer;
665#  endif
666#  endif /* HAS_CRYPT_R */
667
668#  ifdef HAS_CTIME_R
669        char*	_ctime_buffer;
670        size_t	_ctime_size;
671#  endif /* HAS_CTIME_R */
672
673#  ifdef HAS_GETGRNAM_R
674        struct group	_grent_struct;
675        char*	_grent_buffer;
676        size_t	_grent_size;
677#   ifdef USE_GRENT_PTR
678        struct group*	_grent_ptr;
679#   endif
680#   ifdef USE_GRENT_FPTR
681        FILE*	_grent_fptr;
682#   endif
683#  endif /* HAS_GETGRNAM_R */
684
685#  ifdef HAS_GETHOSTBYNAME_R
686        struct hostent	_hostent_struct;
687#   if GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
688        struct hostent_data	_hostent_data;
689#   else
690        char*	_hostent_buffer;
691        size_t	_hostent_size;
692#   endif
693#   ifdef USE_HOSTENT_PTR
694        struct hostent*	_hostent_ptr;
695#   endif
696#   ifdef USE_HOSTENT_ERRNO
697        int	_hostent_errno;
698#   endif
699#  endif /* HAS_GETHOSTBYNAME_R */
700
701#  ifdef HAS_GETLOGIN_R
702        char*	_getlogin_buffer;
703        size_t	_getlogin_size;
704#  endif /* HAS_GETLOGIN_R */
705
706#  ifdef HAS_GETNETBYNAME_R
707        struct netent	_netent_struct;
708#   if GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
709        struct netent_data	_netent_data;
710#   else
711        char*	_netent_buffer;
712        size_t	_netent_size;
713#   endif
714#   ifdef USE_NETENT_PTR
715        struct netent*	_netent_ptr;
716#   endif
717#   ifdef USE_NETENT_ERRNO
718        int	_netent_errno;
719#   endif
720#  endif /* HAS_GETNETBYNAME_R */
721
722#  ifdef HAS_GETPROTOBYNAME_R
723        struct protoent	_protoent_struct;
724#   if GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
725        struct protoent_data	_protoent_data;
726#   else
727        char*	_protoent_buffer;
728        size_t	_protoent_size;
729#   endif
730#   ifdef USE_PROTOENT_PTR
731        struct protoent*	_protoent_ptr;
732#   endif
733#   ifdef USE_PROTOENT_ERRNO
734        int	_protoent_errno;
735#   endif
736#  endif /* HAS_GETPROTOBYNAME_R */
737
738#  ifdef HAS_GETPWNAM_R
739        struct passwd	_pwent_struct;
740        char*	_pwent_buffer;
741        size_t	_pwent_size;
742#   ifdef USE_PWENT_PTR
743        struct passwd*	_pwent_ptr;
744#   endif
745#   ifdef USE_PWENT_FPTR
746        FILE*	_pwent_fptr;
747#   endif
748#  endif /* HAS_GETPWNAM_R */
749
750#  ifdef HAS_GETSERVBYNAME_R
751        struct servent	_servent_struct;
752#   if GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD
753        struct servent_data	_servent_data;
754#   else
755        char*	_servent_buffer;
756        size_t	_servent_size;
757#   endif
758#   ifdef USE_SERVENT_PTR
759        struct servent*	_servent_ptr;
760#   endif
761#   ifdef USE_SERVENT_ERRNO
762        int	_servent_errno;
763#   endif
764#  endif /* HAS_GETSERVBYNAME_R */
765
766#  ifdef HAS_GETSPNAM_R
767        struct spwd	_spent_struct;
768        char*	_spent_buffer;
769        size_t	_spent_size;
770#   ifdef USE_SPENT_PTR
771        struct spwd*	_spent_ptr;
772#   endif
773#   ifdef USE_SPENT_FPTR
774        FILE*	_spent_fptr;
775#   endif
776#  endif /* HAS_GETSPNAM_R */
777
778#  ifdef HAS_GMTIME_R
779        struct tm _gmtime_struct;
780#  endif /* HAS_GMTIME_R */
781
782#  ifdef HAS_LOCALTIME_R
783        struct tm _localtime_struct;
784#  endif /* HAS_LOCALTIME_R */
785
786#  ifdef HAS_READDIR_R
787        struct dirent*	_readdir_struct;
788        size_t	_readdir_size;
789#   if READDIR_R_PROTO == REENTRANT_PROTO_I_TSR
790        struct dirent*	_readdir_ptr;
791#   endif
792#  endif /* HAS_READDIR_R */
793
794#  ifdef HAS_READDIR64_R
795        struct dirent64*	_readdir64_struct;
796        size_t	_readdir64_size;
797#   if READDIR64_R_PROTO == REENTRANT_PROTO_I_TSR
798        struct dirent64*	_readdir64_ptr;
799#   endif
800#  endif /* HAS_READDIR64_R */
801
802#  ifdef HAS_SETLOCALE_R
803        char*	_setlocale_buffer;
804        size_t	_setlocale_size;
805#  endif /* HAS_SETLOCALE_R */
806
807#  ifdef HAS_STRERROR_R
808        char*	_strerror_buffer;
809        size_t	_strerror_size;
810#  endif /* HAS_STRERROR_R */
811
812#  ifdef HAS_TTYNAME_R
813        char*	_ttyname_buffer;
814        size_t	_ttyname_size;
815#  endif /* HAS_TTYNAME_R */
816
817
818    int dummy; /* cannot have empty structs */
819} REENTR;
820
821/* The wrappers. */
822
823#  ifdef HAS_ASCTIME_R
824#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
825#      undef asctime
826#      if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_B_SB
827#        define asctime(a) asctime_r(a, PL_reentrant_buffer->_asctime_buffer)
828#      endif
829#      if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_B_SBI
830#        define asctime(a) asctime_r(a, PL_reentrant_buffer->_asctime_buffer, PL_reentrant_buffer->_asctime_size)
831#      endif
832#      if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_I_SB
833#        define asctime(a) (asctime_r(a, PL_reentrant_buffer->_asctime_buffer) == 0 ? PL_reentrant_buffer->_asctime_buffer : 0)
834#      endif
835#      if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_I_SBI
836#        define asctime(a) (asctime_r(a, PL_reentrant_buffer->_asctime_buffer, PL_reentrant_buffer->_asctime_size) == 0 ? PL_reentrant_buffer->_asctime_buffer : 0)
837#      endif
838#      if defined(asctime)
839#        define PERL_REENTR_USING_ASCTIME_R
840#      endif
841#    endif
842#  endif /* HAS_ASCTIME_R */
843
844
845#  ifdef HAS_CRYPT_R
846#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
847#      undef crypt
848#      if !defined(crypt) && CRYPT_R_PROTO == REENTRANT_PROTO_B_CCS
849#        define crypt(a, b) crypt_r(a, b, PL_reentrant_buffer->_crypt_struct_buffer)
850#      endif
851#      if !defined(crypt) && CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD
852#        define crypt(a, b) crypt_r(a, b, &PL_reentrant_buffer->_crypt_data)
853#      endif
854#      if defined(crypt)
855#        define PERL_REENTR_USING_CRYPT_R
856#      endif
857#    endif
858#  endif /* HAS_CRYPT_R */
859
860
861#  ifdef HAS_CTERMID_R
862#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
863#      undef ctermid
864#      if !defined(ctermid) && CTERMID_R_PROTO == REENTRANT_PROTO_B_B
865#        define ctermid(a) ctermid_r(a)
866#      endif
867#      if defined(ctermid)
868#        define PERL_REENTR_USING_CTERMID_R
869#      endif
870#    endif
871#  endif /* HAS_CTERMID_R */
872
873
874#  ifdef HAS_CTIME_R
875#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
876#      undef ctime
877#      if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_B_SB
878#        define ctime(a) ctime_r(a, PL_reentrant_buffer->_ctime_buffer)
879#      endif
880#      if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_B_SBI
881#        define ctime(a) ctime_r(a, PL_reentrant_buffer->_ctime_buffer, PL_reentrant_buffer->_ctime_size)
882#      endif
883#      if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_I_SB
884#        define ctime(a) (ctime_r(a, PL_reentrant_buffer->_ctime_buffer) == 0 ? PL_reentrant_buffer->_ctime_buffer : 0)
885#      endif
886#      if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_I_SBI
887#        define ctime(a) (ctime_r(a, PL_reentrant_buffer->_ctime_buffer, PL_reentrant_buffer->_ctime_size) == 0 ? PL_reentrant_buffer->_ctime_buffer : 0)
888#      endif
889#      if defined(ctime)
890#        define PERL_REENTR_USING_CTIME_R
891#      endif
892#    endif
893#  endif /* HAS_CTIME_R */
894
895
896#  ifdef HAS_ENDGRENT_R
897#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
898#      undef endgrent
899#      if !defined(endgrent) && ENDGRENT_R_PROTO == REENTRANT_PROTO_I_H
900#        define endgrent() (endgrent_r(&PL_reentrant_buffer->_grent_fptr) == 0 ? 1 : 0)
901#      endif
902#      if !defined(endgrent) && ENDGRENT_R_PROTO == REENTRANT_PROTO_V_H
903#        define endgrent() endgrent_r(&PL_reentrant_buffer->_grent_fptr)
904#      endif
905#      if defined(endgrent)
906#        define PERL_REENTR_USING_ENDGRENT_R
907#      endif
908#    endif
909#  endif /* HAS_ENDGRENT_R */
910
911
912#  ifdef HAS_ENDHOSTENT_R
913#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
914#      undef endhostent
915#      if !defined(endhostent) && ENDHOSTENT_R_PROTO == REENTRANT_PROTO_I_D
916#        define endhostent() (endhostent_r(&PL_reentrant_buffer->_hostent_data) == 0 ? 1 : 0)
917#      endif
918#      if !defined(endhostent) && ENDHOSTENT_R_PROTO == REENTRANT_PROTO_V_D
919#        define endhostent() endhostent_r(&PL_reentrant_buffer->_hostent_data)
920#      endif
921#      if defined(endhostent)
922#        define PERL_REENTR_USING_ENDHOSTENT_R
923#      endif
924#    endif
925#  endif /* HAS_ENDHOSTENT_R */
926
927
928#  ifdef HAS_ENDNETENT_R
929#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
930#      undef endnetent
931#      if !defined(endnetent) && ENDNETENT_R_PROTO == REENTRANT_PROTO_I_D
932#        define endnetent() (endnetent_r(&PL_reentrant_buffer->_netent_data) == 0 ? 1 : 0)
933#      endif
934#      if !defined(endnetent) && ENDNETENT_R_PROTO == REENTRANT_PROTO_V_D
935#        define endnetent() endnetent_r(&PL_reentrant_buffer->_netent_data)
936#      endif
937#      if defined(endnetent)
938#        define PERL_REENTR_USING_ENDNETENT_R
939#      endif
940#    endif
941#  endif /* HAS_ENDNETENT_R */
942
943
944#  ifdef HAS_ENDPROTOENT_R
945#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
946#      undef endprotoent
947#      if !defined(endprotoent) && ENDPROTOENT_R_PROTO == REENTRANT_PROTO_I_D
948#        define endprotoent() (endprotoent_r(&PL_reentrant_buffer->_protoent_data) == 0 ? 1 : 0)
949#      endif
950#      if !defined(endprotoent) && ENDPROTOENT_R_PROTO == REENTRANT_PROTO_V_D
951#        define endprotoent() endprotoent_r(&PL_reentrant_buffer->_protoent_data)
952#      endif
953#      if defined(endprotoent)
954#        define PERL_REENTR_USING_ENDPROTOENT_R
955#      endif
956#    endif
957#  endif /* HAS_ENDPROTOENT_R */
958
959
960#  ifdef HAS_ENDPWENT_R
961#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
962#      undef endpwent
963#      if !defined(endpwent) && ENDPWENT_R_PROTO == REENTRANT_PROTO_I_H
964#        define endpwent() (endpwent_r(&PL_reentrant_buffer->_pwent_fptr) == 0 ? 1 : 0)
965#      endif
966#      if !defined(endpwent) && ENDPWENT_R_PROTO == REENTRANT_PROTO_V_H
967#        define endpwent() endpwent_r(&PL_reentrant_buffer->_pwent_fptr)
968#      endif
969#      if defined(endpwent)
970#        define PERL_REENTR_USING_ENDPWENT_R
971#      endif
972#    endif
973#  endif /* HAS_ENDPWENT_R */
974
975
976#  ifdef HAS_ENDSERVENT_R
977#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
978#      undef endservent
979#      if !defined(endservent) && ENDSERVENT_R_PROTO == REENTRANT_PROTO_I_D
980#        define endservent() (endservent_r(&PL_reentrant_buffer->_servent_data) == 0 ? 1 : 0)
981#      endif
982#      if !defined(endservent) && ENDSERVENT_R_PROTO == REENTRANT_PROTO_V_D
983#        define endservent() endservent_r(&PL_reentrant_buffer->_servent_data)
984#      endif
985#      if defined(endservent)
986#        define PERL_REENTR_USING_ENDSERVENT_R
987#      endif
988#    endif
989#  endif /* HAS_ENDSERVENT_R */
990
991
992#  ifdef HAS_GETGRENT_R
993#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
994#      undef getgrent
995#      if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBWR
996#        define getgrent() ((PL_reentrant_retint = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
997#      endif
998#      if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIR
999#        define getgrent() ((PL_reentrant_retint = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
1000#      endif
1001#      if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBW
1002#        define getgrent() (getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
1003#      endif
1004#      if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBI
1005#        define getgrent() (getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
1006#      endif
1007#      if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBI
1008#        define getgrent() ((PL_reentrant_retint = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size)) == 0 ? &PL_reentrant_buffer->_grent_struct : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
1009#      endif
1010#      if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIH
1011#        define getgrent() ((PL_reentrant_retint = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_fptr)) == 0 ? &PL_reentrant_buffer->_grent_struct : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
1012#      endif
1013#      if defined(getgrent)
1014#        define PERL_REENTR_USING_GETGRENT_R
1015#      endif
1016#    endif
1017#  endif /* HAS_GETGRENT_R */
1018
1019
1020#  ifdef HAS_GETGRGID_R
1021#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1022#      undef getgrgid
1023#      if !defined(getgrgid) && GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBWR
1024#        define getgrgid(a) ((PL_reentrant_retint = getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrgid", a) : 0))
1025#      endif
1026#      if !defined(getgrgid) && GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBIR
1027#        define getgrgid(a) ((PL_reentrant_retint = getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrgid", a) : 0))
1028#      endif
1029#      if !defined(getgrgid) && GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBI
1030#        define getgrgid(a) ((PL_reentrant_retint = getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size)) == 0 ? &PL_reentrant_buffer->_grent_struct : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrgid", a) : 0))
1031#      endif
1032#      if !defined(getgrgid) && GETGRGID_R_PROTO == REENTRANT_PROTO_S_TSBI
1033#        define getgrgid(a) (getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrgid", a) : 0))
1034#      endif
1035#      if defined(getgrgid)
1036#        define PERL_REENTR_USING_GETGRGID_R
1037#      endif
1038#    endif
1039#  endif /* HAS_GETGRGID_R */
1040
1041
1042#  ifdef HAS_GETGRNAM_R
1043#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1044#      undef getgrnam
1045#      if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR
1046#        define getgrnam(a) ((PL_reentrant_retint = getgrnam_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
1047#      endif
1048#      if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR
1049#        define getgrnam(a) ((PL_reentrant_retint = getgrnam_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
1050#      endif
1051#      if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_S_CBI
1052#        define getgrnam(a) (getgrnam_r(a, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? PL_reentrant_buffer->_grent_buffer : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
1053#      endif
1054#      if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_I_CSBI
1055#        define getgrnam(a) ((PL_reentrant_retint = getgrnam_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size)) == 0 ? &PL_reentrant_buffer->_grent_struct : ((PL_reentrant_retint == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
1056#      endif
1057#      if !defined(getgrnam) && GETGRNAM_R_PROTO == REENTRANT_PROTO_S_CSBI
1058#        define getgrnam(a) (getgrnam_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrnam", a) : 0))
1059#      endif
1060#      if defined(getgrnam)
1061#        define PERL_REENTR_USING_GETGRNAM_R
1062#      endif
1063#    endif
1064#  endif /* HAS_GETGRNAM_R */
1065
1066
1067#  ifdef HAS_GETHOSTBYADDR_R
1068#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1069#      undef gethostbyaddr
1070#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISBWRE
1071#        define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_ptr, &PL_reentrant_buffer->_hostent_errno)) == 0 ? PL_reentrant_buffer->_hostent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
1072#      endif
1073#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBWIE
1074#        define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
1075#      endif
1076#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CWISBIE
1077#        define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
1078#      endif
1079#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TWISBIE
1080#        define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
1081#      endif
1082#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CIISBIE
1083#        define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
1084#      endif
1085#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_CSBIE
1086#        define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? 1 : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
1087#      endif
1088#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_S_TSBIE
1089#        define gethostbyaddr(a, b, c) (gethostbyaddr_r(a, b, c, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? 1 : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
1090#      endif
1091#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CWISD
1092#        define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, &PL_reentrant_buffer->_hostent_data)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
1093#      endif
1094#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CIISD
1095#        define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, &PL_reentrant_buffer->_hostent_data)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
1096#      endif
1097#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_CII
1098#        define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c)) == 0 ? 1 : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
1099#      endif
1100#      if !defined(gethostbyaddr) && GETHOSTBYADDR_R_PROTO == REENTRANT_PROTO_I_TsISBWRE
1101#        define gethostbyaddr(a, b, c) ((PL_reentrant_retint = gethostbyaddr_r(a, b, c, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_ptr, &PL_reentrant_buffer->_hostent_errno)) == 0 ? PL_reentrant_buffer->_hostent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyaddr", a, b, c) : 0))
1102#      endif
1103#      if defined(gethostbyaddr)
1104#        define PERL_REENTR_USING_GETHOSTBYADDR_R
1105#      endif
1106#    endif
1107#  endif /* HAS_GETHOSTBYADDR_R */
1108
1109
1110#  ifdef HAS_GETHOSTBYNAME_R
1111#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1112#      undef gethostbyname
1113#      if !defined(gethostbyname) && GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE
1114#        define gethostbyname(a) ((PL_reentrant_retint = gethostbyname_r(a, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_ptr, &PL_reentrant_buffer->_hostent_errno)) == 0 ? PL_reentrant_buffer->_hostent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyname", a) : 0))
1115#      endif
1116#      if !defined(gethostbyname) && GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBIE
1117#        define gethostbyname(a) (gethostbyname_r(a, &PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyname", a) : 0))
1118#      endif
1119#      if !defined(gethostbyname) && GETHOSTBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
1120#        define gethostbyname(a) ((PL_reentrant_retint = gethostbyname_r(a, &PL_reentrant_buffer->_hostent_struct, &PL_reentrant_buffer->_hostent_data)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostbyname", a) : 0))
1121#      endif
1122#      if defined(gethostbyname)
1123#        define PERL_REENTR_USING_GETHOSTBYNAME_R
1124#      endif
1125#    endif
1126#  endif /* HAS_GETHOSTBYNAME_R */
1127
1128
1129#  ifdef HAS_GETHOSTENT_R
1130#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1131#      undef gethostent
1132#      if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBWRE
1133#        define gethostent() ((PL_reentrant_retint = gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_ptr, &PL_reentrant_buffer->_hostent_errno)) == 0 ? PL_reentrant_buffer->_hostent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
1134#      endif
1135#      if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBIE
1136#        define gethostent() ((PL_reentrant_retint = gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
1137#      endif
1138#      if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBIE
1139#        define gethostent() (gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size, &PL_reentrant_buffer->_hostent_errno) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
1140#      endif
1141#      if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_S_SBI
1142#        define gethostent() (gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size) ? &PL_reentrant_buffer->_hostent_struct : ((errno == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
1143#      endif
1144#      if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SBI
1145#        define gethostent() ((PL_reentrant_retint = gethostent_r(&PL_reentrant_buffer->_hostent_struct, PL_reentrant_buffer->_hostent_buffer, PL_reentrant_buffer->_hostent_size)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
1146#      endif
1147#      if !defined(gethostent) && GETHOSTENT_R_PROTO == REENTRANT_PROTO_I_SD
1148#        define gethostent() ((PL_reentrant_retint = gethostent_r(&PL_reentrant_buffer->_hostent_struct, &PL_reentrant_buffer->_hostent_data)) == 0 ? &PL_reentrant_buffer->_hostent_struct : ((PL_reentrant_retint == ERANGE) ? (struct hostent *) Perl_reentrant_retry("gethostent") : 0))
1149#      endif
1150#      if defined(gethostent)
1151#        define PERL_REENTR_USING_GETHOSTENT_R
1152#      endif
1153#    endif
1154#  endif /* HAS_GETHOSTENT_R */
1155
1156
1157#  ifdef HAS_GETLOGIN_R
1158#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1159#      undef getlogin
1160#      if !defined(getlogin) && GETLOGIN_R_PROTO == REENTRANT_PROTO_I_BW
1161#        define getlogin() ((PL_reentrant_retint = getlogin_r(PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size)) == 0 ? PL_reentrant_buffer->_getlogin_buffer : ((PL_reentrant_retint == ERANGE) ? (char *) Perl_reentrant_retry("getlogin") : 0))
1162#      endif
1163#      if !defined(getlogin) && GETLOGIN_R_PROTO == REENTRANT_PROTO_I_BI
1164#        define getlogin() ((PL_reentrant_retint = getlogin_r(PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size)) == 0 ? PL_reentrant_buffer->_getlogin_buffer : ((PL_reentrant_retint == ERANGE) ? (char *) Perl_reentrant_retry("getlogin") : 0))
1165#      endif
1166#      if !defined(getlogin) && GETLOGIN_R_PROTO == REENTRANT_PROTO_B_BW
1167#        define getlogin() getlogin_r(PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size)
1168#      endif
1169#      if !defined(getlogin) && GETLOGIN_R_PROTO == REENTRANT_PROTO_B_BI
1170#        define getlogin() getlogin_r(PL_reentrant_buffer->_getlogin_buffer, PL_reentrant_buffer->_getlogin_size)
1171#      endif
1172#      if defined(getlogin)
1173#        define PERL_REENTR_USING_GETLOGIN_R
1174#      endif
1175#    endif
1176#  endif /* HAS_GETLOGIN_R */
1177
1178
1179#  ifdef HAS_GETNETBYADDR_R
1180#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1181#      undef getnetbyaddr
1182#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_UISBWRE
1183#        define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_ptr, &PL_reentrant_buffer->_netent_errno)) == 0 ? PL_reentrant_buffer->_netent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
1184#      endif
1185#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_LISBI
1186#        define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
1187#      endif
1188#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_S_TISBI
1189#        define getnetbyaddr(a, b) (getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
1190#      endif
1191#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_S_LISBI
1192#        define getnetbyaddr(a, b) (getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
1193#      endif
1194#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_TISD
1195#        define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
1196#      endif
1197#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_LISD
1198#        define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
1199#      endif
1200#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_IISD
1201#        define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
1202#      endif
1203#      if !defined(getnetbyaddr) && GETNETBYADDR_R_PROTO == REENTRANT_PROTO_I_uISBWRE
1204#        define getnetbyaddr(a, b) ((PL_reentrant_retint = getnetbyaddr_r(a, b, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_ptr, &PL_reentrant_buffer->_netent_errno)) == 0 ? PL_reentrant_buffer->_netent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyaddr", a, b) : 0))
1205#      endif
1206#      if defined(getnetbyaddr)
1207#        define PERL_REENTR_USING_GETNETBYADDR_R
1208#      endif
1209#    endif
1210#  endif /* HAS_GETNETBYADDR_R */
1211
1212
1213#  ifdef HAS_GETNETBYNAME_R
1214#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1215#      undef getnetbyname
1216#      if !defined(getnetbyname) && GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWRE
1217#        define getnetbyname(a) ((PL_reentrant_retint = getnetbyname_r(a, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_ptr, &PL_reentrant_buffer->_netent_errno)) == 0 ? PL_reentrant_buffer->_netent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyname", a) : 0))
1218#      endif
1219#      if !defined(getnetbyname) && GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBI
1220#        define getnetbyname(a) ((PL_reentrant_retint = getnetbyname_r(a, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyname", a) : 0))
1221#      endif
1222#      if !defined(getnetbyname) && GETNETBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBI
1223#        define getnetbyname(a) (getnetbyname_r(a, &PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyname", a) : 0))
1224#      endif
1225#      if !defined(getnetbyname) && GETNETBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
1226#        define getnetbyname(a) ((PL_reentrant_retint = getnetbyname_r(a, &PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetbyname", a) : 0))
1227#      endif
1228#      if defined(getnetbyname)
1229#        define PERL_REENTR_USING_GETNETBYNAME_R
1230#      endif
1231#    endif
1232#  endif /* HAS_GETNETBYNAME_R */
1233
1234
1235#  ifdef HAS_GETNETENT_R
1236#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1237#      undef getnetent
1238#      if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBWRE
1239#        define getnetent() ((PL_reentrant_retint = getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_ptr, &PL_reentrant_buffer->_netent_errno)) == 0 ? PL_reentrant_buffer->_netent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
1240#      endif
1241#      if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBIE
1242#        define getnetent() ((PL_reentrant_retint = getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_errno)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
1243#      endif
1244#      if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBIE
1245#        define getnetent() (getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size, &PL_reentrant_buffer->_netent_errno) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
1246#      endif
1247#      if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_S_SBI
1248#        define getnetent() (getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size) ? &PL_reentrant_buffer->_netent_struct : ((errno == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
1249#      endif
1250#      if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_I_SBI
1251#        define getnetent() ((PL_reentrant_retint = getnetent_r(&PL_reentrant_buffer->_netent_struct, PL_reentrant_buffer->_netent_buffer, PL_reentrant_buffer->_netent_size)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
1252#      endif
1253#      if !defined(getnetent) && GETNETENT_R_PROTO == REENTRANT_PROTO_I_SD
1254#        define getnetent() ((PL_reentrant_retint = getnetent_r(&PL_reentrant_buffer->_netent_struct, &PL_reentrant_buffer->_netent_data)) == 0 ? &PL_reentrant_buffer->_netent_struct : ((PL_reentrant_retint == ERANGE) ? (struct netent *) Perl_reentrant_retry("getnetent") : 0))
1255#      endif
1256#      if defined(getnetent)
1257#        define PERL_REENTR_USING_GETNETENT_R
1258#      endif
1259#    endif
1260#  endif /* HAS_GETNETENT_R */
1261
1262
1263#  ifdef HAS_GETPROTOBYNAME_R
1264#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1265#      undef getprotobyname
1266#      if !defined(getprotobyname) && GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSBWR
1267#        define getprotobyname(a) ((PL_reentrant_retint = getprotobyname_r(a, &PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size, &PL_reentrant_buffer->_protoent_ptr)) == 0 ? PL_reentrant_buffer->_protoent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobyname", a) : 0))
1268#      endif
1269#      if !defined(getprotobyname) && GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_S_CSBI
1270#        define getprotobyname(a) (getprotobyname_r(a, &PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size) ? &PL_reentrant_buffer->_protoent_struct : ((errno == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobyname", a) : 0))
1271#      endif
1272#      if !defined(getprotobyname) && GETPROTOBYNAME_R_PROTO == REENTRANT_PROTO_I_CSD
1273#        define getprotobyname(a) (REENTR_MEMZERO(&PL_reentrant_buffer->_protoent_data, sizeof(PL_reentrant_buffer->_protoent_data)),(PL_reentrant_retint = getprotobyname_r(a, &PL_reentrant_buffer->_protoent_struct, &PL_reentrant_buffer->_protoent_data)) == 0 ? &PL_reentrant_buffer->_protoent_struct : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobyname", a) : 0))
1274#      endif
1275#      if defined(getprotobyname)
1276#        define PERL_REENTR_USING_GETPROTOBYNAME_R
1277#      endif
1278#    endif
1279#  endif /* HAS_GETPROTOBYNAME_R */
1280
1281
1282#  ifdef HAS_GETPROTOBYNUMBER_R
1283#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1284#      undef getprotobynumber
1285#      if !defined(getprotobynumber) && GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISBWR
1286#        define getprotobynumber(a) ((PL_reentrant_retint = getprotobynumber_r(a, &PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size, &PL_reentrant_buffer->_protoent_ptr)) == 0 ? PL_reentrant_buffer->_protoent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobynumber", a) : 0))
1287#      endif
1288#      if !defined(getprotobynumber) && GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_S_ISBI
1289#        define getprotobynumber(a) (getprotobynumber_r(a, &PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size) ? &PL_reentrant_buffer->_protoent_struct : ((errno == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobynumber", a) : 0))
1290#      endif
1291#      if !defined(getprotobynumber) && GETPROTOBYNUMBER_R_PROTO == REENTRANT_PROTO_I_ISD
1292#        define getprotobynumber(a) (REENTR_MEMZERO(&PL_reentrant_buffer->_protoent_data, sizeof(PL_reentrant_buffer->_protoent_data)),(PL_reentrant_retint = getprotobynumber_r(a, &PL_reentrant_buffer->_protoent_struct, &PL_reentrant_buffer->_protoent_data)) == 0 ? &PL_reentrant_buffer->_protoent_struct : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotobynumber", a) : 0))
1293#      endif
1294#      if defined(getprotobynumber)
1295#        define PERL_REENTR_USING_GETPROTOBYNUMBER_R
1296#      endif
1297#    endif
1298#  endif /* HAS_GETPROTOBYNUMBER_R */
1299
1300
1301#  ifdef HAS_GETPROTOENT_R
1302#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1303#      undef getprotoent
1304#      if !defined(getprotoent) && GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBWR
1305#        define getprotoent() ((PL_reentrant_retint = getprotoent_r(&PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size, &PL_reentrant_buffer->_protoent_ptr)) == 0 ? PL_reentrant_buffer->_protoent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotoent") : 0))
1306#      endif
1307#      if !defined(getprotoent) && GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SBI
1308#        define getprotoent() ((PL_reentrant_retint = getprotoent_r(&PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size)) == 0 ? &PL_reentrant_buffer->_protoent_struct : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotoent") : 0))
1309#      endif
1310#      if !defined(getprotoent) && GETPROTOENT_R_PROTO == REENTRANT_PROTO_S_SBI
1311#        define getprotoent() (getprotoent_r(&PL_reentrant_buffer->_protoent_struct, PL_reentrant_buffer->_protoent_buffer, PL_reentrant_buffer->_protoent_size) ? &PL_reentrant_buffer->_protoent_struct : ((errno == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotoent") : 0))
1312#      endif
1313#      if !defined(getprotoent) && GETPROTOENT_R_PROTO == REENTRANT_PROTO_I_SD
1314#        define getprotoent() (REENTR_MEMZERO(&PL_reentrant_buffer->_protoent_data, sizeof(PL_reentrant_buffer->_protoent_data)),(PL_reentrant_retint = getprotoent_r(&PL_reentrant_buffer->_protoent_struct, &PL_reentrant_buffer->_protoent_data)) == 0 ? &PL_reentrant_buffer->_protoent_struct : ((PL_reentrant_retint == ERANGE) ? (struct protoent *) Perl_reentrant_retry("getprotoent") : 0))
1315#      endif
1316#      if defined(getprotoent)
1317#        define PERL_REENTR_USING_GETPROTOENT_R
1318#      endif
1319#    endif
1320#  endif /* HAS_GETPROTOENT_R */
1321
1322
1323#  ifdef HAS_GETPWENT_R
1324#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1325#      undef getpwent
1326#      if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBWR
1327#        define getpwent() ((PL_reentrant_retint = getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
1328#      endif
1329#      if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIR
1330#        define getpwent() ((PL_reentrant_retint = getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
1331#      endif
1332#      if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_S_SBW
1333#        define getpwent() (getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size) ? &PL_reentrant_buffer->_pwent_struct : ((errno == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
1334#      endif
1335#      if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_S_SBI
1336#        define getpwent() (getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size) ? &PL_reentrant_buffer->_pwent_struct : ((errno == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
1337#      endif
1338#      if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBI
1339#        define getpwent() ((PL_reentrant_retint = getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size)) == 0 ? &PL_reentrant_buffer->_pwent_struct : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
1340#      endif
1341#      if !defined(getpwent) && GETPWENT_R_PROTO == REENTRANT_PROTO_I_SBIH
1342#        define getpwent() ((PL_reentrant_retint = getpwent_r(&PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_fptr)) == 0 ? &PL_reentrant_buffer->_pwent_struct : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwent") : 0))
1343#      endif
1344#      if defined(getpwent)
1345#        define PERL_REENTR_USING_GETPWENT_R
1346#      endif
1347#    endif
1348#  endif /* HAS_GETPWENT_R */
1349
1350
1351#  ifdef HAS_GETPWNAM_R
1352#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1353#      undef getpwnam
1354#      if !defined(getpwnam) && GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR
1355#        define getpwnam(a) ((PL_reentrant_retint = getpwnam_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwnam", a) : 0))
1356#      endif
1357#      if !defined(getpwnam) && GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBIR
1358#        define getpwnam(a) ((PL_reentrant_retint = getpwnam_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwnam", a) : 0))
1359#      endif
1360#      if !defined(getpwnam) && GETPWNAM_R_PROTO == REENTRANT_PROTO_S_CSBI
1361#        define getpwnam(a) (getpwnam_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size) ? &PL_reentrant_buffer->_pwent_struct : ((errno == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwnam", a) : 0))
1362#      endif
1363#      if !defined(getpwnam) && GETPWNAM_R_PROTO == REENTRANT_PROTO_I_CSBI
1364#        define getpwnam(a) ((PL_reentrant_retint = getpwnam_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size)) == 0 ? &PL_reentrant_buffer->_pwent_struct : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwnam", a) : 0))
1365#      endif
1366#      if defined(getpwnam)
1367#        define PERL_REENTR_USING_GETPWNAM_R
1368#      endif
1369#    endif
1370#  endif /* HAS_GETPWNAM_R */
1371
1372
1373#  ifdef HAS_GETPWUID_R
1374#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1375#      undef getpwuid
1376#      if !defined(getpwuid) && GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBWR
1377#        define getpwuid(a) ((PL_reentrant_retint = getpwuid_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwuid", a) : 0))
1378#      endif
1379#      if !defined(getpwuid) && GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBIR
1380#        define getpwuid(a) ((PL_reentrant_retint = getpwuid_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size, &PL_reentrant_buffer->_pwent_ptr)) == 0 ? PL_reentrant_buffer->_pwent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwuid", a) : 0))
1381#      endif
1382#      if !defined(getpwuid) && GETPWUID_R_PROTO == REENTRANT_PROTO_I_TSBI
1383#        define getpwuid(a) ((PL_reentrant_retint = getpwuid_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size)) == 0 ? &PL_reentrant_buffer->_pwent_struct : ((PL_reentrant_retint == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwuid", a) : 0))
1384#      endif
1385#      if !defined(getpwuid) && GETPWUID_R_PROTO == REENTRANT_PROTO_S_TSBI
1386#        define getpwuid(a) (getpwuid_r(a, &PL_reentrant_buffer->_pwent_struct, PL_reentrant_buffer->_pwent_buffer, PL_reentrant_buffer->_pwent_size) ? &PL_reentrant_buffer->_pwent_struct : ((errno == ERANGE) ? (struct passwd *) Perl_reentrant_retry("getpwuid", a) : 0))
1387#      endif
1388#      if defined(getpwuid)
1389#        define PERL_REENTR_USING_GETPWUID_R
1390#      endif
1391#    endif
1392#  endif /* HAS_GETPWUID_R */
1393
1394
1395#  ifdef HAS_GETSERVBYNAME_R
1396#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1397#      undef getservbyname
1398#      if !defined(getservbyname) && GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSBWR
1399#        define getservbyname(a, b) ((PL_reentrant_retint = getservbyname_r(a, b, &PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size, &PL_reentrant_buffer->_servent_ptr)) == 0 ? PL_reentrant_buffer->_servent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyname", a, b) : 0))
1400#      endif
1401#      if !defined(getservbyname) && GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_S_CCSBI
1402#        define getservbyname(a, b) (getservbyname_r(a, b, &PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size) ? &PL_reentrant_buffer->_servent_struct : ((errno == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyname", a, b) : 0))
1403#      endif
1404#      if !defined(getservbyname) && GETSERVBYNAME_R_PROTO == REENTRANT_PROTO_I_CCSD
1405#        define getservbyname(a, b) (REENTR_MEMZERO(&PL_reentrant_buffer->_servent_data, sizeof(PL_reentrant_buffer->_servent_data)),(PL_reentrant_retint = getservbyname_r(a, b, &PL_reentrant_buffer->_servent_struct, &PL_reentrant_buffer->_servent_data)) == 0 ? &PL_reentrant_buffer->_servent_struct : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyname", a, b) : 0))
1406#      endif
1407#      if defined(getservbyname)
1408#        define PERL_REENTR_USING_GETSERVBYNAME_R
1409#      endif
1410#    endif
1411#  endif /* HAS_GETSERVBYNAME_R */
1412
1413
1414#  ifdef HAS_GETSERVBYPORT_R
1415#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1416#      undef getservbyport
1417#      if !defined(getservbyport) && GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSBWR
1418#        define getservbyport(a, b) ((PL_reentrant_retint = getservbyport_r(a, b, &PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size, &PL_reentrant_buffer->_servent_ptr)) == 0 ? PL_reentrant_buffer->_servent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyport", a, b) : 0))
1419#      endif
1420#      if !defined(getservbyport) && GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_S_ICSBI
1421#        define getservbyport(a, b) (getservbyport_r(a, b, &PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size) ? &PL_reentrant_buffer->_servent_struct : ((errno == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyport", a, b) : 0))
1422#      endif
1423#      if !defined(getservbyport) && GETSERVBYPORT_R_PROTO == REENTRANT_PROTO_I_ICSD
1424#        define getservbyport(a, b) (REENTR_MEMZERO(&PL_reentrant_buffer->_servent_data, sizeof(PL_reentrant_buffer->_servent_data)),(PL_reentrant_retint = getservbyport_r(a, b, &PL_reentrant_buffer->_servent_struct, &PL_reentrant_buffer->_servent_data)) == 0 ? &PL_reentrant_buffer->_servent_struct : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservbyport", a, b) : 0))
1425#      endif
1426#      if defined(getservbyport)
1427#        define PERL_REENTR_USING_GETSERVBYPORT_R
1428#      endif
1429#    endif
1430#  endif /* HAS_GETSERVBYPORT_R */
1431
1432
1433#  ifdef HAS_GETSERVENT_R
1434#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1435#      undef getservent
1436#      if !defined(getservent) && GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBWR
1437#        define getservent() ((PL_reentrant_retint = getservent_r(&PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size, &PL_reentrant_buffer->_servent_ptr)) == 0 ? PL_reentrant_buffer->_servent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservent") : 0))
1438#      endif
1439#      if !defined(getservent) && GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SBI
1440#        define getservent() ((PL_reentrant_retint = getservent_r(&PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size)) == 0 ? &PL_reentrant_buffer->_servent_struct : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservent") : 0))
1441#      endif
1442#      if !defined(getservent) && GETSERVENT_R_PROTO == REENTRANT_PROTO_S_SBI
1443#        define getservent() (getservent_r(&PL_reentrant_buffer->_servent_struct, PL_reentrant_buffer->_servent_buffer, PL_reentrant_buffer->_servent_size) ? &PL_reentrant_buffer->_servent_struct : ((errno == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservent") : 0))
1444#      endif
1445#      if !defined(getservent) && GETSERVENT_R_PROTO == REENTRANT_PROTO_I_SD
1446#        define getservent() (REENTR_MEMZERO(&PL_reentrant_buffer->_servent_data, sizeof(PL_reentrant_buffer->_servent_data)),(PL_reentrant_retint = getservent_r(&PL_reentrant_buffer->_servent_struct, &PL_reentrant_buffer->_servent_data)) == 0 ? &PL_reentrant_buffer->_servent_struct : ((PL_reentrant_retint == ERANGE) ? (struct servent *) Perl_reentrant_retry("getservent") : 0))
1447#      endif
1448#      if defined(getservent)
1449#        define PERL_REENTR_USING_GETSERVENT_R
1450#      endif
1451#    endif
1452#  endif /* HAS_GETSERVENT_R */
1453
1454
1455#  ifdef HAS_GETSPNAM_R
1456#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1457#      undef getspnam
1458#      if !defined(getspnam) && GETSPNAM_R_PROTO == REENTRANT_PROTO_I_CSBWR
1459#        define getspnam(a) ((PL_reentrant_retint = getspnam_r(a, &PL_reentrant_buffer->_spent_struct, PL_reentrant_buffer->_spent_buffer, PL_reentrant_buffer->_spent_size, &PL_reentrant_buffer->_spent_ptr)) == 0 ? PL_reentrant_buffer->_spent_ptr : ((PL_reentrant_retint == ERANGE) ? (struct spwd *) Perl_reentrant_retry("getspnam", a) : 0))
1460#      endif
1461#      if !defined(getspnam) && GETSPNAM_R_PROTO == REENTRANT_PROTO_S_CSBI
1462#        define getspnam(a) (getspnam_r(a, &PL_reentrant_buffer->_spent_struct, PL_reentrant_buffer->_spent_buffer, PL_reentrant_buffer->_spent_size) ? &PL_reentrant_buffer->_spent_struct : ((errno == ERANGE) ? (struct spwd *) Perl_reentrant_retry("getspnam", a) : 0))
1463#      endif
1464#      if defined(getspnam)
1465#        define PERL_REENTR_USING_GETSPNAM_R
1466#      endif
1467#    endif
1468#  endif /* HAS_GETSPNAM_R */
1469
1470
1471#  ifdef HAS_GMTIME_R
1472#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1473#      undef gmtime
1474#      if !defined(gmtime) && GMTIME_R_PROTO == REENTRANT_PROTO_S_TS
1475#        define gmtime(a) (gmtime_r(a, &PL_reentrant_buffer->_gmtime_struct) ? &PL_reentrant_buffer->_gmtime_struct : 0)
1476#      endif
1477#      if defined(gmtime)
1478#        define PERL_REENTR_USING_GMTIME_R
1479#      endif
1480#    endif
1481#  endif /* HAS_GMTIME_R */
1482
1483
1484#  ifdef HAS_LOCALTIME_R
1485#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1486#      undef localtime
1487#      if !defined(localtime) && LOCALTIME_R_PROTO == REENTRANT_PROTO_S_TS
1488#        define localtime(a) (L_R_TZSET localtime_r(a, &PL_reentrant_buffer->_localtime_struct) ? &PL_reentrant_buffer->_localtime_struct : 0)
1489#      endif
1490#      if defined(localtime)
1491#        define PERL_REENTR_USING_LOCALTIME_R
1492#      endif
1493#    endif
1494#  endif /* HAS_LOCALTIME_R */
1495
1496
1497#  ifdef HAS_READDIR_R
1498#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1499#      undef readdir
1500#      if !defined(readdir) && READDIR_R_PROTO == REENTRANT_PROTO_I_TSR
1501#        define readdir(a) (readdir_r(a, PL_reentrant_buffer->_readdir_struct, &PL_reentrant_buffer->_readdir_ptr) == 0 ? PL_reentrant_buffer->_readdir_ptr : 0)
1502#      endif
1503#      if !defined(readdir) && READDIR_R_PROTO == REENTRANT_PROTO_I_TS
1504#        define readdir(a) (readdir_r(a, PL_reentrant_buffer->_readdir_struct) == 0 ? PL_reentrant_buffer->_readdir_struct : 0)
1505#      endif
1506#      if defined(readdir)
1507#        define PERL_REENTR_USING_READDIR_R
1508#      endif
1509#    endif
1510#  endif /* HAS_READDIR_R */
1511
1512
1513#  ifdef HAS_READDIR64_R
1514#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1515#      undef readdir64
1516#      if !defined(readdir64) && READDIR64_R_PROTO == REENTRANT_PROTO_I_TSR
1517#        define readdir64(a) (readdir64_r(a, PL_reentrant_buffer->_readdir64_struct, &PL_reentrant_buffer->_readdir64_ptr) == 0 ? PL_reentrant_buffer->_readdir64_ptr : 0)
1518#      endif
1519#      if !defined(readdir64) && READDIR64_R_PROTO == REENTRANT_PROTO_I_TS
1520#        define readdir64(a) (readdir64_r(a, PL_reentrant_buffer->_readdir64_struct) == 0 ? PL_reentrant_buffer->_readdir64_struct : 0)
1521#      endif
1522#      if defined(readdir64)
1523#        define PERL_REENTR_USING_READDIR64_R
1524#      endif
1525#    endif
1526#  endif /* HAS_READDIR64_R */
1527
1528
1529#  ifdef HAS_SETGRENT_R
1530#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1531#      undef setgrent
1532#      if !defined(setgrent) && SETGRENT_R_PROTO == REENTRANT_PROTO_I_H
1533#        define setgrent() (setgrent_r(&PL_reentrant_buffer->_grent_fptr) == 0 ? 1 : 0)
1534#      endif
1535#      if !defined(setgrent) && SETGRENT_R_PROTO == REENTRANT_PROTO_V_H
1536#        define setgrent() setgrent_r(&PL_reentrant_buffer->_grent_fptr)
1537#      endif
1538#      if defined(setgrent)
1539#        define PERL_REENTR_USING_SETGRENT_R
1540#      endif
1541#    endif
1542#  endif /* HAS_SETGRENT_R */
1543
1544
1545#  ifdef HAS_SETHOSTENT_R
1546#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1547#      undef sethostent
1548#      if !defined(sethostent) && SETHOSTENT_R_PROTO == REENTRANT_PROTO_I_ID
1549#        define sethostent(a) (sethostent_r(a, &PL_reentrant_buffer->_hostent_data) == 0 ? 1 : 0)
1550#      endif
1551#      if !defined(sethostent) && SETHOSTENT_R_PROTO == REENTRANT_PROTO_V_ID
1552#        define sethostent(a) sethostent_r(a, &PL_reentrant_buffer->_hostent_data)
1553#      endif
1554#      if defined(sethostent)
1555#        define PERL_REENTR_USING_SETHOSTENT_R
1556#      endif
1557#    endif
1558#  endif /* HAS_SETHOSTENT_R */
1559
1560
1561#  ifdef HAS_SETLOCALE_R
1562#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1563#      undef setlocale
1564#      if !defined(setlocale) && SETLOCALE_R_PROTO == REENTRANT_PROTO_I_ICBI
1565#        define setlocale(a, b) (setlocale_r(a, b, PL_reentrant_buffer->_setlocale_buffer, PL_reentrant_buffer->_setlocale_size) == 0 ? PL_reentrant_buffer->_setlocale_buffer : 0)
1566#      endif
1567#      if defined(setlocale)
1568#        define PERL_REENTR_USING_SETLOCALE_R
1569#      endif
1570#    endif
1571#  endif /* HAS_SETLOCALE_R */
1572
1573
1574#  ifdef HAS_SETNETENT_R
1575#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1576#      undef setnetent
1577#      if !defined(setnetent) && SETNETENT_R_PROTO == REENTRANT_PROTO_I_ID
1578#        define setnetent(a) (setnetent_r(a, &PL_reentrant_buffer->_netent_data) == 0 ? 1 : 0)
1579#      endif
1580#      if !defined(setnetent) && SETNETENT_R_PROTO == REENTRANT_PROTO_V_ID
1581#        define setnetent(a) setnetent_r(a, &PL_reentrant_buffer->_netent_data)
1582#      endif
1583#      if defined(setnetent)
1584#        define PERL_REENTR_USING_SETNETENT_R
1585#      endif
1586#    endif
1587#  endif /* HAS_SETNETENT_R */
1588
1589
1590#  ifdef HAS_SETPROTOENT_R
1591#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1592#      undef setprotoent
1593#      if !defined(setprotoent) && SETPROTOENT_R_PROTO == REENTRANT_PROTO_I_ID
1594#        define setprotoent(a) (setprotoent_r(a, &PL_reentrant_buffer->_protoent_data) == 0 ? 1 : 0)
1595#      endif
1596#      if !defined(setprotoent) && SETPROTOENT_R_PROTO == REENTRANT_PROTO_V_ID
1597#        define setprotoent(a) setprotoent_r(a, &PL_reentrant_buffer->_protoent_data)
1598#      endif
1599#      if defined(setprotoent)
1600#        define PERL_REENTR_USING_SETPROTOENT_R
1601#      endif
1602#    endif
1603#  endif /* HAS_SETPROTOENT_R */
1604
1605
1606#  ifdef HAS_SETPWENT_R
1607#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1608#      undef setpwent
1609#      if !defined(setpwent) && SETPWENT_R_PROTO == REENTRANT_PROTO_I_H
1610#        define setpwent() (setpwent_r(&PL_reentrant_buffer->_pwent_fptr) == 0 ? 1 : 0)
1611#      endif
1612#      if !defined(setpwent) && SETPWENT_R_PROTO == REENTRANT_PROTO_V_H
1613#        define setpwent() setpwent_r(&PL_reentrant_buffer->_pwent_fptr)
1614#      endif
1615#      if defined(setpwent)
1616#        define PERL_REENTR_USING_SETPWENT_R
1617#      endif
1618#    endif
1619#  endif /* HAS_SETPWENT_R */
1620
1621
1622#  ifdef HAS_SETSERVENT_R
1623#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1624#      undef setservent
1625#      if !defined(setservent) && SETSERVENT_R_PROTO == REENTRANT_PROTO_I_ID
1626#        define setservent(a) (setservent_r(a, &PL_reentrant_buffer->_servent_data) == 0 ? 1 : 0)
1627#      endif
1628#      if !defined(setservent) && SETSERVENT_R_PROTO == REENTRANT_PROTO_V_ID
1629#        define setservent(a) setservent_r(a, &PL_reentrant_buffer->_servent_data)
1630#      endif
1631#      if defined(setservent)
1632#        define PERL_REENTR_USING_SETSERVENT_R
1633#      endif
1634#    endif
1635#  endif /* HAS_SETSERVENT_R */
1636
1637
1638#  ifdef HAS_STRERROR_R
1639#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1640#      undef strerror
1641#      if !defined(strerror) && STRERROR_R_PROTO == REENTRANT_PROTO_I_IBW
1642#        define strerror(a) (strerror_r(a, PL_reentrant_buffer->_strerror_buffer, PL_reentrant_buffer->_strerror_size) == 0 ? PL_reentrant_buffer->_strerror_buffer : 0)
1643#      endif
1644#      if !defined(strerror) && STRERROR_R_PROTO == REENTRANT_PROTO_I_IBI
1645#        define strerror(a) (strerror_r(a, PL_reentrant_buffer->_strerror_buffer, PL_reentrant_buffer->_strerror_size) == 0 ? PL_reentrant_buffer->_strerror_buffer : 0)
1646#      endif
1647#      if !defined(strerror) && STRERROR_R_PROTO == REENTRANT_PROTO_B_IBW
1648#        define strerror(a) strerror_r(a, PL_reentrant_buffer->_strerror_buffer, PL_reentrant_buffer->_strerror_size)
1649#      endif
1650#      if defined(strerror)
1651#        define PERL_REENTR_USING_STRERROR_R
1652#      endif
1653#    endif
1654#  endif /* HAS_STRERROR_R */
1655
1656
1657#  ifdef HAS_TMPNAM_R
1658#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1659#      undef tmpnam
1660#      if !defined(tmpnam) && TMPNAM_R_PROTO == REENTRANT_PROTO_B_B
1661#        define tmpnam(a) tmpnam_r(a)
1662#      endif
1663#      if defined(tmpnam)
1664#        define PERL_REENTR_USING_TMPNAM_R
1665#      endif
1666#    endif
1667#  endif /* HAS_TMPNAM_R */
1668
1669
1670#  ifdef HAS_TTYNAME_R
1671#    if defined(PERL_REENTR_API) && (PERL_REENTR_API+0 == 1)
1672#      undef ttyname
1673#      if !defined(ttyname) && TTYNAME_R_PROTO == REENTRANT_PROTO_I_IBW
1674#        define ttyname(a) (ttyname_r(a, PL_reentrant_buffer->_ttyname_buffer, PL_reentrant_buffer->_ttyname_size) == 0 ? PL_reentrant_buffer->_ttyname_buffer : 0)
1675#      endif
1676#      if !defined(ttyname) && TTYNAME_R_PROTO == REENTRANT_PROTO_I_IBI
1677#        define ttyname(a) (ttyname_r(a, PL_reentrant_buffer->_ttyname_buffer, PL_reentrant_buffer->_ttyname_size) == 0 ? PL_reentrant_buffer->_ttyname_buffer : 0)
1678#      endif
1679#      if !defined(ttyname) && TTYNAME_R_PROTO == REENTRANT_PROTO_B_IBI
1680#        define ttyname(a) ttyname_r(a, PL_reentrant_buffer->_ttyname_buffer, PL_reentrant_buffer->_ttyname_size)
1681#      endif
1682#      if defined(ttyname)
1683#        define PERL_REENTR_USING_TTYNAME_R
1684#      endif
1685#    endif
1686#  endif /* HAS_TTYNAME_R */
1687
1688
1689
1690
1691/* Special case this; if others came along, could automate it */
1692#  ifdef HAS_GETSPNAM_R
1693#    define KEY_getspnam -1
1694#  endif
1695
1696#endif /* USE_REENTRANT_API */
1697
1698#endif
1699
1700/* ex: set ro ft=c: */
1701