Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 4920 → Rev 4921

/contrib/sdk/sources/newlib/libc/Makefile
1,9 → 1,10
 
 
CC = kos32-gcc
AR = kos32-ar
LD = kos32-ld
 
CFLAGS = -c -O2 -fomit-frame-pointer -DBUILD_DLL
CFLAGS = -c -O2 -fomit-frame-pointer -DBUILD_DLL -DMISSING_SYSCALL_NAMES
LDFLAGS = -shared -s -T libcdll.lds --out-implib libc.dll.a --image-base 0
#LDFLAGS+= --output-def libc.orig.def
ARFLAGS = crs
95,28 → 96,43
errno/errno.c \
locale/locale.c \
locale/lctype.c \
locale/ldpart.c \
reent/impure.c \
reent/init_reent.c \
reent/getreent.c \
reent/mutex.c \
reent/gettimeofdayr.c \
reent/hdlman.c \
reent/isattyr.c \
reent/openr.c \
reent/closer.c \
reent/linkr.c \
reent/readr.c \
reent/lseekr.c \
reent/fstatr.c \
reent/writer.c \
reent/timesr.c \
reent/unlinkr.c \
search/qsort.c \
search/bsearch.c \
signal/signal.c \
sys/close.c \
sys/create.c \
sys/delete.c \
sys/errno.c \
sys/finfo.c \
sys/fsize.c \
sys/fstat.c \
sys/gettod.c \
sys/io.c \
sys/ioread.c \
sys/iowrite.c \
sys/isatty.c \
sys/lseek.c \
sys/open.c \
sys/read.c \
sys/unlink.c \
sys/write.c \
sys/fsize.c \
sys/io_alloc.S \
time/asctime.c \
time/asctime_r.c \
time/clock.c \
132,6 → 148,7
time/lcltime_r.c \
time/strftime.c \
time/time.c \
time/timelocal.c \
time/tzlock.c \
time/tzvars.c
 
252,7 → 269,6
refill.c \
rget.c \
remove.c \
rename.c \
setvbuf.c \
stdio.c \
tmpfile.c \
/contrib/sdk/sources/newlib/libc/crt/crtdll.c
92,7 → 92,7
memset(_tls_map, 0xFF, 32*4);
_tls_map[0] = 0xE0;
init_reent();
__initPOSIXHandles();
init_stdio();
 
// __appenv = load_file("/sys/system.env", &__appenv_size);
 
/contrib/sdk/sources/newlib/libc/ctype/ctype_.c
111,14 → 111,21
char __EXPORT *__ctype_ptr__ = (char *) _ctype_b + 127;
 
# ifdef __CYGWIN__
 
# ifdef __x86_64__
__asm__ (" \n\
.data \n\
.globl _ctype_ \n\
.set _ctype_,_ctype_b+127 \n\
.text \n\
");
# else
__asm__ (" \n\
.data \n\
.globl __ctype_ \n\
.set __ctype_,__ctype_b+127 \n\
.text \n\
");
 
# endif
# else /* !__CYGWIN__ */
 
_CONST char _ctype_[1 + 256] = {
/contrib/sdk/sources/newlib/libc/ctype/isalnum.c
18,7 → 18,7
<<isalnum>> is a macro which classifies ASCII integer values by table
lookup. It is a predicate returning non-zero for alphabetic or
numeric ASCII characters, and <<0>> for other arguments. It is defined
for all integer values.
only if <[c]> is representable as an unsigned char or if <[c]> is EOF.
 
You can use a compiled subroutine instead of the macro definition by
undefining the macro using `<<#undef isalnum>>'.
/contrib/sdk/sources/newlib/libc/ctype/isalpha.c
16,8 → 16,8
DESCRIPTION
<<isalpha>> is a macro which classifies ASCII integer values by table
lookup. It is a predicate returning non-zero when <[c]> represents an
alphabetic ASCII character, and 0 otherwise. It is defined only when
<<isascii>>(<[c]>) is true or <[c]> is EOF.
alphabetic ASCII character, and 0 otherwise. It is defined only if
<[c]> is representable as an unsigned char or if <[c]> is EOF.
 
You can use a compiled subroutine instead of the macro definition by
undefining the macro using `<<#undef isalpha>>'.
/contrib/sdk/sources/newlib/libc/ctype/isblank.c
17,7 → 17,8
DESCRIPTION
<<isblank>> is a function which classifies ASCII integer values by table
lookup. It is a predicate returning non-zero for blank characters, and 0
for other characters.
for other characters. It is defined only if <[c]> is representable as an
unsigned char or if <[c]> is EOF.
 
RETURNS
<<isblank>> returns non-zero if <[c]> is a blank character.
/contrib/sdk/sources/newlib/libc/ctype/iscntrl.c
17,8 → 17,8
DESCRIPTION
<<iscntrl>> is a macro which classifies ASCII integer values by table
lookup. It is a predicate returning non-zero for control characters, and 0
for other characters. It is defined only when <<isascii>>(<[c]>) is
true or <[c]> is EOF.
for other characters. It is defined only if <[c]> is representable as an
unsigned char or if <[c]> is EOF.
 
You can use a compiled subroutine instead of the macro definition by
undefining the macro using `<<#undef iscntrl>>'.
/contrib/sdk/sources/newlib/libc/ctype/isdigit.c
16,8 → 16,8
DESCRIPTION
<<isdigit>> is a macro which classifies ASCII integer values by table
lookup. It is a predicate returning non-zero for decimal digits, and 0 for
other characters. It is defined only when <<isascii>>(<[c]>) is true
or <[c]> is EOF.
other characters. It is defined only if <[c]> is representable as an
unsigned char or if <[c]> is EOF.
 
You can use a compiled subroutine instead of the macro definition by
undefining the macro using `<<#undef isdigit>>'.
/contrib/sdk/sources/newlib/libc/ctype/islower.c
18,7 → 18,8
<<islower>> is a macro which classifies ASCII integer values by table
lookup. It is a predicate returning non-zero for minuscules
(lowercase alphabetic characters), and 0 for other characters.
It is defined only when <<isascii>>(<[c]>) is true or <[c]> is EOF.
It is defined only if <[c]> is representable as an unsigned char or if
<[c]> is EOF.
 
You can use a compiled subroutine instead of the macro definition by
undefining the macro using `<<#undef islower>>'.
/contrib/sdk/sources/newlib/libc/ctype/isprint.c
23,7 → 23,8
<<isprint>> is a macro which classifies ASCII integer values by table
lookup. It is a predicate returning non-zero for printable
characters, and 0 for other character arguments.
It is defined only when <<isascii>>(<[c]>) is true or <[c]> is EOF.
It is defined only if <[c]> is representable as an unsigned char or if
<[c]> is EOF.
 
You can use a compiled subroutine instead of the macro definition by
undefining either macro using `<<#undef isprint>>' or `<<#undef isgraph>>'.
/contrib/sdk/sources/newlib/libc/ctype/ispunct.c
17,8 → 17,8
DESCRIPTION
<<ispunct>> is a macro which classifies ASCII integer values by table
lookup. It is a predicate returning non-zero for printable
punctuation characters, and 0 for other characters. It is defined
only when <<isascii>>(<[c]>) is true or <[c]> is EOF.
punctuation characters, and 0 for other characters. It is defined only
if <[c]> is representable as an unsigned char or if <[c]> is EOF.
 
You can use a compiled subroutine instead of the macro definition by
undefining the macro using `<<#undef ispunct>>'.
/contrib/sdk/sources/newlib/libc/ctype/isxdigit.c
17,8 → 17,8
DESCRIPTION
<<isxdigit>> is a macro which classifies ASCII integer values by table
lookup. It is a predicate returning non-zero for hexadecimal digits,
and <<0>> for other characters. It is defined only when
<<isascii>>(<[c]>) is true or <[c]> is EOF.
and <<0>> for other characters. It is defined only if <[c]> is
representable as an unsigned char or if <[c]> is EOF.
 
You can use a compiled subroutine instead of the macro definition by
undefining the macro using `<<#undef isxdigit>>'.
/contrib/sdk/sources/newlib/libc/ctype/jp2uc.c
0,0 → 1,166
/* Routine to translate from Japanese characters to Unicode */
 
/* Copyright (c) 2002 Red Hat Incorporated.
All rights reserved.
 
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
 
Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
 
Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
 
The name of Red Hat Incorporated may not be used to endorse
or promote products derived from this software without specific
prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL RED HAT INCORPORATED BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
 
#include <newlib.h>
 
#ifdef _MB_CAPABLE
/* Under Cygwin, the incoming wide character is already given in UTF due
to the requirements of the underlying OS. */
#ifndef __CYGWIN__
 
#include <_ansi.h>
#include <wctype.h>
#include "local.h"
#include "jp2uc.h"
 
/* Japanese encoding types supported */
#define JP_JIS 1
#define JP_SJIS 2
#define JP_EUCJP 3
 
static wint_t
_DEFUN (__jp2uc, (c, type), wint_t c _AND int type)
{
int index, adj;
unsigned char byte1, byte2;
wint_t ret;
 
/* we actually use tables of EUCJP to Unicode. For JIS, we simply
note that EUCJP is essentially JIS with the top bits on in each
byte and translate to EUCJP. For SJIS, we do a translation to EUCJP before
accessing the tables. */
switch (type)
{
case JP_JIS:
byte1 = (c >> 8) + 0x80;
byte2 = (c & 0xff) + 0x80;
break;
case JP_EUCJP:
byte1 = (c >> 8);
byte2 = (c & 0xff);
break;
case JP_SJIS:
byte1 = c >> 8;
byte2 = c & 0xff;
if (byte2 <= 0x9e)
{
adj = 0xa1 - 0x22;
byte2 = (byte2 - 31) + 0xa1;
}
else
{
adj = 0xa1 - 0x21;
byte2 = (byte2 - 126) + 0xa1;
}
if (byte1 <= 0x9f)
byte1 = ((byte1 - 112) << 1) + adj;
else
byte1 = ((byte1 - 176) << 1) + adj;
break;
default:
return WEOF;
}
 
/* find conversion in jp2uc arrays */
 
/* handle larger ranges first */
if (byte1 >= 0xb0 && byte1 <= 0xcf && c <= 0xcfd3)
{
index = (byte1 - 0xb0) * 0xfe + (byte2 - 0xa1);
return b02cf[index];
}
else if (byte1 >= 0xd0 && byte1 <= 0xf4 && c <= 0xf4a6)
{
index = (byte1 - 0xd0) * 0xfe + (byte2 - 0xa1);
return d02f4[index];
}
 
/* handle smaller ranges here */
switch (byte1)
{
case 0xA1:
return (wint_t)a1[byte2 - 0xa1];
case 0xA2:
ret = a2[byte2 - 0xa1];
if (ret != 0)
return (wint_t)ret;
break;
case 0xA3:
if (a3[byte2 - 0xa1])
return (wint_t)(0xff00 + (byte2 - 0xa0));
break;
case 0xA4:
if (byte2 <= 0xf3)
return (wint_t)(0x3000 + (byte2 - 0x60));
break;
case 0xA5:
if (byte2 <= 0xf6)
return (wint_t)(0x3000 + byte2);
break;
case 0xA6:
ret = 0;
if (byte2 <= 0xd8)
ret = (wint_t)a6[byte2 - 0xa1];
if (ret != 0)
return ret;
break;
case 0xA7:
ret = 0;
if (byte2 <= 0xf1)
ret = (wint_t)a7[byte2 - 0xa1];
if (ret != 0)
return ret;
break;
case 0xA8:
if (byte2 <= 0xc0)
return (wint_t)a8[byte2 - 0xa1];
break;
default:
return WEOF;
}
 
return WEOF;
}
 
wint_t
_DEFUN (_jp2uc, (c), wint_t c)
{
if (!strcmp (__locale_charset (), "JIS"))
c = __jp2uc (c, JP_JIS);
else if (!strcmp (__locale_charset (), "SJIS"))
c = __jp2uc (c, JP_SJIS);
else if (!strcmp (__locale_charset (), "EUCJP"))
c = __jp2uc (c, JP_EUCJP);
return c;
}
 
#endif /* !__CYGWIN__ */
#endif /* _MB_CAPABLE */
/contrib/sdk/sources/newlib/libc/include/_ansi.h
34,9 → 34,7
#define _BEGIN_STD_C extern "C" {
#define _END_STD_C }
#endif
#if defined(__GNUC__) && \
( (__GNUC__ >= 4) || \
( (__GNUC__ >= 3) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 3) ) )
#if __GNUC_PREREQ (3, 3)
#define _NOTHROW __attribute__ ((nothrow))
#else
#define _NOTHROW throw()
113,14 → 111,17
to emit the function body unless the address is explicitly
taken. However this behaviour is changing to match the C99
standard, which uses 'extern inline' to indicate that the
function body *must* be emitted. If we are using GCC, but do
not have the new behaviour, we need to use extern inline; if
we are using a new GCC with the C99-compatible behaviour, or
a non-GCC compiler (which we will have to hope is C99, since
there is no other way to achieve the effect of omitting the
function if it isn't referenced) we just use plain 'inline',
which c99 defines to mean more-or-less the same as the Gnu C
'extern inline'. */
function body *must* be emitted. Likewise, a function declared
without either 'extern' or 'static' defaults to extern linkage
(C99 6.2.2p5), and the compiler may choose whether to use the
inline version or call the extern linkage version (6.7.4p6).
If we are using GCC, but do not have the new behaviour, we need
to use extern inline; if we are using a new GCC with the
C99-compatible behaviour, or a non-GCC compiler (which we will
have to hope is C99, since there is no other way to achieve the
effect of omitting the function if it isn't referenced) we use
'static inline', which c99 defines to mean more-or-less the same
as the Gnu C 'extern inline'. */
#if defined(__GNUC__) && !defined(__GNUC_STDC_INLINE__)
/* We're using GCC, but without the new C99-compatible behaviour. */
#define _ELIDABLE_INLINE extern __inline__ _ATTRIBUTE ((__always_inline__))
127,7 → 128,17
#else
/* We're using GCC in C99 mode, or an unknown compiler which
we just have to hope obeys the C99 semantics of inline. */
#define _ELIDABLE_INLINE __inline__
#define _ELIDABLE_INLINE static __inline__
#endif
 
#if __GNUC_PREREQ (3, 1)
#define _NOINLINE __attribute__ ((__noinline__))
#define _NOINLINE_STATIC _NOINLINE static
#else
/* On non-GNU compilers and GCC prior to version 3.1 the compiler can't be
trusted not to inline if it is static. */
#define _NOINLINE
#define _NOINLINE_STATIC
#endif
 
#endif /* _ANSIDECL_H_ */
/contrib/sdk/sources/newlib/libc/include/assert.h
1,8 → 1,6
/*
assert.h
*/
#ifndef _NEWLIB_ASSERT_H
#define _NEWLIB_ASSERT_H
 
#ifdef __cplusplus
extern "C" {
43,8 → 41,10
void _EXFUN(__assert_func, (const char *, int, const char *, const char *)
_ATTRIBUTE ((__noreturn__)));
 
#if __STDC_VERSION__ >= 201112L && !defined __cplusplus
# define static_assert _Static_assert
#endif
 
#ifdef __cplusplus
}
#endif
 
#endif /* _NEWLIB_ASSERT_H */
/contrib/sdk/sources/newlib/libc/include/complex.h
77,7 → 77,7
 
/* 7.3.8 Power and absolute-value functions */
/* 7.3.8.1 The cabs functions */
/*#ifndef __LIBM0_SOURCE__
/*#ifndef __LIBM0_SOURCE__ */
/* avoid conflict with historical cabs(struct complex) */
/* double cabs(double complex) __RENAME(__c99_cabs);
float cabsf(float complex) __RENAME(__c99_cabsf);
/contrib/sdk/sources/newlib/libc/include/getopt.h
104,7 → 104,7
/* types defined by this include file */
struct option
{
char *name; /* the name of the long option */
const char *name; /* the name of the long option */
int has_arg; /* one of the above macros */
int *flag; /* determines if getopt_long() returns a
* value for a long option; if it is
/contrib/sdk/sources/newlib/libc/include/glob.h
82,7 → 82,8
#define GLOB_ABEND (-2) /* Unignored error. */
 
__BEGIN_DECLS
int glob(const char *, int, int (*)(const char *, int), glob_t *);
int glob(const char *__restrict, int, int (*)(const char *, int),
glob_t *__restrict);
void globfree(glob_t *);
__END_DECLS
 
/contrib/sdk/sources/newlib/libc/include/iconv.h
41,7 → 41,8
_EXFUN(iconv_open, (_CONST char *, _CONST char *));
 
size_t
_EXFUN(iconv, (iconv_t, char **, size_t *, char **, size_t *));
_EXFUN(iconv, (iconv_t, char **__restrict, size_t *__restrict,
char **__restrict, size_t *__restrict));
 
int
_EXFUN(iconv_close, (iconv_t));
/contrib/sdk/sources/newlib/libc/include/inttypes.h
13,10 → 13,20
#ifndef _INTTYPES_H
#define _INTTYPES_H
 
#include <sys/features.h>
#include <stdint.h>
#define __need_wchar_t
#include <stddef.h>
 
/* Don't use __STDINT_EXP test since GCC's stdint.h provides different
macros than newlib's stdint.h. */
#if __GNUC_PREREQ(3, 2)
#define __INTTYPES_EXP(x) __##x##__
#else
#define __INTTYPES_EXP(x) x
#include <limits.h>
#endif
 
#define __STRINGIFY(a) #a
 
/* 8-bit types */
242,15 → 252,15
#define SCNxMAX __SCNMAX(x)
 
/* ptr types */
#if __have_long64
#if PTRDIFF_MAX <= __INTTYPES_EXP(INT_MAX)
# define __PRIPTR(x) __STRINGIFY(x)
# define __SCNPTR(x) __STRINGIFY(x)
#elif PTRDIFF_MAX <= __INTTYPES_EXP(LONG_MAX) || !defined(__have_longlong64)
#define __PRIPTR(x) __STRINGIFY(l##x)
#define __SCNPTR(x) __STRINGIFY(l##x)
#elif __have_longlong64
#else
#define __PRIPTR(x) __STRINGIFY(ll##x)
#define __SCNPTR(x) __STRINGIFY(ll##x)
#else
#define __PRIPTR(x) __STRINGIFY(x)
#define __SCNPTR(x) __STRINGIFY(x)
#endif
 
#define PRIdPTR __PRIPTR(d)
/contrib/sdk/sources/newlib/libc/include/limits.h
96,7 → 96,8
# define __LONG_LONG_MAX__ 9223372036854775807LL
# endif
 
# if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
# if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
(defined(__cplusplus) && __cplusplus >= 201103L)
/* Minimum and maximum values a `signed long long int' can hold. */
# undef LLONG_MIN
# define LLONG_MIN (-LLONG_MAX-1)
143,4 → 144,3
#ifndef PATH_MAX
#define PATH_MAX 4096
#endif
 
/contrib/sdk/sources/newlib/libc/include/locale.h
9,9 → 9,8
 
#include "_ansi.h"
 
#ifndef NULL
#define NULL 0
#endif
#define __need_NULL
#include <stddef.h>
 
#define LC_ALL 0
#define LC_COLLATE 1
/contrib/sdk/sources/newlib/libc/include/machine/_default_types.h
1,19 → 1,16
/*
* $Id: _default_types.h,v 1.2 2008/06/11 22:14:54 jjohnstn Exp $
* $Id: _default_types.h,v 1.6 2013/12/03 16:04:41 corinna Exp $
*/
 
#ifndef _MACHINE__DEFAULT_TYPES_H
#define _MACHINE__DEFAULT_TYPES_H
 
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/features.h>
 
/*
* Guess on types by examining *_MIN / *_MAX defines.
*/
#if defined(__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ >= 3 ) \
&& defined(__GNUC_MINOR__) && (__GNUC_MINOR__ > 2 ))
#if __GNUC_PREREQ (3, 3)
/* GCC >= 3.3.0 has __<val>__ implicitly defined. */
#define __EXP(x) __##x##__
#else
22,13 → 19,25
#include <limits.h>
#endif
 
#if __EXP(SCHAR_MAX) == 0x7f
#ifdef __cplusplus
extern "C" {
#endif
 
#ifdef __INT8_TYPE__
typedef __INT8_TYPE__ __int8_t;
typedef __UINT8_TYPE__ __uint8_t;
#define ___int8_t_defined 1
#elif __EXP(SCHAR_MAX) == 0x7f
typedef signed char __int8_t ;
typedef unsigned char __uint8_t ;
#define ___int8_t_defined 1
#endif
 
#if __EXP(INT_MAX) == 0x7fff
#ifdef __INT16_TYPE__
typedef __INT16_TYPE__ __int16_t;
typedef __UINT16_TYPE__ __uint16_t;
#define ___int16_t_defined 1
#elif __EXP(INT_MAX) == 0x7fff
typedef signed int __int16_t;
typedef unsigned int __uint16_t;
#define ___int16_t_defined 1
42,19 → 51,11
#define ___int16_t_defined 1
#endif
 
#if ___int16_t_defined
typedef __int16_t __int_least16_t;
typedef __uint16_t __uint_least16_t;
#define ___int_least16_t_defined 1
 
#if !___int8_t_defined
typedef __int16_t __int_least8_t;
typedef __uint16_t __uint_least8_t;
#define ___int_least8_t_defined 1
#endif
#endif
 
#if __EXP(INT_MAX) == 0x7fffffffL
#ifdef __INT32_TYPE__
typedef __INT32_TYPE__ __int32_t;
typedef __UINT32_TYPE__ __uint32_t;
#define ___int32_t_defined 1
#elif __EXP(INT_MAX) == 0x7fffffffL
typedef signed int __int32_t;
typedef unsigned int __uint32_t;
#define ___int32_t_defined 1
72,24 → 73,11
#define ___int32_t_defined 1
#endif
 
#if ___int32_t_defined
typedef __int32_t __int_least32_t;
typedef __uint32_t __uint_least32_t;
#define ___int_least32_t_defined 1
 
#if !___int8_t_defined
typedef __int32_t __int_least8_t;
typedef __uint32_t __uint_least8_t;
#define ___int_least8_t_defined 1
#endif
#if !___int16_t_defined
typedef __int32_t __int_least16_t;
typedef __uint32_t __uint_least16_t;
#define ___int_least16_t_defined 1
#endif
#endif
 
#if __EXP(LONG_MAX) > 0x7fffffff
#ifdef __INT64_TYPE__
typedef __INT64_TYPE__ __int64_t;
typedef __UINT64_TYPE__ __uint64_t;
#define ___int64_t_defined 1
#elif __EXP(LONG_MAX) > 0x7fffffff
typedef signed long __int64_t;
typedef unsigned long __uint64_t;
#define ___int64_t_defined 1
112,6 → 100,81
#define ___int64_t_defined 1
#endif
 
#ifdef __INT_LEAST8_TYPE__
typedef __INT_LEAST8_TYPE__ __int_least8_t;
typedef __UINT_LEAST8_TYPE__ __uint_least8_t;
#define ___int_least8_t_defined 1
#elif defined(___int8_t_defined)
typedef __int8_t __int_least8_t;
typedef __uint8_t __uint_least8_t;
#define ___int_least8_t_defined 1
#elif defined(___int16_t_defined)
typedef __int16_t __int_least8_t;
typedef __uint16_t __uint_least8_t;
#define ___int_least8_t_defined 1
#elif defined(___int32_t_defined)
typedef __int32_t __int_least8_t;
typedef __uint32_t __uint_least8_t;
#define ___int_least8_t_defined 1
#elif defined(___int64_t_defined)
typedef __int64_t __int_least8_t;
typedef __uint64_t __uint_least8_t;
#define ___int_least8_t_defined 1
#endif
 
#ifdef __INT_LEAST16_TYPE__
typedef __INT_LEAST16_TYPE__ __int_least16_t;
typedef __UINT_LEAST16_TYPE__ __uint_least16_t;
#define ___int_least16_t_defined 1
#elif defined(___int16_t_defined)
typedef __int16_t __int_least16_t;
typedef __uint16_t __uint_least16_t;
#define ___int_least16_t_defined 1
#elif defined(___int32_t_defined)
typedef __int32_t __int_least16_t;
typedef __uint32_t __uint_least16_t;
#define ___int_least16_t_defined 1
#elif defined(___int64_t_defined)
typedef __int64_t __int_least16_t;
typedef __uint64_t __uint_least16_t;
#define ___int_least16_t_defined 1
#endif
 
#ifdef __INT_LEAST32_TYPE__
typedef __INT_LEAST32_TYPE__ __int_least32_t;
typedef __UINT_LEAST32_TYPE__ __uint_least32_t;
#define ___int_least32_t_defined 1
#elif defined(___int32_t_defined)
typedef __int32_t __int_least32_t;
typedef __uint32_t __uint_least32_t;
#define ___int_least32_t_defined 1
#elif defined(___int64_t_defined)
typedef __int64_t __int_least32_t;
typedef __uint64_t __uint_least32_t;
#define ___int_least32_t_defined 1
#endif
 
#ifdef __INT_LEAST64_TYPE__
typedef __INT_LEAST64_TYPE__ __int_least64_t;
typedef __UINT_LEAST64_TYPE__ __uint_least64_t;
#define ___int_least64_t_defined 1
#elif defined(___int64_t_defined)
typedef __int64_t __int_least64_t;
typedef __uint64_t __uint_least64_t;
#define ___int_least64_t_defined 1
#endif
 
#ifdef __INTPTR_TYPE__
typedef __INTPTR_TYPE__ __intptr_t;
typedef __UINTPTR_TYPE__ __uintptr_t;
#elif defined(__PTRDIFF_TYPE__)
typedef __PTRDIFF_TYPE__ __intptr_t;
typedef unsigned __PTRDIFF_TYPE__ __uintptr_t;
#else
typedef long __intptr_t;
typedef unsigned long __uintptr_t;
#endif
 
#undef __EXP
 
#ifdef __cplusplus
/contrib/sdk/sources/newlib/libc/include/machine/ieeefp.h
69,10 → 69,31
#endif
#endif
 
#if defined (__aarch64__)
#if defined (__AARCH64EL__)
#define __IEEE_LITTLE_ENDIAN
#else
#define __IEEE_BIG_ENDIAN
#endif
#endif
 
#ifdef __epiphany__
#define __IEEE_LITTLE_ENDIAN
#define Sudden_Underflow 1
#endif
 
#ifdef __hppa__
#define __IEEE_BIG_ENDIAN
#endif
 
#ifdef __nds32__
#ifdef __big_endian__
#define __IEEE_BIG_ENDIAN
#else
#define __IEEE_LITTLE_ENDIAN
#endif
#endif
 
#ifdef __SPU__
#define __IEEE_BIG_ENDIAN
 
275,8 → 296,12
#endif
 
#ifdef __moxie__
#ifdef __MOXIE_BIG_ENDIAN__
#define __IEEE_BIG_ENDIAN
#else
#define __IEEE_LITTLE_ENDIAN
#endif
#endif
 
#ifdef __ia64__
#ifdef __BIG_ENDIAN__
339,9 → 364,18
#endif
 
#ifdef __MICROBLAZE__
#ifndef __MICROBLAZEEL__
#define __IEEE_BIG_ENDIAN
#else
#define __IEEE_LITTLE_ENDIAN
#endif
#endif
 
#ifdef __MSP430__
#define __IEEE_LITTLE_ENDIAN
#define __SMALL_BITFIELDS /* 16 Bit INT */
#endif
 
#ifdef __RL78__
#define __IEEE_LITTLE_ENDIAN
#define __SMALL_BITFIELDS /* 16 Bit INT */
371,6 → 405,14
#define __SMALL_BITFIELDS /* 16 Bit INT */
#endif
 
#ifdef __NIOS2__
# ifdef __nios2_big_endian__
# define __IEEE_BIG_ENDIAN
# else
# define __IEEE_LITTLE_ENDIAN
# endif
#endif
 
#ifndef __IEEE_BIG_ENDIAN
#ifndef __IEEE_LITTLE_ENDIAN
#error Endianess not declared!!
/contrib/sdk/sources/newlib/libc/include/machine/setjmp-dj.h
2,7 → 2,7
* Copyright (C) 1991 DJ Delorie
* All rights reserved.
*
* Redistribution and use in source and binary forms is permitted
* Redistribution, modification, and use in source and binary forms is permitted
* provided that the above copyright notice and following paragraph are
* duplicated in all such forms.
*
/contrib/sdk/sources/newlib/libc/include/machine/setjmp.h
1,8 → 1,414
 
_BEGIN_STD_C
 
#if defined(__arm__) || defined(__thumb__)
/*
* All callee preserved registers:
* v1 - v7, fp, ip, sp, lr, f4, f5, f6, f7
*/
#define _JBLEN 23
#endif
 
#if defined(__aarch64__)
#define _JBLEN 22
#define _JBTYPE long long
#endif
 
#if defined(__AVR__)
#define _JBLEN 24
#endif
 
#ifdef __sparc__
/*
* onsstack,sigmask,sp,pc,npc,psr,g1,o0,wbcnt (sigcontext).
* All else recovered by under/over(flow) handling.
*/
#define _JBLEN 13
#endif
 
#ifdef __BFIN__
#define _JBLEN 40
#endif
 
#ifdef __epiphany__
/* All callee preserved registers: r4-r10,fp, sp, lr,r15, r32-r39 */
#define _JBTYPE long long
#define _JBLEN 10
#endif
 
/* necv70 was 9 as well. */
 
#if defined(__m68k__) || defined(__mc68000__)
/*
* onsstack,sigmask,sp,pc,psl,d2-d7,a2-a6,
* fp2-fp7 for 68881.
* All else recovered by under/over(flow) handling.
*/
#define _JBLEN 34
#endif
 
#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
/*
* D, X, Y are not saved.
* Only take into account the pseudo soft registers (max 32).
*/
#define _JBLEN 32
#endif
 
#ifdef __nds32__
/* Only 17 words are currently needed.
Preserve one word slot if we need to expand.
Check newlib/libc/machine/nds32/setjmp.S for more information. */
#define _JBLEN 18
#endif
 
#if defined(__Z8001__) || defined(__Z8002__)
/* 16 regs + pc */
#define _JBLEN 20
#endif
 
#ifdef _AM29K
/*
* onsstack,sigmask,sp,pc,npc,psr,g1,o0,wbcnt (sigcontext).
* All else recovered by under/over(flow) handling.
*/
#define _JBLEN 9
#endif
 
#ifdef __i386__
# if defined(__CYGWIN__) && !defined (_JBLEN)
# define _JBLEN (13 * 4)
# elif defined(__unix__) || defined(__rtems__)
# define _JBLEN 9
# else
#include "setjmp-dj.h"
# endif
#endif
 
#ifdef __x86_64__
# ifdef __CYGWIN__
# define _JBTYPE long
# define _JBLEN 32
# else
# define _JBTYPE long long
# define _JBLEN 8
# endif
#endif
 
#ifdef __i960__
#define _JBLEN 35
#endif
 
#ifdef __M32R__
/* Only 8 words are currently needed. 10 gives us some slop if we need
to expand. */
#define _JBLEN 10
#endif
 
#ifdef __mips__
# if defined(__mips64) || (__mips_fpr == 64)
# define _JBTYPE long long
# endif
# ifdef __mips_soft_float
# define _JBLEN 11
# else
# define _JBLEN 23
# endif
#endif
 
#ifdef __m88000__
#define _JBLEN 21
#endif
 
#ifdef __H8300__
#define _JBLEN 5
#define _JBTYPE int
#endif
 
#ifdef __H8300H__
/* same as H8/300 but registers are twice as big */
#define _JBLEN 5
#define _JBTYPE long
#endif
 
#if defined (__H8300S__) || defined (__H8300SX__)
/* same as H8/300 but registers are twice as big */
#define _JBLEN 5
#define _JBTYPE long
#endif
 
#ifdef __H8500__
#define _JBLEN 4
#endif
 
#ifdef __sh__
#if __SH5__
#define _JBLEN 50
#define _JBTYPE long long
#else
#define _JBLEN 20
#endif /* __SH5__ */
#endif
 
#ifdef __v800
#define _JBLEN 28
#endif
 
#ifdef __PPC__
#ifdef __ALTIVEC__
#define _JBLEN 64
#else
#define _JBLEN 32
#endif
#define _JBTYPE double
#endif
 
#ifdef __MICROBLAZE__
#define _JBLEN 20
#define _JBTYPE unsigned int
#endif
 
#ifdef __hppa__
/* %r30, %r2-%r18, %r27, pad, %fr12-%fr15.
Note space exists for the FP registers, but they are not
saved. */
#define _JBLEN 28
#endif
 
#if defined(__mn10300__) || defined(__mn10200__)
#ifdef __AM33_2__
#define _JBLEN 26
#else
/* A guess */
#define _JBLEN 10
#endif
#endif
 
#ifdef __v850
/* I think our setjmp is saving 15 regs at the moment. Gives us one word
slop if we need to expand. */
#define _JBLEN 16
#endif
 
#if defined(_C4x)
#define _JBLEN 10
#endif
#if defined(_C3x)
#define _JBLEN 9
#endif
 
#ifdef __TMS320C6X__
#define _JBLEN 13
#endif
 
#ifdef __TIC80__
#define _JBLEN 13
#endif
 
#ifdef __D10V__
#define _JBLEN 8
#endif
 
#ifdef __D30V__
#define _JBLEN ((64 /* GPR */ + (2*2) /* ACs */ + 18 /* CRs */) / 2)
#define _JBTYPE double
#endif
 
#ifdef __frv__
#define _JBLEN (68/2) /* room for 68 32-bit regs */
#define _JBTYPE double
#endif
 
#ifdef __moxie__
#define _JBLEN 16
#endif
 
#ifdef __CRX__
#define _JBLEN 9
#endif
 
#if (defined(__CR16__) || defined(__CR16C__) ||defined(__CR16CP__))
/* r6, r7, r8, r9, r10, r11, r12 (r12L, r12H),
* r13 (r13L, r13H), ra(raL, raH), sp(spL, spH) */
#define _JBLEN 14
#define _JBTYPE unsigned short
#endif
 
#ifdef __fr30__
#define _JBLEN 10
#endif
 
#ifdef __iq2000__
#define _JBLEN 32
#endif
 
#ifdef __mcore__
#define _JBLEN 16
#endif
 
#ifdef __MMIX__
/* Using a layout compatible with GCC's built-in. */
#define _JBLEN 5
#define _JBTYPE unsigned long
#endif
 
#ifdef __mt__
#define _JBLEN 16
#endif
 
#ifdef __SPU__
#define _JBLEN 50
#define _JBTYPE __vector signed int
#endif
 
#ifdef __xstormy16__
/* 4 GPRs plus SP plus PC. */
#define _JBLEN 8
#endif
 
#ifdef __mep__
/* 16 GPRs, pc, hi, lo */
#define _JBLEN 19
#endif
 
#ifdef __CRIS__
#define _JBLEN 18
#endif
 
#ifdef __lm32__
#define _JBLEN 19
#endif
 
#ifdef __m32c__
#if defined(__r8c_cpu__) || defined(__m16c_cpu__)
#define _JBLEN (22/2)
#else
#define _JBLEN (34/2)
#endif
#define _JBTYPE unsigned short
#endif /* __m32c__ */
 
#ifdef __MSP430__
#define _JBLEN 9
 
#ifdef __MSP430X_LARGE__
#define _JBTYPE unsigned long
#else
#define _JBTYPE unsigned short
#endif
#endif
 
#ifdef __RL78__
/* Three banks of registers, SP, CS, ES, PC */
#define _JBLEN (8*3+8)
#define _JBTYPE unsigned char
#endif
 
/*
* There are two versions of setjmp()/longjmp():
* 1) Compiler (gcc) built-in versions.
* 2) Function-call versions.
*
* The built-in versions are used most of the time. When used, gcc replaces
* calls to setjmp()/longjmp() with inline assembly code. The built-in
* versions save/restore a variable number of registers.
 
* _JBLEN is set to 40 to be ultra-safe with the built-in versions.
* It only needs to be 12 for the function-call versions
* but this data structure is used by both versions.
*/
#ifdef __NIOS2__
#define _JBLEN 40
#define _JBTYPE unsigned long
#endif
 
#ifdef __RX__
#define _JBLEN 0x44
#endif
 
#ifdef _JBLEN
#ifdef _JBTYPE
typedef _JBTYPE jmp_buf[_JBLEN];
#else
typedef int jmp_buf[_JBLEN];
#endif
#endif
 
_END_STD_C
 
#if defined(__CYGWIN__) || defined(__rtems__)
#include <signal.h>
 
#ifdef __cplusplus
extern "C" {
#endif
 
/* POSIX sigsetjmp/siglongjmp macros */
#ifdef _JBTYPE
typedef _JBTYPE sigjmp_buf[_JBLEN+1+((sizeof (_JBTYPE) + sizeof (sigset_t) - 1)
/sizeof (_JBTYPE))];
#else
typedef int sigjmp_buf[_JBLEN+1+(sizeof (sigset_t)/sizeof (int))];
#endif
 
#define _SAVEMASK _JBLEN
#define _SIGMASK (_JBLEN+1)
 
#ifdef __CYGWIN__
# define _CYGWIN_WORKING_SIGSETJMP
#endif
 
#ifdef _POSIX_THREADS
#define __SIGMASK_FUNC pthread_sigmask
#else
#define __SIGMASK_FUNC sigprocmask
#endif
 
#if defined(__GNUC__)
 
#define sigsetjmp(env, savemask) \
__extension__ \
({ \
sigjmp_buf *_sjbuf = &(env); \
((*_sjbuf)[_SAVEMASK] = savemask,\
__SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + _SIGMASK)),\
setjmp (*_sjbuf)); \
})
 
#define siglongjmp(env, val) \
__extension__ \
({ \
sigjmp_buf *_sjbuf = &(env); \
((((*_sjbuf)[_SAVEMASK]) ? \
__SIGMASK_FUNC (SIG_SETMASK, (sigset_t *)((*_sjbuf) + _SIGMASK), 0)\
: 0), \
longjmp (*_sjbuf, val)); \
})
 
#else /* !__GNUC__ */
 
#define sigsetjmp(env, savemask) ((env)[_SAVEMASK] = savemask,\
__SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *) ((env) + _SIGMASK)),\
setjmp (env))
 
#define siglongjmp(env, val) ((((env)[_SAVEMASK])?\
__SIGMASK_FUNC (SIG_SETMASK, (sigset_t *) ((env) + _SIGMASK), 0):0),\
longjmp (env, val))
 
#endif
 
/* POSIX _setjmp/_longjmp, maintained for XSI compatibility. These
are equivalent to sigsetjmp/siglongjmp when not saving the signal mask.
New applications should use sigsetjmp/siglongjmp instead. */
#ifdef __CYGWIN__
extern void _longjmp(jmp_buf, int);
extern int _setjmp(jmp_buf);
#else
#define _setjmp(env) sigsetjmp ((env), 0)
#define _longjmp(env, val) siglongjmp ((env), (val))
#endif
 
#ifdef __cplusplus
}
#endif
#endif /* __CYGWIN__ or __rtems__ */
/contrib/sdk/sources/newlib/libc/include/machine/time.h
4,7 → 4,7
#if defined(__rtems__)
#define _CLOCKS_PER_SEC_ sysconf(_SC_CLK_TCK)
#else /* !__rtems__ */
#if defined(__arm__) || defined(__thumb__)
#if defined(__aarch64__) || defined(__arm__) || defined(__thumb__)
#define _CLOCKS_PER_SEC_ 100
#endif
#endif /* !__rtems__ */
/contrib/sdk/sources/newlib/libc/include/malloc.h
20,16 → 20,16
libc/stdlib/mallocr.c. */
 
struct mallinfo {
int arena; /* total space allocated from system */
int ordblks; /* number of non-inuse chunks */
int smblks; /* unused -- always zero */
int hblks; /* number of mmapped regions */
int hblkhd; /* total space in mmapped regions */
int usmblks; /* unused -- always zero */
int fsmblks; /* unused -- always zero */
int uordblks; /* total allocated space */
int fordblks; /* total non-inuse space */
int keepcost; /* top-most, releasable (via malloc_trim) space */
size_t arena; /* total space allocated from system */
size_t ordblks; /* number of non-inuse chunks */
size_t smblks; /* unused -- always zero */
size_t hblks; /* number of mmapped regions */
size_t hblkhd; /* total space in mmapped regions */
size_t usmblks; /* unused -- always zero */
size_t fsmblks; /* unused -- always zero */
size_t uordblks; /* total allocated space */
size_t fordblks; /* total non-inuse space */
size_t keepcost; /* top-most, releasable (via malloc_trim) space */
};
 
/* The routines. */
/contrib/sdk/sources/newlib/libc/include/math.h
34,10 → 34,7
/* Natural log of 2 */
#define _M_LN2 0.693147180559945309417
 
#if defined(__GNUC__) && \
( (__GNUC__ >= 4) || \
( (__GNUC__ >= 3) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 3) ) )
 
#if __GNUC_PREREQ (3, 3)
/* gcc >= 3.3 implicitly defines builtins for HUGE_VALx values. */
 
# ifndef HUGE_VAL
143,11 → 140,37
 
/* ISO C99 types and macros. */
 
#ifndef FLT_EVAL_METHOD
#define FLT_EVAL_METHOD 0
/* FIXME: FLT_EVAL_METHOD should somehow be gotten from float.h (which is hard,
* considering that the standard says the includes it defines should not
* include other includes that it defines) and that value used. (This can be
* solved, but autoconf has a bug which makes the solution more difficult, so
* it has been skipped for now.) */
#if !defined(FLT_EVAL_METHOD) && defined(__FLT_EVAL_METHOD__)
#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
#define __TMP_FLT_EVAL_METHOD
#endif /* FLT_EVAL_METHOD */
#if defined FLT_EVAL_METHOD
#if FLT_EVAL_METHOD == 0
typedef float float_t;
typedef double double_t;
#endif /* FLT_EVAL_METHOD */
#elif FLT_EVAL_METHOD == 1
typedef double float_t;
typedef double double_t;
#elif FLT_EVAL_METHOD == 2
typedef long double float_t;
typedef long double double_t;
#else
/* Implementation-defined. Assume float_t and double_t have been
* defined previously for this configuration (e.g. config.h). */
#endif
#else
/* Assume basic definitions. */
typedef float float_t;
typedef double double_t;
#endif
#if defined(__TMP_FLT_EVAL_METHOD)
#undef FLT_EVAL_METHOD
#endif
 
#define FP_NAN 0
#define FP_INFINITE 1
355,9 → 378,6
extern float erff _PARAMS((float));
extern float erfcf _PARAMS((float));
extern float log2f _PARAMS((float));
#if !defined(__cplusplus)
#define log2f(x) (logf (x) / (float_t) _M_LN2)
#endif
extern float hypotf _PARAMS((float, float));
#endif /* ! defined (_REENT_ONLY) */
 
/contrib/sdk/sources/newlib/libc/include/newlib.h
11,7 → 11,7
/* #undef _ELIX_LEVEL */
 
/* Newlib version */
#define _NEWLIB_VERSION "1.19.0"
#define _NEWLIB_VERSION "2.1.0"
 
/* C99 formats support (such as %a, %zu, ...) in IO functions like
* printf/scanf enabled */
/contrib/sdk/sources/newlib/libc/include/paths.h
2,6 → 2,8
#define _PATHS_H_
 
#define _PATH_DEV "/dev/"
#define _PATH_DEVNULL "/dev/null"
#define _PATH_DEVZERO "/dev/zero"
#define _PATH_BSHELL "/bin/sh"
 
#endif /* _PATHS_H_ */
/contrib/sdk/sources/newlib/libc/include/pthread.h
2,7 → 2,7
*
* Written by Joel Sherrill <joel@OARcorp.com>.
*
* COPYRIGHT (c) 1989-2010.
* COPYRIGHT (c) 1989-2013.
* On-Line Applications Research Corporation (OAR).
*
* Permission to use, copy, modify, and distribute this software for any
15,7 → 15,7
* OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
* SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
*
* $Id: pthread.h,v 1.9 2010/12/08 14:44:06 corinna Exp $
* $Id: pthread.h,v 1.12 2013/11/29 23:35:34 joel Exp $
*/
 
#ifndef __PTHREAD_h
32,7 → 32,15
#include <sys/types.h>
#include <time.h>
#include <sys/sched.h>
#include <sys/cdefs.h>
 
struct _pthread_cleanup_context {
void (*_routine)(void *);
void *_arg;
int _canceltype;
struct _pthread_cleanup_context *_previous;
};
 
/* Register Fork Handlers */
int _EXFUN(pthread_atfork,(void (*prepare)(void), void (*parent)(void),
void (*child)(void)));
104,7 → 112,7
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
*/
#define PTHREAD_COND_INITIALIZER ((pthread_mutex_t) 0xFFFFFFFF)
#define PTHREAD_COND_INITIALIZER ((pthread_cond_t) 0xFFFFFFFF)
/* Broadcasting and Signaling a Condition, P1003.1c/Draft 10, p. 101 */
206,6 → 214,29
int _EXFUN(pthread_attr_setguardsize,
(pthread_attr_t *__attr, size_t __guardsize));
 
/* POSIX thread APIs beyond the POSIX standard but provided
* in GNU/Linux. They may be provided by other OSes for
* compatibility.
*/
#if defined(__GNU_VISIBLE)
#if defined(__rtems__)
int _EXFUN(pthread_attr_setaffinity_np,
(pthread_attr_t *__attr, size_t __cpusetsize,
const cpu_set_t *__cpuset));
int _EXFUN(pthread_attr_getaffinity_np,
(const pthread_attr_t *__attr, size_t __cpusetsize,
cpu_set_t *__cpuset));
 
int _EXFUN(pthread_setaffinity_np,
(pthread_t __id, size_t __cpusetsize, const cpu_set_t *__cpuset));
int _EXFUN(pthread_getaffinity_np,
(const pthread_t __id, size_t __cpusetsize, cpu_set_t *__cpuset));
 
int _EXFUN(pthread_getattr_np,
(pthread_t __id, pthread_attr_t *__attr));
#endif /* defined(__rtems__) */
#endif /* defined(__GNU_VISIBLE) */
 
/* Thread Creation, P1003.1c/Draft 10, p. 144 */
 
int _EXFUN(pthread_create,
280,10 → 311,44
 
/* Establishing Cancellation Handlers, P1003.1c/Draft 10, p. 184 */
 
void _EXFUN(pthread_cleanup_push,
(void (*__routine)( void * ), void *__arg));
void _EXFUN(pthread_cleanup_pop, (int __execute));
void _EXFUN(_pthread_cleanup_push,
(struct _pthread_cleanup_context *_context,
void (*_routine)(void *), void *_arg));
 
void _EXFUN(_pthread_cleanup_pop,
(struct _pthread_cleanup_context *_context,
int _execute));
 
/* It is intentional to open and close the scope in two different macros */
#define pthread_cleanup_push(_routine, _arg) \
do { \
struct _pthread_cleanup_context _pthread_clup_ctx; \
_pthread_cleanup_push(&_pthread_clup_ctx, (_routine), (_arg))
 
#define pthread_cleanup_pop(_execute) \
_pthread_cleanup_pop(&_pthread_clup_ctx, (_execute)); \
} while (0)
 
#if defined(_GNU_SOURCE)
void _EXFUN(_pthread_cleanup_push_defer,
(struct _pthread_cleanup_context *_context,
void (*_routine)(void *), void *_arg));
 
void _EXFUN(_pthread_cleanup_pop_restore,
(struct _pthread_cleanup_context *_context,
int _execute));
 
/* It is intentional to open and close the scope in two different macros */
#define pthread_cleanup_push_defer_np(_routine, _arg) \
do { \
struct _pthread_cleanup_context _pthread_clup_ctx; \
_pthread_cleanup_push_defer(&_pthread_clup_ctx, (_routine), (_arg))
 
#define pthread_cleanup_pop_restore_np(_execute) \
_pthread_cleanup_pop_restore(&_pthread_clup_ctx, (_execute)); \
} while (0)
#endif /* defined(_GNU_SOURCE) */
 
#if defined(_POSIX_THREAD_CPUTIME)
/* Accessing a Thread CPU-time Clock, P1003.4b/D8, p. 58 */
328,6 → 393,13
 
#if defined(_POSIX_READER_WRITER_LOCKS)
 
/* This is used to statically initialize a pthread_rwlock_t. Example:
pthread_mutex_t mutex = PTHREAD_RWLOCK_INITIALIZER;
*/
 
#define PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t) 0xFFFFFFFF)
 
int _EXFUN(pthread_rwlockattr_init, (pthread_rwlockattr_t *__attr));
int _EXFUN(pthread_rwlockattr_destroy, (pthread_rwlockattr_t *__attr));
int _EXFUN(pthread_rwlockattr_getpshared,
/contrib/sdk/sources/newlib/libc/include/reent.h
104,14 → 104,6
struct timeval;
struct timezone;
 
typedef struct
{
char *name;
unsigned int offset;
int (*write)(const char*, const void *, size_t, size_t, size_t*);
}__file_handle;
 
 
#if defined(REENTRANT_SYSCALLS_PROVIDED) && defined(MISSING_SYSCALL_NAMES)
 
#define _close_r(__reent, __fd) close(__fd)
179,10 → 171,10
 
#ifdef __LARGE64_FILES
 
#if defined(__CYGWIN__) && defined(_COMPILING_NEWLIB)
#define stat64 __stat64
 
#if defined(__CYGWIN__)
#define stat64 stat
#endif
 
struct stat64;
 
extern _off64_t _lseek64_r _PARAMS ((struct _reent *, int, _off64_t, int));
189,10 → 181,16
extern int _fstat64_r _PARAMS ((struct _reent *, int, struct stat64 *));
extern int _open64_r _PARAMS ((struct _reent *, const char *, int, int));
extern int _stat64_r _PARAMS ((struct _reent *, const char *, struct stat64 *));
 
/* Don't pollute namespace if not building newlib. */
#if defined (__CYGWIN__) && !defined (_COMPILING_NEWLIB)
#undef stat64
#endif
 
#endif
 
#endif
 
#ifdef __cplusplus
}
#endif
/contrib/sdk/sources/newlib/libc/include/regex.h
93,9 → 93,10
#define REG_BACKR 02000 /* force use of backref code */
 
__BEGIN_DECLS
int regcomp(regex_t *, const char *, int);
size_t regerror(int, const regex_t *, char *, size_t);
int regexec(const regex_t *, const char *, size_t, regmatch_t [], int);
int regcomp(regex_t *__restrict, const char *__restrict, int);
size_t regerror(int, const regex_t *__restrict, char *__restrict, size_t);
int regexec(const regex_t *__restrict, const char *__restrict,
size_t, regmatch_t [__restrict], int);
void regfree(regex_t *);
__END_DECLS
 
/contrib/sdk/sources/newlib/libc/include/rpc/types.h
41,6 → 41,9
#include <stdint.h>
#include <sys/types.h>
 
#define __need_NULL
#include <stddef.h>
 
#ifdef __cplusplus
extern "C" {
#endif
59,9 → 62,6
typedef u_int32_t rpcport_t;
typedef int32_t rpc_inline_t;
 
#ifndef NULL
# define NULL 0
#endif
#define __dontcare__ -1
 
#ifndef FALSE
/contrib/sdk/sources/newlib/libc/include/search.h
42,6 → 42,11
size_t htablesize;
};
 
#ifndef __compar_fn_t_defined
#define __compar_fn_t_defined
typedef int (*__compar_fn_t) (const void *, const void *);
#endif
 
__BEGIN_DECLS
int hcreate(size_t);
void hdestroy(void);
49,10 → 54,10
int hcreate_r(size_t, struct hsearch_data *);
void hdestroy_r(struct hsearch_data *);
int hsearch_r(ENTRY, ACTION, ENTRY **, struct hsearch_data *);
void *tdelete(const void *, void **, int (*)(const void *, const void *));
void *tdelete(const void *__restrict, void **__restrict, __compar_fn_t);
void tdestroy (void *, void (*)(void *));
void *tfind(const void *, void **, int (*)(const void *, const void *));
void *tsearch(const void *, void **, int (*)(const void *, const void *));
void *tfind(const void *, void **, __compar_fn_t);
void *tsearch(const void *, void **, __compar_fn_t);
void twalk(const void *, void (*)(const void *, VISIT, int));
__END_DECLS
 
/contrib/sdk/sources/newlib/libc/include/spawn.h
0,0 → 1,119
/*-
* Copyright (c) 2008 Ed Schouten <ed@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
#ifndef _SPAWN_H_
#define _SPAWN_H_
 
#include <_ansi.h>
#include <sys/cdefs.h>
#include <sys/types.h>
#include <sys/_types.h>
#define __need_sigset_t
#include <signal.h>
 
struct sched_param;
 
typedef struct __posix_spawnattr *posix_spawnattr_t;
typedef struct __posix_spawn_file_actions *posix_spawn_file_actions_t;
 
#define POSIX_SPAWN_RESETIDS 0x01
#define POSIX_SPAWN_SETPGROUP 0x02
#define POSIX_SPAWN_SETSCHEDPARAM 0x04
#define POSIX_SPAWN_SETSCHEDULER 0x08
#define POSIX_SPAWN_SETSIGDEF 0x10
#define POSIX_SPAWN_SETSIGMASK 0x20
 
_BEGIN_STD_C
/*
* Spawn routines
*
* XXX both arrays should be __restrict, but this does not work when GCC
* is invoked with -std=c99.
*/
int _EXFUN(posix_spawn, (pid_t * __restrict, const char * __restrict,
const posix_spawn_file_actions_t *, const posix_spawnattr_t * __restrict,
char * const [], char * const [])
);
int _EXFUN(posix_spawnp, (pid_t * __restrict, const char * __restrict,
const posix_spawn_file_actions_t *, const posix_spawnattr_t * __restrict,
char * const [], char * const [])
);
 
/*
* File descriptor actions
*/
int _EXFUN(posix_spawn_file_actions_init, (posix_spawn_file_actions_t *));
int _EXFUN(posix_spawn_file_actions_destroy, (posix_spawn_file_actions_t *));
 
int _EXFUN(posix_spawn_file_actions_addopen,
(posix_spawn_file_actions_t * __restrict, int, const char * __restrict, int, mode_t)
);
int _EXFUN(posix_spawn_file_actions_adddup2,
(posix_spawn_file_actions_t *, int, int)
);
int _EXFUN(posix_spawn_file_actions_addclose,
(posix_spawn_file_actions_t *, int)
);
 
/*
* Spawn attributes
*/
int _EXFUN(posix_spawnattr_init, (posix_spawnattr_t *));
int _EXFUN(posix_spawnattr_destroy, (posix_spawnattr_t *));
 
int _EXFUN(posix_spawnattr_getflags,
(const posix_spawnattr_t * __restrict, short * __restrict)
);
int _EXFUN(posix_spawnattr_getpgroup,
(const posix_spawnattr_t * __restrict, pid_t * __restrict));
int _EXFUN(posix_spawnattr_getschedparam,
(const posix_spawnattr_t * __restrict, struct sched_param * __restrict)
);
int _EXFUN(posix_spawnattr_getschedpolicy,
(const posix_spawnattr_t * __restrict, int * __restrict)
);
int _EXFUN(posix_spawnattr_getsigdefault,
(const posix_spawnattr_t * __restrict, sigset_t * __restrict)
);
int _EXFUN(posix_spawnattr_getsigmask,
(const posix_spawnattr_t * __restrict, sigset_t * __restrict)
);
 
int _EXFUN(posix_spawnattr_setflags, (posix_spawnattr_t *, short));
int _EXFUN(posix_spawnattr_setpgroup, (posix_spawnattr_t *, pid_t));
int _EXFUN(posix_spawnattr_setschedparam,
(posix_spawnattr_t * __restrict, const struct sched_param * __restrict)
);
int _EXFUN(posix_spawnattr_setschedpolicy, (posix_spawnattr_t *, int));
int _EXFUN(posix_spawnattr_setsigdefault,
(posix_spawnattr_t * __restrict, const sigset_t * __restrict)
);
int _EXFUN(posix_spawnattr_setsigmask,
(posix_spawnattr_t * __restrict, const sigset_t * __restrict)
);
_END_STD_C
 
#endif /* !_SPAWN_H_ */
/contrib/sdk/sources/newlib/libc/include/stdatomic.h
0,0 → 1,413
/*-
* Copyright (c) 2011 Ed Schouten <ed@FreeBSD.org>
* David Chisnall <theraven@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
 
#ifndef _STDATOMIC_H_
#define _STDATOMIC_H_
 
#include <sys/cdefs.h>
#include <sys/_types.h>
 
#if __has_extension(c_atomic) || __has_extension(cxx_atomic)
#define __CLANG_ATOMICS
#elif __GNUC_PREREQ__(4, 7)
#define __GNUC_ATOMICS
#elif defined(__GNUC__)
#define __SYNC_ATOMICS
#else
#error "stdatomic.h does not support your compiler"
#endif
 
/*
* 7.17.1 Atomic lock-free macros.
*/
 
#ifdef __GCC_ATOMIC_BOOL_LOCK_FREE
#define ATOMIC_BOOL_LOCK_FREE __GCC_ATOMIC_BOOL_LOCK_FREE
#endif
#ifdef __GCC_ATOMIC_CHAR_LOCK_FREE
#define ATOMIC_CHAR_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE
#endif
#ifdef __GCC_ATOMIC_CHAR16_T_LOCK_FREE
#define ATOMIC_CHAR16_T_LOCK_FREE __GCC_ATOMIC_CHAR16_T_LOCK_FREE
#endif
#ifdef __GCC_ATOMIC_CHAR32_T_LOCK_FREE
#define ATOMIC_CHAR32_T_LOCK_FREE __GCC_ATOMIC_CHAR32_T_LOCK_FREE
#endif
#ifdef __GCC_ATOMIC_WCHAR_T_LOCK_FREE
#define ATOMIC_WCHAR_T_LOCK_FREE __GCC_ATOMIC_WCHAR_T_LOCK_FREE
#endif
#ifdef __GCC_ATOMIC_SHORT_LOCK_FREE
#define ATOMIC_SHORT_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE
#endif
#ifdef __GCC_ATOMIC_INT_LOCK_FREE
#define ATOMIC_INT_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE
#endif
#ifdef __GCC_ATOMIC_LONG_LOCK_FREE
#define ATOMIC_LONG_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE
#endif
#ifdef __GCC_ATOMIC_LLONG_LOCK_FREE
#define ATOMIC_LLONG_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE
#endif
#ifdef __GCC_ATOMIC_POINTER_LOCK_FREE
#define ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE
#endif
 
/*
* 7.17.2 Initialization.
*/
 
#if defined(__CLANG_ATOMICS)
#define ATOMIC_VAR_INIT(value) (value)
#define atomic_init(obj, value) __c11_atomic_init(obj, value)
#else
#define ATOMIC_VAR_INIT(value) { .__val = (value) }
#define atomic_init(obj, value) ((void)((obj)->__val = (value)))
#endif
 
/*
* Clang and recent GCC both provide predefined macros for the memory
* orderings. If we are using a compiler that doesn't define them, use the
* clang values - these will be ignored in the fallback path.
*/
 
#ifndef __ATOMIC_RELAXED
#define __ATOMIC_RELAXED 0
#endif
#ifndef __ATOMIC_CONSUME
#define __ATOMIC_CONSUME 1
#endif
#ifndef __ATOMIC_ACQUIRE
#define __ATOMIC_ACQUIRE 2
#endif
#ifndef __ATOMIC_RELEASE
#define __ATOMIC_RELEASE 3
#endif
#ifndef __ATOMIC_ACQ_REL
#define __ATOMIC_ACQ_REL 4
#endif
#ifndef __ATOMIC_SEQ_CST
#define __ATOMIC_SEQ_CST 5
#endif
 
/*
* 7.17.3 Order and consistency.
*
* The memory_order_* constants that denote the barrier behaviour of the
* atomic operations.
*/
 
typedef enum {
memory_order_relaxed = __ATOMIC_RELAXED,
memory_order_consume = __ATOMIC_CONSUME,
memory_order_acquire = __ATOMIC_ACQUIRE,
memory_order_release = __ATOMIC_RELEASE,
memory_order_acq_rel = __ATOMIC_ACQ_REL,
memory_order_seq_cst = __ATOMIC_SEQ_CST
} memory_order;
 
/*
* 7.17.4 Fences.
*/
 
static __inline void
atomic_thread_fence(memory_order __order __unused)
{
 
#ifdef __CLANG_ATOMICS
__c11_atomic_thread_fence(__order);
#elif defined(__GNUC_ATOMICS)
__atomic_thread_fence(__order);
#else
__sync_synchronize();
#endif
}
 
static __inline void
atomic_signal_fence(memory_order __order __unused)
{
 
#ifdef __CLANG_ATOMICS
__c11_atomic_signal_fence(__order);
#elif defined(__GNUC_ATOMICS)
__atomic_signal_fence(__order);
#else
__asm volatile ("" ::: "memory");
#endif
}
 
/*
* 7.17.5 Lock-free property.
*/
 
#if defined(_KERNEL)
/* Atomics in kernelspace are always lock-free. */
#define atomic_is_lock_free(obj) \
((void)(obj), (_Bool)1)
#elif defined(__CLANG_ATOMICS)
#define atomic_is_lock_free(obj) \
__atomic_is_lock_free(sizeof(*(obj)), obj)
#elif defined(__GNUC_ATOMICS)
#define atomic_is_lock_free(obj) \
__atomic_is_lock_free(sizeof((obj)->__val), &(obj)->__val)
#else
#define atomic_is_lock_free(obj) \
((void)(obj), sizeof((obj)->__val) <= sizeof(void *))
#endif
 
/*
* 7.17.6 Atomic integer types.
*/
 
typedef _Atomic(_Bool) atomic_bool;
typedef _Atomic(char) atomic_char;
typedef _Atomic(signed char) atomic_schar;
typedef _Atomic(unsigned char) atomic_uchar;
typedef _Atomic(short) atomic_short;
typedef _Atomic(unsigned short) atomic_ushort;
typedef _Atomic(int) atomic_int;
typedef _Atomic(unsigned int) atomic_uint;
typedef _Atomic(long) atomic_long;
typedef _Atomic(unsigned long) atomic_ulong;
typedef _Atomic(long long) atomic_llong;
typedef _Atomic(unsigned long long) atomic_ullong;
#if 0
typedef _Atomic(__char16_t) atomic_char16_t;
typedef _Atomic(__char32_t) atomic_char32_t;
#endif
typedef _Atomic(wchar_t) atomic_wchar_t;
typedef _Atomic(int_least8_t) atomic_int_least8_t;
typedef _Atomic(uint_least8_t) atomic_uint_least8_t;
typedef _Atomic(int_least16_t) atomic_int_least16_t;
typedef _Atomic(uint_least16_t) atomic_uint_least16_t;
typedef _Atomic(int_least32_t) atomic_int_least32_t;
typedef _Atomic(uint_least32_t) atomic_uint_least32_t;
typedef _Atomic(int_least64_t) atomic_int_least64_t;
typedef _Atomic(uint_least64_t) atomic_uint_least64_t;
typedef _Atomic(int_fast8_t) atomic_int_fast8_t;
typedef _Atomic(uint_fast8_t) atomic_uint_fast8_t;
typedef _Atomic(int_fast16_t) atomic_int_fast16_t;
typedef _Atomic(uint_fast16_t) atomic_uint_fast16_t;
typedef _Atomic(int_fast32_t) atomic_int_fast32_t;
typedef _Atomic(uint_fast32_t) atomic_uint_fast32_t;
typedef _Atomic(int_fast64_t) atomic_int_fast64_t;
typedef _Atomic(uint_fast64_t) atomic_uint_fast64_t;
typedef _Atomic(intptr_t) atomic_intptr_t;
typedef _Atomic(uintptr_t) atomic_uintptr_t;
typedef _Atomic(size_t) atomic_size_t;
typedef _Atomic(ptrdiff_t) atomic_ptrdiff_t;
typedef _Atomic(intmax_t) atomic_intmax_t;
typedef _Atomic(uintmax_t) atomic_uintmax_t;
 
/*
* 7.17.7 Operations on atomic types.
*/
 
/*
* Compiler-specific operations.
*/
 
#if defined(__CLANG_ATOMICS)
#define atomic_compare_exchange_strong_explicit(object, expected, \
desired, success, failure) \
__c11_atomic_compare_exchange_strong(object, expected, desired, \
success, failure)
#define atomic_compare_exchange_weak_explicit(object, expected, \
desired, success, failure) \
__c11_atomic_compare_exchange_weak(object, expected, desired, \
success, failure)
#define atomic_exchange_explicit(object, desired, order) \
__c11_atomic_exchange(object, desired, order)
#define atomic_fetch_add_explicit(object, operand, order) \
__c11_atomic_fetch_add(object, operand, order)
#define atomic_fetch_and_explicit(object, operand, order) \
__c11_atomic_fetch_and(object, operand, order)
#define atomic_fetch_or_explicit(object, operand, order) \
__c11_atomic_fetch_or(object, operand, order)
#define atomic_fetch_sub_explicit(object, operand, order) \
__c11_atomic_fetch_sub(object, operand, order)
#define atomic_fetch_xor_explicit(object, operand, order) \
__c11_atomic_fetch_xor(object, operand, order)
#define atomic_load_explicit(object, order) \
__c11_atomic_load(object, order)
#define atomic_store_explicit(object, desired, order) \
__c11_atomic_store(object, desired, order)
#elif defined(__GNUC_ATOMICS)
#define atomic_compare_exchange_strong_explicit(object, expected, \
desired, success, failure) \
__atomic_compare_exchange_n(&(object)->__val, expected, \
desired, 0, success, failure)
#define atomic_compare_exchange_weak_explicit(object, expected, \
desired, success, failure) \
__atomic_compare_exchange_n(&(object)->__val, expected, \
desired, 1, success, failure)
#define atomic_exchange_explicit(object, desired, order) \
__atomic_exchange_n(&(object)->__val, desired, order)
#define atomic_fetch_add_explicit(object, operand, order) \
__atomic_fetch_add(&(object)->__val, operand, order)
#define atomic_fetch_and_explicit(object, operand, order) \
__atomic_fetch_and(&(object)->__val, operand, order)
#define atomic_fetch_or_explicit(object, operand, order) \
__atomic_fetch_or(&(object)->__val, operand, order)
#define atomic_fetch_sub_explicit(object, operand, order) \
__atomic_fetch_sub(&(object)->__val, operand, order)
#define atomic_fetch_xor_explicit(object, operand, order) \
__atomic_fetch_xor(&(object)->__val, operand, order)
#define atomic_load_explicit(object, order) \
__atomic_load_n(&(object)->__val, order)
#define atomic_store_explicit(object, desired, order) \
__atomic_store_n(&(object)->__val, desired, order)
#else
#define __atomic_apply_stride(object, operand) \
(((__typeof__((object)->__val))0) + (operand))
#define atomic_compare_exchange_strong_explicit(object, expected, \
desired, success, failure) __extension__ ({ \
__typeof__(expected) __ep = (expected); \
__typeof__(*__ep) __e = *__ep; \
(void)(success); (void)(failure); \
(_Bool)((*__ep = __sync_val_compare_and_swap(&(object)->__val, \
__e, desired)) == __e); \
})
#define atomic_compare_exchange_weak_explicit(object, expected, \
desired, success, failure) \
atomic_compare_exchange_strong_explicit(object, expected, \
desired, success, failure)
#if __has_builtin(__sync_swap)
/* Clang provides a full-barrier atomic exchange - use it if available. */
#define atomic_exchange_explicit(object, desired, order) \
((void)(order), __sync_swap(&(object)->__val, desired))
#else
/*
* __sync_lock_test_and_set() is only an acquire barrier in theory (although in
* practice it is usually a full barrier) so we need an explicit barrier before
* it.
*/
#define atomic_exchange_explicit(object, desired, order) \
__extension__ ({ \
__typeof__(object) __o = (object); \
__typeof__(desired) __d = (desired); \
(void)(order); \
__sync_synchronize(); \
__sync_lock_test_and_set(&(__o)->__val, __d); \
})
#endif
#define atomic_fetch_add_explicit(object, operand, order) \
((void)(order), __sync_fetch_and_add(&(object)->__val, \
__atomic_apply_stride(object, operand)))
#define atomic_fetch_and_explicit(object, operand, order) \
((void)(order), __sync_fetch_and_and(&(object)->__val, operand))
#define atomic_fetch_or_explicit(object, operand, order) \
((void)(order), __sync_fetch_and_or(&(object)->__val, operand))
#define atomic_fetch_sub_explicit(object, operand, order) \
((void)(order), __sync_fetch_and_sub(&(object)->__val, \
__atomic_apply_stride(object, operand)))
#define atomic_fetch_xor_explicit(object, operand, order) \
((void)(order), __sync_fetch_and_xor(&(object)->__val, operand))
#define atomic_load_explicit(object, order) \
((void)(order), __sync_fetch_and_add(&(object)->__val, 0))
#define atomic_store_explicit(object, desired, order) \
((void)atomic_exchange_explicit(object, desired, order))
#endif
 
/*
* Convenience functions.
*
* Don't provide these in kernel space. In kernel space, we should be
* disciplined enough to always provide explicit barriers.
*/
 
#ifndef _KERNEL
#define atomic_compare_exchange_strong(object, expected, desired) \
atomic_compare_exchange_strong_explicit(object, expected, \
desired, memory_order_seq_cst, memory_order_seq_cst)
#define atomic_compare_exchange_weak(object, expected, desired) \
atomic_compare_exchange_weak_explicit(object, expected, \
desired, memory_order_seq_cst, memory_order_seq_cst)
#define atomic_exchange(object, desired) \
atomic_exchange_explicit(object, desired, memory_order_seq_cst)
#define atomic_fetch_add(object, operand) \
atomic_fetch_add_explicit(object, operand, memory_order_seq_cst)
#define atomic_fetch_and(object, operand) \
atomic_fetch_and_explicit(object, operand, memory_order_seq_cst)
#define atomic_fetch_or(object, operand) \
atomic_fetch_or_explicit(object, operand, memory_order_seq_cst)
#define atomic_fetch_sub(object, operand) \
atomic_fetch_sub_explicit(object, operand, memory_order_seq_cst)
#define atomic_fetch_xor(object, operand) \
atomic_fetch_xor_explicit(object, operand, memory_order_seq_cst)
#define atomic_load(object) \
atomic_load_explicit(object, memory_order_seq_cst)
#define atomic_store(object, desired) \
atomic_store_explicit(object, desired, memory_order_seq_cst)
#endif /* !_KERNEL */
 
/*
* 7.17.8 Atomic flag type and operations.
*
* XXX: Assume atomic_bool can be used as an atomic_flag. Is there some
* kind of compiler built-in type we could use?
*/
 
typedef struct {
atomic_bool __flag;
} atomic_flag;
 
#define ATOMIC_FLAG_INIT { ATOMIC_VAR_INIT(0) }
 
static __inline _Bool
atomic_flag_test_and_set_explicit(volatile atomic_flag *__object,
memory_order __order)
{
return (atomic_exchange_explicit(&__object->__flag, 1, __order));
}
 
static __inline void
atomic_flag_clear_explicit(volatile atomic_flag *__object, memory_order __order)
{
 
atomic_store_explicit(&__object->__flag, 0, __order);
}
 
#ifndef _KERNEL
static __inline _Bool
atomic_flag_test_and_set(volatile atomic_flag *__object)
{
 
return (atomic_flag_test_and_set_explicit(__object,
memory_order_seq_cst));
}
 
static __inline void
atomic_flag_clear(volatile atomic_flag *__object)
{
 
atomic_flag_clear_explicit(__object, memory_order_seq_cst);
}
#endif /* !_KERNEL */
 
#endif /* !_STDATOMIC_H_ */
/contrib/sdk/sources/newlib/libc/include/stdint.h
9,13 → 9,13
#ifndef _STDINT_H
#define _STDINT_H
 
#include <machine/_default_types.h>
 
#ifdef __cplusplus
extern "C" {
#endif
 
#if defined(__GNUC__) && \
( (__GNUC__ >= 4) || \
( (__GNUC__ >= 3) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ > 2) ) )
#if __GNUC_PREREQ (3, 2)
/* gcc > 3.2 implicitly defines the values we are interested */
#define __STDINT_EXP(x) __##x##__
#else
35,121 → 35,56
#define __have_long64 1
#elif __STDINT_EXP(LONG_MAX) == 0x7fffffff && !defined(__SPU__)
#define __have_long32 1
#define __have_long64 0
#endif
 
#if __STDINT_EXP(SCHAR_MAX) == 0x7f
typedef signed char int8_t ;
typedef unsigned char uint8_t ;
#ifdef ___int8_t_defined
typedef __int8_t int8_t ;
typedef __uint8_t uint8_t ;
#define __int8_t_defined 1
#endif
 
#if __int8_t_defined
typedef signed char int_least8_t;
typedef unsigned char uint_least8_t;
#ifdef ___int_least8_t_defined
typedef __int_least8_t int_least8_t;
typedef __uint_least8_t uint_least8_t;
#define __int_least8_t_defined 1
#endif
 
#if __STDINT_EXP(SHRT_MAX) == 0x7fff
typedef signed short int16_t;
typedef unsigned short uint16_t;
#ifdef ___int16_t_defined
typedef __int16_t int16_t ;
typedef __uint16_t uint16_t ;
#define __int16_t_defined 1
#elif __STDINT_EXP(INT_MAX) == 0x7fff
typedef signed int int16_t;
typedef unsigned int uint16_t;
#define __int16_t_defined 1
#elif __STDINT_EXP(SCHAR_MAX) == 0x7fff
typedef signed char int16_t;
typedef unsigned char uint16_t;
#define __int16_t_defined 1
#endif
 
#if __int16_t_defined
typedef int16_t int_least16_t;
typedef uint16_t uint_least16_t;
#ifdef ___int_least16_t_defined
typedef __int_least16_t int_least16_t;
typedef __uint_least16_t uint_least16_t;
#define __int_least16_t_defined 1
 
#if !__int_least8_t_defined
typedef int16_t int_least8_t;
typedef uint16_t uint_least8_t;
#define __int_least8_t_defined 1
#endif
#endif
 
//#if __have_long32
//typedef signed long int32_t;
//typedef unsigned long uint32_t;
//#define __int32_t_defined 1
//#elif __STDINT_EXP(INT_MAX) == 0x7fffffffL
typedef signed int int32_t;
typedef unsigned int uint32_t;
#ifdef ___int32_t_defined
typedef __int32_t int32_t ;
typedef __uint32_t uint32_t ;
#define __int32_t_defined 1
//#elif __STDINT_EXP(SHRT_MAX) == 0x7fffffffL
//typedef signed short int32_t;
//typedef unsigned short uint32_t;
//#define __int32_t_defined 1
//#elif __STDINT_EXP(SCHAR_MAX) == 0x7fffffffL
//typedef signed char int32_t;
//typedef unsigned char uint32_t;
//#define __int32_t_defined 1
//#endif
#endif
 
#if __int32_t_defined
typedef int32_t int_least32_t;
typedef uint32_t uint_least32_t;
#ifdef ___int_least32_t_defined
typedef __int_least32_t int_least32_t;
typedef __uint_least32_t uint_least32_t;
#define __int_least32_t_defined 1
 
#if !__int_least8_t_defined
typedef int32_t int_least8_t;
typedef uint32_t uint_least8_t;
#define __int_least8_t_defined 1
#endif
 
#if !__int_least16_t_defined
typedef int32_t int_least16_t;
typedef uint32_t uint_least16_t;
#define __int_least16_t_defined 1
#endif
#endif
 
#if __have_long64
typedef signed long int64_t;
typedef unsigned long uint64_t;
#ifdef ___int64_t_defined
typedef __int64_t int64_t ;
typedef __uint64_t uint64_t ;
#define __int64_t_defined 1
#elif __have_longlong64
typedef signed long long int64_t;
typedef unsigned long long uint64_t;
#define __int64_t_defined 1
#elif __STDINT_EXP(INT_MAX) > 0x7fffffff
typedef signed int int64_t;
typedef unsigned int uint64_t;
#define __int64_t_defined 1
#endif
 
#if __int64_t_defined
typedef int64_t int_least64_t;
typedef uint64_t uint_least64_t;
#ifdef ___int_least64_t_defined
typedef __int_least64_t int_least64_t;
typedef __uint_least64_t uint_least64_t;
#define __int_least64_t_defined 1
 
#if !__int_least8_t_defined
typedef int64_t int_least8_t;
typedef uint64_t uint_least8_t;
#define __int_least8_t_defined 1
#endif
 
#if !__int_least16_t_defined
typedef int64_t int_least16_t;
typedef uint64_t uint_least16_t;
#define __int_least16_t_defined 1
#endif
 
#if !__int_least32_t_defined
typedef int64_t int_least32_t;
typedef uint64_t uint_least32_t;
#define __int_least32_t_defined 1
#endif
#endif
 
/*
* Fastest minimum-width integer types
*
156,30 → 91,44
* Assume int to be the fastest type for all types with a width
* less than __INT_MAX__ rsp. INT_MAX
*/
#if __STDINT_EXP(INT_MAX) >= 0x7f
#ifdef __INT_FAST8_TYPE__
typedef __INT_FAST8_TYPE__ int_fast8_t;
typedef __UINT_FAST8_TYPE__ uint_fast8_t;
#define __int_fast8_t_defined 1
#elif __STDINT_EXP(INT_MAX) >= 0x7f
typedef signed int int_fast8_t;
typedef unsigned int uint_fast8_t;
#define __int_fast8_t_defined 1
#endif
 
#if __STDINT_EXP(INT_MAX) >= 0x7fff
#ifdef __INT_FAST16_TYPE__
typedef __INT_FAST16_TYPE__ int_fast16_t;
typedef __UINT_FAST16_TYPE__ uint_fast16_t;
#define __int_fast16_t_defined 1
#elif __STDINT_EXP(INT_MAX) >= 0x7fff
typedef signed int int_fast16_t;
typedef unsigned int uint_fast16_t;
#define __int_fast16_t_defined 1
#endif
 
#if __STDINT_EXP(INT_MAX) >= 0x7fffffff
#ifdef __INT_FAST32_TYPE__
typedef __INT_FAST32_TYPE__ int_fast32_t;
typedef __UINT_FAST32_TYPE__ uint_fast32_t;
#define __int_fast32_t_defined 1
#elif __STDINT_EXP(INT_MAX) >= 0x7fffffff
typedef signed int int_fast32_t;
typedef unsigned int uint_fast32_t;
#define __int_fast32_t_defined 1
#endif
 
#if __STDINT_EXP(INT_MAX) > 0x7fffffff
#ifdef __INT_FAST64_TYPE__
typedef __INT_FAST64_TYPE__ int_fast64_t;
typedef __UINT_FAST64_TYPE__ uint_fast64_t;
#define __int_fast64_t_defined 1
#elif __STDINT_EXP(INT_MAX) > 0x7fffffff
typedef signed int int_fast64_t;
typedef unsigned int uint_fast64_t;
#define __int_fast64_t_defined 1
#else
#define __int_fast64_t_defined 0
#endif
 
/*
215,7 → 164,6
#if __int_least64_t_defined
typedef int_least64_t int_fast64_t;
typedef uint_least64_t uint_fast64_t;
#undef __int_fast64_t_defined
#define __int_fast64_t_defined 1
#endif
#endif
239,13 → 187,14
typedef unsigned long uintmax_t;
#endif
 
/*
* GCC doesn't provide an appropriate macro for [u]intptr_t
* For now, use __PTRDIFF_TYPE__
*/
#if defined(__PTRDIFF_TYPE__)
typedef signed __PTRDIFF_TYPE__ intptr_t;
typedef unsigned __PTRDIFF_TYPE__ uintptr_t;
typedef __intptr_t intptr_t;
typedef __uintptr_t uintptr_t;
 
#ifdef __INTPTR_TYPE__
#define INTPTR_MIN (-__INTPTR_MAX__ - 1)
#define INTPTR_MAX __INTPTR_MAX__
#define UINTPTR_MAX __UINTPTR_MAX__
#elif defined(__PTRDIFF_TYPE__)
#define INTPTR_MAX PTRDIFF_MAX
#define INTPTR_MIN PTRDIFF_MIN
#ifdef __UINTPTR_MAX__
258,8 → 207,6
* Fallback to hardcoded values,
* should be valid on cpu's with 32bit int/32bit void*
*/
typedef signed long intptr_t;
typedef unsigned long uintptr_t;
#define INTPTR_MAX __STDINT_EXP(LONG_MAX)
#define INTPTR_MIN (-__STDINT_EXP(LONG_MAX) - 1)
#define UINTPTR_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1)
267,13 → 214,21
 
/* Limits of Specified-Width Integer Types */
 
#if __int8_t_defined
#ifdef __INT8_MAX__
#define INT8_MIN (-__INT8_MAX__ - 1)
#define INT8_MAX __INT8_MAX__
#define UINT8_MAX __UINT8_MAX__
#elif defined(__int8_t_defined)
#define INT8_MIN -128
#define INT8_MAX 127
#define UINT8_MAX 255
#endif
 
#if __int_least8_t_defined
#ifdef __INT_LEAST8_MAX__
#define INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1)
#define INT_LEAST8_MAX __INT_LEAST8_MAX__
#define UINT_LEAST8_MAX __UINT_LEAST8_MAX__
#elif defined(__int_least8_t_defined)
#define INT_LEAST8_MIN -128
#define INT_LEAST8_MAX 127
#define UINT_LEAST8_MAX 255
281,13 → 236,21
#error required type int_least8_t missing
#endif
 
#if __int16_t_defined
#ifdef __INT16_MAX__
#define INT16_MIN (-__INT16_MAX__ - 1)
#define INT16_MAX __INT16_MAX__
#define UINT16_MAX __UINT16_MAX__
#elif defined(__int16_t_defined)
#define INT16_MIN -32768
#define INT16_MAX 32767
#define UINT16_MAX 65535
#endif
 
#if __int_least16_t_defined
#ifdef __INT_LEAST16_MAX__
#define INT_LEAST16_MIN (-__INT_LEAST16_MAX__ - 1)
#define INT_LEAST16_MAX __INT_LEAST16_MAX__
#define UINT_LEAST16_MAX __UINT_LEAST16_MAX__
#elif defined(__int_least16_t_defined)
#define INT_LEAST16_MIN -32768
#define INT_LEAST16_MAX 32767
#define UINT_LEAST16_MAX 65535
295,7 → 258,11
#error required type int_least16_t missing
#endif
 
#if __int32_t_defined
#ifdef __INT32_MAX__
#define INT32_MIN (-__INT32_MAX__ - 1)
#define INT32_MAX __INT32_MAX__
#define UINT32_MAX __UINT32_MAX__
#elif defined(__int32_t_defined)
#if __have_long32
#define INT32_MIN (-2147483647L-1)
#define INT32_MAX 2147483647L
307,7 → 274,11
#endif
#endif
 
#if __int_least32_t_defined
#ifdef __INT_LEAST32_MAX__
#define INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1)
#define INT_LEAST32_MAX __INT_LEAST32_MAX__
#define UINT_LEAST32_MAX __UINT_LEAST32_MAX__
#elif defined(__int_least32_t_defined)
#if __have_long32
#define INT_LEAST32_MIN (-2147483647L-1)
#define INT_LEAST32_MAX 2147483647L
321,7 → 292,11
#error required type int_least32_t missing
#endif
 
#if __int64_t_defined
#ifdef __INT64_MAX__
#define INT64_MIN (-__INT64_MAX__ - 1)
#define INT64_MAX __INT64_MAX__
#define UINT64_MAX __UINT64_MAX__
#elif defined(__int64_t_defined)
#if __have_long64
#define INT64_MIN (-9223372036854775807L-1L)
#define INT64_MAX 9223372036854775807L
333,7 → 308,11
#endif
#endif
 
#if __int_least64_t_defined
#ifdef __INT_LEAST64_MAX__
#define INT_LEAST64_MIN (-__INT_LEAST64_MAX__ - 1)
#define INT_LEAST64_MAX __INT_LEAST64_MAX__
#define UINT_LEAST64_MAX __UINT_LEAST64_MAX__
#elif defined(__int_least64_t_defined)
#if __have_long64
#define INT_LEAST64_MIN (-9223372036854775807L-1L)
#define INT_LEAST64_MAX 9223372036854775807L
345,7 → 324,11
#endif
#endif
 
#if __int_fast8_t_defined
#ifdef __INT_FAST8_MAX__
#define INT_FAST8_MIN (-__INT_FAST8_MAX__ - 1)
#define INT_FAST8_MAX __INT_FAST8_MAX__
#define UINT_FAST8_MAX __UINT_FAST8_MAX__
#elif defined(__int_fast8_t_defined)
#if __STDINT_EXP(INT_MAX) >= 0x7f
#define INT_FAST8_MIN (-__STDINT_EXP(INT_MAX)-1)
#define INT_FAST8_MAX __STDINT_EXP(INT_MAX)
357,7 → 340,11
#endif
#endif
 
#if __int_fast16_t_defined
#ifdef __INT_FAST16_MAX__
#define INT_FAST16_MIN (-__INT_FAST16_MAX__ - 1)
#define INT_FAST16_MAX __INT_FAST16_MAX__
#define UINT_FAST16_MAX __UINT_FAST16_MAX__
#elif defined(__int_fast16_t_defined)
#if __STDINT_EXP(INT_MAX) >= 0x7fff
#define INT_FAST16_MIN (-__STDINT_EXP(INT_MAX)-1)
#define INT_FAST16_MAX __STDINT_EXP(INT_MAX)
369,7 → 356,11
#endif
#endif
 
#if __int_fast32_t_defined
#ifdef __INT_FAST32_MAX__
#define INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1)
#define INT_FAST32_MAX __INT_FAST32_MAX__
#define UINT_FAST32_MAX __UINT_FAST32_MAX__
#elif defined(__int_fast32_t_defined)
#if __STDINT_EXP(INT_MAX) >= 0x7fffffff
#define INT_FAST32_MIN (-__STDINT_EXP(INT_MAX)-1)
#define INT_FAST32_MAX __STDINT_EXP(INT_MAX)
381,7 → 372,11
#endif
#endif
 
#if __int_fast64_t_defined
#ifdef __INT_FAST64_MAX__
#define INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1)
#define INT_FAST64_MAX __INT_FAST64_MAX__
#define UINT_FAST64_MAX __UINT_FAST64_MAX__
#elif defined(__int_fast64_t_defined)
#if __STDINT_EXP(INT_MAX) > 0x7fffffff
#define INT_FAST64_MIN (-__STDINT_EXP(INT_MAX)-1)
#define INT_FAST64_MAX __STDINT_EXP(INT_MAX)
448,6 → 443,10
#endif
 
/** Macros for minimum-width integer constant expressions */
#ifdef __INT8_C
#define INT8_C(x) __INT8_C(x)
#define UINT8_C(x) __UINT8_C(x)
#else
#define INT8_C(x) x
#if __STDINT_EXP(INT_MAX) > 0x7f
#define UINT8_C(x) x
454,7 → 453,12
#else
#define UINT8_C(x) x##U
#endif
#endif
 
#ifdef __INT16_C
#define INT16_C(x) __INT16_C(x)
#define UINT16_C(x) __UINT16_C(x)
#else
#define INT16_C(x) x
#if __STDINT_EXP(INT_MAX) > 0x7fff
#define UINT16_C(x) x
461,7 → 465,12
#else
#define UINT16_C(x) x##U
#endif
#endif
 
#ifdef __INT32_C
#define INT32_C(x) __INT32_C(x)
#define UINT32_C(x) __UINT32_C(x)
#else
#if __have_long32
#define INT32_C(x) x##L
#define UINT32_C(x) x##UL
469,7 → 478,12
#define INT32_C(x) x
#define UINT32_C(x) x##U
#endif
#endif
 
#ifdef __INT64_C
#define INT64_C(x) __INT64_C(x)
#define UINT64_C(x) __UINT64_C(x)
#else
#if __int64_t_defined
#if __have_long64
#define INT64_C(x) x##L
479,8 → 493,13
#define UINT64_C(x) x##ULL
#endif
#endif
#endif
 
/** Macros for greatest-width integer constant expression */
#ifdef __INTMAX_C
#define INTMAX_C(x) __INTMAX_C(x)
#define UINTMAX_C(x) __UINTMAX_C(x)
#else
#if __have_long64
#define INTMAX_C(x) x##L
#define UINTMAX_C(x) x##UL
488,6 → 507,7
#define INTMAX_C(x) x##LL
#define UINTMAX_C(x) x##ULL
#endif
#endif
 
 
#ifdef __cplusplus
/contrib/sdk/sources/newlib/libc/include/stdio.h
31,6 → 31,7
#define _FSTDIO /* ``function stdio'' */
 
#define __need_size_t
#define __need_NULL
#include <stddef.h>
 
#define __need___va_list
96,10 → 97,6
#define _IOLBF 1 /* setvbuf should set line buffered */
#define _IONBF 2 /* setvbuf should set unbuffered */
 
#ifndef NULL
#define NULL 0
#endif
 
#define EOF (-1)
 
#ifdef __BUFSIZ__
142,15 → 139,9
 
#define TMP_MAX 26
 
#ifndef _REENT_ONLY
#define stdin (_REENT->_stdin)
#define stdout (_REENT->_stdout)
#define stderr (_REENT->_stderr)
#else /* _REENT_ONLY */
#define stdin (_impure_ptr->_stdin)
#define stdout (_impure_ptr->_stdout)
#define stderr (_impure_ptr->_stderr)
#endif /* _REENT_ONLY */
 
#define _stdin_r(x) ((x)->_stdin)
#define _stdout_r(x) ((x)->_stdout)
172,29 → 163,29
char * _EXFUN(tmpnam, (char *));
int _EXFUN(fclose, (FILE *));
int _EXFUN(fflush, (FILE *));
FILE * _EXFUN(freopen, (const char *, const char *, FILE *));
void _EXFUN(setbuf, (FILE *, char *));
int _EXFUN(setvbuf, (FILE *, char *, int, size_t));
int _EXFUN(fprintf, (FILE *, const char *, ...)
FILE * _EXFUN(freopen, (const char *__restrict, const char *__restrict, FILE *__restrict));
void _EXFUN(setbuf, (FILE *__restrict, char *__restrict));
int _EXFUN(setvbuf, (FILE *__restrict, char *__restrict, int, size_t));
int _EXFUN(fprintf, (FILE *__restrict, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 2, 3))));
int _EXFUN(fscanf, (FILE *, const char *, ...)
int _EXFUN(fscanf, (FILE *__restrict, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__scanf__, 2, 3))));
int _EXFUN(printf, (const char *, ...)
int _EXFUN(printf, (const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 1, 2))));
int _EXFUN(scanf, (const char *, ...)
int _EXFUN(scanf, (const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__scanf__, 1, 2))));
int _EXFUN(sscanf, (const char *, const char *, ...)
int _EXFUN(sscanf, (const char *__restrict, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__scanf__, 2, 3))));
int _EXFUN(vfprintf, (FILE *, const char *, __VALIST)
int _EXFUN(vfprintf, (FILE *__restrict, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 2, 0))));
int _EXFUN(vprintf, (const char *, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 1, 0))));
int _EXFUN(vsprintf, (char *, const char *, __VALIST)
int _EXFUN(vsprintf, (char *__restrict, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 2, 0))));
int _EXFUN(fgetc, (FILE *));
char * _EXFUN(fgets, (char *, int, FILE *));
char * _EXFUN(fgets, (char *__restrict, int, FILE *__restrict));
int _EXFUN(fputc, (int, FILE *));
int _EXFUN(fputs, (const char *, FILE *));
int _EXFUN(fputs, (const char *__restrict, FILE *__restrict));
int _EXFUN(getc, (FILE *));
int _EXFUN(getchar, (void));
char * _EXFUN(gets, (char *));
202,12 → 193,12
int _EXFUN(putchar, (int));
int _EXFUN(puts, (const char *));
int _EXFUN(ungetc, (int, FILE *));
size_t _EXFUN(fread, (_PTR, size_t _size, size_t _n, FILE *));
size_t _EXFUN(fwrite, (const _PTR , size_t _size, size_t _n, FILE *));
size_t _EXFUN(fread, (_PTR __restrict, size_t _size, size_t _n, FILE *__restrict));
size_t _EXFUN(fwrite, (const _PTR __restrict , size_t _size, size_t _n, FILE *));
#ifdef _COMPILING_NEWLIB
int _EXFUN(fgetpos, (FILE *, _fpos_t *));
#else
int _EXFUN(fgetpos, (FILE *, fpos_t *));
int _EXFUN(fgetpos, (FILE *__restrict, fpos_t *__restrict));
#endif
int _EXFUN(fseek, (FILE *, long, int));
#ifdef _COMPILING_NEWLIB
222,12 → 213,15
int _EXFUN(ferror, (FILE *));
void _EXFUN(perror, (const char *));
#ifndef _REENT_ONLY
FILE * _EXFUN(fopen, (const char *_name, const char *_type));
int _EXFUN(sprintf, (char *, const char *, ...)
FILE * _EXFUN(fopen, (const char *__restrict _name, const char *__restrict _type));
int _EXFUN(sprintf, (char *__restrict, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 2, 3))));
int _EXFUN(remove, (const char *));
int _EXFUN(rename, (const char *, const char *));
#ifdef _COMPILING_NEWLIB
int _EXFUN(_rename, (const char *, const char *));
#endif
#endif
#if !defined(__STRICT_ANSI__) || defined(__USE_XOPEN2K)
#ifdef _COMPILING_NEWLIB
int _EXFUN(fseeko, (FILE *, _off_t, int));
243,9 → 237,9
_ATTRIBUTE ((__format__ (__printf__, 2, 3))));
char * _EXFUN(asniprintf, (char *, size_t *, const char *, ...)
_ATTRIBUTE ((__format__ (__printf__, 3, 4))));
char * _EXFUN(asnprintf, (char *, size_t *, const char *, ...)
char * _EXFUN(asnprintf, (char *__restrict, size_t *__restrict, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 3, 4))));
int _EXFUN(asprintf, (char **, const char *, ...)
int _EXFUN(asprintf, (char **__restrict, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 2, 3))));
#ifndef diprintf
int _EXFUN(diprintf, (int, const char *, ...)
264,7 → 258,7
_ATTRIBUTE ((__format__ (__printf__, 2, 3))));
int _EXFUN(siscanf, (const char *, const char *, ...)
_ATTRIBUTE ((__format__ (__scanf__, 2, 3))));
int _EXFUN(snprintf, (char *, size_t, const char *, ...)
int _EXFUN(snprintf, (char *__restrict, size_t, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 3, 4))));
int _EXFUN(sniprintf, (char *, size_t, const char *, ...)
_ATTRIBUTE ((__format__ (__printf__, 3, 4))));
283,7 → 277,7
_ATTRIBUTE ((__format__ (__printf__, 2, 0))));
int _EXFUN(vfiscanf, (FILE *, const char *, __VALIST)
_ATTRIBUTE ((__format__ (__scanf__, 2, 0))));
int _EXFUN(vfscanf, (FILE *, const char *, __VALIST)
int _EXFUN(vfscanf, (FILE *__restrict, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__scanf__, 2, 0))));
int _EXFUN(viprintf, (const char *, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 1, 0))));
297,9 → 291,9
_ATTRIBUTE ((__format__ (__scanf__, 2, 0))));
int _EXFUN(vsniprintf, (char *, size_t, const char *, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 3, 0))));
int _EXFUN(vsnprintf, (char *, size_t, const char *, __VALIST)
int _EXFUN(vsnprintf, (char *__restrict, size_t, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 3, 0))));
int _EXFUN(vsscanf, (const char *, const char *, __VALIST)
int _EXFUN(vsscanf, (const char *__restrict, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__scanf__, 2, 0))));
#endif /* !_REENT_ONLY */
#endif /* !__STRICT_ANSI__ */
335,10 → 329,10
#ifndef __STRICT_ANSI__
# ifndef _REENT_ONLY
# ifndef dprintf
int _EXFUN(dprintf, (int, const char *, ...)
int _EXFUN(dprintf, (int, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 2, 3))));
# endif
FILE * _EXFUN(fmemopen, (void *, size_t, const char *));
FILE * _EXFUN(fmemopen, (void *__restrict, size_t, const char *__restrict));
/* getdelim - see __getdelim for now */
/* getline - see __getline for now */
FILE * _EXFUN(open_memstream, (char **, size_t *));
345,7 → 339,7
#if defined (__CYGWIN__)
int _EXFUN(renameat, (int, const char *, int, const char *));
#endif
int _EXFUN(vdprintf, (int, const char *, __VALIST)
int _EXFUN(vdprintf, (int, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 2, 0))));
# endif
#endif
358,13 → 352,13
_ATTRIBUTE ((__format__ (__printf__, 3, 4))));
char * _EXFUN(_asniprintf_r, (struct _reent *, char *, size_t *, const char *, ...)
_ATTRIBUTE ((__format__ (__printf__, 4, 5))));
char * _EXFUN(_asnprintf_r, (struct _reent *, char *, size_t *, const char *, ...)
char * _EXFUN(_asnprintf_r, (struct _reent *, char *__restrict, size_t *__restrict, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 4, 5))));
int _EXFUN(_asprintf_r, (struct _reent *, char **, const char *, ...)
int _EXFUN(_asprintf_r, (struct _reent *, char **__restrict, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 3, 4))));
int _EXFUN(_diprintf_r, (struct _reent *, int, const char *, ...)
_ATTRIBUTE ((__format__ (__printf__, 3, 4))));
int _EXFUN(_dprintf_r, (struct _reent *, int, const char *, ...)
int _EXFUN(_dprintf_r, (struct _reent *, int, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 3, 4))));
int _EXFUN(_fclose_r, (struct _reent *, FILE *));
int _EXFUN(_fcloseall_r, (struct _reent *));
371,9 → 365,9
FILE * _EXFUN(_fdopen_r, (struct _reent *, int, const char *));
int _EXFUN(_fflush_r, (struct _reent *, FILE *));
int _EXFUN(_fgetc_r, (struct _reent *, FILE *));
char * _EXFUN(_fgets_r, (struct _reent *, char *, int, FILE *));
char * _EXFUN(_fgets_r, (struct _reent *, char *__restrict, int, FILE *__restrict));
#ifdef _COMPILING_NEWLIB
int _EXFUN(_fgetpos_r, (struct _reent *, FILE *, _fpos_t *));
int _EXFUN(_fgetpos_r, (struct _reent *, FILE *__restrict, _fpos_t *__restrict));
int _EXFUN(_fsetpos_r, (struct _reent *, FILE *, const _fpos_t *));
#else
int _EXFUN(_fgetpos_r, (struct _reent *, FILE *, fpos_t *));
383,16 → 377,16
_ATTRIBUTE ((__format__ (__printf__, 3, 4))));
int _EXFUN(_fiscanf_r, (struct _reent *, FILE *, const char *, ...)
_ATTRIBUTE ((__format__ (__scanf__, 3, 4))));
FILE * _EXFUN(_fmemopen_r, (struct _reent *, void *, size_t, const char *));
FILE * _EXFUN(_fopen_r, (struct _reent *, const char *, const char *));
FILE * _EXFUN(_freopen_r, (struct _reent *, const char *, const char *, FILE *));
int _EXFUN(_fprintf_r, (struct _reent *, FILE *, const char *, ...)
FILE * _EXFUN(_fmemopen_r, (struct _reent *, void *__restrict, size_t, const char *__restrict));
FILE * _EXFUN(_fopen_r, (struct _reent *, const char *__restrict, const char *__restrict));
FILE * _EXFUN(_freopen_r, (struct _reent *, const char *__restrict, const char *__restrict, FILE *__restrict));
int _EXFUN(_fprintf_r, (struct _reent *, FILE *__restrict, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 3, 4))));
int _EXFUN(_fpurge_r, (struct _reent *, FILE *));
int _EXFUN(_fputc_r, (struct _reent *, int, FILE *));
int _EXFUN(_fputs_r, (struct _reent *, const char *, FILE *));
size_t _EXFUN(_fread_r, (struct _reent *, _PTR, size_t _size, size_t _n, FILE *));
int _EXFUN(_fscanf_r, (struct _reent *, FILE *, const char *, ...)
int _EXFUN(_fputs_r, (struct _reent *, const char *__restrict, FILE *__restrict));
size_t _EXFUN(_fread_r, (struct _reent *, _PTR __restrict, size_t _size, size_t _n, FILE *__restrict));
int _EXFUN(_fscanf_r, (struct _reent *, FILE *__restrict, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__scanf__, 3, 4))));
int _EXFUN(_fseek_r, (struct _reent *, FILE *, long, int));
int _EXFUN(_fseeko_r,(struct _reent *, FILE *, _off_t, int));
399,7 → 393,7
long _EXFUN(_ftell_r, (struct _reent *, FILE *));
_off_t _EXFUN(_ftello_r,(struct _reent *, FILE *));
void _EXFUN(_rewind_r, (struct _reent *, FILE *));
size_t _EXFUN(_fwrite_r, (struct _reent *, const _PTR , size_t _size, size_t _n, FILE *));
size_t _EXFUN(_fwrite_r, (struct _reent *, const _PTR __restrict, size_t _size, size_t _n, FILE *__restrict));
int _EXFUN(_getc_r, (struct _reent *, FILE *));
int _EXFUN(_getc_unlocked_r, (struct _reent *, FILE *));
int _EXFUN(_getchar_r, (struct _reent *));
411,7 → 405,7
_ATTRIBUTE ((__format__ (__scanf__, 2, 3))));
FILE * _EXFUN(_open_memstream_r, (struct _reent *, char **, size_t *));
void _EXFUN(_perror_r, (struct _reent *, const char *));
int _EXFUN(_printf_r, (struct _reent *, const char *, ...)
int _EXFUN(_printf_r, (struct _reent *, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 2, 3))));
int _EXFUN(_putc_r, (struct _reent *, int, FILE *));
int _EXFUN(_putc_unlocked_r, (struct _reent *, int, FILE *));
421,7 → 415,7
int _EXFUN(_remove_r, (struct _reent *, const char *));
int _EXFUN(_rename_r, (struct _reent *,
const char *_old, const char *_new));
int _EXFUN(_scanf_r, (struct _reent *, const char *, ...)
int _EXFUN(_scanf_r, (struct _reent *, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__scanf__, 2, 3))));
int _EXFUN(_siprintf_r, (struct _reent *, char *, const char *, ...)
_ATTRIBUTE ((__format__ (__printf__, 3, 4))));
429,11 → 423,11
_ATTRIBUTE ((__format__ (__scanf__, 3, 4))));
int _EXFUN(_sniprintf_r, (struct _reent *, char *, size_t, const char *, ...)
_ATTRIBUTE ((__format__ (__printf__, 4, 5))));
int _EXFUN(_snprintf_r, (struct _reent *, char *, size_t, const char *, ...)
int _EXFUN(_snprintf_r, (struct _reent *, char *__restrict, size_t, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 4, 5))));
int _EXFUN(_sprintf_r, (struct _reent *, char *, const char *, ...)
int _EXFUN(_sprintf_r, (struct _reent *, char *__restrict, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__printf__, 3, 4))));
int _EXFUN(_sscanf_r, (struct _reent *, const char *, const char *, ...)
int _EXFUN(_sscanf_r, (struct _reent *, const char *__restrict, const char *__restrict, ...)
_ATTRIBUTE ((__format__ (__scanf__, 3, 4))));
char * _EXFUN(_tempnam_r, (struct _reent *, const char *, const char *));
FILE * _EXFUN(_tmpfile_r, (struct _reent *));
449,23 → 443,23
_ATTRIBUTE ((__format__ (__printf__, 3, 0))));
int _EXFUN(_vdiprintf_r, (struct _reent *, int, const char *, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 3, 0))));
int _EXFUN(_vdprintf_r, (struct _reent *, int, const char *, __VALIST)
int _EXFUN(_vdprintf_r, (struct _reent *, int, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 3, 0))));
int _EXFUN(_vfiprintf_r, (struct _reent *, FILE *, const char *, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 3, 0))));
int _EXFUN(_vfiscanf_r, (struct _reent *, FILE *, const char *, __VALIST)
_ATTRIBUTE ((__format__ (__scanf__, 3, 0))));
int _EXFUN(_vfprintf_r, (struct _reent *, FILE *, const char *, __VALIST)
int _EXFUN(_vfprintf_r, (struct _reent *, FILE *__restrict, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 3, 0))));
int _EXFUN(_vfscanf_r, (struct _reent *, FILE *, const char *, __VALIST)
int _EXFUN(_vfscanf_r, (struct _reent *, FILE *__restrict, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__scanf__, 3, 0))));
int _EXFUN(_viprintf_r, (struct _reent *, const char *, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 2, 0))));
int _EXFUN(_viscanf_r, (struct _reent *, const char *, __VALIST)
_ATTRIBUTE ((__format__ (__scanf__, 2, 0))));
int _EXFUN(_vprintf_r, (struct _reent *, const char *, __VALIST)
int _EXFUN(_vprintf_r, (struct _reent *, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 2, 0))));
int _EXFUN(_vscanf_r, (struct _reent *, const char *, __VALIST)
int _EXFUN(_vscanf_r, (struct _reent *, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__scanf__, 2, 0))));
int _EXFUN(_vsiprintf_r, (struct _reent *, char *, const char *, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 3, 0))));
473,11 → 467,11
_ATTRIBUTE ((__format__ (__scanf__, 3, 0))));
int _EXFUN(_vsniprintf_r, (struct _reent *, char *, size_t, const char *, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 4, 0))));
int _EXFUN(_vsnprintf_r, (struct _reent *, char *, size_t, const char *, __VALIST)
int _EXFUN(_vsnprintf_r, (struct _reent *, char *__restrict, size_t, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 4, 0))));
int _EXFUN(_vsprintf_r, (struct _reent *, char *, const char *, __VALIST)
int _EXFUN(_vsprintf_r, (struct _reent *, char *__restrict, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__printf__, 3, 0))));
int _EXFUN(_vsscanf_r, (struct _reent *, const char *, const char *, __VALIST)
int _EXFUN(_vsscanf_r, (struct _reent *, const char *__restrict, const char *__restrict, __VALIST)
_ATTRIBUTE ((__format__ (__scanf__, 3, 0))));
 
/* Other extensions. */
522,24 → 516,32
#ifndef __STRICT_ANSI__
# ifdef __LARGE64_FILES
FILE *_EXFUN(funopen,(const _PTR __cookie,
int (*__readfn)(_PTR __c, char *__buf, int __n),
int (*__writefn)(_PTR __c, const char *__buf, int __n),
int (*__readfn)(_PTR __c, char *__buf,
_READ_WRITE_BUFSIZE_TYPE __n),
int (*__writefn)(_PTR __c, const char *__buf,
_READ_WRITE_BUFSIZE_TYPE __n),
_fpos64_t (*__seekfn)(_PTR __c, _fpos64_t __off, int __whence),
int (*__closefn)(_PTR __c)));
FILE *_EXFUN(_funopen_r,(struct _reent *, const _PTR __cookie,
int (*__readfn)(_PTR __c, char *__buf, int __n),
int (*__writefn)(_PTR __c, const char *__buf, int __n),
int (*__readfn)(_PTR __c, char *__buf,
_READ_WRITE_BUFSIZE_TYPE __n),
int (*__writefn)(_PTR __c, const char *__buf,
_READ_WRITE_BUFSIZE_TYPE __n),
_fpos64_t (*__seekfn)(_PTR __c, _fpos64_t __off, int __whence),
int (*__closefn)(_PTR __c)));
# else
FILE *_EXFUN(funopen,(const _PTR __cookie,
int (*__readfn)(_PTR __cookie, char *__buf, int __n),
int (*__writefn)(_PTR __cookie, const char *__buf, int __n),
int (*__readfn)(_PTR __cookie, char *__buf,
_READ_WRITE_BUFSIZE_TYPE __n),
int (*__writefn)(_PTR __cookie, const char *__buf,
_READ_WRITE_BUFSIZE_TYPE __n),
fpos_t (*__seekfn)(_PTR __cookie, fpos_t __off, int __whence),
int (*__closefn)(_PTR __cookie)));
FILE *_EXFUN(_funopen_r,(struct _reent *, const _PTR __cookie,
int (*__readfn)(_PTR __cookie, char *__buf, int __n),
int (*__writefn)(_PTR __cookie, const char *__buf, int __n),
int (*__readfn)(_PTR __cookie, char *__buf,
_READ_WRITE_BUFSIZE_TYPE __n),
int (*__writefn)(_PTR __cookie, const char *__buf,
_READ_WRITE_BUFSIZE_TYPE __n),
fpos_t (*__seekfn)(_PTR __cookie, fpos_t __off, int __whence),
int (*__closefn)(_PTR __cookie)));
# endif /* !__LARGE64_FILES */
/contrib/sdk/sources/newlib/libc/include/stdio_ext.h
17,6 → 17,47
 
void _EXFUN(__fpurge,(FILE *));
 
/* TODO:
 
void _flushlbf (void);
int __fsetlocking (FILE *__fp, int __type);
*/
 
#ifdef __GNUC__
 
_ELIDABLE_INLINE inline size_t
__fbufsize (FILE *__fp) { return (size_t) __fp->_bf._size; }
 
_ELIDABLE_INLINE inline int
__freading (FILE *__fp) { return (__fp->_flags & __SRD) != 0; }
 
_ELIDABLE_INLINE inline int
__fwriting (FILE *__fp) { return (__fp->_flags & __SWR) != 0; }
 
_ELIDABLE_INLINE inline int
__freadable (FILE *__fp) { return (__fp->_flags & (__SRD | __SRW)) != 0; }
 
_ELIDABLE_INLINE inline int
__fwriteable (FILE *__fp) { return (__fp->_flags & (__SWR | __SRW)) != 0; }
 
_ELIDABLE_INLINE inline int
__flbf (FILE *__fp) { return (__fp->_flags & __SLBF) != 0; }
 
_ELIDABLE_INLINE inline size_t
__fpending (FILE *__fp) { return __fp->_p - __fp->_bf._base; }
 
#else
 
#define __fbufsize(__fp) ((size_t) (__fp)->_bf._size)
#define __freading(__fp) (((__fp)->_flags & __SRD) != 0)
#define __fwriting(__fp) (((__fp)->_flags & __SWR) != 0)
#define __freadable(__fp) (((__fp)->_flags & (__SRD | __SRW)) != 0)
#define __fwriteable(__fp) (((__fp)->_flags & (__SWR | __SRW)) != 0)
#define __flbf(__fp) (((__fp)->_flags & __SLBF) != 0)
#define __fpending(__fp) ((size_t) ((__fp)->_p - (__fp)->_bf._base))
 
#endif /* __GNUC__ */
 
_END_STD_C
 
#endif /* _STDIO_EXT_H_ */
/contrib/sdk/sources/newlib/libc/include/stdlib.h
12,6 → 12,7
 
#define __need_size_t
#define __need_wchar_t
#define __need_NULL
#include <stddef.h>
 
#include <sys/reent.h>
38,7 → 39,9
long rem; /* remainder */
} ldiv_t;
 
#ifndef __STRICT_ANSI__
#if !defined(__STRICT_ANSI__) || \
(defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
(defined(__cplusplus) && __cplusplus >= 201103L)
typedef struct
{
long long int quot; /* quotient */
46,8 → 49,9
} lldiv_t;
#endif
 
#ifndef NULL
#define NULL 0
#ifndef __compar_fn_t_defined
#define __compar_fn_t_defined
typedef int (*__compar_fn_t) (const _PTR, const _PTR);
#endif
 
#define EXIT_FAILURE 1
74,7 → 78,7
const _PTR __base,
size_t __nmemb,
size_t __size,
int _EXFNPTR(_compar,(const _PTR, const _PTR))));
__compar_fn_t _compar));
_PTR _EXFUN_NOTHROW(calloc,(size_t __nmemb, size_t __size));
div_t _EXFUN(div,(int __numer, int __denom));
_VOID _EXFUN(exit,(int __status) _ATTRIBUTE ((noreturn)));
92,14 → 96,14
_PTR _EXFUN_NOTHROW(malloc,(size_t __size));
int _EXFUN(mblen,(const char *, size_t));
int _EXFUN(_mblen_r,(struct _reent *, const char *, size_t, _mbstate_t *));
int _EXFUN(mbtowc,(wchar_t *, const char *, size_t));
int _EXFUN(_mbtowc_r,(struct _reent *, wchar_t *, const char *, size_t, _mbstate_t *));
int _EXFUN(mbtowc,(wchar_t *__restrict, const char *__restrict, size_t));
int _EXFUN(_mbtowc_r,(struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *));
int _EXFUN(wctomb,(char *, wchar_t));
int _EXFUN(_wctomb_r,(struct _reent *, char *, wchar_t, _mbstate_t *));
size_t _EXFUN(mbstowcs,(wchar_t *, const char *, size_t));
size_t _EXFUN(_mbstowcs_r,(struct _reent *, wchar_t *, const char *, size_t, _mbstate_t *));
size_t _EXFUN(wcstombs,(char *, const wchar_t *, size_t));
size_t _EXFUN(_wcstombs_r,(struct _reent *, char *, const wchar_t *, size_t, _mbstate_t *));
size_t _EXFUN(mbstowcs,(wchar_t *__restrict, const char *__restrict, size_t));
size_t _EXFUN(_mbstowcs_r,(struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *));
size_t _EXFUN(wcstombs,(char *__restrict, const wchar_t *__restrict, size_t));
size_t _EXFUN(_wcstombs_r,(struct _reent *, char *__restrict, const wchar_t *__restrict, size_t, _mbstate_t *));
#ifndef __STRICT_ANSI__
#ifndef _REENT_ONLY
char * _EXFUN(mkdtemp,(char *));
116,16 → 120,19
int _EXFUN(_mkstemps_r, (struct _reent *, char *, int));
char * _EXFUN(_mktemp_r, (struct _reent *, char *) _ATTRIBUTE ((__warning__ ("the use of `mktemp' is dangerous; use `mkstemp' instead"))));
#endif
_VOID _EXFUN(qsort,(_PTR __base, size_t __nmemb, size_t __size, int(*_compar)(const _PTR, const _PTR)));
_VOID _EXFUN(qsort,(_PTR __base, size_t __nmemb, size_t __size, __compar_fn_t _compar));
int _EXFUN(rand,(_VOID));
_PTR _EXFUN_NOTHROW(realloc,(_PTR __r, size_t __size));
#ifndef __STRICT_ANSI__
_PTR _EXFUN(reallocf,(_PTR __r, size_t __size));
char * _EXFUN(realpath, (const char *__restrict path, char *__restrict resolved_path));
#endif
_VOID _EXFUN(srand,(unsigned __seed));
double _EXFUN(strtod,(const char *__n, char **__end_PTR));
double _EXFUN(_strtod_r,(struct _reent *,const char *__n, char **__end_PTR));
float _EXFUN(strtof,(const char *__n, char **__end_PTR));
double _EXFUN(strtod,(const char *__restrict __n, char **__restrict __end_PTR));
double _EXFUN(_strtod_r,(struct _reent *,const char *__restrict __n, char **__restrict __end_PTR));
#if !defined(__STRICT_ANSI__) || (__STDC_VERSION__ >= 199901L) || (__cplusplus >= 201103L)
float _EXFUN(strtof,(const char *__restrict __n, char **__restrict __end_PTR));
#endif
#ifndef __STRICT_ANSI__
/* the following strtodf interface is deprecated...use strtof instead */
# ifndef strtodf
132,10 → 139,10
# define strtodf strtof
# endif
#endif
long _EXFUN(strtol,(const char *__n, char **__end_PTR, int __base));
long _EXFUN(_strtol_r,(struct _reent *,const char *__n, char **__end_PTR, int __base));
unsigned long _EXFUN(strtoul,(const char *__n, char **__end_PTR, int __base));
unsigned long _EXFUN(_strtoul_r,(struct _reent *,const char *__n, char **__end_PTR, int __base));
long _EXFUN(strtol,(const char *__restrict __n, char **__restrict __end_PTR, int __base));
long _EXFUN(_strtol_r,(struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base));
unsigned long _EXFUN(strtoul,(const char *__restrict __n, char **__restrict __end_PTR, int __base));
unsigned long _EXFUN(_strtoul_r,(struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base));
 
int _EXFUN(system,(const char *__string));
 
186,10 → 193,18
long long _EXFUN(_atoll_r,(struct _reent *, const char *__nptr));
long long _EXFUN(llabs,(long long));
lldiv_t _EXFUN(lldiv,(long long __numer, long long __denom));
long long _EXFUN(strtoll,(const char *__n, char **__end_PTR, int __base));
long long _EXFUN(_strtoll_r,(struct _reent *, const char *__n, char **__end_PTR, int __base));
unsigned long long _EXFUN(strtoull,(const char *__n, char **__end_PTR, int __base));
unsigned long long _EXFUN(_strtoull_r,(struct _reent *, const char *__n, char **__end_PTR, int __base));
#endif /* ! __STRICT_ANSI__ */
#if !defined(__STRICT_ANSI__) || (__STDC_VERSION__ >= 199901L) || (__cplusplus >= 201103L)
long long _EXFUN(strtoll,(const char *__restrict __n, char **__restrict __end_PTR, int __base));
#endif
#ifndef __STRICT_ANSI__
long long _EXFUN(_strtoll_r,(struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base));
#endif /* ! __STRICT_ANSI__ */
#if !defined(__STRICT_ANSI__) || (__STDC_VERSION__ >= 199901L) || (__cplusplus >= 201103L)
unsigned long long _EXFUN(strtoull,(const char *__restrict __n, char **__restrict __end_PTR, int __base));
#endif
#ifndef __STRICT_ANSI__
unsigned long long _EXFUN(_strtoull_r,(struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base));
 
#ifndef __CYGWIN__
_VOID _EXFUN(cfree,(_PTR));
217,8 → 232,9
 
/* On platforms where long double equals double. */
#ifdef _LDBL_EQ_DBL
extern long double strtold (const char *, char **);
extern long double wcstold (const wchar_t *, wchar_t **);
#if !defined(__STRICT_ANSI__) || (__STDC_VERSION__ >= 199901L) || (__cplusplus >= 201103L)
extern long double strtold (const char *__restrict, char **__restrict);
#endif
#endif /* _LDBL_EQ_DBL */
 
_END_STD_C
/contrib/sdk/sources/newlib/libc/include/string.h
10,32 → 10,30
#include "_ansi.h"
#include <sys/reent.h>
#include <sys/cdefs.h>
#include <sys/features.h>
 
#define __need_size_t
#define __need_NULL
#include <stddef.h>
 
#ifndef NULL
#define NULL 0
#endif
 
_BEGIN_STD_C
 
_PTR _EXFUN(memchr,(const _PTR, int, size_t));
int _EXFUN(memcmp,(const _PTR, const _PTR, size_t));
_PTR _EXFUN(memcpy,(_PTR, const _PTR, size_t));
_PTR _EXFUN(memcpy,(_PTR __restrict, const _PTR __restrict, size_t));
_PTR _EXFUN(memmove,(_PTR, const _PTR, size_t));
_PTR _EXFUN(memset,(_PTR, int, size_t));
char *_EXFUN(strcat,(char *, const char *));
char *_EXFUN(strcat,(char *__restrict, const char *__restrict));
char *_EXFUN(strchr,(const char *, int));
int _EXFUN(strcmp,(const char *, const char *));
int _EXFUN(strcoll,(const char *, const char *));
char *_EXFUN(strcpy,(char *, const char *));
char *_EXFUN(strcpy,(char *__restrict, const char *__restrict));
size_t _EXFUN(strcspn,(const char *, const char *));
char *_EXFUN(strerror,(int));
size_t _EXFUN(strlen,(const char *));
char *_EXFUN(strncat,(char *, const char *, size_t));
char *_EXFUN(strncat,(char *__restrict, const char *__restrict, size_t));
int _EXFUN(strncmp,(const char *, const char *, size_t));
char *_EXFUN(strncpy,(char *, const char *, size_t));
char *_EXFUN(strncpy,(char *__restrict, const char *__restrict, size_t));
char *_EXFUN(strpbrk,(const char *, const char *));
char *_EXFUN(strrchr,(const char *, int));
size_t _EXFUN(strspn,(const char *, const char *));
42,13 → 40,13
char *_EXFUN(strstr,(const char *, const char *));
 
#ifndef _REENT_ONLY
char *_EXFUN(strtok,(char *, const char *));
char *_EXFUN(strtok,(char *__restrict, const char *__restrict));
#endif
 
size_t _EXFUN(strxfrm,(char *, const char *, size_t));
size_t _EXFUN(strxfrm,(char *__restrict, const char *__restrict, size_t));
 
#ifndef __STRICT_ANSI__
char *_EXFUN(strtok_r,(char *, const char *, char **));
char *_EXFUN(strtok_r,(char *__restrict, const char *__restrict, char **__restrict));
 
int _EXFUN(bcmp,(const void *, const void *, size_t));
void _EXFUN(bcopy,(const void *, void *, size_t));
55,18 → 53,28
void _EXFUN(bzero,(void *, size_t));
int _EXFUN(ffs,(int));
char *_EXFUN(index,(const char *, int));
_PTR _EXFUN(memccpy,(_PTR, const _PTR, int, size_t));
_PTR _EXFUN(memccpy,(_PTR __restrict, const _PTR __restrict, int, size_t));
_PTR _EXFUN(mempcpy,(_PTR, const _PTR, size_t));
_PTR _EXFUN(memmem, (const _PTR, size_t, const _PTR, size_t));
_PTR _EXFUN(memrchr,(const _PTR, int, size_t));
_PTR _EXFUN(rawmemchr,(const _PTR, int));
char *_EXFUN(rindex,(const char *, int));
char *_EXFUN(stpcpy,(char *, const char *));
char *_EXFUN(stpncpy,(char *, const char *, size_t));
char *_EXFUN(stpcpy,(char *__restrict, const char *__restrict));
char *_EXFUN(stpncpy,(char *__restrict, const char *__restrict, size_t));
int _EXFUN(strcasecmp,(const char *, const char *));
char *_EXFUN(strcasestr,(const char *, const char *));
char *_EXFUN(strchrnul,(const char *, int));
#endif
#if !defined(__STRICT_ANSI__) || (_XOPEN_SOURCE - 0) >= 500
char *_EXFUN(strdup,(const char *));
#endif
#ifndef __STRICT_ANSI__
char *_EXFUN(_strdup_r,(struct _reent *, const char *));
#endif
#if !defined(__STRICT_ANSI__) || (_XOPEN_SOURCE - 0) >= 700
char *_EXFUN(strndup,(const char *, size_t));
#endif
#ifndef __STRICT_ANSI__
char *_EXFUN(_strndup_r,(struct _reent *, const char *, size_t));
/* There are two common strerror_r variants. If you request
_GNU_SOURCE, you get the GNU version; otherwise you get the POSIX
/contrib/sdk/sources/newlib/libc/include/sys/_default_fcntl.h
42,15 → 42,6
/* O_NDELAY _FNBIO set in include/fcntl.h */
#define O_NONBLOCK _FNONBLOCK
#define O_NOCTTY _FNOCTTY
 
#define _FBINARY 0x10000
#define _FTEXT 0x20000
#define _FNOINHERIT 0x40000
 
#define O_BINARY _FBINARY
#define O_TEXT _FTEXT
#define O_NOINHERIT _FNOINHERIT
 
/* For machines which care - */
#if defined (_WIN32) || defined (__CYGWIN__)
#define _FBINARY 0x10000
/contrib/sdk/sources/newlib/libc/include/sys/_types.h
16,14 → 16,9
typedef long _off_t;
#endif
 
#if defined(__rtems__)
/* device numbers are 32-bit major and and 32-bit minor */
typedef unsigned long long __dev_t;
#else
#ifndef __dev_t_defined
typedef short __dev_t;
#endif
#endif
 
#ifndef __uid_t_defined
typedef unsigned short __uid_t;
52,6 → 47,14
#endif
 
#ifndef __ssize_t_defined
#ifdef __SIZE_TYPE__
/* If __SIZE_TYPE__ is defined (gcc) we define ssize_t based on size_t.
We simply change "unsigned" to "signed" for this single definition
to make sure ssize_t and size_t only differ by their signedness. */
#define unsigned signed
typedef __SIZE_TYPE__ _ssize_t;
#undef unsigned
#else
#if defined(__INT_MAX__) && __INT_MAX__ == 2147483647
typedef int _ssize_t;
#else
58,6 → 61,7
typedef long _ssize_t;
#endif
#endif
#endif
 
#define __need_wint_t
#include <stddef.h>
/contrib/sdk/sources/newlib/libc/include/sys/cdefs.h
2,7 → 2,7
 
/* Written 2000 by Werner Almesberger */
 
/*
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
*
17,10 → 17,6
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
38,27 → 34,130
* SUCH DAMAGE.
*
* @(#)cdefs.h 8.8 (Berkeley) 1/9/95
* $FreeBSD: src/sys/sys/cdefs.h,v 1.54 2002/05/11 03:58:24 alfred Exp $
* $FreeBSD$
*/
 
#ifndef _SYS_CDEFS_H
#define _SYS_CDEFS_H
#ifndef _SYS_CDEFS_H_
#define _SYS_CDEFS_H_
 
#define __FBSDID(x) /* nothing */
/*
* Note: the goal here is not compatibility to K&R C. Since we know that we
* have GCC which understands ANSI C perfectly well, we make use of this.
*/
#include <machine/_default_types.h>
#include <sys/features.h>
#include <stddef.h>
 
#define __P(args) args
#define __PMT(args) args
#define __const const
#define __signed signed
#define __volatile volatile
#define __DOTS , ...
#define __THROW
 
#ifdef __GNUC__
# define __ASMNAME(cname) __XSTRING (__USER_LABEL_PREFIX__) cname
#endif
 
#define __ptr_t void *
#define __long_double_t long double
 
#define __attribute_malloc__
#define __attribute_pure__
#define __attribute_format_strfmon__(a,b)
#define __flexarr [0]
 
#ifndef __BOUNDED_POINTERS__
# define __bounded /* nothing */
# define __unbounded /* nothing */
# define __ptrvalue /* nothing */
#endif
 
/*
* Testing against Clang-specific extensions.
*/
 
#ifndef __has_extension
#define __has_extension __has_feature
#endif
#ifndef __has_feature
#define __has_feature(x) 0
#endif
#ifndef __has_include
#define __has_include(x) 0
#endif
#ifndef __has_builtin
#define __has_builtin(x) 0
#endif
 
#if defined(__cplusplus)
#define __BEGIN_DECLS extern "C" {
#define __END_DECLS }
#else
#define __BEGIN_DECLS
#define __END_DECLS
#endif
 
/*
* This code has been put in place to help reduce the addition of
* compiler specific defines in FreeBSD code. It helps to aid in
* having a compiler-agnostic source tree.
*/
 
#if defined(__GNUC__) || defined(__INTEL_COMPILER)
 
#if __GNUC__ >= 3 || defined(__INTEL_COMPILER)
#define __GNUCLIKE_ASM 3
#define __GNUCLIKE_MATH_BUILTIN_CONSTANTS
#else
#define __GNUCLIKE_ASM 2
#endif
#define __GNUCLIKE___TYPEOF 1
#define __GNUCLIKE___OFFSETOF 1
#define __GNUCLIKE___SECTION 1
 
#ifndef __INTEL_COMPILER
# define __GNUCLIKE_CTOR_SECTION_HANDLING 1
#endif
 
#define __GNUCLIKE_BUILTIN_CONSTANT_P 1
# if defined(__INTEL_COMPILER) && defined(__cplusplus) \
&& __INTEL_COMPILER < 800
# undef __GNUCLIKE_BUILTIN_CONSTANT_P
# endif
 
#if (__GNUC_MINOR__ > 95 || __GNUC__ >= 3) && !defined(__INTEL_COMPILER)
# define __GNUCLIKE_BUILTIN_VARARGS 1
# define __GNUCLIKE_BUILTIN_STDARG 1
# define __GNUCLIKE_BUILTIN_VAALIST 1
#endif
 
#if defined(__GNUC__)
# define __GNUC_VA_LIST_COMPATIBILITY 1
#endif
 
/*
* Compiler memory barriers, specific to gcc and clang.
*/
#if defined(__GNUC__)
#define __compiler_membar() __asm __volatile(" " : : : "memory")
#endif
 
#ifndef __INTEL_COMPILER
# define __GNUCLIKE_BUILTIN_NEXT_ARG 1
# define __GNUCLIKE_MATH_BUILTIN_RELOPS
#endif
 
#define __GNUCLIKE_BUILTIN_MEMCPY 1
 
/* XXX: if __GNUC__ >= 2: not tested everywhere originally, where replaced */
#define __CC_SUPPORTS_INLINE 1
#define __CC_SUPPORTS___INLINE 1
#define __CC_SUPPORTS___INLINE__ 1
 
#define __CC_SUPPORTS___FUNC__ 1
#define __CC_SUPPORTS_WARNING 1
 
#define __CC_SUPPORTS_VARADIC_XXX 1 /* see varargs.h */
 
#define __CC_SUPPORTS_DYNAMIC_ARRAY_INIT 1
 
#endif /* __GNUC__ || __INTEL_COMPILER */
 
/*
* The __CONCAT macro is used to concatenate parts of symbol names, e.g.
* with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
* The __CONCAT macro is a bit tricky to use if it must work in non-ANSI
70,40 → 169,343
* __XSTRING is like __STRING, but it expands any macros in its argument
* first. It is only available with ANSI C.
*/
#if defined(__STDC__) || defined(__cplusplus)
#define __P(protos) protos /* full-blown ANSI C */
#define __CONCAT1(x,y) x ## y
#define __CONCAT(x,y) __CONCAT1(x,y)
#define __STRING(x) #x /* stringify without expanding x */
#define __XSTRING(x) __STRING(x) /* expand x, then stringify */
 
#ifdef __GNUC__
# define __ASMNAME(cname) __XSTRING (__USER_LABEL_PREFIX__) cname
#define __const const /* define reserved names to standard */
#define __signed signed
#define __volatile volatile
#if defined(__cplusplus)
#define __inline inline /* convert to C++ keyword */
#else
#if !(defined(__CC_SUPPORTS___INLINE))
#define __inline /* delete GCC keyword */
#endif /* ! __CC_SUPPORTS___INLINE */
#endif /* !__cplusplus */
 
#else /* !(__STDC__ || __cplusplus) */
#define __P(protos) () /* traditional C preprocessor */
#define __CONCAT(x,y) x/**/y
#define __STRING(x) "x"
 
#if !defined(__CC_SUPPORTS___INLINE)
#define __const /* delete pseudo-ANSI C keywords */
#define __inline
#define __signed
#define __volatile
/*
* In non-ANSI C environments, new programs will want ANSI-only C keywords
* deleted from the program and old programs will want them left alone.
* When using a compiler other than gcc, programs using the ANSI C keywords
* const, inline etc. as normal identifiers should define -DNO_ANSI_KEYWORDS.
* When using "gcc -traditional", we assume that this is the intent; if
* __GNUC__ is defined but __STDC__ is not, we leave the new keywords alone.
*/
#ifndef NO_ANSI_KEYWORDS
#define const /* delete ANSI C keywords */
#define inline
#define signed
#define volatile
#endif /* !NO_ANSI_KEYWORDS */
#endif /* !__CC_SUPPORTS___INLINE */
#endif /* !(__STDC__ || __cplusplus) */
 
/*
* Compiler-dependent macros to help declare dead (non-returning) and
* pure (no side effects) functions, and unused variables. They are
* null except for versions of gcc that are known to support the features
* properly (old versions of gcc-2 supported the dead and pure features
* in a different (wrong) way). If we do not provide an implementation
* for a given compiler, let the compile fail if it is told to use
* a feature that we cannot live without.
*/
#ifdef lint
#define __dead2
#define __pure2
#define __unused
#define __packed
#define __aligned(x)
#define __section(x)
#else
#if !__GNUC_PREREQ__(2, 5) && !defined(__INTEL_COMPILER)
#define __dead2
#define __pure2
#define __unused
#endif
#if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 && __GNUC_MINOR__ < 7 && !defined(__INTEL_COMPILER)
#define __dead2 __attribute__((__noreturn__))
#define __pure2 __attribute__((__const__))
#define __unused
/* XXX Find out what to do for __packed, __aligned and __section */
#endif
#if __GNUC_PREREQ__(2, 7)
#define __dead2 __attribute__((__noreturn__))
#define __pure2 __attribute__((__const__))
#define __unused __attribute__((__unused__))
#define __used __attribute__((__used__))
#define __packed __attribute__((__packed__))
#define __aligned(x) __attribute__((__aligned__(x)))
#define __section(x) __attribute__((__section__(x)))
#endif
#if defined(__INTEL_COMPILER)
#define __dead2 __attribute__((__noreturn__))
#define __pure2 __attribute__((__const__))
#define __unused __attribute__((__unused__))
#define __used __attribute__((__used__))
#define __packed __attribute__((__packed__))
#define __aligned(x) __attribute__((__aligned__(x)))
#define __section(x) __attribute__((__section__(x)))
#endif
#endif
 
#define __ptr_t void *
#define __long_double_t long double
#if !__GNUC_PREREQ__(2, 95)
#define __alignof(x) __offsetof(struct { char __a; x __b; }, __b)
#endif
 
#define __attribute_malloc__
#define __attribute_pure__
#define __attribute_format_strfmon__(a,b)
#define __flexarr [0]
/*
* Keywords added in C11.
*/
 
#ifdef __cplusplus
# define __BEGIN_DECLS extern "C" {
# define __END_DECLS }
#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L
 
#if !__has_extension(c_alignas)
#if (defined(__cplusplus) && __cplusplus >= 201103L) || \
__has_extension(cxx_alignas)
#define _Alignas(x) alignas(x)
#else
# define __BEGIN_DECLS
# define __END_DECLS
/* XXX: Only emulates _Alignas(constant-expression); not _Alignas(type-name). */
#define _Alignas(x) __aligned(x)
#endif
#endif
 
#ifndef __BOUNDED_POINTERS__
# define __bounded /* nothing */
# define __unbounded /* nothing */
# define __ptrvalue /* nothing */
#if defined(__cplusplus) && __cplusplus >= 201103L
#define _Alignof(x) alignof(x)
#else
#define _Alignof(x) __alignof(x)
#endif
 
#ifdef __GNUC__
#if !__has_extension(c_atomic) && !__has_extension(cxx_atomic)
/*
* No native support for _Atomic(). Place object in structure to prevent
* most forms of direct non-atomic access.
*/
#define _Atomic(T) struct { T volatile __val; }
#endif
 
#if defined(__cplusplus) && __cplusplus >= 201103L
#define _Noreturn [[noreturn]]
#else
#define _Noreturn __dead2
#endif
 
#if __GNUC_PREREQ__(4, 6) && !defined(__cplusplus)
/* Do nothing: _Static_assert() works as per C11 */
#elif !__has_extension(c_static_assert)
#if (defined(__cplusplus) && __cplusplus >= 201103L) || \
__has_extension(cxx_static_assert)
#define _Static_assert(x, y) static_assert(x, y)
#elif defined(__COUNTER__)
#define _Static_assert(x, y) __Static_assert(x, __COUNTER__)
#define __Static_assert(x, y) ___Static_assert(x, y)
#define ___Static_assert(x, y) typedef char __assert_ ## y[(x) ? 1 : -1]
#else
#define _Static_assert(x, y) struct __hack
#endif
#endif
 
#if !__has_extension(c_thread_local)
/* XXX: Change this to test against C++11 when clang in base supports it. */
#if /* (defined(__cplusplus) && __cplusplus >= 201103L) || */ \
__has_extension(cxx_thread_local)
#define _Thread_local thread_local
#else
#define _Thread_local __thread
#endif
#endif
 
#endif /* __STDC_VERSION__ || __STDC_VERSION__ < 201112L */
 
/*
* Emulation of C11 _Generic(). Unlike the previously defined C11
* keywords, it is not possible to implement this using exactly the same
* syntax. Therefore implement something similar under the name
* __generic(). Unlike _Generic(), this macro can only distinguish
* between a single type, so it requires nested invocations to
* distinguish multiple cases.
*/
 
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
#define __generic(expr, t, yes, no) \
_Generic(expr, t: yes, default: no)
#elif __GNUC_PREREQ__(3, 1) && !defined(__cplusplus)
#define __generic(expr, t, yes, no) \
__builtin_choose_expr( \
__builtin_types_compatible_p(__typeof(expr), t), yes, no)
#endif
 
#if __GNUC_PREREQ__(2, 96)
#define __malloc_like __attribute__((__malloc__))
#define __pure __attribute__((__pure__))
#else
#define __malloc_like
#define __pure
#endif
 
#if __GNUC_PREREQ__(3, 1) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 800)
#define __always_inline __attribute__((__always_inline__))
#else
#define __always_inline
#endif
 
#if __GNUC_PREREQ__(3, 1)
#define __noinline __attribute__ ((__noinline__))
#else
#define __noinline
#endif
 
#if __GNUC_PREREQ__(3, 3)
#define __nonnull(x) __attribute__((__nonnull__(x)))
#else
#define __nonnull(x)
#endif
 
#if __GNUC_PREREQ__(3, 4)
#define __fastcall __attribute__((__fastcall__))
#else
#define __fastcall
#endif
 
#if __GNUC_PREREQ__(4, 1)
#define __returns_twice __attribute__((__returns_twice__))
#else
#define __returns_twice
#endif
 
/* XXX: should use `#if __STDC_VERSION__ < 199901'. */
#if !__GNUC_PREREQ__(2, 7) && !defined(__INTEL_COMPILER)
#define __func__ NULL
#endif
 
/*
* GCC 2.95 provides `__restrict' as an extension to C90 to support the
* C99-specific `restrict' type qualifier. We happen to use `__restrict' as
* a way to define the `restrict' type qualifier without disturbing older
* software that is unaware of C99 keywords.
*/
#if !(__GNUC__ == 2 && __GNUC_MINOR__ == 95)
#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901 || defined(lint)
#define __restrict
#else
#define __restrict restrict
#endif
#endif
 
/*
* GNU C version 2.96 adds explicit branch prediction so that
* the CPU back-end can hint the processor and also so that
* code blocks can be reordered such that the predicted path
* sees a more linear flow, thus improving cache behavior, etc.
*
* The following two macros provide us with a way to utilize this
* compiler feature. Use __predict_true() if you expect the expression
* to evaluate to true, and __predict_false() if you expect the
* expression to evaluate to false.
*
* A few notes about usage:
*
* * Generally, __predict_false() error condition checks (unless
* you have some _strong_ reason to do otherwise, in which case
* document it), and/or __predict_true() `no-error' condition
* checks, assuming you want to optimize for the no-error case.
*
* * Other than that, if you don't know the likelihood of a test
* succeeding from empirical or other `hard' evidence, don't
* make predictions.
*
* * These are meant to be used in places that are run `a lot'.
* It is wasteful to make predictions in code that is run
* seldomly (e.g. at subsystem initialization time) as the
* basic block reordering that this affects can often generate
* larger code.
*/
#if __GNUC_PREREQ__(2, 96)
#define __predict_true(exp) __builtin_expect((exp), 1)
#define __predict_false(exp) __builtin_expect((exp), 0)
#else
#define __predict_true(exp) (exp)
#define __predict_false(exp) (exp)
#endif
 
#if __GNUC_PREREQ__(4, 2)
#define __hidden __attribute__((__visibility__("hidden")))
#define __exported __attribute__((__visibility__("default")))
#else
#define __hidden
#define __exported
#endif
 
#define __offsetof(type, field) offsetof(type, field)
#define __rangeof(type, start, end) \
(__offsetof(type, end) - __offsetof(type, start))
 
/*
* Given the pointer x to the member m of the struct s, return
* a pointer to the containing structure. When using GCC, we first
* assign pointer x to a local variable, to check that its type is
* compatible with member m.
*/
#if __GNUC_PREREQ__(3, 1)
#define __containerof(x, s, m) ({ \
const volatile __typeof__(((s *)0)->m) *__x = (x); \
__DEQUALIFY(s *, (const volatile char *)__x - __offsetof(s, m));\
})
#else
#define __containerof(x, s, m) \
__DEQUALIFY(s *, (const volatile char *)(x) - __offsetof(s, m))
#endif
 
/*
* Compiler-dependent macros to declare that functions take printf-like
* or scanf-like arguments. They are null except for versions of gcc
* that are known to support the features properly (old versions of gcc-2
* didn't permit keeping the keywords out of the application namespace).
*/
#if !__GNUC_PREREQ__(2, 7) && !defined(__INTEL_COMPILER)
#define __printflike(fmtarg, firstvararg)
#define __scanflike(fmtarg, firstvararg)
#define __format_arg(fmtarg)
#define __strfmonlike(fmtarg, firstvararg)
#define __strftimelike(fmtarg, firstvararg)
#else
#define __printflike(fmtarg, firstvararg) \
__attribute__((__format__ (__printf__, fmtarg, firstvararg)))
#define __scanflike(fmtarg, firstvararg) \
__attribute__((__format__ (__scanf__, fmtarg, firstvararg)))
#define __format_arg(fmtarg) __attribute__((__format_arg__ (fmtarg)))
#define __strfmonlike(fmtarg, firstvararg) \
__attribute__((__format__ (__strfmon__, fmtarg, firstvararg)))
#define __strftimelike(fmtarg, firstvararg) \
__attribute__((__format__ (__strftime__, fmtarg, firstvararg)))
#endif
 
/* Compiler-dependent macros that rely on FreeBSD-specific extensions. */
#if defined(__FreeBSD_cc_version) && __FreeBSD_cc_version >= 300001 && \
defined(__GNUC__) && !defined(__INTEL_COMPILER)
#define __printf0like(fmtarg, firstvararg) \
__attribute__((__format__ (__printf0__, fmtarg, firstvararg)))
#else
#define __printf0like(fmtarg, firstvararg)
#endif
 
#if defined(__GNUC__) || defined(__INTEL_COMPILER)
#ifndef __INTEL_COMPILER
#define __strong_reference(sym,aliassym) \
extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)));
extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)))
#endif
#ifdef __ELF__
#ifdef __STDC__
#define __weak_reference(sym,alias) \
113,6 → 515,10
__asm__(".section .gnu.warning." #sym); \
__asm__(".asciz \"" msg "\""); \
__asm__(".previous")
#define __sym_compat(sym,impl,verid) \
__asm__(".symver " #impl ", " #sym "@" #verid)
#define __sym_default(sym,impl,verid) \
__asm__(".symver " #impl ", " #sym "@@" #verid)
#else
#define __weak_reference(sym,alias) \
__asm__(".weak alias"); \
121,6 → 527,10
__asm__(".section .gnu.warning.sym"); \
__asm__(".asciz \"msg\""); \
__asm__(".previous")
#define __sym_compat(sym,impl,verid) \
__asm__(".symver impl, sym@verid")
#define __sym_default(impl,sym,verid) \
__asm__(".symver impl, sym@@verid")
#endif /* __STDC__ */
#else /* !__ELF__ */
#ifdef __STDC__
139,6 → 549,162
__asm__(".stabs \"_/**/sym\",1,0,0,0")
#endif /* __STDC__ */
#endif /* __ELF__ */
#endif /* __GNUC__ */
#endif /* __GNUC__ || __INTEL_COMPILER */
 
#endif /* _SYS_CDEFS_H */
#ifndef __FBSDID
#define __FBSDID(s) struct __hack
#endif
 
#ifndef __RCSID
#define __RCSID(s) struct __hack
#endif
 
#ifndef __RCSID_SOURCE
#define __RCSID_SOURCE(s) struct __hack
#endif
 
#ifndef __SCCSID
#define __SCCSID(s) struct __hack
#endif
 
#ifndef __COPYRIGHT
#define __COPYRIGHT(s) struct __hack
#endif
 
#ifndef __DECONST
#define __DECONST(type, var) ((type)(__uintptr_t)(const void *)(var))
#endif
 
#ifndef __DEVOLATILE
#define __DEVOLATILE(type, var) ((type)(__uintptr_t)(volatile void *)(var))
#endif
 
#ifndef __DEQUALIFY
#define __DEQUALIFY(type, var) ((type)(__uintptr_t)(const volatile void *)(var))
#endif
 
/*-
* The following definitions are an extension of the behavior originally
* implemented in <sys/_posix.h>, but with a different level of granularity.
* POSIX.1 requires that the macros we test be defined before any standard
* header file is included.
*
* Here's a quick run-down of the versions:
* defined(_POSIX_SOURCE) 1003.1-1988
* _POSIX_C_SOURCE == 1 1003.1-1990
* _POSIX_C_SOURCE == 2 1003.2-1992 C Language Binding Option
* _POSIX_C_SOURCE == 199309 1003.1b-1993
* _POSIX_C_SOURCE == 199506 1003.1c-1995, 1003.1i-1995,
* and the omnibus ISO/IEC 9945-1: 1996
* _POSIX_C_SOURCE == 200112 1003.1-2001
* _POSIX_C_SOURCE == 200809 1003.1-2008
*
* In addition, the X/Open Portability Guide, which is now the Single UNIX
* Specification, defines a feature-test macro which indicates the version of
* that specification, and which subsumes _POSIX_C_SOURCE.
*
* Our macros begin with two underscores to avoid namespace screwage.
*/
 
/* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */
#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 1
#undef _POSIX_C_SOURCE /* Probably illegal, but beyond caring now. */
#define _POSIX_C_SOURCE 199009
#endif
 
/* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */
#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE == 2
#undef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 199209
#endif
 
/* Deal with various X/Open Portability Guides and Single UNIX Spec. */
#ifdef _XOPEN_SOURCE
#if _XOPEN_SOURCE - 0 >= 700
#define __XSI_VISIBLE 700
#undef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 200809
#elif _XOPEN_SOURCE - 0 >= 600
#define __XSI_VISIBLE 600
#undef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 200112
#elif _XOPEN_SOURCE - 0 >= 500
#define __XSI_VISIBLE 500
#undef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 199506
#endif
#endif
 
/*
* Deal with all versions of POSIX. The ordering relative to the tests above is
* important.
*/
#if defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE)
#define _POSIX_C_SOURCE 198808
#endif
#ifdef _POSIX_C_SOURCE
#if _POSIX_C_SOURCE >= 200809
#define __POSIX_VISIBLE 200809
#define __ISO_C_VISIBLE 1999
#elif _POSIX_C_SOURCE >= 200112
#define __POSIX_VISIBLE 200112
#define __ISO_C_VISIBLE 1999
#elif _POSIX_C_SOURCE >= 199506
#define __POSIX_VISIBLE 199506
#define __ISO_C_VISIBLE 1990
#elif _POSIX_C_SOURCE >= 199309
#define __POSIX_VISIBLE 199309
#define __ISO_C_VISIBLE 1990
#elif _POSIX_C_SOURCE >= 199209
#define __POSIX_VISIBLE 199209
#define __ISO_C_VISIBLE 1990
#elif _POSIX_C_SOURCE >= 199009
#define __POSIX_VISIBLE 199009
#define __ISO_C_VISIBLE 1990
#else
#define __POSIX_VISIBLE 198808
#define __ISO_C_VISIBLE 0
#endif /* _POSIX_C_SOURCE */
#else
/*-
* Deal with _ANSI_SOURCE:
* If it is defined, and no other compilation environment is explicitly
* requested, then define our internal feature-test macros to zero. This
* makes no difference to the preprocessor (undefined symbols in preprocessing
* expressions are defined to have value zero), but makes it more convenient for
* a test program to print out the values.
*
* If a program mistakenly defines _ANSI_SOURCE and some other macro such as
* _POSIX_C_SOURCE, we will assume that it wants the broader compilation
* environment (and in fact we will never get here).
*/
#if defined(_ANSI_SOURCE) /* Hide almost everything. */
#define __POSIX_VISIBLE 0
#define __XSI_VISIBLE 0
#define __BSD_VISIBLE 0
#define __ISO_C_VISIBLE 1990
#elif defined(_C99_SOURCE) /* Localism to specify strict C99 env. */
#define __POSIX_VISIBLE 0
#define __XSI_VISIBLE 0
#define __BSD_VISIBLE 0
#define __ISO_C_VISIBLE 1999
#elif defined(_C11_SOURCE) /* Localism to specify strict C11 env. */
#define __POSIX_VISIBLE 0
#define __XSI_VISIBLE 0
#define __BSD_VISIBLE 0
#define __ISO_C_VISIBLE 2011
#elif defined(_GNU_SOURCE) /* Everything and the kitchen sink. */
#define __POSIX_VISIBLE 200809
#define __XSI_VISIBLE 700
#define __BSD_VISIBLE 1
#define __ISO_C_VISIBLE 2011
#define __GNU_VISIBLE 1
#else /* Default: everything except __GNU_VISIBLE. */
#define __POSIX_VISIBLE 200809
#define __XSI_VISIBLE 700
#define __BSD_VISIBLE 1
#define __ISO_C_VISIBLE 2011
#endif
#endif
 
#endif /* !_SYS_CDEFS_H_ */
/contrib/sdk/sources/newlib/libc/include/sys/config.h
4,6 → 4,10
#include <machine/ieeefp.h> /* floating point macros */
#include <sys/features.h> /* POSIX defs */
 
#ifdef __aarch64__
#define MALLOC_ALIGNMENT 16
#endif
 
/* exceptions first */
#if defined(__H8500__) || defined(__W65__)
#define __SMALL_BITFIELDS
141,6 → 145,21
#define __BUFSIZ__ 16
#define _REENT_SMALL
#endif
 
#if defined __MSP430__
#ifndef _REENT_SMALL
#define _REENT_SMALL
#endif
 
#define __SMALL_BITFIELDS
 
#ifdef __MSP430X_LARGE__
#define _POINTER_INT long
#else
#define _POINTER_INT int
#endif
#endif
 
#ifdef __m32c__
#define __SMALL_BITFIELDS
#undef INT_MAX
213,6 → 232,8
#if defined(__rtems__)
#define __FILENAME_MAX__ 255
#define _READ_WRITE_RETURN_TYPE _ssize_t
#define __DYNAMIC_REENT__
#define _REENT_GLOBAL_ATEXIT
#endif
 
#ifndef __EXPORT
229,6 → 250,12
#ifndef _READ_WRITE_RETURN_TYPE
#define _READ_WRITE_RETURN_TYPE int
#endif
/* Define `count' parameter of read/write routines. In POSIX, the `count'
parameter is "size_t" but legacy newlib code has been using "int" for some
time. If not specified, "int" is defaulted. */
#ifndef _READ_WRITE_BUFSIZE_TYPE
#define _READ_WRITE_BUFSIZE_TYPE int
#endif
 
#ifndef __WCHAR_MAX__
#if __INT_MAX__ == 32767 || defined (_WIN32)
/contrib/sdk/sources/newlib/libc/include/sys/features.h
15,7 → 15,7
* OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
* SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
*
* $Id: features.h,v 1.27 2011/07/20 19:41:15 yselkowitz Exp $
* $Id: features.h,v 1.30 2013/04/23 09:42:25 corinna Exp $
*/
 
#ifndef _SYS_FEATURES_H
25,6 → 25,18
extern "C" {
#endif
 
/* Macro to test version of GCC. Returns 0 for non-GCC or too old GCC. */
#ifndef __GNUC_PREREQ
# if defined __GNUC__ && defined __GNUC_MINOR__
# define __GNUC_PREREQ(maj, min) \
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
# else
# define __GNUC_PREREQ(maj, min) 0
# endif
#endif /* __GNUC_PREREQ */
/* Version with trailing underscores for BSD compatibility. */
#define __GNUC_PREREQ__(ma, mi) __GNUC_PREREQ(ma, mi)
 
/* RTEMS adheres to POSIX -- 1003.1b with some features from annexes. */
 
#ifdef __rtems__
161,12 → 173,18
#define _POSIX2_SW_DEV 200112L
#define _POSIX2_UPE 200112L
#define _POSIX_V6_ILP32_OFF32 -1
#ifdef __LP64__
#define _POSIX_V6_ILP32_OFFBIG -1
#define _POSIX_V6_LP64_OFF64 1
#define _POSIX_V6_LPBIG_OFFBIG 1
#else
#define _POSIX_V6_ILP32_OFFBIG 1
#define _POSIX_V6_LP64_OFF64 -1
#define _POSIX_V6_LPBIG_OFFBIG -1
#endif
#define _XBS5_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
#define _POSIX_V6_ILP32_OFFBIG 1
#define _XBS5_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
#define _POSIX_V6_LP64_OFF64 -1
#define _XBS5_LP64_OFF64 _POSIX_V6_LP64_OFF64
#define _POSIX_V6_LPBIG_OFFBIG -1
#define _XBS5_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
#define _XOPEN_CRYPT 1
#define _XOPEN_ENH_I18N 1
/contrib/sdk/sources/newlib/libc/include/sys/param.h
6,6 → 6,7
# define _SYS_PARAM_H
 
#include <sys/config.h>
#include <sys/syslimits.h>
#include <machine/endian.h>
#include <machine/param.h>
 
19,6 → 20,8
# define PATHSIZE (1024)
#endif
 
#define MAXPATHLEN PATH_MAX
 
#define MAX(a,b) ((a) > (b) ? (a) : (b))
#define MIN(a,b) ((a) < (b) ? (a) : (b))
 
/contrib/sdk/sources/newlib/libc/include/sys/queue.h
1,4 → 1,4
/*
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
*
10,10 → 10,6
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
31,13 → 27,13
* SUCH DAMAGE.
*
* @(#)queue.h 8.5 (Berkeley) 8/20/94
* $FreeBSD: src/sys/sys/queue.h,v 1.48 2002/04/17 14:00:37 tmm Exp $
* $FreeBSD$
*/
 
#ifndef _SYS_QUEUE_H_
#define _SYS_QUEUE_H_
 
#include <machine/ansi.h> /* for __offsetof */
#include <sys/cdefs.h>
 
/*
* This file defines four types of data structures: singly-linked lists,
69,7 → 65,7
* so that an arbitrary element can be removed without a need to
* traverse the list. New elements can be added to the list before
* or after an existing element or at the head of the list. A list
* may only be traversed in the forward direction.
* may be traversed in either direction.
*
* A tail queue is headed by a pair of pointers, one to the head of the
* list and the other to the tail of the list. The elements are doubly
89,20 → 85,60
* _EMPTY + + + +
* _FIRST + + + +
* _NEXT + + + +
* _PREV - - - +
* _PREV - + - +
* _LAST - - + +
* _FOREACH + + + +
* _FOREACH_SAFE + + + +
* _FOREACH_REVERSE - - - +
* _FOREACH_REVERSE_SAFE - - - +
* _INSERT_HEAD + + + +
* _INSERT_BEFORE - + - +
* _INSERT_AFTER + + + +
* _INSERT_TAIL - - + +
* _CONCAT - - + +
* _REMOVE_AFTER + - + -
* _REMOVE_HEAD + - + -
* _REMOVE + + + +
* _SWAP + + + +
*
*/
#ifdef QUEUE_MACRO_DEBUG
/* Store the last 2 places the queue element or head was altered */
struct qm_trace {
unsigned long lastline;
unsigned long prevline;
const char *lastfile;
const char *prevfile;
};
 
#define TRACEBUF struct qm_trace trace;
#define TRACEBUF_INITIALIZER { __FILE__, __LINE__, NULL, 0 } ,
#define TRASHIT(x) do {(x) = (void *)-1;} while (0)
#define QMD_SAVELINK(name, link) void **name = (void *)&(link)
 
#define QMD_TRACE_HEAD(head) do { \
(head)->trace.prevline = (head)->trace.lastline; \
(head)->trace.prevfile = (head)->trace.lastfile; \
(head)->trace.lastline = __LINE__; \
(head)->trace.lastfile = __FILE__; \
} while (0)
 
#define QMD_TRACE_ELEM(elem) do { \
(elem)->trace.prevline = (elem)->trace.lastline; \
(elem)->trace.prevfile = (elem)->trace.lastfile; \
(elem)->trace.lastline = __LINE__; \
(elem)->trace.lastfile = __FILE__; \
} while (0)
 
#else
#define QMD_TRACE_ELEM(elem)
#define QMD_TRACE_HEAD(head)
#define QMD_SAVELINK(name, link)
#define TRACEBUF
#define TRACEBUF_INITIALIZER
#define TRASHIT(x)
#endif /* QUEUE_MACRO_DEBUG */
 
/*
* Singly-linked List declarations.
*/
131,6 → 167,16
(var); \
(var) = SLIST_NEXT((var), field))
 
#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
for ((var) = SLIST_FIRST((head)); \
(var) && ((tvar) = SLIST_NEXT((var), field), 1); \
(var) = (tvar))
 
#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
for ((varp) = &SLIST_FIRST((head)); \
((var) = *(varp)) != NULL; \
(varp) = &SLIST_NEXT((var), field))
 
#define SLIST_INIT(head) do { \
SLIST_FIRST((head)) = NULL; \
} while (0)
148,6 → 194,7
#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
 
#define SLIST_REMOVE(head, elm, type, field) do { \
QMD_SAVELINK(oldnext, (elm)->field.sle_next); \
if (SLIST_FIRST((head)) == (elm)) { \
SLIST_REMOVE_HEAD((head), field); \
} \
155,15 → 202,26
struct type *curelm = SLIST_FIRST((head)); \
while (SLIST_NEXT(curelm, field) != (elm)) \
curelm = SLIST_NEXT(curelm, field); \
SLIST_NEXT(curelm, field) = \
SLIST_NEXT(SLIST_NEXT(curelm, field), field); \
SLIST_REMOVE_AFTER(curelm, field); \
} \
TRASHIT(*oldnext); \
} while (0)
 
#define SLIST_REMOVE_AFTER(elm, field) do { \
SLIST_NEXT(elm, field) = \
SLIST_NEXT(SLIST_NEXT(elm, field), field); \
} while (0)
 
#define SLIST_REMOVE_HEAD(head, field) do { \
SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \
} while (0)
 
#define SLIST_SWAP(head1, head2, type) do { \
struct type *swap_first = SLIST_FIRST(head1); \
SLIST_FIRST(head1) = SLIST_FIRST(head2); \
SLIST_FIRST(head2) = swap_first; \
} while (0)
 
/*
* Singly-linked Tail queue declarations.
*/
201,6 → 259,12
(var); \
(var) = STAILQ_NEXT((var), field))
 
 
#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
for ((var) = STAILQ_FIRST((head)); \
(var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
(var) = (tvar))
 
#define STAILQ_INIT(head) do { \
STAILQ_FIRST((head)) = NULL; \
(head)->stqh_last = &STAILQ_FIRST((head)); \
225,14 → 289,13
} while (0)
 
#define STAILQ_LAST(head, type, field) \
(STAILQ_EMPTY((head)) ? \
NULL : \
((struct type *) \
((char *)((head)->stqh_last) - __offsetof(struct type, field))))
(STAILQ_EMPTY((head)) ? NULL : \
__containerof((head)->stqh_last, struct type, field.stqe_next))
 
#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
 
#define STAILQ_REMOVE(head, elm, type, field) do { \
QMD_SAVELINK(oldnext, (elm)->field.stqe_next); \
if (STAILQ_FIRST((head)) == (elm)) { \
STAILQ_REMOVE_HEAD((head), field); \
} \
240,12 → 303,17
struct type *curelm = STAILQ_FIRST((head)); \
while (STAILQ_NEXT(curelm, field) != (elm)) \
curelm = STAILQ_NEXT(curelm, field); \
if ((STAILQ_NEXT(curelm, field) = \
STAILQ_NEXT(STAILQ_NEXT(curelm, field), field)) == NULL)\
(head)->stqh_last = &STAILQ_NEXT((curelm), field);\
STAILQ_REMOVE_AFTER(head, curelm, field); \
} \
TRASHIT(*oldnext); \
} while (0)
 
#define STAILQ_REMOVE_AFTER(head, elm, field) do { \
if ((STAILQ_NEXT(elm, field) = \
STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
} while (0)
 
#define STAILQ_REMOVE_HEAD(head, field) do { \
if ((STAILQ_FIRST((head)) = \
STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \
257,6 → 325,20
(head)->stqh_last = &STAILQ_FIRST((head)); \
} while (0)
 
#define STAILQ_SWAP(head1, head2, type) do { \
struct type *swap_first = STAILQ_FIRST(head1); \
struct type **swap_last = (head1)->stqh_last; \
STAILQ_FIRST(head1) = STAILQ_FIRST(head2); \
(head1)->stqh_last = (head2)->stqh_last; \
STAILQ_FIRST(head2) = swap_first; \
(head2)->stqh_last = swap_last; \
if (STAILQ_EMPTY(head1)) \
(head1)->stqh_last = &STAILQ_FIRST(head1); \
if (STAILQ_EMPTY(head2)) \
(head2)->stqh_last = &STAILQ_FIRST(head2); \
} while (0)
 
 
/*
* List declarations.
*/
278,6 → 360,31
* List functions.
*/
 
#if (defined(_KERNEL) && defined(INVARIANTS))
#define QMD_LIST_CHECK_HEAD(head, field) do { \
if (LIST_FIRST((head)) != NULL && \
LIST_FIRST((head))->field.le_prev != \
&LIST_FIRST((head))) \
panic("Bad list head %p first->prev != head", (head)); \
} while (0)
 
#define QMD_LIST_CHECK_NEXT(elm, field) do { \
if (LIST_NEXT((elm), field) != NULL && \
LIST_NEXT((elm), field)->field.le_prev != \
&((elm)->field.le_next)) \
panic("Bad link elm %p next->prev != elm", (elm)); \
} while (0)
 
#define QMD_LIST_CHECK_PREV(elm, field) do { \
if (*(elm)->field.le_prev != (elm)) \
panic("Bad link elm %p prev->next != elm", (elm)); \
} while (0)
#else
#define QMD_LIST_CHECK_HEAD(head, field)
#define QMD_LIST_CHECK_NEXT(elm, field)
#define QMD_LIST_CHECK_PREV(elm, field)
#endif /* (_KERNEL && INVARIANTS) */
 
#define LIST_EMPTY(head) ((head)->lh_first == NULL)
 
#define LIST_FIRST(head) ((head)->lh_first)
287,11 → 394,17
(var); \
(var) = LIST_NEXT((var), field))
 
#define LIST_FOREACH_SAFE(var, head, field, tvar) \
for ((var) = LIST_FIRST((head)); \
(var) && ((tvar) = LIST_NEXT((var), field), 1); \
(var) = (tvar))
 
#define LIST_INIT(head) do { \
LIST_FIRST((head)) = NULL; \
} while (0)
 
#define LIST_INSERT_AFTER(listelm, elm, field) do { \
QMD_LIST_CHECK_NEXT(listelm, field); \
if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\
LIST_NEXT((listelm), field)->field.le_prev = \
&LIST_NEXT((elm), field); \
300,6 → 413,7
} while (0)
 
#define LIST_INSERT_BEFORE(listelm, elm, field) do { \
QMD_LIST_CHECK_PREV(listelm, field); \
(elm)->field.le_prev = (listelm)->field.le_prev; \
LIST_NEXT((elm), field) = (listelm); \
*(listelm)->field.le_prev = (elm); \
307,6 → 421,7
} while (0)
 
#define LIST_INSERT_HEAD(head, elm, field) do { \
QMD_LIST_CHECK_HEAD((head), field); \
if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \
LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\
LIST_FIRST((head)) = (elm); \
315,13 → 430,33
 
#define LIST_NEXT(elm, field) ((elm)->field.le_next)
 
#define LIST_PREV(elm, head, type, field) \
((elm)->field.le_prev == &LIST_FIRST((head)) ? NULL : \
__containerof((elm)->field.le_prev, struct type, field.le_next))
 
#define LIST_REMOVE(elm, field) do { \
QMD_SAVELINK(oldnext, (elm)->field.le_next); \
QMD_SAVELINK(oldprev, (elm)->field.le_prev); \
QMD_LIST_CHECK_NEXT(elm, field); \
QMD_LIST_CHECK_PREV(elm, field); \
if (LIST_NEXT((elm), field) != NULL) \
LIST_NEXT((elm), field)->field.le_prev = \
(elm)->field.le_prev; \
*(elm)->field.le_prev = LIST_NEXT((elm), field); \
TRASHIT(*oldnext); \
TRASHIT(*oldprev); \
} while (0)
 
#define LIST_SWAP(head1, head2, type, field) do { \
struct type *swap_tmp = LIST_FIRST((head1)); \
LIST_FIRST((head1)) = LIST_FIRST((head2)); \
LIST_FIRST((head2)) = swap_tmp; \
if ((swap_tmp = LIST_FIRST((head1))) != NULL) \
swap_tmp->field.le_prev = &LIST_FIRST((head1)); \
if ((swap_tmp = LIST_FIRST((head2))) != NULL) \
swap_tmp->field.le_prev = &LIST_FIRST((head2)); \
} while (0)
 
/*
* Tail queue declarations.
*/
329,20 → 464,53
struct name { \
struct type *tqh_first; /* first element */ \
struct type **tqh_last; /* addr of last next element */ \
TRACEBUF \
}
 
#define TAILQ_HEAD_INITIALIZER(head) \
{ NULL, &(head).tqh_first }
{ NULL, &(head).tqh_first, TRACEBUF_INITIALIZER }
 
#define TAILQ_ENTRY(type) \
struct { \
struct type *tqe_next; /* next element */ \
struct type **tqe_prev; /* address of previous next element */ \
TRACEBUF \
}
 
/*
* Tail queue functions.
*/
#if (defined(_KERNEL) && defined(INVARIANTS))
#define QMD_TAILQ_CHECK_HEAD(head, field) do { \
if (!TAILQ_EMPTY(head) && \
TAILQ_FIRST((head))->field.tqe_prev != \
&TAILQ_FIRST((head))) \
panic("Bad tailq head %p first->prev != head", (head)); \
} while (0)
 
#define QMD_TAILQ_CHECK_TAIL(head, field) do { \
if (*(head)->tqh_last != NULL) \
panic("Bad tailq NEXT(%p->tqh_last) != NULL", (head)); \
} while (0)
 
#define QMD_TAILQ_CHECK_NEXT(elm, field) do { \
if (TAILQ_NEXT((elm), field) != NULL && \
TAILQ_NEXT((elm), field)->field.tqe_prev != \
&((elm)->field.tqe_next)) \
panic("Bad link elm %p next->prev != elm", (elm)); \
} while (0)
 
#define QMD_TAILQ_CHECK_PREV(elm, field) do { \
if (*(elm)->field.tqe_prev != (elm)) \
panic("Bad link elm %p prev->next != elm", (elm)); \
} while (0)
#else
#define QMD_TAILQ_CHECK_HEAD(head, field)
#define QMD_TAILQ_CHECK_TAIL(head, headname)
#define QMD_TAILQ_CHECK_NEXT(elm, field)
#define QMD_TAILQ_CHECK_PREV(elm, field)
#endif /* (_KERNEL && INVARIANTS) */
 
#define TAILQ_CONCAT(head1, head2, field) do { \
if (!TAILQ_EMPTY(head2)) { \
*(head1)->tqh_last = (head2)->tqh_first; \
349,6 → 517,8
(head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
(head1)->tqh_last = (head2)->tqh_last; \
TAILQ_INIT((head2)); \
QMD_TRACE_HEAD(head1); \
QMD_TRACE_HEAD(head2); \
} \
} while (0)
 
361,34 → 531,54
(var); \
(var) = TAILQ_NEXT((var), field))
 
#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
for ((var) = TAILQ_FIRST((head)); \
(var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
(var) = (tvar))
 
#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
for ((var) = TAILQ_LAST((head), headname); \
(var); \
(var) = TAILQ_PREV((var), headname, field))
 
#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
for ((var) = TAILQ_LAST((head), headname); \
(var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
(var) = (tvar))
 
#define TAILQ_INIT(head) do { \
TAILQ_FIRST((head)) = NULL; \
(head)->tqh_last = &TAILQ_FIRST((head)); \
QMD_TRACE_HEAD(head); \
} while (0)
 
#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
QMD_TAILQ_CHECK_NEXT(listelm, field); \
if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\
TAILQ_NEXT((elm), field)->field.tqe_prev = \
&TAILQ_NEXT((elm), field); \
else \
else { \
(head)->tqh_last = &TAILQ_NEXT((elm), field); \
QMD_TRACE_HEAD(head); \
} \
TAILQ_NEXT((listelm), field) = (elm); \
(elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \
QMD_TRACE_ELEM(&(elm)->field); \
QMD_TRACE_ELEM(&listelm->field); \
} while (0)
 
#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
QMD_TAILQ_CHECK_PREV(listelm, field); \
(elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
TAILQ_NEXT((elm), field) = (listelm); \
*(listelm)->field.tqe_prev = (elm); \
(listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \
QMD_TRACE_ELEM(&(elm)->field); \
QMD_TRACE_ELEM(&listelm->field); \
} while (0)
 
#define TAILQ_INSERT_HEAD(head, elm, field) do { \
QMD_TAILQ_CHECK_HEAD(head, field); \
if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \
TAILQ_FIRST((head))->field.tqe_prev = \
&TAILQ_NEXT((elm), field); \
396,13 → 586,18
(head)->tqh_last = &TAILQ_NEXT((elm), field); \
TAILQ_FIRST((head)) = (elm); \
(elm)->field.tqe_prev = &TAILQ_FIRST((head)); \
QMD_TRACE_HEAD(head); \
QMD_TRACE_ELEM(&(elm)->field); \
} while (0)
 
#define TAILQ_INSERT_TAIL(head, elm, field) do { \
QMD_TAILQ_CHECK_TAIL(head, field); \
TAILQ_NEXT((elm), field) = NULL; \
(elm)->field.tqe_prev = (head)->tqh_last; \
*(head)->tqh_last = (elm); \
(head)->tqh_last = &TAILQ_NEXT((elm), field); \
QMD_TRACE_HEAD(head); \
QMD_TRACE_ELEM(&(elm)->field); \
} while (0)
 
#define TAILQ_LAST(head, headname) \
414,14 → 609,39
(*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
 
#define TAILQ_REMOVE(head, elm, field) do { \
QMD_SAVELINK(oldnext, (elm)->field.tqe_next); \
QMD_SAVELINK(oldprev, (elm)->field.tqe_prev); \
QMD_TAILQ_CHECK_NEXT(elm, field); \
QMD_TAILQ_CHECK_PREV(elm, field); \
if ((TAILQ_NEXT((elm), field)) != NULL) \
TAILQ_NEXT((elm), field)->field.tqe_prev = \
(elm)->field.tqe_prev; \
else \
else { \
(head)->tqh_last = (elm)->field.tqe_prev; \
QMD_TRACE_HEAD(head); \
} \
*(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \
TRASHIT(*oldnext); \
TRASHIT(*oldprev); \
QMD_TRACE_ELEM(&(elm)->field); \
} while (0)
 
#define TAILQ_SWAP(head1, head2, type, field) do { \
struct type *swap_first = (head1)->tqh_first; \
struct type **swap_last = (head1)->tqh_last; \
(head1)->tqh_first = (head2)->tqh_first; \
(head1)->tqh_last = (head2)->tqh_last; \
(head2)->tqh_first = swap_first; \
(head2)->tqh_last = swap_last; \
if ((swap_first = (head1)->tqh_first) != NULL) \
swap_first->field.tqe_prev = &(head1)->tqh_first; \
else \
(head1)->tqh_last = &(head1)->tqh_first; \
if ((swap_first = (head2)->tqh_first) != NULL) \
swap_first->field.tqe_prev = &(head2)->tqh_first; \
else \
(head2)->tqh_last = &(head2)->tqh_first; \
} while (0)
 
#ifdef _KERNEL
 
/contrib/sdk/sources/newlib/libc/include/sys/reent.h
11,6 → 11,7
#define _SYS_REENT_H_
 
#include <_ansi.h>
#include <stddef.h>
#include <sys/_types.h>
 
#define _NULL 0
85,6 → 86,7
void (*_fns[_ATEXIT_SIZE])(void); /* the table itself */
struct _on_exit_args * _on_exit_args_ptr;
};
# define _ATEXIT_INIT {_NULL, 0, {_NULL}, _NULL}
#else
struct _atexit {
struct _atexit *_next; /* next in list */
93,8 → 95,16
void (*_fns[_ATEXIT_SIZE])(void); /* the table itself */
struct _on_exit_args _on_exit_args;
};
# define _ATEXIT_INIT {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}}
#endif
 
#ifdef _REENT_GLOBAL_ATEXIT
# define _REENT_INIT_ATEXIT
#else
# define _REENT_INIT_ATEXIT \
_NULL, _ATEXIT_INIT,
#endif
 
/*
* Stdio buffers.
*
183,9 → 193,10
_PTR _cookie; /* cookie passed to io functions */
 
_READ_WRITE_RETURN_TYPE _EXFNPTR(_read, (struct _reent *, _PTR,
char *, int));
char *, _READ_WRITE_BUFSIZE_TYPE));
_READ_WRITE_RETURN_TYPE _EXFNPTR(_write, (struct _reent *, _PTR,
const char *, int));
const char *,
_READ_WRITE_BUFSIZE_TYPE));
_fpos_t _EXFNPTR(_seek, (struct _reent *, _PTR, _fpos_t, int));
int _EXFNPTR(_close, (struct _reent *, _PTR));
 
203,7 → 214,7
 
/* Unix stdio files get aligned to block boundaries on fseek() */
int _blksize; /* stat.st_blksize (may be != _bf._size) */
int _offset; /* current lseek offset */
_off_t _offset; /* current lseek offset */
 
#ifndef _REENT_SMALL
struct _reent *_data; /* Here for binary compatibility? Remove? */
238,9 → 249,10
_PTR _cookie; /* cookie passed to io functions */
 
_READ_WRITE_RETURN_TYPE _EXFNPTR(_read, (struct _reent *, _PTR,
char *, int));
char *, _READ_WRITE_BUFSIZE_TYPE));
_READ_WRITE_RETURN_TYPE _EXFNPTR(_write, (struct _reent *, _PTR,
const char *, int));
const char *,
_READ_WRITE_BUFSIZE_TYPE));
_fpos_t _EXFNPTR(_seek, (struct _reent *, _PTR, _fpos_t, int));
int _EXFNPTR(_close, (struct _reent *, _PTR));
 
353,7 → 365,7
_mbstate_t _wcsrtombs_state;
};
 
/* This version of _reent is layed our with "int"s in pairs, to help
/* This version of _reent is laid out with "int"s in pairs, to help
* ports with 16-bit int's but 32-bit pointers, align nicely. */
struct _reent
{
392,9 → 404,11
/* signal info */
void (**(_sig_func))(int);
 
# ifndef _REENT_GLOBAL_ATEXIT
/* atexit stuff */
struct _atexit *_atexit;
struct _atexit _atexit0;
# endif
 
struct _glue __sglue; /* root of glue chain */
__FILE *__sf; /* file descriptors */
425,8 → 439,7
_NULL, \
_NULL, \
_NULL, \
_NULL, \
{_NULL, 0, {_NULL}, _NULL}, \
_REENT_INIT_ATEXIT \
{_NULL, 0, _NULL}, \
_NULL, \
_NULL, \
434,35 → 447,11
}
 
#define _REENT_INIT_PTR(var) \
{ (var)->_stdin = (__FILE *)&__sf_fake_stdin; \
{ memset((var), 0, sizeof(*(var))); \
(var)->_stdin = (__FILE *)&__sf_fake_stdin; \
(var)->_stdout = (__FILE *)&__sf_fake_stdout; \
(var)->_stderr = (__FILE *)&__sf_fake_stderr; \
(var)->_errno = 0; \
(var)->_inc = 0; \
(var)->_emergency = _NULL; \
(var)->__sdidinit = 0; \
(var)->_current_category = 0; \
(var)->_current_locale = "C"; \
(var)->_mp = _NULL; \
(var)->__cleanup = _NULL; \
(var)->_gamma_signgam = 0; \
(var)->_cvtlen = 0; \
(var)->_cvtbuf = _NULL; \
(var)->_r48 = _NULL; \
(var)->_localtime_buf = _NULL; \
(var)->_asctime_buf = _NULL; \
(var)->_sig_func = _NULL; \
(var)->_atexit = _NULL; \
(var)->_atexit0._next = _NULL; \
(var)->_atexit0._ind = 0; \
(var)->_atexit0._fns[0] = _NULL; \
(var)->_atexit0._on_exit_args_ptr = _NULL; \
(var)->__sglue._next = _NULL; \
(var)->__sglue._niobs = 0; \
(var)->__sglue._iobs = _NULL; \
(var)->__sf = 0; \
(var)->_misc = _NULL; \
(var)->_signal_buf = _NULL; \
}
 
/* Only built the assert() calls if we are built with debugging. */
641,9 → 630,11
} _unused;
} _new;
 
# ifndef _REENT_GLOBAL_ATEXIT
/* atexit stuff */
struct _atexit *_atexit; /* points to head of LIFO stack */
struct _atexit _atexit0; /* one guaranteed table, required by ANSI */
# endif
 
/* signal info */
void (**(_sig_func))(int);
698,34 → 689,17
{0, {0}} \
} \
}, \
_REENT_INIT_ATEXIT \
_NULL, \
{_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}}, \
_NULL, \
{_NULL, 0, _NULL} \
}
 
#define _REENT_INIT_PTR(var) \
{ (var)->_errno = 0; \
{ memset((var), 0, sizeof(*(var))); \
(var)->_stdin = &(var)->__sf[0]; \
(var)->_stdout = &(var)->__sf[1]; \
(var)->_stderr = &(var)->__sf[2]; \
(var)->_inc = 0; \
memset(&(var)->_emergency, 0, sizeof((var)->_emergency)); \
(var)->_current_category = 0; \
(var)->_current_locale = "C"; \
(var)->__sdidinit = 0; \
(var)->__cleanup = _NULL; \
(var)->_result = _NULL; \
(var)->_result_k = 0; \
(var)->_p5s = _NULL; \
(var)->_freelist = _NULL; \
(var)->_cvtlen = 0; \
(var)->_cvtbuf = _NULL; \
(var)->_new._reent._unused_rand = 0; \
(var)->_new._reent._strtok_last = _NULL; \
(var)->_new._reent._asctime_buf[0] = 0; \
memset(&(var)->_new._reent._localtime_buf, 0, sizeof((var)->_new._reent._localtime_buf)); \
(var)->_new._reent._gamma_signgam = 0; \
(var)->_new._reent._rand_next = 1; \
(var)->_new._reent._r48._seed[0] = _RAND48_SEED_0; \
(var)->_new._reent._r48._seed[1] = _RAND48_SEED_1; \
734,36 → 708,6
(var)->_new._reent._r48._mult[1] = _RAND48_MULT_1; \
(var)->_new._reent._r48._mult[2] = _RAND48_MULT_2; \
(var)->_new._reent._r48._add = _RAND48_ADD; \
(var)->_new._reent._mblen_state.__count = 0; \
(var)->_new._reent._mblen_state.__value.__wch = 0; \
(var)->_new._reent._mbtowc_state.__count = 0; \
(var)->_new._reent._mbtowc_state.__value.__wch = 0; \
(var)->_new._reent._wctomb_state.__count = 0; \
(var)->_new._reent._wctomb_state.__value.__wch = 0; \
(var)->_new._reent._mbrlen_state.__count = 0; \
(var)->_new._reent._mbrlen_state.__value.__wch = 0; \
(var)->_new._reent._mbrtowc_state.__count = 0; \
(var)->_new._reent._mbrtowc_state.__value.__wch = 0; \
(var)->_new._reent._mbsrtowcs_state.__count = 0; \
(var)->_new._reent._mbsrtowcs_state.__value.__wch = 0; \
(var)->_new._reent._wcrtomb_state.__count = 0; \
(var)->_new._reent._wcrtomb_state.__value.__wch = 0; \
(var)->_new._reent._wcsrtombs_state.__count = 0; \
(var)->_new._reent._wcsrtombs_state.__value.__wch = 0; \
(var)->_new._reent._l64a_buf[0] = '\0'; \
(var)->_new._reent._signal_buf[0] = '\0'; \
(var)->_new._reent._getdate_err = 0; \
(var)->_atexit = _NULL; \
(var)->_atexit0._next = _NULL; \
(var)->_atexit0._ind = 0; \
(var)->_atexit0._fns[0] = _NULL; \
(var)->_atexit0._on_exit_args._fntypes = 0; \
(var)->_atexit0._on_exit_args._fnargs[0] = _NULL; \
(var)->_sig_func = _NULL; \
(var)->__sglue._next = _NULL; \
(var)->__sglue._niobs = 0; \
(var)->__sglue._iobs = _NULL; \
memset(&(var)->__sf, 0, sizeof((var)->__sf)); \
}
 
#define _REENT_CHECK_RAND48(ptr) /* nothing */
822,7 → 766,8
 
/* #define _REENT_ONLY define this to get only reentrant routines */
 
 
#if defined(__DYNAMIC_REENT__) && !defined(__SINGLE_THREAD__)
#ifndef __getreent
static inline struct _reent *__getreent(void)
{
struct _reent *ent;
831,10 → 776,21
:"=r"(ent));
return ent;
};
#endif
# define _REENT (__getreent())
#else /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */
# define _REENT _impure_ptr
#endif /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */
 
# define _REENT (__getreent())
#define _GLOBAL_REENT _global_impure_ptr
 
#ifdef _REENT_GLOBAL_ATEXIT
extern struct _atexit *_global_atexit; /* points to head of LIFO stack */
# define _GLOBAL_ATEXIT _global_atexit
#else
# define _GLOBAL_ATEXIT (_GLOBAL_REENT->_atexit)
#endif
 
#ifdef __cplusplus
}
#endif
/contrib/sdk/sources/newlib/libc/include/sys/signal.h
12,7 → 12,10
 
/* #ifndef __STRICT_ANSI__*/
 
/* Cygwin defines it's own sigset_t in include/cygwin/signal.h */
#ifndef __CYGWIN__
typedef unsigned long sigset_t;
#endif
 
#if defined(__rtems__)
 
143,6 → 146,9
#undef sigfillset
#undef sigismember
 
#ifdef _COMPILING_NEWLIB
int _EXFUN(_kill, (pid_t, int));
#endif
int _EXFUN(kill, (pid_t, int));
int _EXFUN(killpg, (pid_t, int));
int _EXFUN(sigaction, (int, const struct sigaction *, struct sigaction *));
/contrib/sdk/sources/newlib/libc/include/sys/stat.h
19,7 → 19,7
#ifdef __CYGWIN__
#include <cygwin/stat.h>
#ifdef _COMPILING_NEWLIB
#define stat64 __stat64
#define stat64 stat
#endif
#else
struct stat
147,17 → 147,17
int _EXFUN(fstat,( int __fd, struct stat *__sbuf ));
int _EXFUN(mkdir,( const char *_path, mode_t __mode ));
int _EXFUN(mkfifo,( const char *__path, mode_t __mode ));
int _EXFUN(stat,( const char *__path, struct stat *__sbuf ));
int _EXFUN(stat,( const char *__restrict __path, struct stat *__restrict __sbuf ));
mode_t _EXFUN(umask,( mode_t __mask ));
 
#if defined (__SPU__) || defined(__rtems__) || defined(__CYGWIN__) && !defined(__INSIDE_CYGWIN__)
int _EXFUN(lstat,( const char *__path, struct stat *__buf ));
int _EXFUN(lstat,( const char *__restrict __path, struct stat *__restrict __buf ));
int _EXFUN(mknod,( const char *__path, mode_t __mode, dev_t __dev ));
#endif
 
#if defined (__CYGWIN__) && !defined(__INSIDE_CYGWIN__)
int _EXFUN(fchmodat, (int, const char *, mode_t, int));
int _EXFUN(fstatat, (int, const char *, struct stat *, int));
int _EXFUN(fstatat, (int, const char *__restrict , struct stat *__restrict, int));
int _EXFUN(mkdirat, (int, const char *, mode_t));
int _EXFUN(mkfifoat, (int, const char *, mode_t));
int _EXFUN(mknodat, (int, const char *, mode_t, dev_t));
169,9 → 169,11
provided in newlib for some compilers. */
#ifdef _COMPILING_NEWLIB
int _EXFUN(_fstat,( int __fd, struct stat *__sbuf ));
int _EXFUN(_stat,( const char *__path, struct stat *__sbuf ));
int _EXFUN(_stat,( const char *__restrict __path, struct stat *__restrict __sbuf ));
int _EXFUN(_mkdir,( const char *_path, mode_t __mode ));
#ifdef __LARGE64_FILES
struct stat64;
int _EXFUN(_stat64,( const char *__restrict __path, struct stat64 *__restrict __sbuf ));
int _EXFUN(_fstat64,( int __fd, struct stat64 *__sbuf ));
#endif
#endif
/contrib/sdk/sources/newlib/libc/include/sys/time.h
12,7 → 12,7
extern "C" {
#endif
 
#ifndef _WINSOCK_H
#ifndef _TIMEVAL_DEFINED
#define _TIMEVAL_DEFINED
struct timeval {
time_t tv_sec;
19,26 → 19,6
suseconds_t tv_usec;
};
 
struct timezone {
int tz_minuteswest;
int tz_dsttime;
};
 
#ifdef __CYGWIN__
#include <cygwin/sys_time.h>
#endif /* __CYGWIN__ */
 
#endif /* _WINSOCK_H */
 
#define ITIMER_REAL 0
#define ITIMER_VIRTUAL 1
#define ITIMER_PROF 2
 
struct itimerval {
struct timeval it_interval;
struct timeval it_value;
};
 
/* BSD time macros used by RTEMS code */
#if defined (__rtems__) || defined (__CYGWIN__)
 
70,13 → 50,37
} \
} while (0)
#endif /* defined (__rtems__) || defined (__CYGWIN__) */
#endif /* !_TIMEVAL_DEFINED */
 
int _EXFUN(gettimeofday, (struct timeval *__p, void *__tz));
struct timezone {
int tz_minuteswest;
int tz_dsttime;
};
 
#ifdef __CYGWIN__
#include <cygwin/sys_time.h>
#endif /* __CYGWIN__ */
 
#define ITIMER_REAL 0
#define ITIMER_VIRTUAL 1
#define ITIMER_PROF 2
 
struct itimerval {
struct timeval it_interval;
struct timeval it_value;
};
 
#ifdef _COMPILING_NEWLIB
int _EXFUN(_gettimeofday, (struct timeval *__p, void *__tz));
#endif
 
int _EXFUN(gettimeofday, (struct timeval *__restrict __p,
void *__restrict __tz));
int _EXFUN(settimeofday, (const struct timeval *, const struct timezone *));
int _EXFUN(utimes, (const char *__path, const struct timeval *__tvp));
int _EXFUN(getitimer, (int __which, struct itimerval *__value));
int _EXFUN(setitimer, (int __which, const struct itimerval *__value,
struct itimerval *__ovalue));
int _EXFUN(setitimer, (int __which, const struct itimerval *__restrict __value,
struct itimerval *__restrict __ovalue));
 
#ifdef __cplusplus
}
/contrib/sdk/sources/newlib/libc/include/sys/times.h
21,6 → 21,9
};
 
clock_t _EXFUN(times,(struct tms *));
#ifdef _COMPILING_NEWLIB
clock_t _EXFUN(_times,(struct tms *));
#endif
 
#ifdef __cplusplus
}
/contrib/sdk/sources/newlib/libc/include/sys/types.h
89,10 → 89,22
 
#ifndef _BSDTYPES_DEFINED
/* also defined in mingw/gmon.h and in w32api/winsock[2].h */
#ifndef __u_char_defined
typedef unsigned char u_char;
#define __u_char_defined
#endif
#ifndef __u_short_defined
typedef unsigned short u_short;
#define __u_short_defined
#endif
#ifndef __u_int_defined
typedef unsigned int u_int;
#define __u_int_defined
#endif
#ifndef __u_long_defined
typedef unsigned long u_long;
#define __u_long_defined
#endif
#define _BSDTYPES_DEFINED
#endif
 
109,7 → 121,10
#ifndef __time_t_defined
typedef _TIME_T_ time_t;
#define __time_t_defined
#endif
 
#ifndef __timespec_defined
#define __timespec_defined
/* Time Value Specification Structures, P1003.1b-1993, p. 261 */
 
struct timespec {
116,15 → 131,21
time_t tv_sec; /* Seconds */
long tv_nsec; /* Nanoseconds */
};
#endif
 
struct itimerspec {
struct timespec it_interval; /* Timer period */
struct timespec it_value; /* Timer expiration */
};
#endif
 
#ifndef __daddr_t_defined
typedef long daddr_t;
#define __daddr_t_defined
#endif
#ifndef __caddr_t_defined
typedef char * caddr_t;
#define __caddr_t_defined
#endif
 
#ifndef __CYGWIN__
#if defined(__MS_types__) || defined(__rtems__) || \
207,7 → 228,7
includes the W32api winsock[2].h header must know what it is doing;
it must not call the cygwin32 select function.
*/
# if !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (__USE_W32_SOCKETS))
# if !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS))
# define _SYS_TYPES_FD_SET
# define NBBY 8 /* number of bits in a byte */
/*
244,7 → 265,7
*__tmp++ = 0; \
}))
 
# endif /* !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (__USE_W32_SOCKETS)) */
# endif /* !(defined (_POSIX_SOURCE) || defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS)) */
 
#undef __MS_types__
#undef _ST_INT32
301,39 → 322,10
#define PTHREAD_CREATE_DETACHED 0
#define PTHREAD_CREATE_JOINABLE 1
 
#if defined(__XMK__) || defined(__rtems__)
/* The following defines are part of the X/Open System Interface (XSI). */
#if defined(__rtems__)
#include <sys/cpuset.h>
#endif
 
/* This type of mutex does not detect deadlock. A thread attempting to relock this mutex without first unlocking
* it shall deadlock. Attempting to unlock a mutex locked by a different thread results in undefined behavior.
* Attempting to unlock an unlocked mutex results in undefined behavior.
*/
#define PTHREAD_MUTEX_NORMAL 1
 
/*
* This type of mutex provides error checking. A thread attempting to relock this mutex without first unlocking
* it shall return with an error. A thread attempting to unlock a mutex which another thread has locked shall return
* with an error. A thread attempting to unlock an unlocked mutex shall return with an error.
*/
#define PTHREAD_MUTEX_ERRORCHECK 2
 
/* A thread attempting to relock this mutex without first unlocking it shall succeed in locking the mutex.
* The relocking deadlock which can occur with mutexes of type PTHREAD_MUTEX_NORMAL cannot occur with this type of mutex.
* Multiple locks of this mutex shall require the same number of unlocks to release the mutex before another thread can
* acquire the mutex. A thread attempting to unlock a mutex which another thread has locked shall return with an error.
* A thread attempting to unlock an unlocked mutex shall return with an error.
*/
#define PTHREAD_MUTEX_RECURSIVE 3
 
/* Attempting to recursively lock a mutex of this type results in undefined behavior. Attempting to unlock a
* mutex of this type which was not locked by the calling thread results in undefined behavior. Attempting to
* unlock a mutex of this type which is not locked results in undefined behavior. An implementation may map this
* mutex to one of the other mutex types.
*/
#define PTHREAD_MUTEX_DEFAULT 4
 
#endif /* defined(__XMK__) || defined(__rtems__) */
 
#if defined(__XMK__)
typedef struct pthread_attr_s {
int contentionscope;
363,7 → 355,11
int cputime_clock_allowed; /* see time.h */
#endif
int detachstate;
 
#if defined(__rtems__)
size_t affinitysetsize;
cpu_set_t *affinityset;
cpu_set_t affinitysetpreallocated;
#endif
} pthread_attr_t;
 
#endif /* !defined(__XMK__) */
391,12 → 387,49
 
/* Values for mutex type */
 
/* The following defines are part of the X/Open System Interface (XSI). */
 
/*
* This type of mutex does not detect deadlock. A thread attempting to
* relock this mutex without first unlocking it shall deadlock. Attempting
* to unlock a mutex locked by a different thread results in undefined
* behavior. Attempting to unlock an unlocked mutex results in undefined
* behavior.
*/
#define PTHREAD_MUTEX_NORMAL 0
 
/*
* A thread attempting to relock this mutex without first unlocking
* it shall succeed in locking the mutex. The relocking deadlock which
* can occur with mutexes of type PTHREAD_MUTEX_NORMAL cannot occur with
* this type of mutex. Multiple locks of this mutex shall require the
* same number of unlocks to release the mutex before another thread can
* acquire the mutex. A thread attempting to unlock a mutex which another
* thread has locked shall return with an error. A thread attempting to
* unlock an unlocked mutex shall return with an error.
*/
#define PTHREAD_MUTEX_RECURSIVE 1
 
/*
* This type of mutex provides error checking. A thread attempting
* to relock this mutex without first unlocking it shall return with an
* error. A thread attempting to unlock a mutex which another thread has
* locked shall return with an error. A thread attempting to unlock an
* unlocked mutex shall return with an error.
*/
#define PTHREAD_MUTEX_ERRORCHECK 2
 
/*
* Attempting to recursively lock a mutex of this type results
* in undefined behavior. Attempting to unlock a mutex of this type
* which was not locked by the calling thread results in undefined
* behavior. Attempting to unlock a mutex of this type which is not locked
* results in undefined behavior. An implementation may map this mutex to
* one of the other mutex types.
*/
#define PTHREAD_MUTEX_DEFAULT 3
 
#endif
#endif /* !defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) */
 
#if defined(__XMK__)
typedef unsigned int pthread_mutex_t; /* identify a mutex */
463,6 → 496,7
 
/* POSIX Spin Lock Types */
 
#if !defined (__CYGWIN__)
#if defined(_POSIX_SPIN_LOCKS)
typedef __uint32_t pthread_spinlock_t; /* POSIX Spin Lock Object */
#endif /* defined(_POSIX_SPIN_LOCKS) */
469,7 → 503,6
 
/* POSIX Reader/Writer Lock Types */
 
#if !defined (__CYGWIN__)
#if defined(_POSIX_READER_WRITER_LOCKS)
typedef __uint32_t pthread_rwlock_t; /* POSIX RWLock Object */
typedef struct {
/contrib/sdk/sources/newlib/libc/include/sys/unistd.h
71,6 → 71,9
long _EXFUN(fpathconf, (int __fd, int __name ));
int _EXFUN(fsync, (int __fd));
int _EXFUN(fdatasync, (int __fd));
#if defined(__CYGWIN__)
char * _EXFUN(get_current_dir_name, (void));
#endif
char * _EXFUN(getcwd, (char *__buf, size_t __size ));
#if defined(__CYGWIN__)
int _EXFUN(getdomainname ,(char *__name, size_t __len));
172,7 → 175,7
void _EXFUN(setusershell, (void));
#endif
unsigned _EXFUN(sleep, (unsigned int __seconds ));
void _EXFUN(swab, (const void *, void *, ssize_t));
void _EXFUN(swab, (const void *__restrict, void *__restrict, ssize_t));
long _EXFUN(sysconf, (int __name ));
pid_t _EXFUN(tcgetpgrp, (int __fildes ));
int _EXFUN(tcsetpgrp, (int __fildes, pid_t __pgrp_id ));
219,7 → 222,7
int _EXFUN(_execve, (const char *__path, char * const __argv[], char * const __envp[] ));
#endif
 
#if defined(__CYGWIN__) || defined(__rtems__) || defined(__sh__) || defined(__SPU__)
#if defined(__CYGWIN__) || defined(__rtems__) || defined(__aarch64__) || defined (__arm__) || defined(__sh__) || defined(__SPU__)
#if !defined(__INSIDE_CYGWIN__)
int _EXFUN(ftruncate, (int __fd, off_t __length));
int _EXFUN(truncate, (const char *, off_t __length));
230,7 → 233,7
int _EXFUN(getdtablesize, (void));
int _EXFUN(setdtablesize, (int));
useconds_t _EXFUN(ualarm, (useconds_t __useconds, useconds_t __interval));
#if !(defined (_WINSOCK_H) || defined (__USE_W32_SOCKETS))
#if !(defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS))
/* winsock[2].h defines as __stdcall, and with int as 2nd arg */
int _EXFUN(gethostname, (char *__name, size_t __len));
#endif
241,9 → 244,11
void _EXFUN(sync, (void));
#endif
 
ssize_t _EXFUN(readlink, (const char *__path, char *__buf, size_t __buflen));
ssize_t _EXFUN(readlink, (const char *__restrict __path,
char *__restrict __buf, size_t __buflen));
#if defined(__CYGWIN__)
ssize_t _EXFUN(readlinkat, (int __dirfd1, const char *__path, char *__buf, size_t __buflen));
ssize_t _EXFUN(readlinkat, (int __dirfd1, const char *__restrict __path,
char *__restrict __buf, size_t __buflen));
#endif
int _EXFUN(symlink, (const char *__name1, const char *__name2));
#if defined(__CYGWIN__)
497,10 → 502,6
#define _CS_V6_ENV _CS_V7_ENV
#endif
 
#ifndef __CYGWIN__
# define MAXPATHLEN 1024
#endif
 
#ifdef __cplusplus
}
#endif
/contrib/sdk/sources/newlib/libc/include/sys/wait.h
29,6 → 29,10
pid_t wait (int *);
pid_t waitpid (pid_t, int *, int);
 
#ifdef _COMPILING_NEWLIB
pid_t _wait (int *);
#endif
 
/* Provide prototypes for most of the _<systemcall> names that are
provided in newlib for some compilers. */
pid_t _wait (int *);
/contrib/sdk/sources/newlib/libc/include/tgmath.h
0,0 → 1,184
/* http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/tgmath.h.html */
/*-
* Copyright (c) 2004 Stefan Farfeleder.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
 
#ifndef _TGMATH_H_
#define _TGMATH_H_
 
#include <complex.h>
#include <math.h>
 
#ifdef log2
#undef log2
#endif
 
/*
* This implementation of <tgmath.h> requires two implementation-dependent
* macros to be defined:
* __tg_impl_simple(x, y, z, fn, fnf, fnl, ...)
* Invokes fnl() if the corresponding real type of x, y or z is long
* double, fn() if it is double or any has an integer type, and fnf()
* otherwise.
* __tg_impl_full(x, y, z, fn, fnf, fnl, cfn, cfnf, cfnl, ...)
* Invokes [c]fnl() if the corresponding real type of x, y or z is long
* double, [c]fn() if it is double or any has an integer type, and
* [c]fnf() otherwise. The function with the 'c' prefix is called if
* any of x, y or z is a complex number.
* Both macros call the chosen function with all additional arguments passed
* to them, as given by __VA_ARGS__.
*
* Note that these macros cannot be implemented with C's ?: operator,
* because the return type of the whole expression would incorrectly be long
* double complex regardless of the argument types.
*/
 
/* requires GCC >= 3.1 */
#if !__GNUC_PREREQ (3, 1)
#error "<tgmath.h> not implemented for this compiler"
#endif
 
#define __tg_type(__e, __t) \
__builtin_types_compatible_p(__typeof__(__e), __t)
#define __tg_type3(__e1, __e2, __e3, __t) \
(__tg_type(__e1, __t) || __tg_type(__e2, __t) || \
__tg_type(__e3, __t))
#define __tg_type_corr(__e1, __e2, __e3, __t) \
(__tg_type3(__e1, __e2, __e3, __t) || \
__tg_type3(__e1, __e2, __e3, __t _Complex))
#define __tg_integer(__e1, __e2, __e3) \
(((__typeof__(__e1))1.5 == 1) || ((__typeof__(__e2))1.5 == 1) || \
((__typeof__(__e3))1.5 == 1))
#define __tg_is_complex(__e1, __e2, __e3) \
(__tg_type3(__e1, __e2, __e3, float _Complex) || \
__tg_type3(__e1, __e2, __e3, double _Complex) || \
__tg_type3(__e1, __e2, __e3, long double _Complex) || \
__tg_type3(__e1, __e2, __e3, __typeof__(_Complex_I)))
 
#ifdef _LDBL_EQ_DBL
#define __tg_impl_simple(x, y, z, fn, fnf, fnl, ...) \
__builtin_choose_expr(__tg_type_corr(x, y, z, long double), \
fnl(__VA_ARGS__), __builtin_choose_expr( \
__tg_type_corr(x, y, z, double) || __tg_integer(x, y, z),\
fn(__VA_ARGS__), fnf(__VA_ARGS__)))
#else
#define __tg_impl_simple(__x, __y, __z, __fn, __fnf, __fnl, ...) \
(__tg_type_corr(__x, __y, __z, double) || __tg_integer(__x, __y, __z)) \
? __fn(__VA_ARGS__) : __fnf(__VA_ARGS__)
#endif
 
#define __tg_impl_full(__x, __y, __z, __fn, __fnf, __fnl, __cfn, __cfnf, __cfnl, ...) \
__builtin_choose_expr(__tg_is_complex(__x, __y, __z), \
__tg_impl_simple(__x, __y, __z, __cfn, __cfnf, __cfnl, __VA_ARGS__), \
__tg_impl_simple(__x, __y, __z, __fn, __fnf, __fnl, __VA_ARGS__))
 
/* Macros to save lots of repetition below */
#define __tg_simple(__x, __fn) \
__tg_impl_simple(__x, __x, __x, __fn, __fn##f, __fn##l, __x)
#define __tg_simple2(__x, __y, __fn) \
__tg_impl_simple(__x, __x, __y, __fn, __fn##f, __fn##l, __x, __y)
#define __tg_simplev(__x, __fn, ...) \
__tg_impl_simple(__x, __x, __x, __fn, __fn##f, __fn##l, __VA_ARGS__)
#define __tg_full(__x, __fn) \
__tg_impl_full(__x, __x, __x, __fn, __fn##f, __fn##l, c##__fn, c##__fn##f, c##__fn##l, __x)
 
/* 7.22#4 -- These macros expand to real or complex functions, depending on
* the type of their arguments. */
#define acos(__x) __tg_full(__x, acos)
#define asin(__x) __tg_full(__x, asin)
#define atan(__x) __tg_full(__x, atan)
#define acosh(__x) __tg_full(__x, acosh)
#define asinh(__x) __tg_full(__x, asinh)
#define atanh(__x) __tg_full(__x, atanh)
#define cos(__x) __tg_full(__x, cos)
#define sin(__x) __tg_full(__x, sin)
#define tan(__x) __tg_full(__x, tan)
#define cosh(__x) __tg_full(__x, cosh)
#define sinh(__x) __tg_full(__x, sinh)
#define tanh(__x) __tg_full(__x, tanh)
#define exp(__x) __tg_full(__x, exp)
#define log(__x) __tg_full(__x, log)
#define pow(__x, __y) __tg_impl_full(__x, __x, __y, pow, powf, powl, \
cpow, cpowf, cpowl, __x, __y)
#define sqrt(__x) __tg_full(__x, sqrt)
 
/* "The corresponding type-generic macro for fabs and cabs is fabs." */
#define fabs(__x) __tg_impl_full(__x, __x, __x, fabs, fabsf, fabsl, \
cabs, cabsf, cabsl, __x)
 
/* 7.22#5 -- These macros are only defined for arguments with real type. */
#define atan2(__x, __y) __tg_simple2(__x, __y, atan2)
#define cbrt(__x) __tg_simple(__x, cbrt)
#define ceil(__x) __tg_simple(__x, ceil)
#define copysign(__x, __y) __tg_simple2(__x, __y, copysign)
#define erf(__x) __tg_simple(__x, erf)
#define erfc(__x) __tg_simple(__x, erfc)
#define exp2(__x) __tg_simple(__x, exp2)
#define expm1(__x) __tg_simple(__x, expm1)
#define fdim(__x, __y) __tg_simple2(__x, __y, fdim)
#define floor(__x) __tg_simple(__x, floor)
#define fma(__x, __y, __z) __tg_impl_simple(__x, __y, __z, fma, fmaf, fmal, \
__x, __y, __z)
#define fmax(__x, __y) __tg_simple2(__x, __y, fmax)
#define fmin(__x, __y) __tg_simple2(__x, __y, fmin)
#define fmod(__x, __y) __tg_simple2(__x, __y, fmod)
#define frexp(__x, __y) __tg_simplev(__x, frexp, __x, __y)
#define hypot(__x, __y) __tg_simple2(__x, __y, hypot)
#define ilogb(__x) __tg_simple(__x, ilogb)
#define ldexp(__x, __y) __tg_simplev(__x, ldexp, __x, __y)
#define lgamma(__x) __tg_simple(__x, lgamma)
#define llrint(__x) __tg_simple(__x, llrint)
#define llround(__x) __tg_simple(__x, llround)
#define log10(__x) __tg_simple(__x, log10)
#define log1p(__x) __tg_simple(__x, log1p)
#define log2(__x) __tg_simple(__x, log2)
#define logb(__x) __tg_simple(__x, logb)
#define lrint(__x) __tg_simple(__x, lrint)
#define lround(__x) __tg_simple(__x, lround)
#define nearbyint(__x) __tg_simple(__x, nearbyint)
#define nextafter(__x, __y) __tg_simple2(__x, __y, nextafter)
/* not yet implemented even for _LDBL_EQ_DBL platforms
#define nexttoward(__x, __y) __tg_simplev(__x, nexttoward, __x, __y)
*/
#define remainder(__x, __y) __tg_simple2(__x, __y, remainder)
#define remquo(__x, __y, __z) __tg_impl_simple(__x, __x, __y, remquo, remquof, \
remquol, __x, __y, __z)
#define rint(__x) __tg_simple(__x, rint)
#define round(__x) __tg_simple(__x, round)
#define scalbn(__x, __y) __tg_simplev(__x, scalbn, __x, __y)
#define scalbln(__x, __y) __tg_simplev(__x, scalbln, __x, __y)
#define tgamma(__x) __tg_simple(__x, tgamma)
#define trunc(__x) __tg_simple(__x, trunc)
 
/* 7.22#6 -- These macros always expand to complex functions. */
#define carg(__x) __tg_simple(__x, carg)
#define cimag(__x) __tg_simple(__x, cimag)
#define conj(__x) __tg_simple(__x, conj)
#define cproj(__x) __tg_simple(__x, cproj)
#define creal(__x) __tg_simple(__x, creal)
 
#endif /* !_TGMATH_H_ */
/contrib/sdk/sources/newlib/libc/include/time.h
10,9 → 10,9
#include "_ansi.h"
#include <sys/reent.h>
 
#ifndef NULL
#define NULL 0
#endif
#define __need_size_t
#define __need_NULL
#include <stddef.h>
 
/* Get _CLOCKS_PER_SEC_ */
#include <machine/time.h>
23,8 → 23,6
 
#define CLOCKS_PER_SEC _CLOCKS_PER_SEC_
#define CLK_TCK CLOCKS_PER_SEC
#define __need_size_t
#include <stddef.h>
 
#include <sys/types.h>
 
53,12 → 51,17
struct tm *_EXFUN(gmtime, (const time_t *_timer));
struct tm *_EXFUN(localtime,(const time_t *_timer));
#endif
size_t _EXFUN(strftime, (char *_s, size_t _maxsize, const char *_fmt, const struct tm *_t));
size_t _EXFUN(strftime, (char *__restrict _s,
size_t _maxsize, const char *__restrict _fmt,
const struct tm *__restrict _t));
 
char *_EXFUN(asctime_r, (const struct tm *, char *));
char *_EXFUN(asctime_r, (const struct tm *__restrict,
char *__restrict));
char *_EXFUN(ctime_r, (const time_t *, char *));
struct tm *_EXFUN(gmtime_r, (const time_t *, struct tm *));
struct tm *_EXFUN(localtime_r, (const time_t *, struct tm *));
struct tm *_EXFUN(gmtime_r, (const time_t *__restrict,
struct tm *__restrict));
struct tm *_EXFUN(localtime_r, (const time_t *__restrict,
struct tm *__restrict));
 
_END_STD_C
 
67,7 → 70,9
#endif
 
#ifndef __STRICT_ANSI__
char *_EXFUN(strptime, (const char *, const char *, struct tm *));
char *_EXFUN(strptime, (const char *__restrict,
const char *__restrict,
struct tm *__restrict));
_VOID _EXFUN(tzset, (_VOID));
_VOID _EXFUN(_tzset_r, (struct _reent *));
 
152,7 → 157,9
/* Create a Per-Process Timer, P1003.1b-1993, p. 264 */
 
int _EXFUN(timer_create,
(clockid_t clock_id, struct sigevent *evp, timer_t *timerid));
(clockid_t clock_id,
struct sigevent *__restrict evp,
timer_t *__restrict timerid));
 
/* Delete a Per_process Timer, P1003.1b-1993, p. 266 */
 
161,8 → 168,9
/* Per-Process Timers, P1003.1b-1993, p. 267 */
 
int _EXFUN(timer_settime,
(timer_t timerid, int flags, const struct itimerspec *value,
struct itimerspec *ovalue));
(timer_t timerid, int flags,
const struct itimerspec *__restrict value,
struct itimerspec *__restrict ovalue));
int _EXFUN(timer_gettime, (timer_t timerid, struct itimerspec *value));
int _EXFUN(timer_getoverrun, (timer_t timerid));
 
/contrib/sdk/sources/newlib/libc/include/wchar.h
8,6 → 8,7
#define __need_size_t
#define __need_wchar_t
#define __need_wint_t
#define __need_NULL
#include <stddef.h>
 
#define __need___va_list
19,28 → 20,35
/* For __STDC_ISO_10646__ */
#include <sys/features.h>
 
#ifndef NULL
#define NULL 0
#endif
 
#ifndef WEOF
# define WEOF ((wint_t)-1)
#endif
 
#ifndef WCHAR_MIN
#define WCHAR_MIN 0
#ifdef __WCHAR_MIN__
#define WCHAR_MIN __WCHAR_MIN__
#elif defined(__WCHAR_UNSIGNED__) || (L'\0' - 1 > 0)
#define WCHAR_MIN (0 + L'\0')
#else
#define WCHAR_MIN (-0x7fffffff - 1 + L'\0')
#endif
#endif
 
#ifndef WCHAR_MAX
#ifdef __WCHAR_MAX__
#define WCHAR_MAX __WCHAR_MAX__
#elif defined(__WCHAR_UNSIGNED__) || (L'\0' - 1 > 0)
#define WCHAR_MAX (0xffffffffu + L'\0')
#else
#define WCHAR_MAX 0x7fffffffu
#define WCHAR_MAX (0x7fffffff + L'\0')
#endif
#endif
 
_BEGIN_STD_C
 
/* As in stdio.h, <sys/reent.h> defines __FILE. */
typedef __FILE FILE;
 
/* As required by POSIX.1-2008, declare tm as incomplete type.
The actual definition is in time.h. */
struct tm;
52,77 → 60,96
 
wint_t _EXFUN(btowc, (int));
int _EXFUN(wctob, (wint_t));
size_t _EXFUN(mbrlen, (const char * , size_t, mbstate_t *));
size_t _EXFUN(mbrtowc, (wchar_t * , const char * , size_t, mbstate_t *));
size_t _EXFUN(mbrlen, (const char *__restrict, size_t, mbstate_t *__restrict));
size_t _EXFUN(mbrtowc, (wchar_t *__restrict, const char *__restrict, size_t,
mbstate_t *__restrict));
size_t _EXFUN(_mbrtowc_r, (struct _reent *, wchar_t * , const char * ,
size_t, mbstate_t *));
int _EXFUN(mbsinit, (const mbstate_t *));
size_t _EXFUN(mbsnrtowcs, (wchar_t * , const char ** , size_t, size_t,
mbstate_t *));
size_t _EXFUN(mbsnrtowcs, (wchar_t *__restrict, const char **__restrict,
size_t, size_t, mbstate_t *__restrict));
size_t _EXFUN(_mbsnrtowcs_r, (struct _reent *, wchar_t * , const char ** ,
size_t, size_t, mbstate_t *));
size_t _EXFUN(mbsrtowcs, (wchar_t * , const char ** , size_t, mbstate_t *));
size_t _EXFUN(mbsrtowcs, (wchar_t *__restrict, const char **__restrict, size_t,
mbstate_t *__restrict));
size_t _EXFUN(_mbsrtowcs_r, (struct _reent *, wchar_t * , const char ** , size_t, mbstate_t *));
size_t _EXFUN(wcrtomb, (char * , wchar_t, mbstate_t *));
size_t _EXFUN(wcrtomb, (char *__restrict, wchar_t, mbstate_t *__restrict));
size_t _EXFUN(_wcrtomb_r, (struct _reent *, char * , wchar_t, mbstate_t *));
size_t _EXFUN(wcsnrtombs, (char * , const wchar_t ** , size_t, size_t,
mbstate_t *));
size_t _EXFUN(wcsnrtombs, (char *__restrict, const wchar_t **__restrict,
size_t, size_t, mbstate_t *__restrict));
size_t _EXFUN(_wcsnrtombs_r, (struct _reent *, char * , const wchar_t ** ,
size_t, size_t, mbstate_t *));
size_t _EXFUN(wcsrtombs, (char * , const wchar_t ** , size_t, mbstate_t *));
size_t _EXFUN(wcsrtombs, (char *__restrict, const wchar_t **__restrict,
size_t, mbstate_t *__restrict));
size_t _EXFUN(_wcsrtombs_r, (struct _reent *, char * , const wchar_t ** ,
size_t, mbstate_t *));
int _EXFUN(wcscasecmp, (const wchar_t *, const wchar_t *));
wchar_t *_EXFUN(wcscat, (wchar_t * , const wchar_t *));
wchar_t *_EXFUN(wcscat, (wchar_t *__restrict, const wchar_t *__restrict));
wchar_t *_EXFUN(wcschr, (const wchar_t *, wchar_t));
int _EXFUN(wcscmp, (const wchar_t *, const wchar_t *));
int _EXFUN(wcscoll, (const wchar_t *, const wchar_t *));
wchar_t *_EXFUN(wcscpy, (wchar_t * , const wchar_t *));
wchar_t *_EXFUN(wcpcpy, (wchar_t * , const wchar_t *));
wchar_t *_EXFUN(wcscpy, (wchar_t *__restrict, const wchar_t *__restrict));
wchar_t *_EXFUN(wcpcpy, (wchar_t *__restrict,
const wchar_t *__restrict));
wchar_t *_EXFUN(wcsdup, (const wchar_t *));
wchar_t *_EXFUN(_wcsdup_r, (struct _reent *, const wchar_t * ));
size_t _EXFUN(wcscspn, (const wchar_t *, const wchar_t *));
size_t _EXFUN(wcsftime, (wchar_t *, size_t, const wchar_t *, const struct tm *));
size_t _EXFUN(wcsftime, (wchar_t *__restrict, size_t,
const wchar_t *__restrict, const struct tm *__restrict));
size_t _EXFUN(wcslcat, (wchar_t *, const wchar_t *, size_t));
size_t _EXFUN(wcslcpy, (wchar_t *, const wchar_t *, size_t));
size_t _EXFUN(wcslen, (const wchar_t *));
int _EXFUN(wcsncasecmp, (const wchar_t *, const wchar_t *, size_t));
wchar_t *_EXFUN(wcsncat, (wchar_t * , const wchar_t * , size_t));
wchar_t *_EXFUN(wcsncat, (wchar_t *__restrict,
const wchar_t *__restrict, size_t));
int _EXFUN(wcsncmp, (const wchar_t *, const wchar_t *, size_t));
wchar_t *_EXFUN(wcsncpy, (wchar_t * , const wchar_t * , size_t));
wchar_t *_EXFUN(wcpncpy, (wchar_t * , const wchar_t * , size_t));
wchar_t *_EXFUN(wcsncpy, (wchar_t *__restrict,
const wchar_t *__restrict, size_t));
wchar_t *_EXFUN(wcpncpy, (wchar_t *__restrict,
const wchar_t *__restrict, size_t));
size_t _EXFUN(wcsnlen, (const wchar_t *, size_t));
wchar_t *_EXFUN(wcspbrk, (const wchar_t *, const wchar_t *));
wchar_t *_EXFUN(wcsrchr, (const wchar_t *, wchar_t));
size_t _EXFUN(wcsspn, (const wchar_t *, const wchar_t *));
wchar_t *_EXFUN(wcsstr, (const wchar_t *, const wchar_t *));
wchar_t *_EXFUN(wcstok, (wchar_t *, const wchar_t *, wchar_t **));
double _EXFUN(wcstod, (const wchar_t *, wchar_t **));
wchar_t *_EXFUN(wcsstr, (const wchar_t *__restrict,
const wchar_t *__restrict));
wchar_t *_EXFUN(wcstok, (wchar_t *__restrict, const wchar_t *__restrict,
wchar_t **__restrict));
double _EXFUN(wcstod, (const wchar_t *__restrict, wchar_t **__restrict));
double _EXFUN(_wcstod_r, (struct _reent *, const wchar_t *, wchar_t **));
float _EXFUN(wcstof, (const wchar_t *, wchar_t **));
float _EXFUN(wcstof, (const wchar_t *__restrict, wchar_t **__restrict));
float _EXFUN(_wcstof_r, (struct _reent *, const wchar_t *, wchar_t **));
int _EXFUN(wcswidth, (const wchar_t *, size_t));
size_t _EXFUN(wcsxfrm, (wchar_t *, const wchar_t *, size_t));
size_t _EXFUN(wcsxfrm, (wchar_t *__restrict, const wchar_t *__restrict,
size_t));
int _EXFUN(wcwidth, (const wchar_t));
wchar_t *_EXFUN(wmemchr, (const wchar_t *, wchar_t, size_t));
int _EXFUN(wmemcmp, (const wchar_t *, const wchar_t *, size_t));
wchar_t *_EXFUN(wmemcpy, (wchar_t * , const wchar_t * , size_t));
wchar_t *_EXFUN(wmemcpy, (wchar_t *__restrict, const wchar_t *__restrict,
size_t));
wchar_t *_EXFUN(wmemmove, (wchar_t *, const wchar_t *, size_t));
wchar_t *_EXFUN(wmemset, (wchar_t *, wchar_t, size_t));
 
long _EXFUN(wcstol, (const wchar_t *, wchar_t **, int));
long long _EXFUN(wcstoll, (const wchar_t *, wchar_t **, int));
unsigned long _EXFUN(wcstoul, (const wchar_t *, wchar_t **, int));
unsigned long long _EXFUN(wcstoull, (const wchar_t *, wchar_t **, int));
long _EXFUN(wcstol, (const wchar_t *__restrict, wchar_t **__restrict, int));
long long _EXFUN(wcstoll, (const wchar_t *__restrict, wchar_t **__restrict,
int));
unsigned long _EXFUN(wcstoul, (const wchar_t *__restrict, wchar_t **__restrict,
int));
unsigned long long _EXFUN(wcstoull, (const wchar_t *__restrict,
wchar_t **__restrict, int));
long _EXFUN(_wcstol_r, (struct _reent *, const wchar_t *, wchar_t **, int));
long long _EXFUN(_wcstoll_r, (struct _reent *, const wchar_t *, wchar_t **, int));
unsigned long _EXFUN(_wcstoul_r, (struct _reent *, const wchar_t *, wchar_t **, int));
unsigned long long _EXFUN(_wcstoull_r, (struct _reent *, const wchar_t *, wchar_t **, int));
/* On platforms where long double equals double. */
#ifdef _LDBL_EQ_DBL
long double _EXFUN(wcstold, (const wchar_t *, wchar_t **));
#endif /* _LDBL_EQ_DBL */
 
wint_t _EXFUN(fgetwc, (__FILE *));
wchar_t *_EXFUN(fgetws, (wchar_t *, int, __FILE *));
wchar_t *_EXFUN(fgetws, (wchar_t *__restrict, int, __FILE *__restrict));
wint_t _EXFUN(fputwc, (wchar_t, __FILE *));
int _EXFUN(fputws, (const wchar_t *, __FILE *));
int _EXFUN(fputws, (const wchar_t *__restrict, __FILE *__restrict));
int _EXFUN (fwide, (__FILE *, int));
wint_t _EXFUN (getwc, (__FILE *));
wint_t _EXFUN (getwchar, (void));
152,12 → 179,15
#endif
#endif
 
int _EXFUN(fwprintf, (__FILE *, const wchar_t *, ...));
int _EXFUN(swprintf, (wchar_t *, size_t, const wchar_t *, ...));
int _EXFUN(vfwprintf, (__FILE *, const wchar_t *, __VALIST));
int _EXFUN(vswprintf, (wchar_t *, size_t, const wchar_t *, __VALIST));
int _EXFUN(vwprintf, (const wchar_t *, __VALIST));
int _EXFUN(wprintf, (const wchar_t *, ...));
int _EXFUN(fwprintf, (__FILE *__restrict, const wchar_t *__restrict, ...));
int _EXFUN(swprintf, (wchar_t *__restrict, size_t,
const wchar_t *__restrict, ...));
int _EXFUN(vfwprintf, (__FILE *__restrict, const wchar_t *__restrict,
__VALIST));
int _EXFUN(vswprintf, (wchar_t *__restrict, size_t,
const wchar_t *__restrict, __VALIST));
int _EXFUN(vwprintf, (const wchar_t *__restrict, __VALIST));
int _EXFUN(wprintf, (const wchar_t *__restrict, ...));
 
int _EXFUN(_fwprintf_r, (struct _reent *, __FILE *, const wchar_t *, ...));
int _EXFUN(_swprintf_r, (struct _reent *, wchar_t *, size_t, const wchar_t *, ...));
166,12 → 196,15
int _EXFUN(_vwprintf_r, (struct _reent *, const wchar_t *, __VALIST));
int _EXFUN(_wprintf_r, (struct _reent *, const wchar_t *, ...));
 
int _EXFUN(fwscanf, (__FILE *, const wchar_t *, ...));
int _EXFUN(swscanf, (const wchar_t *, const wchar_t *, ...));
int _EXFUN(vfwscanf, (__FILE *, const wchar_t *, __VALIST));
int _EXFUN(vswscanf, (const wchar_t *, const wchar_t *, __VALIST));
int _EXFUN(vwscanf, (const wchar_t *, __VALIST));
int _EXFUN(wscanf, (const wchar_t *, ...));
int _EXFUN(fwscanf, (__FILE *__restrict, const wchar_t *__restrict, ...));
int _EXFUN(swscanf, (const wchar_t *__restrict,
const wchar_t *__restrict, ...));
int _EXFUN(vfwscanf, (__FILE *__restrict, const wchar_t *__restrict,
__VALIST));
int _EXFUN(vswscanf, (const wchar_t *__restrict, const wchar_t *__restrict,
__VALIST));
int _EXFUN(vwscanf, (const wchar_t *__restrict, __VALIST));
int _EXFUN(wscanf, (const wchar_t *__restrict, ...));
 
int _EXFUN(_fwscanf_r, (struct _reent *, __FILE *, const wchar_t *, ...));
int _EXFUN(_swscanf_r, (struct _reent *, const wchar_t *, const wchar_t *, ...));
182,13 → 215,8
 
#define getwc(fp) fgetwc(fp)
#define putwc(wc,fp) fputwc((wc), (fp))
#ifndef _REENT_ONLY
#define getwchar() fgetwc(_REENT->_stdin)
#define putwchar(wc) fputwc((wc), _REENT->_stdout)
#else
#define getwchar() fgetwc(_impure_ptr->_stdin)
#define putwchar(wc) fputwc((wc), _impure_ptr->_stdout)
#endif
 
_END_STD_C
 
/contrib/sdk/sources/newlib/libc/include/wordexp.h
43,7 → 43,7
/* Note: This implementation of wordexp requires a version of bash
that supports the --wordexp and --protected arguments to be present
on the system. It does not support the WRDE_UNDEF flag. */
int wordexp(const char *, wordexp_t *, int);
int wordexp(const char *__restrict, wordexp_t *__restrict, int);
void wordfree(wordexp_t *);
 
#ifdef __cplusplus
/contrib/sdk/sources/newlib/libc/locale/ldpart.c
0,0 → 1,191
/*
* Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
#include <sys/cdefs.h>
 
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/syslimits.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
 
#include "setlocale.h"
#include "ldpart.h"
 
static int split_lines(char *, const char *);
static void set_from_buf(const char *, int, const char **);
 
int
__part_load_locale(const char *name,
int *using_locale,
char *locale_buf,
const char *category_filename,
int locale_buf_size_max,
int locale_buf_size_min,
const char **dst_localebuf) {
 
static char locale_buf_C[] = "C";
static int num_lines;
 
int fd;
char *lbuf;
char *p;
const char *plim;
char filename[PATH_MAX];
#ifdef __USE_INTERNAL_STAT64
struct stat64 st;
#else
struct stat st;
#endif
size_t namesize;
size_t bufsize;
int save_using_locale;
char *nptr;
 
save_using_locale = *using_locale;
*using_locale = 0;
 
if (name == NULL)
goto no_locale;
 
if (!strcmp(name, "C") || !strcmp(name, "POSIX"))
return 0;
 
/*
* If the locale name is the same as our cache, use the cache.
*/
lbuf = locale_buf;
if (lbuf != NULL && strcmp(name, lbuf) == 0) {
set_from_buf(lbuf, num_lines, dst_localebuf);
*using_locale = 1;
return 0;
}
 
/*
* Slurp the locale file into the cache.
*/
namesize = strlen(name) + 1;
 
if (!_PathLocale)
goto no_locale;
/* Range checking not needed, 'name' size is limited */
strcpy(filename, _PathLocale);
strcat(filename, "/");
strcat(filename, name);
strcat(filename, "/");
strcat(filename, category_filename);
fd = open(filename, O_RDONLY);
if (fd < 0)
goto no_locale;
#ifdef __USE_INTERNAL_STAT64
if (fstat64(fd, &st) != 0)
#else
if (fstat(fd, &st) != 0)
#endif
goto bad_locale;
if (st.st_size <= 0)
goto bad_locale;
bufsize = namesize + st.st_size;
locale_buf = NULL;
 
if (lbuf == NULL || lbuf == locale_buf_C)
{
lbuf = malloc(bufsize);
}
else
{
nptr = realloc(lbuf, bufsize);
if (!nptr && lbuf)
free (lbuf);
lbuf = nptr;
}
 
if (lbuf == NULL)
goto bad_locale;
(void) strcpy(lbuf, name);
p = lbuf + namesize;
plim = p + st.st_size;
if (read(fd, p, (size_t) st.st_size) != st.st_size)
goto bad_lbuf;
if (close(fd) != 0)
goto bad_lbuf;
/*
* Parse the locale file into localebuf.
*/
if (plim[-1] != '\n')
goto bad_lbuf;
num_lines = split_lines(p, plim);
if (num_lines >= locale_buf_size_max)
num_lines = locale_buf_size_max;
else if (num_lines >= locale_buf_size_min)
num_lines = locale_buf_size_min;
else
goto reset_locale;
set_from_buf(lbuf, num_lines, dst_localebuf);
/*
* Record the successful parse in the cache.
*/
locale_buf = lbuf;
 
*using_locale = 1;
return 0;
 
reset_locale:
locale_buf = locale_buf_C;
save_using_locale = 0;
bad_lbuf:
free(lbuf);
bad_locale:
(void)close(fd);
no_locale:
*using_locale = save_using_locale;
return -1;
}
 
static int
split_lines(char *p, const char *plim) {
 
int i;
 
for (i = 0; p < plim; i++) {
p = strchr(p, '\n');
*p++ = '\0';
}
return i;
}
 
static void
set_from_buf(const char *p, int num_lines, const char **dst_localebuf) {
 
const char **ap;
int i;
 
for (ap = dst_localebuf, i = 0; i < num_lines; ++ap, ++i)
*ap = p += strlen(p) + 1;
}
 
/contrib/sdk/sources/newlib/libc/locale/locale.c
188,7 → 188,11
#define _LC_LAST 7
#define ENCODING_LEN 31
 
#ifdef __CYGWIN__ /* Cygwin starts with LC_CTYPE set to "C.UTF-8". */
int __EXPORT __mb_cur_max = 6;
#else
int __EXPORT __mb_cur_max = 1;
#endif
 
int __nlocale_changed = 0;
int __mlocale_changed = 0;
/contrib/sdk/sources/newlib/libc/reent/closer.c
3,7 → 3,6
#include <reent.h>
#include <unistd.h>
#include <_syslist.h>
#include <errno.h>
 
/* Some targets provides their own versions of this functions. Those
targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */
16,6 → 15,9
 
#ifndef REENTRANT_SYSCALLS_PROVIDED
 
/* We use the errno variable used by the system dependent layer. */
#undef errno
extern int errno;
 
/*
FUNCTION
39,49 → 41,18
takes a pointer to the global data block, which holds
<<errno>>.
*/
extern unsigned __NFiles;
 
 
#define __handle_check( __h, __r ) \
if( (__h) < 0 || (__h) > __NFiles ) { \
ptr->_errno = EBADF ; \
return( __r ); \
}
 
 
 
 
int
_DEFUN(_close_r, (ptr, fd),
struct _reent *ptr _AND
int fd)
_close_r (ptr, fd)
struct _reent *ptr;
int fd;
{
int ret;
int h;
 
__file_handle *fh;
 
__handle_check( fd, -1 );
 
fh = (__file_handle*) __getOSHandle( fd );
 
if( fd > STDERR_FILENO )
{
_free_r(ptr, fh->name);
_free_r(ptr, fh);
__freePOSIXHandle( fd );
__SetIOMode_nogrow( fd, 0 );
errno = 0;
if ((ret = _close (fd)) == -1 && errno != 0)
ptr->_errno = errno;
return ret;
}
 
return 0;
}
 
 
int
_DEFUN( close,(fd),
int fd)
{
return _close_r(_REENT, fd);
}
 
#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */
/contrib/sdk/sources/newlib/libc/reent/fstatr.c
5,10 → 5,7
#include <unistd.h>
#include <sys/stat.h>
#include <_syslist.h>
#include <errno.h>
#include <string.h>
 
 
/* Some targets provides their own versions of these functions. Those
targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */
 
25,6 → 22,8
#else
 
/* We use the errno variable used by the system dependent layer. */
#undef errno
extern int errno;
 
/*
FUNCTION
51,70 → 50,6
<<errno>>.
*/
 
#pragma pack(push, 1)
typedef struct
{
char sec;
char min;
char hour;
char rsv;
}detime_t;
 
typedef struct
{
char day;
char month;
short year;
}dedate_t;
 
typedef struct
{
unsigned attr;
unsigned flags;
union
{
detime_t ctime;
unsigned cr_time;
};
union
{
dedate_t cdate;
unsigned cr_date;
};
union
{
detime_t atime;
unsigned acc_time;
};
union
{
dedate_t adate;
unsigned acc_date;
};
union
{
detime_t mtime;
unsigned mod_time;
};
union
{
dedate_t mdate;
unsigned mod_date;
};
unsigned size;
unsigned size_high;
} FILEINFO;
 
#pragma pack(pop)
 
extern unsigned __NFiles;
 
#define __handle_check( __h, __r ) \
if( (__h) < 0 || (__h) > __NFiles ) { \
ptr->_errno = EBADF ; \
return( __r ); \
}
 
int
_fstat_r (ptr, fd, pstat)
struct _reent *ptr;
121,36 → 56,12
int fd;
struct stat *pstat;
{
FILEINFO info;
int ret;
 
__file_handle *fh;
 
__handle_check( fd, -1 );
 
if (fd < 3)
{
pstat->st_mode = S_IFCHR;
pstat->st_blksize = 0;
return 0;
errno = 0;
if ((ret = _fstat (fd, pstat)) == -1 && errno != 0)
ptr->_errno = errno;
return ret;
}
 
fh = (__file_handle*) __getOSHandle( fd );
get_fileinfo(fh->name, &info);
 
memset (pstat, 0, sizeof (* pstat));
pstat->st_mode = S_IFREG;
pstat->st_blksize = 4096;
pstat->st_size = info.size;
return 0;
}
 
int
_DEFUN (fstat, (fd, pstat),
int fd _AND
struct stat *pstat)
{
return _fstat_r (_REENT, fd, pstat);
}
 
#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */
/contrib/sdk/sources/newlib/libc/reent/getreent.c
19,7 → 19,3
::"r"(ent));
__sinit(ent);
}
 
 
 
 
/contrib/sdk/sources/newlib/libc/reent/gettimeofdayr.c
8,7 → 8,6
#include <sys/time.h>
#include <sys/times.h>
#include <_syslist.h>
#include <errno.h>
 
/* Some targets provides their own versions of these functions. Those
targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */
27,7 → 26,7
 
/* We use the errno variable used by the system dependent layer. */
#undef errno
static int errno;
extern int errno;
 
/*
FUNCTION
74,40 → 73,4
return ret;
}
 
#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10)
 
int
_gettimeofday (struct timeval *tv, void *tz)
{
unsigned int xtmp;
struct tm tmblk;
 
if( tv )
{
tv->tv_usec = 0;
 
__asm__ __volatile__("int $0x40":"=a"(xtmp):"0"(3));
tmblk.tm_sec = (xtmp>>16)&0xff;
tmblk.tm_min = (xtmp>>8)&0xff;
tmblk.tm_hour = xtmp&0xff;
BCD_TO_BIN(tmblk.tm_sec);
BCD_TO_BIN(tmblk.tm_min);
BCD_TO_BIN(tmblk.tm_hour);
__asm__ __volatile__("int $0x40":"=a"(xtmp):"0"(29));
tmblk.tm_mday = (xtmp>>16)&0xff;
tmblk.tm_mon = ((xtmp>>8)&0xff)-1;
tmblk.tm_year = ((xtmp&0xff)+2000)-1900;
tmblk.tm_wday = tmblk.tm_yday = 0;
tmblk.tm_isdst = -1;
tv->tv_sec = mktime(&tmblk);
return 0;
}
else
{
errno = EINVAL;
return -1;
};
}
 
 
#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */
/contrib/sdk/sources/newlib/libc/reent/isattyr.c
3,7 → 3,6
#include <reent.h>
#include <unistd.h>
#include <_syslist.h>
#include <errno.h>
 
/* Some targets provides their own versions of these functions. Those
targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */
55,8 → 54,10
{
int ret;
 
ptr->_errno = ENOTTY ;
return 0;
errno = 0;
if ((ret = _isatty (fd)) == -1 && errno != 0)
ptr->_errno = errno;
return ret;
}
 
#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */
/contrib/sdk/sources/newlib/libc/reent/linkr.c
0,0 → 1,66
/* Reentrant versions of file system calls. These implementations
just call the usual system calls. */
 
#include <reent.h>
#include <unistd.h>
#include <_syslist.h>
 
/* Some targets provides their own versions of these functions. Those
targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */
 
#ifdef _REENT_ONLY
#ifndef REENTRANT_SYSCALLS_PROVIDED
#define REENTRANT_SYSCALLS_PROVIDED
#endif
#endif
 
#ifdef REENTRANT_SYSCALLS_PROVIDED
 
int _dummy_link_syscalls = 1;
 
#else
 
/* We use the errno variable used by the system dependent layer. */
#undef errno
extern int errno;
 
/*
FUNCTION
<<_link_r>>---Reentrant version of link
INDEX
_link_r
 
ANSI_SYNOPSIS
#include <reent.h>
int _link_r(struct _reent *<[ptr]>,
const char *<[old]>, const char *<[new]>);
 
TRAD_SYNOPSIS
#include <reent.h>
int _link_r(<[ptr]>, <[old]>, <[new]>)
struct _reent *<[ptr]>;
char *<[old]>;
char *<[new]>;
 
DESCRIPTION
This is a reentrant version of <<link>>. It
takes a pointer to the global data block, which holds
<<errno>>.
*/
 
int
_DEFUN (_link_r, (ptr, old, new),
struct _reent *ptr _AND
_CONST char *old _AND
_CONST char *new)
{
int ret;
 
errno = 0;
if ((ret = _link (old, new)) == -1 && errno != 0)
ptr->_errno = errno;
return ret;
}
 
#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */
/contrib/sdk/sources/newlib/libc/reent/lseekr.c
3,7 → 3,6
#include <reent.h>
#include <unistd.h>
#include <_syslist.h>
#include <errno.h>
 
/* Some targets provides their own versions of this functions. Those
targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */
16,72 → 15,10
 
#ifndef REENTRANT_SYSCALLS_PROVIDED
 
#pragma pack(push, 1)
typedef struct
{
char sec;
char min;
char hour;
char rsv;
}detime_t;
/* We use the errno variable used by the system dependent layer. */
#undef errno
extern int errno;
 
typedef struct
{
char day;
char month;
short year;
}dedate_t;
 
typedef struct
{
unsigned attr;
unsigned flags;
union
{
detime_t ctime;
unsigned cr_time;
};
union
{
dedate_t cdate;
unsigned cr_date;
};
union
{
detime_t atime;
unsigned acc_time;
};
union
{
dedate_t adate;
unsigned acc_date;
};
union
{
detime_t mtime;
unsigned mod_time;
};
union
{
dedate_t mdate;
unsigned mod_date;
};
unsigned size;
unsigned size_high;
} FILEINFO;
 
#pragma pack(pop)
 
 
extern unsigned __NFiles;
 
#define __handle_check( __h, __r ) \
if( (__h) < 0 || (__h) > __NFiles ) { \
ptr->_errno = EBADF ; \
return( __r ); \
}
 
 
/*
FUNCTION
<<_lseek_r>>---Reentrant version of lseek
116,44 → 53,11
int whence)
{
_off_t ret;
__file_handle *fh;
 
__handle_check( fd, -1 );
fh = (__file_handle*) __getOSHandle( fd );
 
switch(whence)
{
case SEEK_SET:
ret = pos;
break;
case SEEK_CUR:
ret = fh->offset + pos;
break;
case SEEK_END:
{
FILEINFO info;
get_fileinfo(fh->name, &info);
ret = pos + info.size;
break;
errno = 0;
if ((ret = _lseek (fd, pos, whence)) == (_off_t) -1 && errno != 0)
ptr->_errno = errno;
return ret;
}
default:
ptr->_errno = EINVAL;
return -1;
};
 
fh->offset = ret;
 
return( ret );
}
 
_off_t
_DEFUN (lseek, (fd, pos, whence),
int fd _AND
_off_t pos _AND
int whence)
 
{
return _lseek_r(_REENT, fd, pos, whence);
};
 
#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */
/contrib/sdk/sources/newlib/libc/reent/openr.c
4,11 → 4,6
#include <unistd.h>
#include <fcntl.h>
#include <_syslist.h>
#include <sys/errno.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <sys/kos_io.h>
 
/* Some targets provides their own versions of this functions. Those
targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */
22,6 → 17,8
#ifndef REENTRANT_SYSCALLS_PROVIDED
 
/* We use the errno variable used by the system dependent layer. */
#undef errno
extern int errno;
 
/*
FUNCTION
49,173 → 46,20
<<errno>>.
*/
 
 
 
#define NULL_HANDLE (int)-1
#define DUMMY_HANDLE (int)-2
 
#define _READ 0x0001 /* file opened for reading */
#define _WRITE 0x0002 /* file opened for writing */
#define _UNGET 0x0004 /* ungetc has been done */
#define _BIGBUF 0x0008 /* big buffer allocated */
#define _EOF 0x0010 /* EOF has occurred */
#define _SFERR 0x0020 /* error has occurred on this file */
#define _APPEND 0x0080 /* file opened for append */
#define _BINARY 0x0040 /* file is binary, skip CRLF processing */
#define _TMPFIL 0x0800 /* this is a temporary file */
#define _DIRTY 0x1000 /* buffer has been modified */
#define _ISTTY 0x2000 /* is console device */
#define _DYNAMIC 0x4000 /* FILE is dynamically allocated */
#define _FILEEXT 0x8000 /* lseek with positive offset has been done */
#define _COMMIT 0x0001 /* extended flag: commit OS buffers on flush */
 
extern int _fmode;
 
 
static inline void debug_out(const char val)
{
__asm__ __volatile__(
"int $0x40 \n\t"
::"a"(63), "b"(1),"c"(val));
}
 
int debugwrite(const char *path, const void *buff,
size_t offset, size_t count, size_t *writes)
{
int ret = count;
const char *p = buff;
 
while (count--)
{
debug_out(*p++);
};
*writes = ret;
return ret;
};
 
static int __openFileHandle(const char *path, int mode, int *err)
{
fileinfo_t info;
__file_handle *handle;
 
// path = getfullpath(name);
 
*err = get_fileinfo(path, &info);
 
if( mode & O_EXCL && mode & O_CREAT )
{
if( ! *err)
{
*err = EEXIST;
return -1;
};
}
 
if( *err)
{
if(mode & O_CREAT)
*err=create_file(path);
 
if( *err)
{
return -1;
};
};
if( mode & O_TRUNC )
set_file_size(path, 0);
 
if ( !(handle=(__file_handle*)malloc(sizeof( __file_handle) )))
{
*err = ENOMEM;
return -1;
};
 
handle->name = strdup(path);
handle->offset = 0;
handle->write = write_file;
 
*err = 0;
 
return (int)handle;
};
 
 
 
int
_DEFUN (_open_r, (ptr, file, flags, dmode),
_DEFUN (_open_r, (ptr, file, flags, mode),
struct _reent *ptr _AND
_CONST char *file _AND
int flags _AND
int dmode)
int mode)
{
int hid;
int handle;
int err = 0;
unsigned iomode_flags;
int rwmode;
 
/*
if (flags & ~(O_RDONLY | O_WRONLY | O_RDWR | O_CREAT | O_APPEND | O_TRUNC))
{
ptr->_errno = ENOSYS;
return -1;
}
*/
 
// First try to get the required slot.
// No point in creating a file only to not use it. JBS 99/10/26
hid = __allocPOSIXHandle( DUMMY_HANDLE );
if( hid == -1 )
{
ptr->_errno = EMFILE;
return( -1 );
}
 
handle = __openFileHandle( file, flags, &err);
 
if( handle == -1 )
{
__freePOSIXHandle( hid );
ptr->_errno = err;
return( -1 );
}
 
__setOSHandle( hid, handle ); // JBS 99/11/01
 
rwmode = flags & ( O_RDONLY | O_WRONLY | O_RDWR | O_NOINHERIT );
 
iomode_flags = 0;
 
if( rwmode == O_RDWR ) iomode_flags |= _READ | _WRITE;
else if( rwmode == O_RDONLY) iomode_flags |= _READ;
else if( rwmode == O_WRONLY) iomode_flags |= _WRITE;
if( flags & O_APPEND ) iomode_flags |= _APPEND;
if( flags & (O_BINARY|O_TEXT) ) {
if( flags & O_BINARY ) iomode_flags |= _BINARY;
} else {
if( _fmode == O_BINARY ) iomode_flags |= _BINARY;
}
__SetIOMode( hid, iomode_flags );
 
ptr->_errno = 0;
 
return (hid);
}
 
int
_DEFUN (open, (file, flags, ...),
const char *file _AND
int flags _DOTS)
{
va_list ap;
int ret;
 
va_start (ap, flags);
ret = _open_r (_REENT, file, flags, va_arg (ap, int));
va_end (ap);
errno = 0;
if ((ret = _open (file, flags, mode)) == -1 && errno != 0)
ptr->_errno = errno;
return ret;
}
 
 
 
#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */
/contrib/sdk/sources/newlib/libc/reent/readr.c
3,7 → 3,6
#include <reent.h>
#include <unistd.h>
#include <_syslist.h>
#include <errno.h>
 
/* Some targets provides their own versions of this functions. Those
targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */
17,6 → 16,8
#ifndef REENTRANT_SYSCALLS_PROVIDED
 
/* We use the errno variable used by the system dependent layer. */
#undef errno
extern int errno;
 
/*
FUNCTION
44,30 → 45,7
<<errno>>.
*/
 
 
extern unsigned __NFiles;
 
#define _READ 0x0001 /* file opened for reading */
#define _BINARY 0x0040 /* file is binary, skip CRLF processing */
#define _ISTTY 0x2000 /* is console device */
 
#define __handle_check( __h, __r ) \
if( (__h) < 0 || (__h) > __NFiles ) { \
ptr->_errno = EBADF; \
return( __r ); \
}
 
_ssize_t
_DEFUN (_read, (fd, buf, cnt),
int fd _AND
_PTR buf _AND
size_t cnt)
{
 
return _read_r( _REENT, fd, buf, cnt);
}
 
_ssize_t
_DEFUN (_read_r, (ptr, fd, buf, cnt),
struct _reent *ptr _AND
int fd _AND
76,93 → 54,10
{
_ssize_t ret;
 
_ssize_t read_len, total_len;
unsigned reduce_idx, finish_idx;
unsigned iomode_flags;
char *buffer = buf;
int rc;
int h;
unsigned amount_read;
int err;
 
__file_handle *fh;
 
__handle_check( fd, -1 );
__ChkTTYIOMode( fd );
iomode_flags = __GetIOMode( fd );
if( iomode_flags == 0 )
{
ptr->_errno = EBADF;
return( -1 );
errno = 0;
if ((ret = (_ssize_t)_read (fd, buf, cnt)) == -1 && errno != 0)
ptr->_errno = errno;
return ret;
}
if( !(iomode_flags & _READ) )
{
ptr->_errno = EACCES; /* changed from EBADF to EACCES 23-feb-89 */
return( -1 );
}
 
fh = (__file_handle*) __getOSHandle( fd );
 
if( iomode_flags & _BINARY ) /* if binary mode */
{
err = read_file(fh->name, buffer, fh->offset, cnt, &amount_read);
fh->offset+= amount_read;
total_len = amount_read;
 
if(err)
if ( amount_read == 0)
return (-1);
}
else
{
total_len = 0;
read_len = cnt;
do
{
err=read_file(fh->name,buffer, fh->offset, cnt, &amount_read);
fh->offset+=amount_read;
 
if( amount_read == 0 )
break; /* EOF */
 
reduce_idx = 0;
finish_idx = reduce_idx;
for( ; reduce_idx < amount_read; ++reduce_idx )
{
if( buffer[ reduce_idx ] == 0x1a ) /* EOF */
{
_lseek_r(ptr, fd, ((long)reduce_idx - (long)amount_read)+1L,
SEEK_CUR );
total_len += finish_idx;
return( total_len );
}
if( buffer[ reduce_idx ] != '\r' )
{
buffer[ finish_idx++ ] = buffer[ reduce_idx ];
};
}
 
total_len += finish_idx;
buffer += finish_idx;
read_len -= finish_idx;
if( iomode_flags & _ISTTY )
{
break; /* 04-feb-88, FWC */
}
} while( read_len != 0 );
}
return( total_len );
}
 
 
_ssize_t
_DEFUN (read, (fd, buf, cnt),
int fd _AND
_PTR buf _AND
size_t cnt)
{
 
return _read_r(_REENT, fd, buf, cnt);
};
 
#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */
/contrib/sdk/sources/newlib/libc/reent/renamer.c
0,0 → 1,74
/* Reentrant version of rename system call. */
 
#include <reent.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <_syslist.h>
 
/* Some targets provides their own versions of these functions. Those
targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */
 
#ifdef _REENT_ONLY
#ifndef REENTRANT_SYSCALLS_PROVIDED
#define REENTRANT_SYSCALLS_PROVIDED
#endif
#endif
 
#ifndef REENTRANT_SYSCALLS_PROVIDED
 
/* We use the errno variable used by the system dependent layer. */
#undef errno
extern int errno;
 
/*
FUNCTION
<<_rename_r>>---Reentrant version of rename
INDEX
_rename_r
 
ANSI_SYNOPSIS
#include <reent.h>
int _rename_r(struct _reent *<[ptr]>,
const char *<[old]>, const char *<[new]>);
 
TRAD_SYNOPSIS
#include <reent.h>
int _rename_r(<[ptr]>, <[old]>, <[new]>)
struct _reent *<[ptr]>;
char *<[old]>;
char *<[new]>;
 
DESCRIPTION
This is a reentrant version of <<rename>>. It
takes a pointer to the global data block, which holds
<<errno>>.
*/
 
int
_DEFUN (_rename_r, (ptr, old, new),
struct _reent *ptr _AND
_CONST char *old _AND
_CONST char *new)
{
int ret = 0;
 
#ifdef HAVE_RENAME
errno = 0;
if ((ret = _rename (old, new)) == -1 && errno != 0)
ptr->_errno = errno;
#else
if (_link_r (ptr, old, new) == -1)
return -1;
 
if (_unlink_r (ptr, old) == -1)
{
/* ??? Should we unlink new? (rhetorical question) */
return -1;
}
#endif
return ret;
}
 
#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */
/contrib/sdk/sources/newlib/libc/reent/timesr.c
0,0 → 1,63
/* Reentrant versions of times system calls */
 
#include <reent.h>
#include <time.h>
#include <sys/time.h>
#include <sys/times.h>
#include <_syslist.h>
 
/* Some targets provides their own versions of these functions. Those
targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */
 
#ifdef _REENT_ONLY
#ifndef REENTRANT_SYSCALLS_PROVIDED
#define REENTRANT_SYSCALLS_PROVIDED
#endif
#endif
 
#ifdef REENTRANT_SYSCALLS_PROVIDED
 
int _dummy_times_syscalls = 1;
 
#else
 
/* We use the errno variable used by the system dependent layer. */
#undef errno
extern int errno;
 
/*
FUNCTION
<<_times_r>>---Reentrant version of times
 
INDEX
_times_r
 
ANSI_SYNOPSIS
#include <reent.h>
#include <sys/times.h>
clock_t _times_r(struct _reent *<[ptr]>, struct tms *<[ptms]>);
 
TRAD_SYNOPSIS
#include <reent.h>
#include <sys/times.h>
clock_t _times_r(<[ptr]>, <[ptms]>)
struct _reent *<[ptr]>;
struct tms *<[ptms]>;
 
DESCRIPTION
This is a reentrant version of <<times>>. It
takes a pointer to the global data block, which holds
<<errno>>.
*/
 
clock_t
_DEFUN (_times_r, (ptr, ptms),
struct _reent *ptr _AND
struct tms *ptms)
{
clock_t ret;
 
ret = _times (ptms);
return ret;
}
#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */
/contrib/sdk/sources/newlib/libc/reent/unlinkr.c
0,0 → 1,59
/* Reentrant versions of file system calls. These implementations
just call the usual system calls. */
 
#include <reent.h>
#include <unistd.h>
#include <_syslist.h>
 
/* Some targets provides their own versions of these functions. Those
targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */
 
#ifdef _REENT_ONLY
#ifndef REENTRANT_SYSCALLS_PROVIDED
#define REENTRANT_SYSCALLS_PROVIDED
#endif
#endif
 
#ifndef REENTRANT_SYSCALLS_PROVIDED
 
/* We use the errno variable used by the system dependent layer. */
#undef errno
extern int errno;
 
/*
FUNCTION
<<_unlink_r>>---Reentrant version of unlink
INDEX
_unlink_r
 
ANSI_SYNOPSIS
#include <reent.h>
int _unlink_r(struct _reent *<[ptr]>, const char *<[file]>);
 
TRAD_SYNOPSIS
#include <reent.h>
int _unlink_r(<[ptr]>, <[file]>)
struct _reent *<[ptr]>;
char *<[file]>;
 
DESCRIPTION
This is a reentrant version of <<unlink>>. It
takes a pointer to the global data block, which holds
<<errno>>.
*/
 
int
_DEFUN (_unlink_r, (ptr, file),
struct _reent *ptr _AND
_CONST char *file)
{
int ret;
 
errno = 0;
if ((ret = _unlink (file)) == -1 && errno != 0)
ptr->_errno = errno;
return ret;
}
 
#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */
/contrib/sdk/sources/newlib/libc/reent/writer.c
3,11 → 3,7
#include <reent.h>
#include <unistd.h>
#include <_syslist.h>
#include <alloca.h>
#include <errno.h>
#include <string.h>
 
 
/* Some targets provides their own versions of this functions. Those
targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */
 
20,6 → 16,8
#ifndef REENTRANT_SYSCALLS_PROVIDED
 
/* We use the errno variable used by the system dependent layer. */
#undef errno
extern int errno;
 
/*
FUNCTION
47,211 → 45,19
<<errno>>.
*/
 
 
#define _WRITE 0x0002 /* file opened for writing */
#define _APPEND 0x0080 /* file opened for append */
#define _BINARY 0x0040 /* file is binary, skip CRLF processing */
#define _ISTTY 0x2000 /* is console device */
#define _FILEEXT 0x8000 /* lseek with positive offset has been done */
 
#define __handle_check( __h, __r ) \
if( (__h) < 0 || (__h) > __NFiles ) { \
ptr->_errno = EBADF; \
return( __r ); \
}
 
extern unsigned __NFiles;
 
#define PAD_SIZE 512
 
static int zero_pad(struct _reent *ptr, int handle ) /* 09-jan-95 */
/*******************************/
{
int rc;
long curPos, eodPos;
long bytesToWrite;
unsigned writeAmt;
char zeroBuf[PAD_SIZE];
 
// Pad with zeros due to lseek() past EOF (POSIX)
curPos = _lseek_r( ptr, handle, 0L, SEEK_CUR ); /* current offset */
if( curPos == -1 )
return( -1 );
eodPos = _lseek_r( ptr, handle, 0L, SEEK_END ); /* end of data offset */
if( eodPos == -1 )
return( -1 );
 
if( curPos > eodPos ) {
bytesToWrite = curPos - eodPos; /* amount to pad by */
 
if( bytesToWrite > 0 ) { /* only write if needed */
memset( zeroBuf, 0x00, PAD_SIZE ); /* zero out a buffer */
do { /* loop until done */
if( bytesToWrite > PAD_SIZE )
writeAmt = 512;
else
writeAmt = (unsigned)bytesToWrite;
rc = _write_r(ptr, handle, zeroBuf, writeAmt );
if( rc < 0 )
return( rc );
bytesToWrite -= writeAmt; /* more bytes written */
} while( bytesToWrite != 0 );
}
} else {
curPos = _lseek_r( ptr, handle, curPos, SEEK_SET );
if( curPos == -1 ) {
return( -1 );
}
}
 
return( 0 ); /* return success code */
}
 
 
static int os_write(struct _reent *ptr, int handle,
const void *buffer, unsigned len, unsigned *amt )
/********************************************************************************/
{
__file_handle *fh;
int rc;
 
rc = 0;
*amt = 0;
 
fh = (__file_handle*) __getOSHandle( handle );
 
rc = fh->write(fh->name,buffer,fh->offset,len,amt);
 
fh->offset+= *amt;
 
if( *amt != len )
{
rc = ENOSPC;
ptr->_errno = ENOSPC;
}
return( rc );
}
_ssize_t
_DEFUN (_write_r, (ptr, fd, buffer, cnt),
_DEFUN (_write_r, (ptr, fd, buf, cnt),
struct _reent *ptr _AND
int fd _AND
_CONST _PTR buffer _AND
_CONST _PTR buf _AND
size_t cnt)
{
_ssize_t ret;
unsigned int iomode_flags;
unsigned len_written, i, j;
int rc2;
char *buf;
 
__file_handle *fh;
 
__handle_check( fd, -1 );
 
iomode_flags = __GetIOMode( fd );
if( iomode_flags == 0 )
{
ptr->_errno = EBADF;
return( -1 );
errno = 0;
if ((ret = (_ssize_t)_write (fd, buf, cnt)) == -1 && errno != 0)
ptr->_errno = errno;
return ret;
}
 
if( !(iomode_flags & _WRITE) ) {
ptr->_errno = EACCES ; /* changed from EBADF to EACCES 23-feb-89 */
return( -1 );
}
 
if( (iomode_flags & _APPEND) && !(iomode_flags & _ISTTY) )
{
fh->offset = _lseek_r(ptr, fd, 0L, SEEK_END ); /* end of data offset */
}
 
len_written = 0;
rc2 = 0;
 
// Pad the file with zeros if necessary
if( iomode_flags & _FILEEXT )
{
// turn off file extended flag
__SetIOMode_nogrow( fd, iomode_flags&(~_FILEEXT) );
 
// It is not required to pad a file with zeroes on an NTFS file system;
// unfortunately it is required on FAT (and probably FAT32). (JBS)
rc2 = zero_pad( ptr, fd );
}
 
if( rc2 == 0 )
{
if( iomode_flags & _BINARY ) { /* if binary mode */
rc2 = os_write(ptr, fd, buffer, cnt, &len_written );
/* end of binary mode part */
} else { /* text mode */
 
int buf_size = 512;
 
buf = (char*)alloca( buf_size );
 
j = 0;
for( i = 0; i < cnt; )
{
if( ((const char*)buffer)[i] == '\n' )
{
buf[j] = '\r';
++j;
if( j == buf_size )
{
rc2 = os_write(ptr, fd, buf, buf_size, &j );
if( rc2 == -1 )
break;
len_written += j;
if( rc2 == ENOSPC )
break;
len_written = i;
j = 0;
}
}
buf[j] = ((const char*)buffer)[i];
++i;
++j;
if( j == buf_size ) {
rc2 = os_write(ptr, fd, buf, buf_size, &j );
if( rc2 == -1 )
break;
len_written += j;
if( rc2 == ENOSPC )
break;
len_written = i;
j = 0;
}
}
if( j ) {
rc2 = os_write(ptr, fd, buf, j, &i );
if( rc2 == ENOSPC ) {
len_written += i;
} else {
len_written = cnt;
}
}
/* end of text mode part */
}
}
 
if( rc2 == -1 ) {
return( rc2 );
} else {
return( len_written );
}
}
 
_ssize_t
_DEFUN (write, ( fd, buffer, cnt),
int fd _AND
_CONST _PTR buffer _AND
size_t cnt)
 
{
 
return _write_r(_REENT, fd, buffer, cnt);
 
}
 
#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */
/contrib/sdk/sources/newlib/libc/search/bsearch.c
61,8 → 61,6
No supporting OS subroutines are required.
*/
 
#include <_ansi.h>
#include <reent.h>
#include <stdlib.h>
 
_PTR
/contrib/sdk/sources/newlib/libc/stdio/asiprintf.c
0,0 → 1,80
/*
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
/* This code was copied from asprintf.c */
/* doc in siprintf.c */
 
#include <_ansi.h>
#include <reent.h>
#include <stdio.h>
#include <stdarg.h>
#include <limits.h>
#include "local.h"
 
int
_DEFUN(_asiprintf_r, (ptr, strp, fmt),
struct _reent *ptr _AND
char **strp _AND
const char *fmt _DOTS)
{
int ret;
va_list ap;
FILE f;
 
/* mark a zero-length reallocatable buffer */
f._flags = __SWR | __SSTR | __SMBF;
f._bf._base = f._p = NULL;
f._bf._size = f._w = 0;
f._file = -1; /* No file. */
va_start (ap, fmt);
ret = _svfiprintf_r (ptr, &f, fmt, ap);
va_end (ap);
if (ret >= 0)
{
*f._p = 0;
*strp = (char *) f._bf._base;
}
return (ret);
}
 
#ifndef _REENT_ONLY
 
int
_DEFUN(asiprintf, (strp, fmt),
char **strp _AND
const char *fmt _DOTS)
{
int ret;
va_list ap;
FILE f;
 
/* mark a zero-length reallocatable buffer */
f._flags = __SWR | __SSTR | __SMBF;
f._bf._base = f._p = NULL;
f._bf._size = f._w = 0;
f._file = -1; /* No file. */
va_start (ap, fmt);
ret = _svfiprintf_r (_REENT, &f, fmt, ap);
va_end (ap);
if (ret >= 0)
{
*f._p = 0;
*strp = (char *) f._bf._base;
}
return (ret);
}
 
#endif /* ! _REENT_ONLY */
/contrib/sdk/sources/newlib/libc/stdio/asniprintf.c
0,0 → 1,108
/* Copyright (C) 2007, 2008 Eric Blake
* Permission to use, copy, modify, and distribute this software
* is freely granted, provided that this notice is preserved.
*/
/* This code was derived from asprintf.c */
/* doc in siprintf.c */
 
#include <_ansi.h>
#include <reent.h>
#include <stdio.h>
#include <stdarg.h>
#include <limits.h>
#include <errno.h>
#include "local.h"
 
char *
_DEFUN(_asniprintf_r, (ptr, buf, lenp, fmt),
struct _reent *ptr _AND
char *buf _AND
size_t *lenp _AND
const char *fmt _DOTS)
{
int ret;
va_list ap;
FILE f;
size_t len = *lenp;
 
if (buf && len)
{
/* mark an existing buffer, but allow allocation of larger string */
f._flags = __SWR | __SSTR | __SOPT;
}
else
{
/* mark a zero-length reallocatable buffer */
f._flags = __SWR | __SSTR | __SMBF;
len = 0;
buf = NULL;
}
f._bf._base = f._p = (unsigned char *) buf;
/* For now, inherit the 32-bit signed limit of FILE._bf._size.
FIXME - it would be nice to rewrite sys/reent.h to support size_t
for _size. */
if (len > INT_MAX)
{
ptr->_errno = EOVERFLOW;
return NULL;
}
f._bf._size = f._w = len;
f._file = -1; /* No file. */
va_start (ap, fmt);
ret = _svfiprintf_r (ptr, &f, fmt, ap);
va_end (ap);
if (ret < 0)
return NULL;
*lenp = ret;
*f._p = '\0';
return (char *) f._bf._base;
}
 
#ifndef _REENT_ONLY
 
char *
_DEFUN(asniprintf, (buf, lenp, fmt),
char *buf _AND
size_t *lenp _AND
const char *fmt _DOTS)
{
int ret;
va_list ap;
FILE f;
size_t len = *lenp;
struct _reent *ptr = _REENT;
 
if (buf && len)
{
/* mark an existing buffer, but allow allocation of larger string */
f._flags = __SWR | __SSTR | __SOPT;
}
else
{
/* mark a zero-length reallocatable buffer */
f._flags = __SWR | __SSTR | __SMBF;
len = 0;
buf = NULL;
}
f._bf._base = f._p = (unsigned char *) buf;
/* For now, inherit the 32-bit signed limit of FILE._bf._size.
FIXME - it would be nice to rewrite sys/reent.h to support size_t
for _size. */
if (len > INT_MAX)
{
ptr->_errno = EOVERFLOW;
return NULL;
}
f._bf._size = f._w = len;
f._file = -1; /* No file. */
va_start (ap, fmt);
ret = _svfiprintf_r (ptr, &f, fmt, ap);
va_end (ap);
if (ret < 0)
return NULL;
*lenp = ret;
*f._p = '\0';
return (char *) f._bf._base;
}
 
#endif /* ! _REENT_ONLY */
/contrib/sdk/sources/newlib/libc/stdio/asnprintf.c
0,0 → 1,108
/* Copyright (C) 2007, 2008 Eric Blake
* Permission to use, copy, modify, and distribute this software
* is freely granted, provided that this notice is preserved.
*/
/* This code was derived from asprintf.c */
/* doc in sprintf.c */
 
#include <_ansi.h>
#include <reent.h>
#include <stdio.h>
#include <stdarg.h>
#include <limits.h>
#include <errno.h>
#include "local.h"
 
char *
_DEFUN(_asnprintf_r, (ptr, buf, lenp, fmt),
struct _reent *__restrict ptr _AND
char *buf _AND
size_t *lenp _AND
const char *__restrict fmt _DOTS)
{
int ret;
va_list ap;
FILE f;
size_t len = *lenp;
 
if (buf && len)
{
/* mark an existing buffer, but allow allocation of larger string */
f._flags = __SWR | __SSTR | __SOPT;
}
else
{
/* mark a zero-length reallocatable buffer */
f._flags = __SWR | __SSTR | __SMBF;
len = 0;
buf = NULL;
}
f._bf._base = f._p = (unsigned char *) buf;
/* For now, inherit the 32-bit signed limit of FILE._bf._size.
FIXME - it would be nice to rewrite sys/reent.h to support size_t
for _size. */
if (len > INT_MAX)
{
ptr->_errno = EOVERFLOW;
return NULL;
}
f._bf._size = f._w = len;
f._file = -1; /* No file. */
va_start (ap, fmt);
ret = _svfprintf_r (ptr, &f, fmt, ap);
va_end (ap);
if (ret < 0)
return NULL;
*lenp = ret;
*f._p = '\0';
return (char *) f._bf._base;
}
 
#ifndef _REENT_ONLY
 
char *
_DEFUN(asnprintf, (buf, lenp, fmt),
char *__restrict buf _AND
size_t *__restrict lenp _AND
const char *__restrict fmt _DOTS)
{
int ret;
va_list ap;
FILE f;
size_t len = *lenp;
struct _reent *ptr = _REENT;
 
if (buf && len)
{
/* mark an existing buffer, but allow allocation of larger string */
f._flags = __SWR | __SSTR | __SOPT;
}
else
{
/* mark a zero-length reallocatable buffer */
f._flags = __SWR | __SSTR | __SMBF;
len = 0;
buf = NULL;
}
f._bf._base = f._p = (unsigned char *) buf;
/* For now, inherit the 32-bit signed limit of FILE._bf._size.
FIXME - it would be nice to rewrite sys/reent.h to support size_t
for _size. */
if (len > INT_MAX)
{
ptr->_errno = EOVERFLOW;
return NULL;
}
f._bf._size = f._w = len;
f._file = -1; /* No file. */
va_start (ap, fmt);
ret = _svfprintf_r (ptr, &f, fmt, ap);
va_end (ap);
if (ret < 0)
return NULL;
*lenp = ret;
*f._p = '\0';
return (char *) f._bf._base;
}
 
#endif /* ! _REENT_ONLY */
/contrib/sdk/sources/newlib/libc/stdio/asprintf.c
0,0 → 1,80
/*
* Copyright (c) 1990, 2007 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
/* This code was copied from sprintf.c */
/* doc in sprintf.c */
 
#include <_ansi.h>
#include <reent.h>
#include <stdio.h>
#include <stdarg.h>
#include <limits.h>
#include "local.h"
 
int
_DEFUN(_asprintf_r, (ptr, strp, fmt),
struct _reent *ptr _AND
char **__restrict strp _AND
const char *__restrict fmt _DOTS)
{
int ret;
va_list ap;
FILE f;
 
/* mark a zero-length reallocatable buffer */
f._flags = __SWR | __SSTR | __SMBF;
f._bf._base = f._p = NULL;
f._bf._size = f._w = 0;
f._file = -1; /* No file. */
va_start (ap, fmt);
ret = _svfprintf_r (ptr, &f, fmt, ap);
va_end (ap);
if (ret >= 0)
{
*f._p = 0;
*strp = (char *) f._bf._base;
}
return (ret);
}
 
#ifndef _REENT_ONLY
 
int
_DEFUN(asprintf, (strp, fmt),
char **__restrict strp _AND
const char *__restrict fmt _DOTS)
{
int ret;
va_list ap;
FILE f;
 
/* mark a zero-length reallocatable buffer */
f._flags = __SWR | __SSTR | __SMBF;
f._bf._base = f._p = NULL;
f._bf._size = f._w = 0;
f._file = -1; /* No file. */
va_start (ap, fmt);
ret = _svfprintf_r (_REENT, &f, fmt, ap);
va_end (ap);
if (ret >= 0)
{
*f._p = 0;
*strp = (char *) f._bf._base;
}
return (ret);
}
 
#endif /* ! _REENT_ONLY */
/contrib/sdk/sources/newlib/libc/stdio/clearerr.c
65,7 → 65,7
FILE * fp)
{
CHECK_INIT(_REENT, fp);
_flockfile (fp);
_newlib_flockfile_start (fp);
__sclearerr (fp);
_funlockfile (fp);
_newlib_flockfile_end (fp);
}
/contrib/sdk/sources/newlib/libc/stdio/dprintf.c
19,12 → 19,13
ANSI_SYNOPSIS
#include <stdio.h>
#include <stdarg.h>
int dprintf(int <[fd]>, const char *<[format]>, ...);
int vdprintf(int <[fd]>, const char *<[format]>, va_list <[ap]>);
int dprintf(int <[fd]>, const char *restrict <[format]>, ...);
int vdprintf(int <[fd]>, const char *restrict <[format]>,
va_list <[ap]>);
int _dprintf_r(struct _reent *<[ptr]>, int <[fd]>,
const char *<[format]>, ...);
const char *restrict <[format]>, ...);
int _vdprintf_r(struct _reent *<[ptr]>, int <[fd]>,
const char *<[format]>, va_list <[ap]>);
const char *restrict <[format]>, va_list <[ap]>);
 
DESCRIPTION
<<dprintf>> and <<vdprintf>> allow printing a format, similarly to
55,7 → 56,7
_DEFUN(_dprintf_r, (ptr, fd, format),
struct _reent *ptr _AND
int fd _AND
const char *format _DOTS)
const char *__restrict format _DOTS)
{
va_list ap;
int n;
71,7 → 72,7
int
_DEFUN(dprintf, (fd, format),
int fd _AND
const char *format _DOTS)
const char *__restrict format _DOTS)
{
va_list ap;
int n;
/contrib/sdk/sources/newlib/libc/stdio/fclose.c
76,11 → 76,20
 
CHECK_INIT (rptr, fp);
 
/* We can't use the _newlib_flockfile_XXX macros here due to the
interlocked locking with the sfp_lock. */
#ifdef _STDIO_WITH_THREAD_CANCELLATION_SUPPORT
int __oldcancel;
pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &__oldcancel);
#endif
_flockfile (fp);
 
if (fp->_flags == 0) /* not open! */
{
_funlockfile (fp);
#ifdef _STDIO_WITH_THREAD_CANCELLATION_SUPPORT
pthread_setcancelstate (__oldcancel, &__oldcancel);
#endif
return (0);
}
/* Unconditionally flush to allow special handling for seekable read
103,6 → 112,9
#endif
 
__sfp_lock_release ();
#ifdef _STDIO_WITH_THREAD_CANCELLATION_SUPPORT
pthread_setcancelstate (__oldcancel, &__oldcancel);
#endif
 
return (r);
}
/contrib/sdk/sources/newlib/libc/stdio/fdopen.c
93,7 → 93,7
if ((fp = __sfp (ptr)) == 0)
return 0;
 
_flockfile (fp);
_newlib_flockfile_start (fp);
 
fp->_flags = flags;
/* POSIX recommends setting the O_APPEND bit on fd to match append
127,7 → 127,7
fp->_flags |= __SCLE;
#endif
 
_funlockfile (fp);
_newlib_flockfile_end (fp);
return fp;
}
 
/contrib/sdk/sources/newlib/libc/stdio/feof.c
0,0 → 1,65
/*
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
 
/*
FUNCTION
<<feof>>---test for end of file
 
INDEX
feof
 
ANSI_SYNOPSIS
#include <stdio.h>
int feof(FILE *<[fp]>);
 
TRAD_SYNOPSIS
#include <stdio.h>
int feof(<[fp]>)
FILE *<[fp]>;
 
DESCRIPTION
<<feof>> tests whether or not the end of the file identified by <[fp]>
has been reached.
 
RETURNS
<<feof>> returns <<0>> if the end of file has not yet been reached; if
at end of file, the result is nonzero.
 
PORTABILITY
<<feof>> is required by ANSI C.
 
No supporting OS subroutines are required.
*/
 
#include <stdio.h>
#include "local.h"
 
/* A subroutine version of the macro feof. */
 
#undef feof
 
int
_DEFUN(feof, (fp),
FILE * fp)
{
int result;
CHECK_INIT(_REENT, fp);
_newlib_flockfile_start (fp);
result = __sfeof (fp);
_newlib_flockfile_end (fp);
return result;
}
/contrib/sdk/sources/newlib/libc/stdio/fflush.c
75,15 → 75,19
register FILE * fp)
{
register unsigned char *p;
register int n, t;
register _READ_WRITE_BUFSIZE_TYPE n;
register _READ_WRITE_RETURN_TYPE t;
short flags;
 
t = fp->_flags;
if ((t & __SWR) == 0)
flags = fp->_flags;
if ((flags & __SWR) == 0)
{
#ifdef _FSEEK_OPTIMIZATION
/* For a read stream, an fflush causes the next seek to be
unoptimized (i.e. forces a system-level seek). This conforms
to the POSIX and SUSv3 standards. */
fp->_flags |= __SNPT;
#endif
 
/* For a seekable stream with buffered read characters, we will attempt
a seek to the current position now. A subsequent read will then get
152,7 → 156,9
{
/* Seek successful or ignorable error condition.
We can clear read buffer now. */
#ifdef _FSEEK_OPTIMIZATION
fp->_flags &= ~__SNPT;
#endif
fp->_r = 0;
fp->_p = fp->_bf._base;
if ((fp->_flags & __SOFF) && (curoff != -1 || ptr->_errno == 0))
182,7 → 188,7
* write function.
*/
fp->_p = p;
fp->_w = t & (__SLBF | __SNBF) ? 0 : fp->_bf._size;
fp->_w = flags & (__SLBF | __SNBF) ? 0 : fp->_bf._size;
 
while (n > 0)
{
226,9 → 232,9
if (!fp->_flags)
return 0;
 
_flockfile (fp);
_newlib_flockfile_start (fp);
ret = __sflush_r (ptr, fp);
_funlockfile (fp);
_newlib_flockfile_end (fp);
return ret;
}
 
/contrib/sdk/sources/newlib/libc/stdio/fgetc.c
78,9 → 78,9
{
int result;
CHECK_INIT(ptr, fp);
_flockfile (fp);
_newlib_flockfile_start (fp);
result = __sgetc_r (ptr, fp);
_funlockfile (fp);
_newlib_flockfile_end (fp);
return result;
}
 
92,10 → 92,12
{
#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__)
int result;
CHECK_INIT(_REENT, fp);
_flockfile (fp);
result = __sgetc_r (_REENT, fp);
_funlockfile (fp);
struct _reent *reent = _REENT;
 
CHECK_INIT(reent, fp);
_newlib_flockfile_start (fp);
result = __sgetc_r (reent, fp);
_newlib_flockfile_end (fp);
return result;
#else
return _fgetc_r (_REENT, fp);
/contrib/sdk/sources/newlib/libc/stdio/fgets.c
26,10 → 26,10
 
ANSI_SYNOPSIS
#include <stdio.h>
char *fgets(char *<[buf]>, int <[n]>, FILE *<[fp]>);
char *fgets(char *restrict <[buf]>, int <[n]>, FILE *restrict <[fp]>);
 
#include <stdio.h>
char *_fgets_r(struct _reent *<[ptr]>, char *<[buf]>, int <[n]>, FILE *<[fp]>);
char *_fgets_r(struct _reent *<[ptr]>, char *restrict <[buf]>, int <[n]>, FILE *restrict <[fp]>);
 
TRAD_SYNOPSIS
#include <stdio.h>
83,9 → 83,9
char *
_DEFUN(_fgets_r, (ptr, buf, n, fp),
struct _reent * ptr _AND
char *buf _AND
char *__restrict buf _AND
int n _AND
FILE * fp)
FILE *__restrict fp)
{
size_t len;
char *s;
98,11 → 98,11
 
CHECK_INIT(ptr, fp);
 
_flockfile (fp);
_newlib_flockfile_start (fp);
#ifdef __SCLE
if (fp->_flags & __SCLE)
{
int c;
int c = 0;
/* Sorry, have to do it the slow way */
while (--n > 0 && (c = __sgetc_r (ptr, fp)) != EOF)
{
112,11 → 112,11
}
if (c == EOF && s == buf)
{
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return NULL;
}
*s = 0;
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return buf;
}
#endif
134,7 → 134,7
/* EOF: stop with partial or no line */
if (s == buf)
{
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return 0;
}
break;
159,7 → 159,7
fp->_p = t;
_CAST_VOID memcpy ((_PTR) s, (_PTR) p, len);
s[len] = 0;
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return (buf);
}
fp->_r -= len;
169,7 → 169,7
}
while ((n -= len) != 0);
*s = 0;
_funlockfile (fp);
_newlib_flockfile_end (fp);
return buf;
}
 
177,9 → 177,9
 
char *
_DEFUN(fgets, (buf, n, fp),
char *buf _AND
char *__restrict buf _AND
int n _AND
FILE * fp)
FILE *__restrict fp)
{
return _fgets_r (_REENT, buf, n, fp);
}
/contrib/sdk/sources/newlib/libc/stdio/fileno.c
47,6 → 47,7
 
#include <_ansi.h>
#include <stdio.h>
#include <errno.h>
#include "local.h"
 
int
55,8 → 56,14
{
int result;
CHECK_INIT (_REENT, f);
_flockfile (f);
_newlib_flockfile_start (f);
if (f->_flags)
result = __sfileno (f);
_funlockfile (f);
else
{
result = -1;
_REENT->_errno = EBADF;
}
_newlib_flockfile_end (f);
return result;
}
/contrib/sdk/sources/newlib/libc/stdio/findfp.c
62,7 → 62,11
ptr->_flags |= __SL64;
#endif /* __LARGE64_FILES */
ptr->_seek = __sseek;
#ifdef _STDIO_CLOSE_PER_REENT_STD_STREAMS
ptr->_close = __sclose;
#else /* _STDIO_CLOSE_STD_STREAMS */
ptr->_close = NULL;
#endif /* _STDIO_CLOSE_STD_STREAMS */
#if !defined(__SINGLE_THREAD__) && !defined(_REENT_SMALL)
__lock_init_recursive (ptr->_lock);
/*
77,23 → 81,27
#endif
}
 
struct glue_with_file {
struct _glue glue;
FILE file;
};
 
struct _glue *
_DEFUN(__sfmoreglue, (d, n),
struct _reent *d _AND
register int n)
{
struct _glue *g;
FILE *p;
struct glue_with_file *g;
 
g = (struct _glue *) _malloc_r (d, sizeof (*g) + n * sizeof (FILE));
g = (struct glue_with_file *)
_malloc_r (d, sizeof (*g) + (n - 1) * sizeof (FILE));
if (g == NULL)
return NULL;
p = (FILE *) (g + 1);
g->_next = NULL;
g->_niobs = n;
g->_iobs = p;
memset (p, 0, n * sizeof (FILE));
return g;
g->glue._next = NULL;
g->glue._niobs = n;
g->glue._iobs = &g->file;
memset (&g->file, 0, n * sizeof (FILE));
return &g->glue;
}
 
/*
108,7 → 116,7
int n;
struct _glue *g;
 
__sfp_lock_acquire ();
_newlib_sfp_lock_start ();
 
if (!_GLOBAL_REENT->__sdidinit)
__sinit (_GLOBAL_REENT);
121,7 → 129,7
(g->_next = __sfmoreglue (d, NDYNAMIC)) == NULL)
break;
}
__sfp_lock_release ();
_newlib_sfp_lock_exit ();
d->_errno = ENOMEM;
return NULL;
 
132,7 → 140,7
#ifndef __SINGLE_THREAD__
__lock_init_recursive (fp->_lock);
#endif
__sfp_lock_release ();
_newlib_sfp_lock_end ();
 
fp->_p = NULL; /* no current pointer */
fp->_w = 0; /* nothing to read or write */
192,7 → 200,6
 
/* make sure we clean up on exit */
s->__cleanup = _cleanup_r; /* conservative */
s->__sdidinit = 1;
 
s->__sglue._next = NULL;
#ifndef _REENT_SMALL
201,6 → 208,11
#else
s->__sglue._niobs = 0;
s->__sglue._iobs = NULL;
/* Avoid infinite recursion when calling __sfp for _GLOBAL_REENT. The
problem is that __sfp checks for _GLOBAL_REENT->__sdidinit and calls
__sinit if it's 0. */
if (s == _GLOBAL_REENT)
s->__sdidinit = 1;
s->_stdin = __sfp(s);
s->_stdout = __sfp(s);
s->_stderr = __sfp(s);
224,6 → 236,8
when the underlying fd 2 is write-only. */
std (s->_stderr, __SRW | __SNBF, 2, s);
 
s->__sdidinit = 1;
 
__sinit_lock_release ();
}
 
235,25 → 249,25
_VOID
_DEFUN_VOID(__sfp_lock_acquire)
{
__lock_acquire_recursive (__sfp_lock);
//__lock_acquire_recursive (__sfp_lock);
}
 
_VOID
_DEFUN_VOID(__sfp_lock_release)
{
__lock_release_recursive (__sfp_lock);
//__lock_release_recursive (__sfp_lock);
}
 
_VOID
_DEFUN_VOID(__sinit_lock_acquire)
{
__lock_acquire_recursive (__sinit_lock);
//__lock_acquire_recursive (__sinit_lock);
}
 
_VOID
_DEFUN_VOID(__sinit_lock_release)
{
__lock_release_recursive (__sinit_lock);
//__lock_release_recursive (__sinit_lock);
}
 
/* Walkable file locking routine. */
/contrib/sdk/sources/newlib/libc/stdio/flags.c
60,27 → 60,40
ptr->_errno = EINVAL;
return (0);
}
if (mode[1] && (mode[1] == '+' || mode[2] == '+'))
while (*++mode)
{
switch (*mode)
{
case '+':
ret = (ret & ~(__SRD | __SWR)) | __SRW;
m = O_RDWR;
}
if (mode[1] && (mode[1] == 'b' || mode[2] == 'b'))
{
m = (m & ~O_ACCMODE) | O_RDWR;
break;
case 'b':
#ifdef O_BINARY
m |= O_BINARY;
#endif
}
break;
#ifdef __CYGWIN__
else if (mode[1] && (mode[1] == 't' || mode[2] == 't'))
#else
else
case 't':
m |= O_TEXT;
break;
#endif
{
#ifdef O_TEXT
#if defined (O_CLOEXEC) && defined (_GLIBC_EXTENSION)
case 'e':
m |= O_CLOEXEC;
break;
#endif
case 'x':
m |= O_EXCL;
break;
default:
break;
}
}
#if defined (O_TEXT) && !defined (__CYGWIN__)
if (!(m | O_BINARY))
m |= O_TEXT;
#endif
}
*optr = m | o;
return ret;
}
/contrib/sdk/sources/newlib/libc/stdio/fopen.c
126,8 → 126,8
FILE *
_DEFUN(_fopen_r, (ptr, file, mode),
struct _reent *ptr _AND
_CONST char *file _AND
_CONST char *mode)
_CONST char *__restrict file _AND
_CONST char *__restrict mode)
{
register FILE *fp;
register int f;
140,16 → 140,16
 
if ((f = _open_r (ptr, file, oflags, 0666)) < 0)
{
__sfp_lock_acquire ();
_newlib_sfp_lock_start ();
fp->_flags = 0; /* release */
#ifndef __SINGLE_THREAD__
__lock_close_recursive (fp->_lock);
#endif
__sfp_lock_release ();
_newlib_sfp_lock_end ();
return NULL;
}
 
_flockfile (fp);
_newlib_flockfile_start (fp);
 
fp->_file = f;
fp->_flags = flags;
167,7 → 167,7
fp->_flags |= __SCLE;
#endif
 
_funlockfile (fp);
_newlib_flockfile_end (fp);
return fp;
}
 
/contrib/sdk/sources/newlib/libc/stdio/fprintf.c
24,8 → 24,8
int
_DEFUN(_fprintf_r, (ptr, fp, fmt),
struct _reent *ptr _AND
FILE *fp _AND
const char *fmt _DOTS)
FILE *__restrict fp _AND
const char *__restrict fmt _DOTS)
{
int ret;
va_list ap;
40,8 → 40,8
 
int
_DEFUN(fprintf, (fp, fmt),
FILE *fp _AND
const char *fmt _DOTS)
FILE *__restrict fp _AND
const char *__restrict fmt _DOTS)
{
int ret;
va_list ap;
/contrib/sdk/sources/newlib/libc/stdio/fputc.c
83,9 → 83,9
{
int result;
CHECK_INIT(ptr, file);
_flockfile (file);
_newlib_flockfile_start (file);
result = _putc_r (ptr, ch, file);
_funlockfile (file);
_newlib_flockfile_end (file);
return result;
}
 
97,10 → 97,12
{
#if !defined(__OPTIMIZE_SIZE__) && !defined(PREFER_SIZE_OVER_SPEED)
int result;
CHECK_INIT(_REENT, file);
_flockfile (file);
result = _putc_r (_REENT, ch, file);
_funlockfile (file);
struct _reent *reent = _REENT;
 
CHECK_INIT(reent, file);
_newlib_flockfile_start (file);
result = _putc_r (reent, ch, file);
_newlib_flockfile_end (file);
return result;
#else
return _fputc_r (_REENT, ch, file);
/contrib/sdk/sources/newlib/libc/stdio/fputs.c
26,10 → 26,10
 
ANSI_SYNOPSIS
#include <stdio.h>
int fputs(const char *<[s]>, FILE *<[fp]>);
int fputs(const char *restrict <[s]>, FILE *restrict <[fp]>);
 
#include <stdio.h>
int _fputs_r(struct _reent *<[ptr]>, const char *<[s]>, FILE *<[fp]>);
int _fputs_r(struct _reent *<[ptr]>, const char *restrict <[s]>, FILE *restrict <[fp]>);
 
TRAD_SYNOPSIS
#include <stdio.h>
74,9 → 74,10
int
_DEFUN(_fputs_r, (ptr, s, fp),
struct _reent * ptr _AND
char _CONST * s _AND
FILE * fp)
char _CONST *__restrict s _AND
FILE *__restrict fp)
{
#ifdef _FVWRITE_IN_STREAMIO
int result;
struct __suio uio;
struct __siov iov;
88,18 → 89,41
 
CHECK_INIT(ptr, fp);
 
_flockfile (fp);
_newlib_flockfile_start (fp);
ORIENT (fp, -1);
result = __sfvwrite_r (ptr, fp, &uio);
_funlockfile (fp);
_newlib_flockfile_end (fp);
return result;
#else
_CONST char *p = s;
 
CHECK_INIT(ptr, fp);
 
_newlib_flockfile_start (fp);
ORIENT (fp, -1);
/* Make sure we can write. */
if (cantwrite (ptr, fp))
goto error;
 
while (*p)
{
if (__sputc_r (ptr, *p++, fp) == EOF)
goto error;
}
_newlib_flockfile_exit (fp);
return 0;
 
error:
_newlib_flockfile_end (fp);
return EOF;
#endif
}
 
#ifndef _REENT_ONLY
int
_DEFUN(fputs, (s, fp),
char _CONST * s _AND
FILE * fp)
char _CONST *__restrict s _AND
FILE *__restrict fp)
{
return _fputs_r (_REENT, s, fp);
}
/contrib/sdk/sources/newlib/libc/stdio/fputwc.c
160,10 → 160,10
{
wint_t r;
 
_flockfile (fp);
_newlib_flockfile_start (fp);
ORIENT(fp, 1);
r = __fputwc(ptr, wc, fp);
_funlockfile (fp);
_newlib_flockfile_end (fp);
return r;
}
 
172,6 → 172,8
wchar_t wc _AND
FILE *fp)
{
CHECK_INIT(_REENT, fp);
return _fputwc_r (_REENT, wc, fp);
struct _reent *reent = _REENT;
 
CHECK_INIT(reent, fp);
return _fputwc_r (reent, wc, fp);
}
/contrib/sdk/sources/newlib/libc/stdio/fread.c
26,12 → 26,12
 
ANSI_SYNOPSIS
#include <stdio.h>
size_t fread(void *<[buf]>, size_t <[size]>, size_t <[count]>,
FILE *<[fp]>);
size_t fread(void *restrict <[buf]>, size_t <[size]>, size_t <[count]>,
FILE *restrict <[fp]>);
 
#include <stdio.h>
size_t _fread_r(struct _reent *<[ptr]>, void *<[buf]>,
size_t <[size]>, size_t <[count]>, FILE *<[fp]>);
size_t _fread_r(struct _reent *<[ptr]>, void *restrict <[buf]>,
size_t <[size]>, size_t <[count]>, FILE *restrict <[fp]>);
 
TRAD_SYNOPSIS
#include <stdio.h>
131,10 → 131,10
size_t
_DEFUN(_fread_r, (ptr, buf, size, count, fp),
struct _reent * ptr _AND
_PTR buf _AND
_PTR __restrict buf _AND
size_t size _AND
size_t count _AND
FILE * fp)
FILE * __restrict fp)
{
register size_t resid;
register char *p;
146,7 → 146,7
 
CHECK_INIT(ptr, fp);
 
_flockfile (fp);
_newlib_flockfile_start (fp);
ORIENT (fp, -1);
if (fp->_r < 0)
fp->_r = 0;
195,11 → 195,11
#ifdef __SCLE
if (fp->_flags & __SCLE)
{
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return crlf_r (ptr, fp, buf, total-resid, 1) / size;
}
#endif
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return (total - resid) / size;
}
}
220,11 → 220,11
#ifdef __SCLE
if (fp->_flags & __SCLE)
{
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return crlf_r (ptr, fp, buf, total-resid, 1) / size;
}
#endif
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return (total - resid) / size;
}
}
237,11 → 237,11
#ifdef __SCLE
if (fp->_flags & __SCLE)
{
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return crlf_r(ptr, fp, buf, total, 0) / size;
}
#endif
_funlockfile (fp);
_newlib_flockfile_end (fp);
return count;
}
 
248,10 → 248,10
#ifndef _REENT_ONLY
size_t
_DEFUN(fread, (buf, size, count, fp),
_PTR buf _AND
_PTR __restrict buf _AND
size_t size _AND
size_t count _AND
FILE * fp)
FILE *__restrict fp)
{
return _fread_r (_REENT, buf, size, count, fp);
}
/contrib/sdk/sources/newlib/libc/stdio/freopen.c
26,10 → 26,10
 
ANSI_SYNOPSIS
#include <stdio.h>
FILE *freopen(const char *<[file]>, const char *<[mode]>,
FILE *<[fp]>);
FILE *_freopen_r(struct _reent *<[ptr]>, const char *<[file]>,
const char *<[mode]>, FILE *<[fp]>);
FILE *freopen(const char *restrict <[file]>, const char *restrict <[mode]>,
FILE *restrict <[fp]>);
FILE *_freopen_r(struct _reent *<[ptr]>, const char *restrict <[file]>,
const char *restrict <[mode]>, FILE *restrict <[fp]>);
 
TRAD_SYNOPSIS
#include <stdio.h>
90,9 → 90,9
FILE *
_DEFUN(_freopen_r, (ptr, file, mode, fp),
struct _reent *ptr _AND
const char *file _AND
const char *mode _AND
register FILE *fp)
const char *__restrict file _AND
const char *__restrict mode _AND
register FILE *__restrict fp)
{
register int f;
int flags, oflags;
100,11 → 100,20
 
CHECK_INIT (ptr, fp);
 
/* We can't use the _newlib_flockfile_XXX macros here due to the
interlocked locking with the sfp_lock. */
#ifdef _STDIO_WITH_THREAD_CANCELLATION_SUPPORT
int __oldcancel;
pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &__oldcancel);
#endif
_flockfile (fp);
 
if ((flags = __sflags (ptr, mode, &oflags)) == 0)
{
_funlockfile (fp);
#ifdef _STDIO_WITH_THREAD_CANCELLATION_SUPPORT
pthread_setcancelstate (__oldcancel, &__oldcancel);
#endif
_fclose_r (ptr, fp);
return NULL;
}
199,7 → 208,7
if (HASLB (fp))
FREELB (ptr, fp);
fp->_lb._size = 0;
fp->_flags & ~__SORD;
fp->_flags &= ~__SORD;
fp->_flags2 = 0;
memset (&fp->_mbstate, 0, sizeof (_mbstate_t));
 
213,6 → 222,9
__lock_close_recursive (fp->_lock);
#endif
__sfp_lock_release ();
#ifdef _STDIO_WITH_THREAD_CANCELLATION_SUPPORT
pthread_setcancelstate (__oldcancel, &__oldcancel);
#endif
return NULL;
}
 
230,6 → 242,9
#endif
 
_funlockfile (fp);
#ifdef _STDIO_WITH_THREAD_CANCELLATION_SUPPORT
pthread_setcancelstate (__oldcancel, &__oldcancel);
#endif
return fp;
}
 
237,9 → 252,9
 
FILE *
_DEFUN(freopen, (file, mode, fp),
_CONST char *file _AND
_CONST char *mode _AND
register FILE *fp)
_CONST char *__restrict file _AND
_CONST char *__restrict mode _AND
register FILE *__restrict fp)
{
return _freopen_r (_REENT, file, mode, fp);
}
/contrib/sdk/sources/newlib/libc/stdio/fscanf.c
29,7 → 29,7
 
int
#ifdef _HAVE_STDC
fscanf(FILE *fp, _CONST char *fmt, ...)
fscanf(FILE *__restrict fp, _CONST char *__restrict fmt, ...)
#else
fscanf(FILE *fp, fmt, va_alist)
FILE *fp;
54,7 → 54,7
 
int
#ifdef _HAVE_STDC
_fscanf_r(struct _reent *ptr, FILE *fp, _CONST char *fmt, ...)
_fscanf_r(struct _reent *ptr, FILE *__restrict fp, _CONST char *__restrict fmt, ...)
#else
_fscanf_r(ptr, FILE *fp, fmt, va_alist)
struct _reent *ptr;
/contrib/sdk/sources/newlib/libc/stdio/fseek.c
101,21 → 101,9
#include <_ansi.h>
#include <reent.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <fcntl.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/stat.h>
#include "local.h"
 
#define POS_ERR (-(_fpos_t)1)
 
/*
* Seek the given file to the given offset.
* `Whence' must be one of the three SEEK_* macros.
*/
 
int
_DEFUN(_fseek_r, (ptr, fp, offset, whence),
struct _reent *ptr _AND
123,266 → 111,9
long offset _AND
int whence)
{
_fpos_t _EXFNPTR(seekfn, (struct _reent *, _PTR, _fpos_t, int));
_fpos_t target;
_fpos_t curoff = 0;
size_t n;
#ifdef __USE_INTERNAL_STAT64
struct stat64 st;
#else
struct stat st;
#endif
int havepos;
 
/* Make sure stdio is set up. */
 
CHECK_INIT (ptr, fp);
 
_flockfile (fp);
 
/* If we've been doing some writing, and we're in append mode
then we don't really know where the filepos is. */
 
if (fp->_flags & __SAPP && fp->_flags & __SWR)
{
/* So flush the buffer and seek to the end. */
_fflush_r (ptr, fp);
return _fseeko_r (ptr, fp, offset, whence);
}
 
/* Have to be able to seek. */
 
if ((seekfn = fp->_seek) == NULL)
{
ptr->_errno = ESPIPE; /* ??? */
_funlockfile (fp);
return EOF;
}
 
/*
* Change any SEEK_CUR to SEEK_SET, and check `whence' argument.
* After this, whence is either SEEK_SET or SEEK_END.
*/
 
switch (whence)
{
case SEEK_CUR:
/*
* In order to seek relative to the current stream offset,
* we have to first find the current stream offset a la
* ftell (see ftell for details).
*/
_fflush_r (ptr, fp); /* may adjust seek offset on append stream */
if (fp->_flags & __SOFF)
curoff = fp->_offset;
else
{
curoff = seekfn (ptr, fp->_cookie, (_fpos_t) 0, SEEK_CUR);
if (curoff == -1L)
{
_funlockfile (fp);
return EOF;
}
}
if (fp->_flags & __SRD)
{
curoff -= fp->_r;
if (HASUB (fp))
curoff -= fp->_ur;
}
else if (fp->_flags & __SWR && fp->_p != NULL)
curoff += fp->_p - fp->_bf._base;
 
offset += curoff;
whence = SEEK_SET;
havepos = 1;
break;
 
case SEEK_SET:
case SEEK_END:
havepos = 0;
break;
 
default:
ptr->_errno = EINVAL;
_funlockfile (fp);
return (EOF);
}
 
/*
* Can only optimise if:
* reading (and not reading-and-writing);
* not unbuffered; and
* this is a `regular' Unix file (and hence seekfn==__sseek).
* We must check __NBF first, because it is possible to have __NBF
* and __SOPT both set.
*/
 
if (fp->_bf._base == NULL)
__smakebuf_r (ptr, fp);
if (fp->_flags & (__SWR | __SRW | __SNBF | __SNPT))
goto dumb;
if ((fp->_flags & __SOPT) == 0)
{
if (seekfn != __sseek
|| fp->_file < 0
#ifdef __USE_INTERNAL_STAT64
|| _fstat64_r (ptr, fp->_file, &st)
#else
|| _fstat_r (ptr, fp->_file, &st)
#endif
|| (st.st_mode & S_IFMT) != S_IFREG)
{
fp->_flags |= __SNPT;
goto dumb;
}
#ifdef HAVE_BLKSIZE
fp->_blksize = st.st_blksize;
#else
fp->_blksize = 1024;
#endif
fp->_flags |= __SOPT;
}
 
/*
* We are reading; we can try to optimise.
* Figure out where we are going and where we are now.
*/
 
if (whence == SEEK_SET)
target = offset;
else
{
#ifdef __USE_INTERNAL_STAT64
if (_fstat64_r (ptr, fp->_file, &st))
#else
if (_fstat_r (ptr, fp->_file, &st))
#endif
goto dumb;
target = st.st_size + offset;
}
if ((long)target != target)
{
ptr->_errno = EOVERFLOW;
_funlockfile (fp);
return EOF;
}
 
if (!havepos)
{
if (fp->_flags & __SOFF)
curoff = fp->_offset;
else
{
curoff = seekfn (ptr, fp->_cookie, 0L, SEEK_CUR);
if (curoff == POS_ERR)
goto dumb;
}
curoff -= fp->_r;
if (HASUB (fp))
curoff -= fp->_ur;
}
 
/*
* Compute the number of bytes in the input buffer (pretending
* that any ungetc() input has been discarded). Adjust current
* offset backwards by this count so that it represents the
* file offset for the first byte in the current input buffer.
*/
 
if (HASUB (fp))
{
curoff += fp->_r; /* kill off ungetc */
n = fp->_up - fp->_bf._base;
curoff -= n;
n += fp->_ur;
}
else
{
n = fp->_p - fp->_bf._base;
curoff -= n;
n += fp->_r;
}
 
/*
* If the target offset is within the current buffer,
* simply adjust the pointers, clear EOF, undo ungetc(),
* and return.
*/
 
if (target >= curoff && target < curoff + n)
{
register int o = target - curoff;
 
fp->_p = fp->_bf._base + o;
fp->_r = n - o;
if (HASUB (fp))
FREEUB (ptr, fp);
fp->_flags &= ~__SEOF;
memset (&fp->_mbstate, 0, sizeof (_mbstate_t));
_funlockfile (fp);
return 0;
}
 
/*
* The place we want to get to is not within the current buffer,
* but we can still be kind to the kernel copyout mechanism.
* By aligning the file offset to a block boundary, we can let
* the kernel use the VM hardware to map pages instead of
* copying bytes laboriously. Using a block boundary also
* ensures that we only read one block, rather than two.
*/
 
curoff = target & ~(fp->_blksize - 1);
if (seekfn (ptr, fp->_cookie, curoff, SEEK_SET) == POS_ERR)
goto dumb;
fp->_r = 0;
fp->_p = fp->_bf._base;
if (HASUB (fp))
FREEUB (ptr, fp);
fp->_flags &= ~__SEOF;
n = target - curoff;
if (n)
{
if (__srefill_r (ptr, fp) || fp->_r < n)
goto dumb;
fp->_p += n;
fp->_r -= n;
}
memset (&fp->_mbstate, 0, sizeof (_mbstate_t));
_funlockfile (fp);
return 0;
 
/*
* We get here if we cannot optimise the seek ... just
* do it. Allow the seek function to change fp->_bf._base.
*/
 
dumb:
if (_fflush_r (ptr, fp)
|| seekfn (ptr, fp->_cookie, offset, whence) == POS_ERR)
{
_funlockfile (fp);
return EOF;
}
/* success: clear EOF indicator and discard ungetc() data */
if (HASUB (fp))
FREEUB (ptr, fp);
fp->_p = fp->_bf._base;
fp->_r = 0;
/* fp->_w = 0; *//* unnecessary (I think...) */
fp->_flags &= ~__SEOF;
/* Reset no-optimization flag after successful seek. The
no-optimization flag may be set in the case of a read
stream that is flushed which by POSIX/SUSv3 standards,
means that a corresponding seek must not optimize. The
optimization is then allowed if no subsequent flush
is performed. */
fp->_flags &= ~__SNPT;
memset (&fp->_mbstate, 0, sizeof (_mbstate_t));
_funlockfile (fp);
return 0;
}
 
#ifndef _REENT_ONLY
 
int
/contrib/sdk/sources/newlib/libc/stdio/fseeko.c
1,5 → 1,5
/*
* Copyright (c) 2002, Red Hat Inc.
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
15,10 → 15,107
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
 
/*
FUNCTION
<<fseek>>, <<fseeko>>---set file position
 
INDEX
fseek
INDEX
fseeko
INDEX
_fseek_r
INDEX
_fseeko_r
 
ANSI_SYNOPSIS
#include <stdio.h>
int fseek(FILE *<[fp]>, long <[offset]>, int <[whence]>)
int fseeko(FILE *<[fp]>, off_t <[offset]>, int <[whence]>)
int _fseek_r(struct _reent *<[ptr]>, FILE *<[fp]>,
long <[offset]>, int <[whence]>)
int _fseeko_r(struct _reent *<[ptr]>, FILE *<[fp]>,
off_t <[offset]>, int <[whence]>)
 
TRAD_SYNOPSIS
#include <stdio.h>
int fseek(<[fp]>, <[offset]>, <[whence]>)
FILE *<[fp]>;
long <[offset]>;
int <[whence]>;
 
int fseeko(<[fp]>, <[offset]>, <[whence]>)
FILE *<[fp]>;
off_t <[offset]>;
int <[whence]>;
 
int _fseek_r(<[ptr]>, <[fp]>, <[offset]>, <[whence]>)
struct _reent *<[ptr]>;
FILE *<[fp]>;
long <[offset]>;
int <[whence]>;
 
int _fseeko_r(<[ptr]>, <[fp]>, <[offset]>, <[whence]>)
struct _reent *<[ptr]>;
FILE *<[fp]>;
off_t <[offset]>;
int <[whence]>;
 
DESCRIPTION
Objects of type <<FILE>> can have a ``position'' that records how much
of the file your program has already read. Many of the <<stdio>> functions
depend on this position, and many change it as a side effect.
 
You can use <<fseek>>/<<fseeko>> to set the position for the file identified by
<[fp]>. The value of <[offset]> determines the new position, in one
of three ways selected by the value of <[whence]> (defined as macros
in `<<stdio.h>>'):
 
<<SEEK_SET>>---<[offset]> is the absolute file position (an offset
from the beginning of the file) desired. <[offset]> must be positive.
 
<<SEEK_CUR>>---<[offset]> is relative to the current file position.
<[offset]> can meaningfully be either positive or negative.
 
<<SEEK_END>>---<[offset]> is relative to the current end of file.
<[offset]> can meaningfully be either positive (to increase the size
of the file) or negative.
 
See <<ftell>>/<<ftello>> to determine the current file position.
 
RETURNS
<<fseek>>/<<fseeko>> return <<0>> when successful. On failure, the
result is <<EOF>>. The reason for failure is indicated in <<errno>>:
either <<ESPIPE>> (the stream identified by <[fp]> doesn't support
repositioning) or <<EINVAL>> (invalid file position).
 
PORTABILITY
ANSI C requires <<fseek>>.
 
<<fseeko>> is defined by the Single Unix specification.
 
Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>,
<<lseek>>, <<read>>, <<sbrk>>, <<write>>.
*/
 
#include <_ansi.h>
#include <reent.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <fcntl.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/stat.h>
#include "local.h"
 
#define POS_ERR (-(_fpos_t)1)
 
/*
* Seek the given file to the given offset.
* `Whence' must be one of the three SEEK_* macros.
*/
 
int
_DEFUN(_fseeko_r, (ptr, fp, offset, whence),
struct _reent *ptr _AND
26,9 → 123,263
_off_t offset _AND
int whence)
{
return _fseek_r (ptr, fp, (long)offset, whence);
_fpos_t _EXFNPTR(seekfn, (struct _reent *, _PTR, _fpos_t, int));
_fpos_t target;
_fpos_t curoff = 0;
size_t n;
#ifdef __USE_INTERNAL_STAT64
struct stat64 st;
#else
struct stat st;
#endif
int havepos;
 
/* Make sure stdio is set up. */
 
CHECK_INIT (ptr, fp);
 
_newlib_flockfile_start (fp);
 
/* If we've been doing some writing, and we're in append mode
then we don't really know where the filepos is. */
 
if (fp->_flags & __SAPP && fp->_flags & __SWR)
{
/* So flush the buffer and seek to the end. */
_fflush_r (ptr, fp);
}
 
/* Have to be able to seek. */
 
if ((seekfn = fp->_seek) == NULL)
{
ptr->_errno = ESPIPE; /* ??? */
_newlib_flockfile_exit (fp);
return EOF;
}
 
/*
* Change any SEEK_CUR to SEEK_SET, and check `whence' argument.
* After this, whence is either SEEK_SET or SEEK_END.
*/
 
switch (whence)
{
case SEEK_CUR:
/*
* In order to seek relative to the current stream offset,
* we have to first find the current stream offset a la
* ftell (see ftell for details).
*/
_fflush_r (ptr, fp); /* may adjust seek offset on append stream */
if (fp->_flags & __SOFF)
curoff = fp->_offset;
else
{
curoff = seekfn (ptr, fp->_cookie, (_fpos_t) 0, SEEK_CUR);
if (curoff == -1L)
{
_newlib_flockfile_exit (fp);
return EOF;
}
}
if (fp->_flags & __SRD)
{
curoff -= fp->_r;
if (HASUB (fp))
curoff -= fp->_ur;
}
else if (fp->_flags & __SWR && fp->_p != NULL)
curoff += fp->_p - fp->_bf._base;
 
offset += curoff;
whence = SEEK_SET;
havepos = 1;
break;
 
case SEEK_SET:
case SEEK_END:
havepos = 0;
break;
 
default:
ptr->_errno = EINVAL;
_newlib_flockfile_exit (fp);
return (EOF);
}
 
/*
* Can only optimise if:
* reading (and not reading-and-writing);
* not unbuffered; and
* this is a `regular' Unix file (and hence seekfn==__sseek).
* We must check __NBF first, because it is possible to have __NBF
* and __SOPT both set.
*/
 
if (fp->_bf._base == NULL)
__smakebuf_r (ptr, fp);
 
#ifdef _FSEEK_OPTIMIZATION
if (fp->_flags & (__SWR | __SRW | __SNBF | __SNPT))
goto dumb;
if ((fp->_flags & __SOPT) == 0)
{
if (seekfn != __sseek
|| fp->_file < 0
#ifdef __USE_INTERNAL_STAT64
|| _fstat64_r (ptr, fp->_file, &st)
#else
|| _fstat_r (ptr, fp->_file, &st)
#endif
|| (st.st_mode & S_IFMT) != S_IFREG)
{
fp->_flags |= __SNPT;
goto dumb;
}
#ifdef HAVE_BLKSIZE
fp->_blksize = st.st_blksize;
#else
fp->_blksize = 1024;
#endif
fp->_flags |= __SOPT;
}
 
/*
* We are reading; we can try to optimise.
* Figure out where we are going and where we are now.
*/
 
if (whence == SEEK_SET)
target = offset;
else
{
#ifdef __USE_INTERNAL_STAT64
if (_fstat64_r (ptr, fp->_file, &st))
#else
if (_fstat_r (ptr, fp->_file, &st))
#endif
goto dumb;
target = st.st_size + offset;
}
 
if (!havepos)
{
if (fp->_flags & __SOFF)
curoff = fp->_offset;
else
{
curoff = seekfn (ptr, fp->_cookie, 0L, SEEK_CUR);
if (curoff == POS_ERR)
goto dumb;
}
curoff -= fp->_r;
if (HASUB (fp))
curoff -= fp->_ur;
}
 
/*
* Compute the number of bytes in the input buffer (pretending
* that any ungetc() input has been discarded). Adjust current
* offset backwards by this count so that it represents the
* file offset for the first byte in the current input buffer.
*/
 
if (HASUB (fp))
{
curoff += fp->_r; /* kill off ungetc */
n = fp->_up - fp->_bf._base;
curoff -= n;
n += fp->_ur;
}
else
{
n = fp->_p - fp->_bf._base;
curoff -= n;
n += fp->_r;
}
 
/*
* If the target offset is within the current buffer,
* simply adjust the pointers, clear EOF, undo ungetc(),
* and return.
*/
 
if (target >= curoff && target < curoff + n)
{
register int o = target - curoff;
 
fp->_p = fp->_bf._base + o;
fp->_r = n - o;
if (HASUB (fp))
FREEUB (ptr, fp);
fp->_flags &= ~__SEOF;
memset (&fp->_mbstate, 0, sizeof (_mbstate_t));
_newlib_flockfile_exit (fp);
return 0;
}
 
/*
* The place we want to get to is not within the current buffer,
* but we can still be kind to the kernel copyout mechanism.
* By aligning the file offset to a block boundary, we can let
* the kernel use the VM hardware to map pages instead of
* copying bytes laboriously. Using a block boundary also
* ensures that we only read one block, rather than two.
*/
 
curoff = target & ~(fp->_blksize - 1);
if (seekfn (ptr, fp->_cookie, curoff, SEEK_SET) == POS_ERR)
goto dumb;
fp->_r = 0;
fp->_p = fp->_bf._base;
if (HASUB (fp))
FREEUB (ptr, fp);
fp->_flags &= ~__SEOF;
n = target - curoff;
if (n)
{
if (__srefill_r (ptr, fp) || fp->_r < n)
goto dumb;
fp->_p += n;
fp->_r -= n;
}
memset (&fp->_mbstate, 0, sizeof (_mbstate_t));
_newlib_flockfile_exit (fp);
return 0;
 
/*
* We get here if we cannot optimise the seek ... just
* do it. Allow the seek function to change fp->_bf._base.
*/
#endif
 
dumb:
if (_fflush_r (ptr, fp)
|| seekfn (ptr, fp->_cookie, offset, whence) == POS_ERR)
{
_newlib_flockfile_exit (fp);
return EOF;
}
/* success: clear EOF indicator and discard ungetc() data */
if (HASUB (fp))
FREEUB (ptr, fp);
fp->_p = fp->_bf._base;
fp->_r = 0;
/* fp->_w = 0; *//* unnecessary (I think...) */
fp->_flags &= ~__SEOF;
/* Reset no-optimization flag after successful seek. The
no-optimization flag may be set in the case of a read
stream that is flushed which by POSIX/SUSv3 standards,
means that a corresponding seek must not optimize. The
optimization is then allowed if no subsequent flush
is performed. */
fp->_flags &= ~__SNPT;
memset (&fp->_mbstate, 0, sizeof (_mbstate_t));
_newlib_flockfile_end (fp);
return 0;
}
 
#ifndef _REENT_ONLY
 
int
37,8 → 388,7
_off_t offset _AND
int whence)
{
/* for now we simply cast since off_t should be long */
return _fseek_r (_REENT, fp, (long)offset, whence);
return _fseeko_r (_REENT, fp, offset, whence);
}
 
#endif /* !_REENT_ONLY */
/contrib/sdk/sources/newlib/libc/stdio/ftell.c
105,64 → 105,13
{
_fpos_t pos;
 
/* Ensure stdio is set up. */
 
CHECK_INIT (ptr, fp);
 
_flockfile (fp);
 
if (fp->_seek == NULL)
{
ptr->_errno = ESPIPE;
_funlockfile (fp);
return -1L;
}
 
/* Find offset of underlying I/O object, then adjust for buffered
bytes. Flush a write stream, since the offset may be altered if
the stream is appending. Do not flush a read stream, since we
must not lose the ungetc buffer. */
if (fp->_flags & __SWR)
_fflush_r (ptr, fp);
if (fp->_flags & __SOFF)
pos = fp->_offset;
else
{
pos = fp->_seek (ptr, fp->_cookie, (_fpos_t) 0, SEEK_CUR);
if (pos == -1L)
{
_funlockfile (fp);
return pos;
}
}
if (fp->_flags & __SRD)
{
/*
* Reading. Any unread characters (including
* those from ungetc) cause the position to be
* smaller than that in the underlying object.
*/
pos -= fp->_r;
if (HASUB (fp))
pos -= fp->_ur;
}
else if ((fp->_flags & __SWR) && fp->_p != NULL)
{
/*
* Writing. Any buffered characters cause the
* position to be greater than that in the
* underlying object.
*/
pos += fp->_p - fp->_bf._base;
}
 
_funlockfile (fp);
pos = _ftello_r (ptr, fp);
if ((long)pos != pos)
{
pos = -1;
ptr->_errno = EOVERFLOW;
}
return pos;
return (long)pos;
}
 
#ifndef _REENT_ONLY
/contrib/sdk/sources/newlib/libc/stdio/ftello.c
1,5 → 1,5
/*
* Copyright (c) 2002, Red Hat Inc.
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
15,9 → 15,88
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
 
/*
FUNCTION
<<ftell>>, <<ftello>>---return position in a stream or file
 
INDEX
ftell
INDEX
ftello
INDEX
_ftell_r
INDEX
_ftello_r
 
ANSI_SYNOPSIS
#include <stdio.h>
long ftell(FILE *<[fp]>);
off_t ftello(FILE *<[fp]>);
long _ftell_r(struct _reent *<[ptr]>, FILE *<[fp]>);
off_t _ftello_r(struct _reent *<[ptr]>, FILE *<[fp]>);
 
TRAD_SYNOPSIS
#include <stdio.h>
long ftell(<[fp]>)
FILE *<[fp]>;
 
off_t ftello(<[fp]>)
FILE *<[fp]>;
 
long _ftell_r(<[ptr]>, <[fp]>)
struct _reent *<[ptr]>;
FILE *<[fp]>;
 
off_t _ftello_r(<[ptr]>, <[fp]>)
struct _reent *<[ptr]>;
FILE *<[fp]>;
 
DESCRIPTION
Objects of type <<FILE>> can have a ``position'' that records how much
of the file your program has already read. Many of the <<stdio>> functions
depend on this position, and many change it as a side effect.
 
The result of <<ftell>>/<<ftello>> is the current position for a file
identified by <[fp]>. If you record this result, you can later
use it with <<fseek>>/<<fseeko>> to return the file to this
position. The difference between <<ftell>> and <<ftello>> is that
<<ftell>> returns <<long>> and <<ftello>> returns <<off_t>>.
 
In the current implementation, <<ftell>>/<<ftello>> simply uses a character
count to represent the file position; this is the same number that
would be recorded by <<fgetpos>>.
 
RETURNS
<<ftell>>/<<ftello>> return the file position, if possible. If they cannot do
this, they return <<-1L>>. Failure occurs on streams that do not support
positioning; the global <<errno>> indicates this condition with the
value <<ESPIPE>>.
 
PORTABILITY
<<ftell>> is required by the ANSI C standard, but the meaning of its
result (when successful) is not specified beyond requiring that it be
acceptable as an argument to <<fseek>>. In particular, other
conforming C implementations may return a different result from
<<ftell>> than what <<fgetpos>> records.
 
<<ftello>> is defined by the Single Unix specification.
 
No supporting OS subroutines are required.
*/
 
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "%W% (Berkeley) %G%";
#endif /* LIBC_SCCS and not lint */
 
/*
* ftello: return current offset.
*/
 
#include <_ansi.h>
#include <reent.h>
#include <stdio.h>
#include <errno.h>
#include "local.h"
 
_off_t
_DEFUN(_ftello_r, (ptr, fp),
24,10 → 103,63
struct _reent * ptr _AND
register FILE * fp)
{
/* for now we simply cast since off_t should be long */
return (_off_t)_ftell_r (ptr, fp);
_fpos_t pos;
 
/* Ensure stdio is set up. */
 
CHECK_INIT (ptr, fp);
 
_newlib_flockfile_start (fp);
 
if (fp->_seek == NULL)
{
ptr->_errno = ESPIPE;
_newlib_flockfile_exit (fp);
return -1L;
}
 
/* Find offset of underlying I/O object, then adjust for buffered
bytes. Flush a write stream, since the offset may be altered if
the stream is appending. Do not flush a read stream, since we
must not lose the ungetc buffer. */
if (fp->_flags & __SWR)
_fflush_r (ptr, fp);
if (fp->_flags & __SOFF)
pos = fp->_offset;
else
{
pos = fp->_seek (ptr, fp->_cookie, (_fpos_t) 0, SEEK_CUR);
if (pos == -1L)
{
_newlib_flockfile_exit (fp);
return pos;
}
}
if (fp->_flags & __SRD)
{
/*
* Reading. Any unread characters (including
* those from ungetc) cause the position to be
* smaller than that in the underlying object.
*/
pos -= fp->_r;
if (HASUB (fp))
pos -= fp->_ur;
}
else if ((fp->_flags & __SWR) && fp->_p != NULL)
{
/*
* Writing. Any buffered characters cause the
* position to be greater than that in the
* underlying object.
*/
pos += fp->_p - fp->_bf._base;
}
 
_newlib_flockfile_end (fp);
return pos;
}
 
#ifndef _REENT_ONLY
 
_off_t
34,7 → 166,7
_DEFUN(ftello, (fp),
register FILE * fp)
{
return (_off_t)_ftell_r (_REENT, fp);
return _ftello_r (_REENT, fp);
}
 
#endif /* !_REENT_ONLY */
/contrib/sdk/sources/newlib/libc/stdio/fvwrite.c
21,6 → 21,7
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <limits.h>
#include "local.h"
#include "fvwrite.h"
 
52,7 → 53,7
register size_t len;
register _CONST char *p = NULL;
register struct __siov *iov;
register int w, s;
register _READ_WRITE_RETURN_TYPE w, s;
char *nl;
int nlknown, nldist;
 
89,12 → 90,14
if (fp->_flags & __SNBF)
{
/*
* Unbuffered: write up to BUFSIZ bytes at a time.
* Unbuffered: Split buffer in the largest multiple of BUFSIZ < INT_MAX
* as some legacy code may expect int instead of size_t.
*/
do
{
GETIOV (;);
w = fp->_write (ptr, fp->_cookie, p, MIN (len, BUFSIZ));
w = fp->_write (ptr, fp->_cookie, p,
MIN (len, INT_MAX - INT_MAX % BUFSIZ));
if (w <= 0)
goto err;
p += w;
155,8 → 158,10
newsize);
if (!str)
{
/* Free buffer which is no longer used. */
/* Free buffer which is no longer used and clear
__SMBF flag to avoid double free in fclose. */
_free_r (ptr, fp->_bf._base);
fp->_flags &= ~__SMBF;
/* Ensure correct errno, even if free changed it. */
ptr->_errno = ENOMEM;
goto err;
175,30 → 180,24
fp->_p += w;
w = len; /* but pretend copied all */
}
else if (fp->_p > fp->_bf._base && len > w)
else if (fp->_p > fp->_bf._base || len < fp->_bf._size)
{
/* fill and flush */
/* pass through the buffer */
w = MIN (len, w);
COPY (w);
/* fp->_w -= w; *//* unneeded */
fp->_w -= w;
fp->_p += w;
if (_fflush_r (ptr, fp))
if (fp->_w == 0 && _fflush_r (ptr, fp))
goto err;
}
else if (len >= (w = fp->_bf._size))
else
{
/* write directly */
w = ((int)MIN (len, INT_MAX)) / fp->_bf._size * fp->_bf._size;
w = fp->_write (ptr, fp->_cookie, p, w);
if (w <= 0)
goto err;
}
else
{
/* fill and done */
w = len;
COPY (w);
fp->_w -= w;
fp->_p += w;
}
p += w;
len -= w;
}
/contrib/sdk/sources/newlib/libc/stdio/fvwrite.h
28,7 → 28,7
struct __suio {
struct __siov *uio_iov;
int uio_iovcnt;
int uio_resid;
size_t uio_resid;
};
 
 
/contrib/sdk/sources/newlib/libc/stdio/fwalk.c
46,11 → 46,8
*/
for (g = &ptr->__sglue; g != NULL; g = g->_next)
for (fp = g->_iobs, n = g->_niobs; --n >= 0; fp++)
if (fp->_flags != 0)
{
if (fp->_flags != 0 && fp->_flags != 1 && fp->_file != -1)
ret |= (*function) (fp);
}
 
return ret;
}
/contrib/sdk/sources/newlib/libc/stdio/fwrite.c
26,12 → 26,12
 
ANSI_SYNOPSIS
#include <stdio.h>
size_t fwrite(const void *<[buf]>, size_t <[size]>,
size_t <[count]>, FILE *<[fp]>);
size_t fwrite(const void *restrict <[buf]>, size_t <[size]>,
size_t <[count]>, FILE *restrict <[fp]>);
 
#include <stdio.h>
size_t _fwrite_r(struct _reent *<[ptr]>, const void *<[buf]>, size_t <[size]>,
size_t <[count]>, FILE *<[fp]>);
size_t _fwrite_r(struct _reent *<[ptr]>, const void *restrict <[buf]>, size_t <[size]>,
size_t <[count]>, FILE *restrict <[fp]>);
 
TRAD_SYNOPSIS
#include <stdio.h>
97,12 → 97,13
size_t
_DEFUN(_fwrite_r, (ptr, buf, size, count, fp),
struct _reent * ptr _AND
_CONST _PTR buf _AND
_CONST _PTR __restrict buf _AND
size_t size _AND
size_t count _AND
FILE * fp)
FILE * __restrict fp)
{
size_t n;
#ifdef _FVWRITE_IN_STREAMIO
struct __suio uio;
struct __siov iov;
 
119,21 → 120,45
 
CHECK_INIT(ptr, fp);
 
_flockfile (fp);
_newlib_flockfile_start (fp);
ORIENT (fp, -1);
if (__sfvwrite_r (ptr, fp, &uio) == 0)
{
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return count;
}
_funlockfile (fp);
_newlib_flockfile_end (fp);
return (n - uio.uio_resid) / size;
#else
size_t i = 0;
_CONST char *p = buf;
n = count * size;
CHECK_INIT (ptr, fp);
 
_newlib_flockfile_start (fp);
ORIENT (fp, -1);
/* Make sure we can write. */
if (cantwrite (ptr, fp))
goto ret;
 
while (i < n)
{
if (__sputc_r (ptr, p[i], fp) == EOF)
break;
 
i++;
}
 
ret:
_newlib_flockfile_end (fp);
return i / size;
#endif
}
 
#ifndef _REENT_ONLY
size_t
_DEFUN(fwrite, (buf, size, count, fp),
_CONST _PTR buf _AND
_CONST _PTR __restrict buf _AND
size_t size _AND
size_t count _AND
FILE * fp)
/contrib/sdk/sources/newlib/libc/stdio/local.h
32,7 → 32,99
# include <io.h>
#endif
 
/* The following define determines if the per-reent stdin, stdout and stderr
streams are closed during _reclaim_reent(). The stdin, stdout and stderr
streams are initialized to use file descriptors 0, 1 and 2 respectively. In
case _STDIO_CLOSE_PER_REENT_STD_STREAMS is defined these file descriptors
will be closed via close() provided the owner of the reent structure
triggerd the on demand reent initilization, see CHECK_INIT(). */
#ifndef __rtems__
#define _STDIO_CLOSE_PER_REENT_STD_STREAMS
#endif
 
/* The following macros are supposed to replace calls to _flockfile/_funlockfile
and __sfp_lock_acquire/__sfp_lock_release. In case of multi-threaded
environments using pthreads, it's not sufficient to lock the stdio functions
against concurrent threads accessing the same data, the locking must also be
secured against thread cancellation.
 
The below macros have to be used in pairs. The _newlib_XXX_start macro
starts with a opening curly brace, the _newlib_XXX_end macro ends with a
closing curly brace, so the start macro and the end macro mark the code
start and end of a critical section. In case the code leaves the critical
section before reaching the end of the critical section's code end, use
the appropriate _newlib_XXX_exit macro. */
 
#if !defined (__SINGLE_THREAD__) && defined (_POSIX_THREADS) \
&& !defined (__rtems__)
#define _STDIO_WITH_THREAD_CANCELLATION_SUPPORT
#endif
 
#ifdef _STDIO_WITH_THREAD_CANCELLATION_SUPPORT
#include <pthread.h>
 
/* Start a stream oriented critical section: */
# define _newlib_flockfile_start(_fp) \
{ \
int __oldfpcancel; \
pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &__oldfpcancel); \
_flockfile (_fp)
 
/* Exit from a stream oriented critical section prematurely: */
# define _newlib_flockfile_exit(_fp) \
_funlockfile (_fp); \
pthread_setcancelstate (__oldfpcancel, &__oldfpcancel);
 
/* End a stream oriented critical section: */
# define _newlib_flockfile_end(_fp) \
_funlockfile (_fp); \
pthread_setcancelstate (__oldfpcancel, &__oldfpcancel); \
}
 
/* Start a stream list oriented critical section: */
# define _newlib_sfp_lock_start() \
{ \
int __oldsfpcancel; \
pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &__oldsfpcancel); \
__sfp_lock_acquire ()
 
/* Exit from a stream list oriented critical section prematurely: */
# define _newlib_sfp_lock_exit() \
__sfp_lock_release (); \
pthread_setcancelstate (__oldsfpcancel, &__oldsfpcancel);
 
/* End a stream list oriented critical section: */
# define _newlib_sfp_lock_end() \
__sfp_lock_release (); \
pthread_setcancelstate (__oldsfpcancel, &__oldsfpcancel); \
}
 
#else /* !_STDIO_WITH_THREAD_CANCELLATION_SUPPORT */
 
# define _newlib_flockfile_start(_fp) \
{ \
_flockfile(_fp)
 
# define _newlib_flockfile_exit(_fp) \
_funlockfile(_fp); \
 
# define _newlib_flockfile_end(_fp) \
_funlockfile(_fp); \
}
 
# define _newlib_sfp_lock_start() \
{ \
__sfp_lock_acquire ()
 
# define _newlib_sfp_lock_exit() \
__sfp_lock_release ();
 
# define _newlib_sfp_lock_end() \
__sfp_lock_release (); \
}
 
#endif /* _STDIO_WITH_THREAD_CANCELLATION_SUPPORT */
 
extern u_char *_EXFUN(__sccl, (char *, u_char *fmt));
extern int _EXFUN(__svfscanf_r,(struct _reent *,FILE *, _CONST char *,va_list));
extern int _EXFUN(__ssvfscanf_r,(struct _reent *,FILE *, _CONST char *,va_list));
57,11 → 149,13
extern int _EXFUN(__sflush_r,(struct _reent *,FILE *));
extern int _EXFUN(__srefill_r,(struct _reent *,FILE *));
extern _READ_WRITE_RETURN_TYPE _EXFUN(__sread,(struct _reent *, void *, char *,
int));
_READ_WRITE_BUFSIZE_TYPE));
extern _READ_WRITE_RETURN_TYPE _EXFUN(__seofread,(struct _reent *, void *,
char *, int));
char *,
_READ_WRITE_BUFSIZE_TYPE));
extern _READ_WRITE_RETURN_TYPE _EXFUN(__swrite,(struct _reent *, void *,
const char *, int));
const char *,
_READ_WRITE_BUFSIZE_TYPE));
extern _fpos_t _EXFUN(__sseek,(struct _reent *, void *, _fpos_t, int));
extern int _EXFUN(__sclose,(struct _reent *, void *));
extern int _EXFUN(__stextmode,(int));
76,7 → 170,8
#ifdef __LARGE64_FILES
extern _fpos64_t _EXFUN(__sseek64,(struct _reent *, void *, _fpos64_t, int));
extern _READ_WRITE_RETURN_TYPE _EXFUN(__swrite64,(struct _reent *, void *,
const char *, int));
const char *,
_READ_WRITE_BUFSIZE_TYPE));
#endif
 
/* Called by the main entry point fns to ensure stdio has been initialized. */
85,14 → 180,15
#define CHECK_INIT(ptr, fp) \
do \
{ \
if ((ptr) && !(ptr)->__sdidinit) \
__sinit (ptr); \
struct _reent *_check_init_ptr = (ptr); \
if ((_check_init_ptr) && !(_check_init_ptr)->__sdidinit) \
__sinit (_check_init_ptr); \
if ((fp) == (FILE *)&__sf_fake_stdin) \
(fp) = _stdin_r(ptr); \
(fp) = _stdin_r(_check_init_ptr); \
else if ((fp) == (FILE *)&__sf_fake_stdout) \
(fp) = _stdout_r(ptr); \
(fp) = _stdout_r(_check_init_ptr); \
else if ((fp) == (FILE *)&__sf_fake_stderr) \
(fp) = _stderr_r(ptr); \
(fp) = _stderr_r(_check_init_ptr); \
} \
while (0)
#else /* !_REENT_SMALL */
99,8 → 195,9
#define CHECK_INIT(ptr, fp) \
do \
{ \
if ((ptr) && !(ptr)->__sdidinit) \
__sinit (ptr); \
struct _reent *_check_init_ptr = (ptr); \
if ((_check_init_ptr) && !(_check_init_ptr)->__sdidinit) \
__sinit (_check_init_ptr); \
} \
while (0)
#endif /* !_REENT_SMALL */
108,8 → 205,9
#define CHECK_STD_INIT(ptr) \
do \
{ \
if ((ptr) && !(ptr)->__sdidinit) \
__sinit (ptr); \
struct _reent *_check_init_ptr = (ptr); \
if ((_check_init_ptr) && !(_check_init_ptr)->__sdidinit) \
__sinit (_check_init_ptr); \
} \
while (0)
 
136,6 → 234,7
#define FREELB(ptr, fp) { _free_r(ptr,(char *)(fp)->_lb._base); \
(fp)->_lb._base = NULL; }
 
#ifdef _WIDE_ORIENT
/*
* Set the orientation for a stream. If o > 0, the stream has wide-
* orientation. If o < 0, the stream has byte-orientation.
153,6 → 252,9
} \
} \
while (0)
#else
#define ORIENT(fp,ori)
#endif
 
/* WARNING: _dcvt is defined in the stdlib directory, not here! */
 
/contrib/sdk/sources/newlib/libc/stdio/makebuf.c
65,8 → 65,10
size = _DEFAULT_ASPRINTF_BUFSIZE;
else
size = BUFSIZ;
#ifdef _FSEEK_OPTIMIZATION
/* do not try to optimise fseek() */
fp->_flags |= __SNPT;
#endif
}
else
{
76,6 → 78,7
#else
size = BUFSIZ;
#endif
#ifdef _FSEEK_OPTIMIZATION
/*
* Optimize fseek() only if it is a regular file.
* (The test for __sseek is mainly paranoia.)
91,6 → 94,7
}
else
fp->_flags |= __SNPT;
#endif
}
if ((p = _malloc_r (ptr, size)) == NULL)
{
/contrib/sdk/sources/newlib/libc/stdio/printf.c
25,7 → 25,7
int
_DEFUN(_printf_r, (ptr, fmt),
struct _reent *ptr _AND
const char *fmt _DOTS)
const char *__restrict fmt _DOTS)
{
int ret;
va_list ap;
41,7 → 41,7
 
int
_DEFUN(printf, (fmt),
const char *fmt _DOTS)
const char *__restrict fmt _DOTS)
{
int ret;
va_list ap;
/contrib/sdk/sources/newlib/libc/stdio/putc.c
97,9 → 97,9
{
int result;
CHECK_INIT (ptr, fp);
_flockfile (fp);
_newlib_flockfile_start (fp);
result = __sputc_r (ptr, c, fp);
_funlockfile (fp);
_newlib_flockfile_end (fp);
return result;
}
 
111,10 → 111,12
{
#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__)
int result;
CHECK_INIT (_REENT, fp);
_flockfile (fp);
result = __sputc_r (_REENT, c, fp);
_funlockfile (fp);
struct _reent *reent = _REENT;
 
CHECK_INIT (reent, fp);
_newlib_flockfile_start (fp);
result = __sputc_r (reent, c, fp);
_newlib_flockfile_end (fp);
return result;
#else
return _putc_r (_REENT, c, fp);
/contrib/sdk/sources/newlib/libc/stdio/putchar.c
90,8 → 90,10
_DEFUN(putchar, (c),
int c)
{
_REENT_SMALL_CHECK_INIT (_REENT);
return _putc_r (_REENT, c, _stdout_r (_REENT));
struct _reent *reent = _REENT;
 
_REENT_SMALL_CHECK_INIT (reent);
return _putc_r (reent, c, _stdout_r (reent));
}
 
#endif
/contrib/sdk/sources/newlib/libc/stdio/puts.c
78,9 → 78,12
struct _reent *ptr _AND
_CONST char * s)
{
#ifdef _FVWRITE_IN_STREAMIO
int result;
size_t c = strlen (s);
struct __suio uio;
struct __siov iov[2];
FILE *fp;
 
iov[0].iov_base = s;
iov[0].iov_len = c;
89,11 → 92,43
uio.uio_resid = c + 1;
uio.uio_iov = &iov[0];
uio.uio_iovcnt = 2;
 
_REENT_SMALL_CHECK_INIT (ptr);
ORIENT (stdout, -1);
return (__sfvwrite_r (ptr, _stdout_r (ptr), &uio) ? EOF : '\n');
fp = _stdout_r (ptr);
_newlib_flockfile_start (fp);
ORIENT (fp, -1);
result = (__sfvwrite_r (ptr, fp, &uio) ? EOF : '\n');
_newlib_flockfile_end (fp);
return result;
#else
int result = EOF;
const char *p = s;
FILE *fp;
_REENT_SMALL_CHECK_INIT (ptr);
 
fp = _stdout_r (ptr);
_newlib_flockfile_start (fp);
ORIENT (fp, -1);
/* Make sure we can write. */
if (cantwrite (ptr, fp))
goto err;
 
while (*p)
{
if (__sputc_r (ptr, *p++, fp) == EOF)
goto err;
}
if (__sputc_r (ptr, '\n', fp) == EOF)
goto err;
 
result = '\n';
 
err:
_newlib_flockfile_end (fp);
return result;
#endif
}
 
#ifndef _REENT_ONLY
 
int
/contrib/sdk/sources/newlib/libc/stdio/remove.c
66,15 → 66,16
#include <_ansi.h>
#include <reent.h>
#include <stdio.h>
#include <sys/kos_io.h>
 
 
int
_DEFUN(_remove_r, (ptr, filename),
struct _reent *ptr _AND
_CONST char *filename)
{
return delete_file(filename)==0 ? 0: -1;
if (_unlink_r (ptr, filename) == -1)
return -1;
 
return 0;
}
 
#ifndef _REENT_ONLY
83,9 → 84,7
_DEFUN(remove, (filename),
_CONST char *filename)
{
 
return delete_file(filename)==0 ? 0: -1;
 
return _remove_r (_REENT, filename);
}
 
#endif
/contrib/sdk/sources/newlib/libc/stdio/rename.c
57,16 → 57,6
#include <stdio.h>
#include <sys/unistd.h>
 
int
_DEFUN (_rename_r, (ptr, old, new),
struct _reent *ptr _AND
_CONST char *old _AND
_CONST char *new)
{
return -1;
}
 
 
#ifndef _REENT_ONLY
 
int
74,7 → 64,7
_CONST char *old _AND
_CONST char *new)
{
return -1;
return _rename_r (_REENT, old, new);
}
 
#endif
/contrib/sdk/sources/newlib/libc/stdio/setvbuf.c
103,10 → 103,11
register size_t size)
{
int ret = 0;
struct _reent *reent = _REENT;
 
CHECK_INIT (_REENT, fp);
CHECK_INIT (reent, fp);
 
_flockfile (fp);
_newlib_flockfile_start (fp);
 
/*
* Verify arguments. The `int' limit on `size' is due to this
115,7 → 116,7
 
if ((mode != _IOFBF && mode != _IOLBF && mode != _IONBF) || (int)(_POINTER_INT) size < 0)
{
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return (EOF);
}
 
126,11 → 127,11
* non buffer flags, and clear malloc flag.
*/
 
_fflush_r (_REENT, fp);
_fflush_r (reent, fp);
fp->_r = 0;
fp->_lbfsize = 0;
if (fp->_flags & __SMBF)
_free_r (_REENT, (_PTR) fp->_bf._base);
_free_r (reent, (_PTR) fp->_bf._base);
fp->_flags &= ~(__SLBF | __SNBF | __SMBF);
 
if (mode == _IONBF)
158,7 → 159,7
fp->_w = 0;
fp->_bf._base = fp->_p = fp->_nbuf;
fp->_bf._size = 1;
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return (ret);
}
fp->_flags |= __SMBF;
180,7 → 181,7
 
case _IOFBF:
/* no flag */
_REENT->__cleanup = _cleanup_r;
reent->__cleanup = _cleanup_r;
fp->_bf._base = fp->_p = (unsigned char *) buf;
fp->_bf._size = size;
break;
193,6 → 194,6
if (fp->_flags & __SWR)
fp->_w = fp->_flags & (__SLBF | __SNBF) ? 0 : size;
 
_funlockfile (fp);
_newlib_flockfile_end (fp);
return 0;
}
/contrib/sdk/sources/newlib/libc/stdio/snprintf.c
33,9 → 33,9
#ifdef _HAVE_STDC
_DEFUN(_snprintf_r, (ptr, str, size, fmt),
struct _reent *ptr _AND
char *str _AND
char *__restrict str _AND
size_t size _AND
_CONST char *fmt _DOTS)
_CONST char *__restrict fmt _DOTS)
#else
_snprintf_r(ptr, str, size, fmt, va_alist)
struct _reent *ptr;
77,9 → 77,9
int
#ifdef _HAVE_STDC
_DEFUN(snprintf, (str, size, fmt),
char *str _AND
char *__restrict str _AND
size_t size _AND
_CONST char *fmt _DOTS)
_CONST char *__restrict fmt _DOTS)
#else
snprintf(str, size, fmt, va_alist)
char *str;
/contrib/sdk/sources/newlib/libc/stdio/sprintf.c
47,26 → 47,26
ANSI_SYNOPSIS
#include <stdio.h>
 
int printf(const char *<[format]>, ...);
int fprintf(FILE *<[fd]>, const char *<[format]>, ...);
int sprintf(char *<[str]>, const char *<[format]>, ...);
int snprintf(char *<[str]>, size_t <[size]>, const char *<[format]>,
int printf(const char *restrict <[format]>, ...);
int fprintf(FILE *restrict <[fd]>, const char *restrict <[format]>, ...);
int sprintf(char *restrict <[str]>, const char *restrict <[format]>, ...);
int snprintf(char *restrict <[str]>, size_t <[size]>, const char *restrict <[format]>,
...);
int asprintf(char **<[strp]>, const char *<[format]>, ...);
char *asnprintf(char *<[str]>, size_t *<[size]>, const char *<[format]>,
int asprintf(char **restrict <[strp]>, const char *restrict <[format]>, ...);
char *asnprintf(char *restrict <[str]>, size_t *restrict <[size]>, const char *restrict <[format]>,
...);
 
int _printf_r(struct _reent *<[ptr]>, const char *<[format]>, ...);
int _fprintf_r(struct _reent *<[ptr]>, FILE *<[fd]>,
const char *<[format]>, ...);
int _sprintf_r(struct _reent *<[ptr]>, char *<[str]>,
const char *<[format]>, ...);
int _snprintf_r(struct _reent *<[ptr]>, char *<[str]>, size_t <[size]>,
const char *<[format]>, ...);
int _asprintf_r(struct _reent *<[ptr]>, char **<[strp]>,
const char *<[format]>, ...);
char *_asnprintf_r(struct _reent *<[ptr]>, char *<[str]>,
size_t *<[size]>, const char *<[format]>, ...);
int _printf_r(struct _reent *<[ptr]>, const char *restrict <[format]>, ...);
int _fprintf_r(struct _reent *<[ptr]>, FILE *restrict <[fd]>,
const char *restrict <[format]>, ...);
int _sprintf_r(struct _reent *<[ptr]>, char *restrict <[str]>,
const char *restrict <[format]>, ...);
int _snprintf_r(struct _reent *<[ptr]>, char *restrict <[str]>, size_t <[size]>,
const char *restrict <[format]>, ...);
int _asprintf_r(struct _reent *<[ptr]>, char **restrict <[strp]>,
const char *restrict <[format]>, ...);
char *_asnprintf_r(struct _reent *<[ptr]>, char *restrict <[str]>,
size_t *restrict <[size]>, const char *restrict <[format]>, ...);
 
DESCRIPTION
<<printf>> accepts a series of arguments, applies to each a
518,6 → 518,10
implementation is similar to <<%#tx>>), except
that <<0x>> appears even for the NULL pointer.
 
o m
Prints the output of <<strerror(errno)>>; no
argument is required. A GNU extension.
 
o-
O-
 
575,13 → 579,13
#ifdef _HAVE_STDC
_DEFUN(_sprintf_r, (ptr, str, fmt),
struct _reent *ptr _AND
char *str _AND
_CONST char *fmt _DOTS)
char *__restrict str _AND
_CONST char *__restrict fmt _DOTS)
#else
_sprintf_r(ptr, str, fmt, va_alist)
struct _reent *ptr;
char *str;
_CONST char *fmt;
char *__restrict str;
_CONST char *__restrict fmt;
va_dcl
#endif
{
609,8 → 613,8
int
#ifdef _HAVE_STDC
_DEFUN(sprintf, (str, fmt),
char *str _AND
_CONST char *fmt _DOTS)
char *__restrict str _AND
_CONST char *__restrict fmt _DOTS)
#else
sprintf(str, fmt, va_alist)
char *str;
/contrib/sdk/sources/newlib/libc/stdio/sscanf.c
35,15 → 35,15
ANSI_SYNOPSIS
#include <stdio.h>
 
int scanf(const char *<[format]>, ...);
int fscanf(FILE *<[fd]>, const char *<[format]>, ...);
int sscanf(const char *<[str]>, const char *<[format]>, ...);
int scanf(const char *restrict <[format]>, ...);
int fscanf(FILE *restrict <[fd]>, const char *restrict <[format]>, ...);
int sscanf(const char *restrict <[str]>, const char *restrict <[format]>, ...);
 
int _scanf_r(struct _reent *<[ptr]>, const char *<[format]>, ...);
int _fscanf_r(struct _reent *<[ptr]>, FILE *<[fd]>,
const char *<[format]>, ...);
int _sscanf_r(struct _reent *<[ptr]>, const char *<[str]>,
const char *<[format]>, ...);
int _scanf_r(struct _reent *<[ptr]>, const char *restrict <[format]>, ...);
int _fscanf_r(struct _reent *<[ptr]>, FILE *restrict <[fd]>,
const char *restrict <[format]>, ...);
int _sscanf_r(struct _reent *<[ptr]>, const char *restrict <[str]>,
const char *restrict <[format]>, ...);
 
 
TRAD_SYNOPSIS
399,7 → 399,7
#ifdef _HAVE_STDC
int
_DEFUN(sscanf, (str, fmt),
_CONST char *str _AND
_CONST char *__restrict str _AND
_CONST char *fmt _DOTS)
#else
int
436,14 → 436,14
int
_DEFUN(_sscanf_r, (ptr, str, fmt),
struct _reent *ptr _AND
_CONST char *str _AND
_CONST char *fmt _DOTS)
_CONST char *__restrict str _AND
_CONST char *__restrict fmt _DOTS)
#else
int
_sscanf_r(ptr, str, fmt, va_alist)
struct _reent *ptr;
_CONST char *str;
_CONST char *fmt;
_CONST char *__restrict str;
_CONST char *__restrict fmt;
va_dcl
#endif
{
/contrib/sdk/sources/newlib/libc/stdio/stdio.c
34,10 → 34,10
struct _reent *ptr _AND
void *cookie _AND
char *buf _AND
int n)
_READ_WRITE_BUFSIZE_TYPE n)
{
register FILE *fp = (FILE *) cookie;
register int ret;
register ssize_t ret;
 
#ifdef __SCLE
int oldmode = 0;
67,7 → 67,7
struct _reent *_ptr _AND
_PTR cookie _AND
char *buf _AND
int len)
_READ_WRITE_BUFSIZE_TYPE len)
{
return 0;
}
77,10 → 77,10
struct _reent *ptr _AND
void *cookie _AND
char const *buf _AND
int n)
_READ_WRITE_BUFSIZE_TYPE n)
{
register FILE *fp = (FILE *) cookie;
int w;
ssize_t w;
#ifdef __SCLE
int oldmode=0;
#endif
/contrib/sdk/sources/newlib/libc/stdio/ungetc.c
125,7 → 125,7
 
CHECK_INIT (rptr, fp);
 
_flockfile (fp);
_newlib_flockfile_start (fp);
 
ORIENT (fp, -1);
 
140,7 → 140,7
*/
if ((fp->_flags & __SRW) == 0)
{
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return EOF;
}
if (fp->_flags & __SWR)
147,7 → 147,7
{
if (_fflush_r (rptr, fp))
{
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return EOF;
}
fp->_flags &= ~__SWR;
167,12 → 167,12
{
if (fp->_r >= fp->_ub._size && __submore (rptr, fp))
{
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return EOF;
}
*--fp->_p = c;
fp->_r++;
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return c;
}
 
186,7 → 186,7
{
fp->_p--;
fp->_r++;
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return c;
}
 
202,7 → 202,7
fp->_ubuf[sizeof (fp->_ubuf) - 1] = c;
fp->_p = &fp->_ubuf[sizeof (fp->_ubuf) - 1];
fp->_r = 1;
_funlockfile (fp);
_newlib_flockfile_end (fp);
return c;
}
 
/contrib/sdk/sources/newlib/libc/stdio/vdprintf.c
16,7 → 16,7
_DEFUN(_vdprintf_r, (ptr, fd, format, ap),
struct _reent *ptr _AND
int fd _AND
const char *format _AND
const char *__restrict format _AND
va_list ap)
{
char *p;
38,7 → 38,7
int
_DEFUN(vdprintf, (fd, format, ap),
int fd _AND
const char *format _AND
const char *__restrict format _AND
va_list ap)
{
return _vdprintf_r (_REENT, fd, format, ap);
/contrib/sdk/sources/newlib/libc/stdio/vfieeefp.h
131,7 → 131,7
unsigned manh:32;
unsigned manl:32;
unsigned manl2:32;
unsigned manl3;16;
unsigned manl3:16;
};
#endif /* LDBL_MANT_DIG */
#endif /* !IEEE_8087 */
/contrib/sdk/sources/newlib/libc/stdio/vfprintf.c
178,10 → 178,18
#endif
 
#ifdef STRING_ONLY
# ifdef _FVWRITE_IN_STREAMIO
#define __SPRINT __ssprint_r
#else
# define __SPRINT __ssputs_r
# endif
#else
# ifdef _FVWRITE_IN_STREAMIO
#define __SPRINT __sprint_r
# else
# define __SPRINT __sfputs_r
#endif
#endif
 
/* The __sprint_r/__ssprint_r functions are shared between all versions of
vfprintf and vfwprintf. They must only be defined once, which we do in
188,7 → 196,77
the INTEGER_ONLY versions here. */
#ifdef STRING_ONLY
#ifdef INTEGER_ONLY
#ifndef _FVWRITE_IN_STREAMIO
int
_DEFUN(__ssputs_r, (ptr, fp, buf, len),
struct _reent *ptr _AND
FILE *fp _AND
_CONST char *buf _AND
size_t len)
{
register int w;
 
w = fp->_w;
if (len >= w && fp->_flags & (__SMBF | __SOPT)) {
/* must be asprintf family */
unsigned char *str;
int curpos = (fp->_p - fp->_bf._base);
/* Choose a geometric growth factor to avoid
* quadratic realloc behavior, but use a rate less
* than (1+sqrt(5))/2 to accomodate malloc
* overhead. asprintf EXPECTS us to overallocate, so
* that it can add a trailing \0 without
* reallocating. The new allocation should thus be
* max(prev_size*1.5, curpos+len+1). */
int newsize = fp->_bf._size * 3 / 2;
if (newsize < curpos + len + 1)
newsize = curpos + len + 1;
if (fp->_flags & __SOPT)
{
/* asnprintf leaves original buffer alone. */
str = (unsigned char *)_malloc_r (ptr, newsize);
if (!str)
{
ptr->_errno = ENOMEM;
goto err;
}
memcpy (str, fp->_bf._base, curpos);
fp->_flags = (fp->_flags & ~__SOPT) | __SMBF;
}
else
{
str = (unsigned char *)_realloc_r (ptr, fp->_bf._base,
newsize);
if (!str) {
/* Free unneeded buffer. */
_free_r (ptr, fp->_bf._base);
/* Ensure correct errno, even if free
* changed it. */
ptr->_errno = ENOMEM;
goto err;
}
}
fp->_bf._base = str;
fp->_p = str + curpos;
fp->_bf._size = newsize;
w = len;
fp->_w = newsize - curpos;
}
if (len < w)
w = len;
(void)memmove ((_PTR) fp->_p, (_PTR) buf, (size_t) (w));
fp->_w -= w;
fp->_p += w;
 
return 0;
 
err:
fp->_flags |= __SERR;
return EOF;
}
#endif
 
int
_DEFUN(__ssprint_r, (ptr, fp, uio),
struct _reent *ptr _AND
FILE *fp _AND
280,11 → 358,46
return EOF;
}
#else /* !INTEGER_ONLY */
#ifndef _FVWRITE_IN_STREAMIO
int __ssputs_r (struct _reent *, FILE *, _CONST char *, size_t);
#endif
int __ssprint_r (struct _reent *, FILE *, register struct __suio *);
#endif /* !INTEGER_ONLY */
 
#else /* !STRING_ONLY */
#ifdef INTEGER_ONLY
 
#ifndef _FVWRITE_IN_STREAMIO
int
_DEFUN(__sfputs_r, (ptr, fp, buf, len),
struct _reent *ptr _AND
FILE *fp _AND
_CONST char *buf _AND
size_t len)
{
register int i;
 
#ifdef _WIDE_ORIENT
if (fp->_flags2 & __SWID) {
wchar_t *p;
 
p = (wchar_t *) buf;
for (i = 0; i < (len / sizeof (wchar_t)); i++) {
if (_fputwc_r (ptr, p[i], fp) == WEOF)
return -1;
}
} else {
#else
{
#endif
for (i = 0; i < len; i++) {
if (_fputc_r (ptr, buf[i], fp) == EOF)
return -1;
}
}
return (0);
}
#endif
/*
* Flush out all the vectors defined by the given uio,
* then reset it so that it can be reused.
301,6 → 414,7
uio->uio_iovcnt = 0;
return (0);
}
#ifdef _WIDE_ORIENT
if (fp->_flags2 & __SWID) {
struct __siov *iov;
wchar_t *p;
319,6 → 433,7
}
}
} else
#endif
err = __sfvwrite_r(ptr, fp, uio);
out:
uio->uio_resid = 0;
326,15 → 441,21
return (err);
}
#else /* !INTEGER_ONLY */
#ifndef _FVWRITE_IN_STREAMIO
int __sfputs_r (struct _reent *, FILE *, _CONST char *buf, size_t);
#endif
int __sprint_r (struct _reent *, FILE *, register struct __suio *);
#endif /* !INTEGER_ONLY */
 
#ifdef _UNBUF_STREAM_OPT
/*
* Helper function for `fprintf to unbuffered unix file': creates a
* temporary buffer. We only work on write-only files; this avoids
* worries about ungetc buffers and so forth.
*
* Make sure to avoid inlining.
*/
static int
_NOINLINE_STATIC int
_DEFUN(__sbprintf, (rptr, fp, fmt, ap),
struct _reent *rptr _AND
register FILE *fp _AND
372,6 → 493,7
#endif
return (ret);
}
#endif /* _UNBUF_STREAM_OPT */
#endif /* !STRING_ONLY */
 
 
548,7 → 670,6
register int ch; /* character from fmt */
register int n, m; /* handy integers (short term usage) */
register char *cp; /* handy char pointer (short term usage) */
register struct __siov *iovp;/* for PRINT macro */
register int flags; /* flags as above */
char *fmt_anchor; /* current format spec being processed */
#ifndef _NO_POS_ARGS
567,9 → 688,9
char sign; /* sign prefix (' ', '+', '-', or \0) */
#ifdef _WANT_IO_C99_FORMATS
/* locale specific numeric grouping */
char *thousands_sep;
size_t thsnd_len;
const char *grouping;
char *thousands_sep = NULL;
size_t thsnd_len = 0;
const char *grouping = NULL;
#endif
#ifdef FLOATING_POINT
char *decimal_point = _localeconv_r (data)->decimal_point;
585,7 → 706,7
#if defined (FLOATING_POINT) || defined (_WANT_IO_C99_FORMATS)
int ndig = 0; /* actual number of digits returned by cvt */
#endif
#ifdef _WANT_IO_C99_FORMATS
#if defined (FLOATING_POINT) && defined (_WANT_IO_C99_FORMATS)
int nseps; /* number of group separators with ' */
int nrepeats; /* number of repeats of the last group */
#endif
595,9 → 716,12
int realsz; /* field size expanded by dprec */
int size; /* size of converted field or string */
char *xdigs = NULL; /* digits for [xX] conversion */
#ifdef _FVWRITE_IN_STREAMIO
#define NIOV 8
struct __suio uio; /* output information: summary */
struct __siov iov[NIOV];/* ... and individual io vectors */
register struct __siov *iovp;/* for PRINT macro */
#endif
char buf[BUF]; /* space for %c, %S, %[diouxX], %[aA] */
char ox[2]; /* space for 0x hex-prefix */
#ifdef _MB_CAPABLE
623,6 → 747,7
/*
* BEWARE, these `goto error' on error, and PAD uses `n'.
*/
#ifdef _FVWRITE_IN_STREAMIO
#define PRINT(ptr, len) { \
iovp->iov_base = (ptr); \
iovp->iov_len = (len); \
657,6 → 782,30
uio.uio_iovcnt = 0; \
iovp = iov; \
}
#else
#define PRINT(ptr, len) { \
if (__SPRINT (data, fp, (ptr), (len)) == EOF) \
goto error; \
}
#define PAD(howmany, with) { \
if ((n = (howmany)) > 0) { \
while (n > PADSIZE) { \
PRINT (with, PADSIZE); \
n -= PADSIZE; \
} \
PRINT (with, n); \
} \
}
#define PRINTANDPAD(p, ep, len, with) { \
int n = (ep) - (p); \
if (n > (len)) \
n = (len); \
if (n > 0) \
PRINT((p), n); \
PAD((len) - (n > 0 ? n : 0), (with)); \
}
#define FLUSH()
#endif
 
/* Macros to support positional arguments */
#ifndef _NO_POS_ARGS
708,22 → 857,24
#ifndef STRING_ONLY
/* Initialize std streams if not dealing with sprintf family. */
CHECK_INIT (data, fp);
_flockfile (fp);
_newlib_flockfile_start (fp);
 
ORIENT(fp, -1);
 
/* sorry, fprintf(read_only_file, "") returns EOF, not 0 */
if (cantwrite (data, fp)) {
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return (EOF);
}
 
#ifdef _UNBUF_STREAM_OPT
/* optimise fprintf(stderr) (and other unbuffered Unix files) */
if ((fp->_flags & (__SNBF|__SWR|__SRW)) == (__SNBF|__SWR) &&
fp->_file >= 0) {
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return (__sbprintf (data, fp, fmt0, ap));
}
#endif
#else /* STRING_ONLY */
/* Create initial buffer if we are called by asprintf family. */
if (fp->_flags & __SMBF && !fp->_bf._base)
739,9 → 890,11
#endif /* STRING_ONLY */
 
fmt = (char *)fmt0;
#ifdef _FVWRITE_IN_STREAMIO
uio.uio_iov = iovp = iov;
uio.uio_resid = 0;
uio.uio_iovcnt = 0;
#endif
ret = 0;
#ifndef _NO_POS_ARGS
arg_index = 0;
793,10 → 946,10
sign = '\0';
#ifdef FLOATING_POINT
lead = 0;
#endif
#ifdef _WANT_IO_C99_FORMATS
nseps = nrepeats = 0;
#endif
#endif
#ifndef _NO_POS_ARGS
N = arg_index;
is_pos_arg = 0;
1225,6 → 1378,15
sign = '-';
break;
#endif /* FLOATING_POINT */
#ifdef _GLIBC_EXTENSION
case 'm': /* extension */
{
int dummy;
cp = _strerror_r (data, data->_errno, 1, &dummy);
}
flags &= ~LONGINT;
goto string;
#endif
case 'n':
#ifndef _NO_LONGLONG
if (flags & QUADINT)
1272,8 → 1434,11
#ifdef _WANT_IO_C99_FORMATS
case 'S':
#endif
cp = GET_ARG (N, ap, char_ptr_t);
#ifdef _GLIBC_EXTENSION
string:
#endif
sign = '\0';
cp = GET_ARG (N, ap, char_ptr_t);
#ifndef __OPTIMIZE_SIZE__
/* Behavior is undefined if the user passed a
NULL string when precision is not 0.
1621,7 → 1786,7
if (malloc_buf != NULL)
_free_r (data, malloc_buf);
#ifndef STRING_ONLY
_funlockfile (fp);
_newlib_flockfile_end (fp);
#endif
return (__sferror (fp) ? EOF : ret);
/* NOTREACHED */
/contrib/sdk/sources/newlib/libc/stdio/vfscanf.c
148,10 → 148,12
#endif
 
#ifdef STRING_ONLY
#undef _flockfile
#undef _funlockfile
#define _flockfile(x) {}
#define _funlockfile(x) {}
#undef _newlib_flockfile_start
#undef _newlib_flockfile_exit
#undef _newlib_flockfile_end
#define _newlib_flockfile_start(x) {}
#define _newlib_flockfile_exit(x) {}
#define _newlib_flockfile_end(x) {}
#define _ungetc_r _sungetc_r
#define __srefill_r __ssrefill_r
#define _fread_r _sfread_r
160,6 → 162,7
#ifdef FLOATING_POINT
#include <math.h>
#include <float.h>
#include <locale.h>
 
/* Currently a test is made to see if long double processing is warranted.
This could be changed in the future should the _ldtoa_r code be
172,11 → 175,7
 
#include "floatio.h"
 
#if ((MAXEXP+MAXFRACT+3) > MB_LEN_MAX)
# define BUF (MAXEXP+MAXFRACT+3) /* 3 = sign + decimal point + NUL */
#else
# define BUF MB_LEN_MAX
#endif
#define BUF (MAXEXP+MAXFRACT+MB_LEN_MAX+2) /* decimal point + sign + NUL */
 
/* An upper bound for how long a long prints in decimal. 4 / 13 approximates
log (2). Add one char for roundoff compensation and one for the sign. */
241,10 → 240,7
#define CT_INT 3 /* integer, i.e., strtol or strtoul */
#define CT_FLOAT 4 /* floating, i.e., strtod */
 
#if 0
#define u_char unsigned char
#endif
#define u_char char
#define u_long unsigned long
 
#ifndef _NO_LONGLONG
267,8 → 263,10
_CONST char *fmt _AND
va_list ap)
{
CHECK_INIT(_REENT, fp);
return __SVFSCANF_R (_REENT, fp, fmt, ap);
struct _reent *reent = _REENT;
 
CHECK_INIT(reent, fp);
return __SVFSCANF_R (reent, fp, fmt, ap);
}
 
int
496,7 → 494,7
# define GET_ARG(n, ap, type) (va_arg (ap, type))
#endif
 
_flockfile (fp);
_newlib_flockfile_start (fp);
 
ORIENT (fp, -1);
 
511,8 → 509,8
#ifndef _MB_CAPABLE
wc = *fmt;
#else
nbytes = __mbtowc (rptr, &wc, fmt, MB_CUR_MAX, __locale_charset (),
&state);
nbytes = __mbtowc (rptr, &wc, (char *) fmt, MB_CUR_MAX,
__locale_charset (), &state);
if (nbytes < 0) {
wc = 0xFFFD; /* Unicode replacement character */
nbytes = 1;
795,7 → 793,7
* Disgusting backwards compatibility hacks. XXX
*/
case '\0': /* compat */
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return EOF;
 
default: /* compat */
1287,6 → 1285,10
unsigned width_left = 0;
char nancount = 0;
char infcount = 0;
const char *decpt = _localeconv_r (rptr)->decimal_point;
#ifdef _MB_CAPABLE
int decptpos = 0;
#endif
#ifdef hardway
if (width == 0 || width > sizeof (buf) - 1)
#else
1415,14 → 1417,6
goto fok;
}
break;
case '.':
if (flags & DPTOK)
{
flags &= ~(SIGNOK | DPTOK);
leading_zeroes = zeroes;
goto fok;
}
break;
case 'e':
case 'E':
/* no exponent without some digits */
1441,8 → 1435,55
goto fok;
}
break;
default:
#ifndef _MB_CAPABLE
if ((unsigned char) c == (unsigned char) decpt[0]
&& (flags & DPTOK))
{
flags &= ~(SIGNOK | DPTOK);
leading_zeroes = zeroes;
goto fok;
}
break;
#else
if (flags & DPTOK)
{
while ((unsigned char) c
== (unsigned char) decpt[decptpos])
{
if (decpt[++decptpos] == '\0')
{
/* We read the complete decpt seq. */
flags &= ~(SIGNOK | DPTOK);
leading_zeroes = zeroes;
p = stpncpy (p, decpt, decptpos);
decptpos = 0;
goto fskip;
}
++nread;
if (--fp->_r > 0)
fp->_p++;
else if (__srefill_r (rptr, fp))
break; /* EOF */
c = *fp->_p;
}
if (decptpos > 0)
{
/* We read part of a multibyte decimal point,
but the rest is invalid or we're at EOF,
so back off. */
while (decptpos-- > 0)
{
_ungetc_r (rptr, (unsigned char) decpt[decptpos],
fp);
--nread;
}
}
}
break;
#endif
}
break;
fok:
*p++ = c;
fskip:
1595,12 → 1636,12
should have been set prior to here. On EOF failure (including
invalid format string), return EOF if no matches yet, else number
of matches made prior to failure. */
_funlockfile (fp);
_newlib_flockfile_exit (fp);
return nassigned && !(fp->_flags & __SERR) ? nassigned : EOF;
match_failure:
all_done:
/* Return number of matches, which can be 0 on match failure. */
_funlockfile (fp);
_newlib_flockfile_end (fp);
return nassigned;
}
 
/contrib/sdk/sources/newlib/libc/stdio/vscanf.c
34,8 → 34,10
_CONST char *fmt _AND
va_list ap)
{
_REENT_SMALL_CHECK_INIT (_REENT);
return __svfscanf_r (_REENT, _stdin_r (_REENT), fmt, ap);
struct _reent *reent = _REENT;
 
_REENT_SMALL_CHECK_INIT (reent);
return __svfscanf_r (reent, _stdin_r (reent), fmt, ap);
}
 
#endif /* !_REENT_ONLY */
43,7 → 45,7
int
_DEFUN(_vscanf_r, (ptr, fmt, ap),
struct _reent *ptr _AND
_CONST char *fmt _AND
_CONST char *__restrict fmt _AND
va_list ap)
{
_REENT_SMALL_CHECK_INIT (ptr);
/contrib/sdk/sources/newlib/libc/stdio/vsnprintf.c
33,9 → 33,9
 
int
_DEFUN(vsnprintf, (str, size, fmt, ap),
char *str _AND
char *__restrict str _AND
size_t size _AND
const char *fmt _AND
const char *__restrict fmt _AND
va_list ap)
{
return _vsnprintf_r (_REENT, str, size, fmt, ap);
46,9 → 46,9
int
_DEFUN(_vsnprintf_r, (ptr, str, size, fmt, ap),
struct _reent *ptr _AND
char *str _AND
char *__restrict str _AND
size_t size _AND
const char *fmt _AND
const char *__restrict fmt _AND
va_list ap)
{
int ret;
/contrib/sdk/sources/newlib/libc/stdio/vsprintf.c
32,8 → 32,8
 
int
_DEFUN(vsprintf, (str, fmt, ap),
char *str _AND
const char *fmt _AND
char *__restrict str _AND
const char *__restrict fmt _AND
va_list ap)
{
return _vsprintf_r (_REENT, str, fmt, ap);
44,8 → 44,8
int
_DEFUN(_vsprintf_r, (ptr, str, fmt, ap),
struct _reent *ptr _AND
char *str _AND
const char *fmt _AND
char *__restrict str _AND
const char *__restrict fmt _AND
va_list ap)
{
int ret;
/contrib/sdk/sources/newlib/libc/stdio/vsscanf.c
36,8 → 36,8
 
int
_DEFUN(vsscanf, (str, fmt, ap),
_CONST char *str _AND
_CONST char *fmt _AND
_CONST char *__restrict str _AND
_CONST char *__restrict fmt _AND
va_list ap)
{
return _vsscanf_r (_REENT, str, fmt, ap);
48,8 → 48,8
int
_DEFUN(_vsscanf_r, (ptr, str, fmt, ap),
struct _reent *ptr _AND
_CONST char *str _AND
_CONST char *fmt _AND
_CONST char *__restrict str _AND
_CONST char *__restrict fmt _AND
va_list ap)
{
FILE f;
/contrib/sdk/sources/newlib/libc/stdlib/_Exit.c
0,0 → 1,46
/*
FUNCTION
<<_Exit>>---end program execution with no cleanup processing
 
INDEX
_Exit
 
ANSI_SYNOPSIS
#include <stdlib.h>
void _Exit(int <[code]>);
 
TRAD_SYNOPSIS
#include <stdlib.h>
void _Exit(<[code]>)
int <[code]>;
 
DESCRIPTION
Use <<_Exit>> to return control from a program to the host operating
environment. Use the argument <[code]> to pass an exit status to the
operating environment: two particular values, <<EXIT_SUCCESS>> and
<<EXIT_FAILURE>>, are defined in `<<stdlib.h>>' to indicate success or
failure in a portable fashion.
 
<<_Exit>> differs from <<exit>> in that it does not run any
application-defined cleanup functions registered with <<atexit>> and
it does not clean up files and streams. It is identical to <<_exit>>.
 
RETURNS
<<_Exit>> does not return to its caller.
 
PORTABILITY
<<_Exit>> is defined by the C99 standard.
 
Supporting OS subroutines required: <<_exit>>.
*/
 
#include <stdlib.h>
#include <unistd.h> /* for _exit() declaration */
#include <reent.h>
 
void
_DEFUN (_Exit, (code),
int code)
{
_exit (code);
}
/contrib/sdk/sources/newlib/libc/stdlib/__adjust.c
0,0 → 1,44
/*
* return (*acc) scaled by 10**dexp.
*/
 
#include <_ansi.h>
#include <reent.h>
#include "std.h"
 
#define abs(x) (((x) < 0) ? -(x) : (x))
 
double
_DEFUN (__adjust, (ptr, acc, dexp, sign),
struct _reent *ptr _AND
double *acc _AND
int dexp _AND
int sign)
/* *acc the 64 bit accumulator */
/* dexp decimal exponent */
/* sign sign flag */
{
double r;
 
if (dexp > MAXE)
{
ptr->_errno = ERANGE;
return (sign) ? -HUGE_VAL : HUGE_VAL;
}
else if (dexp < MINE)
{
ptr->_errno = ERANGE;
return 0.0;
}
 
r = *acc;
if (sign)
r = -r;
if (dexp == 0)
return r;
 
if (dexp < 0)
return r / __exp10 (abs (dexp));
else
return r * __exp10 (dexp);
}
/contrib/sdk/sources/newlib/libc/stdlib/__atexit.c
1,5 → 1,35
/*
* Common routine to implement atexit-like functionality.
*
* This is also the key function to be configured as lite exit, a size-reduced
* implementation of exit that doesn't invoke clean-up functions such as _fini
* or global destructors.
*
* Default (without lite exit) call graph is like:
* _start -> atexit -> __register_exitproc
* _start -> __libc_init_array -> __cxa_atexit -> __register_exitproc
* on_exit -> __register_exitproc
* _start -> exit -> __call_exitprocs
*
* Here an -> means arrow tail invokes arrow head. All invocations here
* are non-weak reference in current newlib/libgloss.
*
* Lite exit makes some of above calls as weak reference, so that size expansive
* functions __register_exitproc and __call_exitprocs may not be linked. These
* calls are:
* _start w-> atexit
* __cxa_atexit w-> __register_exitproc
* exit w-> __call_exitprocs
*
* Lite exit also makes sure that __call_exitprocs will be referenced as non-weak
* whenever __register_exitproc is referenced as non-weak.
*
* Thus with lite exit libs, a program not explicitly calling atexit or on_exit
* will escape from the burden of cleaning up code. A program with atexit or on_exit
* will work consistently to normal libs.
*
* Lite exit is enabled with --enable-lite-exit, and is controlled with macro
* _LITE_EXIT.
*/
 
#include <stddef.h>
10,8 → 40,24
 
/* Make this a weak reference to avoid pulling in malloc. */
void * malloc(size_t) _ATTRIBUTE((__weak__));
__LOCK_INIT_RECURSIVE(, __atexit_lock);
 
#ifdef _LITE_EXIT
/* As __call_exitprocs is weak reference in lite exit, make a
non-weak reference to it here. */
const void * __atexit_dummy = &__call_exitprocs;
#endif
 
#ifndef __SINGLE_THREAD__
extern _LOCK_RECURSIVE_T __atexit_lock;
#endif
 
#ifdef _REENT_GLOBAL_ATEXIT
static struct _atexit _global_atexit0 = _ATEXIT_INIT;
# define _GLOBAL_ATEXIT0 (&_global_atexit0)
#else
# define _GLOBAL_ATEXIT0 (&_GLOBAL_REENT->_atexit0)
#endif
 
/*
* Register a function to be performed at exit or on shared library unload.
*/
31,9 → 77,9
__lock_acquire_recursive(__atexit_lock);
#endif
 
p = _GLOBAL_REENT->_atexit;
p = _GLOBAL_ATEXIT;
if (p == NULL)
_GLOBAL_REENT->_atexit = p = &_GLOBAL_REENT->_atexit0;
_GLOBAL_ATEXIT = p = _GLOBAL_ATEXIT0;
if (p->_ind >= _ATEXIT_SIZE)
{
#ifndef _ATEXIT_DYNAMIC_ALLOC
53,11 → 99,13
return -1;
}
p->_ind = 0;
p->_next = _GLOBAL_REENT->_atexit;
_GLOBAL_REENT->_atexit = p;
p->_next = _GLOBAL_ATEXIT;
_GLOBAL_ATEXIT = p;
#ifndef _REENT_SMALL
p->_on_exit_args._fntypes = 0;
p->_on_exit_args._is_cxa = 0;
#else
p->_on_exit_args_ptr = NULL;
#endif
#endif
}
74,7 → 122,7
if (args == NULL)
{
#ifndef __SINGLE_THREAD__
__lock_release(lock);
__lock_release(__atexit_lock);
#endif
return -1;
}
/contrib/sdk/sources/newlib/libc/stdlib/__call_atexit.c
11,8 → 11,10
/* Make this a weak reference to avoid pulling in free. */
void free(void *) _ATTRIBUTE((__weak__));
 
#ifndef __SINGLE_THREAD__
extern _LOCK_RECURSIVE_T __atexit_lock;
__LOCK_INIT_RECURSIVE(, __atexit_lock);
 
#ifdef _REENT_GLOBAL_ATEXIT
struct _atexit *_global_atexit = _NULL;
#endif
 
#ifdef _WANT_REGISTER_FINI
78,8 → 80,8
 
restart:
 
p = _GLOBAL_REENT->_atexit;
lastp = &_GLOBAL_REENT->_atexit;
p = _GLOBAL_ATEXIT;
lastp = &_GLOBAL_ATEXIT;
while (p)
{
#ifdef _REENT_SMALL
/contrib/sdk/sources/newlib/libc/stdlib/__exp10.c
0,0 → 1,30
/*
* compute 10**x by successive squaring.
*/
 
#include <_ansi.h>
#include "std.h"
 
double
_DEFUN (__exp10, (x),
unsigned x)
{
static _CONST double powtab[] =
{1.0,
10.0,
100.0,
1000.0,
10000.0};
 
if (x < (sizeof (powtab) / sizeof (double)))
return powtab[x];
else if (x & 1)
{
return 10.0 * __exp10 (x - 1);
}
else
{
double n = __exp10 (x / 2);
return n * n;
}
}
/contrib/sdk/sources/newlib/libc/stdlib/__ten_mu.c
0,0 → 1,24
/*
* [atw] multiply 64 bit accumulator by 10 and add digit.
* The KA/CA way to do this should be to use
* a 64-bit integer internally and use "adjust" to
* convert it to float at the end of processing.
*/
 
#include <_ansi.h>
#include "std.h"
 
int
_DEFUN (__ten_mul, (acc, digit),
double *acc _AND
int digit)
{
/*
* [atw] Crude, but effective (at least on a KB)...
*/
 
*acc *= 10;
*acc += digit;
 
return 0; /* no overflow */
}
/contrib/sdk/sources/newlib/libc/stdlib/a64l.c
0,0 → 1,197
/*
FUNCTION
<<a64l>>, <<l64a>>---convert between radix-64 ASCII string and long
 
INDEX
a64l
INDEX
l64a
 
ANSI_SYNOPSIS
#include <stdlib.h>
long a64l(const char *<[input]>);
char *l64a(long <[input]>);
 
TRAD_SYNOPSIS
#include <stdlib.h>
long a64l(<[input]>)
const char *<[input]>;
 
char *l64a(<[input]>)
long <[input]>;
 
DESCRIPTION
Conversion is performed between long and radix-64 characters. The
<<l64a>> routine transforms up to 32 bits of input value starting from
least significant bits to the most significant bits. The input value
is split up into a maximum of 5 groups of 6 bits and possibly one
group of 2 bits (bits 31 and 30).
 
Each group of 6 bits forms a value from 0--63 which is translated into
a character as follows:
 
O+
o 0 = '.'
o 1 = '/'
o 2--11 = '0' to '9'
o 12--37 = 'A' to 'Z'
o 38--63 = 'a' to 'z'
O-
 
When the remaining bits are zero or all bits have been translated, a
null terminator is appended to the string. An input value of 0
results in the empty string.
 
The <<a64l>> function performs the reverse translation. Each
character is used to generate a 6-bit value for up to 30 bits and then
a 2-bit value to complete a 32-bit result. The null terminator means
that the remaining digits are 0. An empty input string or NULL string
results in 0L. An invalid string results in undefined behavior. If
the size of a long is greater than 32 bits, the result is sign-extended.
 
RETURNS
<<l64a>> returns a null-terminated string of 0 to 6 characters.
<<a64l>> returns the 32-bit translated value from the input character string.
 
PORTABILITY
<<l64a>> and <<a64l>> are non-ANSI and are defined by the Single Unix Specification.
 
Supporting OS subroutines required: None.
*/
 
#include <_ansi.h>
#include <stdlib.h>
#include <limits.h>
 
long
_DEFUN (a64l, (input),
const char *input)
{
const char *ptr;
char ch;
int i, digit;
unsigned long result = 0;
 
if (input == NULL)
return 0;
 
ptr = input;
 
/* it easiest to go from most significant digit to least so find end of input or up
to 6 characters worth */
for (i = 0; i < 6; ++i)
{
if (*ptr)
++ptr;
}
 
while (ptr > input)
{
ch = *(--ptr);
 
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
if (ch >= 'a')
digit = (ch - 'a') + 38;
else if (ch >= 'A')
digit = (ch - 'A') + 12;
else if (ch >= '0')
digit = (ch - '0') + 2;
else if (ch == '/')
digit = 1;
else
digit = 0;
#else /* !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) */
switch (ch)
{
case '/':
digit = 1;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
digit = (ch - '0') + 2;
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
case 'M':
case 'N':
case 'O':
case 'P':
case 'Q':
case 'R':
case 'S':
case 'T':
case 'U':
case 'V':
case 'W':
case 'X':
case 'Y':
case 'Z':
digit = (ch - 'A') + 12;
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
case 'o':
case 'p':
case 'q':
case 'r':
case 's':
case 't':
case 'u':
case 'v':
case 'w':
case 'x':
case 'y':
case 'z':
digit = (ch - 'a') + 38;
break;
default:
digit = 0;
break;
}
#endif /* !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) */
result = (result << 6) + digit;
}
 
#if LONG_MAX > 2147483647
/* for implementations where long is > 32 bits, the result must be sign-extended */
if (result & 0x80000000)
return (((long)-1 >> 32) << 32) + result;
#endif
 
return result;
}
 
 
 
 
/contrib/sdk/sources/newlib/libc/stdlib/abort.c
59,7 → 59,7
 
while (1)
{
// raise (SIGABRT);
raise (SIGABRT);
_exit (1);
}
}
/contrib/sdk/sources/newlib/libc/stdlib/atoff.c
0,0 → 1,9
#include <stdlib.h>
#include <_ansi.h>
 
float
_DEFUN (atoff, (s),
_CONST char *s)
{
return strtof (s, NULL);
}
/contrib/sdk/sources/newlib/libc/stdlib/atoll.c
0,0 → 1,94
/*
FUNCTION
<<atoll>>---convert a string to a long long integer
 
INDEX
atoll
INDEX
_atoll_r
 
ANSI_SYNOPSIS
#include <stdlib.h>
long long atoll(const char *<[str]>);
long long _atoll_r(struct _reent *<[ptr]>, const char *<[str]>);
 
TRAD_SYNOPSIS
#include <stdlib.h>
long long atoll(<[str]>)
const char *<[str]>;
 
long long _atoll_r(<[ptr]>, <[str]>)
struct _reent *<[ptr]>;
const char *<[str]>;
 
DESCRIPTION
The function <<atoll>> converts the initial portion of the string
pointed to by <<*<[str]>>> to a type <<long long>>. A call to
atoll(str) in this implementation is equivalent to
strtoll(str, (char **)NULL, 10) including behavior on error.
 
The alternate function <<_atoll_r>> is a reentrant version. The
extra argument <[reent]> is a pointer to a reentrancy structure.
 
 
RETURNS
The converted value.
 
PORTABILITY
<<atoll>> is ISO 9899 (C99) and POSIX 1003.1-2001 compatable.
 
No supporting OS subroutines are required.
*/
 
/*
* Copyright (c) 1988, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
#include <stdlib.h>
#include <stddef.h>
 
#ifndef _REENT_ONLY
long long
_DEFUN(atoll, (str),
_CONST char *str)
{
return strtoll(str, (char **)NULL, 10);
}
#endif /* !_REENT_ONLY */
 
long long
_DEFUN(_atoll_r, (ptr, str),
struct _reent *ptr _AND
_CONST char *str)
{
return _strtoll_r(ptr, str, (char **)NULL, 10);
}
/contrib/sdk/sources/newlib/libc/stdlib/exit.c
58,6 → 58,11
_DEFUN (exit, (code),
int code)
{
#ifdef _LITE_EXIT
/* Refer to comments in __atexit.c for more details of lite exit. */
void __call_exitprocs _PARAMS ((int, _PTR)) __attribute__((weak));
if (__call_exitprocs)
#endif
__call_exitprocs (code, NULL);
 
if (_GLOBAL_REENT->__cleanup)
/contrib/sdk/sources/newlib/libc/stdlib/gdtoa-gethex.c
37,27 → 37,37
#include "gd_qnan.h"
#include "locale.h"
 
unsigned char hexdig[256];
 
static void
_DEFUN (htinit, (h, s, inc),
unsigned char *h _AND
unsigned char *s _AND
int inc)
#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) && !defined(_SMALL_HEXDIG)
_CONST unsigned char __hexdig[256]=
{
int i, j;
for(i = 0; (j = s[i]) !=0; i++)
h[j] = i + inc;
}
 
void
_DEFUN_VOID (hexdig_init)
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,0,
0,26,27,28,29,30,31,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,26,27,28,29,30,31,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
#else /* !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) && !defined(_SMALL_HEXDIG) */
unsigned char
_DEFUN (__hexdig_fun, (c),
unsigned char c)
{
#define USC (unsigned char *)
htinit(hexdig, USC "0123456789", 0x10);
htinit(hexdig, USC "abcdef", 0x10 + 10);
htinit(hexdig, USC "ABCDEF", 0x10 + 10);
if(c>='0' && c<='9') return c-'0'+0x10;
else if(c>='a' && c<='f') return c-'a'+0x10+10;
else if(c>='A' && c<='F') return c-'A'+0x10+10;
else return 0;
}
#endif /* !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) && !defined(_SMALL_HEXDIG) */
 
static void
_DEFUN(rshift, (b, k),
138,7 → 148,7
_DEFUN(gethex, (ptr, sp, fpi, exp, bp, sign),
struct _reent *ptr _AND
_CONST char **sp _AND
FPI *fpi _AND
_CONST FPI *fpi _AND
Long *exp _AND
_Bigint **bp _AND
int sign)
153,8 → 163,6
size_t decp_len = strlen ((const char *) decimalpoint);
unsigned char decp_end = decimalpoint[decp_len - 1];
 
if (!hexdig['0'])
hexdig_init();
havedig = 0;
s0 = *(_CONST unsigned char **)sp + 2;
while(s0[havedig] == '0')
164,28 → 172,28
decpt = 0;
zret = 0;
e = 0;
if (!hexdig[*s]) {
if (!__get_hexdig(*s)) {
zret = 1;
if (strncmp ((const char *) s, (const char *) decimalpoint,
decp_len) != 0)
goto pcheck;
decpt = (s += decp_len);
if (!hexdig[*s])
if (!__get_hexdig(*s))
goto pcheck;
while(*s == '0')
s++;
if (hexdig[*s])
if (__get_hexdig(*s))
zret = 0;
havedig = 1;
s0 = s;
}
while(hexdig[*s])
while(__get_hexdig(*s))
s++;
if (strncmp ((const char *) s, (const char *) decimalpoint,
decp_len) == 0
&& !decpt) {
decpt = (s += decp_len);
while(hexdig[*s])
while(__get_hexdig(*s))
s++;
}
if (decpt)
203,12 → 211,12
case '+':
s++;
}
if ((n = hexdig[*s]) == 0 || n > 0x19) {
if ((n = __get_hexdig(*s)) == 0 || n > 0x19) {
s = s1;
break;
}
e1 = n - 0x10;
while((n = hexdig[*++s]) !=0 && n <= 0x19)
while((n = __get_hexdig(*++s)) !=0 && n <= 0x19)
e1 = 10*e1 + n - 0x10;
if (esign)
e1 = -e1;
236,7 → 244,7
L = 0;
n = 0;
}
L |= (hexdig[*s1] & 0x0f) << n;
L |= (__get_hexdig(*s1) & 0x0f) << n;
n += 4;
}
*x++ = L;
/contrib/sdk/sources/newlib/libc/stdlib/gdtoa-hexnan.c
64,7 → 64,7
int
_DEFUN (hexnan, (sp, fpi, x0),
_CONST char **sp _AND
FPI *fpi _AND
_CONST FPI *fpi _AND
__ULong *x0)
{
__ULong c, h, *x, *x1, *xe;
71,8 → 71,6
_CONST char *s;
int havedig, hd0, i, nbits;
 
if (!hexdig['0'])
hexdig_init();
nbits = fpi->nbits;
x = x0 + (nbits >> kshift);
if (nbits & kmask)
82,7 → 80,7
havedig = hd0 = i = 0;
s = *sp;
while((c = *(_CONST unsigned char*)++s)) {
if (!(h = hexdig[c])) {
if (!(h = __get_hexdig(c))) {
if (c <= ' ') {
if (hd0 < havedig) {
if (x < x1 && i < 8)
/contrib/sdk/sources/newlib/libc/stdlib/ldiv.c
0,0 → 1,109
/*
FUNCTION
<<ldiv>>---divide two long integers
 
INDEX
ldiv
 
ANSI_SYNOPSIS
#include <stdlib.h>
ldiv_t ldiv(long <[n]>, long <[d]>);
 
TRAD_SYNOPSIS
#include <stdlib.h>
ldiv_t ldiv(<[n]>, <[d]>)
long <[n]>, <[d]>;
 
DESCRIPTION
Divide
@tex
$n/d$,
@end tex
@ifnottex
<[n]>/<[d]>,
@end ifnottex
returning quotient and remainder as two long integers in a structure <<ldiv_t>>.
 
RETURNS
The result is represented with the structure
 
. typedef struct
. {
. long quot;
. long rem;
. } ldiv_t;
 
where the <<quot>> field represents the quotient, and <<rem>> the
remainder. For nonzero <[d]>, if `<<<[r]> = ldiv(<[n]>,<[d]>);>>' then
<[n]> equals `<<<[r]>.rem + <[d]>*<[r]>.quot>>'.
 
To divide <<int>> rather than <<long>> values, use the similar
function <<div>>.
 
PORTABILITY
<<ldiv>> is ANSI.
 
No supporting OS subroutines are required.
*/
 
 
/*
* Copyright (c) 1990 Regents of the University of California.
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Chris Torek.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
#include <_ansi.h>
#include <stdlib.h> /* ldiv_t */
 
ldiv_t
_DEFUN (ldiv, (num, denom),
long num _AND
long denom)
{
ldiv_t r;
 
/* see div.c for comments */
 
r.quot = num / denom;
r.rem = num % denom;
if (num >= 0 && r.rem < 0) {
++r.quot;
r.rem -= denom;
}
else if (num < 0 && r.rem > 0) {
--r.quot;
r.rem += denom;
}
return (r);
}
/contrib/sdk/sources/newlib/libc/stdlib/lrand48.c
0,0 → 1,32
/*
* Copyright (c) 1993 Martin Birgmeier
* All rights reserved.
*
* You may redistribute unmodified or modified versions of this source
* code provided that the above copyright notice and this and the
* following conditions are retained.
*
* This software is provided ``as is'', and comes with no warranties
* of any kind. I shall in no event be liable for anything that happens
* to anyone/anything when using this software.
*/
 
#include "rand48.h"
 
long
_DEFUN (_lrand48_r, (r),
struct _reent *r)
{
_REENT_CHECK_RAND48(r);
__dorand48(r, __rand48_seed);
return (long)((unsigned long) __rand48_seed[2] << 15) +
((unsigned long) __rand48_seed[1] >> 1);
}
 
#ifndef _REENT_ONLY
long
_DEFUN_VOID (lrand48)
{
return _lrand48_r (_REENT);
}
#endif /* !_REENT_ONLY */
/contrib/sdk/sources/newlib/libc/stdlib/mbrtowc.c
43,33 → 43,34
#ifndef _REENT_ONLY
size_t
_DEFUN (mbrtowc, (pwc, s, n, ps),
wchar_t *pwc _AND
const char *s _AND
wchar_t *__restrict pwc _AND
const char *__restrict s _AND
size_t n _AND
mbstate_t *ps)
mbstate_t *__restrict ps)
{
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
return _mbrtowc_r (_REENT, pwc, s, n, ps);
#else
int retval = 0;
struct _reent *reent = _REENT;
 
#ifdef _MB_CAPABLE
if (ps == NULL)
{
_REENT_CHECK_MISC(_REENT);
ps = &(_REENT_MBRTOWC_STATE(_REENT));
_REENT_CHECK_MISC(reent);
ps = &(_REENT_MBRTOWC_STATE(reent));
}
#endif
 
if (s == NULL)
retval = __mbtowc (_REENT, NULL, "", 1, __locale_charset (), ps);
retval = __mbtowc (reent, NULL, "", 1, __locale_charset (), ps);
else
retval = __mbtowc (_REENT, pwc, s, n, __locale_charset (), ps);
retval = __mbtowc (reent, pwc, s, n, __locale_charset (), ps);
 
if (retval == -1)
{
ps->__count = 0;
_REENT->_errno = EILSEQ;
reent->_errno = EILSEQ;
return (size_t)(-1);
}
else
/contrib/sdk/sources/newlib/libc/stdlib/mbtowc.c
7,7 → 7,7
 
ANSI_SYNOPSIS
#include <stdlib.h>
int mbtowc(wchar_t *<[pwc]>, const char *<[s]>, size_t <[n]>);
int mbtowc(wchar_t *restrict <[pwc]>, const char *restrict <[s]>, size_t <[n]>);
 
TRAD_SYNOPSIS
#include <stdlib.h>
58,18 → 58,19
 
int
_DEFUN (mbtowc, (pwc, s, n),
wchar_t *pwc _AND
const char *s _AND
wchar_t *__restrict pwc _AND
const char *__restrict s _AND
size_t n)
{
#ifdef _MB_CAPABLE
int retval = 0;
struct _reent *reent = _REENT;
mbstate_t *ps;
 
_REENT_CHECK_MISC(_REENT);
ps = &(_REENT_MBTOWC_STATE(_REENT));
_REENT_CHECK_MISC(reent);
ps = &(_REENT_MBTOWC_STATE(reent));
retval = __mbtowc (_REENT, pwc, s, n, __locale_charset (), ps);
retval = __mbtowc (reent, pwc, s, n, __locale_charset (), ps);
if (retval < 0)
{
/contrib/sdk/sources/newlib/libc/stdlib/mbtowc_r.c
19,8 → 19,8
int
_DEFUN (_mbtowc_r, (r, pwc, s, n, state),
struct _reent *r _AND
wchar_t *pwc _AND
const char *s _AND
wchar_t *__restrict pwc _AND
const char *__restrict s _AND
size_t n _AND
mbstate_t *state)
{
78,6 → 78,7
* is 2 (switch to JIS) + 2 (JIS characters) + 2 (switch back to ASCII) = 6.
*************************************************************************************/
 
#ifndef __CYGWIN__
static JIS_STATE JIS_state_table[JIS_S_NUM][JIS_C_NUM] = {
/* ESCAPE DOLLAR BRACKET AT B J NUL JIS_CHAR OTHER */
/* ASCII */ { A_ESC, ASCII, ASCII, ASCII, ASCII, ASCII, ASCII, ASCII, ASCII },
99,6 → 100,7
/* J_ESC */ { ERROR, ERROR, NOOP, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR },
/* J_ESC_BR */{ ERROR, ERROR, ERROR, ERROR, MAKE_A, MAKE_A, ERROR, ERROR, ERROR },
};
#endif /* !__CYGWIN__ */
 
/* we override the mbstate_t __count field for more complex encodings and use it store a state value */
#define __state __count
/contrib/sdk/sources/newlib/libc/stdlib/mlock.c
1,3 → 1,4
#ifndef MALLOC_PROVIDED
/*
FUNCTION
<<__malloc_lock>>, <<__malloc_unlock>>---lock malloc pool
38,13 → 39,17
#include <malloc.h>
#include <sys/lock.h>
 
#ifndef __SINGLE_THREAD__
__LOCK_INIT_RECURSIVE(static, __malloc_lock_object);
#endif
 
void
__malloc_lock (ptr)
struct _reent *ptr;
{
#ifndef __SINGLE_THREAD__
__lock_acquire_recursive (__malloc_lock_object);
#endif
}
 
void
51,6 → 56,9
__malloc_unlock (ptr)
struct _reent *ptr;
{
#ifndef __SINGLE_THREAD__
__lock_release_recursive (__malloc_lock_object);
#endif
}
 
#endif
/contrib/sdk/sources/newlib/libc/stdlib/mprec.h
98,7 → 98,7
#define SI 0
#endif
 
#define Storeinc(a,b,c) (*(a)++ = (b) << 16 | (c) & 0xffff)
#define Storeinc(a,b,c) (*(a)++ = ((b) << 16) | ((c) & 0xffff))
 
/* #define P DBL_MANT_DIG */
/* Ten_pmax = floor(P*log(2)/log(5)) */
370,9 → 370,12
#define gethex __gethex
#define copybits __copybits
#define hexnan __hexnan
#define hexdig_init __hexdig_init
 
#define hexdig __hexdig
#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) && !defined(_SMALL_HEXDIG)
#define __get_hexdig(x) __hexdig[x] /* NOTE: must evaluate arg only once */
#else /* !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) && !defined(_SMALL_HEXDIG) */
#define __get_hexdig(x) __hexdig_fun(x)
#endif /* !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) && !defined(_SMALL_HEXDIG) */
 
#define tens __mprec_tens
#define bigtens __mprec_bigtens
395,13 → 398,15
_Bigint * _EXFUN(lshift,(struct _reent *p, _Bigint *b, int k));
_Bigint * _EXFUN(diff,(struct _reent *p, _Bigint *a, _Bigint *b));
int _EXFUN(cmp,(_Bigint *a, _Bigint *b));
int _EXFUN(gethex,(struct _reent *p, _CONST char **sp, struct FPI *fpi, Long *exp, _Bigint **bp, int sign));
int _EXFUN(gethex,(struct _reent *p, _CONST char **sp, _CONST struct FPI *fpi, Long *exp, _Bigint **bp, int sign));
double _EXFUN(ratio,(_Bigint *a, _Bigint *b));
__ULong _EXFUN(any_on,(_Bigint *b, int k));
void _EXFUN(copybits,(__ULong *c, int n, _Bigint *b));
void _EXFUN(hexdig_init,(void));
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__) || defined(_SMALL_HEXDIG)
unsigned char _EXFUN(__hexdig_fun,(unsigned char));
#endif /* !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) && !defined(_SMALL_HEXDIG) */
#ifdef INFNAN_CHECK
int _EXFUN(hexnan,(_CONST char **sp, struct FPI *fpi, __ULong *x0));
int _EXFUN(hexnan,(_CONST char **sp, _CONST struct FPI *fpi, __ULong *x0));
#endif
 
#define Bcopy(x,y) memcpy((char *)&x->_sign, (char *)&y->_sign, y->_wds*sizeof(__Long) + 2*sizeof(int))
409,7 → 414,9
extern _CONST double tinytens[];
extern _CONST double bigtens[];
extern _CONST double tens[];
extern unsigned char hexdig[];
#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) && !defined(_SMALL_HEXDIG)
extern _CONST unsigned char __hexdig[];
#endif /* !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) && !defined(_SMALL_HEXDIG) */
 
 
double _EXFUN(_mprec_log10,(int));
/contrib/sdk/sources/newlib/libc/stdlib/rand.c
72,20 → 72,24
void
_DEFUN (srand, (seed), unsigned int seed)
{
_REENT_CHECK_RAND48(_REENT);
_REENT_RAND_NEXT(_REENT) = seed;
struct _reent *reent = _REENT;
 
_REENT_CHECK_RAND48(reent);
_REENT_RAND_NEXT(reent) = seed;
}
 
int
_DEFUN_VOID (rand)
{
struct _reent *reent = _REENT;
 
/* This multiplier was obtained from Knuth, D.E., "The Art of
Computer Programming," Vol 2, Seminumerical Algorithms, Third
Edition, Addison-Wesley, 1998, p. 106 (line 26) & p. 108 */
_REENT_CHECK_RAND48(_REENT);
_REENT_RAND_NEXT(_REENT) =
_REENT_RAND_NEXT(_REENT) * __extension__ 6364136223846793005LL + 1;
return (int)((_REENT_RAND_NEXT(_REENT) >> 32) & RAND_MAX);
_REENT_CHECK_RAND48(reent);
_REENT_RAND_NEXT(reent) =
_REENT_RAND_NEXT(reent) * __extension__ 6364136223846793005LL + 1;
return (int)((_REENT_RAND_NEXT(reent) >> 32) & RAND_MAX);
}
 
#endif /* _REENT_ONLY */
/contrib/sdk/sources/newlib/libc/stdlib/strtod.c
11,11 → 11,11
 
ANSI_SYNOPSIS
#include <stdlib.h>
double strtod(const char *<[str]>, char **<[tail]>);
float strtof(const char *<[str]>, char **<[tail]>);
double strtod(const char *restrict <[str]>, char **restrict <[tail]>);
float strtof(const char *restrict <[str]>, char **restrict <[tail]>);
 
double _strtod_r(void *<[reent]>,
const char *<[str]>, char **<[tail]>);
const char *restrict <[str]>, char **restrict <[tail]>);
 
TRAD_SYNOPSIS
#include <stdlib.h>
128,11 → 128,17
#ifndef NO_IEEE_Scale
#define Avoid_Underflow
#undef tinytens
/* The factor of 2^53 in tinytens[4] helps us avoid setting the underflow */
/* The factor of 2^106 in tinytens[4] helps us avoid setting the underflow */
/* flag unnecessarily. It leads to a song and dance at the end of strtod. */
static _CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128,
9007199254740992.e-256
static _CONST double tinytens[] = { 1e-16, 1e-32,
#ifdef _DOUBLE_IS_32BITS
0.0, 0.0, 0.0
#else
1e-64, 1e-128,
9007199254740992. * 9007199254740992.e-256
#endif
};
 
#endif
#endif
 
144,6 → 150,28
#define Rounding Flt_Rounds
#endif
 
#ifdef Avoid_Underflow /*{*/
static double
_DEFUN (sulp, (x, scale),
U x _AND
int scale)
{
U u;
double rv;
int i;
 
rv = ulp(dval(x));
if (!scale || (i = 2*P + 1 - ((dword0(x) & Exp_mask) >> Exp_shift)) <= 0)
return rv; /* Is there an example where i <= 0 ? */
dword0(u) = Exp_1 + (i << Exp_shift);
#ifndef _DOUBLE_IS_32BITS
dword1(u) = 0;
#endif
return rv * u.d;
}
#endif /*}*/
 
 
#ifndef NO_HEX_FP
 
static void
208,8 → 236,8
double
_DEFUN (_strtod_r, (ptr, s00, se),
struct _reent *ptr _AND
_CONST char *s00 _AND
char **se)
_CONST char *__restrict s00 _AND
char **__restrict se)
{
#ifdef Avoid_Underflow
int scale;
221,7 → 249,10
U aadj1, rv, rv0;
Long L;
__ULong y, z;
_Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
_Bigint *bb = NULL, *bb1, *bd = NULL, *bd0, *bs = NULL, *delta = NULL;
#ifdef Avoid_Underflow
__ULong Lsb, Lsb1;
#endif
#ifdef SET_INEXACT
int inexact, oldinexact;
#endif
256,7 → 287,7
if (*s == '0') {
#ifndef NO_HEX_FP
{
static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI };
static _CONST FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI };
Long exp;
__ULong bits[2];
switch(s[1]) {
279,6 → 310,8
switch((i = gethex(ptr, &s, &fpi1, &exp, &bb, sign)) & STRTOG_Retmask) {
case STRTOG_NoNumber:
s = s00;
sign = 0;
/* FALLTHROUGH */
case STRTOG_Zero:
break;
default:
299,17 → 332,15
}
s0 = s;
y = z = 0;
for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++) {
if (nd < DBL_DIG + 1) {
for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
if (nd < 9)
y = 10*y + c - '0';
else
z = 10*z + c - '0';
}
}
nd0 = nd;
if (strncmp (s, _localeconv_r (ptr)->decimal_point,
strlen (_localeconv_r (ptr)->decimal_point)) == 0) {
strlen (_localeconv_r (ptr)->decimal_point)) == 0)
{
decpt = 1;
c = *(s += strlen (_localeconv_r (ptr)->decimal_point));
if (!nd) {
327,24 → 358,16
have_dig:
nz++;
if (c -= '0') {
for(i = 1; i < nz; i++) {
if (nd <= DBL_DIG + 1) {
if (nd + i < 10)
nf += nz;
for(i = 1; i < nz; i++)
if (nd++ < 9)
y *= 10;
else
else if (nd <= DBL_DIG + 1)
z *= 10;
}
}
if (nd <= DBL_DIG + 1) {
if (nd + i < 10)
if (nd++ < 9)
y = 10*y + c;
else
else if (nd <= DBL_DIG + 1)
z = 10*z + c;
}
if (nd <= DBL_DIG + 1) {
nf += nz;
nd += nz;
}
nz = 0;
}
}
392,7 → 415,7
#ifdef INFNAN_CHECK
/* Check for Nan and Infinity */
__ULong bits[2];
static FPI fpinan = /* only 52 explicit bits */
static _CONST FPI fpinan = /* only 52 explicit bits */
{ 52, 1-1023-53+1, 2046-1023-53+1, 1, SI };
if (!decpt)
switch(c) {
693,12 → 716,20
/* Put digits into bd: true value = bd * 10^e */
 
bd0 = s2b(ptr, s0, nd0, nd, y);
if (bd0 == NULL)
goto ovfl;
 
for(;;) {
bd = Balloc(ptr,bd0->_k);
if (bd == NULL)
goto ovfl;
Bcopy(bd, bd0);
bb = d2b(ptr,dval(rv), &bbe, &bbbits); /* rv = bb * 2^bbe */
if (bb == NULL)
goto ovfl;
bs = i2b(ptr,1);
if (bs == NULL)
goto ovfl;
 
if (e >= 0) {
bb2 = bb5 = 0;
718,12 → 749,19
bs2++;
#endif
#ifdef Avoid_Underflow
Lsb = LSB;
Lsb1 = 0;
j = bbe - scale;
i = j + bbbits - 1; /* logb(rv) */
if (i < Emin) /* denormal */
j += P - Emin;
j = P + 1 - bbbits;
if (i < Emin) { /* denormal */
i = Emin - i;
j -= i;
if (i < 32)
Lsb <<= i;
else
j = P + 1 - bbbits;
Lsb1 = Lsb << (i-32);
}
#else /*Avoid_Underflow*/
#ifdef Sudden_Underflow
#ifdef IBM
755,19 → 793,37
}
if (bb5 > 0) {
bs = pow5mult(ptr, bs, bb5);
if (bs == NULL)
goto ovfl;
bb1 = mult(ptr, bs, bb);
if (bb1 == NULL)
goto ovfl;
Bfree(ptr, bb);
bb = bb1;
}
if (bb2 > 0)
if (bb2 > 0) {
bb = lshift(ptr, bb, bb2);
if (bd5 > 0)
if (bb == NULL)
goto ovfl;
}
if (bd5 > 0) {
bd = pow5mult(ptr, bd, bd5);
if (bd2 > 0)
if (bd == NULL)
goto ovfl;
}
if (bd2 > 0) {
bd = lshift(ptr, bd, bd2);
if (bs2 > 0)
if (bd == NULL)
goto ovfl;
}
if (bs2 > 0) {
bs = lshift(ptr, bs, bs2);
if (bs == NULL)
goto ovfl;
}
delta = diff(ptr, bb, bd);
if (delta == NULL)
goto ovfl;
dsign = delta->_sign;
delta->_sign = 0;
i = cmp(delta, bs);
854,7 → 910,9
#endif /*Sudden_Underflow*/
#endif /*Avoid_Underflow*/
adj *= ulp(dval(rv));
if (dsign)
if (dsign) {
if (dword0(rv) == Big0 && dword1(rv) == Big1)
goto ovfl;
dval(rv) += adj;
else
dval(rv) -= adj;
904,6 → 962,8
#endif
0xffffffff)) {
/*boundary case -- increment exponent*/
if (dword0(rv) == Big0 && dword1(rv) == Big1)
goto ovfl;
dword0(rv) = (dword0(rv) & Exp_mask)
+ Exp_msk1
#ifdef IBM
962,14 → 1022,31
#endif
}
#ifndef ROUND_BIASED
#ifdef Avoid_Underflow
if (Lsb1) {
if (!(dword0(rv) & Lsb1))
break;
}
else if (!(dword1(rv) & Lsb))
break;
#else
if (!(dword1(rv) & LSB))
break;
#endif
#endif
if (dsign)
#ifdef Avoid_Underflow
dval(rv) += sulp(rv, scale);
#else
dval(rv) += ulp(dval(rv));
#endif
#ifndef ROUND_BIASED
else {
#ifdef Avoid_Underflow
dval(rv) -= sulp(rv, scale);
#else
dval(rv) -= ulp(dval(rv));
#endif
#ifndef Sudden_Underflow
if (!dval(rv))
goto undfl;
1046,7 → 1123,7
#ifdef Avoid_Underflow
if (scale && y <= 2*P*Exp_msk1) {
if (aadj <= 0x7fffffff) {
if ((z = aadj) <= 0)
if ((z = aadj) == 0)
z = 1;
aadj = z;
dval(aadj1) = dsign ? aadj : -aadj;
1178,7 → 1255,7
 
double
_DEFUN (strtod, (s00, se),
_CONST char *s00 _AND char **se)
_CONST char *__restrict s00 _AND char **__restrict se)
{
return _strtod_r (_REENT, s00, se);
}
1185,8 → 1262,8
 
float
_DEFUN (strtof, (s00, se),
_CONST char *s00 _AND
char **se)
_CONST char *__restrict s00 _AND
char **__restrict se)
{
double retval = _strtod_r (_REENT, s00, se);
if (isnan (retval))
/contrib/sdk/sources/newlib/libc/stdlib/strtol.c
9,10 → 9,10
 
ANSI_SYNOPSIS
#include <stdlib.h>
long strtol(const char *<[s]>, char **<[ptr]>,int <[base]>);
long strtol(const char *restrict <[s]>, char **restrict <[ptr]>,int <[base]>);
 
long _strtol_r(void *<[reent]>,
const char *<[s]>, char **<[ptr]>,int <[base]>);
const char *restrict <[s]>, char **restrict <[ptr]>,int <[base]>);
 
TRAD_SYNOPSIS
#include <stdlib.h>
133,8 → 133,8
long
_DEFUN (_strtol_r, (rptr, nptr, endptr, base),
struct _reent *rptr _AND
_CONST char *nptr _AND
char **endptr _AND
_CONST char *__restrict nptr _AND
char **__restrict endptr _AND
int base)
{
register const unsigned char *s = (const unsigned char *)nptr;
216,8 → 216,8
 
long
_DEFUN (strtol, (s, ptr, base),
_CONST char *s _AND
char **ptr _AND
_CONST char *__restrict s _AND
char **__restrict ptr _AND
int base)
{
return _strtol_r (_REENT, s, ptr, base);
/contrib/sdk/sources/newlib/libc/stdlib/strtold.c
34,7 → 34,7
/* On platforms where long double is as wide as double. */
#ifdef _LDBL_EQ_DBL
long double
strtold (const char *s00, char **se)
strtold (const char *__restrict s00, char **__restrict se)
{
return strtod(s00, se);
}
/contrib/sdk/sources/newlib/libc/stdlib/strtoll.c
9,10 → 9,10
 
ANSI_SYNOPSIS
#include <stdlib.h>
long long strtoll(const char *<[s]>, char **<[ptr]>,int <[base]>);
long long strtoll(const char *restrict <[s]>, char **restrict <[ptr]>,int <[base]>);
 
long long _strtoll_r(void *<[reent]>,
const char *<[s]>, char **<[ptr]>,int <[base]>);
const char *restrict <[s]>, char **restrict <[ptr]>,int <[base]>);
 
TRAD_SYNOPSIS
#include <stdlib.h>
128,8 → 128,8
 
long long
_DEFUN (strtoll, (s, ptr, base),
_CONST char *s _AND
char **ptr _AND
_CONST char *__restrict s _AND
char **__restrict ptr _AND
int base)
{
return _strtoll_r (_REENT, s, ptr, base);
/contrib/sdk/sources/newlib/libc/stdlib/strtoll_r.c
58,8 → 58,8
long long
_DEFUN (_strtoll_r, (rptr, nptr, endptr, base),
struct _reent *rptr _AND
_CONST char *nptr _AND
char **endptr _AND
_CONST char *__restrict nptr _AND
char **__restrict endptr _AND
int base)
{
register const unsigned char *s = (const unsigned char *)nptr;
/contrib/sdk/sources/newlib/libc/stdlib/strtoul.c
9,11 → 9,11
 
ANSI_SYNOPSIS
#include <stdlib.h>
unsigned long strtoul(const char *<[s]>, char **<[ptr]>,
unsigned long strtoul(const char *restrict <[s]>, char **restrict <[ptr]>,
int <[base]>);
 
unsigned long _strtoul_r(void *<[reent]>, const char *<[s]>,
char **<[ptr]>, int <[base]>);
unsigned long _strtoul_r(void *<[reent]>, const char *restrict <[s]>,
char **restrict <[ptr]>, int <[base]>);
 
TRAD_SYNOPSIS
#include <stdlib.h>
134,8 → 134,8
unsigned long
_DEFUN (_strtoul_r, (rptr, nptr, endptr, base),
struct _reent *rptr _AND
_CONST char *nptr _AND
char **endptr _AND
_CONST char *__restrict nptr _AND
char **__restrict endptr _AND
int base)
{
register const unsigned char *s = (const unsigned char *)nptr;
196,8 → 196,8
 
unsigned long
_DEFUN (strtoul, (s, ptr, base),
_CONST char *s _AND
char **ptr _AND
_CONST char *__restrict s _AND
char **__restrict ptr _AND
int base)
{
return _strtoul_r (_REENT, s, ptr, base);
/contrib/sdk/sources/newlib/libc/stdlib/strtoull.c
9,11 → 9,11
 
ANSI_SYNOPSIS
#include <stdlib.h>
unsigned long long strtoull(const char *<[s]>, char **<[ptr]>,
unsigned long long strtoull(const char *restrict <[s]>, char **restrict <[ptr]>,
int <[base]>);
 
unsigned long long _strtoull_r(void *<[reent]>, const char *<[s]>,
char **<[ptr]>, int <[base]>);
unsigned long long _strtoull_r(void *<[reent]>, const char *restrict <[s]>,
char **restrict <[ptr]>, int <[base]>);
 
TRAD_SYNOPSIS
#include <stdlib.h>
129,8 → 129,8
 
unsigned long long
_DEFUN (strtoull, (s, ptr, base),
_CONST char *s _AND
char **ptr _AND
_CONST char *__restrict s _AND
char **__restrict ptr _AND
int base)
{
return _strtoull_r (_REENT, s, ptr, base);
/contrib/sdk/sources/newlib/libc/stdlib/strtoull_r.c
59,8 → 59,8
unsigned long long
_DEFUN (_strtoull_r, (rptr, nptr, endptr, base),
struct _reent *rptr _AND
_CONST char *nptr _AND
char **endptr _AND
_CONST char *__restrict nptr _AND
char **__restrict endptr _AND
int base)
{
register const unsigned char *s = (const unsigned char *)nptr;
/contrib/sdk/sources/newlib/libc/stdlib/system.c
61,6 → 61,9
#include <_syslist.h>
#include <reent.h>
 
#if defined (unix) || defined (__CYGWIN__)
static int _EXFUN(do_system, (struct _reent *ptr _AND _CONST char *s));
#endif
 
int
_DEFUN(_system_r, (ptr, s),
67,10 → 70,33
struct _reent *ptr _AND
_CONST char *s)
{
#if defined(HAVE_SYSTEM)
return _system (s);
ptr = ptr;
#elif defined(NO_EXEC)
if (s == NULL)
return 0;
errno = ENOSYS;
return -1;
#else
 
/* ??? How to handle (s == NULL) here is not exactly clear.
If _fork_r fails, that's not really a justification for returning 0.
For now we always return 0 and leave it to each target to explicitly
handle otherwise (this can always be relaxed in the future). */
 
#if defined (unix) || defined (__CYGWIN__)
if (s == NULL)
return 1;
return do_system (ptr, s);
#else
if (s == NULL)
return 0;
errno = ENOSYS;
return -1;
#endif
 
#endif
}
 
#ifndef _REENT_ONLY
83,3 → 109,83
}
 
#endif
#if defined (unix) && !defined (__CYGWIN__) && !defined(__rtems__)
extern char **environ;
 
/* Only deal with a pointer to environ, to work around subtle bugs with shared
libraries and/or small data systems where the user declares his own
'environ'. */
static char ***p_environ = &environ;
 
static int
_DEFUN(do_system, (ptr, s),
struct _reent *ptr _AND
_CONST char *s)
{
char *argv[4];
int pid, status;
 
argv[0] = "sh";
argv[1] = "-c";
argv[2] = (char *) s;
argv[3] = NULL;
 
if ((pid = _fork_r (ptr)) == 0)
{
_execve ("/bin/sh", argv, *p_environ);
exit (100);
}
else if (pid == -1)
return -1;
else
{
int rc = _wait_r (ptr, &status);
if (rc == -1)
return -1;
status = (status >> 8) & 0xff;
return status;
}
}
#endif
 
#if defined (__CYGWIN__)
static int
_DEFUN(do_system, (ptr, s),
struct _reent *ptr _AND
_CONST char *s)
{
char *argv[4];
int pid, status;
 
argv[0] = "sh";
argv[1] = "-c";
argv[2] = (char *) s;
argv[3] = NULL;
 
if ((pid = vfork ()) == 0)
{
/* ??? It's not clear what's the right path to take (pun intended :-).
There won't be an "sh" in any fixed location so we need each user
to be able to say where to find "sh". That suggests using an
environment variable, but after a few more such situations we may
have too many of them. */
char *sh = getenv ("SH_PATH");
if (sh == NULL)
sh = "/bin/sh";
_execve (sh, argv, environ);
exit (100);
}
else if (pid == -1)
return -1;
else
{
extern int _wait (int *);
int rc = _wait (&status);
if (rc == -1)
return -1;
status = (status >> 8) & 0xff;
return status;
}
}
#endif
/contrib/sdk/sources/newlib/libc/stdlib/wcrtomb.c
42,33 → 42,34
#ifndef _REENT_ONLY
size_t
_DEFUN (wcrtomb, (s, wc, ps),
char *s _AND
char *__restrict s _AND
wchar_t wc _AND
mbstate_t *ps)
mbstate_t *__restrict ps)
{
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
return _wcrtomb_r (_REENT, s, wc, ps);
#else
int retval = 0;
struct _reent *reent = _REENT;
char buf[10];
 
#ifdef _MB_CAPABLE
if (ps == NULL)
{
_REENT_CHECK_MISC(_REENT);
ps = &(_REENT_WCRTOMB_STATE(_REENT));
_REENT_CHECK_MISC(reent);
ps = &(_REENT_WCRTOMB_STATE(reent));
}
#endif
 
if (s == NULL)
retval = __wctomb (_REENT, buf, L'\0', __locale_charset (), ps);
retval = __wctomb (reent, buf, L'\0', __locale_charset (), ps);
else
retval = __wctomb (_REENT, s, wc, __locale_charset (), ps);
retval = __wctomb (reent, s, wc, __locale_charset (), ps);
 
if (retval == -1)
{
ps->__count = 0;
_REENT->_errno = EILSEQ;
reent->_errno = EILSEQ;
return (size_t)(-1);
}
else
/contrib/sdk/sources/newlib/libc/stdlib/wctomb_r.c
81,7 → 81,7
to return extra 3 bytes. */
wchar_t tmp;
tmp = (state->__value.__wchb[0] << 16 | state->__value.__wchb[1] << 8)
- 0x10000 >> 10 | 0xd80d;
- (0x10000 >> 10 | 0xd80d);
*s++ = 0xe0 | ((tmp & 0xf000) >> 12);
*s++ = 0x80 | ((tmp & 0xfc0) >> 6);
*s++ = 0x80 | (tmp & 0x3f);
/contrib/sdk/sources/newlib/libc/string/local.h
7,3 → 7,18
/* Defined in locale/locale.c. Returns a value != 0 if the current
language is assumed to use CJK fonts. */
int __locale_cjk_lang ();
 
/*
Taken from glibc:
Add the compiler optimization to inhibit loop transformation to library
calls. This is used to avoid recursive calls in memset and memmove
default implementations.
*/
#ifdef _HAVE_CC_INHIBIT_LOOP_TO_LIBCALL
# define __inhibit_loop_to_libcall \
__attribute__ ((__optimize__ ("-fno-tree-loop-distribute-patterns")))
#else
# define __inhibit_loop_to_libcall
#endif
 
 
/contrib/sdk/sources/newlib/libc/string/memcpy.c
4,7 → 4,8
 
ANSI_SYNOPSIS
#include <string.h>
void* memcpy(void *<[out]>, const void *<[in]>, size_t <[n]>);
void* memcpy(void *restrict <[out]>, const void *restrict <[in]>,
size_t <[n]>);
 
TRAD_SYNOPSIS
#include <string.h>
51,8 → 52,8
 
_PTR
_DEFUN (memcpy, (dst0, src0, len0),
_PTR dst0 _AND
_CONST _PTR src0 _AND
_PTR __restrict dst0 _AND
_CONST _PTR __restrict src0 _AND
size_t len0)
{
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
/contrib/sdk/sources/newlib/libc/string/memmove.c
39,6 → 39,7
#include <_ansi.h>
#include <stddef.h>
#include <limits.h>
#include "local.h"
 
/* Nonzero if either X or Y is not aligned on a "long" boundary. */
#define UNALIGNED(X, Y) \
55,6 → 56,7
 
/*SUPPRESS 20*/
_PTR
__inhibit_loop_to_libcall
_DEFUN (memmove, (dst_void, src_void, length),
_PTR dst_void _AND
_CONST _PTR src_void _AND
/contrib/sdk/sources/newlib/libc/string/memset.c
34,6 → 34,7
*/
 
#include <string.h>
#include "local.h"
 
#define LBLOCKSIZE (sizeof(long))
#define UNALIGNED(X) ((long)X & (LBLOCKSIZE - 1))
40,6 → 41,7
#define TOO_SMALL(LEN) ((LEN) < LBLOCKSIZE)
 
_PTR
__inhibit_loop_to_libcall
_DEFUN (memset, (m, c, n),
_PTR m _AND
int c _AND
/contrib/sdk/sources/newlib/libc/string/stpcpy.c
7,7 → 7,7
 
ANSI_SYNOPSIS
#include <string.h>
char *stpcpy(char *<[dst]>, const char *<[src]>);
char *stpcpy(char *restrict <[dst]>, const char *restrict <[src]>);
 
TRAD_SYNOPSIS
#include <string.h>
60,8 → 60,8
 
char*
_DEFUN (stpcpy, (dst, src),
char *dst _AND
_CONST char *src)
char *__restrict dst _AND
_CONST char *__restrict src)
{
#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__)
long *aligned_dst;
/contrib/sdk/sources/newlib/libc/string/stpncpy.c
7,7 → 7,8
 
ANSI_SYNOPSIS
#include <string.h>
char *stpncpy(char *<[dst]>, const char *<[src]>, size_t <[length]>);
char *stpncpy(char *restrict <[dst]>, const char *restrict <[src]>,
size_t <[length]>);
 
TRAD_SYNOPSIS
#include <string.h>
68,8 → 69,8
 
char *
_DEFUN (stpncpy, (dst, src),
char *dst _AND
_CONST char *src _AND
char *__restrict dst _AND
_CONST char *__restrict src _AND
size_t count)
{
char *ret = NULL;
/contrib/sdk/sources/newlib/libc/string/strcasestr.c
84,6 → 84,10
(!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l)) \
&& ((h_l) = (j) + (n_l)))
# define CANON_ELEMENT(c) tolower (c)
#if __GNUC_PREREQ (4, 2)
/* strncasecmp uses signed char, CMP_FUNC is expected to use unsigned char. */
#pragma GCC diagnostic ignored "-Wpointer-sign"
#endif
# define CMP_FUNC strncasecmp
# include "str-two-way.h"
#endif
/contrib/sdk/sources/newlib/libc/string/strcat.c
7,7 → 7,7
 
ANSI_SYNOPSIS
#include <string.h>
char *strcat(char *<[dst]>, const char *<[src]>);
char *strcat(char *restrict <[dst]>, const char *restrict <[src]>);
 
TRAD_SYNOPSIS
#include <string.h>
61,8 → 61,8
 
char *
_DEFUN (strcat, (s1, s2),
char *s1 _AND
_CONST char *s2)
char *__restrict s1 _AND
_CONST char *__restrict s2)
{
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
char *s = s1;
/contrib/sdk/sources/newlib/libc/string/strncat.c
7,7 → 7,8
 
ANSI_SYNOPSIS
#include <string.h>
char *strncat(char *<[dst]>, const char *<[src]>, size_t <[length]>);
char *strncat(char *restrict <[dst]>, const char *restrict <[src]>,
size_t <[length]>);
 
TRAD_SYNOPSIS
#include <string.h>
65,8 → 66,8
 
char *
_DEFUN (strncat, (s1, s2, n),
char *s1 _AND
_CONST char *s2 _AND
char *__restrict s1 _AND
_CONST char *__restrict s2 _AND
size_t n)
{
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
/contrib/sdk/sources/newlib/libc/string/strncpy.c
7,7 → 7,8
 
ANSI_SYNOPSIS
#include <string.h>
char *strncpy(char *<[dst]>, const char *<[src]>, size_t <[length]>);
char *strncpy(char *restrict <[dst]>, const char *restrict <[src]>,
size_t <[length]>);
 
TRAD_SYNOPSIS
#include <string.h>
66,8 → 67,8
 
char *
_DEFUN (strncpy, (dst0, src0),
char *dst0 _AND
_CONST char *src0 _AND
char *__restrict dst0 _AND
_CONST char *__restrict src0 _AND
size_t count)
{
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
/contrib/sdk/sources/newlib/libc/string/strtok.c
13,8 → 13,10
 
ANSI_SYNOPSIS
#include <string.h>
char *strtok(char *<[source]>, const char *<[delimiters]>)
char *strtok_r(char *<[source]>, const char *<[delimiters]>,
char *strtok(char *restrict <[source]>,
const char *restrict <[delimiters]>)
char *strtok_r(char *restrict <[source]>,
const char *restrict <[delimiters]>,
char **<[lasts]>)
char *strsep(char **<[source_ptr]>, const char *<[delimiters]>)
 
92,10 → 94,12
 
char *
_DEFUN (strtok, (s, delim),
register char *s _AND
register const char *delim)
register char *__restrict s _AND
register const char *__restrict delim)
{
_REENT_CHECK_MISC(_REENT);
return __strtok_r (s, delim, &(_REENT_STRTOK_LAST(_REENT)), 1);
struct _reent *reent = _REENT;
 
_REENT_CHECK_MISC(reent);
return __strtok_r (s, delim, &(_REENT_STRTOK_LAST(reent)), 1);
}
#endif
/contrib/sdk/sources/newlib/libc/string/strtok_r.c
91,9 → 91,9
 
char *
_DEFUN (strtok_r, (s, delim, lasts),
register char *s _AND
register const char *delim _AND
char **lasts)
register char *__restrict s _AND
register const char *__restrict delim _AND
char **__restrict lasts)
{
return __strtok_r (s, delim, lasts, 1);
}
/contrib/sdk/sources/newlib/libc/sys/fload.c
File deleted
/contrib/sdk/sources/newlib/libc/sys/close.c
0,0 → 1,43
/* close.c -- close a file descriptor.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include <errno.h>
#include <stdlib.h>
#include <sys/unistd.h>
#include <sys/kos_io.h>
#include "glue.h"
#include "io.h"
 
int
_DEFUN (close ,(fd),
int fd)
{
__io_handle *ioh;
 
if( (fd < 0) || (fd >=64) )
{
errno = EBADF;
return (-1);
};
 
ioh = &__io_tab[fd];
 
if( fd > STDERR_FILENO )
{
free(ioh->name);
__io_free(fd);
}
 
return (0);
}
/contrib/sdk/sources/newlib/libc/sys/errno.c
0,0 → 1,2
 
int errno;
/contrib/sdk/sources/newlib/libc/sys/fstat.c
0,0 → 1,59
/* fstat.c -- get status of a file.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include <errno.h>
#include <string.h>
#include <sys/unistd.h>
#include <sys/kos_io.h>
#include <sys/stat.h>
#include "glue.h"
#include "io.h"
 
int
_DEFUN (fstat, (fd, buf),
int fd _AND
struct stat *buf)
{
fileinfo_t info;
__io_handle *ioh;
 
if( (fd < 0) || (fd >=64) )
{
errno = EBADF;
return (-1);
};
 
memset (buf, 0, sizeof (* buf));
 
if (fd <= STDERR_FILENO)
{
buf->st_mode = S_IFCHR;
buf->st_blksize = 0;
}
else
{
 
ioh = &__io_tab[fd];
get_fileinfo(ioh->name, &info);
 
buf->st_mode = S_IFREG;
buf->st_blksize = 4096;
buf->st_size = info.size;
};
 
return (0);
}
 
 
 
/contrib/sdk/sources/newlib/libc/sys/gettod.c
0,0 → 1,45
#include <_ansi.h>
#include <reent.h>
#include <errno.h>
#include <time.h>
#include <sys/types.h>
#include <sys/time.h>
 
#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10)
 
int
_DEFUN (gettimeofday, (ptimeval, ptimezone),
struct timeval *ptimeval _AND
void *ptimezone)
{
unsigned int xtmp;
struct tm tmblk;
 
if( ptimeval )
{
ptimeval->tv_usec = 0;
 
__asm__ __volatile__("int $0x40":"=a"(xtmp):"0"(3));
tmblk.tm_sec = (xtmp>>16)&0xff;
tmblk.tm_min = (xtmp>>8)&0xff;
tmblk.tm_hour = xtmp&0xff;
BCD_TO_BIN(tmblk.tm_sec);
BCD_TO_BIN(tmblk.tm_min);
BCD_TO_BIN(tmblk.tm_hour);
__asm__ __volatile__("int $0x40":"=a"(xtmp):"0"(29));
tmblk.tm_mday = (xtmp>>16)&0xff;
tmblk.tm_mon = ((xtmp>>8)&0xff)-1;
tmblk.tm_year = ((xtmp&0xff)+2000)-1900;
tmblk.tm_wday = tmblk.tm_yday = 0;
tmblk.tm_isdst = -1;
ptimeval->tv_sec = mktime(&tmblk);
return 0;
}
else
{
errno = EINVAL;
return -1;
};
 
}
 
/contrib/sdk/sources/newlib/libc/sys/glue.h
0,0 → 1,31
/* glue.h -- common definitions for "glue" fucntions.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include <_ansi.h>
 
#ifndef NULL
# define NULL 0
#endif
 
#ifdef __NO_UNDERSCORE__
# define _end end
# define _exit exit
#endif
 
extern char _end[]; /* _end is set in the linker command file */
 
/* only one prcess support, as this is OS dependant */
#define __MYPID 1
 
 
/contrib/sdk/sources/newlib/libc/sys/io.c
0,0 → 1,60
 
#include <stddef.h>
#include "io.h"
 
extern __io_handle __io_tab[64];
 
static int fake_io(const char *path, const void *buff,
size_t offset, size_t count, size_t *done)
{
*done = 0;
return 10;
};
 
static int fake_io_read(const char *path, void *buff,
size_t offset, size_t count, size_t *done) __attribute__ ((alias("fake_io")));
 
static int fake_io_write(const char *path, const void *buff,
size_t offset, size_t count, size_t *done) __attribute__ ((alias("fake_io")));
 
static inline void debug_out(const char val)
{
__asm__ __volatile__(
"int $0x40 \n\t"
::"a"(63), "b"(1),"c"(val));
}
 
static int debugwrite(const char *path, const void *buff,
size_t offset, size_t count, size_t *writes)
{
int ret = count;
const char *p = buff;
 
while (count--)
{
debug_out(*p++);
};
*writes = ret;
return ret;
};
 
void init_stdio()
{
__io_handle *ioh;
 
ioh = &__io_tab[__io_alloc()];
ioh->mode = _READ|_ISTTY;
ioh->read = &fake_io_read;
ioh->write = &fake_io_write;
 
ioh = &__io_tab[__io_alloc()];
ioh->mode = _WRITE|_ISTTY;
ioh->read = &fake_io_read;
ioh->write = &debugwrite;
 
ioh = &__io_tab[__io_alloc()];
ioh->mode = _WRITE|_ISTTY;
ioh->read = &fake_io_read;
ioh->write = &debugwrite;
 
}
/contrib/sdk/sources/newlib/libc/sys/io.h
0,0 → 1,32
 
#define _READ 0x0001 /* file opened for reading */
#define _WRITE 0x0002 /* file opened for writing */
#define _UNGET 0x0004 /* ungetc has been done */
#define _BIGBUF 0x0008 /* big buffer allocated */
#define _EOF 0x0010 /* EOF has occurred */
#define _SFERR 0x0020 /* error has occurred on this file */
#define _APPEND 0x0080 /* file opened for append */
#define _BINARY 0x0040 /* file is binary, skip CRLF processing */
#define _TMPFIL 0x0800 /* this is a temporary file */
#define _DIRTY 0x1000 /* buffer has been modified */
#define _ISTTY 0x2000 /* is console device */
#define _DYNAMIC 0x4000 /* FILE is dynamically allocated */
#define _FILEEXT 0x8000 /* lseek with positive offset has been done */
#define _COMMIT 0x0001 /* extended flag: commit OS buffers on flush */
 
typedef struct
{
char *name;
unsigned int offset;
int mode;
int lock;
int (*read)(const char *, void *, size_t, size_t, size_t *);
int (*write)(const char*, const void *, size_t, size_t, size_t*);
}__io_handle;
 
extern __io_handle __io_tab[64];
 
int __io_alloc();
void __io_free(int handle);
 
 
/contrib/sdk/sources/newlib/libc/sys/io_alloc.S
0,0 → 1,50
 
.section .text
 
.global ___io_alloc
.global ___io_free
.global ___io_tab
 
.align 8
___io_alloc:
pushl $__io_mutex
call ___mutex_lock
popl %eax
 
xorl %ecx, %ecx
bsfl __io_map, %eax
jnz .done
 
movl $32, %ecx
bsfl __io_map+4, %eax
jnz .done
 
xorl %eax, %eax
mov %eax, __io_mutex
notl %eax
ret
 
.done:
addl %ecx, %eax
btrl %eax, __io_map
movl $0, __io_mutex
ret
 
.align 8
___io_free:
movl 4(%esp), %eax
bts %eax, __io_map
ret
 
.section .data
 
__io_map: .long(0xFFFFFFFF)
.long(0xFFFFFFFF)
 
.section .bss
 
.align 16
 
___io_tab: .space 64*24
__io_mutex: .space 4
 
/contrib/sdk/sources/newlib/libc/sys/ioread.c
0,0 → 1,31
 
#include <sys/types.h>
#include <sys/kos_io.h>
 
int read_file(const char *path, void *buff,
size_t offset, size_t count, size_t *reads)
{
int retval;
int d0;
__asm__ __volatile__(
"pushl $0 \n\t"
"pushl $0 \n\t"
"movl %%eax, 1(%%esp) \n\t"
"pushl %%ebx \n\t"
"pushl %%edx \n\t"
"pushl $0 \n\t"
"pushl %%ecx \n\t"
"pushl $0 \n\t"
"movl %%esp, %%ebx \n\t"
"mov $70, %%eax \n\t"
"int $0x40 \n\t"
"testl %%esi, %%esi \n\t"
"jz 1f \n\t"
"movl %%ebx, (%%esi) \n\t"
"1:"
"addl $28, %%esp \n\t"
:"=a" (retval)
:"a"(path),"b"(buff),"c"(offset),"d"(count),"S"(reads));
return retval;
};
 
/contrib/sdk/sources/newlib/libc/sys/iowrite.c
0,0 → 1,28
#include <sys/types.h>
#include <sys/kos_io.h>
 
int write_file(const char *path,const void *buff,
size_t offset, size_t count, size_t *writes)
{
int retval;
__asm__ __volatile__(
"pushl $0 \n\t"
"pushl $0 \n\t"
"movl %%eax, 1(%%esp) \n\t"
"pushl %%ebx \n\t"
"pushl %%edx \n\t"
"pushl $0 \n\t"
"pushl %%ecx \n\t"
"pushl $3 \n\t"
"movl %%esp, %%ebx \n\t"
"mov $70, %%eax \n\t"
"int $0x40 \n\t"
"testl %%esi, %%esi \n\t"
"jz 1f \n\t"
"movl %%ebx, (%%esi) \n\t"
"1:"
"addl $28, %%esp \n\t"
:"=a" (retval)
:"a"(path),"b"(buff),"c"(offset),"d"(count),"S"(writes));
return retval;
};
/contrib/sdk/sources/newlib/libc/sys/isatty.c
0,0 → 1,27
/* isatty.c -- chek the terminal device.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include "glue.h"
 
/*
* isatty -- returns 1 if connected to a terminal device,
* returns 0 if not. Since we're hooked up to a
* serial port, we'll say yes _AND return a 1.
*/
int
_DEFUN (isatty, (fd),
int fd)
{
return (1);
}
/contrib/sdk/sources/newlib/libc/sys/lseek.c
0,0 → 1,51
 
#include <errno.h>
#include <stdlib.h>
#include <sys/unistd.h>
#include <sys/kos_io.h>
#include "glue.h"
#include "io.h"
 
 
_off_t
_DEFUN (lseek, (fd, pos, whence),
int fd _AND
_off_t pos _AND
int whence)
 
{
fileinfo_t info;
__io_handle *ioh;
_off_t ret;
 
if( (fd < 0) || (fd >=64) )
{
errno = EBADF;
return (-1);
};
 
ioh = &__io_tab[fd];
 
switch(whence)
{
case SEEK_SET:
ret = pos;
break;
case SEEK_CUR:
ret = ioh->offset + pos;
break;
case SEEK_END:
{
get_fileinfo(ioh->name, &info);
ret = pos + info.size;
break;
}
default:
errno = EINVAL;
return (-1);
};
 
ioh->offset = ret;
 
return( ret );
};
/contrib/sdk/sources/newlib/libc/sys/open.c
0,0 → 1,104
/* open.c -- open a file.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <sys/kos_io.h>
#include "glue.h"
#include "io.h"
 
#undef erro
extern int errno;
 
int open (const char * filename, int flags, ...)
{
__io_handle *ioh;
fileinfo_t info;
int iomode, rwmode, offset;
int hid;
int err;
 
hid = __io_alloc();
if(hid < 0)
{
errno = EMFILE;
return (-1);
};
 
// path = getfullpath(name);
 
err = get_fileinfo(filename, &info);
 
if( flags & O_EXCL &&
flags & O_CREAT )
{
if( !err )
{
errno = EEXIST;
return (-1);
};
}
 
if( err )
{
if(flags & O_CREAT)
err=create_file(filename);
if( err )
{
errno = EACCES;
return -1;
};
};
 
if( flags & O_TRUNC )
set_file_size(filename, 0);
 
ioh = &__io_tab[hid];
 
rwmode = flags & ( O_RDONLY | O_WRONLY | O_RDWR );
 
iomode = 0;
offset = 0;
 
if( rwmode == O_RDWR )
iomode |= _READ | _WRITE;
else if( rwmode == O_RDONLY)
iomode |= _READ;
else if( rwmode == O_WRONLY)
iomode |= _WRITE;
 
if( flags & O_APPEND )
{
iomode |= _APPEND;
offset = info.size;
};
 
if( flags & (O_BINARY|O_TEXT) )
{
if( flags & O_BINARY )
iomode |= _BINARY;
} else
iomode |= _BINARY;
 
ioh->name = strdup(filename);
ioh->offset = offset;
ioh->mode = iomode;
ioh->read = read_file;
ioh->write = write_file;
 
return hid;
};
 
 
/contrib/sdk/sources/newlib/libc/sys/read.c
1,31 → 1,112
 
#include <sys/types.h>
/* read.c -- read bytes from a input device.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <alloca.h>
#include <sys/kos_io.h>
#include "glue.h"
#include "io.h"
 
int read_file(const char *path, void *buff,
size_t offset, size_t count, size_t *reads)
#undef erro
extern int errno;
 
ssize_t read(int fd, void *buf, size_t cnt)
{
int retval;
int d0;
__asm__ __volatile__(
"pushl $0 \n\t"
"pushl $0 \n\t"
"movl %%eax, 1(%%esp) \n\t"
"pushl %%ebx \n\t"
"pushl %%edx \n\t"
"pushl $0 \n\t"
"pushl %%ecx \n\t"
"pushl $0 \n\t"
"movl %%esp, %%ebx \n\t"
"mov $70, %%eax \n\t"
"int $0x40 \n\t"
"testl %%esi, %%esi \n\t"
"jz 1f \n\t"
"movl %%ebx, (%%esi) \n\t"
"1:"
"addl $28, %%esp \n\t"
:"=a" (retval)
:"a"(path),"b"(buff),"c"(offset),"d"(count),"S"(reads));
return retval;
_ssize_t ret;
 
_ssize_t read_len, total_len;
unsigned reduce_idx, finish_idx;
unsigned iomode_flags;
char *buffer = buf;
int rc;
int h;
unsigned amount_read;
int err;
 
__io_handle *ioh;
 
if( (fd < 0) || (fd >=64) )
{
errno = EBADF;
return -1;
};
 
ioh = &__io_tab[fd];
 
iomode_flags = ioh->mode;
 
if( iomode_flags == 0 )
{
errno = EBADF;
return( -1 );
}
 
if( !(iomode_flags & _READ) )
{
errno = EACCES;
return( -1 );
}
 
if( iomode_flags & _BINARY ) /* if binary mode */
{
err = read_file(ioh->name, buffer, ioh->offset, cnt, &amount_read);
ioh->offset+= amount_read;
total_len = amount_read;
 
if(err)
if ( amount_read == 0)
return (-1);
}
else
{
total_len = 0;
read_len = cnt;
do
{
err=read_file(ioh->name,buffer, ioh->offset, cnt, &amount_read);
ioh->offset+=amount_read;
 
if( amount_read == 0 )
break; /* EOF */
 
reduce_idx = 0;
finish_idx = reduce_idx;
for( ; reduce_idx < amount_read; ++reduce_idx )
{
if( buffer[ reduce_idx ] == 0x1a ) /* EOF */
{
lseek(fd, ((long)reduce_idx - (long)amount_read)+1L, SEEK_CUR );
total_len += finish_idx;
return( total_len );
}
if( buffer[ reduce_idx ] != '\r' )
{
buffer[ finish_idx++ ] = buffer[ reduce_idx ];
};
}
 
total_len += finish_idx;
buffer += finish_idx;
read_len -= finish_idx;
if( iomode_flags & _ISTTY )
{
break;
}
} while( read_len != 0 );
}
return( total_len );
}
/contrib/sdk/sources/newlib/libc/sys/unlink.c
0,0 → 1,48
/* unlink.c -- remove a file.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include <errno.h>
#include <time.h>
#include <sys/time.h>
#include <sys/times.h>
 
#include "glue.h"
 
/*
* unlink -- since we have no file system,
* we just return an error.
*/
int
_DEFUN (unlink, (path),
char * path)
{
errno = EIO;
return (-1);
}
 
int
_DEFUN(link, (old, new),
const char *old _AND
const char *new)
{
errno = EIO;
return (-1);
}
 
clock_t
times (struct tms *tp)
{
return -1;
}
 
/contrib/sdk/sources/newlib/libc/sys/write.c
1,29 → 1,217
 
#include <sys/types.h>
/* write.c -- write bytes to an output device.
*
* Copyright (c) 1995 Cygnus Support
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice is included verbatim in any distributions. No written agreement,
* license, or royalty fee is required for any of the authorized uses.
* Modifications to this software may be copyrighted by their authors
* and need not follow the licensing terms described here, provided that
* the new terms are clearly indicated on the first page of each file where
* they apply.
*/
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <alloca.h>
#include <sys/kos_io.h>
#include "glue.h"
#include "io.h"
 
int write_file(const char *path,const void *buff,
size_t offset, size_t count, size_t *writes)
#undef erro
extern int errno;
 
 
#if 0
#define PAD_SIZE 512
 
static int zero_pad(int handle ) /* 09-jan-95 */
/*******************************/
{
int retval;
__asm__ __volatile__(
"pushl $0 \n\t"
"pushl $0 \n\t"
"movl %%eax, 1(%%esp) \n\t"
"pushl %%ebx \n\t"
"pushl %%edx \n\t"
"pushl $0 \n\t"
"pushl %%ecx \n\t"
"pushl $3 \n\t"
"movl %%esp, %%ebx \n\t"
"mov $70, %%eax \n\t"
"int $0x40 \n\t"
"testl %%esi, %%esi \n\t"
"jz 1f \n\t"
"movl %%ebx, (%%esi) \n\t"
"1:"
"addl $28, %%esp \n\t"
:"=a" (retval)
:"a"(path),"b"(buff),"c"(offset),"d"(count),"S"(writes));
return retval;
int rc;
long curPos, eodPos;
long bytesToWrite;
unsigned writeAmt;
char zeroBuf[PAD_SIZE];
 
// Pad with zeros due to lseek() past EOF (POSIX)
curPos = lseek( handle, 0L, SEEK_CUR ); /* current offset */
if( curPos == -1 )
return( -1 );
eodPos = lseek( handle, 0L, SEEK_END ); /* end of data offset */
if( eodPos == -1 )
return( -1 );
 
if( curPos > eodPos ) {
bytesToWrite = curPos - eodPos; /* amount to pad by */
 
if( bytesToWrite > 0 ) { /* only write if needed */
memset( zeroBuf, 0x00, PAD_SIZE ); /* zero out a buffer */
do { /* loop until done */
if( bytesToWrite > PAD_SIZE )
writeAmt = 512;
else
writeAmt = (unsigned)bytesToWrite;
rc = _write_r(ptr, handle, zeroBuf, writeAmt );
if( rc < 0 )
return( rc );
bytesToWrite -= writeAmt; /* more bytes written */
} while( bytesToWrite != 0 );
}
} else {
curPos = _lseek_r( ptr, handle, curPos, SEEK_SET );
if( curPos == -1 ) {
return( -1 );
}
}
 
return( 0 ); /* return success code */
}
#endif
 
static int os_write(int handle, const void *buffer, unsigned len, unsigned *amt )
{
__io_handle *ioh;
int rc;
 
rc = 0;
*amt = 0;
 
ioh = &__io_tab[handle];
 
rc = ioh->write(ioh->name,(const void*)buffer,ioh->offset,len,amt);
 
ioh->offset+= *amt;
 
if( *amt != len )
{
rc = ENOSPC;
}
 
return( rc );
}
 
/*
* write -- write bytes to the serial port. Ignore fd, since
* stdout and stderr are the same. Since we have no filesystem,
* open will only return an error.
*/
ssize_t write(int fd, const void *buffer, size_t cnt)
{
_ssize_t ret;
unsigned int iomode_flags;
unsigned len_written, i, j;
int rc2;
char *buf;
 
__io_handle *ioh;
 
if( (fd < 0) || (fd >=64) )
{
errno = EBADF;
return -1;
};
 
ioh = &__io_tab[fd];
 
iomode_flags = ioh->mode;
 
if( iomode_flags == 0 )
{
errno = EBADF;
return( -1 );
}
 
if( !(iomode_flags & _WRITE) )
{
errno = EACCES ;
return( -1 );
}
 
if( (iomode_flags & _APPEND) && !(iomode_flags & _ISTTY) )
{
ioh->offset = lseek(fd, 0L, SEEK_END ); /* end of data offset */
}
 
len_written = 0;
rc2 = 0;
 
// Pad the file with zeros if necessary
if( iomode_flags & _FILEEXT )
{
// turn off file extended flag
ioh->mode = iomode_flags & (~_FILEEXT);
 
// It is not required to pad a file with zeroes on an NTFS file system;
// unfortunately it is required on FAT (and probably FAT32). (JBS)
// rc2 = zero_pad( ptr, fd );
}
 
if( rc2 == 0 )
{
if( iomode_flags & _BINARY ) { /* if binary mode */
rc2 = os_write(fd, buffer, cnt, &len_written );
/* end of binary mode part */
} else { /* text mode */
 
int buf_size = 512;
 
buf = (char*)alloca( buf_size );
 
j = 0;
for( i = 0; i < cnt; )
{
if( ((const char*)buffer)[i] == '\n' )
{
buf[j] = '\r';
++j;
if( j == buf_size )
{
rc2 = os_write(fd, buf, buf_size, &j );
if( rc2 == -1 )
break;
len_written += j;
if( rc2 == ENOSPC )
break;
len_written = i;
j = 0;
}
}
buf[j] = ((const char*)buffer)[i];
++i;
++j;
if( j == buf_size ) {
rc2 = os_write(fd, buf, buf_size, &j );
if( rc2 == -1 )
break;
len_written += j;
if( rc2 == ENOSPC )
break;
len_written = i;
j = 0;
}
}
if( j ) {
rc2 = os_write(fd, buf, j, &i );
if( rc2 == ENOSPC ) {
len_written += i;
} else {
len_written = cnt;
}
}
/* end of text mode part */
}
}
 
if( rc2 == -1 ) {
return( rc2 );
} else {
return( len_written );
}
 
return 0;
}
 
/contrib/sdk/sources/newlib/libc/time/asctime.c
57,8 → 57,10
_DEFUN (asctime, (tim_p),
_CONST struct tm *tim_p)
{
_REENT_CHECK_ASCTIME_BUF(_REENT);
return asctime_r (tim_p, _REENT_ASCTIME_BUF(_REENT));
struct _reent *reent = _REENT;
 
_REENT_CHECK_ASCTIME_BUF(reent);
return asctime_r (tim_p, _REENT_ASCTIME_BUF(reent));
}
 
#endif
/contrib/sdk/sources/newlib/libc/time/asctime_r.c
7,8 → 7,8
 
char *
_DEFUN (asctime_r, (tim_p, result),
_CONST struct tm *tim_p _AND
char *result)
_CONST struct tm *__restrict tim_p _AND
char *__restrict result)
{
static _CONST char day_name[7][3] = {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
/contrib/sdk/sources/newlib/libc/time/clock.c
53,16 → 53,7
#include <sys/times.h>
#include <reent.h>
 
 
clock_t
_DEFUN (_times_r, (ptr, ptms),
struct _reent *ptr _AND
struct tms *ptms)
{
return -1;
}
 
clock_t
clock ()
{
struct tms tim_s;
/contrib/sdk/sources/newlib/libc/time/gmtime.c
61,8 → 61,10
_DEFUN (gmtime, (tim_p),
_CONST time_t * tim_p)
{
_REENT_CHECK_TM(_REENT);
return gmtime_r (tim_p, (struct tm *)_REENT_TM(_REENT));
struct _reent *reent = _REENT;
 
_REENT_CHECK_TM(reent);
return gmtime_r (tim_p, (struct tm *)_REENT_TM(reent));
}
 
#endif
/contrib/sdk/sources/newlib/libc/time/gmtime_r.c
7,8 → 7,8
 
struct tm *
_DEFUN (gmtime_r, (tim_p, res),
_CONST time_t * tim_p _AND
struct tm *res)
_CONST time_t *__restrict tim_p _AND
struct tm *__restrict res)
{
return (_mktm_r (tim_p, res, 1));
}
/contrib/sdk/sources/newlib/libc/time/lcltime.c
53,8 → 53,10
_DEFUN (localtime, (tim_p),
_CONST time_t * tim_p)
{
_REENT_CHECK_TM(_REENT);
return localtime_r (tim_p, (struct tm *)_REENT_TM(_REENT));
struct _reent *reent = _REENT;
 
_REENT_CHECK_TM(reent);
return localtime_r (tim_p, (struct tm *)_REENT_TM(reent));
}
 
#endif
/contrib/sdk/sources/newlib/libc/time/lcltime_r.c
11,8 → 11,8
 
struct tm *
_DEFUN (localtime_r, (tim_p, res),
_CONST time_t * tim_p _AND
struct tm *res)
_CONST time_t *__restrict tim_p _AND
struct tm *__restrict res)
{
return _mktm_r (tim_p, res, 0);
}
/contrib/sdk/sources/newlib/libc/time/ldpart.h
0,0 → 1,35
/*-
* Copyright (c) 2000, 2001 Alexey Zelkin <phantom@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD: src/lib/libc/locale/ldpart.h,v 1.4 2001/12/20 18:28:52 phantom Exp $
*/
 
#ifndef _LDPART_H_
#define _LDPART_H_
 
int __part_load_locale(const char *, int*, char *, const char *,
int, int, const char **);
 
#endif /* !_LDPART_H_ */
/contrib/sdk/sources/newlib/libc/time/strftime.c
24,8 → 24,9
 
ANSI_SYNOPSIS
#include <time.h>
size_t strftime(char *<[s]>, size_t <[maxsize]>,
const char *<[format]>, const struct tm *<[timp]>);
size_t strftime(char *restrict <[s]>, size_t <[maxsize]>,
const char *restrict <[format]>,
const struct tm *restrict <[timp]>);
 
TRAD_SYNOPSIS
#include <time.h>
270,6 → 271,8
#include <limits.h>
#include <ctype.h>
#include <wctype.h>
#include "local.h"
#include "../locale/timelocal.h"
 
/* Defines to make the file dual use for either strftime() or wcsftime().
* To get wcsftime, define MAKE_WCSFTIME.
283,6 → 286,7
# define CQ(a) a /* character constant qualifier */
# define SFLG /* %s flag (null for normal char) */
# define _ctloc(x) (ctloclen = strlen (ctloc = _CurrentTimeLocale->x), ctloc)
# define snprintf sniprintf /* avoid to pull in FP functions. */
# define TOLOWER(c) tolower((int)(unsigned char)(c))
# define STRTOUL(c,p,b) strtoul((c),(p),(b))
# define STRCPY(a,b) strcpy((a),(b))
319,15 → 323,1467
# endif
#endif /* MAKE_WCSFTIME */
 
#define CHECK_LENGTH() if (len < 0 || (count += len) >= maxsize) \
return 0
 
size_t _DEFUN (strftime, (s, maxsize, format, tim_p),
CHAR *s _AND
size_t maxsize _AND
_CONST CHAR *format _AND
/* Enforce the coding assumptions that YEAR_BASE is positive. (%C, %Y, etc.) */
#if YEAR_BASE < 0
# error "YEAR_BASE < 0"
#endif
 
static _CONST int dname_len[7] =
{6, 6, 7, 9, 8, 6, 8};
 
/* Using the tm_year, tm_wday, and tm_yday components of TIM_P, return
-1, 0, or 1 as the adjustment to add to the year for the ISO week
numbering used in "%g%G%V", avoiding overflow. */
static int
_DEFUN (iso_year_adjust, (tim_p),
_CONST struct tm *tim_p)
{
/* Account for fact that tm_year==0 is year 1900. */
int leap = isleap (tim_p->tm_year + (YEAR_BASE
- (tim_p->tm_year < 0 ? 0 : 2000)));
 
/* Pack the yday, wday, and leap year into a single int since there are so
many disparate cases. */
#define PACK(yd, wd, lp) (((yd) << 4) + (wd << 1) + (lp))
switch (PACK (tim_p->tm_yday, tim_p->tm_wday, leap))
{
case PACK (0, 5, 0): /* Jan 1 is Fri, not leap. */
case PACK (0, 6, 0): /* Jan 1 is Sat, not leap. */
case PACK (0, 0, 0): /* Jan 1 is Sun, not leap. */
case PACK (0, 5, 1): /* Jan 1 is Fri, leap year. */
case PACK (0, 6, 1): /* Jan 1 is Sat, leap year. */
case PACK (0, 0, 1): /* Jan 1 is Sun, leap year. */
case PACK (1, 6, 0): /* Jan 2 is Sat, not leap. */
case PACK (1, 0, 0): /* Jan 2 is Sun, not leap. */
case PACK (1, 6, 1): /* Jan 2 is Sat, leap year. */
case PACK (1, 0, 1): /* Jan 2 is Sun, leap year. */
case PACK (2, 0, 0): /* Jan 3 is Sun, not leap. */
case PACK (2, 0, 1): /* Jan 3 is Sun, leap year. */
return -1; /* Belongs to last week of previous year. */
case PACK (362, 1, 0): /* Dec 29 is Mon, not leap. */
case PACK (363, 1, 1): /* Dec 29 is Mon, leap year. */
case PACK (363, 1, 0): /* Dec 30 is Mon, not leap. */
case PACK (363, 2, 0): /* Dec 30 is Tue, not leap. */
case PACK (364, 1, 1): /* Dec 30 is Mon, leap year. */
case PACK (364, 2, 1): /* Dec 30 is Tue, leap year. */
case PACK (364, 1, 0): /* Dec 31 is Mon, not leap. */
case PACK (364, 2, 0): /* Dec 31 is Tue, not leap. */
case PACK (364, 3, 0): /* Dec 31 is Wed, not leap. */
case PACK (365, 1, 1): /* Dec 31 is Mon, leap year. */
case PACK (365, 2, 1): /* Dec 31 is Tue, leap year. */
case PACK (365, 3, 1): /* Dec 31 is Wed, leap year. */
return 1; /* Belongs to first week of next year. */
}
return 0; /* Belongs to specified year. */
#undef PACK
}
 
#ifdef _WANT_C99_TIME_FORMATS
typedef struct {
int year;
CHAR *era_C;
CHAR *era_Y;
} era_info_t;
 
static era_info_t *
#if defined (MAKE_WCSFTIME) && defined (__HAVE_LOCALE_INFO_EXTENDED__)
get_era_info (const struct tm *tim_p, const wchar_t *era)
#else
get_era_info (const struct tm *tim_p, const char *era)
#endif
{
#if defined (MAKE_WCSFTIME) && defined (__HAVE_LOCALE_INFO_EXTENDED__)
wchar_t *c;
const wchar_t *dir;
# define ERA_STRCHR(a,b) wcschr((a),(b))
# define ERA_STRNCPY(a,b,c) wcsncpy((a),(b),(c))
# define ERA_STRTOL(a,b,c) wcstol((a),(b),(c))
#else
char *c;
const char *dir;
# define ERA_STRCHR(a,b) strchr((a),(b))
# define ERA_STRNCPY(a,b,c) strncpy((a),(b),(c))
# define ERA_STRTOL(a,b,c) strtol((a),(b),(c))
#endif
long offset;
struct tm stm, etm;
era_info_t *ei;
 
ei = (era_info_t *) calloc (1, sizeof (era_info_t));
if (!ei)
return NULL;
 
stm.tm_isdst = etm.tm_isdst = 0;
while (era)
{
dir = era;
era += 2;
offset = ERA_STRTOL (era, &c, 10);
era = c + 1;
stm.tm_year = ERA_STRTOL (era, &c, 10) - YEAR_BASE;
/* Adjust offset for negative gregorian dates. */
if (stm.tm_year <= -YEAR_BASE)
++stm.tm_year;
stm.tm_mon = ERA_STRTOL (c + 1, &c, 10) - 1;
stm.tm_mday = ERA_STRTOL (c + 1, &c, 10);
stm.tm_hour = stm.tm_min = stm.tm_sec = 0;
era = c + 1;
if (era[0] == '-' && era[1] == '*')
{
etm = stm;
stm.tm_year = INT_MIN;
stm.tm_mon = stm.tm_mday = stm.tm_hour = stm.tm_min = stm.tm_sec = 0;
era += 3;
}
else if (era[0] == '+' && era[1] == '*')
{
etm.tm_year = INT_MAX;
etm.tm_mon = 11;
etm.tm_mday = 31;
etm.tm_hour = 23;
etm.tm_min = etm.tm_sec = 59;
era += 3;
}
else
{
etm.tm_year = ERA_STRTOL (era, &c, 10) - YEAR_BASE;
/* Adjust offset for negative gregorian dates. */
if (etm.tm_year <= -YEAR_BASE)
++etm.tm_year;
etm.tm_mon = ERA_STRTOL (c + 1, &c, 10) - 1;
etm.tm_mday = ERA_STRTOL (c + 1, &c, 10);
etm.tm_mday = 31;
etm.tm_hour = 23;
etm.tm_min = etm.tm_sec = 59;
era = c + 1;
}
if ((tim_p->tm_year > stm.tm_year
|| (tim_p->tm_year == stm.tm_year
&& (tim_p->tm_mon > stm.tm_mon
|| (tim_p->tm_mon == stm.tm_mon
&& tim_p->tm_mday >= stm.tm_mday))))
&& (tim_p->tm_year < etm.tm_year
|| (tim_p->tm_year == etm.tm_year
&& (tim_p->tm_mon < etm.tm_mon
|| (tim_p->tm_mon == etm.tm_mon
&& tim_p->tm_mday <= etm.tm_mday)))))
{
/* Gotcha */
size_t len;
 
/* year */
if (*dir == '+' && stm.tm_year != INT_MIN)
ei->year = tim_p->tm_year - stm.tm_year + offset;
else
ei->year = etm.tm_year - tim_p->tm_year + offset;
/* era_C */
c = ERA_STRCHR (era, ':');
#if defined (MAKE_WCSFTIME) && !defined (__HAVE_LOCALE_INFO_EXTENDED__)
len = mbsnrtowcs (NULL, &era, c - era, 0, NULL);
if (len == (size_t) -1)
{
free (ei);
return NULL;
}
#else
len = c - era;
#endif
ei->era_C = (CHAR *) malloc ((len + 1) * sizeof (CHAR));
if (!ei->era_C)
{
free (ei);
return NULL;
}
#if defined (MAKE_WCSFTIME) && !defined (__HAVE_LOCALE_INFO_EXTENDED__)
len = mbsnrtowcs (ei->era_C, &era, c - era, len + 1, NULL);
#else
ERA_STRNCPY (ei->era_C, era, len);
era += len;
#endif
ei->era_C[len] = CQ('\0');
/* era_Y */
++era;
c = ERA_STRCHR (era, ';');
if (!c)
c = ERA_STRCHR (era, '\0');
#if defined (MAKE_WCSFTIME) && !defined (__HAVE_LOCALE_INFO_EXTENDED__)
len = mbsnrtowcs (NULL, &era, c - era, 0, NULL);
if (len == (size_t) -1)
{
free (ei->era_C);
free (ei);
return NULL;
}
#else
len = c - era;
#endif
ei->era_Y = (CHAR *) malloc ((len + 1) * sizeof (CHAR));
if (!ei->era_Y)
{
free (ei->era_C);
free (ei);
return NULL;
}
#if defined (MAKE_WCSFTIME) && !defined (__HAVE_LOCALE_INFO_EXTENDED__)
len = mbsnrtowcs (ei->era_Y, &era, c - era, len + 1, NULL);
#else
ERA_STRNCPY (ei->era_Y, era, len);
era += len;
#endif
ei->era_Y[len] = CQ('\0');
return ei;
}
else
era = ERA_STRCHR (era, ';');
if (era)
++era;
}
return NULL;
}
 
static void
free_era_info (era_info_t *ei)
{
free (ei->era_C);
free (ei->era_Y);
free (ei);
}
 
typedef struct {
size_t num;
CHAR **digit;
CHAR *buffer;
} alt_digits_t;
 
static alt_digits_t *
#if defined (MAKE_WCSFTIME) && defined (__HAVE_LOCALE_INFO_EXTENDED__)
get_alt_digits (const wchar_t *alt_digits)
#else
get_alt_digits (const char *alt_digits)
#endif
{
alt_digits_t *adi;
#if defined (MAKE_WCSFTIME) && defined (__HAVE_LOCALE_INFO_EXTENDED__)
const wchar_t *a, *e;
# define ALT_STRCHR(a,b) wcschr((a),(b))
# define ALT_STRCPY(a,b) wcscpy((a),(b))
# define ALT_STRLEN(a) wcslen(a)
#else
const char *a, *e;
# define ALT_STRCHR(a,b) strchr((a),(b))
# define ALT_STRCPY(a,b) strcpy((a),(b))
# define ALT_STRLEN(a) strlen(a)
#endif
CHAR *aa, *ae;
size_t len;
 
adi = (alt_digits_t *) calloc (1, sizeof (alt_digits_t));
if (!adi)
return NULL;
 
/* Compute number of alt_digits. */
adi->num = 1;
for (a = alt_digits; (e = ALT_STRCHR (a, ';')) != NULL; a = e + 1)
++adi->num;
/* Allocate the `digit' array, which is an array of `num' pointers into
`buffer'. */
adi->digit = (CHAR **) calloc (adi->num, sizeof (CHAR **));
if (!adi->digit)
{
free (adi);
return NULL;
}
/* Compute memory required for `buffer'. */
#if defined (MAKE_WCSFTIME) && !defined (__HAVE_LOCALE_INFO_EXTENDED__)
len = mbstowcs (NULL, alt_digits, 0);
if (len == (size_t) -1)
{
free (adi->digit);
free (adi);
return NULL;
}
#else
len = ALT_STRLEN (alt_digits);
#endif
/* Allocate it. */
adi->buffer = (CHAR *) malloc ((len + 1) * sizeof (CHAR));
if (!adi->buffer)
{
free (adi->digit);
free (adi);
return NULL;
}
/* Store digits in it. */
#if defined (MAKE_WCSFTIME) && !defined (__HAVE_LOCALE_INFO_EXTENDED__)
mbstowcs (adi->buffer, alt_digits, len + 1);
#else
ALT_STRCPY (adi->buffer, alt_digits);
#endif
/* Store the pointers into `buffer' into the appropriate `digit' slot. */
for (len = 0, aa = adi->buffer; (ae = STRCHR (aa, CQ(';'))) != NULL;
++len, aa = ae + 1)
{
*ae = '\0';
adi->digit[len] = aa;
}
adi->digit[len] = aa;
return adi;
}
 
static void
free_alt_digits (alt_digits_t *adi)
{
free (adi->digit);
free (adi->buffer);
free (adi);
}
 
/* Return 0 if no alt_digit is available for a number.
Return -1 if buffer size isn't sufficient to hold alternative digit.
Return length of new digit otherwise. */
static int
conv_to_alt_digits (CHAR *buf, size_t bufsiz, unsigned num, alt_digits_t *adi)
{
if (num < adi->num)
{
size_t len = STRLEN (adi->digit[num]);
if (bufsiz < len)
return -1;
STRCPY (buf, adi->digit[num]);
return (int) len;
}
return 0;
}
 
static size_t __strftime (CHAR *, size_t, const CHAR *, const struct tm *,
era_info_t **, alt_digits_t **);
 
size_t
_DEFUN (strftime, (s, maxsize, format, tim_p),
CHAR *__restrict s _AND
size_t maxsize _AND
_CONST CHAR *__restrict format _AND
_CONST struct tm *__restrict tim_p)
{
era_info_t *era_info = NULL;
alt_digits_t *alt_digits = NULL;
size_t ret = __strftime (s, maxsize, format, tim_p, &era_info, &alt_digits);
if (era_info)
free_era_info (era_info);
if (alt_digits)
free_alt_digits (alt_digits);
return ret;
}
 
static size_t
__strftime (CHAR *s, size_t maxsize, const CHAR *format,
const struct tm *tim_p, era_info_t **era_info,
alt_digits_t **alt_digits)
#else /* !_WANT_C99_TIME_FORMATS */
# define __strftime(s,m,f,t,e,a) strftime((s),(m),(f),(t))
 
size_t
_DEFUN (strftime, (s, maxsize, format, tim_p),
CHAR *__restrict s _AND
size_t maxsize _AND
_CONST CHAR *__restrict format _AND
_CONST struct tm *__restrict tim_p)
#endif /* !_WANT_C99_TIME_FORMATS */
{
size_t count = 0;
int i, len = 0;
const CHAR *ctloc;
#if defined (MAKE_WCSFTIME) && !defined (__HAVE_LOCALE_INFO_EXTENDED__)
CHAR ctlocbuf[CTLOCBUFLEN];
#endif
size_t ctloclen;
CHAR alt;
CHAR pad;
unsigned long width;
 
struct lc_time_T *_CurrentTimeLocale = __get_current_time_locale ();
for (;;)
{
while (*format && *format != CQ('%'))
{
if (count < maxsize - 1)
s[count++] = *format++;
else
return 0;
}
if (*format == CQ('\0'))
break;
format++;
pad = '\0';
width = 0;
 
/* POSIX-1.2008 feature: '0' and '+' modifiers require 0-padding with
slightly different semantics. */
if (*format == CQ('0') || *format == CQ('+'))
pad = *format++;
 
/* POSIX-1.2008 feature: A minimum field width can be specified. */
if (*format >= CQ('1') && *format <= CQ('9'))
{
CHAR *fp;
width = STRTOUL (format, &fp, 10);
format = fp;
}
 
alt = CQ('\0');
if (*format == CQ('E'))
{
alt = *format++;
#ifdef _WANT_C99_TIME_FORMATS
#if defined (MAKE_WCSFTIME) && defined (__HAVE_LOCALE_INFO_EXTENDED__)
if (!*era_info && *_CurrentTimeLocale->wera)
*era_info = get_era_info (tim_p, _CurrentTimeLocale->wera);
#else
if (!*era_info && *_CurrentTimeLocale->era)
*era_info = get_era_info (tim_p, _CurrentTimeLocale->era);
#endif
#endif /* _WANT_C99_TIME_FORMATS */
}
else if (*format == CQ('O'))
{
alt = *format++;
#ifdef _WANT_C99_TIME_FORMATS
#if defined (MAKE_WCSFTIME) && defined (__HAVE_LOCALE_INFO_EXTENDED__)
if (!*alt_digits && *_CurrentTimeLocale->walt_digits)
*alt_digits = get_alt_digits (_CurrentTimeLocale->walt_digits);
#else
if (!*alt_digits && *_CurrentTimeLocale->alt_digits)
*alt_digits = get_alt_digits (_CurrentTimeLocale->alt_digits);
#endif
#endif /* _WANT_C99_TIME_FORMATS */
}
 
switch (*format)
{
case CQ('a'):
_ctloc (wday[tim_p->tm_wday]);
for (i = 0; i < ctloclen; i++)
{
if (count < maxsize - 1)
s[count++] = ctloc[i];
else
return 0;
}
break;
case CQ('A'):
_ctloc (weekday[tim_p->tm_wday]);
for (i = 0; i < ctloclen; i++)
{
if (count < maxsize - 1)
s[count++] = ctloc[i];
else
return 0;
}
break;
case CQ('b'):
case CQ('h'):
_ctloc (mon[tim_p->tm_mon]);
for (i = 0; i < ctloclen; i++)
{
if (count < maxsize - 1)
s[count++] = ctloc[i];
else
return 0;
}
break;
case CQ('B'):
_ctloc (month[tim_p->tm_mon]);
for (i = 0; i < ctloclen; i++)
{
if (count < maxsize - 1)
s[count++] = ctloc[i];
else
return 0;
}
break;
case CQ('c'):
#ifdef _WANT_C99_TIME_FORMATS
if (alt == 'E' && *era_info && *_CurrentTimeLocale->era_d_t_fmt)
_ctloc (era_d_t_fmt);
else
#endif /* _WANT_C99_TIME_FORMATS */
_ctloc (c_fmt);
goto recurse;
case CQ('r'):
_ctloc (ampm_fmt);
goto recurse;
case CQ('x'):
#ifdef _WANT_C99_TIME_FORMATS
if (alt == 'E' && *era_info && *_CurrentTimeLocale->era_d_fmt)
_ctloc (era_d_fmt);
else
#endif /* _WANT_C99_TIME_FORMATS */
_ctloc (x_fmt);
goto recurse;
case CQ('X'):
#ifdef _WANT_C99_TIME_FORMATS
if (alt == 'E' && *era_info && *_CurrentTimeLocale->era_t_fmt)
_ctloc (era_t_fmt);
else
#endif /* _WANT_C99_TIME_FORMATS */
_ctloc (X_fmt);
recurse:
if (*ctloc)
{
/* Recurse to avoid need to replicate %Y formation. */
len = __strftime (&s[count], maxsize - count, ctloc, tim_p,
era_info, alt_digits);
if (len > 0)
count += len;
else
return 0;
}
break;
case CQ('C'):
{
/* Examples of (tm_year + YEAR_BASE) that show how %Y == %C%y
with 32-bit int.
%Y %C %y
2147485547 21474855 47
10000 100 00
9999 99 99
0999 09 99
0099 00 99
0001 00 01
0000 00 00
-001 -0 01
-099 -0 99
-999 -9 99
-1000 -10 00
-10000 -100 00
-2147481748 -21474817 48
 
Be careful of both overflow and sign adjustment due to the
asymmetric range of years.
*/
#ifdef _WANT_C99_TIME_FORMATS
if (alt == 'E' && *era_info)
len = snprintf (&s[count], maxsize - count, CQ("%" SFLG "s"),
(*era_info)->era_C);
else
#endif /* _WANT_C99_TIME_FORMATS */
{
CHAR *fmt = CQ("%s%.*d");
char *pos = "";
int neg = tim_p->tm_year < -YEAR_BASE;
int century = tim_p->tm_year >= 0
? tim_p->tm_year / 100 + YEAR_BASE / 100
: abs (tim_p->tm_year + YEAR_BASE) / 100;
if (pad) /* '0' or '+' */
{
fmt = CQ("%s%0.*d");
if (century >= 100 && pad == CQ('+'))
pos = "+";
}
if (width < 2)
width = 2;
len = snprintf (&s[count], maxsize - count, fmt,
neg ? "-" : pos, width - neg, century);
}
CHECK_LENGTH ();
}
break;
case CQ('d'):
case CQ('e'):
#ifdef _WANT_C99_TIME_FORMATS
if (alt == CQ('O') && *alt_digits)
{
if (tim_p->tm_mday < 10)
{
if (*format == CQ('d'))
{
if (maxsize - count < 2) return 0;
len = conv_to_alt_digits (&s[count], maxsize - count,
0, *alt_digits);
CHECK_LENGTH ();
}
if (*format == CQ('e') || len == 0)
s[count++] = CQ(' ');
}
len = conv_to_alt_digits (&s[count], maxsize - count,
tim_p->tm_mday, *alt_digits);
CHECK_LENGTH ();
if (len > 0)
break;
}
#endif /* _WANT_C99_TIME_FORMATS */
len = snprintf (&s[count], maxsize - count,
*format == CQ('d') ? CQ("%.2d") : CQ("%2d"),
tim_p->tm_mday);
CHECK_LENGTH ();
break;
case CQ('D'):
/* %m/%d/%y */
len = snprintf (&s[count], maxsize - count,
CQ("%.2d/%.2d/%.2d"),
tim_p->tm_mon + 1, tim_p->tm_mday,
tim_p->tm_year >= 0 ? tim_p->tm_year % 100
: abs (tim_p->tm_year + YEAR_BASE) % 100);
CHECK_LENGTH ();
break;
case CQ('F'):
{ /* %F is equivalent to "%+4Y-%m-%d", flags and width can change
that. Recurse to avoid need to replicate %Y formation. */
CHAR fmtbuf[32], *fmt = fmtbuf;
*fmt++ = CQ('%');
if (pad) /* '0' or '+' */
*fmt++ = pad;
else
*fmt++ = '+';
if (!pad)
width = 10;
if (width < 6)
width = 6;
width -= 6;
if (width)
{
len = snprintf (fmt, fmtbuf + 32 - fmt, CQ("%lu"), width);
if (len > 0)
fmt += len;
}
STRCPY (fmt, CQ("Y-%m-%d"));
len = __strftime (&s[count], maxsize - count, fmtbuf, tim_p,
era_info, alt_digits);
if (len > 0)
count += len;
else
return 0;
}
break;
case CQ('g'):
/* Be careful of both overflow and negative years, thanks to
the asymmetric range of years. */
{
int adjust = iso_year_adjust (tim_p);
int year = tim_p->tm_year >= 0 ? tim_p->tm_year % 100
: abs (tim_p->tm_year + YEAR_BASE) % 100;
if (adjust < 0 && tim_p->tm_year <= -YEAR_BASE)
adjust = 1;
else if (adjust > 0 && tim_p->tm_year < -YEAR_BASE)
adjust = -1;
len = snprintf (&s[count], maxsize - count, CQ("%.2d"),
((year + adjust) % 100 + 100) % 100);
CHECK_LENGTH ();
}
break;
case CQ('G'):
{
/* See the comments for 'C' and 'Y'; this is a variable length
field. Although there is no requirement for a minimum number
of digits, we use 4 for consistency with 'Y'. */
int sign = tim_p->tm_year < -YEAR_BASE;
int adjust = iso_year_adjust (tim_p);
int century = tim_p->tm_year >= 0
? tim_p->tm_year / 100 + YEAR_BASE / 100
: abs (tim_p->tm_year + YEAR_BASE) / 100;
int year = tim_p->tm_year >= 0 ? tim_p->tm_year % 100
: abs (tim_p->tm_year + YEAR_BASE) % 100;
if (adjust < 0 && tim_p->tm_year <= -YEAR_BASE)
sign = adjust = 1;
else if (adjust > 0 && sign)
adjust = -1;
year += adjust;
if (year == -1)
{
year = 99;
--century;
}
else if (year == 100)
{
year = 0;
++century;
}
CHAR fmtbuf[10], *fmt = fmtbuf;
/* int potentially overflows, so use unsigned instead. */
unsigned p_year = century * 100 + year;
if (sign)
*fmt++ = CQ('-');
else if (pad == CQ('+') && p_year >= 10000)
{
*fmt++ = CQ('+');
sign = 1;
}
if (width && sign)
--width;
*fmt++ = CQ('%');
if (pad)
*fmt++ = CQ('0');
STRCPY (fmt, CQ(".*u"));
len = snprintf (&s[count], maxsize - count, fmtbuf, width, p_year);
if (len < 0 || (count+=len) >= maxsize)
return 0;
}
break;
case CQ('H'):
#ifdef _WANT_C99_TIME_FORMATS
if (alt == CQ('O') && *alt_digits)
{
len = conv_to_alt_digits (&s[count], maxsize - count,
tim_p->tm_hour, *alt_digits);
CHECK_LENGTH ();
if (len > 0)
break;
}
#endif /* _WANT_C99_TIME_FORMATS */
/*FALLTHRU*/
case CQ('k'): /* newlib extension */
len = snprintf (&s[count], maxsize - count,
*format == CQ('k') ? CQ("%2d") : CQ("%.2d"),
tim_p->tm_hour);
CHECK_LENGTH ();
break;
case CQ('l'): /* newlib extension */
if (alt == CQ('O'))
alt = CQ('\0');
/*FALLTHRU*/
case CQ('I'):
{
register int h12;
h12 = (tim_p->tm_hour == 0 || tim_p->tm_hour == 12) ?
12 : tim_p->tm_hour % 12;
#ifdef _WANT_C99_TIME_FORMATS
if (alt != CQ('O') || !*alt_digits
|| !(len = conv_to_alt_digits (&s[count], maxsize - count,
h12, *alt_digits)))
#endif /* _WANT_C99_TIME_FORMATS */
len = snprintf (&s[count], maxsize - count,
*format == CQ('I') ? CQ("%.2d") : CQ("%2d"), h12);
CHECK_LENGTH ();
}
break;
case CQ('j'):
len = snprintf (&s[count], maxsize - count, CQ("%.3d"),
tim_p->tm_yday + 1);
CHECK_LENGTH ();
break;
case CQ('m'):
#ifdef _WANT_C99_TIME_FORMATS
if (alt != CQ('O') || !*alt_digits
|| !(len = conv_to_alt_digits (&s[count], maxsize - count,
tim_p->tm_mon + 1, *alt_digits)))
#endif /* _WANT_C99_TIME_FORMATS */
len = snprintf (&s[count], maxsize - count, CQ("%.2d"),
tim_p->tm_mon + 1);
CHECK_LENGTH ();
break;
case CQ('M'):
#ifdef _WANT_C99_TIME_FORMATS
if (alt != CQ('O') || !*alt_digits
|| !(len = conv_to_alt_digits (&s[count], maxsize - count,
tim_p->tm_min, *alt_digits)))
#endif /* _WANT_C99_TIME_FORMATS */
len = snprintf (&s[count], maxsize - count, CQ("%.2d"),
tim_p->tm_min);
CHECK_LENGTH ();
break;
case CQ('n'):
if (count < maxsize - 1)
s[count++] = CQ('\n');
else
return 0;
break;
case CQ('p'):
case CQ('P'):
_ctloc (am_pm[tim_p->tm_hour < 12 ? 0 : 1]);
for (i = 0; i < ctloclen; i++)
{
if (count < maxsize - 1)
s[count++] = (*format == CQ('P') ? TOLOWER (ctloc[i])
: ctloc[i]);
else
return 0;
}
break;
case CQ('R'):
len = snprintf (&s[count], maxsize - count, CQ("%.2d:%.2d"),
tim_p->tm_hour, tim_p->tm_min);
CHECK_LENGTH ();
break;
case CQ('S'):
#ifdef _WANT_C99_TIME_FORMATS
if (alt != CQ('O') || !*alt_digits
|| !(len = conv_to_alt_digits (&s[count], maxsize - count,
tim_p->tm_sec, *alt_digits)))
#endif /* _WANT_C99_TIME_FORMATS */
len = snprintf (&s[count], maxsize - count, CQ("%.2d"),
tim_p->tm_sec);
CHECK_LENGTH ();
break;
case CQ('t'):
if (count < maxsize - 1)
s[count++] = CQ('\t');
else
return 0;
break;
case CQ('T'):
len = snprintf (&s[count], maxsize - count, CQ("%.2d:%.2d:%.2d"),
tim_p->tm_hour, tim_p->tm_min, tim_p->tm_sec);
CHECK_LENGTH ();
break;
case CQ('u'):
#ifdef _WANT_C99_TIME_FORMATS
if (alt == CQ('O') && *alt_digits)
{
len = conv_to_alt_digits (&s[count], maxsize - count,
tim_p->tm_wday == 0 ? 7
: tim_p->tm_wday,
*alt_digits);
CHECK_LENGTH ();
if (len > 0)
break;
}
#endif /* _WANT_C99_TIME_FORMATS */
if (count < maxsize - 1)
{
if (tim_p->tm_wday == 0)
s[count++] = CQ('7');
else
s[count++] = CQ('0') + tim_p->tm_wday;
}
else
return 0;
break;
case CQ('U'):
#ifdef _WANT_C99_TIME_FORMATS
if (alt != CQ('O') || !*alt_digits
|| !(len = conv_to_alt_digits (&s[count], maxsize - count,
(tim_p->tm_yday + 7 -
tim_p->tm_wday) / 7,
*alt_digits)))
#endif /* _WANT_C99_TIME_FORMATS */
len = snprintf (&s[count], maxsize - count, CQ("%.2d"),
(tim_p->tm_yday + 7 -
tim_p->tm_wday) / 7);
CHECK_LENGTH ();
break;
case CQ('V'):
{
int adjust = iso_year_adjust (tim_p);
int wday = (tim_p->tm_wday) ? tim_p->tm_wday - 1 : 6;
int week = (tim_p->tm_yday + 10 - wday) / 7;
if (adjust > 0)
week = 1;
else if (adjust < 0)
/* Previous year has 53 weeks if current year starts on
Fri, and also if current year starts on Sat and
previous year was leap year. */
week = 52 + (4 >= (wday - tim_p->tm_yday
- isleap (tim_p->tm_year
+ (YEAR_BASE - 1
- (tim_p->tm_year < 0
? 0 : 2000)))));
#ifdef _WANT_C99_TIME_FORMATS
if (alt != CQ('O') || !*alt_digits
|| !(len = conv_to_alt_digits (&s[count], maxsize - count,
week, *alt_digits)))
#endif /* _WANT_C99_TIME_FORMATS */
len = snprintf (&s[count], maxsize - count, CQ("%.2d"), week);
CHECK_LENGTH ();
}
break;
case CQ('w'):
#ifdef _WANT_C99_TIME_FORMATS
if (alt == CQ('O') && *alt_digits)
{
len = conv_to_alt_digits (&s[count], maxsize - count,
tim_p->tm_wday, *alt_digits);
CHECK_LENGTH ();
if (len > 0)
break;
}
#endif /* _WANT_C99_TIME_FORMATS */
if (count < maxsize - 1)
s[count++] = CQ('0') + tim_p->tm_wday;
else
return 0;
break;
case CQ('W'):
{
int wday = (tim_p->tm_wday) ? tim_p->tm_wday - 1 : 6;
wday = (tim_p->tm_yday + 7 - wday) / 7;
#ifdef _WANT_C99_TIME_FORMATS
if (alt != CQ('O') || !*alt_digits
|| !(len = conv_to_alt_digits (&s[count], maxsize - count,
wday, *alt_digits)))
#endif /* _WANT_C99_TIME_FORMATS */
len = snprintf (&s[count], maxsize - count, CQ("%.2d"), wday);
CHECK_LENGTH ();
}
break;
case CQ('y'):
{
#ifdef _WANT_C99_TIME_FORMATS
if (alt == 'E' && *era_info)
len = snprintf (&s[count], maxsize - count, CQ("%d"),
(*era_info)->year);
else
#endif /* _WANT_C99_TIME_FORMATS */
{
/* Be careful of both overflow and negative years, thanks to
the asymmetric range of years. */
int year = tim_p->tm_year >= 0 ? tim_p->tm_year % 100
: abs (tim_p->tm_year + YEAR_BASE) % 100;
#ifdef _WANT_C99_TIME_FORMATS
if (alt != CQ('O') || !*alt_digits
|| !(len = conv_to_alt_digits (&s[count], maxsize - count,
year, *alt_digits)))
#endif /* _WANT_C99_TIME_FORMATS */
len = snprintf (&s[count], maxsize - count, CQ("%.2d"),
year);
}
CHECK_LENGTH ();
}
break;
case CQ('Y'):
#ifdef _WANT_C99_TIME_FORMATS
if (alt == 'E' && *era_info)
{
ctloc = (*era_info)->era_Y;
goto recurse;
}
else
#endif /* _WANT_C99_TIME_FORMATS */
{
CHAR fmtbuf[10], *fmt = fmtbuf;
int sign = tim_p->tm_year < -YEAR_BASE;
/* int potentially overflows, so use unsigned instead. */
register unsigned year = (unsigned) tim_p->tm_year
+ (unsigned) YEAR_BASE;
if (sign)
{
*fmt++ = CQ('-');
year = UINT_MAX - year + 1;
}
else if (pad == CQ('+') && year >= 10000)
{
*fmt++ = CQ('+');
sign = 1;
}
if (width && sign)
--width;
*fmt++ = CQ('%');
if (pad)
*fmt++ = CQ('0');
STRCPY (fmt, CQ(".*u"));
len = snprintf (&s[count], maxsize - count, fmtbuf, width,
year);
CHECK_LENGTH ();
}
break;
case CQ('z'):
if (tim_p->tm_isdst >= 0)
{
long offset;
__tzinfo_type *tz = __gettzinfo ();
TZ_LOCK;
/* The sign of this is exactly opposite the envvar TZ. We
could directly use the global _timezone for tm_isdst==0,
but have to use __tzrule for daylight savings. */
offset = -tz->__tzrule[tim_p->tm_isdst > 0].offset;
TZ_UNLOCK;
len = snprintf (&s[count], maxsize - count, CQ("%+03ld%.2ld"),
offset / SECSPERHOUR,
labs (offset / SECSPERMIN) % 60L);
CHECK_LENGTH ();
}
break;
case CQ('Z'):
if (tim_p->tm_isdst >= 0)
{
int size;
TZ_LOCK;
size = strlen(_tzname[tim_p->tm_isdst > 0]);
for (i = 0; i < size; i++)
{
if (count < maxsize - 1)
s[count++] = _tzname[tim_p->tm_isdst > 0][i];
else
{
TZ_UNLOCK;
return 0;
}
}
TZ_UNLOCK;
}
break;
case CQ('%'):
if (count < maxsize - 1)
s[count++] = CQ('%');
else
return 0;
break;
default:
return 0;
}
if (*format)
format++;
else
break;
}
if (maxsize)
s[count] = CQ('\0');
 
return count;
}
 
/* The remainder of this file can serve as a regression test. Compile
* with -D_REGRESSION_TEST. */
#if defined(_REGRESSION_TEST) /* [Test code: */
/* This test code relies on ANSI C features, in particular on the ability
* of adjacent strings to be pasted together into one string. */
/* Test output buffer size (should be larger than all expected results) */
#define OUTSIZE 256
struct test {
CHAR *fmt; /* Testing format */
size_t max; /* Testing maxsize */
size_t ret; /* Expected return value */
CHAR *out; /* Expected output string */
};
struct list {
const struct tm *tms; /* Time used for these vectors */
const struct test *vec; /* Test vectors */
int cnt; /* Number of vectors */
};
const char TZ[]="TZ=EST5EDT";
/* Define list of test inputs and expected outputs, for the given time zone
* and time. */
const struct tm tm0 = {
/* Tue Dec 30 10:53:47 EST 2008 (time_t=1230648827) */
.tm_sec = 47,
.tm_min = 53,
.tm_hour = 9,
.tm_mday = 30,
.tm_mon = 11,
.tm_year = 108,
.tm_wday = 2,
.tm_yday = 364,
.tm_isdst = 0
};
const struct test Vec0[] = {
/* Testing fields one at a time, expecting to pass, using exact
* allowed length as what is needed. */
/* Using tm0 for time: */
#define EXP(s) sizeof(s)/sizeof(CHAR)-1, s
{ CQ("%a"), 3+1, EXP(CQ("Tue")) },
{ CQ("%A"), 7+1, EXP(CQ("Tuesday")) },
{ CQ("%b"), 3+1, EXP(CQ("Dec")) },
{ CQ("%B"), 8+1, EXP(CQ("December")) },
{ CQ("%c"), 24+1, EXP(CQ("Tue Dec 30 09:53:47 2008")) },
{ CQ("%C"), 2+1, EXP(CQ("20")) },
{ CQ("%d"), 2+1, EXP(CQ("30")) },
{ CQ("%D"), 8+1, EXP(CQ("12/30/08")) },
{ CQ("%e"), 2+1, EXP(CQ("30")) },
{ CQ("%F"), 10+1, EXP(CQ("2008-12-30")) },
{ CQ("%g"), 2+1, EXP(CQ("09")) },
{ CQ("%G"), 4+1, EXP(CQ("2009")) },
{ CQ("%h"), 3+1, EXP(CQ("Dec")) },
{ CQ("%H"), 2+1, EXP(CQ("09")) },
{ CQ("%I"), 2+1, EXP(CQ("09")) },
{ CQ("%j"), 3+1, EXP(CQ("365")) },
{ CQ("%k"), 2+1, EXP(CQ(" 9")) },
{ CQ("%l"), 2+1, EXP(CQ(" 9")) },
{ CQ("%m"), 2+1, EXP(CQ("12")) },
{ CQ("%M"), 2+1, EXP(CQ("53")) },
{ CQ("%n"), 1+1, EXP(CQ("\n")) },
{ CQ("%p"), 2+1, EXP(CQ("AM")) },
{ CQ("%r"), 11+1, EXP(CQ("09:53:47 AM")) },
{ CQ("%R"), 5+1, EXP(CQ("09:53")) },
{ CQ("%S"), 2+1, EXP(CQ("47")) },
{ CQ("%t"), 1+1, EXP(CQ("\t")) },
{ CQ("%T"), 8+1, EXP(CQ("09:53:47")) },
{ CQ("%u"), 1+1, EXP(CQ("2")) },
{ CQ("%U"), 2+1, EXP(CQ("52")) },
{ CQ("%V"), 2+1, EXP(CQ("01")) },
{ CQ("%w"), 1+1, EXP(CQ("2")) },
{ CQ("%W"), 2+1, EXP(CQ("52")) },
{ CQ("%x"), 8+1, EXP(CQ("12/30/08")) },
{ CQ("%X"), 8+1, EXP(CQ("09:53:47")) },
{ CQ("%y"), 2+1, EXP(CQ("08")) },
{ CQ("%Y"), 4+1, EXP(CQ("2008")) },
{ CQ("%z"), 5+1, EXP(CQ("-0500")) },
{ CQ("%Z"), 3+1, EXP(CQ("EST")) },
{ CQ("%%"), 1+1, EXP(CQ("%")) },
#undef EXP
};
/* Define list of test inputs and expected outputs, for the given time zone
* and time. */
const struct tm tm1 = {
/* Wed Jul 2 23:01:13 EDT 2008 (time_t=1215054073) */
.tm_sec = 13,
.tm_min = 1,
.tm_hour = 23,
.tm_mday = 2,
.tm_mon = 6,
.tm_year = 108,
.tm_wday = 3,
.tm_yday = 183,
.tm_isdst = 1
};
const struct test Vec1[] = {
/* Testing fields one at a time, expecting to pass, using exact
* allowed length as what is needed. */
/* Using tm1 for time: */
#define EXP(s) sizeof(s)/sizeof(CHAR)-1, s
{ CQ("%a"), 3+1, EXP(CQ("Wed")) },
{ CQ("%A"), 9+1, EXP(CQ("Wednesday")) },
{ CQ("%b"), 3+1, EXP(CQ("Jul")) },
{ CQ("%B"), 4+1, EXP(CQ("July")) },
{ CQ("%c"), 24+1, EXP(CQ("Wed Jul 2 23:01:13 2008")) },
{ CQ("%C"), 2+1, EXP(CQ("20")) },
{ CQ("%d"), 2+1, EXP(CQ("02")) },
{ CQ("%D"), 8+1, EXP(CQ("07/02/08")) },
{ CQ("%e"), 2+1, EXP(CQ(" 2")) },
{ CQ("%F"), 10+1, EXP(CQ("2008-07-02")) },
{ CQ("%g"), 2+1, EXP(CQ("08")) },
{ CQ("%G"), 4+1, EXP(CQ("2008")) },
{ CQ("%h"), 3+1, EXP(CQ("Jul")) },
{ CQ("%H"), 2+1, EXP(CQ("23")) },
{ CQ("%I"), 2+1, EXP(CQ("11")) },
{ CQ("%j"), 3+1, EXP(CQ("184")) },
{ CQ("%k"), 2+1, EXP(CQ("23")) },
{ CQ("%l"), 2+1, EXP(CQ("11")) },
{ CQ("%m"), 2+1, EXP(CQ("07")) },
{ CQ("%M"), 2+1, EXP(CQ("01")) },
{ CQ("%n"), 1+1, EXP(CQ("\n")) },
{ CQ("%p"), 2+1, EXP(CQ("PM")) },
{ CQ("%r"), 11+1, EXP(CQ("11:01:13 PM")) },
{ CQ("%R"), 5+1, EXP(CQ("23:01")) },
{ CQ("%S"), 2+1, EXP(CQ("13")) },
{ CQ("%t"), 1+1, EXP(CQ("\t")) },
{ CQ("%T"), 8+1, EXP(CQ("23:01:13")) },
{ CQ("%u"), 1+1, EXP(CQ("3")) },
{ CQ("%U"), 2+1, EXP(CQ("26")) },
{ CQ("%V"), 2+1, EXP(CQ("27")) },
{ CQ("%w"), 1+1, EXP(CQ("3")) },
{ CQ("%W"), 2+1, EXP(CQ("26")) },
{ CQ("%x"), 8+1, EXP(CQ("07/02/08")) },
{ CQ("%X"), 8+1, EXP(CQ("23:01:13")) },
{ CQ("%y"), 2+1, EXP(CQ("08")) },
{ CQ("%Y"), 4+1, EXP(CQ("2008")) },
{ CQ("%z"), 5+1, EXP(CQ("-0400")) },
{ CQ("%Z"), 3+1, EXP(CQ("EDT")) },
{ CQ("%%"), 1+1, EXP(CQ("%")) },
#undef EXP
#define VEC(s) s, sizeof(s)/sizeof(CHAR), sizeof(s)/sizeof(CHAR)-1, s
#define EXP(s) sizeof(s)/sizeof(CHAR), sizeof(s)/sizeof(CHAR)-1, s
{ VEC(CQ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")) },
{ CQ("0123456789%%%h:`~"), EXP(CQ("0123456789%Jul:`~")) },
{ CQ("%R%h:`~ %x %w"), EXP(CQ("23:01Jul:`~ 07/02/08 3")) },
#undef VEC
#undef EXP
};
#if YEAR_BASE == 1900 /* ( */
/* Checks for very large years. YEAR_BASE value relied upon so that the
* answer strings can be predetermined.
* Years more than 4 digits are not mentioned in the standard for %C, so the
* test for those cases are based on the design intent (which is to print the
* whole number, being the century). */
const struct tm tmyr0 = {
/* Wed Jul 2 23:01:13 EDT [HUGE#] */
.tm_sec = 13,
.tm_min = 1,
.tm_hour = 23,
.tm_mday = 2,
.tm_mon = 6,
.tm_year = INT_MAX - YEAR_BASE/2,
.tm_wday = 3,
.tm_yday = 183,
.tm_isdst = 1
};
#if INT_MAX == 32767
# define YEAR CQ("33717") /* INT_MAX + YEAR_BASE/2 */
# define CENT CQ("337")
# define Year CQ("17")
# elif INT_MAX == 2147483647
# define YEAR CQ("2147484597")
# define CENT CQ("21474845")
# define Year CQ("97")
# elif INT_MAX == 9223372036854775807
# define YEAR CQ("9223372036854776757")
# define CENT CQ("92233720368547777")
# define Year CQ("57")
# else
# error "Unrecognized INT_MAX value: enhance me to recognize what you have"
#endif
const struct test Vecyr0[] = {
/* Testing fields one at a time, expecting to pass, using a larger
* allowed length than what is needed. */
/* Using tmyr0 for time: */
#define EXP(s) sizeof(s)/sizeof(CHAR)-1, s
{ CQ("%C"), OUTSIZE, EXP(CENT) },
{ CQ("%c"), OUTSIZE, EXP(CQ("Wed Jul 2 23:01:13 ")YEAR) },
{ CQ("%D"), OUTSIZE, EXP(CQ("07/02/")Year) },
{ CQ("%F"), OUTSIZE, EXP(YEAR CQ("-07-02")) },
{ CQ("%x"), OUTSIZE, EXP(CQ("07/02/")Year) },
{ CQ("%y"), OUTSIZE, EXP(Year) },
{ CQ("%Y"), OUTSIZE, EXP(YEAR) },
#undef EXP
};
#undef YEAR
#undef CENT
#undef Year
/* Checks for very large negative years. YEAR_BASE value relied upon so that
* the answer strings can be predetermined. */
const struct tm tmyr1 = {
/* Wed Jul 2 23:01:13 EDT [HUGE#] */
.tm_sec = 13,
.tm_min = 1,
.tm_hour = 23,
.tm_mday = 2,
.tm_mon = 6,
.tm_year = INT_MIN,
.tm_wday = 3,
.tm_yday = 183,
.tm_isdst = 1
};
#if INT_MAX == 32767
# define YEAR CQ("-30868") /* INT_MIN + YEAR_BASE */
# define CENT CQ("-308")
# define Year CQ("68")
# elif INT_MAX == 2147483647
# define YEAR CQ("-2147481748")
# define CENT CQ("-21474817")
# define Year CQ("48")
# elif INT_MAX == 9223372036854775807
# define YEAR CQ("-9223372036854773908")
# define CENT CQ("-92233720368547739")
# define Year CQ("08")
# else
# error "Unrecognized INT_MAX value: enhance me to recognize what you have"
#endif
const struct test Vecyr1[] = {
/* Testing fields one at a time, expecting to pass, using a larger
* allowed length than what is needed. */
/* Using tmyr1 for time: */
#define EXP(s) sizeof(s)/sizeof(CHAR)-1, s
{ CQ("%C"), OUTSIZE, EXP(CENT) },
{ CQ("%c"), OUTSIZE, EXP(CQ("Wed Jul 2 23:01:13 ")YEAR) },
{ CQ("%D"), OUTSIZE, EXP(CQ("07/02/")Year) },
{ CQ("%F"), OUTSIZE, EXP(YEAR CQ("-07-02")) },
{ CQ("%x"), OUTSIZE, EXP(CQ("07/02/")Year) },
{ CQ("%y"), OUTSIZE, EXP(Year) },
{ CQ("%Y"), OUTSIZE, EXP(YEAR) },
#undef EXP
};
#undef YEAR
#undef CENT
#undef Year
#endif /* YEAR_BASE ) */
/* Checks for years just over zero (also test for s=60).
* Years less than 4 digits are not mentioned for %Y in the standard, so the
* test for that case is based on the design intent. */
const struct tm tmyrzp = {
/* Wed Jul 2 23:01:60 EDT 0007 */
.tm_sec = 60,
.tm_min = 1,
.tm_hour = 23,
.tm_mday = 2,
.tm_mon = 6,
.tm_year = 7-YEAR_BASE,
.tm_wday = 3,
.tm_yday = 183,
.tm_isdst = 1
};
#define YEAR CQ("0007") /* Design intent: %Y=%C%y */
#define CENT CQ("00")
#define Year CQ("07")
const struct test Vecyrzp[] = {
/* Testing fields one at a time, expecting to pass, using a larger
* allowed length than what is needed. */
/* Using tmyrzp for time: */
#define EXP(s) sizeof(s)/sizeof(CHAR)-1, s
{ CQ("%C"), OUTSIZE, EXP(CENT) },
{ CQ("%c"), OUTSIZE, EXP(CQ("Wed Jul 2 23:01:60 ")YEAR) },
{ CQ("%D"), OUTSIZE, EXP(CQ("07/02/")Year) },
{ CQ("%F"), OUTSIZE, EXP(YEAR CQ("-07-02")) },
{ CQ("%x"), OUTSIZE, EXP(CQ("07/02/")Year) },
{ CQ("%y"), OUTSIZE, EXP(Year) },
{ CQ("%Y"), OUTSIZE, EXP(YEAR) },
#undef EXP
};
#undef YEAR
#undef CENT
#undef Year
/* Checks for years just under zero.
* Negative years are not handled by the standard, so the vectors here are
* verifying the chosen implemtation. */
const struct tm tmyrzn = {
/* Wed Jul 2 23:01:00 EDT -004 */
.tm_sec = 00,
.tm_min = 1,
.tm_hour = 23,
.tm_mday = 2,
.tm_mon = 6,
.tm_year = -4-YEAR_BASE,
.tm_wday = 3,
.tm_yday = 183,
.tm_isdst = 1
};
#define YEAR CQ("-004")
#define CENT CQ("-0")
#define Year CQ("04")
const struct test Vecyrzn[] = {
/* Testing fields one at a time, expecting to pass, using a larger
* allowed length than what is needed. */
/* Using tmyrzn for time: */
#define EXP(s) sizeof(s)/sizeof(CHAR)-1, s
{ CQ("%C"), OUTSIZE, EXP(CENT) },
{ CQ("%c"), OUTSIZE, EXP(CQ("Wed Jul 2 23:01:00 ")YEAR) },
{ CQ("%D"), OUTSIZE, EXP(CQ("07/02/")Year) },
{ CQ("%F"), OUTSIZE, EXP(YEAR CQ("-07-02")) },
{ CQ("%x"), OUTSIZE, EXP(CQ("07/02/")Year) },
{ CQ("%y"), OUTSIZE, EXP(Year) },
{ CQ("%Y"), OUTSIZE, EXP(YEAR) },
#undef EXP
};
#undef YEAR
#undef CENT
#undef Year
const struct list ListYr[] = {
{ &tmyrzp, Vecyrzp, sizeof(Vecyrzp)/sizeof(Vecyrzp[0]) },
{ &tmyrzn, Vecyrzn, sizeof(Vecyrzn)/sizeof(Vecyrzn[0]) },
#if YEAR_BASE == 1900
{ &tmyr0, Vecyr0, sizeof(Vecyr0)/sizeof(Vecyr0[0]) },
{ &tmyr1, Vecyr1, sizeof(Vecyr1)/sizeof(Vecyr1[0]) },
#endif
};
/* List of tests to be run */
const struct list List[] = {
{ &tm0, Vec0, sizeof(Vec0)/sizeof(Vec0[0]) },
{ &tm1, Vec1, sizeof(Vec1)/sizeof(Vec1[0]) },
};
#if defined(STUB_getenv_r)
char *
_getenv_r(struct _reent *p, const char *cp) { return getenv(cp); }
#endif
int
main(void)
{
int i, l, errr=0, erro=0, tot=0;
const char *cp;
CHAR out[OUTSIZE];
size_t ret;
/* Set timezone so that %z and %Z tests come out right */
cp = TZ;
if((i=putenv(cp))) {
printf( "putenv(%s) FAILED, ret %d\n", cp, i);
return(-1);
}
if(strcmp(getenv("TZ"),strchr(TZ,'=')+1)) {
printf( "TZ not set properly in environment\n");
return(-2);
}
tzset();
 
#if defined(VERBOSE)
printf("_timezone=%d, _daylight=%d, _tzname[0]=%s, _tzname[1]=%s\n", _timezone, _daylight, _tzname[0], _tzname[1]);
{
long offset;
__tzinfo_type *tz = __gettzinfo ();
/* The sign of this is exactly opposite the envvar TZ. We
could directly use the global _timezone for tm_isdst==0,
but have to use __tzrule for daylight savings. */
printf("tz->__tzrule[0].offset=%d, tz->__tzrule[1].offset=%d\n", tz->__tzrule[0].offset, tz->__tzrule[1].offset);
}
#endif
/* Run all of the exact-length tests as-given--results should match */
for(l=0; l<sizeof(List)/sizeof(List[0]); l++) {
const struct list *test = &List[l];
for(i=0; i<test->cnt; i++) {
tot++; /* Keep track of number of tests */
ret = strftime(out, test->vec[i].max, test->vec[i].fmt, test->tms);
if(ret != test->vec[i].ret) {
errr++;
fprintf(stderr,
"ERROR: return %d != %d expected for List[%d].vec[%d]\n",
ret, test->vec[i].ret, l, i);
}
if(strncmp(out, test->vec[i].out, test->vec[i].max-1)) {
erro++;
fprintf(stderr,
"ERROR: \"%"SFLG"s\" != \"%"SFLG"s\" expected for List[%d].vec[%d]\n",
out, test->vec[i].out, l, i);
}
}
}
/* Run all of the exact-length tests with the length made too short--expect to
* fail. */
for(l=0; l<sizeof(List)/sizeof(List[0]); l++) {
const struct list *test = &List[l];
for(i=0; i<test->cnt; i++) {
tot++; /* Keep track of number of tests */
ret = strftime(out, test->vec[i].max-1, test->vec[i].fmt, test->tms);
if(ret != 0) {
errr++;
fprintf(stderr,
"ERROR: return %d != %d expected for List[%d].vec[%d]\n",
ret, 0, l, i);
}
/* Almost every conversion puts out as many characters as possible, so
* go ahead and test the output even though have failed. (The test
* times chosen happen to not hit any of the cases that fail this, so it
* works.) */
if(strncmp(out, test->vec[i].out, test->vec[i].max-1-1)) {
erro++;
fprintf(stderr,
"ERROR: \"%"SFLG"s\" != \"%"SFLG"s\" expected for List[%d].vec[%d]\n",
out, test->vec[i].out, l, i);
}
}
}
/* Run all of the special year test cases */
for(l=0; l<sizeof(ListYr)/sizeof(ListYr[0]); l++) {
const struct list *test = &ListYr[l];
for(i=0; i<test->cnt; i++) {
tot++; /* Keep track of number of tests */
ret = strftime(out, test->vec[i].max, test->vec[i].fmt, test->tms);
if(ret != test->vec[i].ret) {
errr++;
fprintf(stderr,
"ERROR: return %d != %d expected for ListYr[%d].vec[%d]\n",
ret, test->vec[i].ret, l, i);
}
if(strncmp(out, test->vec[i].out, test->vec[i].max-1)) {
erro++;
fprintf(stderr,
"ERROR: \"%"SFLG"s\" != \"%"SFLG"s\" expected for ListYr[%d].vec[%d]\n",
out, test->vec[i].out, l, i);
}
}
}
#define STRIZE(f) #f
#define NAME(f) STRIZE(f)
printf(NAME(strftime) "() test ");
if(errr || erro) printf("FAILED %d/%d of", errr, erro);
else printf("passed");
printf(" %d test cases.\n", tot);
return(errr || erro);
}
#endif /* defined(_REGRESSION_TEST) ] */
/contrib/sdk/sources/newlib/libc/time/time.c
51,11 → 51,3
}
return -1;
}
 
int
_DEFUN (gettimeofday, (ptimeval, ptimezone),
struct timeval *ptimeval _AND
void *ptimezone)
{
return _gettimeofday_r (_REENT, ptimeval, ptimezone);
}
/contrib/sdk/sources/newlib/libc/time/timelocal.c
0,0 → 1,188
/*-
* Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org>
* Copyright (c) 1997 FreeBSD Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
 
#include <sys/cdefs.h>
 
#include <stddef.h>
 
#include "ldpart.h"
#include "timelocal.h"
 
static struct lc_time_T _time_locale;
static int _time_using_locale;
static char *time_locale_buf;
 
#define LCTIME_SIZE (sizeof(struct lc_time_T) / sizeof(char *))
 
static const struct lc_time_T _C_time_locale = {
{
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
}, {
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
}, {
"Sun", "Mon", "Tue", "Wed",
"Thu", "Fri", "Sat"
}, {
"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"
},
 
/* X_fmt */
"%H:%M:%S",
 
/*
* x_fmt
* Since the C language standard calls for
* "date, using locale's date format," anything goes.
* Using just numbers (as here) makes Quakers happier;
* it's also compatible with SVR4.
*/
"%m/%d/%y",
 
/*
* c_fmt
*/
"%a %b %e %H:%M:%S %Y",
 
/* am pm */
{ "AM", "PM" },
 
/* date_fmt */
"%a %b %e %H:%M:%S %Z %Y",
/* alt_month
* Standalone months forms for %OB
*/
{
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
},
 
/* md_order
* Month / day order in dates
*/
"md",
 
/* ampm_fmt
* To determine 12-hour clock format time (empty, if N/A)
*/
"%I:%M:%S %p",
 
/* era
* Era. This and the following entries are used if the alternative
* date format is specified in strftime
*/
"",
 
/* era_d_fmt
* Era date format used with the %Ex
*/
"",
 
/* era_d_t_fmt
* Era date/time format (%Ec)
*/
"",
 
/* era_t_fmt
* Era time format (%EX)
*/
"",
 
/* alt_digits
* Alternate digits used if %O format prefix is specified
*/
""
#ifdef __HAVE_LOCALE_INFO_EXTENDED__
, "ASCII", /* codeset */
{
L"Jan", L"Feb", L"Mar", L"Apr", L"May", L"Jun",
L"Jul", L"Aug", L"Sep", L"Oct", L"Nov", L"Dec"
}, {
L"January", L"February", L"March", L"April", L"May", L"June",
L"July", L"August", L"September", L"October", L"November",
L"December"
}, {
L"Sun", L"Mon", L"Tue", L"Wed",
L"Thu", L"Fri", L"Sat"
}, {
L"Sunday", L"Monday", L"Tuesday", L"Wednesday",
L"Thursday", L"Friday", L"Saturday"
},
L"%H:%M:%S",
L"%m/%d/%y",
L"%a %b %e %H:%M:%S %Y",
{ L"AM", L"PM" },
L"%a %b %e %H:%M:%S %Z %Y",
L"%I:%M:%S %p",
L"",
L"",
L"",
L"",
L""
#endif
};
 
struct lc_time_T *
__get_current_time_locale(void) {
return (_time_using_locale
? &_time_locale
: (struct lc_time_T *)&_C_time_locale);
}
 
int
__time_load_locale(const char *name, void *f_wctomb, const char *charset) {
 
int ret;
 
#ifdef __CYGWIN__
extern int __set_lc_time_from_win (const char *,
const struct lc_time_T *,
struct lc_time_T *,
char **, void *, const char *);
int old_time_using_locale = _time_using_locale;
_time_using_locale = 0;
ret = __set_lc_time_from_win (name, &_C_time_locale, &_time_locale,
&time_locale_buf, f_wctomb, charset);
/* ret == -1: error, ret == 0: C/POSIX, ret > 0: valid */
if (ret < 0)
_time_using_locale = old_time_using_locale;
else
{
_time_using_locale = ret;
ret = 0;
}
#else
ret = __part_load_locale(name, &_time_using_locale,
time_locale_buf, "LC_TIME",
LCTIME_SIZE, LCTIME_SIZE,
(const char **)&_time_locale);
#endif
return (ret);
}
/contrib/sdk/sources/newlib/libc/time/timelocal.h
0,0 → 1,85
/*-
* Copyright (c) 1997-2002 FreeBSD Project.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD: src/lib/libc/stdtime/timelocal.h,v 1.11 2002/01/24 15:07:44 phantom Exp $
*/
 
#ifndef _TIMELOCAL_H_
#define _TIMELOCAL_H_
 
#include <_ansi.h>
#include <sys/cdefs.h>
#include <wchar.h>
 
__BEGIN_DECLS
 
/*
* Private header file for the strftime and strptime localization
* stuff.
*/
struct lc_time_T {
const char *mon[12];
const char *month[12];
const char *wday[7];
const char *weekday[7];
const char *X_fmt;
const char *x_fmt;
const char *c_fmt;
const char *am_pm[2];
const char *date_fmt;
const char *alt_month[12]; /* unused */
const char *md_order;
const char *ampm_fmt;
const char *era;
const char *era_d_fmt;
const char *era_d_t_fmt;
const char *era_t_fmt;
const char *alt_digits;
#ifdef __HAVE_LOCALE_INFO_EXTENDED__
const char *codeset; /* codeset for mbtowc conversion */
const wchar_t *wmon[12];
const wchar_t *wmonth[12];
const wchar_t *wwday[7];
const wchar_t *wweekday[7];
const wchar_t *wX_fmt;
const wchar_t *wx_fmt;
const wchar_t *wc_fmt;
const wchar_t *wam_pm[2];
const wchar_t *wdate_fmt;
const wchar_t *wampm_fmt;
const wchar_t *wera;
const wchar_t *wera_d_fmt;
const wchar_t *wera_d_t_fmt;
const wchar_t *wera_t_fmt;
const wchar_t *walt_digits;
#endif
};
 
struct lc_time_T *__get_current_time_locale(void);
int __time_load_locale(const char *, void *, const char *);
 
__END_DECLS
 
#endif /* !_TIMELOCAL_H_ */