source: trunk/src/emx/include/stdlib.h@ 796

Last change on this file since 796 was 796, checked in by bird, 22 years ago

Fixed C++ type crash.

  • Property cvs2svn:cvs-rev set to 1.15
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 14.7 KB
Line 
1/*-
2 * Copyright (c) 1990, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by the University of
16 * California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * @(#)stdlib.h 8.5 (Berkeley) 5/19/95
34 * $FreeBSD: src/include/stdlib.h,v 1.48 2003/03/12 20:29:58 das Exp $
35 */
36
37/** @file
38 * FreeBSD 5.1
39 * @changed bird: EMXifications and OS2ifications.
40 */
41
42#ifndef _STDLIB_H_
43#define _STDLIB_H_
44
45#include <sys/cdefs.h>
46#include <sys/_types.h>
47
48#if __BSD_VISIBLE
49#ifndef _RUNE_T_DECLARED
50typedef __rune_t rune_t;
51#define _RUNE_T_DECLARED
52#endif
53#endif
54
55#if !defined(_SIZE_T_DECLARED) && !defined(_SIZE_T) /* bird: emx */
56typedef __size_t size_t;
57#define _SIZE_T_DECLARED
58#define _SIZE_T /* bird: emx */
59#endif
60
61#ifndef __cplusplus
62#if !defined(_WCHAR_T_DECLARED) && !defined(_WCHAR_T) /* bird: emx */
63typedef __wchar_t wchar_t;
64#define _WCHAR_T_DECLARED
65#define _WCHAR_T /* bird: emx */
66#endif
67#endif
68
69typedef struct _div_t { /* bird: emx (tag) */
70 int quot; /* quotient */
71 int rem; /* remainder */
72} div_t;
73
74typedef struct _ldiv_t { /* bird: emx (tag) */
75 long quot;
76 long rem;
77} ldiv_t;
78
79#ifndef NULL
80#define NULL 0
81#endif
82
83#define EXIT_FAILURE 1
84#define EXIT_SUCCESS 0
85
86#define RAND_MAX 0x7fff /* bird: emx, old value 0x7fffffff */
87
88extern int _mb_cur_max; /* bird: one underscore, not two for us. */
89#define MB_CUR_MAX _mb_cur_max /* bird: one underscore, not two for us. */
90
91__BEGIN_DECLS
92void abort(void) __dead2;
93#ifndef _ABS_DECLARED /* bird: emx, also math.h */
94int abs(int) __pure2;
95#if !defined (__GNUC__) || __GNUC__ >= 2
96extern __inline__ int abs(int _n) { return (_n < 0 ? -_n : _n); }
97#endif
98#define _ABS_DECLARED
99#endif
100int atexit(void (*)(void));
101double atof(const char *);
102int atoi(const char *);
103long atol(const char *);
104void *bsearch(const void *, const void *, size_t,
105 size_t, int (*)(const void *, const void *));
106void *calloc(size_t, size_t);
107div_t div(int, int) __pure2;
108void exit(int) __dead2;
109void free(void *);
110char *getenv(const char *);
111#ifndef _LABS_DECLARED /* bird: emx, also math.h */
112long labs(long) __pure2;
113#if !defined (__GNUC__) || __GNUC__ >= 2
114extern __inline__ long labs(long _n) { return (_n < 0 ? -_n : _n); }
115#endif
116#define _LABS_DECLARED
117#endif
118ldiv_t ldiv(long, long) __pure2;
119void *malloc(size_t);
120int mblen(const char *, size_t);
121size_t mbstowcs(wchar_t * __restrict , const char * __restrict, size_t);
122int mbtowc(wchar_t * __restrict, const char * __restrict, size_t);
123void qsort(void *, size_t, size_t,
124 int (*)(const void *, const void *));
125int rand(void);
126void *realloc(void *, size_t);
127void srand(unsigned);
128double strtod(const char * __restrict, char ** __restrict);
129float strtof(const char * __restrict, char ** __restrict);
130long strtol(const char * __restrict, char ** __restrict, int);
131long double
132 strtold(const char * __restrict, char ** __restrict);
133unsigned long
134 strtoul(const char * __restrict, char ** __restrict, int);
135int system(const char *);
136int wctomb(char *, wchar_t);
137size_t wcstombs(char * __restrict, const wchar_t * __restrict, size_t);
138
139/*
140 * Functions added in C99 which we make conditionally available in the
141 * BSD^C89 namespace if the compiler supports `long long'.
142 * The #if test is more complicated than it ought to be because
143 * __BSD_VISIBLE implies __ISO_C_VISIBLE == 1999 *even if* `long long'
144 * is not supported in the compilation environment (which therefore means
145 * that it can't really be ISO C99).
146 *
147 * (The only other extension made by C99 in thie header is _Exit().)
148 */
149#if __ISO_C_VISIBLE >= 1999
150#ifdef __LONG_LONG_SUPPORTED
151/* LONGLONG */
152typedef struct _lldiv_t { /* bird: emx (tag) */
153 long long quot;
154 long long rem;
155} lldiv_t;
156
157/* LONGLONG */
158long long
159 atoll(const char *);
160/* LONGLONG */
161long long
162 llabs(long long) __pure2;
163/* LONGLONG */
164/** @todo lldiv_t lldiv(long long, long long) __pure2; */
165/* LONGLONG */
166long long
167 strtoll(const char * __restrict, char ** __restrict, int);
168/* LONGLONG */
169unsigned long long
170 strtoull(const char * __restrict, char ** __restrict, int);
171#endif /* __LONG_LONG_SUPPORTED */
172
173void _Exit(int) __dead2;
174#endif /* __ISO_C_VISIBLE >= 1999 */
175
176/*
177 * Extensions made by POSIX relative to C. We don't know yet which edition
178 * of POSIX made these extensions, so assume they've always been there until
179 * research can be done.
180 */
181#if __POSIX_VISIBLE /* >= ??? */
182/* int posix_memalign(void **, size_t, size_t); (ADV) */
183/** @todo int rand_r(unsigned *); */ /* (TSF) */
184int setenv(const char *, const char *, int);
185int unsetenv(const char *); /* bird: standard saith shall return int. */
186#endif
187
188/*
189 * The only changes to the XSI namespace in revision 6 were the deletion
190 * of the ttyslot() and valloc() functions, which FreeBSD never declared
191 * in this header. For revision 7, ecvt(), fcvt(), and gcvt(), which
192 * FreeBSD also does not have, and mktemp(), are to be deleted.
193 */
194#if __XSI_VISIBLE
195/* XXX XSI requires pollution from <sys/wait.h> here. We'd rather not. */
196/* long a64l(const char *); */
197double drand48(void);
198/* char *ecvt(double, int, int * __restrict, int * __restrict); */
199double erand48(unsigned short[3]);
200/* char *fcvt(double, int, int * __restrict, int * __restrict); */
201/* char *gcvt(double, int, int * __restrict, int * __restrict); */
202#ifndef _GETSUBOPT_DECLARED
203/** @todo int getsubopt(char **, char *const *, char **); */
204#define _GETSUBOPT_DECLARED
205#endif
206/** @todo int grantpt(int); */
207char *initstate(unsigned long /* XSI requires u_int */, char *, long);
208long jrand48(unsigned short[3]);
209/* char *l64a(long); */
210void lcong48(unsigned short[7]);
211long lrand48(void);
212#ifndef _MKSTEMP_DECLARED
213int mkstemp(char *);
214#define _MKSTEMP_DECLARED
215#endif
216#ifndef _MKTEMP_DECLARED
217char *mktemp(char *);
218#define _MKTEMP_DECLARED
219#endif
220long mrand48(void);
221long nrand48(unsigned short[3]);
222/** @todo int posix_openpt(int); */
223/** @todo char *ptsname(int); */
224int putenv(const char *);
225long random(void);
226/** @todo char *realpath(const char *, char resolved_path[]); */
227unsigned short
228 *seed48(unsigned short[3]);
229#ifndef _SETKEY_DECLARED
230/** @todo int setkey(const char *); */
231#define _SETKEY_DECLARED
232#endif
233char *setstate(/* const */ char *);
234void srand48(long);
235void srandom(unsigned long);
236/** @todo int unlockpt(int); */
237#endif /* __XSI_VISIBLE */
238
239#if __BSD_VISIBLE
240extern const char *_malloc_options;
241extern void (*_malloc_message)(const char *, const char *, const char *,
242 const char *);
243
244void *alloca(size_t); /* built-in for gcc */
245/** @todo __uint32_t
246 arc4random(void); */
247/** @todo void arc4random_addrandom(unsigned char *dat, int datlen); */
248/** @todo void arc4random_stir(void); */
249char *getbsize(int *, long *);
250 /* getcap(3) functions */
251/** @todo char *cgetcap(char *, const char *, int); */
252/** @todo int cgetclose(void); */
253/** @todo int cgetent(char **, char **, const char *); */
254/** @todo int cgetfirst(char **, char **); */
255/** @todo int cgetmatch(const char *, const char *); */
256/** @todo int cgetnext(char **, char **); */
257/** @todo int cgetnum(char *, const char *, long *); */
258/** @todo int cgetset(const char *); */
259/** @todo int cgetstr(char *, const char *, char **); */
260/** @todo int cgetustr(char *, const char *, char **); */
261
262/** @todo int daemon(int, int); */
263/** @todo char *devname(int, int); */
264/** @todo int getloadavg(double [], int); */
265/** @todo __const char *
266 getprogname(void); */
267
268int heapsort(void *, size_t, size_t, int (*)(const void *, const void *));
269int mergesort(void *, size_t, size_t, int (*)(const void *, const void *));
270void qsort_r(void *, size_t, size_t, void *,
271 int (*)(void *, const void *, const void *));
272int radixsort(const unsigned char **, int, const unsigned char *,
273 unsigned);
274/** @todo void *reallocf(void *, size_t); */
275/** @todo void setprogname(const char *); */
276int sradixsort(const unsigned char **, int, const unsigned char *,
277 unsigned);
278/** @todo void sranddev(void); */
279void srandomdev(void);
280
281/* Deprecated interfaces, to be removed in FreeBSD 6.0. */
282/** @todo __int64_t
283 strtoq(const char *, char **, int); */
284/** @todo __uint64_t
285 strtouq(const char *, char **, int); */
286#endif /* __BSD_VISIBLE */
287
288
289
290/* bird: EMX/PC stuff - start */
291
292#include <malloc.h>
293
294#if !defined (_MAX_PATH)
295#define _MAX_PATH 260
296#define _MAX_DRIVE 3
297#define _MAX_DIR 256
298#define _MAX_FNAME 256
299#define _MAX_EXT 256
300#endif
301
302#if !defined (__STRICT_ANSI__) && !defined (_POSIX_SOURCE)
303
304#if !defined (OS2_MODE)
305#define DOS_MODE 0
306#define OS2_MODE 1
307#endif
308
309#ifndef _INTPTR_T_DECLARED
310typedef __intptr_t intptr_t;
311typedef __uintptr_t uintptr_t;
312#define _INTPTR_T_DECLARED
313#endif
314
315#if !defined(_MODE_T_DECLARED) && !defined(_MODE_T) /* bird: emx */
316typedef __mode_t mode_t;
317#define _MODE_T_DECLARED
318#define _MODE_T /* bird: emx */
319#endif
320
321/* declare _errno to be compatible with MS/VAC/WATCOM */
322#if !defined (_ERRNO)
323#define _ERRNO
324extern int * _errno(void);
325#define errno (* _errno())
326#endif /* bird: emx */
327
328#if !defined (_ULDIV_T)
329#define _ULDIV_T
330typedef struct
331{
332 unsigned long quot;
333 unsigned long rem;
334} _uldiv_t;
335
336#if __ISO_C_VISIBLE >= 1999 && defined(__LONG_LONG_SUPPORTED)
337typedef struct _lldiv_t _lldiv_t;
338#else
339typedef struct
340{
341 long long quot;
342 long long rem;
343} _lldiv_t;
344#endif
345typedef struct
346{
347 unsigned long long quot;
348 unsigned long long rem;
349} _ulldiv_t;
350#endif
351
352extern char **environ;
353
354extern __const__ unsigned char _osminor;
355extern __const__ unsigned char _osmajor;
356
357/* No DOS support ... */
358#define _osmode OS2_MODE
359
360unsigned alarm (unsigned);
361int brk(const void *);
362int chdir (__const__ char *);
363char *gcvt (double, int, char *); /* this is rubbish standardwise */
364char *getcwd (char *, size_t);
365int getpagesize (void);
366char *getwd (char *);
367int mkdir(const char *, mode_t);
368void perror (__const__ char *);
369int rmdir (__const__ char *);
370void *sbrk(intptr_t);
371unsigned sleep (unsigned);
372void swab (__const__ void *, void *, size_t);
373long ulimit (int, ...);
374
375char *itoa (int, char *, int);
376char *ltoa (long, char *, int);
377char *ultoa (unsigned long, char *, int);
378char *lltoa (long long, char *, int);
379char *ulltoa (unsigned long long, char *, int);
380
381#endif
382
383
384#if (!defined (__STRICT_ANSI__) && !defined (_POSIX_SOURCE)) \
385 || defined (_WITH_UNDERSCORE)
386
387extern char **_environ;
388extern __const__ char * __const__ _sys_errlist[];
389extern __const__ int _sys_nerr;
390
391unsigned _alarm (unsigned);
392int _brk(const void *);
393int _chdir (__const__ char *);
394char *_gcvt (double, int, char *);
395char *_getcwd (char *, size_t);
396int _getpagesize (void);
397char *_getwd (char *);
398int _mkdir (__const__ char *, long);
399int _putenv (__const__ char *);
400int _rmdir (__const__ char *);
401void *_sbrk(intptr_t);
402unsigned _sleep (unsigned);
403void _swab (__const__ void *, void *, size_t);
404long _ulimit (int, ...);
405
406int _abspath (char *, __const__ char *, int);
407long long _atoll (__const__ char *);
408long double _atofl (__const__ char *);
409int _chdir2 (__const__ char *);
410int _chdrive (char);
411int _core (int);
412void _defext (char *, __const__ char *);
413void _envargs (int *, char ***, __const__ char *);
414int _execname (char *, size_t);
415void _exit (int) __attribute__ ((__noreturn__));
416int _filesys (__const__ char *, char *, size_t);
417char **_fnexplode (__const__ char *);
418void _fnexplodefree (char **);
419char _fngetdrive (__const__ char *);
420int _fnisabs (__const__ char *);
421int _fnisrel (__const__ char *);
422void _fnlwr (char *);
423void _fnlwr2 (char *, __const__ char *);
424char *_fnslashify (char *);
425int _fullpath (char *, __const__ char *, int);
426int _getcwd1 (char *, char);
427char *_getcwd2 (char *, int);
428char _getdrive (void);
429char *_getext (__const__ char *);
430char *_getext2 (__const__ char *);
431char *_getname (__const__ char *);
432int _getsockhandle (int);
433int _gettid (void);
434char *_getvol (char);
435char *_itoa (int, char *, int);
436_lldiv_t _lldiv (long long, long long);
437char *_lltoa (long long, char *, int);
438_uldiv_t _uldiv (unsigned long, unsigned long);
439_ulldiv_t _ulldiv (unsigned long long, unsigned long long);
440char *_itoa (int, char *, int);
441char *_ltoa (long, char *, int);
442char *_ultoa (unsigned long, char *, int);
443char *_lltoa (long long, char *, int);
444char *_ulltoa (unsigned long long, char *, int);
445void _makepath (char *, __const__ char *, __const__ char *,
446 __const__ char *, __const__ char *);
447int _path (char *, __const__ char *);
448int _read_kbd (int, int, int);
449void _remext (char *);
450void _rfnlwr (void);
451void _response (int *, char ***);
452void _scrsize (int *);
453void _searchenv (__const__ char *, __const__ char *, char *);
454void _sfnlwr (__const__ char *);
455unsigned _sleep2 (unsigned);
456char ** _splitargs (char *, int *);
457void _splitpath (__const__ char *, char *, char *, char *, char *);
458float _strtof (__const__ char *, char **);
459long double _strtold (__const__ char *, char **);
460long long _strtoll (__const__ char *, char **, int);
461unsigned long long _strtoull (__const__ char *, char **, int);
462char _swchar (void);
463void _wildcard (int *, char ***);
464
465int _beginthread (void (*)(void *), void *, unsigned, void *);
466void _endthread (void);
467void **_threadstore (void);
468
469int _setenv(const char *envname, const char *envval, int overwrite);
470int _unsetenv(const char *name);
471
472#endif
473
474__END_DECLS
475
476/* bird: EMX/PC stuff - start */
477
478#endif /* !_STDLIB_H_ */
479
Note: See TracBrowser for help on using the repository browser.