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 */