2000-02-18 03:39:52 +08:00
|
|
|
/*
|
|
|
|
* stdlib.h
|
|
|
|
*
|
|
|
|
* Definitions for common types, variables, and functions.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _STDLIB_H_
|
|
|
|
#define _STDLIB_H_
|
|
|
|
|
2009-04-16 Ken Werner <ken.werner@de.ibm.com>
* libm/libm.texinfo: Add long double function support chapter.
* libc/include/machine/ieeefp.h: Add _LDBL_EQ_DBL define.
* libc/include/stdlib.h: Include <machine/ieeefp.h>.
(strtold, wcstold): Declare.
* libc/stdlib/strtold.c: New File.
* libc/stdlib/wcstold.c: Likewise.
* libc/configure.in: Add long double check.
* libc/configure: Regenerate.
* libc/stdlib/Makefile.am: Add strtold.c and wcstold.c.
* libc/stdlib/Makefile.in: Regenerate.
* libc/include/math.h (atanl, cosl, sinl, tanl, tanhl): Declare.
(frexpl, modfl, ceill, fabsl, floorl, log1pl, expm1l, acosl): Ditto.
(asinl, atan2l, coshl, sinhl, expl, ldexpl, logl, log10l, powl): Ditto.
(sqrtl, fmodl, hypotl, copysignl, nanl, ilogbl, asinhl, cbrt): Ditto.
(nextafterl, rintl, scalbnl, exp2l, scalblnl, tgammal): Ditto.
(nearbyintl, lrintl, llrintl, roundl, lroundl, llround): Ditto.
(llroundl, truncl, remquol, fdiml, fmaxl, fminl, fmal, acoshl): Ditto.
(atanhl, remainderl, lgammal, erfl, erfcl): Ditto.
* libm/common/atanl.c: New File.
* libm/common/cosl.c: Likewise.
* libm/common/sinl.c: Likewise.
* libm/common/modfl.c: Likewise.
* libm/common/frexpl.c: Likewise.
* libm/common/tanhl.c: Likewise.
* libm/common/tanl.c: Likewise.
* libm/common/expm1l.c: Likewise.
* libm/common/log1pl.c: Likewise.
* libm/common/ceill.c: Likewise.
* libm/common/fabsl.c: Likewise.
* libm/common/floorl.c: Likewise.
* libm/common/acosl.c: Likewise.
* libm/common/asinl.c: Likewise.
* libm/common/atan2l.c: Likewise.
* libm/common/coshl.c: Likewise.
* libm/common/expl.c: Likewise.
* libm/common/fmodl.c: Likewise.
* libm/common/hypotl.c: Likewise.
* libm/common/ldexpl.c: Likewise.
* libm/common/log10l.c: Likewise.
* libm/common/logl.c: Likewise.
* libm/common/powl.c: Likewise.
* libm/common/sqrtl.c: Likewise.
* libm/common/copysignl.c: Likewise.
* libm/common/ilogbl.c: Likewise.
* libm/common/nanl.c: Likewise.
* libm/common/cbrtl.c: Likewise.
* libm/common/asinhl.c: Likewise.
* libm/common/nextafterl.c: Likewise.
* libm/common/rintl.c: Likewise.
* libm/common/scalbnl.c: Likewise.
* libm/common/exp2l.c: Likewise.
* libm/common/fdiml.c: Likewise.
* libm/common/fmal.c: Likewise.
* libm/common/fmaxl.c: Likewise.
* libm/common/fminl.c: Likewise.
* libm/common/lrintl.c: Likewise.
* libm/common/lroundl.c: Likewise.
* libm/common/nearbyintl.c: Likewise.
* libm/common/remquol.c: Likewise.
* libm/common/roundl.c: Likewise.
* libm/common/scalblnl.c: Likewise.
* libm/common/truncl.c: Likewise.
* libm/common/acoshl.c: Likewise.
* libm/common/atanhl.c: Likewise.
* libm/common/erfcl.c: Likewise.
* libm/common/erfl.c: Likewise.
* libm/common/lgammal.c: Likewise.
* libm/common/remainderl.c: Likewise.
* libm/common/tgammal.c: Likewise.
* libm/common/sinhl.c: Likewise.
* libm/common/llroundl.c: Likewise.
* libm/configure.in: Add long double check.
* libm/configure: Regenerate.
* libm/common/Makefile.am: Add new files.
* libm/common/Makefile.in: Regenerate.
2009-04-17 02:24:35 +08:00
|
|
|
#include <machine/ieeefp.h>
|
2000-02-18 03:39:52 +08:00
|
|
|
#include "_ansi.h"
|
|
|
|
|
|
|
|
#define __need_size_t
|
|
|
|
#define __need_wchar_t
|
2012-11-01 19:51:12 +08:00
|
|
|
#define __need_NULL
|
2000-02-18 03:39:52 +08:00
|
|
|
#include <stddef.h>
|
|
|
|
|
|
|
|
#include <sys/reent.h>
|
2014-12-15 20:58:19 +08:00
|
|
|
#include <sys/cdefs.h>
|
2002-04-20 03:16:22 +08:00
|
|
|
#include <machine/stdlib.h>
|
2001-11-14 18:25:35 +08:00
|
|
|
#ifndef __STRICT_ANSI__
|
|
|
|
#include <alloca.h>
|
|
|
|
#endif
|
|
|
|
|
2005-12-06 06:15:21 +08:00
|
|
|
#ifdef __CYGWIN__
|
|
|
|
#include <cygwin/stdlib.h>
|
|
|
|
#endif
|
|
|
|
|
Implement strto[dflu]_l/wcsto[dflu]_l
Implement GNU extensions strtod_l, strtof_l, strtol_l, strtold_l, strtoll_l,
strtoul_l, strtoull_l, wcstod_l, wcstof_l, wcstol_l, wcstold_l, wcstoll_l,
wcstoul_l, wcstoull_l.
Export from Cygwin, fix posix.xml.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2016-08-10 22:30:46 +08:00
|
|
|
#if __GNU_VISIBLE
|
2017-03-22 04:21:30 +08:00
|
|
|
#include <xlocale.h>
|
Implement strto[dflu]_l/wcsto[dflu]_l
Implement GNU extensions strtod_l, strtof_l, strtol_l, strtold_l, strtoll_l,
strtoul_l, strtoull_l, wcstod_l, wcstof_l, wcstol_l, wcstold_l, wcstoll_l,
wcstoul_l, wcstoull_l.
Export from Cygwin, fix posix.xml.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2016-08-10 22:30:46 +08:00
|
|
|
#endif
|
|
|
|
|
2002-06-28 07:58:38 +08:00
|
|
|
_BEGIN_STD_C
|
|
|
|
|
2000-02-18 03:39:52 +08:00
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
int quot; /* quotient */
|
|
|
|
int rem; /* remainder */
|
|
|
|
} div_t;
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
long quot; /* quotient */
|
|
|
|
long rem; /* remainder */
|
|
|
|
} ldiv_t;
|
|
|
|
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __ISO_C_VISIBLE >= 1999
|
2003-11-28 03:47:19 +08:00
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
long long int quot; /* quotient */
|
|
|
|
long long int rem; /* remainder */
|
|
|
|
} lldiv_t;
|
|
|
|
#endif
|
|
|
|
|
2013-09-08 15:11:33 +08:00
|
|
|
#ifndef __compar_fn_t_defined
|
|
|
|
#define __compar_fn_t_defined
|
2017-12-04 10:53:22 +08:00
|
|
|
typedef int (*__compar_fn_t) (const void *, const void *);
|
2013-09-08 15:11:33 +08:00
|
|
|
#endif
|
|
|
|
|
2000-02-18 03:39:52 +08:00
|
|
|
#define EXIT_FAILURE 1
|
|
|
|
#define EXIT_SUCCESS 0
|
|
|
|
|
2000-06-09 09:13:36 +08:00
|
|
|
#define RAND_MAX __RAND_MAX
|
2000-02-18 03:39:52 +08:00
|
|
|
|
2017-12-04 13:54:48 +08:00
|
|
|
int __locale_mb_cur_max (void);
|
2000-02-18 03:39:52 +08:00
|
|
|
|
2010-04-28 17:59:37 +08:00
|
|
|
#define MB_CUR_MAX __locale_mb_cur_max()
|
2000-02-18 03:39:52 +08:00
|
|
|
|
2017-12-04 13:54:48 +08:00
|
|
|
void abort (void) _ATTRIBUTE ((__noreturn__));
|
|
|
|
int abs (int);
|
2016-03-18 18:49:28 +08:00
|
|
|
#if __BSD_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
__uint32_t arc4random (void);
|
|
|
|
__uint32_t arc4random_uniform (__uint32_t);
|
|
|
|
void arc4random_buf (void *, size_t);
|
2016-03-18 18:49:28 +08:00
|
|
|
#endif
|
2017-12-04 13:54:48 +08:00
|
|
|
int atexit (void (*__func)(void));
|
|
|
|
double atof (const char *__nptr);
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __MISC_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
float atoff (const char *__nptr);
|
2000-02-18 03:39:52 +08:00
|
|
|
#endif
|
2017-12-04 13:54:48 +08:00
|
|
|
int atoi (const char *__nptr);
|
|
|
|
int _atoi_r (struct _reent *, const char *__nptr);
|
|
|
|
long atol (const char *__nptr);
|
|
|
|
long _atol_r (struct _reent *, const char *__nptr);
|
|
|
|
void * bsearch (const void *__key,
|
2017-12-04 10:53:22 +08:00
|
|
|
const void *__base,
|
2000-02-18 03:39:52 +08:00
|
|
|
size_t __nmemb,
|
|
|
|
size_t __size,
|
2017-12-04 13:54:48 +08:00
|
|
|
__compar_fn_t _compar);
|
2018-07-26 16:52:44 +08:00
|
|
|
void *calloc(size_t, size_t) __malloc_like __result_use_check
|
|
|
|
__alloc_size2(1, 2) _NOTHROW;
|
2017-12-04 13:54:48 +08:00
|
|
|
div_t div (int __numer, int __denom);
|
|
|
|
void exit (int __status) _ATTRIBUTE ((__noreturn__));
|
|
|
|
void free (void *) _NOTHROW;
|
|
|
|
char * getenv (const char *__string);
|
|
|
|
char * _getenv_r (struct _reent *, const char *__string);
|
2019-02-19 13:06:11 +08:00
|
|
|
#if __GNU_VISIBLE
|
|
|
|
char * secure_getenv (const char *__string);
|
|
|
|
#endif
|
2017-12-04 13:54:48 +08:00
|
|
|
char * _findenv (const char *, int *);
|
|
|
|
char * _findenv_r (struct _reent *, const char *, int *);
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __POSIX_VISIBLE >= 200809
|
2009-12-22 21:07:24 +08:00
|
|
|
extern char *suboptarg; /* getsubopt(3) external variable */
|
2017-12-04 13:54:48 +08:00
|
|
|
int getsubopt (char **, char * const *, char **);
|
|
|
|
#endif
|
|
|
|
long labs (long);
|
|
|
|
ldiv_t ldiv (long __numer, long __denom);
|
2018-07-26 16:52:44 +08:00
|
|
|
void *malloc(size_t) __malloc_like __result_use_check __alloc_size(1) _NOTHROW;
|
2017-12-04 13:54:48 +08:00
|
|
|
int mblen (const char *, size_t);
|
|
|
|
int _mblen_r (struct _reent *, const char *, size_t, _mbstate_t *);
|
|
|
|
int mbtowc (wchar_t *__restrict, const char *__restrict, size_t);
|
|
|
|
int _mbtowc_r (struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *);
|
|
|
|
int wctomb (char *, wchar_t);
|
|
|
|
int _wctomb_r (struct _reent *, char *, wchar_t, _mbstate_t *);
|
|
|
|
size_t mbstowcs (wchar_t *__restrict, const char *__restrict, size_t);
|
|
|
|
size_t _mbstowcs_r (struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *);
|
|
|
|
size_t wcstombs (char *__restrict, const wchar_t *__restrict, size_t);
|
|
|
|
size_t _wcstombs_r (struct _reent *, char *__restrict, const wchar_t *__restrict, size_t, _mbstate_t *);
|
2000-12-06 19:02:28 +08:00
|
|
|
#ifndef _REENT_ONLY
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809
|
2017-12-04 13:54:48 +08:00
|
|
|
char * mkdtemp (char *);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif
|
|
|
|
#if __GNU_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
int mkostemp (char *, int);
|
|
|
|
int mkostemps (char *, int, int);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif
|
|
|
|
#if __MISC_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 4
|
2017-12-04 13:54:48 +08:00
|
|
|
int mkstemp (char *);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif
|
|
|
|
#if __MISC_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
int mkstemps (char *, int);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif
|
|
|
|
#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112)
|
2017-12-04 13:54:48 +08:00
|
|
|
char * mktemp (char *) _ATTRIBUTE ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")));
|
2000-12-06 19:02:28 +08:00
|
|
|
#endif
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif /* !_REENT_ONLY */
|
2017-12-04 13:54:48 +08:00
|
|
|
char * _mkdtemp_r (struct _reent *, char *);
|
|
|
|
int _mkostemp_r (struct _reent *, char *, int);
|
|
|
|
int _mkostemps_r (struct _reent *, char *, int, int);
|
|
|
|
int _mkstemp_r (struct _reent *, char *);
|
|
|
|
int _mkstemps_r (struct _reent *, char *, int);
|
|
|
|
char * _mktemp_r (struct _reent *, char *) _ATTRIBUTE ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")));
|
|
|
|
void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t _compar);
|
|
|
|
int rand (void);
|
2018-07-26 16:52:44 +08:00
|
|
|
void *realloc(void *, size_t) __result_use_check __alloc_size(2) _NOTHROW;
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __BSD_VISIBLE
|
2018-07-26 16:36:06 +08:00
|
|
|
void *reallocarray(void *, size_t, size_t) __result_use_check __alloc_size2(2, 3);
|
2018-07-26 16:52:44 +08:00
|
|
|
void *reallocf(void *, size_t) __result_use_check __alloc_size(2);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif
|
|
|
|
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4
|
2017-12-04 13:54:48 +08:00
|
|
|
char * realpath (const char *__restrict path, char *__restrict resolved_path);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif
|
|
|
|
#if __BSD_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
int rpmatch (const char *response);
|
2008-11-20 04:56:22 +08:00
|
|
|
#endif
|
2016-06-09 05:04:06 +08:00
|
|
|
#if __XSI_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
void setkey (const char *__key);
|
2016-06-09 05:04:06 +08:00
|
|
|
#endif
|
2017-12-04 13:54:48 +08:00
|
|
|
void srand (unsigned __seed);
|
|
|
|
double strtod (const char *__restrict __n, char **__restrict __end_PTR);
|
|
|
|
double _strtod_r (struct _reent *,const char *__restrict __n, char **__restrict __end_PTR);
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __ISO_C_VISIBLE >= 1999
|
2017-12-04 13:54:48 +08:00
|
|
|
float strtof (const char *__restrict __n, char **__restrict __end_PTR);
|
2012-10-22 23:15:21 +08:00
|
|
|
#endif
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __MISC_VISIBLE
|
2002-12-07 02:58:51 +08:00
|
|
|
/* the following strtodf interface is deprecated...use strtof instead */
|
2016-03-15 05:55:26 +08:00
|
|
|
# ifndef strtodf
|
2002-12-07 02:58:51 +08:00
|
|
|
# define strtodf strtof
|
|
|
|
# endif
|
2000-02-18 03:39:52 +08:00
|
|
|
#endif
|
2017-12-04 13:54:48 +08:00
|
|
|
long strtol (const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
|
|
|
long _strtol_r (struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
|
|
|
unsigned long strtoul (const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
|
|
|
unsigned long _strtoul_r (struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
2001-10-02 02:05:11 +08:00
|
|
|
|
Implement strto[dflu]_l/wcsto[dflu]_l
Implement GNU extensions strtod_l, strtof_l, strtol_l, strtold_l, strtoll_l,
strtoul_l, strtoull_l, wcstod_l, wcstof_l, wcstol_l, wcstold_l, wcstoll_l,
wcstoul_l, wcstoull_l.
Export from Cygwin, fix posix.xml.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2016-08-10 22:30:46 +08:00
|
|
|
#if __GNU_VISIBLE
|
|
|
|
double strtod_l (const char *__restrict, char **__restrict, locale_t);
|
|
|
|
float strtof_l (const char *__restrict, char **__restrict, locale_t);
|
|
|
|
#ifdef _HAVE_LONG_DOUBLE
|
|
|
|
extern long double strtold_l (const char *__restrict, char **__restrict,
|
|
|
|
locale_t);
|
|
|
|
#endif /* _HAVE_LONG_DOUBLE */
|
|
|
|
long strtol_l (const char *__restrict, char **__restrict, int, locale_t);
|
|
|
|
unsigned long strtoul_l (const char *__restrict, char **__restrict, int,
|
|
|
|
locale_t __loc);
|
|
|
|
long long strtoll_l (const char *__restrict, char **__restrict, int, locale_t);
|
|
|
|
unsigned long long strtoull_l (const char *__restrict, char **__restrict, int,
|
|
|
|
locale_t __loc);
|
|
|
|
#endif
|
|
|
|
|
2017-12-04 13:54:48 +08:00
|
|
|
int system (const char *__string);
|
2000-02-18 03:39:52 +08:00
|
|
|
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __SVID_VISIBLE || __XSI_VISIBLE >= 4
|
2017-12-04 13:54:48 +08:00
|
|
|
long a64l (const char *__input);
|
|
|
|
char * l64a (long __input);
|
|
|
|
char * _l64a_r (struct _reent *,long __input);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif
|
|
|
|
#if __MISC_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
int on_exit (void (*__func)(int, void *),void *__arg);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif
|
|
|
|
#if __ISO_C_VISIBLE >= 1999
|
2017-12-04 13:54:48 +08:00
|
|
|
void _Exit (int __status) _ATTRIBUTE ((__noreturn__));
|
2014-10-10 22:43:19 +08:00
|
|
|
#endif
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __SVID_VISIBLE || __XSI_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
int putenv (char *__string);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif
|
2017-12-04 13:54:48 +08:00
|
|
|
int _putenv_r (struct _reent *, char *__string);
|
|
|
|
void * _reallocf_r (struct _reent *, void *, size_t);
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112
|
2017-12-04 13:54:48 +08:00
|
|
|
int setenv (const char *__string, const char *__value, int __overwrite);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif
|
2017-12-04 13:54:48 +08:00
|
|
|
int _setenv_r (struct _reent *, const char *__string, const char *__value, int __overwrite);
|
2000-02-18 03:39:52 +08:00
|
|
|
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112
|
2017-12-04 13:54:48 +08:00
|
|
|
char * gcvt (double,int,char *);
|
|
|
|
char * gcvtf (float,int,char *);
|
|
|
|
char * fcvt (double,int,int *,int *);
|
|
|
|
char * fcvtf (float,int,int *,int *);
|
|
|
|
char * ecvt (double,int,int *,int *);
|
|
|
|
char * ecvtbuf (double, int, int*, int*, char *);
|
|
|
|
char * fcvtbuf (double, int, int*, int*, char *);
|
|
|
|
char * ecvtf (float,int,int *,int *);
|
|
|
|
#endif
|
|
|
|
char * __itoa (int, char *, int);
|
|
|
|
char * __utoa (unsigned, char *, int);
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __MISC_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
char * itoa (int, char *, int);
|
|
|
|
char * utoa (unsigned, char *, int);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif
|
|
|
|
#if __POSIX_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
int rand_r (unsigned *__seed);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif
|
2000-02-18 03:39:52 +08:00
|
|
|
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __SVID_VISIBLE || __XSI_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
double drand48 (void);
|
|
|
|
double _drand48_r (struct _reent *);
|
|
|
|
double erand48 (unsigned short [3]);
|
|
|
|
double _erand48_r (struct _reent *, unsigned short [3]);
|
|
|
|
long jrand48 (unsigned short [3]);
|
|
|
|
long _jrand48_r (struct _reent *, unsigned short [3]);
|
|
|
|
void lcong48 (unsigned short [7]);
|
|
|
|
void _lcong48_r (struct _reent *, unsigned short [7]);
|
|
|
|
long lrand48 (void);
|
|
|
|
long _lrand48_r (struct _reent *);
|
|
|
|
long mrand48 (void);
|
|
|
|
long _mrand48_r (struct _reent *);
|
|
|
|
long nrand48 (unsigned short [3]);
|
|
|
|
long _nrand48_r (struct _reent *, unsigned short [3]);
|
2001-02-14 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
* libc/include/stdlib.h: Add declarations of rand48 functions and
their reentrant versions.
* libc/include/sys/reent.h: Move macros from rand48.h. Add
struct _rand48 for shared parameters of rand48 functions.
(struct _reent): Add a variable _r48 of struct _rand48.
(_REENT_INIT): Add _r48 initialization.
* libc/stdlib/Makefile.am (lib_a_SOURCES): Add rand48 functions.
(CHEWOUT_FILES): Add rand48.def.
* libc/stdlib/Makefile.am: Add dependencies for rand48 functions.
* libc/stdlib/Makefile.in: Regenerated.
* libc/stdlib/drand48.c (drand48, _drand48_r): Derived from the
NetBSD C library.
* libc/stdlib/erand48.c (erand48, _erand48_r): Ditto.
* libc/stdlib/jrand48.c (jrand48, _jrand48_r): Ditto.
* libc/stdlib/lcong48.c (lcong48, _lcong48_r): Ditto.
* libc/stdlib/lrand48.c (lrand48, _lrand48_r): Ditto.
* libc/stdlib/mrand48.c (mrand48, _mrand48_r): Ditto.
* libc/stdlib/nrand48.c (nrand48, _nrand48_r): Ditto.
* libc/stdlib/seed48.c (seed48, _seed48_r): Ditto.
* libc/stdlib/srand48.c (srand48, _srand48_r): Ditto.
* libc/stdlib/rand48.c (__dorand48): Ditto.
* libc/stdlib/rand48.h: Ditto, and modify declarations of global
parameters into macros referring them in the reentrant structure.
2001-02-15 10:04:55 +08:00
|
|
|
unsigned short *
|
2017-12-04 13:54:48 +08:00
|
|
|
seed48 (unsigned short [3]);
|
2001-02-14 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
* libc/include/stdlib.h: Add declarations of rand48 functions and
their reentrant versions.
* libc/include/sys/reent.h: Move macros from rand48.h. Add
struct _rand48 for shared parameters of rand48 functions.
(struct _reent): Add a variable _r48 of struct _rand48.
(_REENT_INIT): Add _r48 initialization.
* libc/stdlib/Makefile.am (lib_a_SOURCES): Add rand48 functions.
(CHEWOUT_FILES): Add rand48.def.
* libc/stdlib/Makefile.am: Add dependencies for rand48 functions.
* libc/stdlib/Makefile.in: Regenerated.
* libc/stdlib/drand48.c (drand48, _drand48_r): Derived from the
NetBSD C library.
* libc/stdlib/erand48.c (erand48, _erand48_r): Ditto.
* libc/stdlib/jrand48.c (jrand48, _jrand48_r): Ditto.
* libc/stdlib/lcong48.c (lcong48, _lcong48_r): Ditto.
* libc/stdlib/lrand48.c (lrand48, _lrand48_r): Ditto.
* libc/stdlib/mrand48.c (mrand48, _mrand48_r): Ditto.
* libc/stdlib/nrand48.c (nrand48, _nrand48_r): Ditto.
* libc/stdlib/seed48.c (seed48, _seed48_r): Ditto.
* libc/stdlib/srand48.c (srand48, _srand48_r): Ditto.
* libc/stdlib/rand48.c (__dorand48): Ditto.
* libc/stdlib/rand48.h: Ditto, and modify declarations of global
parameters into macros referring them in the reentrant structure.
2001-02-15 10:04:55 +08:00
|
|
|
unsigned short *
|
2017-12-04 13:54:48 +08:00
|
|
|
_seed48_r (struct _reent *, unsigned short [3]);
|
|
|
|
void srand48 (long);
|
|
|
|
void _srand48_r (struct _reent *, long);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif /* __SVID_VISIBLE || __XSI_VISIBLE */
|
2016-03-23 06:50:48 +08:00
|
|
|
#if __SVID_VISIBLE || __XSI_VISIBLE >= 4 || __BSD_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
char * initstate (unsigned, char *, size_t);
|
|
|
|
long random (void);
|
|
|
|
char * setstate (char *);
|
|
|
|
void srandom (unsigned);
|
2016-03-23 06:50:48 +08:00
|
|
|
#endif
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __ISO_C_VISIBLE >= 1999
|
2017-12-04 13:54:48 +08:00
|
|
|
long long atoll (const char *__nptr);
|
2014-10-10 22:43:19 +08:00
|
|
|
#endif
|
2017-12-04 13:54:48 +08:00
|
|
|
long long _atoll_r (struct _reent *, const char *__nptr);
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __ISO_C_VISIBLE >= 1999
|
2017-12-04 13:54:48 +08:00
|
|
|
long long llabs (long long);
|
|
|
|
lldiv_t lldiv (long long __numer, long long __denom);
|
|
|
|
long long strtoll (const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
2012-10-22 23:15:21 +08:00
|
|
|
#endif
|
2017-12-04 13:54:48 +08:00
|
|
|
long long _strtoll_r (struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __ISO_C_VISIBLE >= 1999
|
2017-12-04 13:54:48 +08:00
|
|
|
unsigned long long strtoull (const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
2012-10-22 23:15:21 +08:00
|
|
|
#endif
|
2017-12-04 13:54:48 +08:00
|
|
|
unsigned long long _strtoull_r (struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
2001-02-14 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
* libc/include/stdlib.h: Add declarations of rand48 functions and
their reentrant versions.
* libc/include/sys/reent.h: Move macros from rand48.h. Add
struct _rand48 for shared parameters of rand48 functions.
(struct _reent): Add a variable _r48 of struct _rand48.
(_REENT_INIT): Add _r48 initialization.
* libc/stdlib/Makefile.am (lib_a_SOURCES): Add rand48 functions.
(CHEWOUT_FILES): Add rand48.def.
* libc/stdlib/Makefile.am: Add dependencies for rand48 functions.
* libc/stdlib/Makefile.in: Regenerated.
* libc/stdlib/drand48.c (drand48, _drand48_r): Derived from the
NetBSD C library.
* libc/stdlib/erand48.c (erand48, _erand48_r): Ditto.
* libc/stdlib/jrand48.c (jrand48, _jrand48_r): Ditto.
* libc/stdlib/lcong48.c (lcong48, _lcong48_r): Ditto.
* libc/stdlib/lrand48.c (lrand48, _lrand48_r): Ditto.
* libc/stdlib/mrand48.c (mrand48, _mrand48_r): Ditto.
* libc/stdlib/nrand48.c (nrand48, _nrand48_r): Ditto.
* libc/stdlib/seed48.c (seed48, _seed48_r): Ditto.
* libc/stdlib/srand48.c (srand48, _srand48_r): Ditto.
* libc/stdlib/rand48.c (__dorand48): Ditto.
* libc/stdlib/rand48.h: Ditto, and modify declarations of global
parameters into macros referring them in the reentrant structure.
2001-02-15 10:04:55 +08:00
|
|
|
|
2000-10-30 09:08:58 +08:00
|
|
|
#ifndef __CYGWIN__
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __MISC_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
void cfree (void *);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif
|
|
|
|
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112
|
2017-12-04 13:54:48 +08:00
|
|
|
int unsetenv (const char *__string);
|
2000-02-18 03:39:52 +08:00
|
|
|
#endif
|
2017-12-04 13:54:48 +08:00
|
|
|
int _unsetenv_r (struct _reent *, const char *__string);
|
2016-03-15 05:55:26 +08:00
|
|
|
#endif /* !__CYGWIN__ */
|
2000-02-18 03:39:52 +08:00
|
|
|
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __POSIX_VISIBLE >= 200112
|
2018-10-22 17:23:15 +08:00
|
|
|
int posix_memalign (void **, size_t, size_t) __nonnull((1))
|
|
|
|
__result_use_check;
|
2009-09-23 05:49:20 +08:00
|
|
|
#endif
|
2000-02-18 03:39:52 +08:00
|
|
|
|
2017-12-04 13:54:48 +08:00
|
|
|
char * _dtoa_r (struct _reent *, double, int, int, int *, int*, char**);
|
2002-08-26 12:33:46 +08:00
|
|
|
#ifndef __CYGWIN__
|
2017-12-04 13:54:48 +08:00
|
|
|
void * _malloc_r (struct _reent *, size_t) _NOTHROW;
|
|
|
|
void * _calloc_r (struct _reent *, size_t, size_t) _NOTHROW;
|
|
|
|
void _free_r (struct _reent *, void *) _NOTHROW;
|
|
|
|
void * _realloc_r (struct _reent *, void *, size_t) _NOTHROW;
|
|
|
|
void _mstats_r (struct _reent *, char *);
|
2002-08-26 12:33:46 +08:00
|
|
|
#endif
|
2017-12-04 13:54:48 +08:00
|
|
|
int _system_r (struct _reent *, const char *);
|
2000-02-18 03:39:52 +08:00
|
|
|
|
2017-12-04 13:54:48 +08:00
|
|
|
void __eprintf (const char *, const char *, unsigned int, const char *);
|
2000-02-18 03:39:52 +08:00
|
|
|
|
2014-12-06 00:21:04 +08:00
|
|
|
/* There are two common qsort_r variants. If you request
|
|
|
|
_BSD_SOURCE, you get the BSD version; otherwise you get the GNU
|
|
|
|
version. We want that #undef qsort_r will still let you
|
|
|
|
invoke the underlying function, but that requires gcc support. */
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __GNU_VISIBLE
|
2017-12-04 13:54:48 +08:00
|
|
|
void qsort_r (void *__base, size_t __nmemb, size_t __size, int (*_compar)(const void *, const void *, void *), void *__thunk);
|
2016-03-15 05:55:26 +08:00
|
|
|
#elif __BSD_VISIBLE
|
2014-12-06 00:21:04 +08:00
|
|
|
# ifdef __GNUC__
|
2017-12-04 13:54:48 +08:00
|
|
|
void qsort_r (void *__base, size_t __nmemb, size_t __size, void *__thunk, int (*_compar)(void *, const void *, const void *))
|
2014-12-06 00:21:04 +08:00
|
|
|
__asm__ (__ASMNAME ("__bsd_qsort_r"));
|
|
|
|
# else
|
2017-12-04 13:54:48 +08:00
|
|
|
void __bsd_qsort_r (void *__base, size_t __nmemb, size_t __size, void *__thunk, int (*_compar)(void *, const void *, const void *));
|
2014-12-06 00:21:04 +08:00
|
|
|
# define qsort_r __bsd_qsort_r
|
|
|
|
# endif
|
|
|
|
#endif
|
|
|
|
|
2009-04-25 06:49:55 +08:00
|
|
|
/* On platforms where long double equals double. */
|
2014-03-08 04:06:54 +08:00
|
|
|
#ifdef _HAVE_LONG_DOUBLE
|
2015-11-21 01:14:58 +08:00
|
|
|
extern long double _strtold_r (struct _reent *, const char *__restrict, char **__restrict);
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __ISO_C_VISIBLE >= 1999
|
2013-11-18 Sahil Patnayakuni <sahilp@oarcorp.com>
* libc/include/stdlib.h, libc/stdlib/mbstowcs.c,
libc/stdlib/mbstowcs_r.c, libc/stdlib/mbtowc.c,
libc/stdlib/mbtowc_r.c, libc/stdlib/strtod.c,
libc/stdlib/strtol.c, libc/stdlib/strtold.c,
libc/stdlib/strtoll.c, libc/stdlib/strtoll_r.c,
libc/stdlib/strtoul.c, libc/stdlib/strtoull.c,
libc/stdlib/strtoull_r.c, libc/stdlib/wcstombs.c,
libc/stdlib/wcstombs_r.c: Add restrict keyword.
2013-11-19 01:26:52 +08:00
|
|
|
extern long double strtold (const char *__restrict, char **__restrict);
|
2012-10-22 23:15:21 +08:00
|
|
|
#endif
|
2014-03-08 04:06:54 +08:00
|
|
|
#endif /* _HAVE_LONG_DOUBLE */
|
2009-04-16 Ken Werner <ken.werner@de.ibm.com>
* libm/libm.texinfo: Add long double function support chapter.
* libc/include/machine/ieeefp.h: Add _LDBL_EQ_DBL define.
* libc/include/stdlib.h: Include <machine/ieeefp.h>.
(strtold, wcstold): Declare.
* libc/stdlib/strtold.c: New File.
* libc/stdlib/wcstold.c: Likewise.
* libc/configure.in: Add long double check.
* libc/configure: Regenerate.
* libc/stdlib/Makefile.am: Add strtold.c and wcstold.c.
* libc/stdlib/Makefile.in: Regenerate.
* libc/include/math.h (atanl, cosl, sinl, tanl, tanhl): Declare.
(frexpl, modfl, ceill, fabsl, floorl, log1pl, expm1l, acosl): Ditto.
(asinl, atan2l, coshl, sinhl, expl, ldexpl, logl, log10l, powl): Ditto.
(sqrtl, fmodl, hypotl, copysignl, nanl, ilogbl, asinhl, cbrt): Ditto.
(nextafterl, rintl, scalbnl, exp2l, scalblnl, tgammal): Ditto.
(nearbyintl, lrintl, llrintl, roundl, lroundl, llround): Ditto.
(llroundl, truncl, remquol, fdiml, fmaxl, fminl, fmal, acoshl): Ditto.
(atanhl, remainderl, lgammal, erfl, erfcl): Ditto.
* libm/common/atanl.c: New File.
* libm/common/cosl.c: Likewise.
* libm/common/sinl.c: Likewise.
* libm/common/modfl.c: Likewise.
* libm/common/frexpl.c: Likewise.
* libm/common/tanhl.c: Likewise.
* libm/common/tanl.c: Likewise.
* libm/common/expm1l.c: Likewise.
* libm/common/log1pl.c: Likewise.
* libm/common/ceill.c: Likewise.
* libm/common/fabsl.c: Likewise.
* libm/common/floorl.c: Likewise.
* libm/common/acosl.c: Likewise.
* libm/common/asinl.c: Likewise.
* libm/common/atan2l.c: Likewise.
* libm/common/coshl.c: Likewise.
* libm/common/expl.c: Likewise.
* libm/common/fmodl.c: Likewise.
* libm/common/hypotl.c: Likewise.
* libm/common/ldexpl.c: Likewise.
* libm/common/log10l.c: Likewise.
* libm/common/logl.c: Likewise.
* libm/common/powl.c: Likewise.
* libm/common/sqrtl.c: Likewise.
* libm/common/copysignl.c: Likewise.
* libm/common/ilogbl.c: Likewise.
* libm/common/nanl.c: Likewise.
* libm/common/cbrtl.c: Likewise.
* libm/common/asinhl.c: Likewise.
* libm/common/nextafterl.c: Likewise.
* libm/common/rintl.c: Likewise.
* libm/common/scalbnl.c: Likewise.
* libm/common/exp2l.c: Likewise.
* libm/common/fdiml.c: Likewise.
* libm/common/fmal.c: Likewise.
* libm/common/fmaxl.c: Likewise.
* libm/common/fminl.c: Likewise.
* libm/common/lrintl.c: Likewise.
* libm/common/lroundl.c: Likewise.
* libm/common/nearbyintl.c: Likewise.
* libm/common/remquol.c: Likewise.
* libm/common/roundl.c: Likewise.
* libm/common/scalblnl.c: Likewise.
* libm/common/truncl.c: Likewise.
* libm/common/acoshl.c: Likewise.
* libm/common/atanhl.c: Likewise.
* libm/common/erfcl.c: Likewise.
* libm/common/erfl.c: Likewise.
* libm/common/lgammal.c: Likewise.
* libm/common/remainderl.c: Likewise.
* libm/common/tgammal.c: Likewise.
* libm/common/sinhl.c: Likewise.
* libm/common/llroundl.c: Likewise.
* libm/configure.in: Add long double check.
* libm/configure: Regenerate.
* libm/common/Makefile.am: Add new files.
* libm/common/Makefile.in: Regenerate.
2009-04-17 02:24:35 +08:00
|
|
|
|
2015-10-14 13:39:35 +08:00
|
|
|
/*
|
|
|
|
* If we're in a mode greater than C99, expose C11 functions.
|
|
|
|
*/
|
2016-03-15 05:55:26 +08:00
|
|
|
#if __ISO_C_VISIBLE >= 2011
|
2018-07-26 16:36:06 +08:00
|
|
|
void * aligned_alloc(size_t, size_t) __malloc_like __alloc_align(1)
|
2018-09-28 17:12:48 +08:00
|
|
|
__alloc_size(2) __result_use_check;
|
2015-10-14 13:39:35 +08:00
|
|
|
int at_quick_exit(void (*)(void));
|
|
|
|
_Noreturn void
|
|
|
|
quick_exit(int);
|
|
|
|
#endif /* __ISO_C_VISIBLE >= 2011 */
|
|
|
|
|
2002-06-28 07:58:38 +08:00
|
|
|
_END_STD_C
|
|
|
|
|
2017-11-30 11:17:09 +08:00
|
|
|
#if __SSP_FORTIFY_LEVEL > 0
|
|
|
|
#include <ssp/stdlib.h>
|
|
|
|
#endif
|
|
|
|
|
2000-02-18 03:39:52 +08:00
|
|
|
#endif /* _STDLIB_H_ */
|