xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/stdlib.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /* Copyright (C) 1991-2003,2004,2005,2006,2007 Free Software Foundation, Inc.
2*53ee8cc1Swenshuai.xi    This file is part of the GNU C Library.
3*53ee8cc1Swenshuai.xi 
4*53ee8cc1Swenshuai.xi    The GNU C Library is free software; you can redistribute it and/or
5*53ee8cc1Swenshuai.xi    modify it under the terms of the GNU Lesser General Public
6*53ee8cc1Swenshuai.xi    License as published by the Free Software Foundation; either
7*53ee8cc1Swenshuai.xi    version 2.1 of the License, or (at your option) any later version.
8*53ee8cc1Swenshuai.xi 
9*53ee8cc1Swenshuai.xi    The GNU C Library is distributed in the hope that it will be useful,
10*53ee8cc1Swenshuai.xi    but WITHOUT ANY WARRANTY; without even the implied warranty of
11*53ee8cc1Swenshuai.xi    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12*53ee8cc1Swenshuai.xi    Lesser General Public License for more details.
13*53ee8cc1Swenshuai.xi 
14*53ee8cc1Swenshuai.xi    You should have received a copy of the GNU Lesser General Public
15*53ee8cc1Swenshuai.xi    License along with the GNU C Library; if not, write to the Free
16*53ee8cc1Swenshuai.xi    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17*53ee8cc1Swenshuai.xi    02111-1307 USA.  */
18*53ee8cc1Swenshuai.xi 
19*53ee8cc1Swenshuai.xi /*
20*53ee8cc1Swenshuai.xi  *	ISO C99 Standard: 7.20 General utilities	<stdlib.h>
21*53ee8cc1Swenshuai.xi  */
22*53ee8cc1Swenshuai.xi 
23*53ee8cc1Swenshuai.xi #ifndef	_STDLIB_H
24*53ee8cc1Swenshuai.xi 
25*53ee8cc1Swenshuai.xi #include <features.h>
26*53ee8cc1Swenshuai.xi 
27*53ee8cc1Swenshuai.xi /* Get size_t, wchar_t and NULL from <stddef.h>.  */
28*53ee8cc1Swenshuai.xi #define		__need_size_t
29*53ee8cc1Swenshuai.xi #ifndef __need_malloc_and_calloc
30*53ee8cc1Swenshuai.xi # define	__need_wchar_t
31*53ee8cc1Swenshuai.xi # define	__need_NULL
32*53ee8cc1Swenshuai.xi #endif
33*53ee8cc1Swenshuai.xi #include <stddef.h>
34*53ee8cc1Swenshuai.xi 
35*53ee8cc1Swenshuai.xi __BEGIN_DECLS
36*53ee8cc1Swenshuai.xi 
37*53ee8cc1Swenshuai.xi #ifndef __need_malloc_and_calloc
38*53ee8cc1Swenshuai.xi #define	_STDLIB_H	1
39*53ee8cc1Swenshuai.xi 
40*53ee8cc1Swenshuai.xi #if defined __USE_XOPEN && !defined _SYS_WAIT_H
41*53ee8cc1Swenshuai.xi /* XPG requires a few symbols from <sys/wait.h> being defined.  */
42*53ee8cc1Swenshuai.xi # include <bits/waitflags.h>
43*53ee8cc1Swenshuai.xi # include <bits/waitstatus.h>
44*53ee8cc1Swenshuai.xi 
45*53ee8cc1Swenshuai.xi # ifdef __USE_BSD
46*53ee8cc1Swenshuai.xi 
47*53ee8cc1Swenshuai.xi /* Lots of hair to allow traditional BSD use of `union wait'
48*53ee8cc1Swenshuai.xi    as well as POSIX.1 use of `int' for the status word.  */
49*53ee8cc1Swenshuai.xi 
50*53ee8cc1Swenshuai.xi #  if defined __GNUC__ && !defined __cplusplus
51*53ee8cc1Swenshuai.xi #   define __WAIT_INT(status)						      \
52*53ee8cc1Swenshuai.xi   (__extension__ ({ union { __typeof(status) __in; int __i; } __u;	      \
53*53ee8cc1Swenshuai.xi 		    __u.__in = (status); __u.__i; }))
54*53ee8cc1Swenshuai.xi #  else
55*53ee8cc1Swenshuai.xi #   define __WAIT_INT(status)	(*(int *) &(status))
56*53ee8cc1Swenshuai.xi #  endif
57*53ee8cc1Swenshuai.xi 
58*53ee8cc1Swenshuai.xi /* This is the type of the argument to `wait'.  The funky union
59*53ee8cc1Swenshuai.xi    causes redeclarations with ether `int *' or `union wait *' to be
60*53ee8cc1Swenshuai.xi    allowed without complaint.  __WAIT_STATUS_DEFN is the type used in
61*53ee8cc1Swenshuai.xi    the actual function definitions.  */
62*53ee8cc1Swenshuai.xi 
63*53ee8cc1Swenshuai.xi #  if !defined __GNUC__ || __GNUC__ < 2 || defined __cplusplus
64*53ee8cc1Swenshuai.xi #   define __WAIT_STATUS	void *
65*53ee8cc1Swenshuai.xi #   define __WAIT_STATUS_DEFN	void *
66*53ee8cc1Swenshuai.xi #  else
67*53ee8cc1Swenshuai.xi /* This works in GCC 2.6.1 and later.  */
68*53ee8cc1Swenshuai.xi typedef union
69*53ee8cc1Swenshuai.xi   {
70*53ee8cc1Swenshuai.xi     union wait *__uptr;
71*53ee8cc1Swenshuai.xi     int *__iptr;
72*53ee8cc1Swenshuai.xi   } __WAIT_STATUS __attribute__ ((__transparent_union__));
73*53ee8cc1Swenshuai.xi #   define __WAIT_STATUS_DEFN	int *
74*53ee8cc1Swenshuai.xi #  endif
75*53ee8cc1Swenshuai.xi 
76*53ee8cc1Swenshuai.xi # else /* Don't use BSD.  */
77*53ee8cc1Swenshuai.xi 
78*53ee8cc1Swenshuai.xi #  define __WAIT_INT(status)	(status)
79*53ee8cc1Swenshuai.xi #  define __WAIT_STATUS		int *
80*53ee8cc1Swenshuai.xi #  define __WAIT_STATUS_DEFN	int *
81*53ee8cc1Swenshuai.xi 
82*53ee8cc1Swenshuai.xi # endif /* Use BSD.  */
83*53ee8cc1Swenshuai.xi 
84*53ee8cc1Swenshuai.xi /* Define the macros <sys/wait.h> also would define this way.  */
85*53ee8cc1Swenshuai.xi # define WEXITSTATUS(status)	__WEXITSTATUS(__WAIT_INT(status))
86*53ee8cc1Swenshuai.xi # define WTERMSIG(status)	__WTERMSIG(__WAIT_INT(status))
87*53ee8cc1Swenshuai.xi # define WSTOPSIG(status)	__WSTOPSIG(__WAIT_INT(status))
88*53ee8cc1Swenshuai.xi # define WIFEXITED(status)	__WIFEXITED(__WAIT_INT(status))
89*53ee8cc1Swenshuai.xi # define WIFSIGNALED(status)	__WIFSIGNALED(__WAIT_INT(status))
90*53ee8cc1Swenshuai.xi # define WIFSTOPPED(status)	__WIFSTOPPED(__WAIT_INT(status))
91*53ee8cc1Swenshuai.xi # ifdef __WIFCONTINUED
92*53ee8cc1Swenshuai.xi #  define WIFCONTINUED(status)	__WIFCONTINUED(__WAIT_INT(status))
93*53ee8cc1Swenshuai.xi # endif
94*53ee8cc1Swenshuai.xi #endif	/* X/Open and <sys/wait.h> not included.  */
95*53ee8cc1Swenshuai.xi 
96*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
97*53ee8cc1Swenshuai.xi /* Returned by `div'.  */
98*53ee8cc1Swenshuai.xi typedef struct
99*53ee8cc1Swenshuai.xi   {
100*53ee8cc1Swenshuai.xi     int quot;			/* Quotient.  */
101*53ee8cc1Swenshuai.xi     int rem;			/* Remainder.  */
102*53ee8cc1Swenshuai.xi   } div_t;
103*53ee8cc1Swenshuai.xi 
104*53ee8cc1Swenshuai.xi /* Returned by `ldiv'.  */
105*53ee8cc1Swenshuai.xi #ifndef __ldiv_t_defined
106*53ee8cc1Swenshuai.xi typedef struct
107*53ee8cc1Swenshuai.xi   {
108*53ee8cc1Swenshuai.xi     long int quot;		/* Quotient.  */
109*53ee8cc1Swenshuai.xi     long int rem;		/* Remainder.  */
110*53ee8cc1Swenshuai.xi   } ldiv_t;
111*53ee8cc1Swenshuai.xi # define __ldiv_t_defined	1
112*53ee8cc1Swenshuai.xi #endif
113*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
114*53ee8cc1Swenshuai.xi 
115*53ee8cc1Swenshuai.xi #if defined __USE_ISOC99 && !defined __lldiv_t_defined
116*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_C99
117*53ee8cc1Swenshuai.xi /* Returned by `lldiv'.  */
118*53ee8cc1Swenshuai.xi __extension__ typedef struct
119*53ee8cc1Swenshuai.xi   {
120*53ee8cc1Swenshuai.xi     long long int quot;		/* Quotient.  */
121*53ee8cc1Swenshuai.xi     long long int rem;		/* Remainder.  */
122*53ee8cc1Swenshuai.xi   } lldiv_t;
123*53ee8cc1Swenshuai.xi # define __lldiv_t_defined	1
124*53ee8cc1Swenshuai.xi __END_NAMESPACE_C99
125*53ee8cc1Swenshuai.xi #endif
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi 
128*53ee8cc1Swenshuai.xi /* The largest number rand will return (same as INT_MAX).  */
129*53ee8cc1Swenshuai.xi #define	RAND_MAX	2147483647
130*53ee8cc1Swenshuai.xi 
131*53ee8cc1Swenshuai.xi 
132*53ee8cc1Swenshuai.xi /* We define these the same for all machines.
133*53ee8cc1Swenshuai.xi    Changes from this to the outside world should be done in `_exit'.  */
134*53ee8cc1Swenshuai.xi #define	EXIT_FAILURE	1	/* Failing exit status.  */
135*53ee8cc1Swenshuai.xi #define	EXIT_SUCCESS	0	/* Successful exit status.  */
136*53ee8cc1Swenshuai.xi 
137*53ee8cc1Swenshuai.xi 
138*53ee8cc1Swenshuai.xi /* Maximum length of a multibyte character in the current locale.  */
139*53ee8cc1Swenshuai.xi #define	MB_CUR_MAX	(__ctype_get_mb_cur_max ())
140*53ee8cc1Swenshuai.xi extern size_t __ctype_get_mb_cur_max (void) __THROW __wur;
141*53ee8cc1Swenshuai.xi 
142*53ee8cc1Swenshuai.xi 
143*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
144*53ee8cc1Swenshuai.xi /* Convert a string to a floating-point number.  */
145*53ee8cc1Swenshuai.xi extern double atof (__const char *__nptr)
146*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__ __nonnull ((1)) __wur;
147*53ee8cc1Swenshuai.xi /* Convert a string to an integer.  */
148*53ee8cc1Swenshuai.xi extern int atoi (__const char *__nptr)
149*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__ __nonnull ((1)) __wur;
150*53ee8cc1Swenshuai.xi /* Convert a string to a long integer.  */
151*53ee8cc1Swenshuai.xi extern long int atol (__const char *__nptr)
152*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__ __nonnull ((1)) __wur;
153*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
154*53ee8cc1Swenshuai.xi 
155*53ee8cc1Swenshuai.xi #if defined __USE_ISOC99 || (defined __GLIBC_HAVE_LONG_LONG && defined __USE_MISC)
156*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_C99
157*53ee8cc1Swenshuai.xi /* Convert a string to a long long integer.  */
158*53ee8cc1Swenshuai.xi __extension__ extern long long int atoll (__const char *__nptr)
159*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__ __nonnull ((1)) __wur;
160*53ee8cc1Swenshuai.xi __END_NAMESPACE_C99
161*53ee8cc1Swenshuai.xi #endif
162*53ee8cc1Swenshuai.xi 
163*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
164*53ee8cc1Swenshuai.xi /* Convert a string to a floating-point number.  */
165*53ee8cc1Swenshuai.xi extern double strtod (__const char *__restrict __nptr,
166*53ee8cc1Swenshuai.xi 		      char **__restrict __endptr)
167*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1)) __wur;
168*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
169*53ee8cc1Swenshuai.xi 
170*53ee8cc1Swenshuai.xi #ifdef	__USE_ISOC99
171*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_C99
172*53ee8cc1Swenshuai.xi /* Likewise for `float' and `long double' sizes of floating-point numbers.  */
173*53ee8cc1Swenshuai.xi extern float strtof (__const char *__restrict __nptr,
174*53ee8cc1Swenshuai.xi 		     char **__restrict __endptr) __THROW __nonnull ((1)) __wur;
175*53ee8cc1Swenshuai.xi 
176*53ee8cc1Swenshuai.xi extern long double strtold (__const char *__restrict __nptr,
177*53ee8cc1Swenshuai.xi 			    char **__restrict __endptr)
178*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1)) __wur;
179*53ee8cc1Swenshuai.xi __END_NAMESPACE_C99
180*53ee8cc1Swenshuai.xi #endif
181*53ee8cc1Swenshuai.xi 
182*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
183*53ee8cc1Swenshuai.xi /* Convert a string to a long integer.  */
184*53ee8cc1Swenshuai.xi extern long int strtol (__const char *__restrict __nptr,
185*53ee8cc1Swenshuai.xi 			char **__restrict __endptr, int __base)
186*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1)) __wur;
187*53ee8cc1Swenshuai.xi /* Convert a string to an unsigned long integer.  */
188*53ee8cc1Swenshuai.xi extern unsigned long int strtoul (__const char *__restrict __nptr,
189*53ee8cc1Swenshuai.xi 				  char **__restrict __endptr, int __base)
190*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1)) __wur;
191*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
192*53ee8cc1Swenshuai.xi 
193*53ee8cc1Swenshuai.xi #if defined __GLIBC_HAVE_LONG_LONG && defined __USE_BSD
194*53ee8cc1Swenshuai.xi /* Convert a string to a quadword integer.  */
195*53ee8cc1Swenshuai.xi __extension__
196*53ee8cc1Swenshuai.xi extern long long int strtoq (__const char *__restrict __nptr,
197*53ee8cc1Swenshuai.xi 			     char **__restrict __endptr, int __base)
198*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1)) __wur;
199*53ee8cc1Swenshuai.xi /* Convert a string to an unsigned quadword integer.  */
200*53ee8cc1Swenshuai.xi __extension__
201*53ee8cc1Swenshuai.xi extern unsigned long long int strtouq (__const char *__restrict __nptr,
202*53ee8cc1Swenshuai.xi 				       char **__restrict __endptr, int __base)
203*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1)) __wur;
204*53ee8cc1Swenshuai.xi #endif /* GCC and use BSD.  */
205*53ee8cc1Swenshuai.xi 
206*53ee8cc1Swenshuai.xi #if defined __USE_ISOC99 || (defined __GLIBC_HAVE_LONG_LONG && defined __USE_MISC)
207*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_C99
208*53ee8cc1Swenshuai.xi /* Convert a string to a quadword integer.  */
209*53ee8cc1Swenshuai.xi __extension__
210*53ee8cc1Swenshuai.xi extern long long int strtoll (__const char *__restrict __nptr,
211*53ee8cc1Swenshuai.xi 			      char **__restrict __endptr, int __base)
212*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1)) __wur;
213*53ee8cc1Swenshuai.xi /* Convert a string to an unsigned quadword integer.  */
214*53ee8cc1Swenshuai.xi __extension__
215*53ee8cc1Swenshuai.xi extern unsigned long long int strtoull (__const char *__restrict __nptr,
216*53ee8cc1Swenshuai.xi 					char **__restrict __endptr, int __base)
217*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1)) __wur;
218*53ee8cc1Swenshuai.xi __END_NAMESPACE_C99
219*53ee8cc1Swenshuai.xi #endif /* ISO C99 or GCC and use MISC.  */
220*53ee8cc1Swenshuai.xi 
221*53ee8cc1Swenshuai.xi 
222*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
223*53ee8cc1Swenshuai.xi /* The concept of one static locale per category is not very well
224*53ee8cc1Swenshuai.xi    thought out.  Many applications will need to process its data using
225*53ee8cc1Swenshuai.xi    information from several different locales.  Another application is
226*53ee8cc1Swenshuai.xi    the implementation of the internationalization handling in the
227*53ee8cc1Swenshuai.xi    upcoming ISO C++ standard library.  To support this another set of
228*53ee8cc1Swenshuai.xi    the functions using locale data exist which have an additional
229*53ee8cc1Swenshuai.xi    argument.
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi    Attention: all these functions are *not* standardized in any form.
232*53ee8cc1Swenshuai.xi    This is a proof-of-concept implementation.  */
233*53ee8cc1Swenshuai.xi 
234*53ee8cc1Swenshuai.xi /* Structure for reentrant locale using functions.  This is an
235*53ee8cc1Swenshuai.xi    (almost) opaque type for the user level programs.  */
236*53ee8cc1Swenshuai.xi # include <xlocale.h>
237*53ee8cc1Swenshuai.xi 
238*53ee8cc1Swenshuai.xi /* Special versions of the functions above which take the locale to
239*53ee8cc1Swenshuai.xi    use as an additional parameter.  */
240*53ee8cc1Swenshuai.xi extern long int strtol_l (__const char *__restrict __nptr,
241*53ee8cc1Swenshuai.xi 			  char **__restrict __endptr, int __base,
242*53ee8cc1Swenshuai.xi 			  __locale_t __loc) __THROW __nonnull ((1, 4)) __wur;
243*53ee8cc1Swenshuai.xi 
244*53ee8cc1Swenshuai.xi extern unsigned long int strtoul_l (__const char *__restrict __nptr,
245*53ee8cc1Swenshuai.xi 				    char **__restrict __endptr,
246*53ee8cc1Swenshuai.xi 				    int __base, __locale_t __loc)
247*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1, 4)) __wur;
248*53ee8cc1Swenshuai.xi 
249*53ee8cc1Swenshuai.xi __extension__
250*53ee8cc1Swenshuai.xi extern long long int strtoll_l (__const char *__restrict __nptr,
251*53ee8cc1Swenshuai.xi 				char **__restrict __endptr, int __base,
252*53ee8cc1Swenshuai.xi 				__locale_t __loc)
253*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1, 4)) __wur;
254*53ee8cc1Swenshuai.xi 
255*53ee8cc1Swenshuai.xi __extension__
256*53ee8cc1Swenshuai.xi extern unsigned long long int strtoull_l (__const char *__restrict __nptr,
257*53ee8cc1Swenshuai.xi 					  char **__restrict __endptr,
258*53ee8cc1Swenshuai.xi 					  int __base, __locale_t __loc)
259*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1, 4)) __wur;
260*53ee8cc1Swenshuai.xi 
261*53ee8cc1Swenshuai.xi extern double strtod_l (__const char *__restrict __nptr,
262*53ee8cc1Swenshuai.xi 			char **__restrict __endptr, __locale_t __loc)
263*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1, 3)) __wur;
264*53ee8cc1Swenshuai.xi 
265*53ee8cc1Swenshuai.xi extern float strtof_l (__const char *__restrict __nptr,
266*53ee8cc1Swenshuai.xi 		       char **__restrict __endptr, __locale_t __loc)
267*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1, 3)) __wur;
268*53ee8cc1Swenshuai.xi 
269*53ee8cc1Swenshuai.xi extern long double strtold_l (__const char *__restrict __nptr,
270*53ee8cc1Swenshuai.xi 			      char **__restrict __endptr,
271*53ee8cc1Swenshuai.xi 			      __locale_t __loc)
272*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1, 3)) __wur;
273*53ee8cc1Swenshuai.xi #endif /* GNU */
274*53ee8cc1Swenshuai.xi 
275*53ee8cc1Swenshuai.xi 
276*53ee8cc1Swenshuai.xi #ifdef __USE_EXTERN_INLINES
277*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
278*53ee8cc1Swenshuai.xi __extern_inline double
__NTH(atof (__const char * __nptr))279*53ee8cc1Swenshuai.xi __NTH (atof (__const char *__nptr))
280*53ee8cc1Swenshuai.xi {
281*53ee8cc1Swenshuai.xi   return strtod (__nptr, (char **) NULL);
282*53ee8cc1Swenshuai.xi }
283*53ee8cc1Swenshuai.xi __extern_inline int
__NTH(atoi (__const char * __nptr))284*53ee8cc1Swenshuai.xi __NTH (atoi (__const char *__nptr))
285*53ee8cc1Swenshuai.xi {
286*53ee8cc1Swenshuai.xi   return (int) strtol (__nptr, (char **) NULL, 10);
287*53ee8cc1Swenshuai.xi }
288*53ee8cc1Swenshuai.xi __extern_inline long int
__NTH(atol (__const char * __nptr))289*53ee8cc1Swenshuai.xi __NTH (atol (__const char *__nptr))
290*53ee8cc1Swenshuai.xi {
291*53ee8cc1Swenshuai.xi   return strtol (__nptr, (char **) NULL, 10);
292*53ee8cc1Swenshuai.xi }
293*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
294*53ee8cc1Swenshuai.xi 
295*53ee8cc1Swenshuai.xi # if defined __USE_MISC || defined __USE_ISOC99
296*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_C99
297*53ee8cc1Swenshuai.xi __extension__ __extern_inline long long int
__NTH(atoll (__const char * __nptr))298*53ee8cc1Swenshuai.xi __NTH (atoll (__const char *__nptr))
299*53ee8cc1Swenshuai.xi {
300*53ee8cc1Swenshuai.xi   return strtoll (__nptr, (char **) NULL, 10);
301*53ee8cc1Swenshuai.xi }
302*53ee8cc1Swenshuai.xi __END_NAMESPACE_C99
303*53ee8cc1Swenshuai.xi # endif
304*53ee8cc1Swenshuai.xi #endif /* Optimizing and Inlining.  */
305*53ee8cc1Swenshuai.xi 
306*53ee8cc1Swenshuai.xi 
307*53ee8cc1Swenshuai.xi #if defined __USE_SVID || defined __USE_XOPEN_EXTENDED
308*53ee8cc1Swenshuai.xi /* Convert N to base 64 using the digits "./0-9A-Za-z", least-significant
309*53ee8cc1Swenshuai.xi    digit first.  Returns a pointer to static storage overwritten by the
310*53ee8cc1Swenshuai.xi    next call.  */
311*53ee8cc1Swenshuai.xi extern char *l64a (long int __n) __THROW __wur;
312*53ee8cc1Swenshuai.xi 
313*53ee8cc1Swenshuai.xi /* Read a number from a string S in base 64 as above.  */
314*53ee8cc1Swenshuai.xi extern long int a64l (__const char *__s)
315*53ee8cc1Swenshuai.xi      __THROW __attribute_pure__ __nonnull ((1)) __wur;
316*53ee8cc1Swenshuai.xi 
317*53ee8cc1Swenshuai.xi #endif	/* Use SVID || extended X/Open.  */
318*53ee8cc1Swenshuai.xi 
319*53ee8cc1Swenshuai.xi #if defined __USE_SVID || defined __USE_XOPEN_EXTENDED || defined __USE_BSD
320*53ee8cc1Swenshuai.xi # include <sys/types.h>	/* we need int32_t... */
321*53ee8cc1Swenshuai.xi 
322*53ee8cc1Swenshuai.xi /* These are the functions that actually do things.  The `random', `srandom',
323*53ee8cc1Swenshuai.xi    `initstate' and `setstate' functions are those from BSD Unices.
324*53ee8cc1Swenshuai.xi    The `rand' and `srand' functions are required by the ANSI standard.
325*53ee8cc1Swenshuai.xi    We provide both interfaces to the same random number generator.  */
326*53ee8cc1Swenshuai.xi /* Return a random long integer between 0 and RAND_MAX inclusive.  */
327*53ee8cc1Swenshuai.xi extern long int random (void) __THROW;
328*53ee8cc1Swenshuai.xi 
329*53ee8cc1Swenshuai.xi /* Seed the random number generator with the given number.  */
330*53ee8cc1Swenshuai.xi extern void srandom (unsigned int __seed) __THROW;
331*53ee8cc1Swenshuai.xi 
332*53ee8cc1Swenshuai.xi /* Initialize the random number generator to use state buffer STATEBUF,
333*53ee8cc1Swenshuai.xi    of length STATELEN, and seed it with SEED.  Optimal lengths are 8, 16,
334*53ee8cc1Swenshuai.xi    32, 64, 128 and 256, the bigger the better; values less than 8 will
335*53ee8cc1Swenshuai.xi    cause an error and values greater than 256 will be rounded down.  */
336*53ee8cc1Swenshuai.xi extern char *initstate (unsigned int __seed, char *__statebuf,
337*53ee8cc1Swenshuai.xi 			size_t __statelen) __THROW __nonnull ((2));
338*53ee8cc1Swenshuai.xi 
339*53ee8cc1Swenshuai.xi /* Switch the random number generator to state buffer STATEBUF,
340*53ee8cc1Swenshuai.xi    which should have been previously initialized by `initstate'.  */
341*53ee8cc1Swenshuai.xi extern char *setstate (char *__statebuf) __THROW __nonnull ((1));
342*53ee8cc1Swenshuai.xi 
343*53ee8cc1Swenshuai.xi 
344*53ee8cc1Swenshuai.xi # ifdef __USE_MISC
345*53ee8cc1Swenshuai.xi /* Reentrant versions of the `random' family of functions.
346*53ee8cc1Swenshuai.xi    These functions all use the following data structure to contain
347*53ee8cc1Swenshuai.xi    state, rather than global state variables.  */
348*53ee8cc1Swenshuai.xi 
349*53ee8cc1Swenshuai.xi struct random_data
350*53ee8cc1Swenshuai.xi   {
351*53ee8cc1Swenshuai.xi     int32_t *fptr;		/* Front pointer.  */
352*53ee8cc1Swenshuai.xi     int32_t *rptr;		/* Rear pointer.  */
353*53ee8cc1Swenshuai.xi     int32_t *state;		/* Array of state values.  */
354*53ee8cc1Swenshuai.xi     int rand_type;		/* Type of random number generator.  */
355*53ee8cc1Swenshuai.xi     int rand_deg;		/* Degree of random number generator.  */
356*53ee8cc1Swenshuai.xi     int rand_sep;		/* Distance between front and rear.  */
357*53ee8cc1Swenshuai.xi     int32_t *end_ptr;		/* Pointer behind state table.  */
358*53ee8cc1Swenshuai.xi   };
359*53ee8cc1Swenshuai.xi 
360*53ee8cc1Swenshuai.xi extern int random_r (struct random_data *__restrict __buf,
361*53ee8cc1Swenshuai.xi 		     int32_t *__restrict __result) __THROW __nonnull ((1, 2));
362*53ee8cc1Swenshuai.xi 
363*53ee8cc1Swenshuai.xi extern int srandom_r (unsigned int __seed, struct random_data *__buf)
364*53ee8cc1Swenshuai.xi      __THROW __nonnull ((2));
365*53ee8cc1Swenshuai.xi 
366*53ee8cc1Swenshuai.xi extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
367*53ee8cc1Swenshuai.xi 			size_t __statelen,
368*53ee8cc1Swenshuai.xi 			struct random_data *__restrict __buf)
369*53ee8cc1Swenshuai.xi      __THROW __nonnull ((2, 4));
370*53ee8cc1Swenshuai.xi 
371*53ee8cc1Swenshuai.xi extern int setstate_r (char *__restrict __statebuf,
372*53ee8cc1Swenshuai.xi 		       struct random_data *__restrict __buf)
373*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1, 2));
374*53ee8cc1Swenshuai.xi # endif	/* Use misc.  */
375*53ee8cc1Swenshuai.xi #endif	/* Use SVID || extended X/Open || BSD. */
376*53ee8cc1Swenshuai.xi 
377*53ee8cc1Swenshuai.xi 
378*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
379*53ee8cc1Swenshuai.xi /* Return a random integer between 0 and RAND_MAX inclusive.  */
380*53ee8cc1Swenshuai.xi extern int rand (void) __THROW;
381*53ee8cc1Swenshuai.xi /* Seed the random number generator with the given number.  */
382*53ee8cc1Swenshuai.xi extern void srand (unsigned int __seed) __THROW;
383*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
384*53ee8cc1Swenshuai.xi 
385*53ee8cc1Swenshuai.xi #ifdef __USE_POSIX
386*53ee8cc1Swenshuai.xi /* Reentrant interface according to POSIX.1.  */
387*53ee8cc1Swenshuai.xi extern int rand_r (unsigned int *__seed) __THROW;
388*53ee8cc1Swenshuai.xi #endif
389*53ee8cc1Swenshuai.xi 
390*53ee8cc1Swenshuai.xi 
391*53ee8cc1Swenshuai.xi #if defined __USE_SVID || defined __USE_XOPEN
392*53ee8cc1Swenshuai.xi /* System V style 48-bit random number generator functions.  */
393*53ee8cc1Swenshuai.xi 
394*53ee8cc1Swenshuai.xi /* Return non-negative, double-precision floating-point value in [0.0,1.0).  */
395*53ee8cc1Swenshuai.xi extern double drand48 (void) __THROW;
396*53ee8cc1Swenshuai.xi extern double erand48 (unsigned short int __xsubi[3]) __THROW __nonnull ((1));
397*53ee8cc1Swenshuai.xi 
398*53ee8cc1Swenshuai.xi /* Return non-negative, long integer in [0,2^31).  */
399*53ee8cc1Swenshuai.xi extern long int lrand48 (void) __THROW;
400*53ee8cc1Swenshuai.xi extern long int nrand48 (unsigned short int __xsubi[3])
401*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1));
402*53ee8cc1Swenshuai.xi 
403*53ee8cc1Swenshuai.xi /* Return signed, long integers in [-2^31,2^31).  */
404*53ee8cc1Swenshuai.xi extern long int mrand48 (void) __THROW;
405*53ee8cc1Swenshuai.xi extern long int jrand48 (unsigned short int __xsubi[3])
406*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1));
407*53ee8cc1Swenshuai.xi 
408*53ee8cc1Swenshuai.xi /* Seed random number generator.  */
409*53ee8cc1Swenshuai.xi extern void srand48 (long int __seedval) __THROW;
410*53ee8cc1Swenshuai.xi extern unsigned short int *seed48 (unsigned short int __seed16v[3])
411*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1));
412*53ee8cc1Swenshuai.xi extern void lcong48 (unsigned short int __param[7]) __THROW __nonnull ((1));
413*53ee8cc1Swenshuai.xi 
414*53ee8cc1Swenshuai.xi # ifdef __USE_MISC
415*53ee8cc1Swenshuai.xi /* Data structure for communication with thread safe versions.  This
416*53ee8cc1Swenshuai.xi    type is to be regarded as opaque.  It's only exported because users
417*53ee8cc1Swenshuai.xi    have to allocate objects of this type.  */
418*53ee8cc1Swenshuai.xi struct drand48_data
419*53ee8cc1Swenshuai.xi   {
420*53ee8cc1Swenshuai.xi     unsigned short int __x[3];	/* Current state.  */
421*53ee8cc1Swenshuai.xi     unsigned short int __old_x[3]; /* Old state.  */
422*53ee8cc1Swenshuai.xi     unsigned short int __c;	/* Additive const. in congruential formula.  */
423*53ee8cc1Swenshuai.xi     unsigned short int __init;	/* Flag for initializing.  */
424*53ee8cc1Swenshuai.xi     unsigned long long int __a;	/* Factor in congruential formula.  */
425*53ee8cc1Swenshuai.xi   };
426*53ee8cc1Swenshuai.xi 
427*53ee8cc1Swenshuai.xi /* Return non-negative, double-precision floating-point value in [0.0,1.0).  */
428*53ee8cc1Swenshuai.xi extern int drand48_r (struct drand48_data *__restrict __buffer,
429*53ee8cc1Swenshuai.xi 		      double *__restrict __result) __THROW __nonnull ((1, 2));
430*53ee8cc1Swenshuai.xi extern int erand48_r (unsigned short int __xsubi[3],
431*53ee8cc1Swenshuai.xi 		      struct drand48_data *__restrict __buffer,
432*53ee8cc1Swenshuai.xi 		      double *__restrict __result) __THROW __nonnull ((1, 2));
433*53ee8cc1Swenshuai.xi 
434*53ee8cc1Swenshuai.xi /* Return non-negative, long integer in [0,2^31).  */
435*53ee8cc1Swenshuai.xi extern int lrand48_r (struct drand48_data *__restrict __buffer,
436*53ee8cc1Swenshuai.xi 		      long int *__restrict __result)
437*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1, 2));
438*53ee8cc1Swenshuai.xi extern int nrand48_r (unsigned short int __xsubi[3],
439*53ee8cc1Swenshuai.xi 		      struct drand48_data *__restrict __buffer,
440*53ee8cc1Swenshuai.xi 		      long int *__restrict __result)
441*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1, 2));
442*53ee8cc1Swenshuai.xi 
443*53ee8cc1Swenshuai.xi /* Return signed, long integers in [-2^31,2^31).  */
444*53ee8cc1Swenshuai.xi extern int mrand48_r (struct drand48_data *__restrict __buffer,
445*53ee8cc1Swenshuai.xi 		      long int *__restrict __result)
446*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1, 2));
447*53ee8cc1Swenshuai.xi extern int jrand48_r (unsigned short int __xsubi[3],
448*53ee8cc1Swenshuai.xi 		      struct drand48_data *__restrict __buffer,
449*53ee8cc1Swenshuai.xi 		      long int *__restrict __result)
450*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1, 2));
451*53ee8cc1Swenshuai.xi 
452*53ee8cc1Swenshuai.xi /* Seed random number generator.  */
453*53ee8cc1Swenshuai.xi extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
454*53ee8cc1Swenshuai.xi      __THROW __nonnull ((2));
455*53ee8cc1Swenshuai.xi 
456*53ee8cc1Swenshuai.xi extern int seed48_r (unsigned short int __seed16v[3],
457*53ee8cc1Swenshuai.xi 		     struct drand48_data *__buffer) __THROW __nonnull ((1, 2));
458*53ee8cc1Swenshuai.xi 
459*53ee8cc1Swenshuai.xi extern int lcong48_r (unsigned short int __param[7],
460*53ee8cc1Swenshuai.xi 		      struct drand48_data *__buffer)
461*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1, 2));
462*53ee8cc1Swenshuai.xi # endif	/* Use misc.  */
463*53ee8cc1Swenshuai.xi #endif	/* Use SVID or X/Open.  */
464*53ee8cc1Swenshuai.xi 
465*53ee8cc1Swenshuai.xi #endif /* don't just need malloc and calloc */
466*53ee8cc1Swenshuai.xi 
467*53ee8cc1Swenshuai.xi #ifndef __malloc_and_calloc_defined
468*53ee8cc1Swenshuai.xi # define __malloc_and_calloc_defined
469*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
470*53ee8cc1Swenshuai.xi /* Allocate SIZE bytes of memory.  */
471*53ee8cc1Swenshuai.xi extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;
472*53ee8cc1Swenshuai.xi /* Allocate NMEMB elements of SIZE bytes each, all initialized to 0.  */
473*53ee8cc1Swenshuai.xi extern void *calloc (size_t __nmemb, size_t __size)
474*53ee8cc1Swenshuai.xi      __THROW __attribute_malloc__ __wur;
475*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
476*53ee8cc1Swenshuai.xi #endif
477*53ee8cc1Swenshuai.xi 
478*53ee8cc1Swenshuai.xi #ifndef __need_malloc_and_calloc
479*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
480*53ee8cc1Swenshuai.xi /* Re-allocate the previously allocated block
481*53ee8cc1Swenshuai.xi    in PTR, making the new block SIZE bytes long.  */
482*53ee8cc1Swenshuai.xi /* __attribute_malloc__ is not used, because if realloc returns
483*53ee8cc1Swenshuai.xi    the same pointer that was passed to it, aliasing needs to be allowed
484*53ee8cc1Swenshuai.xi    between objects pointed by the old and new pointers.  */
485*53ee8cc1Swenshuai.xi extern void *realloc (void *__ptr, size_t __size)
486*53ee8cc1Swenshuai.xi      __THROW __attribute_warn_unused_result__;
487*53ee8cc1Swenshuai.xi /* Free a block allocated by `malloc', `realloc' or `calloc'.  */
488*53ee8cc1Swenshuai.xi extern void free (void *__ptr) __THROW;
489*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
490*53ee8cc1Swenshuai.xi 
491*53ee8cc1Swenshuai.xi #ifdef	__USE_MISC
492*53ee8cc1Swenshuai.xi /* Free a block.  An alias for `free'.	(Sun Unices).  */
493*53ee8cc1Swenshuai.xi extern void cfree (void *__ptr) __THROW;
494*53ee8cc1Swenshuai.xi #endif /* Use misc.  */
495*53ee8cc1Swenshuai.xi 
496*53ee8cc1Swenshuai.xi #if defined __USE_GNU || defined __USE_BSD || defined __USE_MISC
497*53ee8cc1Swenshuai.xi # include <alloca.h>
498*53ee8cc1Swenshuai.xi #endif /* Use GNU, BSD, or misc.  */
499*53ee8cc1Swenshuai.xi 
500*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
501*53ee8cc1Swenshuai.xi /* Allocate SIZE bytes on a page boundary.  The storage cannot be freed.  */
502*53ee8cc1Swenshuai.xi extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur;
503*53ee8cc1Swenshuai.xi #endif
504*53ee8cc1Swenshuai.xi 
505*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN2K
506*53ee8cc1Swenshuai.xi /* Allocate memory of SIZE bytes with an alignment of ALIGNMENT.  */
507*53ee8cc1Swenshuai.xi extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
508*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1)) __wur;
509*53ee8cc1Swenshuai.xi #endif
510*53ee8cc1Swenshuai.xi 
511*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
512*53ee8cc1Swenshuai.xi /* Abort execution and generate a core-dump.  */
513*53ee8cc1Swenshuai.xi extern void abort (void) __THROW __attribute__ ((__noreturn__));
514*53ee8cc1Swenshuai.xi 
515*53ee8cc1Swenshuai.xi 
516*53ee8cc1Swenshuai.xi /* Register a function to be called when `exit' is called.  */
517*53ee8cc1Swenshuai.xi extern int atexit (void (*__func) (void)) __THROW __nonnull ((1));
518*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
519*53ee8cc1Swenshuai.xi 
520*53ee8cc1Swenshuai.xi #ifdef	__USE_MISC
521*53ee8cc1Swenshuai.xi /* Register a function to be called with the status
522*53ee8cc1Swenshuai.xi    given to `exit' and the given argument.  */
523*53ee8cc1Swenshuai.xi extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
524*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1));
525*53ee8cc1Swenshuai.xi #endif
526*53ee8cc1Swenshuai.xi 
527*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
528*53ee8cc1Swenshuai.xi /* Call all functions registered with `atexit' and `on_exit',
529*53ee8cc1Swenshuai.xi    in the reverse of the order in which they were registered
530*53ee8cc1Swenshuai.xi    perform stdio cleanup, and terminate program execution with STATUS.  */
531*53ee8cc1Swenshuai.xi extern void exit (int __status) __THROW __attribute__ ((__noreturn__));
532*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
533*53ee8cc1Swenshuai.xi 
534*53ee8cc1Swenshuai.xi #ifdef __USE_ISOC99
535*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_C99
536*53ee8cc1Swenshuai.xi /* Terminate the program with STATUS without calling any of the
537*53ee8cc1Swenshuai.xi    functions registered with `atexit' or `on_exit'.  */
538*53ee8cc1Swenshuai.xi extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__));
539*53ee8cc1Swenshuai.xi __END_NAMESPACE_C99
540*53ee8cc1Swenshuai.xi #endif
541*53ee8cc1Swenshuai.xi 
542*53ee8cc1Swenshuai.xi 
543*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
544*53ee8cc1Swenshuai.xi /* Return the value of envariable NAME, or NULL if it doesn't exist.  */
545*53ee8cc1Swenshuai.xi extern char *getenv (__const char *__name) __THROW __nonnull ((1)) __wur;
546*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
547*53ee8cc1Swenshuai.xi 
548*53ee8cc1Swenshuai.xi /* This function is similar to the above but returns NULL if the
549*53ee8cc1Swenshuai.xi    programs is running with SUID or SGID enabled.  */
550*53ee8cc1Swenshuai.xi extern char *__secure_getenv (__const char *__name)
551*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1)) __wur;
552*53ee8cc1Swenshuai.xi 
553*53ee8cc1Swenshuai.xi #if defined __USE_SVID || defined __USE_XOPEN
554*53ee8cc1Swenshuai.xi /* The SVID says this is in <stdio.h>, but this seems a better place.	*/
555*53ee8cc1Swenshuai.xi /* Put STRING, which is of the form "NAME=VALUE", in the environment.
556*53ee8cc1Swenshuai.xi    If there is no `=', remove NAME from the environment.  */
557*53ee8cc1Swenshuai.xi extern int putenv (char *__string) __THROW __nonnull ((1));
558*53ee8cc1Swenshuai.xi #endif
559*53ee8cc1Swenshuai.xi 
560*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN2K
561*53ee8cc1Swenshuai.xi /* Set NAME to VALUE in the environment.
562*53ee8cc1Swenshuai.xi    If REPLACE is nonzero, overwrite an existing value.  */
563*53ee8cc1Swenshuai.xi extern int setenv (__const char *__name, __const char *__value, int __replace)
564*53ee8cc1Swenshuai.xi      __THROW __nonnull ((2));
565*53ee8cc1Swenshuai.xi 
566*53ee8cc1Swenshuai.xi /* Remove the variable NAME from the environment.  */
567*53ee8cc1Swenshuai.xi extern int unsetenv (__const char *__name) __THROW;
568*53ee8cc1Swenshuai.xi #endif
569*53ee8cc1Swenshuai.xi 
570*53ee8cc1Swenshuai.xi #ifdef	__USE_MISC
571*53ee8cc1Swenshuai.xi /* The `clearenv' was planned to be added to POSIX.1 but probably
572*53ee8cc1Swenshuai.xi    never made it.  Nevertheless the POSIX.9 standard (POSIX bindings
573*53ee8cc1Swenshuai.xi    for Fortran 77) requires this function.  */
574*53ee8cc1Swenshuai.xi extern int clearenv (void) __THROW;
575*53ee8cc1Swenshuai.xi #endif
576*53ee8cc1Swenshuai.xi 
577*53ee8cc1Swenshuai.xi 
578*53ee8cc1Swenshuai.xi #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
579*53ee8cc1Swenshuai.xi /* Generate a unique temporary file name from TEMPLATE.
580*53ee8cc1Swenshuai.xi    The last six characters of TEMPLATE must be "XXXXXX";
581*53ee8cc1Swenshuai.xi    they are replaced with a string that makes the file name unique.
582*53ee8cc1Swenshuai.xi    Returns TEMPLATE, or a null pointer if it cannot get a unique file name.  */
583*53ee8cc1Swenshuai.xi extern char *mktemp (char *__template) __THROW __nonnull ((1)) __wur;
584*53ee8cc1Swenshuai.xi 
585*53ee8cc1Swenshuai.xi /* Generate a unique temporary file name from TEMPLATE.
586*53ee8cc1Swenshuai.xi    The last six characters of TEMPLATE must be "XXXXXX";
587*53ee8cc1Swenshuai.xi    they are replaced with a string that makes the filename unique.
588*53ee8cc1Swenshuai.xi    Returns a file descriptor open on the file for reading and writing,
589*53ee8cc1Swenshuai.xi    or -1 if it cannot create a uniquely-named file.
590*53ee8cc1Swenshuai.xi 
591*53ee8cc1Swenshuai.xi    This function is a possible cancellation points and therefore not
592*53ee8cc1Swenshuai.xi    marked with __THROW.  */
593*53ee8cc1Swenshuai.xi # ifndef __USE_FILE_OFFSET64
594*53ee8cc1Swenshuai.xi extern int mkstemp (char *__template) __nonnull ((1)) __wur;
595*53ee8cc1Swenshuai.xi # else
596*53ee8cc1Swenshuai.xi #  ifdef __REDIRECT
597*53ee8cc1Swenshuai.xi extern int __REDIRECT (mkstemp, (char *__template), mkstemp64)
598*53ee8cc1Swenshuai.xi      __nonnull ((1)) __wur;
599*53ee8cc1Swenshuai.xi #  else
600*53ee8cc1Swenshuai.xi #   define mkstemp mkstemp64
601*53ee8cc1Swenshuai.xi #  endif
602*53ee8cc1Swenshuai.xi # endif
603*53ee8cc1Swenshuai.xi # ifdef __USE_LARGEFILE64
604*53ee8cc1Swenshuai.xi extern int mkstemp64 (char *__template) __nonnull ((1)) __wur;
605*53ee8cc1Swenshuai.xi # endif
606*53ee8cc1Swenshuai.xi #endif
607*53ee8cc1Swenshuai.xi 
608*53ee8cc1Swenshuai.xi #ifdef __USE_BSD
609*53ee8cc1Swenshuai.xi /* Create a unique temporary directory from TEMPLATE.
610*53ee8cc1Swenshuai.xi    The last six characters of TEMPLATE must be "XXXXXX";
611*53ee8cc1Swenshuai.xi    they are replaced with a string that makes the directory name unique.
612*53ee8cc1Swenshuai.xi    Returns TEMPLATE, or a null pointer if it cannot get a unique name.
613*53ee8cc1Swenshuai.xi    The directory is created mode 700.  */
614*53ee8cc1Swenshuai.xi extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur;
615*53ee8cc1Swenshuai.xi #endif
616*53ee8cc1Swenshuai.xi 
617*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
618*53ee8cc1Swenshuai.xi /* Generate a unique temporary file name from TEMPLATE similar to
619*53ee8cc1Swenshuai.xi    mkstemp.  But allow the caller to pass additional flags which are
620*53ee8cc1Swenshuai.xi    used in the open call to create the file..
621*53ee8cc1Swenshuai.xi 
622*53ee8cc1Swenshuai.xi    This function is a possible cancellation points and therefore not
623*53ee8cc1Swenshuai.xi    marked with __THROW.  */
624*53ee8cc1Swenshuai.xi # ifndef __USE_FILE_OFFSET64
625*53ee8cc1Swenshuai.xi extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur;
626*53ee8cc1Swenshuai.xi # else
627*53ee8cc1Swenshuai.xi #  ifdef __REDIRECT
628*53ee8cc1Swenshuai.xi extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64)
629*53ee8cc1Swenshuai.xi      __nonnull ((1)) __wur;
630*53ee8cc1Swenshuai.xi #  else
631*53ee8cc1Swenshuai.xi #   define mkostemp mkostemp64
632*53ee8cc1Swenshuai.xi #  endif
633*53ee8cc1Swenshuai.xi # endif
634*53ee8cc1Swenshuai.xi # ifdef __USE_LARGEFILE64
635*53ee8cc1Swenshuai.xi extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur;
636*53ee8cc1Swenshuai.xi # endif
637*53ee8cc1Swenshuai.xi #endif
638*53ee8cc1Swenshuai.xi 
639*53ee8cc1Swenshuai.xi 
640*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
641*53ee8cc1Swenshuai.xi /* Execute the given line as a shell command.
642*53ee8cc1Swenshuai.xi 
643*53ee8cc1Swenshuai.xi    This function is a cancellation point and therefore not marked with
644*53ee8cc1Swenshuai.xi    __THROW.  */
645*53ee8cc1Swenshuai.xi extern int system (__const char *__command) __wur;
646*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
647*53ee8cc1Swenshuai.xi 
648*53ee8cc1Swenshuai.xi 
649*53ee8cc1Swenshuai.xi #ifdef	__USE_GNU
650*53ee8cc1Swenshuai.xi /* Return a malloc'd string containing the canonical absolute name of the
651*53ee8cc1Swenshuai.xi    existing named file.  */
652*53ee8cc1Swenshuai.xi extern char *canonicalize_file_name (__const char *__name)
653*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1)) __wur;
654*53ee8cc1Swenshuai.xi #endif
655*53ee8cc1Swenshuai.xi 
656*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
657*53ee8cc1Swenshuai.xi /* Return the canonical absolute name of file NAME.  If RESOLVED is
658*53ee8cc1Swenshuai.xi    null, the result is malloc'd; otherwise, if the canonical name is
659*53ee8cc1Swenshuai.xi    PATH_MAX chars or more, returns null with `errno' set to
660*53ee8cc1Swenshuai.xi    ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
661*53ee8cc1Swenshuai.xi    returns the name in RESOLVED.  */
662*53ee8cc1Swenshuai.xi extern char *realpath (__const char *__restrict __name,
663*53ee8cc1Swenshuai.xi 		       char *__restrict __resolved) __THROW __wur;
664*53ee8cc1Swenshuai.xi #endif
665*53ee8cc1Swenshuai.xi 
666*53ee8cc1Swenshuai.xi 
667*53ee8cc1Swenshuai.xi /* Shorthand for type of comparison functions.  */
668*53ee8cc1Swenshuai.xi #ifndef __COMPAR_FN_T
669*53ee8cc1Swenshuai.xi # define __COMPAR_FN_T
670*53ee8cc1Swenshuai.xi typedef int (*__compar_fn_t) (__const void *, __const void *);
671*53ee8cc1Swenshuai.xi 
672*53ee8cc1Swenshuai.xi # ifdef	__USE_GNU
673*53ee8cc1Swenshuai.xi typedef __compar_fn_t comparison_fn_t;
674*53ee8cc1Swenshuai.xi # endif
675*53ee8cc1Swenshuai.xi #endif
676*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
677*53ee8cc1Swenshuai.xi typedef int (*__compar_d_fn_t) (__const void *, __const void *, void *);
678*53ee8cc1Swenshuai.xi #endif
679*53ee8cc1Swenshuai.xi 
680*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
681*53ee8cc1Swenshuai.xi /* Do a binary search for KEY in BASE, which consists of NMEMB elements
682*53ee8cc1Swenshuai.xi    of SIZE bytes each, using COMPAR to perform the comparisons.  */
683*53ee8cc1Swenshuai.xi extern void *bsearch (__const void *__key, __const void *__base,
684*53ee8cc1Swenshuai.xi 		      size_t __nmemb, size_t __size, __compar_fn_t __compar)
685*53ee8cc1Swenshuai.xi      __nonnull ((1, 2, 5)) __wur;
686*53ee8cc1Swenshuai.xi 
687*53ee8cc1Swenshuai.xi /* Sort NMEMB elements of BASE, of SIZE bytes each,
688*53ee8cc1Swenshuai.xi    using COMPAR to perform the comparisons.  */
689*53ee8cc1Swenshuai.xi extern void qsort (void *__base, size_t __nmemb, size_t __size,
690*53ee8cc1Swenshuai.xi 		   __compar_fn_t __compar) __nonnull ((1, 4));
691*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
692*53ee8cc1Swenshuai.xi extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
693*53ee8cc1Swenshuai.xi 		     __compar_d_fn_t __compar, void *__arg)
694*53ee8cc1Swenshuai.xi   __nonnull ((1, 4));
695*53ee8cc1Swenshuai.xi #endif
696*53ee8cc1Swenshuai.xi 
697*53ee8cc1Swenshuai.xi 
698*53ee8cc1Swenshuai.xi /* Return the absolute value of X.  */
699*53ee8cc1Swenshuai.xi extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
700*53ee8cc1Swenshuai.xi extern long int labs (long int __x) __THROW __attribute__ ((__const__)) __wur;
701*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
702*53ee8cc1Swenshuai.xi 
703*53ee8cc1Swenshuai.xi #ifdef __USE_ISOC99
704*53ee8cc1Swenshuai.xi __extension__ extern long long int llabs (long long int __x)
705*53ee8cc1Swenshuai.xi      __THROW __attribute__ ((__const__)) __wur;
706*53ee8cc1Swenshuai.xi #endif
707*53ee8cc1Swenshuai.xi 
708*53ee8cc1Swenshuai.xi 
709*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
710*53ee8cc1Swenshuai.xi /* Return the `div_t', `ldiv_t' or `lldiv_t' representation
711*53ee8cc1Swenshuai.xi    of the value of NUMER over DENOM. */
712*53ee8cc1Swenshuai.xi /* GCC may have built-ins for these someday.  */
713*53ee8cc1Swenshuai.xi extern div_t div (int __numer, int __denom)
714*53ee8cc1Swenshuai.xi      __THROW __attribute__ ((__const__)) __wur;
715*53ee8cc1Swenshuai.xi extern ldiv_t ldiv (long int __numer, long int __denom)
716*53ee8cc1Swenshuai.xi      __THROW __attribute__ ((__const__)) __wur;
717*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
718*53ee8cc1Swenshuai.xi 
719*53ee8cc1Swenshuai.xi #ifdef __USE_ISOC99
720*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_C99
721*53ee8cc1Swenshuai.xi __extension__ extern lldiv_t lldiv (long long int __numer,
722*53ee8cc1Swenshuai.xi 				    long long int __denom)
723*53ee8cc1Swenshuai.xi      __THROW __attribute__ ((__const__)) __wur;
724*53ee8cc1Swenshuai.xi __END_NAMESPACE_C99
725*53ee8cc1Swenshuai.xi #endif
726*53ee8cc1Swenshuai.xi 
727*53ee8cc1Swenshuai.xi 
728*53ee8cc1Swenshuai.xi #if defined __USE_SVID || defined __USE_XOPEN_EXTENDED
729*53ee8cc1Swenshuai.xi /* Convert floating point numbers to strings.  The returned values are
730*53ee8cc1Swenshuai.xi    valid only until another call to the same function.  */
731*53ee8cc1Swenshuai.xi 
732*53ee8cc1Swenshuai.xi /* Convert VALUE to a string with NDIGIT digits and return a pointer to
733*53ee8cc1Swenshuai.xi    this.  Set *DECPT with the position of the decimal character and *SIGN
734*53ee8cc1Swenshuai.xi    with the sign of the number.  */
735*53ee8cc1Swenshuai.xi extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
736*53ee8cc1Swenshuai.xi 		   int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
737*53ee8cc1Swenshuai.xi 
738*53ee8cc1Swenshuai.xi /* Convert VALUE to a string rounded to NDIGIT decimal digits.  Set *DECPT
739*53ee8cc1Swenshuai.xi    with the position of the decimal character and *SIGN with the sign of
740*53ee8cc1Swenshuai.xi    the number.  */
741*53ee8cc1Swenshuai.xi extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
742*53ee8cc1Swenshuai.xi 		   int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
743*53ee8cc1Swenshuai.xi 
744*53ee8cc1Swenshuai.xi /* If possible convert VALUE to a string with NDIGIT significant digits.
745*53ee8cc1Swenshuai.xi    Otherwise use exponential representation.  The resulting string will
746*53ee8cc1Swenshuai.xi    be written to BUF.  */
747*53ee8cc1Swenshuai.xi extern char *gcvt (double __value, int __ndigit, char *__buf)
748*53ee8cc1Swenshuai.xi      __THROW __nonnull ((3)) __wur;
749*53ee8cc1Swenshuai.xi 
750*53ee8cc1Swenshuai.xi 
751*53ee8cc1Swenshuai.xi # ifdef __USE_MISC
752*53ee8cc1Swenshuai.xi /* Long double versions of above functions.  */
753*53ee8cc1Swenshuai.xi extern char *qecvt (long double __value, int __ndigit,
754*53ee8cc1Swenshuai.xi 		    int *__restrict __decpt, int *__restrict __sign)
755*53ee8cc1Swenshuai.xi      __THROW __nonnull ((3, 4)) __wur;
756*53ee8cc1Swenshuai.xi extern char *qfcvt (long double __value, int __ndigit,
757*53ee8cc1Swenshuai.xi 		    int *__restrict __decpt, int *__restrict __sign)
758*53ee8cc1Swenshuai.xi      __THROW __nonnull ((3, 4)) __wur;
759*53ee8cc1Swenshuai.xi extern char *qgcvt (long double __value, int __ndigit, char *__buf)
760*53ee8cc1Swenshuai.xi      __THROW __nonnull ((3)) __wur;
761*53ee8cc1Swenshuai.xi 
762*53ee8cc1Swenshuai.xi 
763*53ee8cc1Swenshuai.xi /* Reentrant version of the functions above which provide their own
764*53ee8cc1Swenshuai.xi    buffers.  */
765*53ee8cc1Swenshuai.xi extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
766*53ee8cc1Swenshuai.xi 		   int *__restrict __sign, char *__restrict __buf,
767*53ee8cc1Swenshuai.xi 		   size_t __len) __THROW __nonnull ((3, 4, 5));
768*53ee8cc1Swenshuai.xi extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
769*53ee8cc1Swenshuai.xi 		   int *__restrict __sign, char *__restrict __buf,
770*53ee8cc1Swenshuai.xi 		   size_t __len) __THROW __nonnull ((3, 4, 5));
771*53ee8cc1Swenshuai.xi 
772*53ee8cc1Swenshuai.xi extern int qecvt_r (long double __value, int __ndigit,
773*53ee8cc1Swenshuai.xi 		    int *__restrict __decpt, int *__restrict __sign,
774*53ee8cc1Swenshuai.xi 		    char *__restrict __buf, size_t __len)
775*53ee8cc1Swenshuai.xi      __THROW __nonnull ((3, 4, 5));
776*53ee8cc1Swenshuai.xi extern int qfcvt_r (long double __value, int __ndigit,
777*53ee8cc1Swenshuai.xi 		    int *__restrict __decpt, int *__restrict __sign,
778*53ee8cc1Swenshuai.xi 		    char *__restrict __buf, size_t __len)
779*53ee8cc1Swenshuai.xi      __THROW __nonnull ((3, 4, 5));
780*53ee8cc1Swenshuai.xi # endif	/* misc */
781*53ee8cc1Swenshuai.xi #endif	/* use MISC || use X/Open Unix */
782*53ee8cc1Swenshuai.xi 
783*53ee8cc1Swenshuai.xi 
784*53ee8cc1Swenshuai.xi __BEGIN_NAMESPACE_STD
785*53ee8cc1Swenshuai.xi /* Return the length of the multibyte character
786*53ee8cc1Swenshuai.xi    in S, which is no longer than N.  */
787*53ee8cc1Swenshuai.xi extern int mblen (__const char *__s, size_t __n) __THROW __wur;
788*53ee8cc1Swenshuai.xi /* Return the length of the given multibyte character,
789*53ee8cc1Swenshuai.xi    putting its `wchar_t' representation in *PWC.  */
790*53ee8cc1Swenshuai.xi extern int mbtowc (wchar_t *__restrict __pwc,
791*53ee8cc1Swenshuai.xi 		   __const char *__restrict __s, size_t __n) __THROW __wur;
792*53ee8cc1Swenshuai.xi /* Put the multibyte character represented
793*53ee8cc1Swenshuai.xi    by WCHAR in S, returning its length.  */
794*53ee8cc1Swenshuai.xi extern int wctomb (char *__s, wchar_t __wchar) __THROW __wur;
795*53ee8cc1Swenshuai.xi 
796*53ee8cc1Swenshuai.xi 
797*53ee8cc1Swenshuai.xi /* Convert a multibyte string to a wide char string.  */
798*53ee8cc1Swenshuai.xi extern size_t mbstowcs (wchar_t *__restrict  __pwcs,
799*53ee8cc1Swenshuai.xi 			__const char *__restrict __s, size_t __n) __THROW;
800*53ee8cc1Swenshuai.xi /* Convert a wide char string to multibyte string.  */
801*53ee8cc1Swenshuai.xi extern size_t wcstombs (char *__restrict __s,
802*53ee8cc1Swenshuai.xi 			__const wchar_t *__restrict __pwcs, size_t __n)
803*53ee8cc1Swenshuai.xi      __THROW;
804*53ee8cc1Swenshuai.xi __END_NAMESPACE_STD
805*53ee8cc1Swenshuai.xi 
806*53ee8cc1Swenshuai.xi 
807*53ee8cc1Swenshuai.xi #ifdef __USE_SVID
808*53ee8cc1Swenshuai.xi /* Determine whether the string value of RESPONSE matches the affirmation
809*53ee8cc1Swenshuai.xi    or negative response expression as specified by the LC_MESSAGES category
810*53ee8cc1Swenshuai.xi    in the program's current locale.  Returns 1 if affirmative, 0 if
811*53ee8cc1Swenshuai.xi    negative, and -1 if not matching.  */
812*53ee8cc1Swenshuai.xi extern int rpmatch (__const char *__response) __THROW __nonnull ((1)) __wur;
813*53ee8cc1Swenshuai.xi #endif
814*53ee8cc1Swenshuai.xi 
815*53ee8cc1Swenshuai.xi 
816*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN_EXTENDED
817*53ee8cc1Swenshuai.xi /* Parse comma separated suboption from *OPTIONP and match against
818*53ee8cc1Swenshuai.xi    strings in TOKENS.  If found return index and set *VALUEP to
819*53ee8cc1Swenshuai.xi    optional value introduced by an equal sign.  If the suboption is
820*53ee8cc1Swenshuai.xi    not part of TOKENS return in *VALUEP beginning of unknown
821*53ee8cc1Swenshuai.xi    suboption.  On exit *OPTIONP is set to the beginning of the next
822*53ee8cc1Swenshuai.xi    token or at the terminating NUL character.  */
823*53ee8cc1Swenshuai.xi extern int getsubopt (char **__restrict __optionp,
824*53ee8cc1Swenshuai.xi 		      char *__const *__restrict __tokens,
825*53ee8cc1Swenshuai.xi 		      char **__restrict __valuep)
826*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1, 2, 3)) __wur;
827*53ee8cc1Swenshuai.xi #endif
828*53ee8cc1Swenshuai.xi 
829*53ee8cc1Swenshuai.xi 
830*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN
831*53ee8cc1Swenshuai.xi /* Setup DES tables according KEY.  */
832*53ee8cc1Swenshuai.xi extern void setkey (__const char *__key) __THROW __nonnull ((1));
833*53ee8cc1Swenshuai.xi #endif
834*53ee8cc1Swenshuai.xi 
835*53ee8cc1Swenshuai.xi 
836*53ee8cc1Swenshuai.xi /* X/Open pseudo terminal handling.  */
837*53ee8cc1Swenshuai.xi 
838*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN2K
839*53ee8cc1Swenshuai.xi /* Return a master pseudo-terminal handle.  */
840*53ee8cc1Swenshuai.xi extern int posix_openpt (int __oflag) __wur;
841*53ee8cc1Swenshuai.xi #endif
842*53ee8cc1Swenshuai.xi 
843*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN
844*53ee8cc1Swenshuai.xi /* The next four functions all take a master pseudo-tty fd and
845*53ee8cc1Swenshuai.xi    perform an operation on the associated slave:  */
846*53ee8cc1Swenshuai.xi 
847*53ee8cc1Swenshuai.xi /* Chown the slave to the calling user.  */
848*53ee8cc1Swenshuai.xi extern int grantpt (int __fd) __THROW;
849*53ee8cc1Swenshuai.xi 
850*53ee8cc1Swenshuai.xi /* Release an internal lock so the slave can be opened.
851*53ee8cc1Swenshuai.xi    Call after grantpt().  */
852*53ee8cc1Swenshuai.xi extern int unlockpt (int __fd) __THROW;
853*53ee8cc1Swenshuai.xi 
854*53ee8cc1Swenshuai.xi /* Return the pathname of the pseudo terminal slave assoicated with
855*53ee8cc1Swenshuai.xi    the master FD is open on, or NULL on errors.
856*53ee8cc1Swenshuai.xi    The returned storage is good until the next call to this function.  */
857*53ee8cc1Swenshuai.xi extern char *ptsname (int __fd) __THROW __wur;
858*53ee8cc1Swenshuai.xi #endif
859*53ee8cc1Swenshuai.xi 
860*53ee8cc1Swenshuai.xi #ifdef __USE_GNU
861*53ee8cc1Swenshuai.xi /* Store at most BUFLEN characters of the pathname of the slave pseudo
862*53ee8cc1Swenshuai.xi    terminal associated with the master FD is open on in BUF.
863*53ee8cc1Swenshuai.xi    Return 0 on success, otherwise an error number.  */
864*53ee8cc1Swenshuai.xi extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
865*53ee8cc1Swenshuai.xi      __THROW __nonnull ((2));
866*53ee8cc1Swenshuai.xi 
867*53ee8cc1Swenshuai.xi /* Open a master pseudo terminal and return its file descriptor.  */
868*53ee8cc1Swenshuai.xi extern int getpt (void);
869*53ee8cc1Swenshuai.xi #endif
870*53ee8cc1Swenshuai.xi 
871*53ee8cc1Swenshuai.xi #ifdef __USE_BSD
872*53ee8cc1Swenshuai.xi /* Put the 1 minute, 5 minute and 15 minute load averages into the first
873*53ee8cc1Swenshuai.xi    NELEM elements of LOADAVG.  Return the number written (never more than
874*53ee8cc1Swenshuai.xi    three, but may be less than NELEM), or -1 if an error occurred.  */
875*53ee8cc1Swenshuai.xi extern int getloadavg (double __loadavg[], int __nelem)
876*53ee8cc1Swenshuai.xi      __THROW __nonnull ((1));
877*53ee8cc1Swenshuai.xi #endif
878*53ee8cc1Swenshuai.xi 
879*53ee8cc1Swenshuai.xi 
880*53ee8cc1Swenshuai.xi /* Define some macros helping to catch buffer overflows.  */
881*53ee8cc1Swenshuai.xi #if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
882*53ee8cc1Swenshuai.xi # include <bits/stdlib.h>
883*53ee8cc1Swenshuai.xi #endif
884*53ee8cc1Swenshuai.xi #ifdef __LDBL_COMPAT
885*53ee8cc1Swenshuai.xi # include <bits/stdlib-ldbl.h>
886*53ee8cc1Swenshuai.xi #endif
887*53ee8cc1Swenshuai.xi 
888*53ee8cc1Swenshuai.xi #endif /* don't just need malloc and calloc */
889*53ee8cc1Swenshuai.xi #undef __need_malloc_and_calloc
890*53ee8cc1Swenshuai.xi 
891*53ee8cc1Swenshuai.xi __END_DECLS
892*53ee8cc1Swenshuai.xi 
893*53ee8cc1Swenshuai.xi #endif /* stdlib.h  */
894