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