xref: /illumos-gate/usr/src/head/stdlib.h (revision 0a1278f2)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright (c) 2013 Gary Mills
24  *
25  * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
26  */
27 
28 /* Copyright (c) 2013, OmniTI Computer Consulting, Inc. All rights reserved. */
29 
30 /*	Copyright (c) 1988 AT&T	*/
31 /*	  All Rights Reserved  	*/
32 
33 #ifndef _STDLIB_H
34 #define	_STDLIB_H
35 
36 #include <iso/stdlib_iso.h>
37 #include <iso/stdlib_c99.h>
38 
39 #if defined(__EXTENSIONS__) || defined(_XPG4)
40 #include <sys/wait.h>
41 #endif
42 
43 /*
44  * Allow global visibility for symbols defined in
45  * C++ "std" namespace in <iso/stdlib_iso.h>.
46  */
47 #if __cplusplus >= 199711L
48 using std::div_t;
49 using std::ldiv_t;
50 using std::size_t;
51 using std::abort;
52 using std::abs;
53 using std::atexit;
54 using std::atof;
55 using std::atoi;
56 using std::atol;
57 using std::bsearch;
58 using std::calloc;
59 using std::div;
60 using std::exit;
61 using std::free;
62 using std::getenv;
63 using std::labs;
64 using std::ldiv;
65 using std::malloc;
66 using std::mblen;
67 using std::mbstowcs;
68 using std::mbtowc;
69 using std::qsort;
70 using std::rand;
71 using std::realloc;
72 using std::srand;
73 using std::strtod;
74 using std::strtol;
75 using std::strtoul;
76 using std::system;
77 using std::wcstombs;
78 using std::wctomb;
79 #endif
80 
81 #ifdef	__cplusplus
82 extern "C" {
83 #endif
84 
85 #ifndef _UID_T
86 #define	_UID_T
87 typedef	unsigned int	uid_t;		/* UID type		*/
88 #endif	/* !_UID_T */
89 
90 #if defined(__STDC__)
91 
92 /* large file compilation environment setup */
93 #if !defined(_LP64) && _FILE_OFFSET_BITS == 64
94 
95 #ifdef	__PRAGMA_REDEFINE_EXTNAME
96 #pragma redefine_extname	mkstemp		mkstemp64
97 #pragma redefine_extname	mkstemps	mkstemps64
98 #else	/* __PRAGMA_REDEFINE_EXTNAME */
99 #define	mkstemp			mkstemp64
100 #define	mkstemps		mkstemps64
101 #endif	/* __PRAGMA_REDEFINE_EXTNAME */
102 
103 #endif	/* _FILE_OFFSET_BITS == 64 */
104 
105 /* In the LP64 compilation environment, all APIs are already large file */
106 #if defined(_LP64) && defined(_LARGEFILE64_SOURCE)
107 
108 #ifdef	__PRAGMA_REDEFINE_EXTNAME
109 #pragma redefine_extname	mkstemp64	mkstemp
110 #pragma redefine_extname	mkstemps64	mkstemps
111 #else	/* __PRAGMA_REDEFINE_EXTNAME */
112 #define	mkstemp64		mkstemp
113 #define	mkstemps64		mkstemps
114 #endif	/* __PRAGMA_REDEFINE_EXTNAME */
115 
116 #endif	/* _LP64 && _LARGEFILE64_SOURCE */
117 
118 #if defined(__EXTENSIONS__) || \
119 	(!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
120 	(_POSIX_C_SOURCE - 0 >= 199506L) || defined(_REENTRANT)
121 extern int rand_r(unsigned int *);
122 #endif
123 
124 extern void _exithandle(void);
125 
126 #if defined(__EXTENSIONS__) || \
127 	(!defined(_STRICT_STDC) && !defined(_POSIX_C_SOURCE)) || \
128 	defined(_XPG4)
129 extern double drand48(void);
130 extern double erand48(unsigned short *);
131 extern long jrand48(unsigned short *);
132 extern void lcong48(unsigned short *);
133 extern long lrand48(void);
134 extern long mrand48(void);
135 extern long nrand48(unsigned short *);
136 extern unsigned short *seed48(unsigned short *);
137 extern void srand48(long);
138 extern int putenv(char *);
139 extern void setkey(const char *);
140 #endif /* defined(__EXTENSIONS__) || !defined(_STRICT_STDC) ... */
141 
142 /*
143  * swab() has historically been in <stdlib.h> as delivered from AT&T
144  * and continues to be visible in the default compilation environment.
145  * As of Issue 4 of the X/Open Portability Guides, swab() was declared
146  * in <unistd.h>. As a result, with respect to X/Open namespace the
147  * swab() declaration in this header is only visible for the XPG3
148  * environment.
149  */
150 #if (defined(__EXTENSIONS__) || \
151 	(!defined(_STRICT_STDC__) && !defined(_POSIX_C_SOURCE))) && \
152 	(!defined(_XOPEN_SOURCE) || (defined(_XPG3) && !defined(_XPG4)))
153 #ifndef	_SSIZE_T
154 #define	_SSIZE_T
155 #if defined(_LP64) || defined(_I32LPx)
156 typedef long	ssize_t;	/* size of something in bytes or -1 */
157 #else
158 typedef int	ssize_t;	/* (historical version) */
159 #endif
160 #endif	/* !_SSIZE_T */
161 
162 extern void swab(const char *, char *, ssize_t);
163 #endif /* defined(__EXTENSIONS__) || !defined(_STRICT_STDC) ... */
164 
165 #if defined(__EXTENSIONS__) || \
166 	!defined(__XOPEN_OR_POSIX) || defined(_XPG4_2) || \
167 	(defined(_LARGEFILE_SOURCE) && _FILE_OFFSET_BITS == 64)
168 extern int	mkstemp(char *);
169 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
170 extern int	mkstemps(char *, int);
171 #endif
172 #endif /* defined(__EXTENSIONS__) ... */
173 
174 #if	defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
175 	    !defined(__PRAGMA_REDEFINE_EXTNAME))
176 extern int	mkstemp64(char *);
177 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
178 extern int	mkstemps64(char *, int);
179 #endif
180 #endif	/* _LARGEFILE64_SOURCE... */
181 
182 #if defined(__EXTENSIONS__) || \
183 	(!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
184 	defined(_XPG4_2)
185 extern long a64l(const char *);
186 extern char *ecvt(double, int, int *_RESTRICT_KYWD, int *_RESTRICT_KYWD);
187 extern char *fcvt(double, int, int *_RESTRICT_KYWD, int *_RESTRICT_KYWD);
188 extern char *gcvt(double, int, char *);
189 extern int getsubopt(char **, char *const *, char **);
190 extern int  grantpt(int);
191 extern char *initstate(unsigned, char *, size_t);
192 extern char *l64a(long);
193 extern char *mktemp(char *);
194 extern char *ptsname(int);
195 extern long random(void);
196 extern char *realpath(const char *_RESTRICT_KYWD, char *_RESTRICT_KYWD);
197 extern char *setstate(const char *);
198 extern void srandom(unsigned);
199 extern int  unlockpt(int);
200 /* Marked LEGACY in SUSv2 and removed in SUSv3 */
201 #if !defined(_XPG6) || defined(__EXTENSIONS__)
202 extern int ttyslot(void);
203 extern void *valloc(size_t);
204 #endif /* !defined(_XPG6) || defined(__EXTENSIONS__) */
205 #endif /* defined(__EXTENSIONS__) || ... || defined(_XPG4_2) */
206 
207 #if defined(__EXTENSIONS__) || \
208 	(!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX)) || \
209 	defined(_XPG6)
210 extern int posix_memalign(void **, size_t, size_t);
211 extern int posix_openpt(int);
212 extern int setenv(const char *, const char *, int);
213 extern int unsetenv(const char *);
214 #endif
215 
216 #if defined(__EXTENSIONS__) || \
217 	(!defined(_STRICT_STDC) && !defined(__XOPEN_OR_POSIX))
218 extern char *canonicalize_file_name(const char *);
219 extern int clearenv(void);
220 extern void closefrom(int);
221 extern int daemon(int, int);
222 extern int dup2(int, int);
223 extern int dup3(int, int, int);
224 extern int fdwalk(int (*)(void *, int), void *);
225 extern char *qecvt(long double, int, int *, int *);
226 extern char *qfcvt(long double, int, int *, int *);
227 extern char *qgcvt(long double, int, char *);
228 extern char *getcwd(char *, size_t);
229 extern const char *getexecname(void);
230 
231 #ifndef	__GETLOGIN_DEFINED	/* Avoid duplicate in unistd.h */
232 #define	__GETLOGIN_DEFINED
233 #ifndef	__USE_LEGACY_LOGNAME__
234 #ifdef	__PRAGMA_REDEFINE_EXTNAME
235 #pragma	redefine_extname getlogin getloginx
236 #else	/* __PRAGMA_REDEFINE_EXTNAME */
237 extern char *getloginx(void);
238 #define	getlogin	getloginx
239 #endif	/* __PRAGMA_REDEFINE_EXTNAME */
240 #endif	/* __USE_LEGACY_LOGNAME__ */
241 extern char *getlogin(void);
242 #endif	/* __GETLOGIN_DEFINED */
243 
244 extern int getopt(int, char *const *, const char *);
245 extern char *optarg;
246 extern int optind, opterr, optopt;
247 extern char *getpass(const char *);
248 extern char *getpassphrase(const char *);
249 extern int getpw(uid_t, char *);
250 extern int isatty(int);
251 extern void *memalign(size_t, size_t);
252 extern char *ttyname(int);
253 extern char *mkdtemp(char *);
254 extern const char *getprogname(void);
255 extern void setprogname(const char *);
256 
257 #if !defined(_STRICT_STDC) && defined(_LONGLONG_TYPE)
258 extern char *lltostr(long long, char *);
259 extern char *ulltostr(unsigned long long, char *);
260 #endif	/* !defined(_STRICT_STDC) && defined(_LONGLONG_TYPE) */
261 
262 #endif /* defined(__EXTENSIONS__) || !defined(_STRICT_STDC) ... */
263 
264 #else /* not __STDC__ */
265 
266 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || \
267 	(_POSIX_C_SOURCE - 0 >= 199506L) || defined(_REENTRANT)
268 extern int rand_r();
269 #endif	/* defined(__EXTENSIONS__) || defined(_REENTRANT) ... */
270 
271 extern void _exithandle();
272 
273 #if defined(__EXTENSIONS__) || !defined(_POSIX_C_SOURCE) || defined(_XPG4)
274 extern double drand48();
275 extern double erand48();
276 extern long jrand48();
277 extern void lcong48();
278 extern long lrand48();
279 extern long mrand48();
280 extern long nrand48();
281 extern unsigned short *seed48();
282 extern void srand48();
283 extern int putenv();
284 extern void setkey();
285 #endif /* defined(__EXTENSIONS__) || !defined(_POSIX_C_SOURCE) ... */
286 
287 #if (defined(__EXTENSIONS__) || !defined(_POSIX_C_SOURCE)) && \
288 	(!defined(_XOPEN_SOURCE) || (defined(_XPG3) && !defined(_XPG4)))
289 extern void swab();
290 #endif
291 
292 #if defined(__EXTENSIONS__) || \
293 	!defined(__XOPEN_OR_POSIX) || defined(_XPG4_2) || \
294 	(defined(_LARGEFILE_SOURCE) && _FILE_OFFSET_BITS == 64)
295 extern int	mkstemp();
296 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
297 extern int	mkstemps();
298 #endif
299 #endif	/* defined(__EXTENSIONS__) ... */
300 
301 #if	defined(_LARGEFILE64_SOURCE) && !((_FILE_OFFSET_BITS == 64) && \
302 	    !defined(__PRAGMA_REDEFINE_EXTNAME))
303 extern int	mkstemp64();
304 #if !defined(_XPG4_2) || defined(__EXTENSIONS__)
305 extern int	mkstemps64();
306 #endif
307 #endif	/* _LARGEFILE64_SOURCE... */
308 
309 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || defined(_XPG4_2)
310 extern long a64l();
311 extern char *ecvt();
312 extern char *fcvt();
313 extern char *gcvt();
314 extern int getsubopt();
315 extern int grantpt();
316 extern char *initstate();
317 extern char *l64a();
318 extern char *mktemp();
319 extern char *ptsname();
320 extern long random();
321 extern char *realpath();
322 extern char *setstate();
323 extern void srandom();
324 /* Marked LEGACY in SUSv2 and removed in SUSv3 */
325 #if !defined(_XPG6) || defined(__EXTENSIONS__)
326 extern int ttyslot();
327 extern void *valloc();
328 #endif /* !defined(_XPG6) || defined(__EXTENSIONS__) */
329 #endif /* defined(__EXTENSIONS__) || ... || defined(_XPG4_2) */
330 
331 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) || defined(_XPG6)
332 extern int posix_memalign();
333 extern int posix_openpt();
334 extern int setenv();
335 extern int unsetenv();
336 #endif
337 
338 #if defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX)
339 extern char *canonicalize_file_name();
340 extern int clearenv();
341 extern void closefrom();
342 extern int daemon();
343 extern int dup2();
344 extern int dup3();
345 extern int fdwalk();
346 extern char *qecvt();
347 extern char *qfcvt();
348 extern char *qgcvt();
349 extern char *getcwd();
350 extern char *getexecname();
351 
352 #ifndef	__GETLOGIN_DEFINED	/* Avoid duplicate in unistd.h */
353 #define	__GETLOGIN_DEFINED
354 #ifndef	__USE_LEGACY_LOGNAME__
355 #ifdef	__PRAGMA_REDEFINE_EXTNAME
356 #pragma	redefine_extname getlogin getloginx
357 #else	/* __PRAGMA_REDEFINE_EXTNAME */
358 extern char *getloginx();
359 #define	getlogin	getloginx
360 #endif	/* __PRAGMA_REDEFINE_EXTNAME */
361 #endif	/* __USE_LEGACY_LOGNAME__ */
362 extern char *getlogin();
363 #endif	/* __GETLOGIN_DEFINED */
364 
365 extern int getopt();
366 extern char *optarg;
367 extern int optind, opterr, optopt;
368 extern char *getpass();
369 extern char *getpassphrase();
370 extern int getpw();
371 extern int isatty();
372 extern void *memalign();
373 extern char *ttyname();
374 extern char *mkdtemp();
375 extern char *getprogname();
376 extern void setprogname();
377 
378 #if defined(_LONGLONG_TYPE)
379 extern char *lltostr();
380 extern char *ulltostr();
381 #endif  /* defined(_LONGLONG_TYPE) */
382 #endif	/* defined(__EXTENSIONS__) || !defined(__XOPEN_OR_POSIX) ... */
383 
384 #endif	/* __STDC__ */
385 
386 #ifdef	__cplusplus
387 }
388 #endif
389 
390 #endif	/* _STDLIB_H */
391