source: for-distributions/trunk/bin/windows/perl/lib/CORE/reentr.h@ 14489

Last change on this file since 14489 was 14489, checked in by oranfry, 17 years ago

upgrading to perl 5.8

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