forked from M-Labs/artiq-zynq
Libunwind: added system header
This commit is contained in:
parent
fd229a1b26
commit
b21cccb4d2
|
@ -0,0 +1,82 @@
|
||||||
|
/* Provide support for both ANSI and non-ANSI environments. */
|
||||||
|
|
||||||
|
/* To get a strict ANSI C environment, define macro __STRICT_ANSI__. This will
|
||||||
|
"comment out" the non-ANSI parts of the ANSI header files (non-ANSI header
|
||||||
|
files aren't affected). */
|
||||||
|
|
||||||
|
#ifndef _ANSIDECL_H_
|
||||||
|
#define _ANSIDECL_H_
|
||||||
|
|
||||||
|
#include <newlib.h>
|
||||||
|
#include <sys/config.h>
|
||||||
|
|
||||||
|
/* ISO C++. */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#if !(defined(_BEGIN_STD_C) && defined(_END_STD_C))
|
||||||
|
#ifdef _HAVE_STD_CXX
|
||||||
|
#define _BEGIN_STD_C namespace std { extern "C" {
|
||||||
|
#define _END_STD_C } }
|
||||||
|
#else
|
||||||
|
#define _BEGIN_STD_C extern "C" {
|
||||||
|
#define _END_STD_C }
|
||||||
|
#endif
|
||||||
|
#if __GNUC_PREREQ (3, 3)
|
||||||
|
#define _NOTHROW __attribute__ ((__nothrow__))
|
||||||
|
#else
|
||||||
|
#define _NOTHROW throw()
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define _BEGIN_STD_C
|
||||||
|
#define _END_STD_C
|
||||||
|
#define _NOTHROW
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _LONG_DOUBLE
|
||||||
|
#define _LONG_DOUBLE long double
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Support gcc's __attribute__ facility. */
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define _ATTRIBUTE(attrs) __attribute__ (attrs)
|
||||||
|
#else
|
||||||
|
#define _ATTRIBUTE(attrs)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The traditional meaning of 'extern inline' for GCC is not
|
||||||
|
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. 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__))
|
||||||
|
#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 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_ */
|
|
@ -0,0 +1,12 @@
|
||||||
|
/* _newlib_version.h. Generated from _newlib_version.hin by configure. */
|
||||||
|
/* Version macros for internal and downstream use. */
|
||||||
|
#ifndef _NEWLIB_VERSION_H__
|
||||||
|
#define _NEWLIB_VERSION_H__ 1
|
||||||
|
|
||||||
|
#define _NEWLIB_VERSION "3.1.0"
|
||||||
|
#define __NEWLIB__ 3
|
||||||
|
#define __NEWLIB_MINOR__ 1
|
||||||
|
#define __NEWLIB_PATCHLEVEL__ 0
|
||||||
|
|
||||||
|
#endif /* !_NEWLIB_VERSION_H__ */
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
/* libc/include/alloca.h - Allocate memory on stack */
|
||||||
|
|
||||||
|
/* Written 2000 by Werner Almesberger */
|
||||||
|
/* Rearranged for general inclusion by stdlib.h.
|
||||||
|
2001, Corinna Vinschen <vinschen@redhat.com> */
|
||||||
|
|
||||||
|
#ifndef _NEWLIB_ALLOCA_H
|
||||||
|
#define _NEWLIB_ALLOCA_H
|
||||||
|
|
||||||
|
#include "_ansi.h"
|
||||||
|
#include <sys/reent.h>
|
||||||
|
|
||||||
|
#undef alloca
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define alloca(size) __builtin_alloca(size)
|
||||||
|
#else
|
||||||
|
void * alloca (size_t);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
assert.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "_ansi.h"
|
||||||
|
|
||||||
|
#undef assert
|
||||||
|
|
||||||
|
#ifdef NDEBUG /* required by ANSI standard */
|
||||||
|
# define assert(__e) ((void)0)
|
||||||
|
#else
|
||||||
|
# define assert(__e) ((__e) ? (void)0 : __assert_func (__FILE__, __LINE__, \
|
||||||
|
__ASSERT_FUNC, #__e))
|
||||||
|
|
||||||
|
# ifndef __ASSERT_FUNC
|
||||||
|
/* Use g++'s demangled names in C++. */
|
||||||
|
# if defined __cplusplus && defined __GNUC__
|
||||||
|
# define __ASSERT_FUNC __PRETTY_FUNCTION__
|
||||||
|
|
||||||
|
/* C99 requires the use of __func__. */
|
||||||
|
# elif __STDC_VERSION__ >= 199901L
|
||||||
|
# define __ASSERT_FUNC __func__
|
||||||
|
|
||||||
|
/* Older versions of gcc don't have __func__ but can use __FUNCTION__. */
|
||||||
|
# elif __GNUC__ >= 2
|
||||||
|
# define __ASSERT_FUNC __FUNCTION__
|
||||||
|
|
||||||
|
/* failed to detect __func__ support. */
|
||||||
|
# else
|
||||||
|
# define __ASSERT_FUNC ((char *) 0)
|
||||||
|
# endif
|
||||||
|
# endif /* !__ASSERT_FUNC */
|
||||||
|
#endif /* !NDEBUG */
|
||||||
|
|
||||||
|
void __assert (const char *, int, const char *)
|
||||||
|
_ATTRIBUTE ((__noreturn__));
|
||||||
|
void __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
|
|
@ -0,0 +1,345 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004, 2005 by
|
||||||
|
* Ralf Corsepius, Ulm/Germany. All rights reserved.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software
|
||||||
|
* is freely granted, provided that this notice is preserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file inttypes.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INTTYPES_H
|
||||||
|
#define _INTTYPES_H
|
||||||
|
|
||||||
|
#include <newlib.h>
|
||||||
|
#include <sys/config.h>
|
||||||
|
#include <sys/_intsup.h>
|
||||||
|
#include "_ansi.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
#define __need_wchar_t
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
#include <xlocale.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define __STRINGIFY(a) #a
|
||||||
|
|
||||||
|
/* 8-bit types */
|
||||||
|
#define __PRI8(x) __INT8 __STRINGIFY(x)
|
||||||
|
#define __PRI8LEAST(x) __LEAST8 __STRINGIFY(x)
|
||||||
|
#define __PRI8FAST(x) __FAST8 __STRINGIFY(x)
|
||||||
|
|
||||||
|
/* NOTICE: scanning 8-bit types requires use of the hh specifier
|
||||||
|
* which is only supported on newlib platforms that
|
||||||
|
* are built with C99 I/O format support enabled. If the flag in
|
||||||
|
* newlib.h hasn't been set during configuration to indicate this, the 8-bit
|
||||||
|
* scanning format macros are disabled here as they result in undefined
|
||||||
|
* behaviour which can include memory overwrite. Overriding the flag after the
|
||||||
|
* library has been built is not recommended as it will expose the underlying
|
||||||
|
* undefined behaviour.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(_WANT_IO_C99_FORMATS)
|
||||||
|
#define __SCN8(x) __INT8 __STRINGIFY(x)
|
||||||
|
#define __SCN8LEAST(x) __LEAST8 __STRINGIFY(x)
|
||||||
|
#define __SCN8FAST(x) __FAST8 __STRINGIFY(x)
|
||||||
|
#endif /* _WANT_IO_C99_FORMATS */
|
||||||
|
|
||||||
|
|
||||||
|
#define PRId8 __PRI8(d)
|
||||||
|
#define PRIi8 __PRI8(i)
|
||||||
|
#define PRIo8 __PRI8(o)
|
||||||
|
#define PRIu8 __PRI8(u)
|
||||||
|
#define PRIx8 __PRI8(x)
|
||||||
|
#define PRIX8 __PRI8(X)
|
||||||
|
|
||||||
|
/* Macros below are only enabled for a newlib built with C99 I/O format support. */
|
||||||
|
#if defined(_WANT_IO_C99_FORMATS)
|
||||||
|
|
||||||
|
#define SCNd8 __SCN8(d)
|
||||||
|
#define SCNi8 __SCN8(i)
|
||||||
|
#define SCNo8 __SCN8(o)
|
||||||
|
#define SCNu8 __SCN8(u)
|
||||||
|
#define SCNx8 __SCN8(x)
|
||||||
|
|
||||||
|
#endif /* _WANT_IO_C99_FORMATS */
|
||||||
|
|
||||||
|
|
||||||
|
#define PRIdLEAST8 __PRI8LEAST(d)
|
||||||
|
#define PRIiLEAST8 __PRI8LEAST(i)
|
||||||
|
#define PRIoLEAST8 __PRI8LEAST(o)
|
||||||
|
#define PRIuLEAST8 __PRI8LEAST(u)
|
||||||
|
#define PRIxLEAST8 __PRI8LEAST(x)
|
||||||
|
#define PRIXLEAST8 __PRI8LEAST(X)
|
||||||
|
|
||||||
|
/* Macros below are only enabled for a newlib built with C99 I/O format support. */
|
||||||
|
#if defined(_WANT_IO_C99_FORMATS)
|
||||||
|
|
||||||
|
#define SCNdLEAST8 __SCN8LEAST(d)
|
||||||
|
#define SCNiLEAST8 __SCN8LEAST(i)
|
||||||
|
#define SCNoLEAST8 __SCN8LEAST(o)
|
||||||
|
#define SCNuLEAST8 __SCN8LEAST(u)
|
||||||
|
#define SCNxLEAST8 __SCN8LEAST(x)
|
||||||
|
|
||||||
|
#endif /* _WANT_IO_C99_FORMATS */
|
||||||
|
|
||||||
|
#define PRIdFAST8 __PRI8FAST(d)
|
||||||
|
#define PRIiFAST8 __PRI8FAST(i)
|
||||||
|
#define PRIoFAST8 __PRI8FAST(o)
|
||||||
|
#define PRIuFAST8 __PRI8FAST(u)
|
||||||
|
#define PRIxFAST8 __PRI8FAST(x)
|
||||||
|
#define PRIXFAST8 __PRI8FAST(X)
|
||||||
|
|
||||||
|
/* Macros below are only enabled for a newlib built with C99 I/O format support. */
|
||||||
|
#if defined(_WANT_IO_C99_FORMATS)
|
||||||
|
|
||||||
|
#define SCNdFAST8 __SCN8FAST(d)
|
||||||
|
#define SCNiFAST8 __SCN8FAST(i)
|
||||||
|
#define SCNoFAST8 __SCN8FAST(o)
|
||||||
|
#define SCNuFAST8 __SCN8FAST(u)
|
||||||
|
#define SCNxFAST8 __SCN8FAST(x)
|
||||||
|
|
||||||
|
#endif /* _WANT_IO_C99_FORMATS */
|
||||||
|
|
||||||
|
/* 16-bit types */
|
||||||
|
#define __PRI16(x) __INT16 __STRINGIFY(x)
|
||||||
|
#define __PRI16LEAST(x) __LEAST16 __STRINGIFY(x)
|
||||||
|
#define __PRI16FAST(x) __FAST16 __STRINGIFY(x)
|
||||||
|
#define __SCN16(x) __INT16 __STRINGIFY(x)
|
||||||
|
#define __SCN16LEAST(x) __LEAST16 __STRINGIFY(x)
|
||||||
|
#define __SCN16FAST(x) __FAST16 __STRINGIFY(x)
|
||||||
|
|
||||||
|
|
||||||
|
#define PRId16 __PRI16(d)
|
||||||
|
#define PRIi16 __PRI16(i)
|
||||||
|
#define PRIo16 __PRI16(o)
|
||||||
|
#define PRIu16 __PRI16(u)
|
||||||
|
#define PRIx16 __PRI16(x)
|
||||||
|
#define PRIX16 __PRI16(X)
|
||||||
|
|
||||||
|
#define SCNd16 __SCN16(d)
|
||||||
|
#define SCNi16 __SCN16(i)
|
||||||
|
#define SCNo16 __SCN16(o)
|
||||||
|
#define SCNu16 __SCN16(u)
|
||||||
|
#define SCNx16 __SCN16(x)
|
||||||
|
|
||||||
|
|
||||||
|
#define PRIdLEAST16 __PRI16LEAST(d)
|
||||||
|
#define PRIiLEAST16 __PRI16LEAST(i)
|
||||||
|
#define PRIoLEAST16 __PRI16LEAST(o)
|
||||||
|
#define PRIuLEAST16 __PRI16LEAST(u)
|
||||||
|
#define PRIxLEAST16 __PRI16LEAST(x)
|
||||||
|
#define PRIXLEAST16 __PRI16LEAST(X)
|
||||||
|
|
||||||
|
#define SCNdLEAST16 __SCN16LEAST(d)
|
||||||
|
#define SCNiLEAST16 __SCN16LEAST(i)
|
||||||
|
#define SCNoLEAST16 __SCN16LEAST(o)
|
||||||
|
#define SCNuLEAST16 __SCN16LEAST(u)
|
||||||
|
#define SCNxLEAST16 __SCN16LEAST(x)
|
||||||
|
|
||||||
|
|
||||||
|
#define PRIdFAST16 __PRI16FAST(d)
|
||||||
|
#define PRIiFAST16 __PRI16FAST(i)
|
||||||
|
#define PRIoFAST16 __PRI16FAST(o)
|
||||||
|
#define PRIuFAST16 __PRI16FAST(u)
|
||||||
|
#define PRIxFAST16 __PRI16FAST(x)
|
||||||
|
#define PRIXFAST16 __PRI16FAST(X)
|
||||||
|
|
||||||
|
#define SCNdFAST16 __SCN16FAST(d)
|
||||||
|
#define SCNiFAST16 __SCN16FAST(i)
|
||||||
|
#define SCNoFAST16 __SCN16FAST(o)
|
||||||
|
#define SCNuFAST16 __SCN16FAST(u)
|
||||||
|
#define SCNxFAST16 __SCN16FAST(x)
|
||||||
|
|
||||||
|
/* 32-bit types */
|
||||||
|
#define __PRI32(x) __INT32 __STRINGIFY(x)
|
||||||
|
#define __SCN32(x) __INT32 __STRINGIFY(x)
|
||||||
|
#define __PRI32LEAST(x) __LEAST32 __STRINGIFY(x)
|
||||||
|
#define __SCN32LEAST(x) __LEAST32 __STRINGIFY(x)
|
||||||
|
#define __PRI32FAST(x) __FAST32 __STRINGIFY(x)
|
||||||
|
#define __SCN32FAST(x) __FAST32 __STRINGIFY(x)
|
||||||
|
|
||||||
|
#define PRId32 __PRI32(d)
|
||||||
|
#define PRIi32 __PRI32(i)
|
||||||
|
#define PRIo32 __PRI32(o)
|
||||||
|
#define PRIu32 __PRI32(u)
|
||||||
|
#define PRIx32 __PRI32(x)
|
||||||
|
#define PRIX32 __PRI32(X)
|
||||||
|
|
||||||
|
#define SCNd32 __SCN32(d)
|
||||||
|
#define SCNi32 __SCN32(i)
|
||||||
|
#define SCNo32 __SCN32(o)
|
||||||
|
#define SCNu32 __SCN32(u)
|
||||||
|
#define SCNx32 __SCN32(x)
|
||||||
|
|
||||||
|
|
||||||
|
#define PRIdLEAST32 __PRI32LEAST(d)
|
||||||
|
#define PRIiLEAST32 __PRI32LEAST(i)
|
||||||
|
#define PRIoLEAST32 __PRI32LEAST(o)
|
||||||
|
#define PRIuLEAST32 __PRI32LEAST(u)
|
||||||
|
#define PRIxLEAST32 __PRI32LEAST(x)
|
||||||
|
#define PRIXLEAST32 __PRI32LEAST(X)
|
||||||
|
|
||||||
|
#define SCNdLEAST32 __SCN32LEAST(d)
|
||||||
|
#define SCNiLEAST32 __SCN32LEAST(i)
|
||||||
|
#define SCNoLEAST32 __SCN32LEAST(o)
|
||||||
|
#define SCNuLEAST32 __SCN32LEAST(u)
|
||||||
|
#define SCNxLEAST32 __SCN32LEAST(x)
|
||||||
|
|
||||||
|
|
||||||
|
#define PRIdFAST32 __PRI32FAST(d)
|
||||||
|
#define PRIiFAST32 __PRI32FAST(i)
|
||||||
|
#define PRIoFAST32 __PRI32FAST(o)
|
||||||
|
#define PRIuFAST32 __PRI32FAST(u)
|
||||||
|
#define PRIxFAST32 __PRI32FAST(x)
|
||||||
|
#define PRIXFAST32 __PRI32FAST(X)
|
||||||
|
|
||||||
|
#define SCNdFAST32 __SCN32FAST(d)
|
||||||
|
#define SCNiFAST32 __SCN32FAST(i)
|
||||||
|
#define SCNoFAST32 __SCN32FAST(o)
|
||||||
|
#define SCNuFAST32 __SCN32FAST(u)
|
||||||
|
#define SCNxFAST32 __SCN32FAST(x)
|
||||||
|
|
||||||
|
|
||||||
|
/* 64-bit types */
|
||||||
|
#define __PRI64(x) __INT64 __STRINGIFY(x)
|
||||||
|
#define __SCN64(x) __INT64 __STRINGIFY(x)
|
||||||
|
|
||||||
|
#define __PRI64LEAST(x) __LEAST64 __STRINGIFY(x)
|
||||||
|
#define __SCN64LEAST(x) __LEAST64 __STRINGIFY(x)
|
||||||
|
#define __PRI64FAST(x) __FAST64 __STRINGIFY(x)
|
||||||
|
#define __SCN64FAST(x) __FAST64 __STRINGIFY(x)
|
||||||
|
|
||||||
|
#if __int64_t_defined
|
||||||
|
#define PRId64 __PRI64(d)
|
||||||
|
#define PRIi64 __PRI64(i)
|
||||||
|
#define PRIo64 __PRI64(o)
|
||||||
|
#define PRIu64 __PRI64(u)
|
||||||
|
#define PRIx64 __PRI64(x)
|
||||||
|
#define PRIX64 __PRI64(X)
|
||||||
|
|
||||||
|
#define SCNd64 __SCN64(d)
|
||||||
|
#define SCNi64 __SCN64(i)
|
||||||
|
#define SCNo64 __SCN64(o)
|
||||||
|
#define SCNu64 __SCN64(u)
|
||||||
|
#define SCNx64 __SCN64(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __int_least64_t_defined
|
||||||
|
#define PRIdLEAST64 __PRI64LEAST(d)
|
||||||
|
#define PRIiLEAST64 __PRI64LEAST(i)
|
||||||
|
#define PRIoLEAST64 __PRI64LEAST(o)
|
||||||
|
#define PRIuLEAST64 __PRI64LEAST(u)
|
||||||
|
#define PRIxLEAST64 __PRI64LEAST(x)
|
||||||
|
#define PRIXLEAST64 __PRI64LEAST(X)
|
||||||
|
|
||||||
|
#define SCNdLEAST64 __SCN64LEAST(d)
|
||||||
|
#define SCNiLEAST64 __SCN64LEAST(i)
|
||||||
|
#define SCNoLEAST64 __SCN64LEAST(o)
|
||||||
|
#define SCNuLEAST64 __SCN64LEAST(u)
|
||||||
|
#define SCNxLEAST64 __SCN64LEAST(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __int_fast64_t_defined
|
||||||
|
#define PRIdFAST64 __PRI64FAST(d)
|
||||||
|
#define PRIiFAST64 __PRI64FAST(i)
|
||||||
|
#define PRIoFAST64 __PRI64FAST(o)
|
||||||
|
#define PRIuFAST64 __PRI64FAST(u)
|
||||||
|
#define PRIxFAST64 __PRI64FAST(x)
|
||||||
|
#define PRIXFAST64 __PRI64FAST(X)
|
||||||
|
|
||||||
|
#define SCNdFAST64 __SCN64FAST(d)
|
||||||
|
#define SCNiFAST64 __SCN64FAST(i)
|
||||||
|
#define SCNoFAST64 __SCN64FAST(o)
|
||||||
|
#define SCNuFAST64 __SCN64FAST(u)
|
||||||
|
#define SCNxFAST64 __SCN64FAST(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* max-bit types */
|
||||||
|
#if __have_long64
|
||||||
|
#define __PRIMAX(x) __STRINGIFY(l##x)
|
||||||
|
#define __SCNMAX(x) __STRINGIFY(l##x)
|
||||||
|
#elif __have_longlong64
|
||||||
|
#define __PRIMAX(x) __STRINGIFY(ll##x)
|
||||||
|
#define __SCNMAX(x) __STRINGIFY(ll##x)
|
||||||
|
#else
|
||||||
|
#define __PRIMAX(x) __STRINGIFY(x)
|
||||||
|
#define __SCNMAX(x) __STRINGIFY(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PRIdMAX __PRIMAX(d)
|
||||||
|
#define PRIiMAX __PRIMAX(i)
|
||||||
|
#define PRIoMAX __PRIMAX(o)
|
||||||
|
#define PRIuMAX __PRIMAX(u)
|
||||||
|
#define PRIxMAX __PRIMAX(x)
|
||||||
|
#define PRIXMAX __PRIMAX(X)
|
||||||
|
|
||||||
|
#define SCNdMAX __SCNMAX(d)
|
||||||
|
#define SCNiMAX __SCNMAX(i)
|
||||||
|
#define SCNoMAX __SCNMAX(o)
|
||||||
|
#define SCNuMAX __SCNMAX(u)
|
||||||
|
#define SCNxMAX __SCNMAX(x)
|
||||||
|
|
||||||
|
/* ptr types */
|
||||||
|
#if defined (_INTPTR_EQ_LONGLONG)
|
||||||
|
# define __PRIPTR(x) __STRINGIFY(ll##x)
|
||||||
|
# define __SCNPTR(x) __STRINGIFY(ll##x)
|
||||||
|
#elif defined (_INTPTR_EQ_LONG)
|
||||||
|
# define __PRIPTR(x) __STRINGIFY(l##x)
|
||||||
|
# define __SCNPTR(x) __STRINGIFY(l##x)
|
||||||
|
#else
|
||||||
|
# define __PRIPTR(x) __STRINGIFY(x)
|
||||||
|
# define __SCNPTR(x) __STRINGIFY(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PRIdPTR __PRIPTR(d)
|
||||||
|
#define PRIiPTR __PRIPTR(i)
|
||||||
|
#define PRIoPTR __PRIPTR(o)
|
||||||
|
#define PRIuPTR __PRIPTR(u)
|
||||||
|
#define PRIxPTR __PRIPTR(x)
|
||||||
|
#define PRIXPTR __PRIPTR(X)
|
||||||
|
|
||||||
|
#define SCNdPTR __SCNPTR(d)
|
||||||
|
#define SCNiPTR __SCNPTR(i)
|
||||||
|
#define SCNoPTR __SCNPTR(o)
|
||||||
|
#define SCNuPTR __SCNPTR(u)
|
||||||
|
#define SCNxPTR __SCNPTR(x)
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
intmax_t quot;
|
||||||
|
intmax_t rem;
|
||||||
|
} imaxdiv_t;
|
||||||
|
|
||||||
|
struct _reent;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern intmax_t imaxabs(intmax_t j);
|
||||||
|
extern imaxdiv_t imaxdiv(intmax_t numer, intmax_t denomer);
|
||||||
|
extern intmax_t strtoimax(const char *__restrict, char **__restrict, int);
|
||||||
|
extern intmax_t _strtoimax_r(struct _reent *, const char *__restrict, char **__restrict, int);
|
||||||
|
extern uintmax_t strtoumax(const char *__restrict, char **__restrict, int);
|
||||||
|
extern uintmax_t _strtoumax_r(struct _reent *, const char *__restrict, char **__restrict, int);
|
||||||
|
extern intmax_t wcstoimax(const wchar_t *__restrict, wchar_t **__restrict, int);
|
||||||
|
extern intmax_t _wcstoimax_r(struct _reent *, const wchar_t *__restrict, wchar_t **__restrict, int);
|
||||||
|
extern uintmax_t wcstoumax(const wchar_t *__restrict, wchar_t **__restrict, int);
|
||||||
|
extern uintmax_t _wcstoumax_r(struct _reent *, const wchar_t *__restrict, wchar_t **__restrict, int);
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
extern intmax_t strtoimax_l(const char *__restrict, char **_restrict, int, locale_t);
|
||||||
|
extern uintmax_t strtoumax_l(const char *__restrict, char **_restrict, int, locale_t);
|
||||||
|
extern intmax_t wcstoimax_l(const wchar_t *__restrict, wchar_t **_restrict, int, locale_t);
|
||||||
|
extern uintmax_t wcstoumax_l(const wchar_t *__restrict, wchar_t **_restrict, int, locale_t);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,250 @@
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MACHINE__DEFAULT_TYPES_H
|
||||||
|
#define _MACHINE__DEFAULT_TYPES_H
|
||||||
|
|
||||||
|
#include <sys/features.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Guess on types by examining *_MIN / *_MAX defines.
|
||||||
|
*/
|
||||||
|
#if __GNUC_PREREQ (3, 3)
|
||||||
|
/* GCC >= 3.3.0 has __<val>__ implicitly defined. */
|
||||||
|
#define __EXP(x) __##x##__
|
||||||
|
#else
|
||||||
|
/* Fall back to POSIX versions from <limits.h> */
|
||||||
|
#define __EXP(x) x
|
||||||
|
#include <limits.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Check if "long long" is 64bit wide */
|
||||||
|
/* Modern GCCs provide __LONG_LONG_MAX__, SUSv3 wants LLONG_MAX */
|
||||||
|
#if ( defined(__LONG_LONG_MAX__) && (__LONG_LONG_MAX__ > 0x7fffffff) ) \
|
||||||
|
|| ( defined(LLONG_MAX) && (LLONG_MAX > 0x7fffffff) )
|
||||||
|
#define __have_longlong64 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Check if "long" is 64bit or 32bit wide */
|
||||||
|
#if __EXP(LONG_MAX) > 0x7fffffff
|
||||||
|
#define __have_long64 1
|
||||||
|
#elif __EXP(LONG_MAX) == 0x7fffffff && !defined(__SPU__)
|
||||||
|
#define __have_long32 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __INT8_TYPE__
|
||||||
|
typedef __INT8_TYPE__ __int8_t;
|
||||||
|
#ifdef __UINT8_TYPE__
|
||||||
|
typedef __UINT8_TYPE__ __uint8_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned __INT8_TYPE__ __uint8_t;
|
||||||
|
#endif
|
||||||
|
#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
|
||||||
|
|
||||||
|
#ifdef __INT16_TYPE__
|
||||||
|
typedef __INT16_TYPE__ __int16_t;
|
||||||
|
#ifdef __UINT16_TYPE__
|
||||||
|
typedef __UINT16_TYPE__ __uint16_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned __INT16_TYPE__ __uint16_t;
|
||||||
|
#endif
|
||||||
|
#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
|
||||||
|
#elif __EXP(SHRT_MAX) == 0x7fff
|
||||||
|
typedef signed short __int16_t;
|
||||||
|
typedef unsigned short __uint16_t;
|
||||||
|
#define ___int16_t_defined 1
|
||||||
|
#elif __EXP(SCHAR_MAX) == 0x7fff
|
||||||
|
typedef signed char __int16_t;
|
||||||
|
typedef unsigned char __uint16_t;
|
||||||
|
#define ___int16_t_defined 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __INT32_TYPE__
|
||||||
|
typedef __INT32_TYPE__ __int32_t;
|
||||||
|
#ifdef __UINT32_TYPE__
|
||||||
|
typedef __UINT32_TYPE__ __uint32_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned __INT32_TYPE__ __uint32_t;
|
||||||
|
#endif
|
||||||
|
#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
|
||||||
|
#elif __EXP(LONG_MAX) == 0x7fffffffL
|
||||||
|
typedef signed long __int32_t;
|
||||||
|
typedef unsigned long __uint32_t;
|
||||||
|
#define ___int32_t_defined 1
|
||||||
|
#elif __EXP(SHRT_MAX) == 0x7fffffffL
|
||||||
|
typedef signed short __int32_t;
|
||||||
|
typedef unsigned short __uint32_t;
|
||||||
|
#define ___int32_t_defined 1
|
||||||
|
#elif __EXP(SCHAR_MAX) == 0x7fffffffL
|
||||||
|
typedef signed char __int32_t;
|
||||||
|
typedef unsigned char __uint32_t;
|
||||||
|
#define ___int32_t_defined 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __INT64_TYPE__
|
||||||
|
typedef __INT64_TYPE__ __int64_t;
|
||||||
|
#ifdef __UINT64_TYPE__
|
||||||
|
typedef __UINT64_TYPE__ __uint64_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned __INT64_TYPE__ __uint64_t;
|
||||||
|
#endif
|
||||||
|
#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
|
||||||
|
|
||||||
|
/* GCC has __LONG_LONG_MAX__ */
|
||||||
|
#elif defined(__LONG_LONG_MAX__) && (__LONG_LONG_MAX__ > 0x7fffffff)
|
||||||
|
typedef signed long long __int64_t;
|
||||||
|
typedef unsigned long long __uint64_t;
|
||||||
|
#define ___int64_t_defined 1
|
||||||
|
|
||||||
|
/* POSIX mandates LLONG_MAX in <limits.h> */
|
||||||
|
#elif defined(LLONG_MAX) && (LLONG_MAX > 0x7fffffff)
|
||||||
|
typedef signed long long __int64_t;
|
||||||
|
typedef unsigned long long __uint64_t;
|
||||||
|
#define ___int64_t_defined 1
|
||||||
|
|
||||||
|
#elif __EXP(INT_MAX) > 0x7fffffff
|
||||||
|
typedef signed int __int64_t;
|
||||||
|
typedef unsigned int __uint64_t;
|
||||||
|
#define ___int64_t_defined 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __INT_LEAST8_TYPE__
|
||||||
|
typedef __INT_LEAST8_TYPE__ __int_least8_t;
|
||||||
|
#ifdef __UINT_LEAST8_TYPE__
|
||||||
|
typedef __UINT_LEAST8_TYPE__ __uint_least8_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned __INT_LEAST8_TYPE__ __uint_least8_t;
|
||||||
|
#endif
|
||||||
|
#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;
|
||||||
|
#ifdef __UINT_LEAST16_TYPE__
|
||||||
|
typedef __UINT_LEAST16_TYPE__ __uint_least16_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned __INT_LEAST16_TYPE__ __uint_least16_t;
|
||||||
|
#endif
|
||||||
|
#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;
|
||||||
|
#ifdef __UINT_LEAST32_TYPE__
|
||||||
|
typedef __UINT_LEAST32_TYPE__ __uint_least32_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned __INT_LEAST32_TYPE__ __uint_least32_t;
|
||||||
|
#endif
|
||||||
|
#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;
|
||||||
|
#ifdef __UINT_LEAST64_TYPE__
|
||||||
|
typedef __UINT_LEAST64_TYPE__ __uint_least64_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned __INT_LEAST64_TYPE__ __uint_least64_t;
|
||||||
|
#endif
|
||||||
|
#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
|
||||||
|
|
||||||
|
#if defined(__INTMAX_TYPE__)
|
||||||
|
typedef __INTMAX_TYPE__ __intmax_t;
|
||||||
|
#elif __have_longlong64
|
||||||
|
typedef signed long long __intmax_t;
|
||||||
|
#else
|
||||||
|
typedef signed long __intmax_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__UINTMAX_TYPE__)
|
||||||
|
typedef __UINTMAX_TYPE__ __uintmax_t;
|
||||||
|
#elif __have_longlong64
|
||||||
|
typedef unsigned long long __uintmax_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned long __uintmax_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __INTPTR_TYPE__
|
||||||
|
typedef __INTPTR_TYPE__ __intptr_t;
|
||||||
|
#ifdef __UINTPTR_TYPE__
|
||||||
|
typedef __UINTPTR_TYPE__ __uintptr_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned __INTPTR_TYPE__ __uintptr_t;
|
||||||
|
#endif
|
||||||
|
#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
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _MACHINE__DEFAULT_TYPES_H */
|
|
@ -0,0 +1,39 @@
|
||||||
|
/* ARM configuration file.
|
||||||
|
Copyright (c) 2015 ARM Ltd. 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. The name of the company may not be used to endorse or promote
|
||||||
|
products derived from this software without specific prior written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY ARM LTD ``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 ARM LTD 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 __MACHINE_ENDIAN_H__
|
||||||
|
#error "must be included via <machine/endian.h>"
|
||||||
|
#endif /* !__MACHINE_ENDIAN_H__ */
|
||||||
|
|
||||||
|
#define _LITTLE_ENDIAN 1234
|
||||||
|
#define _BIG_ENDIAN 4321
|
||||||
|
#define _PDP_ENDIAN 3412
|
||||||
|
|
||||||
|
#ifdef __ARMEB__
|
||||||
|
#define _BYTE_ORDER _BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#define _BYTE_ORDER _LITTLE_ENDIAN
|
||||||
|
#endif
|
|
@ -0,0 +1,8 @@
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _MACHINE__TYPES_H
|
||||||
|
#define _MACHINE__TYPES_H
|
||||||
|
#include <machine/_default_types.h>
|
||||||
|
#endif
|
|
@ -0,0 +1,69 @@
|
||||||
|
#ifndef __MACHINE_ENDIAN_H__
|
||||||
|
#define __MACHINE_ENDIAN_H__
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#include <sys/_types.h>
|
||||||
|
#include <machine/_endian.h>
|
||||||
|
|
||||||
|
#if _BYTE_ORDER == _LITTLE_ENDIAN
|
||||||
|
#define _QUAD_HIGHWORD 1
|
||||||
|
#define _QUAD_LOWWORD 0
|
||||||
|
#else
|
||||||
|
#define _QUAD_HIGHWORD 0
|
||||||
|
#define _QUAD_LOWWORD 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
#define LITTLE_ENDIAN _LITTLE_ENDIAN
|
||||||
|
#define BIG_ENDIAN _BIG_ENDIAN
|
||||||
|
#define PDP_ENDIAN _PDP_ENDIAN
|
||||||
|
#define BYTE_ORDER _BYTE_ORDER
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define __bswap16(_x) __builtin_bswap16(_x)
|
||||||
|
#define __bswap32(_x) __builtin_bswap32(_x)
|
||||||
|
#define __bswap64(_x) __builtin_bswap64(_x)
|
||||||
|
#else /* __GNUC__ */
|
||||||
|
static __inline __uint16_t
|
||||||
|
__bswap16(__uint16_t _x)
|
||||||
|
{
|
||||||
|
|
||||||
|
return ((__uint16_t)((_x >> 8) | ((_x << 8) & 0xff00)));
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline __uint32_t
|
||||||
|
__bswap32(__uint32_t _x)
|
||||||
|
{
|
||||||
|
|
||||||
|
return ((__uint32_t)((_x >> 24) | ((_x >> 8) & 0xff00) |
|
||||||
|
((_x << 8) & 0xff0000) | ((_x << 24) & 0xff000000)));
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline __uint64_t
|
||||||
|
__bswap64(__uint64_t _x)
|
||||||
|
{
|
||||||
|
|
||||||
|
return ((__uint64_t)((_x >> 56) | ((_x >> 40) & 0xff00) |
|
||||||
|
((_x >> 24) & 0xff0000) | ((_x >> 8) & 0xff000000) |
|
||||||
|
((_x << 8) & ((__uint64_t)0xff << 32)) |
|
||||||
|
((_x << 24) & ((__uint64_t)0xff << 40)) |
|
||||||
|
((_x << 40) & ((__uint64_t)0xff << 48)) | ((_x << 56))));
|
||||||
|
}
|
||||||
|
#endif /* !__GNUC__ */
|
||||||
|
|
||||||
|
#ifndef __machine_host_to_from_network_defined
|
||||||
|
#if _BYTE_ORDER == _LITTLE_ENDIAN
|
||||||
|
#define __htonl(_x) __bswap32(_x)
|
||||||
|
#define __htons(_x) __bswap16(_x)
|
||||||
|
#define __ntohl(_x) __bswap32(_x)
|
||||||
|
#define __ntohs(_x) __bswap16(_x)
|
||||||
|
#else
|
||||||
|
#define __htonl(_x) ((__uint32_t)(_x))
|
||||||
|
#define __htons(_x) ((__uint16_t)(_x))
|
||||||
|
#define __ntohl(_x) ((__uint32_t)(_x))
|
||||||
|
#define __ntohs(_x) ((__uint16_t)(_x))
|
||||||
|
#endif
|
||||||
|
#endif /* __machine_host_to_from_network_defined */
|
||||||
|
|
||||||
|
#endif /* __MACHINE_ENDIAN_H__ */
|
|
@ -0,0 +1,475 @@
|
||||||
|
#ifndef __IEEE_BIG_ENDIAN
|
||||||
|
#ifndef __IEEE_LITTLE_ENDIAN
|
||||||
|
|
||||||
|
/* This file can define macros to choose variations of the IEEE float
|
||||||
|
format:
|
||||||
|
|
||||||
|
_FLT_LARGEST_EXPONENT_IS_NORMAL
|
||||||
|
|
||||||
|
Defined if the float format uses the largest exponent for finite
|
||||||
|
numbers rather than NaN and infinity representations. Such a
|
||||||
|
format cannot represent NaNs or infinities at all, but it's FLT_MAX
|
||||||
|
is twice the IEEE value.
|
||||||
|
|
||||||
|
_FLT_NO_DENORMALS
|
||||||
|
|
||||||
|
Defined if the float format does not support IEEE denormals. Every
|
||||||
|
float with a zero exponent is taken to be a zero representation.
|
||||||
|
|
||||||
|
??? At the moment, there are no equivalent macros above for doubles and
|
||||||
|
the macros are not fully supported by --enable-newlib-hw-fp.
|
||||||
|
|
||||||
|
__IEEE_BIG_ENDIAN
|
||||||
|
|
||||||
|
Defined if the float format is big endian. This is mutually exclusive
|
||||||
|
with __IEEE_LITTLE_ENDIAN.
|
||||||
|
|
||||||
|
__IEEE_LITTLE_ENDIAN
|
||||||
|
|
||||||
|
Defined if the float format is little endian. This is mutually exclusive
|
||||||
|
with __IEEE_BIG_ENDIAN.
|
||||||
|
|
||||||
|
Note that one of __IEEE_BIG_ENDIAN or __IEEE_LITTLE_ENDIAN must be specified for a
|
||||||
|
platform or error will occur.
|
||||||
|
|
||||||
|
__IEEE_BYTES_LITTLE_ENDIAN
|
||||||
|
|
||||||
|
This flag is used in conjunction with __IEEE_BIG_ENDIAN to describe a situation
|
||||||
|
whereby multiple words of an IEEE floating point are in big endian order, but the
|
||||||
|
words themselves are little endian with respect to the bytes.
|
||||||
|
|
||||||
|
_DOUBLE_IS_32BITS
|
||||||
|
|
||||||
|
This is used on platforms that support double by using the 32-bit IEEE
|
||||||
|
float type.
|
||||||
|
|
||||||
|
_FLOAT_ARG
|
||||||
|
|
||||||
|
This represents what type a float arg is passed as. It is used when the type is
|
||||||
|
not promoted to double.
|
||||||
|
|
||||||
|
|
||||||
|
__OBSOLETE_MATH_DEFAULT
|
||||||
|
|
||||||
|
Default value for __OBSOLETE_MATH if that's not set by the user.
|
||||||
|
It should be set here based on predefined feature macros.
|
||||||
|
|
||||||
|
__OBSOLETE_MATH
|
||||||
|
|
||||||
|
If set to 1 then some new math code will be disabled and older libm
|
||||||
|
code will be used instead. This is necessary because the new math
|
||||||
|
code does not support all targets, it assumes that the toolchain has
|
||||||
|
ISO C99 support (hexfloat literals, standard fenv semantics), the
|
||||||
|
target has IEEE-754 conforming binary32 float and binary64 double
|
||||||
|
(not mixed endian) representation, standard SNaN representation,
|
||||||
|
double and single precision arithmetics has similar latency and it
|
||||||
|
has no legacy SVID matherr support, only POSIX errno and fenv
|
||||||
|
exception based error handling.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if (defined(__arm__) || defined(__thumb__)) && !defined(__MAVERICK__)
|
||||||
|
/* ARM traditionally used big-endian words; and within those words the
|
||||||
|
byte ordering was big or little endian depending upon the target.
|
||||||
|
Modern floating-point formats are naturally ordered; in this case
|
||||||
|
__VFP_FP__ will be defined, even if soft-float. */
|
||||||
|
#ifdef __VFP_FP__
|
||||||
|
# ifdef __ARMEL__
|
||||||
|
# define __IEEE_LITTLE_ENDIAN
|
||||||
|
# else
|
||||||
|
# define __IEEE_BIG_ENDIAN
|
||||||
|
# endif
|
||||||
|
# if __ARM_FP & 0x8
|
||||||
|
# define __OBSOLETE_MATH_DEFAULT 0
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define __IEEE_BIG_ENDIAN
|
||||||
|
# ifdef __ARMEL__
|
||||||
|
# define __IEEE_BYTES_LITTLE_ENDIAN
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (__aarch64__)
|
||||||
|
#if defined (__AARCH64EL__)
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#else
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
#define __OBSOLETE_MATH_DEFAULT 0
|
||||||
|
#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
|
||||||
|
|
||||||
|
#define isfinite(__y) \
|
||||||
|
(__extension__ ({int __cy; \
|
||||||
|
(sizeof (__y) == sizeof (float)) ? (1) : \
|
||||||
|
(__cy = fpclassify(__y)) != FP_INFINITE && __cy != FP_NAN;}))
|
||||||
|
|
||||||
|
#define isinf(__x) ((sizeof (__x) == sizeof (float)) ? (0) : __isinfd(__x))
|
||||||
|
#define isnan(__x) ((sizeof (__x) == sizeof (float)) ? (0) : __isnand(__x))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macros for use in ieeefp.h. We can't just define the real ones here
|
||||||
|
* (like those above) as we have name space issues when this is *not*
|
||||||
|
* included via generic the ieeefp.h.
|
||||||
|
*/
|
||||||
|
#define __ieeefp_isnanf(x) 0
|
||||||
|
#define __ieeefp_isinff(x) 0
|
||||||
|
#define __ieeefp_finitef(x) 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __sparc__
|
||||||
|
#ifdef __LITTLE_ENDIAN_DATA__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#else
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__m68k__) || defined(__mc68000__)
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#ifdef __HAVE_SHORT_DOUBLE__
|
||||||
|
# define _DOUBLE_IS_32BITS
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (__H8300__) || defined (__H8300H__) || defined (__H8300S__) || defined (__H8500__) || defined (__H8300SX__)
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#define _FLOAT_ARG float
|
||||||
|
#define _DOUBLE_IS_32BITS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (__xc16x__) || defined (__xc16xL__) || defined (__xc16xS__)
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#define _FLOAT_ARG float
|
||||||
|
#define _DOUBLE_IS_32BITS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __sh__
|
||||||
|
#ifdef __LITTLE_ENDIAN__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#else
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
#if defined(__SH2E__) || defined(__SH3E__) || defined(__SH4_SINGLE_ONLY__) || defined(__SH2A_SINGLE_ONLY__)
|
||||||
|
#define _DOUBLE_IS_32BITS
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _AM29K
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __i386__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __riscv
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __i960__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __lm32__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __M32R__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __nvptx__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_C4x) || defined(_C3x)
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#define _DOUBLE_IS_32BITS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __TMS320C6X__
|
||||||
|
#ifdef _BIG_ENDIAN
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __TIC80__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __MIPSEL__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
#ifdef __MIPSEB__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __MMIX__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __D30V__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* necv70 was __IEEE_LITTLE_ENDIAN. */
|
||||||
|
|
||||||
|
#ifdef __W65__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#define _DOUBLE_IS_32BITS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__Z8001__) || defined(__Z8002__)
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __m88k__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __mn10300__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __mn10200__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#define _DOUBLE_IS_32BITS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __v800
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __v850
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __D10V__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#if __DOUBLE__ == 32
|
||||||
|
#define _DOUBLE_IS_32BITS
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __PPC__
|
||||||
|
#if (defined(_BIG_ENDIAN) && _BIG_ENDIAN) || (defined(_AIX) && _AIX)
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#if (defined(_LITTLE_ENDIAN) && _LITTLE_ENDIAN) || (defined(__sun__) && __sun__) || (defined(_WIN32) && _WIN32)
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __xstormy16__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __arc__
|
||||||
|
#ifdef __big_endian__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __CRX__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __fr30__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __FT32__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __mcore__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __mt__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __frv__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __moxie__
|
||||||
|
#ifdef __MOXIE_BIG_ENDIAN__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __ia64__
|
||||||
|
#ifdef __BIG_ENDIAN__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __AVR__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#define _DOUBLE_IS_32BITS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__or1k__) || defined(__OR1K__) || defined(__OR1KND__)
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __IP2K__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#define __SMALL_BITFIELDS
|
||||||
|
#define _DOUBLE_IS_32BITS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __iq2000__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __MAVERICK__
|
||||||
|
#ifdef __ARMEL__
|
||||||
|
# define __IEEE_LITTLE_ENDIAN
|
||||||
|
#else /* must be __ARMEB__ */
|
||||||
|
# define __IEEE_BIG_ENDIAN
|
||||||
|
#endif /* __ARMEL__ */
|
||||||
|
#endif /* __MAVERICK__ */
|
||||||
|
|
||||||
|
#ifdef __m32c__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#define __SMALL_BITFIELDS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __CRIS__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __BFIN__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __x86_64__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __mep__
|
||||||
|
#ifdef __LITTLE_ENDIAN__
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#else
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
#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 */
|
||||||
|
#ifndef __RL78_64BIT_DOUBLES__
|
||||||
|
#define _DOUBLE_IS_32BITS
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __RX__
|
||||||
|
|
||||||
|
#ifdef __RX_BIG_ENDIAN__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __RX_64BIT_DOUBLES__
|
||||||
|
#define _DOUBLE_IS_32BITS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __RX_16BIT_INTS__
|
||||||
|
#define __SMALL_BITFIELDS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined(__CR16__) || defined(__CR16C__) ||defined(__CR16CP__))
|
||||||
|
#define __IEEE_LITTLE_ENDIAN
|
||||||
|
#define __SMALL_BITFIELDS /* 16 Bit INT */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __NIOS2__
|
||||||
|
# ifdef __nios2_big_endian__
|
||||||
|
# define __IEEE_BIG_ENDIAN
|
||||||
|
# else
|
||||||
|
# define __IEEE_LITTLE_ENDIAN
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __VISIUM__
|
||||||
|
#define __IEEE_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __CYGWIN__
|
||||||
|
#define __OBSOLETE_MATH_DEFAULT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __OBSOLETE_MATH_DEFAULT
|
||||||
|
/* Use old math code by default. */
|
||||||
|
#define __OBSOLETE_MATH_DEFAULT 1
|
||||||
|
#endif
|
||||||
|
#ifndef __OBSOLETE_MATH
|
||||||
|
#define __OBSOLETE_MATH __OBSOLETE_MATH_DEFAULT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __IEEE_BIG_ENDIAN
|
||||||
|
#ifndef __IEEE_LITTLE_ENDIAN
|
||||||
|
#error Endianess not declared!!
|
||||||
|
#endif /* not __IEEE_LITTLE_ENDIAN */
|
||||||
|
#endif /* not __IEEE_BIG_ENDIAN */
|
||||||
|
|
||||||
|
#endif /* not __IEEE_LITTLE_ENDIAN */
|
||||||
|
#endif /* not __IEEE_BIG_ENDIAN */
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
#ifndef _MACHSTDLIB_H_
|
||||||
|
#define _MACHSTDLIB_H_
|
||||||
|
|
||||||
|
/* place holder so platforms may add stdlib.h extensions */
|
||||||
|
|
||||||
|
#endif /* _MACHSTDLIB_H_ */
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
/*
|
||||||
|
* Newlib targets may provide an own version of this file in their machine
|
||||||
|
* directory to add custom user types for <sys/types.h>.
|
||||||
|
*/
|
||||||
|
#ifndef _SYS_TYPES_H
|
||||||
|
#error "must be included via <sys/types.h>"
|
||||||
|
#endif /* !_SYS_TYPES_H */
|
|
@ -0,0 +1,206 @@
|
||||||
|
/* newlib.h. Generated from newlib.hin by configure. */
|
||||||
|
/* newlib.hin. Manually edited from the output of autoheader to
|
||||||
|
remove all PACKAGE_ macros which will collide with any user
|
||||||
|
package using newlib header files and having its own package name,
|
||||||
|
version, etc... */
|
||||||
|
#ifndef __NEWLIB_H__
|
||||||
|
|
||||||
|
#define __NEWLIB_H__ 1
|
||||||
|
|
||||||
|
/* EL/IX level */
|
||||||
|
/* #undef _ELIX_LEVEL */
|
||||||
|
|
||||||
|
/* Newlib version */
|
||||||
|
#include <_newlib_version.h>
|
||||||
|
|
||||||
|
/* C99 formats support (such as %a, %zu, ...) in IO functions like
|
||||||
|
* printf/scanf enabled */
|
||||||
|
#define _WANT_IO_C99_FORMATS 1
|
||||||
|
|
||||||
|
/* long long type support in IO functions like printf/scanf enabled */
|
||||||
|
#define _WANT_IO_LONG_LONG 1
|
||||||
|
|
||||||
|
/* Register application finalization function using atexit. */
|
||||||
|
#define _WANT_REGISTER_FINI 1
|
||||||
|
|
||||||
|
/* long double type support in IO functions like printf/scanf enabled */
|
||||||
|
/* #undef _WANT_IO_LONG_DOUBLE */
|
||||||
|
|
||||||
|
/* Positional argument support in printf functions enabled. */
|
||||||
|
/* #undef _WANT_IO_POS_ARGS */
|
||||||
|
|
||||||
|
/* Optional reentrant struct support. Used mostly on platforms with
|
||||||
|
very restricted storage. */
|
||||||
|
/* #undef _WANT_REENT_SMALL */
|
||||||
|
|
||||||
|
/* Multibyte supported */
|
||||||
|
/* #undef _MB_CAPABLE */
|
||||||
|
|
||||||
|
/* MB_LEN_MAX */
|
||||||
|
#define _MB_LEN_MAX 1
|
||||||
|
|
||||||
|
/* ICONV enabled */
|
||||||
|
/* #undef _ICONV_ENABLED */
|
||||||
|
|
||||||
|
/* Enable ICONV external CCS files loading capabilities */
|
||||||
|
/* #undef _ICONV_ENABLE_EXTERNAL_CCS */
|
||||||
|
|
||||||
|
/* Define if the linker supports .preinit_array/.init_array/.fini_array
|
||||||
|
* sections. */
|
||||||
|
#define HAVE_INITFINI_ARRAY 1
|
||||||
|
|
||||||
|
/* True if atexit() may dynamically allocate space for cleanup
|
||||||
|
functions. */
|
||||||
|
#define _ATEXIT_DYNAMIC_ALLOC 1
|
||||||
|
|
||||||
|
/* True if long double supported. */
|
||||||
|
#define _HAVE_LONG_DOUBLE 1
|
||||||
|
|
||||||
|
/* Define if compiler supports -fno-tree-loop-distribute-patterns. */
|
||||||
|
#define _HAVE_CC_INHIBIT_LOOP_TO_LIBCALL 1
|
||||||
|
|
||||||
|
/* True if long double supported and it is equal to double. */
|
||||||
|
#define _LDBL_EQ_DBL 1
|
||||||
|
|
||||||
|
/* Define if ivo supported in streamio. */
|
||||||
|
#define _FVWRITE_IN_STREAMIO 1
|
||||||
|
|
||||||
|
/* Define if fseek functions support seek optimization. */
|
||||||
|
#define _FSEEK_OPTIMIZATION 1
|
||||||
|
|
||||||
|
/* Define if wide char orientation is supported. */
|
||||||
|
#define _WIDE_ORIENT 1
|
||||||
|
|
||||||
|
/* Define if unbuffered stream file optimization is supported. */
|
||||||
|
#define _UNBUF_STREAM_OPT 1
|
||||||
|
|
||||||
|
/* Define if lite version of exit supported. */
|
||||||
|
/* #undef _LITE_EXIT */
|
||||||
|
|
||||||
|
/* Define if declare atexit data as global. */
|
||||||
|
/* #undef _REENT_GLOBAL_ATEXIT */
|
||||||
|
|
||||||
|
/* Define to move the stdio stream FILE objects out of struct _reent and make
|
||||||
|
them global. The stdio stream pointers of struct _reent are initialized to
|
||||||
|
point to the global stdio FILE stream objects. */
|
||||||
|
/* #undef _WANT_REENT_GLOBAL_STDIO_STREAMS */
|
||||||
|
|
||||||
|
/* Define if small footprint nano-formatted-IO implementation used. */
|
||||||
|
/* #undef _NANO_FORMATTED_IO */
|
||||||
|
|
||||||
|
/* Define if using retargetable functions for default lock routines. */
|
||||||
|
#define _RETARGETABLE_LOCKING 1
|
||||||
|
|
||||||
|
/* Define to use type long for time_t. */
|
||||||
|
/* #undef _WANT_USE_LONG_TIME_T */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Iconv encodings enabled ("to" direction)
|
||||||
|
*/
|
||||||
|
/* #undef _ICONV_TO_ENCODING_BIG5 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_CP775 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_CP850 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_CP852 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_CP855 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_CP866 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_EUC_JP */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_EUC_TW */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_EUC_KR */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_1 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_10 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_11 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_13 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_14 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_15 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_2 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_3 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_4 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_5 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_6 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_7 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_8 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_8859_9 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_ISO_IR_111 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_KOI8_R */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_KOI8_RU */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_KOI8_U */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_KOI8_UNI */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_UCS_2 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_UCS_2_INTERNAL */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_UCS_2BE */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_UCS_2LE */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_UCS_4 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_UCS_4_INTERNAL */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_UCS_4BE */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_UCS_4LE */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_US_ASCII */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_UTF_16 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_UTF_16BE */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_UTF_16LE */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_UTF_8 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_WIN_1250 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_WIN_1251 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_WIN_1252 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_WIN_1253 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_WIN_1254 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_WIN_1255 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_WIN_1256 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_WIN_1257 */
|
||||||
|
/* #undef _ICONV_TO_ENCODING_WIN_1258 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Iconv encodings enabled ("from" direction)
|
||||||
|
*/
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_BIG5 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_CP775 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_CP850 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_CP852 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_CP855 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_CP866 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_EUC_JP */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_EUC_TW */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_EUC_KR */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_1 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_10 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_11 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_13 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_14 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_15 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_2 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_3 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_4 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_5 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_6 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_7 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_8 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_8859_9 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_ISO_IR_111 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_KOI8_R */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_KOI8_RU */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_KOI8_U */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_KOI8_UNI */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_UCS_2 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_UCS_2_INTERNAL */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_UCS_2BE */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_UCS_2LE */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_UCS_4 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_UCS_4_INTERNAL */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_UCS_4BE */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_UCS_4LE */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_US_ASCII */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_UTF_16 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_UTF_16BE */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_UTF_16LE */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_UTF_8 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_WIN_1250 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_WIN_1251 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_WIN_1252 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_WIN_1253 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_WIN_1254 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_WIN_1255 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_WIN_1256 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_WIN_1257 */
|
||||||
|
/* #undef _ICONV_FROM_ENCODING_WIN_1258 */
|
||||||
|
|
||||||
|
#endif /* !__NEWLIB_H__ */
|
||||||
|
|
|
@ -0,0 +1,117 @@
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// \author (c) Marco Paland (info@paland.com)
|
||||||
|
// 2014-2019, PALANDesign Hannover, Germany
|
||||||
|
//
|
||||||
|
// \license The MIT License (MIT)
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
//
|
||||||
|
// \brief Tiny printf, sprintf and snprintf implementation, optimized for speed on
|
||||||
|
// embedded systems with a very limited resources.
|
||||||
|
// Use this instead of bloated standard/newlib printf.
|
||||||
|
// These routines are thread safe and reentrant.
|
||||||
|
//
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef _PRINTF_H_
|
||||||
|
#define _PRINTF_H_
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output a character to a custom device like UART, used by the printf() function
|
||||||
|
* This function is declared here only. You have to write your custom implementation somewhere
|
||||||
|
* \param character Character to output
|
||||||
|
*/
|
||||||
|
void _putchar(char character);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tiny printf implementation
|
||||||
|
* You have to implement _putchar if you use printf()
|
||||||
|
* To avoid conflicts with the regular printf() API it is overridden by macro defines
|
||||||
|
* and internal underscore-appended functions like printf_() are used
|
||||||
|
* \param format A string that specifies the format of the output
|
||||||
|
* \return The number of characters that are written into the array, not counting the terminating null character
|
||||||
|
*/
|
||||||
|
#define printf printf_
|
||||||
|
#define __printf__ printf_
|
||||||
|
int printf_(const char* format, ...);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tiny sprintf implementation
|
||||||
|
* Due to security reasons (buffer overflow) YOU SHOULD CONSIDER USING (V)SNPRINTF INSTEAD!
|
||||||
|
* \param buffer A pointer to the buffer where to store the formatted string. MUST be big enough to store the output!
|
||||||
|
* \param format A string that specifies the format of the output
|
||||||
|
* \return The number of characters that are WRITTEN into the buffer, not counting the terminating null character
|
||||||
|
*/
|
||||||
|
#define sprintf sprintf_
|
||||||
|
int sprintf_(char* buffer, const char* format, ...);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tiny snprintf/vsnprintf implementation
|
||||||
|
* \param buffer A pointer to the buffer where to store the formatted string
|
||||||
|
* \param count The maximum number of characters to store in the buffer, including a terminating null character
|
||||||
|
* \param format A string that specifies the format of the output
|
||||||
|
* \param va A value identifying a variable arguments list
|
||||||
|
* \return The number of characters that COULD have been written into the buffer, not counting the terminating
|
||||||
|
* null character. A value equal or larger than count indicates truncation. Only when the returned value
|
||||||
|
* is non-negative and less than count, the string has been completely written.
|
||||||
|
*/
|
||||||
|
#define snprintf snprintf_
|
||||||
|
#define vsnprintf vsnprintf_
|
||||||
|
int snprintf_(char* buffer, size_t count, const char* format, ...);
|
||||||
|
int vsnprintf_(char* buffer, size_t count, const char* format, va_list va);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tiny vprintf implementation
|
||||||
|
* \param format A string that specifies the format of the output
|
||||||
|
* \param va A value identifying a variable arguments list
|
||||||
|
* \return The number of characters that are WRITTEN into the buffer, not counting the terminating null character
|
||||||
|
*/
|
||||||
|
#define vprintf vprintf_
|
||||||
|
int vprintf_(const char* format, va_list va);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* printf with output function
|
||||||
|
* You may use this as dynamic alternative to printf() with its fixed _putchar() output
|
||||||
|
* \param out An output function which takes one character and an argument pointer
|
||||||
|
* \param arg An argument pointer for user data passed to output function
|
||||||
|
* \param format A string that specifies the format of the output
|
||||||
|
* \return The number of characters that are sent to the output function, not counting the terminating null character
|
||||||
|
*/
|
||||||
|
int fctprintf(void (*out)(char character, void* arg), void* arg, const char* format, ...);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif // _PRINTF_H_
|
|
@ -0,0 +1,466 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004, 2005 by
|
||||||
|
* Ralf Corsepius, Ulm/Germany. All rights reserved.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software
|
||||||
|
* is freely granted, provided that this notice is preserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _STDINT_H
|
||||||
|
#define _STDINT_H
|
||||||
|
|
||||||
|
#include <machine/_default_types.h>
|
||||||
|
#include <sys/_intsup.h>
|
||||||
|
#include <sys/_stdint.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
#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
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fastest minimum-width integer types
|
||||||
|
*
|
||||||
|
* Assume int to be the fastest type for all types with a width
|
||||||
|
* less than __INT_MAX__ rsp. INT_MAX
|
||||||
|
*/
|
||||||
|
#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
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
#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
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fall back to [u]int_least<N>_t for [u]int_fast<N>_t types
|
||||||
|
* not having been defined, yet.
|
||||||
|
* Leave undefined, if [u]int_least<N>_t should not be available.
|
||||||
|
*/
|
||||||
|
#if !__int_fast8_t_defined
|
||||||
|
#if __int_least8_t_defined
|
||||||
|
typedef int_least8_t int_fast8_t;
|
||||||
|
typedef uint_least8_t uint_fast8_t;
|
||||||
|
#define __int_fast8_t_defined 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !__int_fast16_t_defined
|
||||||
|
#if __int_least16_t_defined
|
||||||
|
typedef int_least16_t int_fast16_t;
|
||||||
|
typedef uint_least16_t uint_fast16_t;
|
||||||
|
#define __int_fast16_t_defined 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !__int_fast32_t_defined
|
||||||
|
#if __int_least32_t_defined
|
||||||
|
typedef int_least32_t int_fast32_t;
|
||||||
|
typedef uint_least32_t uint_fast32_t;
|
||||||
|
#define __int_fast32_t_defined 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !__int_fast64_t_defined
|
||||||
|
#if __int_least64_t_defined
|
||||||
|
typedef int_least64_t int_fast64_t;
|
||||||
|
typedef uint_least64_t uint_fast64_t;
|
||||||
|
#define __int_fast64_t_defined 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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__
|
||||||
|
#define UINTPTR_MAX (__UINTPTR_MAX__)
|
||||||
|
#else
|
||||||
|
#define UINTPTR_MAX (2UL * PTRDIFF_MAX + 1)
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* Fallback to hardcoded values,
|
||||||
|
* should be valid on cpu's with 32bit int/32bit void*
|
||||||
|
*/
|
||||||
|
#define INTPTR_MAX (__STDINT_EXP(LONG_MAX))
|
||||||
|
#define INTPTR_MIN (-__STDINT_EXP(LONG_MAX) - 1)
|
||||||
|
#define UINTPTR_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Limits of Specified-Width Integer Types */
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
#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)
|
||||||
|
#else
|
||||||
|
#error required type int_least8_t missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
#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)
|
||||||
|
#else
|
||||||
|
#error required type int_least16_t missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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 defined (_INT32_EQ_LONG)
|
||||||
|
#define INT32_MIN (-2147483647L-1)
|
||||||
|
#define INT32_MAX (2147483647L)
|
||||||
|
#define UINT32_MAX (4294967295UL)
|
||||||
|
#else
|
||||||
|
#define INT32_MIN (-2147483647-1)
|
||||||
|
#define INT32_MAX (2147483647)
|
||||||
|
#define UINT32_MAX (4294967295U)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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 defined (_INT32_EQ_LONG)
|
||||||
|
#define INT_LEAST32_MIN (-2147483647L-1)
|
||||||
|
#define INT_LEAST32_MAX (2147483647L)
|
||||||
|
#define UINT_LEAST32_MAX (4294967295UL)
|
||||||
|
#else
|
||||||
|
#define INT_LEAST32_MIN (-2147483647-1)
|
||||||
|
#define INT_LEAST32_MAX (2147483647)
|
||||||
|
#define UINT_LEAST32_MAX (4294967295U)
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#error required type int_least32_t missing
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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)
|
||||||
|
#define UINT64_MAX (18446744073709551615U)
|
||||||
|
#elif __have_longlong64
|
||||||
|
#define INT64_MIN (-9223372036854775807LL-1LL)
|
||||||
|
#define INT64_MAX (9223372036854775807LL)
|
||||||
|
#define UINT64_MAX (18446744073709551615ULL)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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)
|
||||||
|
#define UINT_LEAST64_MAX (18446744073709551615U)
|
||||||
|
#elif __have_longlong64
|
||||||
|
#define INT_LEAST64_MIN (-9223372036854775807LL-1LL)
|
||||||
|
#define INT_LEAST64_MAX (9223372036854775807LL)
|
||||||
|
#define UINT_LEAST64_MAX (18446744073709551615ULL)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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))
|
||||||
|
#define UINT_FAST8_MAX (__STDINT_EXP(INT_MAX)*2U+1U)
|
||||||
|
#else
|
||||||
|
#define INT_FAST8_MIN INT_LEAST8_MIN
|
||||||
|
#define INT_FAST8_MAX INT_LEAST8_MAX
|
||||||
|
#define UINT_FAST8_MAX UINT_LEAST8_MAX
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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))
|
||||||
|
#define UINT_FAST16_MAX (__STDINT_EXP(INT_MAX)*2U+1U)
|
||||||
|
#else
|
||||||
|
#define INT_FAST16_MIN INT_LEAST16_MIN
|
||||||
|
#define INT_FAST16_MAX INT_LEAST16_MAX
|
||||||
|
#define UINT_FAST16_MAX UINT_LEAST16_MAX
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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))
|
||||||
|
#define UINT_FAST32_MAX (__STDINT_EXP(INT_MAX)*2U+1U)
|
||||||
|
#else
|
||||||
|
#define INT_FAST32_MIN INT_LEAST32_MIN
|
||||||
|
#define INT_FAST32_MAX INT_LEAST32_MAX
|
||||||
|
#define UINT_FAST32_MAX UINT_LEAST32_MAX
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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))
|
||||||
|
#define UINT_FAST64_MAX (__STDINT_EXP(INT_MAX)*2U+1U)
|
||||||
|
#else
|
||||||
|
#define INT_FAST64_MIN INT_LEAST64_MIN
|
||||||
|
#define INT_FAST64_MAX INT_LEAST64_MAX
|
||||||
|
#define UINT_FAST64_MAX UINT_LEAST64_MAX
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __INTMAX_MAX__
|
||||||
|
#define INTMAX_MAX (__INTMAX_MAX__)
|
||||||
|
#define INTMAX_MIN (-INTMAX_MAX - 1)
|
||||||
|
#elif defined(__INTMAX_TYPE__)
|
||||||
|
/* All relevant GCC versions prefer long to long long for intmax_t. */
|
||||||
|
#define INTMAX_MAX INT64_MAX
|
||||||
|
#define INTMAX_MIN INT64_MIN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __UINTMAX_MAX__
|
||||||
|
#define UINTMAX_MAX (__UINTMAX_MAX__)
|
||||||
|
#elif defined(__UINTMAX_TYPE__)
|
||||||
|
/* All relevant GCC versions prefer long to long long for intmax_t. */
|
||||||
|
#define UINTMAX_MAX UINT64_MAX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This must match size_t in stddef.h, currently long unsigned int */
|
||||||
|
#ifdef __SIZE_MAX__
|
||||||
|
#define SIZE_MAX (__SIZE_MAX__)
|
||||||
|
#else
|
||||||
|
#define SIZE_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This must match sig_atomic_t in <signal.h> (currently int) */
|
||||||
|
#define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1)
|
||||||
|
#define SIG_ATOMIC_MAX (__STDINT_EXP(INT_MAX))
|
||||||
|
|
||||||
|
/* This must match ptrdiff_t in <stddef.h> (currently long int) */
|
||||||
|
#ifdef __PTRDIFF_MAX__
|
||||||
|
#define PTRDIFF_MAX (__PTRDIFF_MAX__)
|
||||||
|
#else
|
||||||
|
#define PTRDIFF_MAX (__STDINT_EXP(LONG_MAX))
|
||||||
|
#endif
|
||||||
|
#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
|
||||||
|
|
||||||
|
/* This must match definition in <wchar.h> */
|
||||||
|
#ifndef WCHAR_MIN
|
||||||
|
#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
|
||||||
|
|
||||||
|
/* This must match definition in <wchar.h> */
|
||||||
|
#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 (0x7fffffff + L'\0')
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* wint_t is unsigned int on almost all GCC targets. */
|
||||||
|
#ifdef __WINT_MAX__
|
||||||
|
#define WINT_MAX (__WINT_MAX__)
|
||||||
|
#else
|
||||||
|
#define WINT_MAX (__STDINT_EXP(INT_MAX) * 2U + 1U)
|
||||||
|
#endif
|
||||||
|
#ifdef __WINT_MIN__
|
||||||
|
#define WINT_MIN (__WINT_MIN__)
|
||||||
|
#else
|
||||||
|
#define WINT_MIN (0U)
|
||||||
|
#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
|
||||||
|
#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
|
||||||
|
#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 defined (_INT32_EQ_LONG)
|
||||||
|
#define INT32_C(x) x##L
|
||||||
|
#define UINT32_C(x) x##UL
|
||||||
|
#else
|
||||||
|
#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
|
||||||
|
#define UINT64_C(x) x##UL
|
||||||
|
#else
|
||||||
|
#define INT64_C(x) x##LL
|
||||||
|
#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
|
||||||
|
#else
|
||||||
|
#define INTMAX_C(x) x##LL
|
||||||
|
#define UINTMAX_C(x) x##ULL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _STDINT_H */
|
|
@ -0,0 +1,803 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* @(#)stdio.h 5.3 (Berkeley) 3/15/86
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NB: to fit things in six character monocase externals, the
|
||||||
|
* stdio code uses the prefix `__s' for stdio objects, typically
|
||||||
|
* followed by a three-character attempt at a mnemonic.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _STDIO_H_
|
||||||
|
#define _STDIO_H_
|
||||||
|
|
||||||
|
#include "_ansi.h"
|
||||||
|
|
||||||
|
#define _FSTDIO /* ``function stdio'' */
|
||||||
|
|
||||||
|
#define __need_size_t
|
||||||
|
#define __need_NULL
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
/* typedef only __gnuc_va_list, used throughout the header */
|
||||||
|
#define __need___va_list
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/* typedef va_list only when required */
|
||||||
|
#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#ifndef _VA_LIST_DEFINED
|
||||||
|
typedef __gnuc_va_list va_list;
|
||||||
|
#define _VA_LIST_DEFINED
|
||||||
|
#endif
|
||||||
|
#else /* !__GNUC__ */
|
||||||
|
#include <stdarg.h>
|
||||||
|
#endif
|
||||||
|
#endif /* __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* <sys/reent.h> defines __FILE, _fpos_t.
|
||||||
|
* They must be defined there because struct _reent needs them (and we don't
|
||||||
|
* want reent.h to include this file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/reent.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
_BEGIN_STD_C
|
||||||
|
|
||||||
|
#if !defined(__FILE_defined)
|
||||||
|
typedef __FILE FILE;
|
||||||
|
# define __FILE_defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __CYGWIN__
|
||||||
|
typedef _fpos64_t fpos_t;
|
||||||
|
#else
|
||||||
|
typedef _fpos_t fpos_t;
|
||||||
|
#ifdef __LARGE64_FILES
|
||||||
|
typedef _fpos64_t fpos64_t;
|
||||||
|
#endif
|
||||||
|
#endif /* !__CYGWIN__ */
|
||||||
|
|
||||||
|
#include <sys/stdio.h>
|
||||||
|
|
||||||
|
#define __SLBF 0x0001 /* line buffered */
|
||||||
|
#define __SNBF 0x0002 /* unbuffered */
|
||||||
|
#define __SRD 0x0004 /* OK to read */
|
||||||
|
#define __SWR 0x0008 /* OK to write */
|
||||||
|
/* RD and WR are never simultaneously asserted */
|
||||||
|
#define __SRW 0x0010 /* open for reading & writing */
|
||||||
|
#define __SEOF 0x0020 /* found EOF */
|
||||||
|
#define __SERR 0x0040 /* found error */
|
||||||
|
#define __SMBF 0x0080 /* _buf is from malloc */
|
||||||
|
#define __SAPP 0x0100 /* fdopen()ed in append mode - so must write to end */
|
||||||
|
#define __SSTR 0x0200 /* this is an sprintf/snprintf string */
|
||||||
|
#define __SOPT 0x0400 /* do fseek() optimisation */
|
||||||
|
#define __SNPT 0x0800 /* do not do fseek() optimisation */
|
||||||
|
#define __SOFF 0x1000 /* set iff _offset is in fact correct */
|
||||||
|
#define __SORD 0x2000 /* true => stream orientation (byte/wide) decided */
|
||||||
|
#if defined(__CYGWIN__)
|
||||||
|
# define __SCLE 0x4000 /* convert line endings CR/LF <-> NL */
|
||||||
|
#endif
|
||||||
|
#define __SL64 0x8000 /* is 64-bit offset large file */
|
||||||
|
|
||||||
|
/* _flags2 flags */
|
||||||
|
#define __SNLK 0x0001 /* stdio functions do not lock streams themselves */
|
||||||
|
#define __SWID 0x2000 /* true => stream orientation wide, false => byte, only valid if __SORD in _flags is true */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following three definitions are for ANSI C, which took them
|
||||||
|
* from System V, which stupidly took internal interface macros and
|
||||||
|
* made them official arguments to setvbuf(), without renaming them.
|
||||||
|
* Hence, these ugly _IOxxx names are *supposed* to appear in user code.
|
||||||
|
*
|
||||||
|
* Although these happen to match their counterparts above, the
|
||||||
|
* implementation does not rely on that (so these could be renumbered).
|
||||||
|
*/
|
||||||
|
#define _IOFBF 0 /* setvbuf should set fully buffered */
|
||||||
|
#define _IOLBF 1 /* setvbuf should set line buffered */
|
||||||
|
#define _IONBF 2 /* setvbuf should set unbuffered */
|
||||||
|
|
||||||
|
#define EOF (-1)
|
||||||
|
|
||||||
|
#ifdef __BUFSIZ__
|
||||||
|
#define BUFSIZ __BUFSIZ__
|
||||||
|
#else
|
||||||
|
#define BUFSIZ 1024
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __FOPEN_MAX__
|
||||||
|
#define FOPEN_MAX __FOPEN_MAX__
|
||||||
|
#else
|
||||||
|
#define FOPEN_MAX 20
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __FILENAME_MAX__
|
||||||
|
#define FILENAME_MAX __FILENAME_MAX__
|
||||||
|
#else
|
||||||
|
#define FILENAME_MAX 1024
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __L_tmpnam__
|
||||||
|
#define L_tmpnam __L_tmpnam__
|
||||||
|
#else
|
||||||
|
#define L_tmpnam FILENAME_MAX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE || __XSI_VISIBLE
|
||||||
|
#define P_tmpdir "/tmp"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SEEK_SET
|
||||||
|
#define SEEK_SET 0 /* set file offset to offset */
|
||||||
|
#endif
|
||||||
|
#ifndef SEEK_CUR
|
||||||
|
#define SEEK_CUR 1 /* set file offset to current plus offset */
|
||||||
|
#endif
|
||||||
|
#ifndef SEEK_END
|
||||||
|
#define SEEK_END 2 /* set file offset to EOF plus offset */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define TMP_MAX 26
|
||||||
|
|
||||||
|
#define stdin (_REENT->_stdin)
|
||||||
|
#define stdout (_REENT->_stdout)
|
||||||
|
#define stderr (_REENT->_stderr)
|
||||||
|
|
||||||
|
#define _stdin_r(x) ((x)->_stdin)
|
||||||
|
#define _stdout_r(x) ((x)->_stdout)
|
||||||
|
#define _stderr_r(x) ((x)->_stderr)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Functions defined in ANSI C standard.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __VALIST
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define __VALIST __gnuc_va_list
|
||||||
|
#else
|
||||||
|
#define __VALIST char*
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __POSIX_VISIBLE
|
||||||
|
char * ctermid (char *);
|
||||||
|
#endif
|
||||||
|
#if __GNU_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 600)
|
||||||
|
char * cuserid (char *);
|
||||||
|
#endif
|
||||||
|
FILE * tmpfile (void);
|
||||||
|
char * tmpnam (char *);
|
||||||
|
#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112
|
||||||
|
char * tempnam (const char *, const char *) __malloc_like __result_use_check;
|
||||||
|
#endif
|
||||||
|
int fclose (FILE *);
|
||||||
|
int fflush (FILE *);
|
||||||
|
FILE * freopen (const char *__restrict, const char *__restrict, FILE *__restrict);
|
||||||
|
void setbuf (FILE *__restrict, char *__restrict);
|
||||||
|
int setvbuf (FILE *__restrict, char *__restrict, int, size_t);
|
||||||
|
int fprintf (FILE *__restrict, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 3)));
|
||||||
|
int fscanf (FILE *__restrict, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 2, 3)));
|
||||||
|
int printf (const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 1, 2)));
|
||||||
|
int scanf (const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 1, 2)));
|
||||||
|
int sscanf (const char *__restrict, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 2, 3)));
|
||||||
|
int vfprintf (FILE *__restrict, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 0)));
|
||||||
|
int vprintf (const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 1, 0)));
|
||||||
|
int vsprintf (char *__restrict, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 0)));
|
||||||
|
int fgetc (FILE *);
|
||||||
|
char * fgets (char *__restrict, int, FILE *__restrict);
|
||||||
|
int fputc (int, FILE *);
|
||||||
|
int fputs (const char *__restrict, FILE *__restrict);
|
||||||
|
int getc (FILE *);
|
||||||
|
int getchar (void);
|
||||||
|
char * gets (char *);
|
||||||
|
int putc (int, FILE *);
|
||||||
|
int putchar (int);
|
||||||
|
int puts (const char *);
|
||||||
|
int ungetc (int, FILE *);
|
||||||
|
size_t fread (void *__restrict, size_t _size, size_t _n, FILE *__restrict);
|
||||||
|
size_t fwrite (const void *__restrict , size_t _size, size_t _n, FILE *);
|
||||||
|
#ifdef _COMPILING_NEWLIB
|
||||||
|
int fgetpos (FILE *, _fpos_t *);
|
||||||
|
#else
|
||||||
|
int fgetpos (FILE *__restrict, fpos_t *__restrict);
|
||||||
|
#endif
|
||||||
|
int fseek (FILE *, long, int);
|
||||||
|
#ifdef _COMPILING_NEWLIB
|
||||||
|
int fsetpos (FILE *, const _fpos_t *);
|
||||||
|
#else
|
||||||
|
int fsetpos (FILE *, const fpos_t *);
|
||||||
|
#endif
|
||||||
|
long ftell ( FILE *);
|
||||||
|
void rewind (FILE *);
|
||||||
|
void clearerr (FILE *);
|
||||||
|
int feof (FILE *);
|
||||||
|
int ferror (FILE *);
|
||||||
|
void perror (const char *);
|
||||||
|
#ifndef _REENT_ONLY
|
||||||
|
FILE * fopen (const char *__restrict _name, const char *__restrict _type);
|
||||||
|
int sprintf (char *__restrict, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 3)));
|
||||||
|
int remove (const char *);
|
||||||
|
int rename (const char *, const char *);
|
||||||
|
#ifdef _COMPILING_NEWLIB
|
||||||
|
int _rename (const char *, const char *);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#if __LARGEFILE_VISIBLE || __POSIX_VISIBLE >= 200112
|
||||||
|
#ifdef _COMPILING_NEWLIB
|
||||||
|
int fseeko (FILE *, _off_t, int);
|
||||||
|
_off_t ftello (FILE *);
|
||||||
|
#else
|
||||||
|
int fseeko (FILE *, off_t, int);
|
||||||
|
off_t ftello (FILE *);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
int fcloseall (void);
|
||||||
|
#endif
|
||||||
|
#ifndef _REENT_ONLY
|
||||||
|
#if __ISO_C_VISIBLE >= 1999
|
||||||
|
int snprintf (char *__restrict, size_t, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 4)));
|
||||||
|
int vsnprintf (char *__restrict, size_t, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 0)));
|
||||||
|
int vfscanf (FILE *__restrict, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 2, 0)));
|
||||||
|
int vscanf (const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 1, 0)));
|
||||||
|
int vsscanf (const char *__restrict, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 2, 0)));
|
||||||
|
#endif
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
int asprintf (char **__restrict, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 3)));
|
||||||
|
int vasprintf (char **, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 0)));
|
||||||
|
#endif
|
||||||
|
#if __MISC_VISIBLE /* Newlib-specific */
|
||||||
|
int asiprintf (char **, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 3)));
|
||||||
|
char * asniprintf (char *, size_t *, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 4)));
|
||||||
|
char * asnprintf (char *__restrict, size_t *__restrict, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 4)));
|
||||||
|
#ifndef diprintf
|
||||||
|
int diprintf (int, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 3)));
|
||||||
|
#endif
|
||||||
|
int fiprintf (FILE *, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 3)));
|
||||||
|
int fiscanf (FILE *, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 2, 3)));
|
||||||
|
int iprintf (const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 1, 2)));
|
||||||
|
int iscanf (const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 1, 2)));
|
||||||
|
int siprintf (char *, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 3)));
|
||||||
|
int siscanf (const char *, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 2, 3)));
|
||||||
|
int sniprintf (char *, size_t, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 4)));
|
||||||
|
int vasiprintf (char **, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 0)));
|
||||||
|
char * vasniprintf (char *, size_t *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 0)));
|
||||||
|
char * vasnprintf (char *, size_t *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 0)));
|
||||||
|
int vdiprintf (int, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 0)));
|
||||||
|
int vfiprintf (FILE *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 0)));
|
||||||
|
int vfiscanf (FILE *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 2, 0)));
|
||||||
|
int viprintf (const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 1, 0)));
|
||||||
|
int viscanf (const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 1, 0)));
|
||||||
|
int vsiprintf (char *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 0)));
|
||||||
|
int vsiscanf (const char *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 2, 0)));
|
||||||
|
int vsniprintf (char *, size_t, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 0)));
|
||||||
|
#endif /* __MISC_VISIBLE */
|
||||||
|
#endif /* !_REENT_ONLY */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Routines in POSIX 1003.1:2001.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if __POSIX_VISIBLE
|
||||||
|
#ifndef _REENT_ONLY
|
||||||
|
FILE * fdopen (int, const char *);
|
||||||
|
#endif
|
||||||
|
int fileno (FILE *);
|
||||||
|
#endif
|
||||||
|
#if __MISC_VISIBLE || __POSIX_VISIBLE >= 199209
|
||||||
|
int pclose (FILE *);
|
||||||
|
FILE * popen (const char *, const char *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
void setbuffer (FILE *, char *, int);
|
||||||
|
int setlinebuf (FILE *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __MISC_VISIBLE || (__XSI_VISIBLE && __POSIX_VISIBLE < 200112)
|
||||||
|
int getw (FILE *);
|
||||||
|
int putw (int, FILE *);
|
||||||
|
#endif
|
||||||
|
#if __MISC_VISIBLE || __POSIX_VISIBLE
|
||||||
|
int getc_unlocked (FILE *);
|
||||||
|
int getchar_unlocked (void);
|
||||||
|
void flockfile (FILE *);
|
||||||
|
int ftrylockfile (FILE *);
|
||||||
|
void funlockfile (FILE *);
|
||||||
|
int putc_unlocked (int, FILE *);
|
||||||
|
int putchar_unlocked (int);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Routines in POSIX 1003.1:200x.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if __POSIX_VISIBLE >= 200809
|
||||||
|
# ifndef _REENT_ONLY
|
||||||
|
# ifndef dprintf
|
||||||
|
int dprintf (int, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 3)));
|
||||||
|
# endif
|
||||||
|
FILE * fmemopen (void *__restrict, size_t, const char *__restrict);
|
||||||
|
/* getdelim - see __getdelim for now */
|
||||||
|
/* getline - see __getline for now */
|
||||||
|
FILE * open_memstream (char **, size_t *);
|
||||||
|
int vdprintf (int, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 0)));
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#if __ATFILE_VISIBLE
|
||||||
|
int renameat (int, const char *, int, const char *);
|
||||||
|
# ifdef __CYGWIN__
|
||||||
|
int renameat2 (int, const char *, int, const char *, unsigned int);
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Recursive versions of the above.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int _asiprintf_r (struct _reent *, char **, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 4)));
|
||||||
|
char * _asniprintf_r (struct _reent *, char *, size_t *, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 4, 5)));
|
||||||
|
char * _asnprintf_r (struct _reent *, char *__restrict, size_t *__restrict, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 4, 5)));
|
||||||
|
int _asprintf_r (struct _reent *, char **__restrict, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 4)));
|
||||||
|
int _diprintf_r (struct _reent *, int, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 4)));
|
||||||
|
int _dprintf_r (struct _reent *, int, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 4)));
|
||||||
|
int _fclose_r (struct _reent *, FILE *);
|
||||||
|
int _fcloseall_r (struct _reent *);
|
||||||
|
FILE * _fdopen_r (struct _reent *, int, const char *);
|
||||||
|
int _fflush_r (struct _reent *, FILE *);
|
||||||
|
int _fgetc_r (struct _reent *, FILE *);
|
||||||
|
int _fgetc_unlocked_r (struct _reent *, FILE *);
|
||||||
|
char * _fgets_r (struct _reent *, char *__restrict, int, FILE *__restrict);
|
||||||
|
char * _fgets_unlocked_r (struct _reent *, char *__restrict, int, FILE *__restrict);
|
||||||
|
#ifdef _COMPILING_NEWLIB
|
||||||
|
int _fgetpos_r (struct _reent *, FILE *__restrict, _fpos_t *__restrict);
|
||||||
|
int _fsetpos_r (struct _reent *, FILE *, const _fpos_t *);
|
||||||
|
#else
|
||||||
|
int _fgetpos_r (struct _reent *, FILE *, fpos_t *);
|
||||||
|
int _fsetpos_r (struct _reent *, FILE *, const fpos_t *);
|
||||||
|
#endif
|
||||||
|
int _fiprintf_r (struct _reent *, FILE *, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 4)));
|
||||||
|
int _fiscanf_r (struct _reent *, FILE *, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 3, 4)));
|
||||||
|
FILE * _fmemopen_r (struct _reent *, void *__restrict, size_t, const char *__restrict);
|
||||||
|
FILE * _fopen_r (struct _reent *, const char *__restrict, const char *__restrict);
|
||||||
|
FILE * _freopen_r (struct _reent *, const char *__restrict, const char *__restrict, FILE *__restrict);
|
||||||
|
int _fprintf_r (struct _reent *, FILE *__restrict, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 4)));
|
||||||
|
int _fpurge_r (struct _reent *, FILE *);
|
||||||
|
int _fputc_r (struct _reent *, int, FILE *);
|
||||||
|
int _fputc_unlocked_r (struct _reent *, int, FILE *);
|
||||||
|
int _fputs_r (struct _reent *, const char *__restrict, FILE *__restrict);
|
||||||
|
int _fputs_unlocked_r (struct _reent *, const char *__restrict, FILE *__restrict);
|
||||||
|
size_t _fread_r (struct _reent *, void *__restrict, size_t _size, size_t _n, FILE *__restrict);
|
||||||
|
size_t _fread_unlocked_r (struct _reent *, void *__restrict, size_t _size, size_t _n, FILE *__restrict);
|
||||||
|
int _fscanf_r (struct _reent *, FILE *__restrict, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 3, 4)));
|
||||||
|
int _fseek_r (struct _reent *, FILE *, long, int);
|
||||||
|
int _fseeko_r (struct _reent *, FILE *, _off_t, int);
|
||||||
|
long _ftell_r (struct _reent *, FILE *);
|
||||||
|
_off_t _ftello_r (struct _reent *, FILE *);
|
||||||
|
void _rewind_r (struct _reent *, FILE *);
|
||||||
|
size_t _fwrite_r (struct _reent *, const void *__restrict, size_t _size, size_t _n, FILE *__restrict);
|
||||||
|
size_t _fwrite_unlocked_r (struct _reent *, const void *__restrict, size_t _size, size_t _n, FILE *__restrict);
|
||||||
|
int _getc_r (struct _reent *, FILE *);
|
||||||
|
int _getc_unlocked_r (struct _reent *, FILE *);
|
||||||
|
int _getchar_r (struct _reent *);
|
||||||
|
int _getchar_unlocked_r (struct _reent *);
|
||||||
|
char * _gets_r (struct _reent *, char *);
|
||||||
|
int _iprintf_r (struct _reent *, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 3)));
|
||||||
|
int _iscanf_r (struct _reent *, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 2, 3)));
|
||||||
|
FILE * _open_memstream_r (struct _reent *, char **, size_t *);
|
||||||
|
void _perror_r (struct _reent *, const char *);
|
||||||
|
int _printf_r (struct _reent *, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 3)));
|
||||||
|
int _putc_r (struct _reent *, int, FILE *);
|
||||||
|
int _putc_unlocked_r (struct _reent *, int, FILE *);
|
||||||
|
int _putchar_unlocked_r (struct _reent *, int);
|
||||||
|
int _putchar_r (struct _reent *, int);
|
||||||
|
int _puts_r (struct _reent *, const char *);
|
||||||
|
int _remove_r (struct _reent *, const char *);
|
||||||
|
int _rename_r (struct _reent *,
|
||||||
|
const char *_old, const char *_new);
|
||||||
|
int _scanf_r (struct _reent *, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 2, 3)));
|
||||||
|
int _siprintf_r (struct _reent *, char *, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 4)));
|
||||||
|
int _siscanf_r (struct _reent *, const char *, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 3, 4)));
|
||||||
|
int _sniprintf_r (struct _reent *, char *, size_t, const char *, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 4, 5)));
|
||||||
|
int _snprintf_r (struct _reent *, char *__restrict, size_t, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 4, 5)));
|
||||||
|
int _sprintf_r (struct _reent *, char *__restrict, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 4)));
|
||||||
|
int _sscanf_r (struct _reent *, const char *__restrict, const char *__restrict, ...)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 3, 4)));
|
||||||
|
char * _tempnam_r (struct _reent *, const char *, const char *);
|
||||||
|
FILE * _tmpfile_r (struct _reent *);
|
||||||
|
char * _tmpnam_r (struct _reent *, char *);
|
||||||
|
int _ungetc_r (struct _reent *, int, FILE *);
|
||||||
|
int _vasiprintf_r (struct _reent *, char **, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 0)));
|
||||||
|
char * _vasniprintf_r (struct _reent*, char *, size_t *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 4, 0)));
|
||||||
|
char * _vasnprintf_r (struct _reent*, char *, size_t *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 4, 0)));
|
||||||
|
int _vasprintf_r (struct _reent *, char **, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 0)));
|
||||||
|
int _vdiprintf_r (struct _reent *, int, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 0)));
|
||||||
|
int _vdprintf_r (struct _reent *, int, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 0)));
|
||||||
|
int _vfiprintf_r (struct _reent *, FILE *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 0)));
|
||||||
|
int _vfiscanf_r (struct _reent *, FILE *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 3, 0)));
|
||||||
|
int _vfprintf_r (struct _reent *, FILE *__restrict, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 0)));
|
||||||
|
int _vfscanf_r (struct _reent *, FILE *__restrict, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 3, 0)));
|
||||||
|
int _viprintf_r (struct _reent *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 0)));
|
||||||
|
int _viscanf_r (struct _reent *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 2, 0)));
|
||||||
|
int _vprintf_r (struct _reent *, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 2, 0)));
|
||||||
|
int _vscanf_r (struct _reent *, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 2, 0)));
|
||||||
|
int _vsiprintf_r (struct _reent *, char *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 0)));
|
||||||
|
int _vsiscanf_r (struct _reent *, const char *, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 3, 0)));
|
||||||
|
int _vsniprintf_r (struct _reent *, char *, size_t, const char *, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 4, 0)));
|
||||||
|
int _vsnprintf_r (struct _reent *, char *__restrict, size_t, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 4, 0)));
|
||||||
|
int _vsprintf_r (struct _reent *, char *__restrict, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__printf__, 3, 0)));
|
||||||
|
int _vsscanf_r (struct _reent *, const char *__restrict, const char *__restrict, __VALIST)
|
||||||
|
_ATTRIBUTE ((__format__ (__scanf__, 3, 0)));
|
||||||
|
|
||||||
|
/* Other extensions. */
|
||||||
|
|
||||||
|
int fpurge (FILE *);
|
||||||
|
ssize_t __getdelim (char **, size_t *, int, FILE *);
|
||||||
|
ssize_t __getline (char **, size_t *, FILE *);
|
||||||
|
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
void clearerr_unlocked (FILE *);
|
||||||
|
int feof_unlocked (FILE *);
|
||||||
|
int ferror_unlocked (FILE *);
|
||||||
|
int fileno_unlocked (FILE *);
|
||||||
|
int fflush_unlocked (FILE *);
|
||||||
|
int fgetc_unlocked (FILE *);
|
||||||
|
int fputc_unlocked (int, FILE *);
|
||||||
|
size_t fread_unlocked (void *__restrict, size_t _size, size_t _n, FILE *__restrict);
|
||||||
|
size_t fwrite_unlocked (const void *__restrict , size_t _size, size_t _n, FILE *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
char * fgets_unlocked (char *__restrict, int, FILE *__restrict);
|
||||||
|
int fputs_unlocked (const char *__restrict, FILE *__restrict);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __LARGE64_FILES
|
||||||
|
#if !defined(__CYGWIN__) || defined(_COMPILING_NEWLIB)
|
||||||
|
FILE * fdopen64 (int, const char *);
|
||||||
|
FILE * fopen64 (const char *, const char *);
|
||||||
|
FILE * freopen64 (const char *, const char *, FILE *);
|
||||||
|
_off64_t ftello64 (FILE *);
|
||||||
|
_off64_t fseeko64 (FILE *, _off64_t, int);
|
||||||
|
int fgetpos64 (FILE *, _fpos64_t *);
|
||||||
|
int fsetpos64 (FILE *, const _fpos64_t *);
|
||||||
|
FILE * tmpfile64 (void);
|
||||||
|
|
||||||
|
FILE * _fdopen64_r (struct _reent *, int, const char *);
|
||||||
|
FILE * _fopen64_r (struct _reent *,const char *, const char *);
|
||||||
|
FILE * _freopen64_r (struct _reent *, const char *, const char *, FILE *);
|
||||||
|
_off64_t _ftello64_r (struct _reent *, FILE *);
|
||||||
|
_off64_t _fseeko64_r (struct _reent *, FILE *, _off64_t, int);
|
||||||
|
int _fgetpos64_r (struct _reent *, FILE *, _fpos64_t *);
|
||||||
|
int _fsetpos64_r (struct _reent *, FILE *, const _fpos64_t *);
|
||||||
|
FILE * _tmpfile64_r (struct _reent *);
|
||||||
|
#endif /* !__CYGWIN__ */
|
||||||
|
#endif /* __LARGE64_FILES */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Routines internal to the implementation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int __srget_r (struct _reent *, FILE *);
|
||||||
|
int __swbuf_r (struct _reent *, int, FILE *);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Stdio function-access interface.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
# ifdef __LARGE64_FILES
|
||||||
|
FILE *funopen (const void *__cookie,
|
||||||
|
int (*__readfn)(void *__c, char *__buf,
|
||||||
|
_READ_WRITE_BUFSIZE_TYPE __n),
|
||||||
|
int (*__writefn)(void *__c, const char *__buf,
|
||||||
|
_READ_WRITE_BUFSIZE_TYPE __n),
|
||||||
|
_fpos64_t (*__seekfn)(void *__c, _fpos64_t __off, int __whence),
|
||||||
|
int (*__closefn)(void *__c));
|
||||||
|
FILE *_funopen_r (struct _reent *, const void *__cookie,
|
||||||
|
int (*__readfn)(void *__c, char *__buf,
|
||||||
|
_READ_WRITE_BUFSIZE_TYPE __n),
|
||||||
|
int (*__writefn)(void *__c, const char *__buf,
|
||||||
|
_READ_WRITE_BUFSIZE_TYPE __n),
|
||||||
|
_fpos64_t (*__seekfn)(void *__c, _fpos64_t __off, int __whence),
|
||||||
|
int (*__closefn)(void *__c));
|
||||||
|
# else
|
||||||
|
FILE *funopen (const void *__cookie,
|
||||||
|
int (*__readfn)(void *__cookie, char *__buf,
|
||||||
|
_READ_WRITE_BUFSIZE_TYPE __n),
|
||||||
|
int (*__writefn)(void *__cookie, const char *__buf,
|
||||||
|
_READ_WRITE_BUFSIZE_TYPE __n),
|
||||||
|
fpos_t (*__seekfn)(void *__cookie, fpos_t __off, int __whence),
|
||||||
|
int (*__closefn)(void *__cookie));
|
||||||
|
FILE *_funopen_r (struct _reent *, const void *__cookie,
|
||||||
|
int (*__readfn)(void *__cookie, char *__buf,
|
||||||
|
_READ_WRITE_BUFSIZE_TYPE __n),
|
||||||
|
int (*__writefn)(void *__cookie, const char *__buf,
|
||||||
|
_READ_WRITE_BUFSIZE_TYPE __n),
|
||||||
|
fpos_t (*__seekfn)(void *__cookie, fpos_t __off, int __whence),
|
||||||
|
int (*__closefn)(void *__cookie));
|
||||||
|
# endif /* !__LARGE64_FILES */
|
||||||
|
|
||||||
|
# define fropen(__cookie, __fn) funopen(__cookie, __fn, (int (*)())0, \
|
||||||
|
(fpos_t (*)())0, (int (*)())0)
|
||||||
|
# define fwopen(__cookie, __fn) funopen(__cookie, (int (*)())0, __fn, \
|
||||||
|
(fpos_t (*)())0, (int (*)())0)
|
||||||
|
#endif /* __BSD_VISIBLE */
|
||||||
|
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
typedef ssize_t cookie_read_function_t(void *__cookie, char *__buf, size_t __n);
|
||||||
|
typedef ssize_t cookie_write_function_t(void *__cookie, const char *__buf,
|
||||||
|
size_t __n);
|
||||||
|
# ifdef __LARGE64_FILES
|
||||||
|
typedef int cookie_seek_function_t(void *__cookie, _off64_t *__off,
|
||||||
|
int __whence);
|
||||||
|
# else
|
||||||
|
typedef int cookie_seek_function_t(void *__cookie, off_t *__off, int __whence);
|
||||||
|
# endif /* !__LARGE64_FILES */
|
||||||
|
typedef int cookie_close_function_t(void *__cookie);
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
/* These four struct member names are dictated by Linux; hopefully,
|
||||||
|
they don't conflict with any macros. */
|
||||||
|
cookie_read_function_t *read;
|
||||||
|
cookie_write_function_t *write;
|
||||||
|
cookie_seek_function_t *seek;
|
||||||
|
cookie_close_function_t *close;
|
||||||
|
} cookie_io_functions_t;
|
||||||
|
FILE *fopencookie (void *__cookie,
|
||||||
|
const char *__mode, cookie_io_functions_t __functions);
|
||||||
|
FILE *_fopencookie_r (struct _reent *, void *__cookie,
|
||||||
|
const char *__mode, cookie_io_functions_t __functions);
|
||||||
|
#endif /* __GNU_VISIBLE */
|
||||||
|
|
||||||
|
#ifndef __CUSTOM_FILE_IO__
|
||||||
|
/*
|
||||||
|
* The __sfoo macros are here so that we can
|
||||||
|
* define function versions in the C library.
|
||||||
|
*/
|
||||||
|
#define __sgetc_raw_r(__ptr, __f) (--(__f)->_r < 0 ? __srget_r(__ptr, __f) : (int)(*(__f)->_p++))
|
||||||
|
|
||||||
|
#ifdef __SCLE
|
||||||
|
/* For a platform with CR/LF, additional logic is required by
|
||||||
|
__sgetc_r which would otherwise simply be a macro; therefore we
|
||||||
|
use an inlined function. The function is only meant to be inlined
|
||||||
|
in place as used and the function body should never be emitted.
|
||||||
|
|
||||||
|
There are two possible means to this end when compiling with GCC,
|
||||||
|
one when compiling with a standard C99 compiler, and for other
|
||||||
|
compilers we're just stuck. At the moment, this issue only
|
||||||
|
affects the Cygwin target, so we'll most likely be using GCC. */
|
||||||
|
|
||||||
|
_ELIDABLE_INLINE int __sgetc_r(struct _reent *__ptr, FILE *__p);
|
||||||
|
|
||||||
|
_ELIDABLE_INLINE int __sgetc_r(struct _reent *__ptr, FILE *__p)
|
||||||
|
{
|
||||||
|
int __c = __sgetc_raw_r(__ptr, __p);
|
||||||
|
if ((__p->_flags & __SCLE) && (__c == '\r'))
|
||||||
|
{
|
||||||
|
int __c2 = __sgetc_raw_r(__ptr, __p);
|
||||||
|
if (__c2 == '\n')
|
||||||
|
__c = __c2;
|
||||||
|
else
|
||||||
|
ungetc(__c2, __p);
|
||||||
|
}
|
||||||
|
return __c;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define __sgetc_r(__ptr, __p) __sgetc_raw_r(__ptr, __p)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
_ELIDABLE_INLINE int __sputc_r(struct _reent *_ptr, int _c, FILE *_p) {
|
||||||
|
#ifdef __SCLE
|
||||||
|
if ((_p->_flags & __SCLE) && _c == '\n')
|
||||||
|
__sputc_r (_ptr, '\r', _p);
|
||||||
|
#endif
|
||||||
|
if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
|
||||||
|
return (*_p->_p++ = _c);
|
||||||
|
else
|
||||||
|
return (__swbuf_r(_ptr, _c, _p));
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* This has been tuned to generate reasonable code on the vax using pcc
|
||||||
|
*/
|
||||||
|
#define __sputc_raw_r(__ptr, __c, __p) \
|
||||||
|
(--(__p)->_w < 0 ? \
|
||||||
|
(__p)->_w >= (__p)->_lbfsize ? \
|
||||||
|
(*(__p)->_p = (__c)), *(__p)->_p != '\n' ? \
|
||||||
|
(int)*(__p)->_p++ : \
|
||||||
|
__swbuf_r(__ptr, '\n', __p) : \
|
||||||
|
__swbuf_r(__ptr, (int)(__c), __p) : \
|
||||||
|
(*(__p)->_p = (__c), (int)*(__p)->_p++))
|
||||||
|
#ifdef __SCLE
|
||||||
|
#define __sputc_r(__ptr, __c, __p) \
|
||||||
|
((((__p)->_flags & __SCLE) && ((__c) == '\n')) \
|
||||||
|
? __sputc_raw_r(__ptr, '\r', (__p)) : 0 , \
|
||||||
|
__sputc_raw_r((__ptr), (__c), (__p)))
|
||||||
|
#else
|
||||||
|
#define __sputc_r(__ptr, __c, __p) __sputc_raw_r(__ptr, __c, __p)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define __sfeof(p) ((int)(((p)->_flags & __SEOF) != 0))
|
||||||
|
#define __sferror(p) ((int)(((p)->_flags & __SERR) != 0))
|
||||||
|
#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))
|
||||||
|
#define __sfileno(p) ((p)->_file)
|
||||||
|
|
||||||
|
#ifndef __cplusplus
|
||||||
|
#ifndef _REENT_SMALL
|
||||||
|
#define feof(p) __sfeof(p)
|
||||||
|
#define ferror(p) __sferror(p)
|
||||||
|
#define clearerr(p) __sclearerr(p)
|
||||||
|
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
#define feof_unlocked(p) __sfeof(p)
|
||||||
|
#define ferror_unlocked(p) __sferror(p)
|
||||||
|
#define clearerr_unlocked(p) __sclearerr(p)
|
||||||
|
#endif /* __MISC_VISIBLE */
|
||||||
|
#endif /* _REENT_SMALL */
|
||||||
|
|
||||||
|
#if 0 /* __POSIX_VISIBLE - FIXME: must initialize stdio first, use fn */
|
||||||
|
#define fileno(p) __sfileno(p)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static __inline int
|
||||||
|
_getchar_unlocked(void)
|
||||||
|
{
|
||||||
|
struct _reent *_ptr;
|
||||||
|
|
||||||
|
_ptr = _REENT;
|
||||||
|
return (__sgetc_r(_ptr, _stdin_r(_ptr)));
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline int
|
||||||
|
_putchar_unlocked(int _c)
|
||||||
|
{
|
||||||
|
struct _reent *_ptr;
|
||||||
|
|
||||||
|
_ptr = _REENT;
|
||||||
|
return (__sputc_r(_ptr, _c, _stdout_r(_ptr)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __SINGLE_THREAD__
|
||||||
|
#define getc(_p) __sgetc_r(_REENT, _p)
|
||||||
|
#define putc(_c, _p) __sputc_r(_REENT, _c, _p)
|
||||||
|
#define getchar() _getchar_unlocked()
|
||||||
|
#define putchar(_c) _putchar_unlocked(_c)
|
||||||
|
#endif /* __SINGLE_THREAD__ */
|
||||||
|
|
||||||
|
#if __MISC_VISIBLE || __POSIX_VISIBLE
|
||||||
|
#define getchar_unlocked() _getchar_unlocked()
|
||||||
|
#define putchar_unlocked(_c) _putchar_unlocked(_c)
|
||||||
|
#endif
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
/* fast always-buffered version, true iff error */
|
||||||
|
#define fast_putc(x,p) (--(p)->_w < 0 ? \
|
||||||
|
__swbuf_r(_REENT, (int)(x), p) == EOF : (*(p)->_p = (x), (p)->_p++, 0))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __GNU_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 600)
|
||||||
|
#define L_cuserid 9 /* posix says it goes in stdio.h :( */
|
||||||
|
#endif
|
||||||
|
#if __POSIX_VISIBLE
|
||||||
|
#define L_ctermid 16
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else /* __CUSTOM_FILE_IO__ */
|
||||||
|
|
||||||
|
#define getchar() getc(stdin)
|
||||||
|
#define putchar(x) putc(x, stdout)
|
||||||
|
|
||||||
|
#if __MISC_VISIBLE || __POSIX_VISIBLE
|
||||||
|
#define getchar_unlocked() getc_unlocked(stdin)
|
||||||
|
#define putchar_unlocked(x) putc_unlocked(x, stdout)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !__CUSTOM_FILE_IO__ */
|
||||||
|
|
||||||
|
_END_STD_C
|
||||||
|
|
||||||
|
#if __SSP_FORTIFY_LEVEL > 0
|
||||||
|
#include <ssp/stdio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _STDIO_H_ */
|
|
@ -0,0 +1,342 @@
|
||||||
|
/*
|
||||||
|
* stdlib.h
|
||||||
|
*
|
||||||
|
* Definitions for common types, variables, and functions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _STDLIB_H_
|
||||||
|
#define _STDLIB_H_
|
||||||
|
|
||||||
|
#include <machine/ieeefp.h>
|
||||||
|
#include "_ansi.h"
|
||||||
|
|
||||||
|
#define __need_size_t
|
||||||
|
#define __need_wchar_t
|
||||||
|
#define __need_NULL
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#include <sys/reent.h>
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#include <machine/stdlib.h>
|
||||||
|
#ifndef __STRICT_ANSI__
|
||||||
|
#include <alloca.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __CYGWIN__
|
||||||
|
#include <cygwin/stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
#include <xlocale.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
_BEGIN_STD_C
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int quot; /* quotient */
|
||||||
|
int rem; /* remainder */
|
||||||
|
} div_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
long quot; /* quotient */
|
||||||
|
long rem; /* remainder */
|
||||||
|
} ldiv_t;
|
||||||
|
|
||||||
|
#if __ISO_C_VISIBLE >= 1999
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
long long int quot; /* quotient */
|
||||||
|
long long int rem; /* remainder */
|
||||||
|
} lldiv_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __compar_fn_t_defined
|
||||||
|
#define __compar_fn_t_defined
|
||||||
|
typedef int (*__compar_fn_t) (const void *, const void *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define EXIT_FAILURE 1
|
||||||
|
#define EXIT_SUCCESS 0
|
||||||
|
|
||||||
|
#define RAND_MAX __RAND_MAX
|
||||||
|
|
||||||
|
int __locale_mb_cur_max (void);
|
||||||
|
|
||||||
|
#define MB_CUR_MAX __locale_mb_cur_max()
|
||||||
|
|
||||||
|
void abort (void) _ATTRIBUTE ((__noreturn__));
|
||||||
|
int abs (int);
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
__uint32_t arc4random (void);
|
||||||
|
__uint32_t arc4random_uniform (__uint32_t);
|
||||||
|
void arc4random_buf (void *, size_t);
|
||||||
|
#endif
|
||||||
|
int atexit (void (*__func)(void));
|
||||||
|
double atof (const char *__nptr);
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
float atoff (const char *__nptr);
|
||||||
|
#endif
|
||||||
|
int atoi (const char *__nptr);
|
||||||
|
int _atoi_r (struct _reent *, const char *__nptr);
|
||||||
|
long atol (const char *__nptr);
|
||||||
|
long _atol_r (struct _reent *, const char *__nptr);
|
||||||
|
void * bsearch (const void *__key,
|
||||||
|
const void *__base,
|
||||||
|
size_t __nmemb,
|
||||||
|
size_t __size,
|
||||||
|
__compar_fn_t _compar);
|
||||||
|
void *calloc(size_t, size_t) __malloc_like __result_use_check
|
||||||
|
__alloc_size2(1, 2) _NOTHROW;
|
||||||
|
div_t div (int __numer, int __denom);
|
||||||
|
void exit (int __status) _ATTRIBUTE ((__noreturn__));
|
||||||
|
void free (void *) _NOTHROW;
|
||||||
|
char * getenv (const char *__string);
|
||||||
|
char * _getenv_r (struct _reent *, const char *__string);
|
||||||
|
char * _findenv (const char *, int *);
|
||||||
|
char * _findenv_r (struct _reent *, const char *, int *);
|
||||||
|
#if __POSIX_VISIBLE >= 200809
|
||||||
|
extern char *suboptarg; /* getsubopt(3) external variable */
|
||||||
|
int getsubopt (char **, char * const *, char **);
|
||||||
|
#endif
|
||||||
|
long labs (long);
|
||||||
|
ldiv_t ldiv (long __numer, long __denom);
|
||||||
|
void *malloc(size_t) __malloc_like __result_use_check __alloc_size(1) _NOTHROW;
|
||||||
|
int mblen (const char *, size_t);
|
||||||
|
int _mblen_r (struct _reent *, const char *, size_t, _mbstate_t *);
|
||||||
|
int mbtowc (wchar_t *__restrict, const char *__restrict, size_t);
|
||||||
|
int _mbtowc_r (struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *);
|
||||||
|
int wctomb (char *, wchar_t);
|
||||||
|
int _wctomb_r (struct _reent *, char *, wchar_t, _mbstate_t *);
|
||||||
|
size_t mbstowcs (wchar_t *__restrict, const char *__restrict, size_t);
|
||||||
|
size_t _mbstowcs_r (struct _reent *, wchar_t *__restrict, const char *__restrict, size_t, _mbstate_t *);
|
||||||
|
size_t wcstombs (char *__restrict, const wchar_t *__restrict, size_t);
|
||||||
|
size_t _wcstombs_r (struct _reent *, char *__restrict, const wchar_t *__restrict, size_t, _mbstate_t *);
|
||||||
|
#ifndef _REENT_ONLY
|
||||||
|
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809
|
||||||
|
char * mkdtemp (char *);
|
||||||
|
#endif
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
int mkostemp (char *, int);
|
||||||
|
int mkostemps (char *, int, int);
|
||||||
|
#endif
|
||||||
|
#if __MISC_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 4
|
||||||
|
int mkstemp (char *);
|
||||||
|
#endif
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
int mkstemps (char *, int);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112)
|
||||||
|
char * mktemp (char *) _ATTRIBUTE ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")));
|
||||||
|
#endif
|
||||||
|
#endif /* !_REENT_ONLY */
|
||||||
|
char * _mkdtemp_r (struct _reent *, char *);
|
||||||
|
int _mkostemp_r (struct _reent *, char *, int);
|
||||||
|
int _mkostemps_r (struct _reent *, char *, int, int);
|
||||||
|
int _mkstemp_r (struct _reent *, char *);
|
||||||
|
int _mkstemps_r (struct _reent *, char *, int);
|
||||||
|
char * _mktemp_r (struct _reent *, char *) _ATTRIBUTE ((__deprecated__("the use of `mktemp' is dangerous; use `mkstemp' instead")));
|
||||||
|
void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t _compar);
|
||||||
|
int rand (void);
|
||||||
|
void *realloc(void *, size_t) __result_use_check __alloc_size(2) _NOTHROW;
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
void *reallocarray(void *, size_t, size_t) __result_use_check __alloc_size2(2, 3);
|
||||||
|
void *reallocf(void *, size_t) __result_use_check __alloc_size(2);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4
|
||||||
|
char * realpath (const char *__restrict path, char *__restrict resolved_path);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
int rpmatch (const char *response);
|
||||||
|
#endif
|
||||||
|
#if __XSI_VISIBLE
|
||||||
|
void setkey (const char *__key);
|
||||||
|
#endif
|
||||||
|
void srand (unsigned __seed);
|
||||||
|
double strtod (const char *__restrict __n, char **__restrict __end_PTR);
|
||||||
|
double _strtod_r (struct _reent *,const char *__restrict __n, char **__restrict __end_PTR);
|
||||||
|
#if __ISO_C_VISIBLE >= 1999
|
||||||
|
float strtof (const char *__restrict __n, char **__restrict __end_PTR);
|
||||||
|
#endif
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
/* the following strtodf interface is deprecated...use strtof instead */
|
||||||
|
# ifndef strtodf
|
||||||
|
# define strtodf strtof
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
long strtol (const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
||||||
|
long _strtol_r (struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
||||||
|
unsigned long strtoul (const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
||||||
|
unsigned long _strtoul_r (struct _reent *,const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
||||||
|
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
double strtod_l (const char *__restrict, char **__restrict, locale_t);
|
||||||
|
float strtof_l (const char *__restrict, char **__restrict, locale_t);
|
||||||
|
#ifdef _HAVE_LONG_DOUBLE
|
||||||
|
extern long double strtold_l (const char *__restrict, char **__restrict,
|
||||||
|
locale_t);
|
||||||
|
#endif /* _HAVE_LONG_DOUBLE */
|
||||||
|
long strtol_l (const char *__restrict, char **__restrict, int, locale_t);
|
||||||
|
unsigned long strtoul_l (const char *__restrict, char **__restrict, int,
|
||||||
|
locale_t __loc);
|
||||||
|
long long strtoll_l (const char *__restrict, char **__restrict, int, locale_t);
|
||||||
|
unsigned long long strtoull_l (const char *__restrict, char **__restrict, int,
|
||||||
|
locale_t __loc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int system (const char *__string);
|
||||||
|
|
||||||
|
#if __SVID_VISIBLE || __XSI_VISIBLE >= 4
|
||||||
|
long a64l (const char *__input);
|
||||||
|
char * l64a (long __input);
|
||||||
|
char * _l64a_r (struct _reent *,long __input);
|
||||||
|
#endif
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
int on_exit (void (*__func)(int, void *),void *__arg);
|
||||||
|
#endif
|
||||||
|
#if __ISO_C_VISIBLE >= 1999
|
||||||
|
void _Exit (int __status) _ATTRIBUTE ((__noreturn__));
|
||||||
|
#endif
|
||||||
|
#if __SVID_VISIBLE || __XSI_VISIBLE
|
||||||
|
int putenv (char *__string);
|
||||||
|
#endif
|
||||||
|
int _putenv_r (struct _reent *, char *__string);
|
||||||
|
void * _reallocf_r (struct _reent *, void *, size_t);
|
||||||
|
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112
|
||||||
|
int setenv (const char *__string, const char *__value, int __overwrite);
|
||||||
|
#endif
|
||||||
|
int _setenv_r (struct _reent *, const char *__string, const char *__value, int __overwrite);
|
||||||
|
|
||||||
|
#if __XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112
|
||||||
|
char * gcvt (double,int,char *);
|
||||||
|
char * gcvtf (float,int,char *);
|
||||||
|
char * fcvt (double,int,int *,int *);
|
||||||
|
char * fcvtf (float,int,int *,int *);
|
||||||
|
char * ecvt (double,int,int *,int *);
|
||||||
|
char * ecvtbuf (double, int, int*, int*, char *);
|
||||||
|
char * fcvtbuf (double, int, int*, int*, char *);
|
||||||
|
char * ecvtf (float,int,int *,int *);
|
||||||
|
#endif
|
||||||
|
char * __itoa (int, char *, int);
|
||||||
|
char * __utoa (unsigned, char *, int);
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
char * itoa (int, char *, int);
|
||||||
|
char * utoa (unsigned, char *, int);
|
||||||
|
#endif
|
||||||
|
#if __POSIX_VISIBLE
|
||||||
|
int rand_r (unsigned *__seed);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __SVID_VISIBLE || __XSI_VISIBLE
|
||||||
|
double drand48 (void);
|
||||||
|
double _drand48_r (struct _reent *);
|
||||||
|
double erand48 (unsigned short [3]);
|
||||||
|
double _erand48_r (struct _reent *, unsigned short [3]);
|
||||||
|
long jrand48 (unsigned short [3]);
|
||||||
|
long _jrand48_r (struct _reent *, unsigned short [3]);
|
||||||
|
void lcong48 (unsigned short [7]);
|
||||||
|
void _lcong48_r (struct _reent *, unsigned short [7]);
|
||||||
|
long lrand48 (void);
|
||||||
|
long _lrand48_r (struct _reent *);
|
||||||
|
long mrand48 (void);
|
||||||
|
long _mrand48_r (struct _reent *);
|
||||||
|
long nrand48 (unsigned short [3]);
|
||||||
|
long _nrand48_r (struct _reent *, unsigned short [3]);
|
||||||
|
unsigned short *
|
||||||
|
seed48 (unsigned short [3]);
|
||||||
|
unsigned short *
|
||||||
|
_seed48_r (struct _reent *, unsigned short [3]);
|
||||||
|
void srand48 (long);
|
||||||
|
void _srand48_r (struct _reent *, long);
|
||||||
|
#endif /* __SVID_VISIBLE || __XSI_VISIBLE */
|
||||||
|
#if __SVID_VISIBLE || __XSI_VISIBLE >= 4 || __BSD_VISIBLE
|
||||||
|
char * initstate (unsigned, char *, size_t);
|
||||||
|
long random (void);
|
||||||
|
char * setstate (char *);
|
||||||
|
void srandom (unsigned);
|
||||||
|
#endif
|
||||||
|
#if __ISO_C_VISIBLE >= 1999
|
||||||
|
long long atoll (const char *__nptr);
|
||||||
|
#endif
|
||||||
|
long long _atoll_r (struct _reent *, const char *__nptr);
|
||||||
|
#if __ISO_C_VISIBLE >= 1999
|
||||||
|
long long llabs (long long);
|
||||||
|
lldiv_t lldiv (long long __numer, long long __denom);
|
||||||
|
long long strtoll (const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
||||||
|
#endif
|
||||||
|
long long _strtoll_r (struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
||||||
|
#if __ISO_C_VISIBLE >= 1999
|
||||||
|
unsigned long long strtoull (const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
||||||
|
#endif
|
||||||
|
unsigned long long _strtoull_r (struct _reent *, const char *__restrict __n, char **__restrict __end_PTR, int __base);
|
||||||
|
|
||||||
|
#ifndef __CYGWIN__
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
void cfree (void *);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112
|
||||||
|
int unsetenv (const char *__string);
|
||||||
|
#endif
|
||||||
|
int _unsetenv_r (struct _reent *, const char *__string);
|
||||||
|
#endif /* !__CYGWIN__ */
|
||||||
|
|
||||||
|
#if __POSIX_VISIBLE >= 200112
|
||||||
|
int posix_memalign (void **, size_t, size_t) __nonnull((1))
|
||||||
|
__result_use_check;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
char * _dtoa_r (struct _reent *, double, int, int, int *, int*, char**);
|
||||||
|
#ifndef __CYGWIN__
|
||||||
|
void * _malloc_r (struct _reent *, size_t) _NOTHROW;
|
||||||
|
void * _calloc_r (struct _reent *, size_t, size_t) _NOTHROW;
|
||||||
|
void _free_r (struct _reent *, void *) _NOTHROW;
|
||||||
|
void * _realloc_r (struct _reent *, void *, size_t) _NOTHROW;
|
||||||
|
void _mstats_r (struct _reent *, char *);
|
||||||
|
#endif
|
||||||
|
int _system_r (struct _reent *, const char *);
|
||||||
|
|
||||||
|
void __eprintf (const char *, const char *, unsigned int, const char *);
|
||||||
|
|
||||||
|
/* There are two common qsort_r variants. If you request
|
||||||
|
_BSD_SOURCE, you get the BSD version; otherwise you get the GNU
|
||||||
|
version. We want that #undef qsort_r will still let you
|
||||||
|
invoke the underlying function, but that requires gcc support. */
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
void qsort_r (void *__base, size_t __nmemb, size_t __size, int (*_compar)(const void *, const void *, void *), void *__thunk);
|
||||||
|
#elif __BSD_VISIBLE
|
||||||
|
# ifdef __GNUC__
|
||||||
|
void qsort_r (void *__base, size_t __nmemb, size_t __size, void *__thunk, int (*_compar)(void *, const void *, const void *))
|
||||||
|
__asm__ (__ASMNAME ("__bsd_qsort_r"));
|
||||||
|
# else
|
||||||
|
void __bsd_qsort_r (void *__base, size_t __nmemb, size_t __size, void *__thunk, int (*_compar)(void *, const void *, const void *));
|
||||||
|
# define qsort_r __bsd_qsort_r
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* On platforms where long double equals double. */
|
||||||
|
#ifdef _HAVE_LONG_DOUBLE
|
||||||
|
extern long double _strtold_r (struct _reent *, const char *__restrict, char **__restrict);
|
||||||
|
#if __ISO_C_VISIBLE >= 1999
|
||||||
|
extern long double strtold (const char *__restrict, char **__restrict);
|
||||||
|
#endif
|
||||||
|
#endif /* _HAVE_LONG_DOUBLE */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we're in a mode greater than C99, expose C11 functions.
|
||||||
|
*/
|
||||||
|
#if __ISO_C_VISIBLE >= 2011
|
||||||
|
void * aligned_alloc(size_t, size_t) __malloc_like __alloc_align(1)
|
||||||
|
__alloc_size(2) __result_use_check;
|
||||||
|
int at_quick_exit(void (*)(void));
|
||||||
|
_Noreturn void
|
||||||
|
quick_exit(int);
|
||||||
|
#endif /* __ISO_C_VISIBLE >= 2011 */
|
||||||
|
|
||||||
|
_END_STD_C
|
||||||
|
|
||||||
|
#if __SSP_FORTIFY_LEVEL > 0
|
||||||
|
#include <ssp/stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _STDLIB_H_ */
|
|
@ -0,0 +1,183 @@
|
||||||
|
/*
|
||||||
|
* string.h
|
||||||
|
*
|
||||||
|
* Definitions for memory and string functions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _STRING_H_
|
||||||
|
#define _STRING_H_
|
||||||
|
|
||||||
|
#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>
|
||||||
|
|
||||||
|
#if __POSIX_VISIBLE >= 200809
|
||||||
|
#include <xlocale.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
#include <strings.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
_BEGIN_STD_C
|
||||||
|
|
||||||
|
void * memchr (const void *, int, size_t);
|
||||||
|
int memcmp (const void *, const void *, size_t);
|
||||||
|
void * memcpy (void *__restrict, const void *__restrict, size_t);
|
||||||
|
void * memmove (void *, const void *, size_t);
|
||||||
|
void * memset (void *, int, size_t);
|
||||||
|
char *strcat (char *__restrict, const char *__restrict);
|
||||||
|
char *strchr (const char *, int);
|
||||||
|
int strcmp (const char *, const char *);
|
||||||
|
int strcoll (const char *, const char *);
|
||||||
|
char *strcpy (char *__restrict, const char *__restrict);
|
||||||
|
size_t strcspn (const char *, const char *);
|
||||||
|
char *strerror (int);
|
||||||
|
size_t strlen (const char *);
|
||||||
|
char *strncat (char *__restrict, const char *__restrict, size_t);
|
||||||
|
int strncmp (const char *, const char *, size_t);
|
||||||
|
char *strncpy (char *__restrict, const char *__restrict, size_t);
|
||||||
|
char *strpbrk (const char *, const char *);
|
||||||
|
char *strrchr (const char *, int);
|
||||||
|
size_t strspn (const char *, const char *);
|
||||||
|
char *strstr (const char *, const char *);
|
||||||
|
#ifndef _REENT_ONLY
|
||||||
|
char *strtok (char *__restrict, const char *__restrict);
|
||||||
|
#endif
|
||||||
|
size_t strxfrm (char *__restrict, const char *__restrict, size_t);
|
||||||
|
|
||||||
|
#if __POSIX_VISIBLE >= 200809
|
||||||
|
int strcoll_l (const char *, const char *, locale_t);
|
||||||
|
char *strerror_l (int, locale_t);
|
||||||
|
size_t strxfrm_l (char *__restrict, const char *__restrict, size_t, locale_t);
|
||||||
|
#endif
|
||||||
|
#if __MISC_VISIBLE || __POSIX_VISIBLE
|
||||||
|
char *strtok_r (char *__restrict, const char *__restrict, char **__restrict);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
int timingsafe_bcmp (const void *, const void *, size_t);
|
||||||
|
int timingsafe_memcmp (const void *, const void *, size_t);
|
||||||
|
#endif
|
||||||
|
#if __MISC_VISIBLE || __POSIX_VISIBLE
|
||||||
|
void * memccpy (void *__restrict, const void *__restrict, int, size_t);
|
||||||
|
#endif
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
void * mempcpy (void *, const void *, size_t);
|
||||||
|
void * memmem (const void *, size_t, const void *, size_t);
|
||||||
|
void * memrchr (const void *, int, size_t);
|
||||||
|
void * rawmemchr (const void *, int);
|
||||||
|
#endif
|
||||||
|
#if __POSIX_VISIBLE >= 200809
|
||||||
|
char *stpcpy (char *__restrict, const char *__restrict);
|
||||||
|
char *stpncpy (char *__restrict, const char *__restrict, size_t);
|
||||||
|
#endif
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
char *strcasestr (const char *, const char *);
|
||||||
|
char *strchrnul (const char *, int);
|
||||||
|
#endif
|
||||||
|
#if __MISC_VISIBLE || __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 4
|
||||||
|
char *strdup (const char *) __malloc_like __result_use_check;
|
||||||
|
#endif
|
||||||
|
char *_strdup_r (struct _reent *, const char *);
|
||||||
|
#if __POSIX_VISIBLE >= 200809
|
||||||
|
char *strndup (const char *, size_t) __malloc_like __result_use_check;
|
||||||
|
#endif
|
||||||
|
char *_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
|
||||||
|
version. POSIX requires that #undef strerror_r will still let you
|
||||||
|
invoke the underlying function, but that requires gcc support. */
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
char *strerror_r (int, char *, size_t);
|
||||||
|
#elif __POSIX_VISIBLE >= 200112
|
||||||
|
# ifdef __GNUC__
|
||||||
|
int strerror_r (int, char *, size_t)
|
||||||
|
#ifdef __ASMNAME
|
||||||
|
__asm__ (__ASMNAME ("__xpg_strerror_r"))
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
# else
|
||||||
|
int __xpg_strerror_r (int, char *, size_t);
|
||||||
|
# define strerror_r __xpg_strerror_r
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Reentrant version of strerror. */
|
||||||
|
char * _strerror_r (struct _reent *, int, int, int *);
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
size_t strlcat (char *, const char *, size_t);
|
||||||
|
size_t strlcpy (char *, const char *, size_t);
|
||||||
|
#endif
|
||||||
|
#if __POSIX_VISIBLE >= 200809
|
||||||
|
size_t strnlen (const char *, size_t);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
char *strsep (char **, const char *);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
char *strnstr(const char *, const char *, size_t) __pure;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
char *strlwr (char *);
|
||||||
|
char *strupr (char *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DEFS_H /* Kludge to work around problem compiling in gdb */
|
||||||
|
char *strsignal (int __signo);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __CYGWIN__
|
||||||
|
int strtosigno (const char *__name);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
int strverscmp (const char *, const char *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __GNU_VISIBLE && defined(__GNUC__)
|
||||||
|
#define strdupa(__s) \
|
||||||
|
(__extension__ ({const char *__sin = (__s); \
|
||||||
|
size_t __len = strlen (__sin) + 1; \
|
||||||
|
char * __sout = (char *) __builtin_alloca (__len); \
|
||||||
|
(char *) memcpy (__sout, __sin, __len);}))
|
||||||
|
#define strndupa(__s, __n) \
|
||||||
|
(__extension__ ({const char *__sin = (__s); \
|
||||||
|
size_t __len = strnlen (__sin, (__n)) + 1; \
|
||||||
|
char *__sout = (char *) __builtin_alloca (__len); \
|
||||||
|
__sout[__len-1] = '\0'; \
|
||||||
|
(char *) memcpy (__sout, __sin, __len-1);}))
|
||||||
|
#endif /* __GNU_VISIBLE && __GNUC__ */
|
||||||
|
|
||||||
|
/* There are two common basename variants. If you do NOT #include <libgen.h>
|
||||||
|
and you do
|
||||||
|
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
you get the GNU version. Otherwise you get the POSIX versionfor which you
|
||||||
|
should #include <libgen.h>i for the function prototype. POSIX requires that
|
||||||
|
#undef basename will still let you invoke the underlying function. However,
|
||||||
|
this also implies that the POSIX version is used in this case. That's made
|
||||||
|
sure here. */
|
||||||
|
#if __GNU_VISIBLE && !defined(basename)
|
||||||
|
# define basename basename
|
||||||
|
char *__nonnull ((1)) basename (const char *) __asm__(__ASMNAME("__gnu_basename"));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <sys/string.h>
|
||||||
|
|
||||||
|
_END_STD_C
|
||||||
|
|
||||||
|
#if __SSP_FORTIFY_LEVEL > 0
|
||||||
|
#include <ssp/string.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _STRING_H_ */
|
|
@ -0,0 +1,80 @@
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 2002 Mike Barcroft <mike@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: head/include/strings.h 272673 2014-10-07 04:54:11Z delphij $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _STRINGS_H_
|
||||||
|
#define _STRINGS_H_
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#include <sys/_types.h>
|
||||||
|
|
||||||
|
#if __POSIX_VISIBLE >= 200809
|
||||||
|
#include <xlocale.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _SIZE_T_DECLARED
|
||||||
|
typedef __size_t size_t;
|
||||||
|
#define _SIZE_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
#if __BSD_VISIBLE || __POSIX_VISIBLE <= 200112
|
||||||
|
int bcmp(const void *, const void *, size_t) __pure; /* LEGACY */
|
||||||
|
void bcopy(const void *, void *, size_t); /* LEGACY */
|
||||||
|
void bzero(void *, size_t); /* LEGACY */
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
void explicit_bzero(void *, size_t);
|
||||||
|
#endif
|
||||||
|
#if __MISC_VISIBLE || __POSIX_VISIBLE < 200809 || __XSI_VISIBLE >= 700
|
||||||
|
int ffs(int) __pure2;
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
int ffsl(long) __pure2;
|
||||||
|
int ffsll(long long) __pure2;
|
||||||
|
int fls(int) __pure2;
|
||||||
|
int flsl(long) __pure2;
|
||||||
|
int flsll(long long) __pure2;
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || __POSIX_VISIBLE <= 200112
|
||||||
|
char *index(const char *, int) __pure; /* LEGACY */
|
||||||
|
char *rindex(const char *, int) __pure; /* LEGACY */
|
||||||
|
#endif
|
||||||
|
int strcasecmp(const char *, const char *) __pure;
|
||||||
|
int strncasecmp(const char *, const char *, size_t) __pure;
|
||||||
|
|
||||||
|
#if __POSIX_VISIBLE >= 200809
|
||||||
|
int strcasecmp_l (const char *, const char *, locale_t);
|
||||||
|
int strncasecmp_l (const char *, const char *, size_t, locale_t);
|
||||||
|
#endif
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
#if __SSP_FORTIFY_LEVEL > 0
|
||||||
|
#include <ssp/strings.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _STRINGS_H_ */
|
|
@ -0,0 +1,195 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004, 2005 by
|
||||||
|
* Ralf Corsepius, Ulm/Germany. All rights reserved.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software
|
||||||
|
* is freely granted, provided that this notice is preserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS__INTSUP_H
|
||||||
|
#define _SYS__INTSUP_H
|
||||||
|
|
||||||
|
#include <sys/features.h>
|
||||||
|
|
||||||
|
#if __GNUC_PREREQ (3, 2)
|
||||||
|
/* gcc > 3.2 implicitly defines the values we are interested */
|
||||||
|
#define __STDINT_EXP(x) __##x##__
|
||||||
|
#else
|
||||||
|
#define __STDINT_EXP(x) x
|
||||||
|
#include <limits.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Determine how intptr_t and intN_t fastN_t and leastN_t are defined by gcc
|
||||||
|
for this target. This is used to determine the correct printf() constant in
|
||||||
|
inttypes.h and other constants in stdint.h.
|
||||||
|
So we end up with
|
||||||
|
?(signed|unsigned) char == 0
|
||||||
|
?(signed|unsigned) short == 1
|
||||||
|
?(signed|unsigned) int == 2
|
||||||
|
?(signed|unsigned) short int == 3
|
||||||
|
?(signed|unsigned) long == 4
|
||||||
|
?(signed|unsigned) long int == 6
|
||||||
|
?(signed|unsigned) long long == 8
|
||||||
|
?(signed|unsigned) long long int == 10
|
||||||
|
*/
|
||||||
|
#pragma push_macro("signed")
|
||||||
|
#pragma push_macro("unsigned")
|
||||||
|
#pragma push_macro("char")
|
||||||
|
#pragma push_macro("short")
|
||||||
|
#pragma push_macro("__int20")
|
||||||
|
#pragma push_macro("int")
|
||||||
|
#pragma push_macro("long")
|
||||||
|
#undef signed
|
||||||
|
#undef unsigned
|
||||||
|
#undef char
|
||||||
|
#undef short
|
||||||
|
#undef int
|
||||||
|
#undef __int20
|
||||||
|
#undef long
|
||||||
|
#define signed +0
|
||||||
|
#define unsigned +0
|
||||||
|
#define char +0
|
||||||
|
#define short +1
|
||||||
|
#define __int20 +2
|
||||||
|
#define int +2
|
||||||
|
#define long +4
|
||||||
|
#if (__INTPTR_TYPE__ == 8 || __INTPTR_TYPE__ == 10)
|
||||||
|
#define _INTPTR_EQ_LONGLONG
|
||||||
|
#elif (__INTPTR_TYPE__ == 4 || __INTPTR_TYPE__ == 6)
|
||||||
|
#define _INTPTR_EQ_LONG
|
||||||
|
/* Note - the tests for _INTPTR_EQ_INT and _INTPTR_EQ_SHORT are currently
|
||||||
|
redundant as the values are not used. But one day they may be needed
|
||||||
|
and so the tests remain. */
|
||||||
|
#elif __INTPTR_TYPE__ == 2
|
||||||
|
#define _INTPTR_EQ_INT
|
||||||
|
#elif (__INTPTR_TYPE__ == 1 || __INTPTR_TYPE__ == 3)
|
||||||
|
#define _INTPTR_EQ_SHORT
|
||||||
|
#else
|
||||||
|
#error "Unable to determine type definition of intptr_t"
|
||||||
|
#endif
|
||||||
|
#if (__INT32_TYPE__ == 4 || __INT32_TYPE__ == 6)
|
||||||
|
#define _INT32_EQ_LONG
|
||||||
|
#elif __INT32_TYPE__ == 2
|
||||||
|
/* Nothing to define because int32_t is safe to print as an int. */
|
||||||
|
#else
|
||||||
|
#error "Unable to determine type definition of int32_t"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (__INT8_TYPE__ == 0)
|
||||||
|
#define __INT8 "hh"
|
||||||
|
#elif (__INT8_TYPE__ == 1 || __INT8_TYPE__ == 3)
|
||||||
|
#define __INT8 "h"
|
||||||
|
#elif (__INT8_TYPE__ == 2)
|
||||||
|
#define __INT8
|
||||||
|
#elif (__INT8_TYPE__ == 4 || __INT8_TYPE__ == 6)
|
||||||
|
#define __INT8 "l"
|
||||||
|
#elif (__INT8_TYPE__ == 8 || __INT8_TYPE__ == 10)
|
||||||
|
#define __INT8 "ll"
|
||||||
|
#endif
|
||||||
|
#if (__INT16_TYPE__ == 1 || __INT16_TYPE__ == 3)
|
||||||
|
#define __INT16 "h"
|
||||||
|
#elif (__INT16_TYPE__ == 2)
|
||||||
|
#define __INT16
|
||||||
|
#elif (__INT16_TYPE__ == 4 || __INT16_TYPE__ == 6)
|
||||||
|
#define __INT16 "l"
|
||||||
|
#elif (__INT16_TYPE__ == 8 || __INT16_TYPE__ == 10)
|
||||||
|
#define __INT16 "ll"
|
||||||
|
#endif
|
||||||
|
#if (__INT32_TYPE__ == 2)
|
||||||
|
#define __INT32
|
||||||
|
#elif (__INT32_TYPE__ == 4 || __INT32_TYPE__ == 6)
|
||||||
|
#define __INT32 "l"
|
||||||
|
#elif (__INT32_TYPE__ == 8 || __INT32_TYPE__ == 10)
|
||||||
|
#define __INT32 "ll"
|
||||||
|
#endif
|
||||||
|
#if (__INT64_TYPE__ == 2)
|
||||||
|
#define __INT64
|
||||||
|
#elif (__INT64_TYPE__ == 4 || __INT64_TYPE__ == 6)
|
||||||
|
#define __INT64 "l"
|
||||||
|
#elif (__INT64_TYPE__ == 8 || __INT64_TYPE__ == 10)
|
||||||
|
#define __INT64 "ll"
|
||||||
|
#endif
|
||||||
|
#if (__INT_FAST8_TYPE__ == 0)
|
||||||
|
#define __FAST8 "hh"
|
||||||
|
#elif (__INT_FAST8_TYPE__ == 1 || __INT_FAST8_TYPE__ == 3)
|
||||||
|
#define __FAST8 "h"
|
||||||
|
#elif (__INT_FAST8_TYPE__ == 2)
|
||||||
|
#define __FAST8
|
||||||
|
#elif (__INT_FAST8_TYPE__ == 4 || __INT_FAST8_TYPE__ == 6)
|
||||||
|
#define __FAST8 "l"
|
||||||
|
#elif (__INT_FAST8_TYPE__ == 8 || __INT_FAST8_TYPE__ == 10)
|
||||||
|
#define __FAST8 "ll"
|
||||||
|
#endif
|
||||||
|
#if (__INT_FAST16_TYPE__ == 1 || __INT_FAST16_TYPE__ == 3)
|
||||||
|
#define __FAST16 "h"
|
||||||
|
#elif (__INT_FAST16_TYPE__ == 2)
|
||||||
|
#define __FAST16
|
||||||
|
#elif (__INT_FAST16_TYPE__ == 4 || __INT_FAST16_TYPE__ == 6)
|
||||||
|
#define __FAST16 "l"
|
||||||
|
#elif (__INT_FAST16_TYPE__ == 8 || __INT_FAST16_TYPE__ == 10)
|
||||||
|
#define __FAST16 "ll"
|
||||||
|
#endif
|
||||||
|
#if (__INT_FAST32_TYPE__ == 2)
|
||||||
|
#define __FAST32
|
||||||
|
#elif (__INT_FAST32_TYPE__ == 4 || __INT_FAST32_TYPE__ == 6)
|
||||||
|
#define __FAST32 "l"
|
||||||
|
#elif (__INT_FAST32_TYPE__ == 8 || __INT_FAST32_TYPE__ == 10)
|
||||||
|
#define __FAST32 "ll"
|
||||||
|
#endif
|
||||||
|
#if (__INT_FAST64_TYPE__ == 2)
|
||||||
|
#define __FAST64
|
||||||
|
#elif (__INT_FAST64_TYPE__ == 4 || __INT_FAST64_TYPE__ == 6)
|
||||||
|
#define __FAST64 "l"
|
||||||
|
#elif (__INT_FAST64_TYPE__ == 8 || __INT_FAST64_TYPE__ == 10)
|
||||||
|
#define __FAST64 "ll"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (__INT_LEAST8_TYPE__ == 0)
|
||||||
|
#define __LEAST8 "hh"
|
||||||
|
#elif (__INT_LEAST8_TYPE__ == 1 || __INT_LEAST8_TYPE__ == 3)
|
||||||
|
#define __LEAST8 "h"
|
||||||
|
#elif (__INT_LEAST8_TYPE__ == 2)
|
||||||
|
#define __LEAST8
|
||||||
|
#elif (__INT_LEAST8_TYPE__ == 4 || __INT_LEAST8_TYPE__ == 6)
|
||||||
|
#define __LEAST8 "l"
|
||||||
|
#elif (__INT_LEAST8_TYPE__ == 8 || __INT_LEAST8_TYPE__ == 10)
|
||||||
|
#define __LEAST8 "ll"
|
||||||
|
#endif
|
||||||
|
#if (__INT_LEAST16_TYPE__ == 1 || __INT_LEAST16_TYPE__ == 3)
|
||||||
|
#define __LEAST16 "h"
|
||||||
|
#elif (__INT_LEAST16_TYPE__ == 2)
|
||||||
|
#define __LEAST16
|
||||||
|
#elif (__INT_LEAST16_TYPE__ == 4 || __INT_LEAST16_TYPE__ == 6)
|
||||||
|
#define __LEAST16 "l"
|
||||||
|
#elif (__INT_LEAST16_TYPE__ == 8 || __INT_LEAST16_TYPE__ == 10)
|
||||||
|
#define __LEAST16 "ll"
|
||||||
|
#endif
|
||||||
|
#if (__INT_LEAST32_TYPE__ == 2)
|
||||||
|
#define __LEAST32
|
||||||
|
#elif (__INT_LEAST32_TYPE__ == 4 || __INT_LEAST32_TYPE__ == 6)
|
||||||
|
#define __LEAST32 "l"
|
||||||
|
#elif (__INT_LEAST32_TYPE__ == 8 || __INT_LEAST32_TYPE__ == 10)
|
||||||
|
#define __LEAST32 "ll"
|
||||||
|
#endif
|
||||||
|
#if (__INT_LEAST64_TYPE__ == 2)
|
||||||
|
#define __LEAST64
|
||||||
|
#elif (__INT_LEAST64_TYPE__ == 4 || __INT_LEAST64_TYPE__ == 6)
|
||||||
|
#define __LEAST64 "l"
|
||||||
|
#elif (__INT_LEAST64_TYPE__ == 8 || __INT_LEAST64_TYPE__ == 10)
|
||||||
|
#define __LEAST64 "ll"
|
||||||
|
#endif
|
||||||
|
#undef signed
|
||||||
|
#undef unsigned
|
||||||
|
#undef char
|
||||||
|
#undef short
|
||||||
|
#undef int
|
||||||
|
#undef long
|
||||||
|
#pragma pop_macro("signed")
|
||||||
|
#pragma pop_macro("unsigned")
|
||||||
|
#pragma pop_macro("char")
|
||||||
|
#pragma pop_macro("short")
|
||||||
|
#pragma pop_macro("__int20")
|
||||||
|
#pragma pop_macro("int")
|
||||||
|
#pragma pop_macro("long")
|
||||||
|
|
||||||
|
#endif /* _SYS__INTSUP_H */
|
|
@ -0,0 +1,233 @@
|
||||||
|
/*
|
||||||
|
* Written by Joel Sherrill <joel.sherrill@OARcorp.com>.
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-2013, 2015.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose without fee is hereby granted, provided that this entire notice
|
||||||
|
* is included in all copies of any software which is or includes a copy
|
||||||
|
* or modification of this software.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION
|
||||||
|
* OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
|
||||||
|
* SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS__PTHREADTYPES_H_
|
||||||
|
#define _SYS__PTHREADTYPES_H_
|
||||||
|
|
||||||
|
#if defined(_POSIX_THREADS) || __POSIX_VISIBLE >= 199506
|
||||||
|
|
||||||
|
#include <sys/sched.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 2.5 Primitive System Data Types, P1003.1c/D10, p. 19.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(__XMK__)
|
||||||
|
typedef unsigned int pthread_t; /* identify a thread */
|
||||||
|
#else
|
||||||
|
typedef __uint32_t pthread_t; /* identify a thread */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* P1003.1c/D10, p. 118-119 */
|
||||||
|
#define PTHREAD_SCOPE_PROCESS 0
|
||||||
|
#define PTHREAD_SCOPE_SYSTEM 1
|
||||||
|
|
||||||
|
/* P1003.1c/D10, p. 111 */
|
||||||
|
#define PTHREAD_INHERIT_SCHED 1 /* scheduling policy and associated */
|
||||||
|
/* attributes are inherited from */
|
||||||
|
/* the calling thread. */
|
||||||
|
#define PTHREAD_EXPLICIT_SCHED 2 /* set from provided attribute object */
|
||||||
|
|
||||||
|
/* P1003.1c/D10, p. 141 */
|
||||||
|
#define PTHREAD_CREATE_DETACHED 0
|
||||||
|
#define PTHREAD_CREATE_JOINABLE 1
|
||||||
|
|
||||||
|
#if defined(__XMK__)
|
||||||
|
typedef struct pthread_attr_s {
|
||||||
|
int contentionscope;
|
||||||
|
struct sched_param schedparam;
|
||||||
|
int detachstate;
|
||||||
|
void *stackaddr;
|
||||||
|
size_t stacksize;
|
||||||
|
} pthread_attr_t;
|
||||||
|
|
||||||
|
#define PTHREAD_STACK_MIN 200
|
||||||
|
|
||||||
|
#else /* !defined(__XMK__) */
|
||||||
|
typedef struct {
|
||||||
|
int is_initialized;
|
||||||
|
void *stackaddr;
|
||||||
|
int stacksize;
|
||||||
|
int contentionscope;
|
||||||
|
int inheritsched;
|
||||||
|
int schedpolicy;
|
||||||
|
struct sched_param schedparam;
|
||||||
|
|
||||||
|
/* P1003.4b/D8, p. 54 adds cputime_clock_allowed attribute. */
|
||||||
|
#if defined(_POSIX_THREAD_CPUTIME)
|
||||||
|
int cputime_clock_allowed; /* see time.h */
|
||||||
|
#endif
|
||||||
|
int detachstate;
|
||||||
|
} pthread_attr_t;
|
||||||
|
|
||||||
|
#endif /* !defined(__XMK__) */
|
||||||
|
|
||||||
|
#if defined(_POSIX_THREAD_PROCESS_SHARED)
|
||||||
|
/* NOTE: P1003.1c/D10, p. 81 defines following values for process_shared. */
|
||||||
|
|
||||||
|
#define PTHREAD_PROCESS_PRIVATE 0 /* visible within only the creating process */
|
||||||
|
#define PTHREAD_PROCESS_SHARED 1 /* visible too all processes with access to */
|
||||||
|
/* the memory where the resource is */
|
||||||
|
/* located */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_POSIX_THREAD_PRIO_PROTECT)
|
||||||
|
/* Mutexes */
|
||||||
|
|
||||||
|
/* Values for blocking protocol. */
|
||||||
|
|
||||||
|
#define PTHREAD_PRIO_NONE 0
|
||||||
|
#define PTHREAD_PRIO_INHERIT 1
|
||||||
|
#define PTHREAD_PRIO_PROTECT 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
|
||||||
|
|
||||||
|
/* 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 /* !defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) */
|
||||||
|
|
||||||
|
#if defined(__XMK__)
|
||||||
|
typedef unsigned int pthread_mutex_t; /* identify a mutex */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int type;
|
||||||
|
} pthread_mutexattr_t;
|
||||||
|
|
||||||
|
#else /* !defined(__XMK__) */
|
||||||
|
typedef __uint32_t pthread_mutex_t; /* identify a mutex */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int is_initialized;
|
||||||
|
#if defined(_POSIX_THREAD_PROCESS_SHARED)
|
||||||
|
int process_shared; /* allow mutex to be shared amongst processes */
|
||||||
|
#endif
|
||||||
|
#if defined(_POSIX_THREAD_PRIO_PROTECT)
|
||||||
|
int prio_ceiling;
|
||||||
|
int protocol;
|
||||||
|
#endif
|
||||||
|
#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
|
||||||
|
int type;
|
||||||
|
#endif
|
||||||
|
int recursive;
|
||||||
|
} pthread_mutexattr_t;
|
||||||
|
#endif /* !defined(__XMK__) */
|
||||||
|
|
||||||
|
#define _PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) 0xFFFFFFFF)
|
||||||
|
|
||||||
|
/* Condition Variables */
|
||||||
|
|
||||||
|
typedef __uint32_t pthread_cond_t; /* identify a condition variable */
|
||||||
|
|
||||||
|
#define _PTHREAD_COND_INITIALIZER ((pthread_cond_t) 0xFFFFFFFF)
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int is_initialized;
|
||||||
|
clock_t clock; /* specifiy clock for timeouts */
|
||||||
|
#if defined(_POSIX_THREAD_PROCESS_SHARED)
|
||||||
|
int process_shared; /* allow this to be shared amongst processes */
|
||||||
|
#endif
|
||||||
|
} pthread_condattr_t; /* a condition attribute object */
|
||||||
|
|
||||||
|
/* Keys */
|
||||||
|
|
||||||
|
typedef __uint32_t pthread_key_t; /* thread-specific data keys */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int is_initialized; /* is this structure initialized? */
|
||||||
|
int init_executed; /* has the initialization routine been run? */
|
||||||
|
} pthread_once_t; /* dynamic package initialization */
|
||||||
|
|
||||||
|
#define _PTHREAD_ONCE_INIT { 1, 0 } /* is initialized and not run */
|
||||||
|
#endif /* defined(_POSIX_THREADS) || __POSIX_VISIBLE >= 199506 */
|
||||||
|
|
||||||
|
/* POSIX Barrier Types */
|
||||||
|
|
||||||
|
#if defined(_POSIX_BARRIERS)
|
||||||
|
typedef __uint32_t pthread_barrier_t; /* POSIX Barrier Object */
|
||||||
|
typedef struct {
|
||||||
|
int is_initialized; /* is this structure initialized? */
|
||||||
|
#if defined(_POSIX_THREAD_PROCESS_SHARED)
|
||||||
|
int process_shared; /* allow this to be shared amongst processes */
|
||||||
|
#endif
|
||||||
|
} pthread_barrierattr_t;
|
||||||
|
#endif /* defined(_POSIX_BARRIERS) */
|
||||||
|
|
||||||
|
/* POSIX Spin Lock Types */
|
||||||
|
|
||||||
|
#if defined(_POSIX_SPIN_LOCKS)
|
||||||
|
typedef __uint32_t pthread_spinlock_t; /* POSIX Spin Lock Object */
|
||||||
|
#endif /* defined(_POSIX_SPIN_LOCKS) */
|
||||||
|
|
||||||
|
/* POSIX Reader/Writer Lock Types */
|
||||||
|
|
||||||
|
#if defined(_POSIX_READER_WRITER_LOCKS)
|
||||||
|
typedef __uint32_t pthread_rwlock_t; /* POSIX RWLock Object */
|
||||||
|
|
||||||
|
#define _PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t) 0xFFFFFFFF)
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int is_initialized; /* is this structure initialized? */
|
||||||
|
#if defined(_POSIX_THREAD_PROCESS_SHARED)
|
||||||
|
int process_shared; /* allow this to be shared amongst processes */
|
||||||
|
#endif
|
||||||
|
} pthread_rwlockattr_t;
|
||||||
|
#endif /* defined(_POSIX_READER_WRITER_LOCKS) */
|
||||||
|
|
||||||
|
#endif /* ! _SYS__PTHREADTYPES_H_ */
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1982, 1986, 1989, 1991, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
* (c) UNIX System Laboratories, Inc.
|
||||||
|
* All or some portions of this file are derived from material licensed
|
||||||
|
* to the University of California by American Telephone and Telegraph
|
||||||
|
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||||
|
* the permission of UNIX System Laboratories, Inc.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* @(#)signal.h 8.4 (Berkeley) 5/4/95
|
||||||
|
* $FreeBSD$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS__SIGSET_H_
|
||||||
|
#define _SYS__SIGSET_H_
|
||||||
|
|
||||||
|
typedef unsigned long __sigset_t;
|
||||||
|
|
||||||
|
#endif /* !_SYS__SIGSET_H_ */
|
|
@ -0,0 +1,90 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2004, 2005 by
|
||||||
|
* Ralf Corsepius, Ulm/Germany. All rights reserved.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software
|
||||||
|
* is freely granted, provided that this notice is preserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS__STDINT_H
|
||||||
|
#define _SYS__STDINT_H
|
||||||
|
|
||||||
|
#include <machine/_default_types.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef ___int8_t_defined
|
||||||
|
#ifndef _INT8_T_DECLARED
|
||||||
|
typedef __int8_t int8_t ;
|
||||||
|
#define _INT8_T_DECLARED
|
||||||
|
#endif
|
||||||
|
#ifndef _UINT8_T_DECLARED
|
||||||
|
typedef __uint8_t uint8_t ;
|
||||||
|
#define _UINT8_T_DECLARED
|
||||||
|
#endif
|
||||||
|
#define __int8_t_defined 1
|
||||||
|
#endif /* ___int8_t_defined */
|
||||||
|
|
||||||
|
#ifdef ___int16_t_defined
|
||||||
|
#ifndef _INT16_T_DECLARED
|
||||||
|
typedef __int16_t int16_t ;
|
||||||
|
#define _INT16_T_DECLARED
|
||||||
|
#endif
|
||||||
|
#ifndef _UINT16_T_DECLARED
|
||||||
|
typedef __uint16_t uint16_t ;
|
||||||
|
#define _UINT16_T_DECLARED
|
||||||
|
#endif
|
||||||
|
#define __int16_t_defined 1
|
||||||
|
#endif /* ___int16_t_defined */
|
||||||
|
|
||||||
|
#ifdef ___int32_t_defined
|
||||||
|
#ifndef _INT32_T_DECLARED
|
||||||
|
typedef __int32_t int32_t ;
|
||||||
|
#define _INT32_T_DECLARED
|
||||||
|
#endif
|
||||||
|
#ifndef _UINT32_T_DECLARED
|
||||||
|
typedef __uint32_t uint32_t ;
|
||||||
|
#define _UINT32_T_DECLARED
|
||||||
|
#endif
|
||||||
|
#define __int32_t_defined 1
|
||||||
|
#endif /* ___int32_t_defined */
|
||||||
|
|
||||||
|
#ifdef ___int64_t_defined
|
||||||
|
#ifndef _INT64_T_DECLARED
|
||||||
|
typedef __int64_t int64_t ;
|
||||||
|
#define _INT64_T_DECLARED
|
||||||
|
#endif
|
||||||
|
#ifndef _UINT64_T_DECLARED
|
||||||
|
typedef __uint64_t uint64_t ;
|
||||||
|
#define _UINT64_T_DECLARED
|
||||||
|
#endif
|
||||||
|
#define __int64_t_defined 1
|
||||||
|
#endif /* ___int64_t_defined */
|
||||||
|
|
||||||
|
#ifndef _INTMAX_T_DECLARED
|
||||||
|
typedef __intmax_t intmax_t;
|
||||||
|
#define _INTMAX_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _UINTMAX_T_DECLARED
|
||||||
|
typedef __uintmax_t uintmax_t;
|
||||||
|
#define _UINTMAX_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _INTPTR_T_DECLARED
|
||||||
|
typedef __intptr_t intptr_t;
|
||||||
|
#define _INTPTR_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _UINTPTR_T_DECLARED
|
||||||
|
typedef __uintptr_t uintptr_t;
|
||||||
|
#define _UINTPTR_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _SYS__STDINT_H */
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1982, 1986, 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.
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* @(#)time.h 8.5 (Berkeley) 5/4/95
|
||||||
|
* from: FreeBSD: src/sys/sys/time.h,v 1.43 2000/03/20 14:09:05 phk Exp
|
||||||
|
* $FreeBSD$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS__TIMESPEC_H_
|
||||||
|
#define _SYS__TIMESPEC_H_
|
||||||
|
|
||||||
|
#include <sys/_types.h>
|
||||||
|
|
||||||
|
#if !defined(__time_t_defined) && !defined(_TIME_T_DECLARED)
|
||||||
|
typedef _TIME_T_ time_t;
|
||||||
|
#define __time_t_defined
|
||||||
|
#define _TIME_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct timespec {
|
||||||
|
time_t tv_sec; /* seconds */
|
||||||
|
long tv_nsec; /* and nanoseconds */
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* !_SYS__TIMESPEC_H_ */
|
|
@ -0,0 +1,89 @@
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 2002 Mike Barcroft <mike@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 _SYS__TIMEVAL_H_
|
||||||
|
#define _SYS__TIMEVAL_H_
|
||||||
|
|
||||||
|
#include <sys/_types.h>
|
||||||
|
|
||||||
|
#ifndef _SUSECONDS_T_DECLARED
|
||||||
|
typedef __suseconds_t suseconds_t;
|
||||||
|
#define _SUSECONDS_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__time_t_defined) && !defined(_TIME_T_DECLARED)
|
||||||
|
typedef _TIME_T_ time_t;
|
||||||
|
#define __time_t_defined
|
||||||
|
#define _TIME_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This define is also used outside of Newlib, e.g. in MinGW-w64 */
|
||||||
|
#ifndef _TIMEVAL_DEFINED
|
||||||
|
#define _TIMEVAL_DEFINED
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure returned by gettimeofday(2) system call, and used in other calls.
|
||||||
|
*/
|
||||||
|
struct timeval {
|
||||||
|
time_t tv_sec; /* seconds */
|
||||||
|
suseconds_t tv_usec; /* and microseconds */
|
||||||
|
};
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
#ifndef _KERNEL /* NetBSD/OpenBSD compatible interfaces */
|
||||||
|
|
||||||
|
#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
|
||||||
|
#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
|
||||||
|
#define timercmp(tvp, uvp, cmp) \
|
||||||
|
(((tvp)->tv_sec == (uvp)->tv_sec) ? \
|
||||||
|
((tvp)->tv_usec cmp (uvp)->tv_usec) : \
|
||||||
|
((tvp)->tv_sec cmp (uvp)->tv_sec))
|
||||||
|
#define timeradd(tvp, uvp, vvp) \
|
||||||
|
do { \
|
||||||
|
(vvp)->tv_sec = (tvp)->tv_sec + (uvp)->tv_sec; \
|
||||||
|
(vvp)->tv_usec = (tvp)->tv_usec + (uvp)->tv_usec; \
|
||||||
|
if ((vvp)->tv_usec >= 1000000) { \
|
||||||
|
(vvp)->tv_sec++; \
|
||||||
|
(vvp)->tv_usec -= 1000000; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#define timersub(tvp, uvp, vvp) \
|
||||||
|
do { \
|
||||||
|
(vvp)->tv_sec = (tvp)->tv_sec - (uvp)->tv_sec; \
|
||||||
|
(vvp)->tv_usec = (tvp)->tv_usec - (uvp)->tv_usec; \
|
||||||
|
if ((vvp)->tv_usec < 0) { \
|
||||||
|
(vvp)->tv_sec--; \
|
||||||
|
(vvp)->tv_usec += 1000000; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#endif
|
||||||
|
#endif /* __BSD_VISIBLE */
|
||||||
|
|
||||||
|
#endif /* _TIMEVAL_DEFINED */
|
||||||
|
|
||||||
|
#endif /* !_SYS__TIMEVAL_H_ */
|
|
@ -0,0 +1,224 @@
|
||||||
|
/* ANSI C namespace clean utility typedefs */
|
||||||
|
|
||||||
|
/* This file defines various typedefs needed by the system calls that support
|
||||||
|
the C library. Basically, they're just the POSIX versions with an '_'
|
||||||
|
prepended. Targets shall use <machine/_types.h> to define their own
|
||||||
|
internal types if desired.
|
||||||
|
|
||||||
|
There are three define patterns used for type definitions. Lets assume
|
||||||
|
xyz_t is a user type.
|
||||||
|
|
||||||
|
The internal type definition uses __machine_xyz_t_defined. It is defined by
|
||||||
|
<machine/_types.h> to disable a default definition in <sys/_types.h>. It
|
||||||
|
must not be used in other files.
|
||||||
|
|
||||||
|
User type definitions are guarded by __xyz_t_defined in glibc and
|
||||||
|
_XYZ_T_DECLARED in BSD compatible systems.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS__TYPES_H
|
||||||
|
#define _SYS__TYPES_H
|
||||||
|
|
||||||
|
#include <newlib.h>
|
||||||
|
#include <sys/config.h>
|
||||||
|
#include <machine/_types.h>
|
||||||
|
#include <sys/lock.h>
|
||||||
|
|
||||||
|
#ifndef __machine_blkcnt_t_defined
|
||||||
|
typedef long __blkcnt_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_blksize_t_defined
|
||||||
|
typedef long __blksize_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_fsblkcnt_t_defined
|
||||||
|
typedef __uint64_t __fsblkcnt_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_fsfilcnt_t_defined
|
||||||
|
typedef __uint32_t __fsfilcnt_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_off_t_defined
|
||||||
|
typedef long _off_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__XMK__)
|
||||||
|
typedef signed char __pid_t;
|
||||||
|
#else
|
||||||
|
typedef int __pid_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_dev_t_defined
|
||||||
|
typedef short __dev_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_uid_t_defined
|
||||||
|
typedef unsigned short __uid_t;
|
||||||
|
#endif
|
||||||
|
#ifndef __machine_gid_t_defined
|
||||||
|
typedef unsigned short __gid_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_id_t_defined
|
||||||
|
typedef __uint32_t __id_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_ino_t_defined
|
||||||
|
#if (defined(__i386__) && (defined(GO32) || defined(__MSDOS__))) || \
|
||||||
|
defined(__sparc__) || defined(__SPU__)
|
||||||
|
typedef unsigned long __ino_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned short __ino_t;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_mode_t_defined
|
||||||
|
#if defined(__i386__) && (defined(GO32) || defined(__MSDOS__))
|
||||||
|
typedef int __mode_t;
|
||||||
|
#else
|
||||||
|
#if defined(__sparc__) && !defined(__sparc_v9__)
|
||||||
|
#ifdef __svr4__
|
||||||
|
typedef unsigned long __mode_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned short __mode_t;
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
typedef __uint32_t __mode_t;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_off64_t_defined
|
||||||
|
__extension__ typedef long long _off64_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__CYGWIN__) && !defined(__LP64__)
|
||||||
|
typedef _off64_t __off_t;
|
||||||
|
#else
|
||||||
|
typedef _off_t __off_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef _off64_t __loff_t;
|
||||||
|
|
||||||
|
#ifndef __machine_key_t_defined
|
||||||
|
typedef long __key_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need fpos_t for the following, but it doesn't have a leading "_",
|
||||||
|
* so we use _fpos_t instead.
|
||||||
|
*/
|
||||||
|
#ifndef __machine_fpos_t_defined
|
||||||
|
typedef long _fpos_t; /* XXX must match off_t in <sys/types.h> */
|
||||||
|
/* (and must be `long' for now) */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __LARGE64_FILES
|
||||||
|
#ifndef __machine_fpos64_t_defined
|
||||||
|
typedef _off64_t _fpos64_t;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Defined by GCC provided <stddef.h> */
|
||||||
|
#undef __size_t
|
||||||
|
|
||||||
|
#ifndef __machine_size_t_defined
|
||||||
|
#ifdef __SIZE_TYPE__
|
||||||
|
typedef __SIZE_TYPE__ __size_t;
|
||||||
|
#else
|
||||||
|
#if defined(__INT_MAX__) && __INT_MAX__ == 2147483647
|
||||||
|
typedef unsigned int __size_t;
|
||||||
|
#else
|
||||||
|
typedef unsigned long __size_t;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_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
|
||||||
|
typedef long _ssize_t;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef _ssize_t __ssize_t;
|
||||||
|
|
||||||
|
#define __need_wint_t
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#ifndef __machine_mbstate_t_defined
|
||||||
|
/* Conversion state information. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int __count;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
wint_t __wch;
|
||||||
|
unsigned char __wchb[4];
|
||||||
|
} __value; /* Value so far. */
|
||||||
|
} _mbstate_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_flock_t_defined
|
||||||
|
typedef _LOCK_RECURSIVE_T _flock_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_iconv_t_defined
|
||||||
|
/* Iconv descriptor type */
|
||||||
|
typedef void *_iconv_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_clock_t_defined
|
||||||
|
#define _CLOCK_T_ unsigned long /* clock() */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef _CLOCK_T_ __clock_t;
|
||||||
|
|
||||||
|
#if defined(_USE_LONG_TIME_T) || __LONG_MAX__ > 0x7fffffffL
|
||||||
|
#define _TIME_T_ long
|
||||||
|
#else
|
||||||
|
#define _TIME_T_ __int_least64_t
|
||||||
|
#endif
|
||||||
|
typedef _TIME_T_ __time_t;
|
||||||
|
|
||||||
|
#ifndef __machine_clockid_t_defined
|
||||||
|
#define _CLOCKID_T_ unsigned long
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef _CLOCKID_T_ __clockid_t;
|
||||||
|
|
||||||
|
#define _TIMER_T_ unsigned long
|
||||||
|
typedef _TIMER_T_ __timer_t;
|
||||||
|
|
||||||
|
#ifndef __machine_sa_family_t_defined
|
||||||
|
typedef __uint8_t __sa_family_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __machine_socklen_t_defined
|
||||||
|
typedef __uint32_t __socklen_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef int __nl_item;
|
||||||
|
typedef unsigned short __nlink_t;
|
||||||
|
typedef long __suseconds_t; /* microseconds (signed) */
|
||||||
|
typedef unsigned long __useconds_t; /* microseconds (unsigned) */
|
||||||
|
|
||||||
|
#ifdef __GNUCLIKE_BUILTIN_VARARGS
|
||||||
|
typedef __builtin_va_list __va_list;
|
||||||
|
#else
|
||||||
|
typedef char * __va_list;
|
||||||
|
#endif /* __GNUCLIKE_BUILTIN_VARARGS */
|
||||||
|
|
||||||
|
#endif /* _SYS__TYPES_H */
|
|
@ -0,0 +1,716 @@
|
||||||
|
/* libc/sys/linux/sys/cdefs.h - Helper macros for K&R vs. ANSI C compat. */
|
||||||
|
|
||||||
|
/* Written 2000 by Werner Almesberger */
|
||||||
|
|
||||||
|
/*-
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*
|
||||||
|
* Copyright (c) 1991, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is derived from software contributed to Berkeley by
|
||||||
|
* Berkeley Software Design, Inc.
|
||||||
|
*
|
||||||
|
* 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. 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.
|
||||||
|
*
|
||||||
|
* @(#)cdefs.h 8.8 (Berkeley) 1/9/95
|
||||||
|
* $FreeBSD$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS_CDEFS_H_
|
||||||
|
#define _SYS_CDEFS_H_
|
||||||
|
|
||||||
|
#include <machine/_default_types.h>
|
||||||
|
#include <sys/features.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#define __PMT(args) args
|
||||||
|
#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_attribute
|
||||||
|
#define __has_attribute(x) 0
|
||||||
|
#endif
|
||||||
|
#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)
|
||||||
|
#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
|
||||||
|
* mode -- there must be no spaces between its arguments, and for nested
|
||||||
|
* __CONCAT's, all the __CONCAT's must be at the left. __CONCAT can also
|
||||||
|
* concatenate double-quoted strings produced by the __STRING macro, but
|
||||||
|
* this only works with ANSI C.
|
||||||
|
*
|
||||||
|
* __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 */
|
||||||
|
|
||||||
|
#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.
|
||||||
|
*/
|
||||||
|
#define __weak_symbol __attribute__((__weak__))
|
||||||
|
#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) || 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
|
||||||
|
#if __GNUC_PREREQ__(4, 3) || __has_attribute(__alloc_size__)
|
||||||
|
#define __alloc_size(x) __attribute__((__alloc_size__(x)))
|
||||||
|
#define __alloc_size2(n, x) __attribute__((__alloc_size__(n, x)))
|
||||||
|
#else
|
||||||
|
#define __alloc_size(x)
|
||||||
|
#define __alloc_size2(n, x)
|
||||||
|
#endif
|
||||||
|
#if __GNUC_PREREQ__(4, 9) || __has_attribute(__alloc_align__)
|
||||||
|
#define __alloc_align(x) __attribute__((__alloc_align__(x)))
|
||||||
|
#else
|
||||||
|
#define __alloc_align(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !__GNUC_PREREQ__(2, 95)
|
||||||
|
#define __alignof(x) __offsetof(struct { char __a; x __b; }, __b)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Keywords added in C11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#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
|
||||||
|
/* XXX: Only emulates _Alignas(constant-expression); not _Alignas(type-name). */
|
||||||
|
#define _Alignas(x) __aligned(x)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__cplusplus) && __cplusplus >= 201103L
|
||||||
|
#define _Alignof(x) alignof(x)
|
||||||
|
#else
|
||||||
|
#define _Alignof(x) __alignof(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__cplusplus) && !__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 !__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 __GNUC_PREREQ__(4,6) && !defined(__cplusplus)
|
||||||
|
/* Nothing, gcc 4.6 and higher has _Static_assert built-in */
|
||||||
|
#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] \
|
||||||
|
__unused
|
||||||
|
#else
|
||||||
|
#define _Static_assert(x, y) struct __hack
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !__has_extension(c_thread_local)
|
||||||
|
/*
|
||||||
|
* XXX: Some compilers (Clang 3.3, GCC 4.7) falsely announce C++11 mode
|
||||||
|
* without actually supporting the thread_local keyword. Don't check for
|
||||||
|
* the presence of C++11 when defining _Thread_local.
|
||||||
|
*/
|
||||||
|
#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) || \
|
||||||
|
__has_extension(c_generic_selections)
|
||||||
|
#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
|
||||||
|
|
||||||
|
/*
|
||||||
|
* C99 Static array indices in function parameter declarations. Syntax such as:
|
||||||
|
* void bar(int myArray[static 10]);
|
||||||
|
* is allowed in C99 but not in C++. Define __min_size appropriately so
|
||||||
|
* headers using it can be compiled in either language. Use like this:
|
||||||
|
* void bar(int myArray[__min_size(10)]);
|
||||||
|
*/
|
||||||
|
#if !defined(__cplusplus) && \
|
||||||
|
(defined(__clang__) || __GNUC_PREREQ__(4, 6)) && \
|
||||||
|
(!defined(__STDC_VERSION__) || (__STDC_VERSION__ >= 199901))
|
||||||
|
#define __min_size(x) static (x)
|
||||||
|
#else
|
||||||
|
#define __min_size(x) (x)
|
||||||
|
#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 __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))
|
||||||
|
#define __nonnull_all __attribute__((__nonnull__))
|
||||||
|
#else
|
||||||
|
#define __nonnull(x)
|
||||||
|
#define __nonnull_all
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __GNUC_PREREQ__(3, 4)
|
||||||
|
#define __fastcall __attribute__((__fastcall__))
|
||||||
|
#define __result_use_check __attribute__((__warn_unused_result__))
|
||||||
|
#else
|
||||||
|
#define __fastcall
|
||||||
|
#define __result_use_check
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __GNUC_PREREQ__(4, 1)
|
||||||
|
#define __returns_twice __attribute__((__returns_twice__))
|
||||||
|
#else
|
||||||
|
#define __returns_twice
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __GNUC_PREREQ__(4, 6) || __has_builtin(__builtin_unreachable)
|
||||||
|
#define __unreachable() __builtin_unreachable()
|
||||||
|
#else
|
||||||
|
#define __unreachable() ((void)0)
|
||||||
|
#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
|
||||||
|
#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, 0)
|
||||||
|
#define __null_sentinel __attribute__((__sentinel__))
|
||||||
|
#define __exported __attribute__((__visibility__("default")))
|
||||||
|
/* Only default visibility is supported on PE/COFF targets. */
|
||||||
|
#ifndef __CYGWIN__
|
||||||
|
#define __hidden __attribute__((__visibility__("hidden")))
|
||||||
|
#else
|
||||||
|
#define __hidden
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define __null_sentinel
|
||||||
|
#define __exported
|
||||||
|
#define __hidden
|
||||||
|
#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)))
|
||||||
|
#endif
|
||||||
|
#ifdef __ELF__
|
||||||
|
#ifdef __STDC__
|
||||||
|
#define __weak_reference(sym,alias) \
|
||||||
|
__asm__(".weak " #alias); \
|
||||||
|
__asm__(".equ " #alias ", " #sym)
|
||||||
|
#define __warn_references(sym,msg) \
|
||||||
|
__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"); \
|
||||||
|
__asm__(".equ alias, sym")
|
||||||
|
#define __warn_references(sym,msg) \
|
||||||
|
__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__
|
||||||
|
#define __weak_reference(sym,alias) \
|
||||||
|
__asm__(".stabs \"_" #alias "\",11,0,0,0"); \
|
||||||
|
__asm__(".stabs \"_" #sym "\",1,0,0,0")
|
||||||
|
#define __warn_references(sym,msg) \
|
||||||
|
__asm__(".stabs \"" msg "\",30,0,0,0"); \
|
||||||
|
__asm__(".stabs \"_" #sym "\",1,0,0,0")
|
||||||
|
#else
|
||||||
|
#define __weak_reference(sym,alias) \
|
||||||
|
__asm__(".stabs \"_/**/alias\",11,0,0,0"); \
|
||||||
|
__asm__(".stabs \"_/**/sym\",1,0,0,0")
|
||||||
|
#define __warn_references(sym,msg) \
|
||||||
|
__asm__(".stabs msg,30,0,0,0"); \
|
||||||
|
__asm__(".stabs \"_/**/sym\",1,0,0,0")
|
||||||
|
#endif /* __STDC__ */
|
||||||
|
#endif /* __ELF__ */
|
||||||
|
#endif /* __GNUC__ || __INTEL_COMPILER */
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Nullability qualifiers: currently only supported by Clang.
|
||||||
|
*/
|
||||||
|
#if !(defined(__clang__) && __has_feature(nullability))
|
||||||
|
#define _Nonnull
|
||||||
|
#define _Nullable
|
||||||
|
#define _Null_unspecified
|
||||||
|
#define __NULLABILITY_PRAGMA_PUSH
|
||||||
|
#define __NULLABILITY_PRAGMA_POP
|
||||||
|
#else
|
||||||
|
#define __NULLABILITY_PRAGMA_PUSH _Pragma("clang diagnostic push") \
|
||||||
|
_Pragma("clang diagnostic ignored \"-Wnullability-completeness\"")
|
||||||
|
#define __NULLABILITY_PRAGMA_POP _Pragma("clang diagnostic pop")
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Type Safety Checking
|
||||||
|
*
|
||||||
|
* Clang provides additional attributes to enable checking type safety
|
||||||
|
* properties that cannot be enforced by the C type system.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if __has_attribute(__argument_with_type_tag__) && \
|
||||||
|
__has_attribute(__type_tag_for_datatype__)
|
||||||
|
#define __arg_type_tag(arg_kind, arg_idx, type_tag_idx) \
|
||||||
|
__attribute__((__argument_with_type_tag__(arg_kind, arg_idx, type_tag_idx)))
|
||||||
|
#define __datatype_type_tag(kind, type) \
|
||||||
|
__attribute__((__type_tag_for_datatype__(kind, type)))
|
||||||
|
#else
|
||||||
|
#define __arg_type_tag(arg_kind, arg_idx, type_tag_idx)
|
||||||
|
#define __datatype_type_tag(kind, type)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Lock annotations.
|
||||||
|
*
|
||||||
|
* Clang provides support for doing basic thread-safety tests at
|
||||||
|
* compile-time, by marking which locks will/should be held when
|
||||||
|
* entering/leaving a functions.
|
||||||
|
*
|
||||||
|
* Furthermore, it is also possible to annotate variables and structure
|
||||||
|
* members to enforce that they are only accessed when certain locks are
|
||||||
|
* held.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if __has_extension(c_thread_safety_attributes)
|
||||||
|
#define __lock_annotate(x) __attribute__((x))
|
||||||
|
#else
|
||||||
|
#define __lock_annotate(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Structure implements a lock. */
|
||||||
|
/* FIXME: Use __lockable__, etc. to avoid colliding with user namespace macros,
|
||||||
|
* once clang is fixed: https://bugs.llvm.org/show_bug.cgi?id=34319 */
|
||||||
|
#define __lockable __lock_annotate(lockable)
|
||||||
|
|
||||||
|
/* Function acquires an exclusive or shared lock. */
|
||||||
|
#define __locks_exclusive(...) \
|
||||||
|
__lock_annotate(exclusive_lock_function(__VA_ARGS__))
|
||||||
|
#define __locks_shared(...) \
|
||||||
|
__lock_annotate(shared_lock_function(__VA_ARGS__))
|
||||||
|
|
||||||
|
/* Function attempts to acquire an exclusive or shared lock. */
|
||||||
|
#define __trylocks_exclusive(...) \
|
||||||
|
__lock_annotate(exclusive_trylock_function(__VA_ARGS__))
|
||||||
|
#define __trylocks_shared(...) \
|
||||||
|
__lock_annotate(shared_trylock_function(__VA_ARGS__))
|
||||||
|
|
||||||
|
/* Function releases a lock. */
|
||||||
|
#define __unlocks(...) __lock_annotate(unlock_function(__VA_ARGS__))
|
||||||
|
|
||||||
|
/* Function asserts that an exclusive or shared lock is held. */
|
||||||
|
#define __asserts_exclusive(...) \
|
||||||
|
__lock_annotate(assert_exclusive_lock(__VA_ARGS__))
|
||||||
|
#define __asserts_shared(...) \
|
||||||
|
__lock_annotate(assert_shared_lock(__VA_ARGS__))
|
||||||
|
|
||||||
|
/* Function requires that an exclusive or shared lock is or is not held. */
|
||||||
|
#define __requires_exclusive(...) \
|
||||||
|
__lock_annotate(exclusive_locks_required(__VA_ARGS__))
|
||||||
|
#define __requires_shared(...) \
|
||||||
|
__lock_annotate(shared_locks_required(__VA_ARGS__))
|
||||||
|
#define __requires_unlocked(...) \
|
||||||
|
__lock_annotate(locks_excluded(__VA_ARGS__))
|
||||||
|
|
||||||
|
/* Function should not be analyzed. */
|
||||||
|
#define __no_lock_analysis __lock_annotate(no_thread_safety_analysis)
|
||||||
|
|
||||||
|
/* Guard variables and structure members by lock. */
|
||||||
|
#define __guarded_by(x) __lock_annotate(guarded_by(x))
|
||||||
|
#define __pt_guarded_by(x) __lock_annotate(pt_guarded_by(x))
|
||||||
|
|
||||||
|
#endif /* !_SYS_CDEFS_H_ */
|
|
@ -0,0 +1,300 @@
|
||||||
|
#ifndef __SYS_CONFIG_H__
|
||||||
|
#define __SYS_CONFIG_H__
|
||||||
|
|
||||||
|
#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
|
||||||
|
/* ??? This conditional is true for the h8500 and the w65, defining H8300
|
||||||
|
in those cases probably isn't the right thing to do. */
|
||||||
|
#define H8300 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 16 bit integer machines */
|
||||||
|
#if defined(__Z8001__) || defined(__Z8002__) || defined(__H8500__) || defined(__W65__) || defined (__mn10200__) || defined (__AVR__)
|
||||||
|
|
||||||
|
#undef INT_MAX
|
||||||
|
#undef UINT_MAX
|
||||||
|
#define INT_MAX 32767
|
||||||
|
#define UINT_MAX 65535
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (__H8300__) || defined (__H8300H__) || defined(__H8300S__) || defined (__H8300SX__)
|
||||||
|
#define __SMALL_BITFIELDS
|
||||||
|
#define H8300 1
|
||||||
|
#undef INT_MAX
|
||||||
|
#undef UINT_MAX
|
||||||
|
#define INT_MAX __INT_MAX__
|
||||||
|
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined(__CR16__) || defined(__CR16C__) ||defined(__CR16CP__))
|
||||||
|
#ifndef __INT32__
|
||||||
|
#define __SMALL_BITFIELDS
|
||||||
|
#undef INT_MAX
|
||||||
|
#undef UINT_MAX
|
||||||
|
#define INT_MAX 32767
|
||||||
|
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||||
|
#else /* INT32 */
|
||||||
|
#undef INT_MAX
|
||||||
|
#undef UINT_MAX
|
||||||
|
#define INT_MAX 2147483647
|
||||||
|
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||||
|
#endif /* INT32 */
|
||||||
|
|
||||||
|
#endif /* CR16C */
|
||||||
|
|
||||||
|
#if defined (__xc16x__) || defined (__xc16xL__) || defined (__xc16xS__)
|
||||||
|
#define __SMALL_BITFIELDS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __W65__
|
||||||
|
#define __SMALL_BITFIELDS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__D10V__)
|
||||||
|
#define __SMALL_BITFIELDS
|
||||||
|
#undef INT_MAX
|
||||||
|
#undef UINT_MAX
|
||||||
|
#define INT_MAX __INT_MAX__
|
||||||
|
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||||
|
#define _POINTER_INT short
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
|
||||||
|
#undef INT_MAX
|
||||||
|
#undef UINT_MAX
|
||||||
|
#define INT_MAX __INT_MAX__
|
||||||
|
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||||
|
#define _POINTER_INT short
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__m68k__) || defined(__mc68000__) || defined(__riscv)
|
||||||
|
#define _READ_WRITE_RETURN_TYPE _ssize_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef ___AM29K__
|
||||||
|
#define _FLOAT_RET double
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __i386__
|
||||||
|
#ifndef __unix__
|
||||||
|
/* in other words, go32 */
|
||||||
|
#define _FLOAT_RET double
|
||||||
|
#endif
|
||||||
|
#if defined(__linux__) || defined(__RDOS__)
|
||||||
|
/* we want the reentrancy structure to be returned by a function */
|
||||||
|
#define __DYNAMIC_REENT__
|
||||||
|
#define HAVE_GETDATE
|
||||||
|
#define _READ_WRITE_RETURN_TYPE _ssize_t
|
||||||
|
#define __LARGE64_FILES 1
|
||||||
|
/* we use some glibc header files so turn on glibc large file feature */
|
||||||
|
#define _LARGEFILE64_SOURCE 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __mn10200__
|
||||||
|
#define __SMALL_BITFIELDS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __AVR__
|
||||||
|
#define __SMALL_BITFIELDS
|
||||||
|
#define _POINTER_INT short
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__v850) && !defined(__rtems__)
|
||||||
|
#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__sda__))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* For the PowerPC eabi, force the _impure_ptr to be in .sdata */
|
||||||
|
#if defined(__PPC__)
|
||||||
|
#if defined(_CALL_SYSV)
|
||||||
|
#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata")))
|
||||||
|
#endif
|
||||||
|
#ifdef __SPE__
|
||||||
|
#define _LONG_DOUBLE double
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Configure small REENT structure for Xilinx MicroBlaze platforms */
|
||||||
|
#if defined (__MICROBLAZE__)
|
||||||
|
#ifndef _REENT_SMALL
|
||||||
|
#define _REENT_SMALL
|
||||||
|
#endif
|
||||||
|
/* Xilinx XMK uses Unix98 mutex */
|
||||||
|
#ifdef __XMK__
|
||||||
|
#define _UNIX98_THREAD_MUTEX_ATTRIBUTES
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__mips__) && !defined(__rtems__)
|
||||||
|
#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata")))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __xstormy16__
|
||||||
|
#define __SMALL_BITFIELDS
|
||||||
|
#undef INT_MAX
|
||||||
|
#undef UINT_MAX
|
||||||
|
#define INT_MAX __INT_MAX__
|
||||||
|
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||||
|
#define MALLOC_ALIGNMENT 8
|
||||||
|
#define _POINTER_INT short
|
||||||
|
#define __BUFSIZ__ 16
|
||||||
|
#define _REENT_SMALL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined __MSP430__
|
||||||
|
#ifndef _REENT_SMALL
|
||||||
|
#define _REENT_SMALL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define __BUFSIZ__ 256
|
||||||
|
#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
|
||||||
|
#undef UINT_MAX
|
||||||
|
#define INT_MAX __INT_MAX__
|
||||||
|
#define UINT_MAX (__INT_MAX__ * 2U + 1)
|
||||||
|
#define MALLOC_ALIGNMENT 8
|
||||||
|
#if defined(__r8c_cpu__) || defined(__m16c_cpu__)
|
||||||
|
#define _POINTER_INT short
|
||||||
|
#else
|
||||||
|
#define _POINTER_INT long
|
||||||
|
#endif
|
||||||
|
#define __BUFSIZ__ 16
|
||||||
|
#define _REENT_SMALL
|
||||||
|
#endif /* __m32c__ */
|
||||||
|
|
||||||
|
#ifdef __SPU__
|
||||||
|
#define MALLOC_ALIGNMENT 16
|
||||||
|
#define __CUSTOM_FILE_IO__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__or1k__) || defined(__or1knd__)
|
||||||
|
#define __DYNAMIC_REENT__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This block should be kept in sync with GCC's limits.h. The point
|
||||||
|
of having these definitions here is to not include limits.h, which
|
||||||
|
would pollute the user namespace, while still using types of the
|
||||||
|
the correct widths when deciding how to define __int32_t and
|
||||||
|
__int64_t. */
|
||||||
|
#ifndef __INT_MAX__
|
||||||
|
# ifdef INT_MAX
|
||||||
|
# define __INT_MAX__ INT_MAX
|
||||||
|
# else
|
||||||
|
# define __INT_MAX__ 2147483647
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __LONG_MAX__
|
||||||
|
# ifdef LONG_MAX
|
||||||
|
# define __LONG_MAX__ LONG_MAX
|
||||||
|
# else
|
||||||
|
# if defined (__alpha__) || (defined (__sparc__) && defined(__arch64__)) \
|
||||||
|
|| defined (__sparcv9)
|
||||||
|
# define __LONG_MAX__ 9223372036854775807L
|
||||||
|
# else
|
||||||
|
# define __LONG_MAX__ 2147483647L
|
||||||
|
# endif /* __alpha__ || sparc64 */
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
/* End of block that should be kept in sync with GCC's limits.h. */
|
||||||
|
|
||||||
|
#ifndef _POINTER_INT
|
||||||
|
#define _POINTER_INT long
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __frv__
|
||||||
|
#define __ATTRIBUTE_IMPURE_PTR__ __attribute__((__section__(".sdata")))
|
||||||
|
#endif
|
||||||
|
#undef __RAND_MAX
|
||||||
|
#if __INT_MAX__ == 32767
|
||||||
|
#define __RAND_MAX 32767
|
||||||
|
#else
|
||||||
|
#define __RAND_MAX 0x7fffffff
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__CYGWIN__)
|
||||||
|
#include <cygwin/config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__rtems__)
|
||||||
|
#define __FILENAME_MAX__ 255
|
||||||
|
#define _READ_WRITE_RETURN_TYPE _ssize_t
|
||||||
|
#define __DYNAMIC_REENT__
|
||||||
|
#define _REENT_GLOBAL_ATEXIT
|
||||||
|
#define _REENT_GLOBAL_STDIO_STREAMS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __EXPORT
|
||||||
|
#define __EXPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __IMPORT
|
||||||
|
#define __IMPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define return type of read/write routines. In POSIX, the return type
|
||||||
|
for read()/write() is "ssize_t" but legacy newlib code has been using
|
||||||
|
"int" for some time. If not specified, "int" is defaulted. */
|
||||||
|
#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)
|
||||||
|
#define __WCHAR_MAX__ 0xffffu
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* See if small reent asked for at configuration time and
|
||||||
|
is not chosen by the platform by default. */
|
||||||
|
#ifdef _WANT_REENT_SMALL
|
||||||
|
#ifndef _REENT_SMALL
|
||||||
|
#define _REENT_SMALL
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _WANT_REENT_GLOBAL_STDIO_STREAMS
|
||||||
|
#ifndef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
|
#define _REENT_GLOBAL_STDIO_STREAMS
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _WANT_USE_LONG_TIME_T
|
||||||
|
#ifndef _USE_LONG_TIME_T
|
||||||
|
#define _USE_LONG_TIME_T
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* If _MB_EXTENDED_CHARSETS_ALL is set, we want all of the extended
|
||||||
|
charsets. The extended charsets add a few functions and a couple
|
||||||
|
of tables of a few K each. */
|
||||||
|
#ifdef _MB_EXTENDED_CHARSETS_ALL
|
||||||
|
#define _MB_EXTENDED_CHARSETS_ISO 1
|
||||||
|
#define _MB_EXTENDED_CHARSETS_WINDOWS 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __SYS_CONFIG_H__ */
|
|
@ -0,0 +1,533 @@
|
||||||
|
/*
|
||||||
|
* Written by Joel Sherrill <joel@OARcorp.com>.
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-2014.
|
||||||
|
*
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose without fee is hereby granted, provided that this entire notice
|
||||||
|
* is included in all copies of any software which is or includes a copy
|
||||||
|
* or modification of this software.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION
|
||||||
|
* OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
|
||||||
|
* SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS_FEATURES_H
|
||||||
|
#define _SYS_FEATURES_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <_newlib_version.h>
|
||||||
|
|
||||||
|
/* 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)
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Feature test macros control which symbols are exposed by the system
|
||||||
|
* headers. Any of these must be defined before including any headers.
|
||||||
|
*
|
||||||
|
* __STRICT_ANSI__ (defined by gcc -ansi, -std=c90, -std=c99, or -std=c11)
|
||||||
|
* ISO C
|
||||||
|
*
|
||||||
|
* _POSIX_SOURCE (deprecated by _POSIX_C_SOURCE=1)
|
||||||
|
* _POSIX_C_SOURCE >= 1
|
||||||
|
* POSIX.1-1990
|
||||||
|
*
|
||||||
|
* _POSIX_C_SOURCE >= 2
|
||||||
|
* POSIX.2-1992
|
||||||
|
*
|
||||||
|
* _POSIX_C_SOURCE >= 199309L
|
||||||
|
* POSIX.1b-1993 Real-time extensions
|
||||||
|
*
|
||||||
|
* _POSIX_C_SOURCE >= 199506L
|
||||||
|
* POSIX.1c-1995 Threads extensions
|
||||||
|
*
|
||||||
|
* _POSIX_C_SOURCE >= 200112L
|
||||||
|
* POSIX.1-2001 and C99
|
||||||
|
*
|
||||||
|
* _POSIX_C_SOURCE >= 200809L
|
||||||
|
* POSIX.1-2008
|
||||||
|
*
|
||||||
|
* _XOPEN_SOURCE
|
||||||
|
* POSIX.1-1990 and XPG4
|
||||||
|
*
|
||||||
|
* _XOPEN_SOURCE_EXTENDED
|
||||||
|
* SUSv1 (POSIX.2-1992 plus XPG4v2)
|
||||||
|
*
|
||||||
|
* _XOPEN_SOURCE >= 500
|
||||||
|
* SUSv2 (POSIX.1c-1995 plus XSI)
|
||||||
|
*
|
||||||
|
* _XOPEN_SOURCE >= 600
|
||||||
|
* SUSv3 (POSIX.1-2001 plus XSI) and C99
|
||||||
|
*
|
||||||
|
* _XOPEN_SOURCE >= 700
|
||||||
|
* SUSv4 (POSIX.1-2008 plus XSI)
|
||||||
|
*
|
||||||
|
* _ISOC99_SOURCE or gcc -std=c99 or g++
|
||||||
|
* ISO C99
|
||||||
|
*
|
||||||
|
* _ISOC11_SOURCE or gcc -std=c11 or g++ -std=c++11
|
||||||
|
* ISO C11
|
||||||
|
*
|
||||||
|
* _ATFILE_SOURCE (implied by _POSIX_C_SOURCE >= 200809L)
|
||||||
|
* "at" functions
|
||||||
|
*
|
||||||
|
* _LARGEFILE_SOURCE (deprecated by _XOPEN_SOURCE >= 500)
|
||||||
|
* fseeko, ftello
|
||||||
|
*
|
||||||
|
* _GNU_SOURCE
|
||||||
|
* All of the above plus GNU extensions
|
||||||
|
*
|
||||||
|
* _BSD_SOURCE (deprecated by _DEFAULT_SOURCE)
|
||||||
|
* _SVID_SOURCE (deprecated by _DEFAULT_SOURCE)
|
||||||
|
* _DEFAULT_SOURCE (or none of the above)
|
||||||
|
* POSIX-1.2008 with BSD and SVr4 extensions
|
||||||
|
*
|
||||||
|
* _FORTIFY_SOURCE = 1 or 2
|
||||||
|
* Object Size Checking function wrappers
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef _GNU_SOURCE
|
||||||
|
#undef _ATFILE_SOURCE
|
||||||
|
#define _ATFILE_SOURCE 1
|
||||||
|
#undef _DEFAULT_SOURCE
|
||||||
|
#define _DEFAULT_SOURCE 1
|
||||||
|
#undef _ISOC99_SOURCE
|
||||||
|
#define _ISOC99_SOURCE 1
|
||||||
|
#undef _ISOC11_SOURCE
|
||||||
|
#define _ISOC11_SOURCE 1
|
||||||
|
#undef _POSIX_SOURCE
|
||||||
|
#define _POSIX_SOURCE 1
|
||||||
|
#undef _POSIX_C_SOURCE
|
||||||
|
#define _POSIX_C_SOURCE 200809L
|
||||||
|
#undef _XOPEN_SOURCE
|
||||||
|
#define _XOPEN_SOURCE 700
|
||||||
|
#undef _XOPEN_SOURCE_EXTENDED
|
||||||
|
#define _XOPEN_SOURCE_EXTENDED 1
|
||||||
|
#endif /* _GNU_SOURCE */
|
||||||
|
|
||||||
|
#if defined(_BSD_SOURCE) || defined(_SVID_SOURCE) || \
|
||||||
|
(!defined(__STRICT_ANSI__) && !defined(_ANSI_SOURCE) && \
|
||||||
|
!defined(_ISOC99_SOURCE) && !defined(_POSIX_SOURCE) && \
|
||||||
|
!defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE))
|
||||||
|
#undef _DEFAULT_SOURCE
|
||||||
|
#define _DEFAULT_SOURCE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_DEFAULT_SOURCE)
|
||||||
|
#undef _POSIX_SOURCE
|
||||||
|
#define _POSIX_SOURCE 1
|
||||||
|
#undef _POSIX_C_SOURCE
|
||||||
|
#define _POSIX_C_SOURCE 200809L
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) && \
|
||||||
|
((!defined(__STRICT_ANSI__) && !defined(_ANSI_SOURCE)) || \
|
||||||
|
(_XOPEN_SOURCE - 0) >= 500)
|
||||||
|
#define _POSIX_SOURCE 1
|
||||||
|
#if !defined(_XOPEN_SOURCE) || (_XOPEN_SOURCE - 0) >= 700
|
||||||
|
#define _POSIX_C_SOURCE 200809L
|
||||||
|
#elif (_XOPEN_SOURCE - 0) >= 600
|
||||||
|
#define _POSIX_C_SOURCE 200112L
|
||||||
|
#elif (_XOPEN_SOURCE - 0) >= 500
|
||||||
|
#define _POSIX_C_SOURCE 199506L
|
||||||
|
#elif (_XOPEN_SOURCE - 0) < 500
|
||||||
|
#define _POSIX_C_SOURCE 2
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200809
|
||||||
|
#undef _ATFILE_SOURCE
|
||||||
|
#define _ATFILE_SOURCE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following private macros are used throughout the headers to control
|
||||||
|
* which symbols should be exposed. They are for internal use only, as
|
||||||
|
* indicated by the leading double underscore, and must never be used outside
|
||||||
|
* of these headers.
|
||||||
|
*
|
||||||
|
* __POSIX_VISIBLE
|
||||||
|
* any version of POSIX.1; enabled by default, or with _POSIX_SOURCE,
|
||||||
|
* any value of _POSIX_C_SOURCE, or _XOPEN_SOURCE >= 500.
|
||||||
|
*
|
||||||
|
* __POSIX_VISIBLE >= 2
|
||||||
|
* POSIX.2-1992; enabled by default, with _POSIX_C_SOURCE >= 2,
|
||||||
|
* or _XOPEN_SOURCE >= 500.
|
||||||
|
*
|
||||||
|
* __POSIX_VISIBLE >= 199309
|
||||||
|
* POSIX.1b-1993; enabled by default, with _POSIX_C_SOURCE >= 199309L,
|
||||||
|
* or _XOPEN_SOURCE >= 500.
|
||||||
|
*
|
||||||
|
* __POSIX_VISIBLE >= 199506
|
||||||
|
* POSIX.1c-1995; enabled by default, with _POSIX_C_SOURCE >= 199506L,
|
||||||
|
* or _XOPEN_SOURCE >= 500.
|
||||||
|
*
|
||||||
|
* __POSIX_VISIBLE >= 200112
|
||||||
|
* POSIX.1-2001; enabled by default, with _POSIX_C_SOURCE >= 200112L,
|
||||||
|
* or _XOPEN_SOURCE >= 600.
|
||||||
|
*
|
||||||
|
* __POSIX_VISIBLE >= 200809
|
||||||
|
* POSIX.1-2008; enabled by default, with _POSIX_C_SOURCE >= 200809L,
|
||||||
|
* or _XOPEN_SOURCE >= 700.
|
||||||
|
*
|
||||||
|
* __XSI_VISIBLE
|
||||||
|
* XPG4 XSI extensions; enabled with any version of _XOPEN_SOURCE.
|
||||||
|
*
|
||||||
|
* __XSI_VISIBLE >= 4
|
||||||
|
* SUSv1 XSI extensions; enabled with both _XOPEN_SOURCE and
|
||||||
|
* _XOPEN_SOURCE_EXTENDED together.
|
||||||
|
*
|
||||||
|
* __XSI_VISIBLE >= 500
|
||||||
|
* SUSv2 XSI extensions; enabled with _XOPEN_SOURCE >= 500.
|
||||||
|
*
|
||||||
|
* __XSI_VISIBLE >= 600
|
||||||
|
* SUSv3 XSI extensions; enabled with _XOPEN_SOURCE >= 600.
|
||||||
|
*
|
||||||
|
* __XSI_VISIBLE >= 700
|
||||||
|
* SUSv4 XSI extensions; enabled with _XOPEN_SOURCE >= 700.
|
||||||
|
*
|
||||||
|
* __ISO_C_VISIBLE >= 1999
|
||||||
|
* ISO C99; enabled with gcc -std=c99 or newer (on by default since GCC 5),
|
||||||
|
* any version of C++, or with _ISOC99_SOURCE, _POSIX_C_SOURCE >= 200112L,
|
||||||
|
* or _XOPEN_SOURCE >= 600.
|
||||||
|
*
|
||||||
|
* __ISO_C_VISIBLE >= 2011
|
||||||
|
* ISO C11; enabled with gcc -std=c11 or newer (on by default since GCC 5),
|
||||||
|
* g++ -std=c++11 or newer (on by default since GCC 6), or with
|
||||||
|
* _ISOC11_SOURCE.
|
||||||
|
*
|
||||||
|
* __ATFILE_VISIBLE
|
||||||
|
* "at" functions; enabled by default, with _ATFILE_SOURCE,
|
||||||
|
* _POSIX_C_SOURCE >= 200809L, or _XOPEN_SOURCE >= 700.
|
||||||
|
*
|
||||||
|
* __LARGEFILE_VISIBLE
|
||||||
|
* fseeko, ftello; enabled with _LARGEFILE_SOURCE or _XOPEN_SOURCE >= 500.
|
||||||
|
*
|
||||||
|
* __BSD_VISIBLE
|
||||||
|
* BSD extensions; enabled by default, or with _BSD_SOURCE.
|
||||||
|
*
|
||||||
|
* __SVID_VISIBLE
|
||||||
|
* SVr4 extensions; enabled by default, or with _SVID_SOURCE.
|
||||||
|
*
|
||||||
|
* __MISC_VISIBLE
|
||||||
|
* Extensions found in both BSD and SVr4 (shorthand for
|
||||||
|
* (__BSD_VISIBLE || __SVID_VISIBLE)), or newlib-specific
|
||||||
|
* extensions; enabled by default.
|
||||||
|
*
|
||||||
|
* __GNU_VISIBLE
|
||||||
|
* GNU extensions; enabled with _GNU_SOURCE.
|
||||||
|
*
|
||||||
|
* __SSP_FORTIFY_LEVEL
|
||||||
|
* Object Size Checking; defined to 0 (off), 1, or 2.
|
||||||
|
*
|
||||||
|
* In all cases above, "enabled by default" means either by defining
|
||||||
|
* _DEFAULT_SOURCE, or by not defining any of the public feature test macros.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef _ATFILE_SOURCE
|
||||||
|
#define __ATFILE_VISIBLE 1
|
||||||
|
#else
|
||||||
|
#define __ATFILE_VISIBLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _DEFAULT_SOURCE
|
||||||
|
#define __BSD_VISIBLE 1
|
||||||
|
#else
|
||||||
|
#define __BSD_VISIBLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _GNU_SOURCE
|
||||||
|
#define __GNU_VISIBLE 1
|
||||||
|
#else
|
||||||
|
#define __GNU_VISIBLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_ISOC11_SOURCE) || \
|
||||||
|
(__STDC_VERSION__ - 0) >= 201112L || (__cplusplus - 0) >= 201103L
|
||||||
|
#define __ISO_C_VISIBLE 2011
|
||||||
|
#elif defined(_ISOC99_SOURCE) || (_POSIX_C_SOURCE - 0) >= 200112L || \
|
||||||
|
(__STDC_VERSION__ - 0) >= 199901L || defined(__cplusplus)
|
||||||
|
#define __ISO_C_VISIBLE 1999
|
||||||
|
#else
|
||||||
|
#define __ISO_C_VISIBLE 1990
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_LARGEFILE_SOURCE) || (_XOPEN_SOURCE - 0) >= 500
|
||||||
|
#define __LARGEFILE_VISIBLE 1
|
||||||
|
#else
|
||||||
|
#define __LARGEFILE_VISIBLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _DEFAULT_SOURCE
|
||||||
|
#define __MISC_VISIBLE 1
|
||||||
|
#else
|
||||||
|
#define __MISC_VISIBLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (_POSIX_C_SOURCE - 0) >= 200809L
|
||||||
|
#define __POSIX_VISIBLE 200809
|
||||||
|
#elif (_POSIX_C_SOURCE - 0) >= 200112L
|
||||||
|
#define __POSIX_VISIBLE 200112
|
||||||
|
#elif (_POSIX_C_SOURCE - 0) >= 199506L
|
||||||
|
#define __POSIX_VISIBLE 199506
|
||||||
|
#elif (_POSIX_C_SOURCE - 0) >= 199309L
|
||||||
|
#define __POSIX_VISIBLE 199309
|
||||||
|
#elif (_POSIX_C_SOURCE - 0) >= 2 || defined(_XOPEN_SOURCE)
|
||||||
|
#define __POSIX_VISIBLE 199209
|
||||||
|
#elif defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE)
|
||||||
|
#define __POSIX_VISIBLE 199009
|
||||||
|
#else
|
||||||
|
#define __POSIX_VISIBLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _DEFAULT_SOURCE
|
||||||
|
#define __SVID_VISIBLE 1
|
||||||
|
#else
|
||||||
|
#define __SVID_VISIBLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (_XOPEN_SOURCE - 0) >= 700
|
||||||
|
#define __XSI_VISIBLE 700
|
||||||
|
#elif (_XOPEN_SOURCE - 0) >= 600
|
||||||
|
#define __XSI_VISIBLE 600
|
||||||
|
#elif (_XOPEN_SOURCE - 0) >= 500
|
||||||
|
#define __XSI_VISIBLE 500
|
||||||
|
#elif defined(_XOPEN_SOURCE) && defined(_XOPEN_SOURCE_EXTENDED)
|
||||||
|
#define __XSI_VISIBLE 4
|
||||||
|
#elif defined(_XOPEN_SOURCE)
|
||||||
|
#define __XSI_VISIBLE 1
|
||||||
|
#else
|
||||||
|
#define __XSI_VISIBLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if _FORTIFY_SOURCE > 0 && !defined(__cplusplus) && !defined(__lint__) && \
|
||||||
|
(__OPTIMIZE__ > 0 || defined(__clang__)) && __GNUC_PREREQ__(4, 1)
|
||||||
|
# if _FORTIFY_SOURCE > 1
|
||||||
|
# define __SSP_FORTIFY_LEVEL 2
|
||||||
|
# else
|
||||||
|
# define __SSP_FORTIFY_LEVEL 1
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define __SSP_FORTIFY_LEVEL 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* RTEMS adheres to POSIX -- 1003.1b with some features from annexes. */
|
||||||
|
|
||||||
|
#ifdef __rtems__
|
||||||
|
#define _POSIX_JOB_CONTROL 1
|
||||||
|
#define _POSIX_SAVED_IDS 1
|
||||||
|
#define _POSIX_VERSION 199309L
|
||||||
|
#define _POSIX_ASYNCHRONOUS_IO 1
|
||||||
|
#define _POSIX_FSYNC 1
|
||||||
|
#define _POSIX_MAPPED_FILES 1
|
||||||
|
#define _POSIX_MEMLOCK 1
|
||||||
|
#define _POSIX_MEMLOCK_RANGE 1
|
||||||
|
#define _POSIX_MEMORY_PROTECTION 1
|
||||||
|
#define _POSIX_MESSAGE_PASSING 1
|
||||||
|
#define _POSIX_MONOTONIC_CLOCK 200112L
|
||||||
|
#define _POSIX_CLOCK_SELECTION 200112L
|
||||||
|
#define _POSIX_PRIORITIZED_IO 1
|
||||||
|
#define _POSIX_PRIORITY_SCHEDULING 1
|
||||||
|
#define _POSIX_REALTIME_SIGNALS 1
|
||||||
|
#define _POSIX_SEMAPHORES 1
|
||||||
|
#define _POSIX_SHARED_MEMORY_OBJECTS 1
|
||||||
|
#define _POSIX_SYNCHRONIZED_IO 1
|
||||||
|
#define _POSIX_TIMERS 1
|
||||||
|
#define _POSIX_BARRIERS 200112L
|
||||||
|
#define _POSIX_READER_WRITER_LOCKS 200112L
|
||||||
|
#define _POSIX_SPIN_LOCKS 200112L
|
||||||
|
|
||||||
|
|
||||||
|
/* In P1003.1b but defined by drafts at least as early as P1003.1c/D10 */
|
||||||
|
#define _POSIX_THREADS 1
|
||||||
|
#define _POSIX_THREAD_ATTR_STACKADDR 1
|
||||||
|
#define _POSIX_THREAD_ATTR_STACKSIZE 1
|
||||||
|
#define _POSIX_THREAD_PRIORITY_SCHEDULING 1
|
||||||
|
#define _POSIX_THREAD_PRIO_INHERIT 1
|
||||||
|
#define _POSIX_THREAD_PRIO_PROTECT 1
|
||||||
|
#define _POSIX_THREAD_PROCESS_SHARED 1
|
||||||
|
#define _POSIX_THREAD_SAFE_FUNCTIONS 1
|
||||||
|
|
||||||
|
/* P1003.4b/D8 defines the constants below this comment. */
|
||||||
|
#define _POSIX_SPAWN 1
|
||||||
|
#define _POSIX_TIMEOUTS 1
|
||||||
|
#define _POSIX_CPUTIME 1
|
||||||
|
#define _POSIX_THREAD_CPUTIME 1
|
||||||
|
#define _POSIX_SPORADIC_SERVER 1
|
||||||
|
#define _POSIX_THREAD_SPORADIC_SERVER 1
|
||||||
|
#define _POSIX_DEVICE_CONTROL 1
|
||||||
|
#define _POSIX_DEVCTL_DIRECTION 1
|
||||||
|
#define _POSIX_INTERRUPT_CONTROL 1
|
||||||
|
#define _POSIX_ADVISORY_INFO 1
|
||||||
|
|
||||||
|
/* UNIX98 added some new pthread mutex attributes */
|
||||||
|
#define _UNIX98_THREAD_MUTEX_ATTRIBUTES 1
|
||||||
|
|
||||||
|
/* POSIX 1003.26-2003 defined device control method */
|
||||||
|
#define _POSIX_26_VERSION 200312L
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* XMK loosely adheres to POSIX -- 1003.1 */
|
||||||
|
#ifdef __XMK__
|
||||||
|
#define _POSIX_THREADS 1
|
||||||
|
#define _POSIX_THREAD_PRIORITY_SCHEDULING 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __svr4__
|
||||||
|
# define _POSIX_JOB_CONTROL 1
|
||||||
|
# define _POSIX_SAVED_IDS 1
|
||||||
|
# define _POSIX_VERSION 199009L
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __CYGWIN__
|
||||||
|
|
||||||
|
#if __POSIX_VISIBLE >= 200809
|
||||||
|
#define _POSIX_VERSION 200809L
|
||||||
|
#define _POSIX2_VERSION 200809L
|
||||||
|
#elif __POSIX_VISIBLE >= 200112
|
||||||
|
#define _POSIX_VERSION 200112L
|
||||||
|
#define _POSIX2_VERSION 200112L
|
||||||
|
#elif __POSIX_VISIBLE >= 199506
|
||||||
|
#define _POSIX_VERSION 199506L
|
||||||
|
#define _POSIX2_VERSION 199506L
|
||||||
|
#elif __POSIX_VISIBLE >= 199309
|
||||||
|
#define _POSIX_VERSION 199309L
|
||||||
|
#define _POSIX2_VERSION 199209L
|
||||||
|
#elif __POSIX_VISIBLE >= 199209
|
||||||
|
#define _POSIX_VERSION 199009L
|
||||||
|
#define _POSIX2_VERSION 199209L
|
||||||
|
#elif __POSIX_VISIBLE
|
||||||
|
#define _POSIX_VERSION 199009L
|
||||||
|
#endif
|
||||||
|
#if __XSI_VISIBLE >= 4
|
||||||
|
#define _XOPEN_VERSION __XSI_VISIBLE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _POSIX_ADVISORY_INFO 200809L
|
||||||
|
#define _POSIX_ASYNCHRONOUS_IO 200809L
|
||||||
|
#define _POSIX_BARRIERS 200809L
|
||||||
|
#define _POSIX_CHOWN_RESTRICTED 1
|
||||||
|
#define _POSIX_CLOCK_SELECTION 200809L
|
||||||
|
#define _POSIX_CPUTIME 200809L
|
||||||
|
#define _POSIX_FSYNC 200809L
|
||||||
|
#define _POSIX_IPV6 200809L
|
||||||
|
#define _POSIX_JOB_CONTROL 1
|
||||||
|
#define _POSIX_MAPPED_FILES 200809L
|
||||||
|
/* #define _POSIX_MEMLOCK -1 */
|
||||||
|
#define _POSIX_MEMLOCK_RANGE 200809L
|
||||||
|
#define _POSIX_MEMORY_PROTECTION 200809L
|
||||||
|
#define _POSIX_MESSAGE_PASSING 200809L
|
||||||
|
#define _POSIX_MONOTONIC_CLOCK 200809L
|
||||||
|
#define _POSIX_NO_TRUNC 1
|
||||||
|
/* #define _POSIX_PRIORITIZED_IO -1 */
|
||||||
|
#define _POSIX_PRIORITY_SCHEDULING 200809L
|
||||||
|
#define _POSIX_RAW_SOCKETS 200809L
|
||||||
|
#define _POSIX_READER_WRITER_LOCKS 200809L
|
||||||
|
#define _POSIX_REALTIME_SIGNALS 200809L
|
||||||
|
#define _POSIX_REGEXP 1
|
||||||
|
#define _POSIX_SAVED_IDS 1
|
||||||
|
#define _POSIX_SEMAPHORES 200809L
|
||||||
|
#define _POSIX_SHARED_MEMORY_OBJECTS 200809L
|
||||||
|
#define _POSIX_SHELL 1
|
||||||
|
#define _POSIX_SPAWN 200809L
|
||||||
|
#define _POSIX_SPIN_LOCKS 200809L
|
||||||
|
/* #define _POSIX_SPORADIC_SERVER -1 */
|
||||||
|
#define _POSIX_SYNCHRONIZED_IO 200809L
|
||||||
|
#define _POSIX_THREAD_ATTR_STACKADDR 200809L
|
||||||
|
#define _POSIX_THREAD_ATTR_STACKSIZE 200809L
|
||||||
|
#define _POSIX_THREAD_CPUTIME 200809L
|
||||||
|
/* #define _POSIX_THREAD_PRIO_INHERIT -1 */
|
||||||
|
/* #define _POSIX_THREAD_PRIO_PROTECT -1 */
|
||||||
|
#define _POSIX_THREAD_PRIORITY_SCHEDULING 200809L
|
||||||
|
#define _POSIX_THREAD_PROCESS_SHARED 200809L
|
||||||
|
#define _POSIX_THREAD_SAFE_FUNCTIONS 200809L
|
||||||
|
/* #define _POSIX_THREAD_SPORADIC_SERVER -1 */
|
||||||
|
#define _POSIX_THREADS 200809L
|
||||||
|
#define _POSIX_TIMEOUTS 200809L
|
||||||
|
#define _POSIX_TIMERS 200809L
|
||||||
|
/* #define _POSIX_TRACE -1 */
|
||||||
|
/* #define _POSIX_TRACE_EVENT_FILTER -1 */
|
||||||
|
/* #define _POSIX_TRACE_INHERIT -1 */
|
||||||
|
/* #define _POSIX_TRACE_LOG -1 */
|
||||||
|
/* #define _POSIX_TYPED_MEMORY_OBJECTS -1 */
|
||||||
|
#define _POSIX_VDISABLE '\0'
|
||||||
|
|
||||||
|
#if __POSIX_VISIBLE >= 2
|
||||||
|
#define _POSIX2_C_VERSION _POSIX2_VERSION
|
||||||
|
#define _POSIX2_C_BIND _POSIX2_VERSION
|
||||||
|
#define _POSIX2_C_DEV _POSIX2_VERSION
|
||||||
|
#define _POSIX2_CHAR_TERM _POSIX2_VERSION
|
||||||
|
/* #define _POSIX2_FORT_DEV -1 */
|
||||||
|
/* #define _POSIX2_FORT_RUN -1 */
|
||||||
|
/* #define _POSIX2_LOCALEDEF -1 */
|
||||||
|
/* #define _POSIX2_PBS -1 */
|
||||||
|
/* #define _POSIX2_PBS_ACCOUNTING -1 */
|
||||||
|
/* #define _POSIX2_PBS_CHECKPOINT -1 */
|
||||||
|
/* #define _POSIX2_PBS_LOCATE -1 */
|
||||||
|
/* #define _POSIX2_PBS_MESSAGE -1 */
|
||||||
|
/* #define _POSIX2_PBS_TRACK -1 */
|
||||||
|
#define _POSIX2_SW_DEV _POSIX2_VERSION
|
||||||
|
#define _POSIX2_UPE _POSIX2_VERSION
|
||||||
|
#endif /* __POSIX_VISIBLE >= 2 */
|
||||||
|
|
||||||
|
#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 _POSIX_V7_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
|
||||||
|
#define _POSIX_V7_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
|
||||||
|
#define _POSIX_V7_LP64_OFF64 _POSIX_V6_LP64_OFF64
|
||||||
|
#define _POSIX_V7_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
|
||||||
|
#define _XBS5_ILP32_OFF32 _POSIX_V6_ILP32_OFF32
|
||||||
|
#define _XBS5_ILP32_OFFBIG _POSIX_V6_ILP32_OFFBIG
|
||||||
|
#define _XBS5_LP64_OFF64 _POSIX_V6_LP64_OFF64
|
||||||
|
#define _XBS5_LPBIG_OFFBIG _POSIX_V6_LPBIG_OFFBIG
|
||||||
|
|
||||||
|
#if __XSI_VISIBLE
|
||||||
|
#define _XOPEN_CRYPT 1
|
||||||
|
#define _XOPEN_ENH_I18N 1
|
||||||
|
/* #define _XOPEN_LEGACY -1 */
|
||||||
|
/* #define _XOPEN_REALTIME -1 */
|
||||||
|
/* #define _XOPEN_REALTIME_THREADS -1 */
|
||||||
|
#define _XOPEN_SHM 1
|
||||||
|
/* #define _XOPEN_STREAMS -1 */
|
||||||
|
/* #define _XOPEN_UNIX -1 */
|
||||||
|
#endif /* __XSI_VISIBLE */
|
||||||
|
|
||||||
|
/* The value corresponds to UNICODE version 5.2, which is the current
|
||||||
|
state of newlib's wide char conversion functions. */
|
||||||
|
#define __STDC_ISO_10646__ 200910L
|
||||||
|
|
||||||
|
#endif /* __CYGWIN__ */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* _SYS_FEATURES_H */
|
|
@ -0,0 +1,69 @@
|
||||||
|
#ifndef __SYS_LOCK_H__
|
||||||
|
#define __SYS_LOCK_H__
|
||||||
|
|
||||||
|
/* dummy lock routines for single-threaded aps */
|
||||||
|
|
||||||
|
#include <newlib.h>
|
||||||
|
#include <_ansi.h>
|
||||||
|
|
||||||
|
#if !defined(_RETARGETABLE_LOCKING)
|
||||||
|
|
||||||
|
typedef int _LOCK_T;
|
||||||
|
typedef int _LOCK_RECURSIVE_T;
|
||||||
|
|
||||||
|
#define __LOCK_INIT(class,lock) static int lock = 0;
|
||||||
|
#define __LOCK_INIT_RECURSIVE(class,lock) static int lock = 0;
|
||||||
|
#define __lock_init(lock) ((void) 0)
|
||||||
|
#define __lock_init_recursive(lock) ((void) 0)
|
||||||
|
#define __lock_close(lock) ((void) 0)
|
||||||
|
#define __lock_close_recursive(lock) ((void) 0)
|
||||||
|
#define __lock_acquire(lock) ((void) 0)
|
||||||
|
#define __lock_acquire_recursive(lock) ((void) 0)
|
||||||
|
#define __lock_try_acquire(lock) ((void) 0)
|
||||||
|
#define __lock_try_acquire_recursive(lock) ((void) 0)
|
||||||
|
#define __lock_release(lock) ((void) 0)
|
||||||
|
#define __lock_release_recursive(lock) ((void) 0)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct __lock;
|
||||||
|
typedef struct __lock * _LOCK_T;
|
||||||
|
#define _LOCK_RECURSIVE_T _LOCK_T
|
||||||
|
|
||||||
|
#define __LOCK_INIT(class,lock) extern struct __lock __lock_ ## lock; \
|
||||||
|
class _LOCK_T lock = &__lock_ ## lock
|
||||||
|
#define __LOCK_INIT_RECURSIVE(class,lock) __LOCK_INIT(class,lock)
|
||||||
|
|
||||||
|
extern void __retarget_lock_init(_LOCK_T *lock);
|
||||||
|
#define __lock_init(lock) __retarget_lock_init(&lock)
|
||||||
|
extern void __retarget_lock_init_recursive(_LOCK_T *lock);
|
||||||
|
#define __lock_init_recursive(lock) __retarget_lock_init_recursive(&lock)
|
||||||
|
extern void __retarget_lock_close(_LOCK_T lock);
|
||||||
|
#define __lock_close(lock) __retarget_lock_close(lock)
|
||||||
|
extern void __retarget_lock_close_recursive(_LOCK_T lock);
|
||||||
|
#define __lock_close_recursive(lock) __retarget_lock_close_recursive(lock)
|
||||||
|
extern void __retarget_lock_acquire(_LOCK_T lock);
|
||||||
|
#define __lock_acquire(lock) __retarget_lock_acquire(lock)
|
||||||
|
extern void __retarget_lock_acquire_recursive(_LOCK_T lock);
|
||||||
|
#define __lock_acquire_recursive(lock) __retarget_lock_acquire_recursive(lock)
|
||||||
|
extern int __retarget_lock_try_acquire(_LOCK_T lock);
|
||||||
|
#define __lock_try_acquire(lock) __retarget_lock_try_acquire(lock)
|
||||||
|
extern int __retarget_lock_try_acquire_recursive(_LOCK_T lock);
|
||||||
|
#define __lock_try_acquire_recursive(lock) \
|
||||||
|
__retarget_lock_try_acquire_recursive(lock)
|
||||||
|
extern void __retarget_lock_release(_LOCK_T lock);
|
||||||
|
#define __lock_release(lock) __retarget_lock_release(lock)
|
||||||
|
extern void __retarget_lock_release_recursive(_LOCK_T lock);
|
||||||
|
#define __lock_release_recursive(lock) __retarget_lock_release_recursive(lock)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !defined(_RETARGETABLE_LOCKING) */
|
||||||
|
|
||||||
|
#endif /* __SYS_LOCK_H__ */
|
|
@ -0,0 +1,842 @@
|
||||||
|
/* This header file provides the reentrancy. */
|
||||||
|
|
||||||
|
/* WARNING: All identifiers here must begin with an underscore. This file is
|
||||||
|
included by stdio.h and others and we therefore must only use identifiers
|
||||||
|
in the namespace allotted to us. */
|
||||||
|
|
||||||
|
#ifndef _SYS_REENT_H_
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
#define _SYS_REENT_H_
|
||||||
|
|
||||||
|
#include <_ansi.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <sys/_types.h>
|
||||||
|
|
||||||
|
#define _NULL 0
|
||||||
|
|
||||||
|
#ifndef __Long
|
||||||
|
#if __LONG_MAX__ == 2147483647L
|
||||||
|
#define __Long long
|
||||||
|
typedef unsigned __Long __ULong;
|
||||||
|
#elif __INT_MAX__ == 2147483647
|
||||||
|
#define __Long int
|
||||||
|
typedef unsigned __Long __ULong;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined( __Long)
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __Long
|
||||||
|
#define __Long __int32_t
|
||||||
|
typedef __uint32_t __ULong;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct _reent;
|
||||||
|
|
||||||
|
struct __locale_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If _REENT_SMALL is defined, we make struct _reent as small as possible,
|
||||||
|
* by having nearly everything possible allocated at first use.
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct _Bigint
|
||||||
|
{
|
||||||
|
struct _Bigint *_next;
|
||||||
|
int _k, _maxwds, _sign, _wds;
|
||||||
|
__ULong _x[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* needed by reentrant structure */
|
||||||
|
struct __tm
|
||||||
|
{
|
||||||
|
int __tm_sec;
|
||||||
|
int __tm_min;
|
||||||
|
int __tm_hour;
|
||||||
|
int __tm_mday;
|
||||||
|
int __tm_mon;
|
||||||
|
int __tm_year;
|
||||||
|
int __tm_wday;
|
||||||
|
int __tm_yday;
|
||||||
|
int __tm_isdst;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* atexit() support.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _ATEXIT_SIZE 32 /* must be at least 32 to guarantee ANSI conformance */
|
||||||
|
|
||||||
|
struct _on_exit_args {
|
||||||
|
void * _fnargs[_ATEXIT_SIZE]; /* user fn args */
|
||||||
|
void * _dso_handle[_ATEXIT_SIZE];
|
||||||
|
/* Bitmask is set if user function takes arguments. */
|
||||||
|
__ULong _fntypes; /* type of exit routine -
|
||||||
|
Must have at least _ATEXIT_SIZE bits */
|
||||||
|
/* Bitmask is set if function was registered via __cxa_atexit. */
|
||||||
|
__ULong _is_cxa;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef _REENT_SMALL
|
||||||
|
struct _atexit {
|
||||||
|
struct _atexit *_next; /* next in list */
|
||||||
|
int _ind; /* next index in this table */
|
||||||
|
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 */
|
||||||
|
int _ind; /* next index in this table */
|
||||||
|
/* Some entries may already have been called, and will be NULL. */
|
||||||
|
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.
|
||||||
|
*
|
||||||
|
* This and __FILE are defined here because we need them for struct _reent,
|
||||||
|
* but we don't want stdio.h included when stdlib.h is.
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct __sbuf {
|
||||||
|
unsigned char *_base;
|
||||||
|
int _size;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Stdio state variables.
|
||||||
|
*
|
||||||
|
* The following always hold:
|
||||||
|
*
|
||||||
|
* if (_flags&(__SLBF|__SWR)) == (__SLBF|__SWR),
|
||||||
|
* _lbfsize is -_bf._size, else _lbfsize is 0
|
||||||
|
* if _flags&__SRD, _w is 0
|
||||||
|
* if _flags&__SWR, _r is 0
|
||||||
|
*
|
||||||
|
* This ensures that the getc and putc macros (or inline functions) never
|
||||||
|
* try to write or read from a file that is in `read' or `write' mode.
|
||||||
|
* (Moreover, they can, and do, automatically switch from read mode to
|
||||||
|
* write mode, and back, on "r+" and "w+" files.)
|
||||||
|
*
|
||||||
|
* _lbfsize is used only to make the inline line-buffered output stream
|
||||||
|
* code as compact as possible.
|
||||||
|
*
|
||||||
|
* _ub, _up, and _ur are used when ungetc() pushes back more characters
|
||||||
|
* than fit in the current _bf, or when ungetc() pushes back a character
|
||||||
|
* that does not match the previous one in _bf. When this happens,
|
||||||
|
* _ub._base becomes non-nil (i.e., a stream has ungetc() data iff
|
||||||
|
* _ub._base!=NULL) and _up and _ur save the current values of _p and _r.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(_REENT_SMALL) && !defined(_REENT_GLOBAL_STDIO_STREAMS)
|
||||||
|
/*
|
||||||
|
* struct __sFILE_fake is the start of a struct __sFILE, with only the
|
||||||
|
* minimal fields allocated. In __sinit() we really allocate the 3
|
||||||
|
* standard streams, etc., and point away from this fake.
|
||||||
|
*/
|
||||||
|
struct __sFILE_fake {
|
||||||
|
unsigned char *_p; /* current position in (some) buffer */
|
||||||
|
int _r; /* read space left for getc() */
|
||||||
|
int _w; /* write space left for putc() */
|
||||||
|
short _flags; /* flags, below; this FILE is free if 0 */
|
||||||
|
short _file; /* fileno, if Unix descriptor, else -1 */
|
||||||
|
struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
|
||||||
|
int _lbfsize; /* 0 or -_bf._size, for inline putc */
|
||||||
|
|
||||||
|
struct _reent *_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Following is needed both in libc/stdio and libc/stdlib so we put it
|
||||||
|
* here instead of libc/stdio/local.h where it was previously. */
|
||||||
|
|
||||||
|
extern void __sinit (struct _reent *);
|
||||||
|
|
||||||
|
# define _REENT_SMALL_CHECK_INIT(ptr) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
if ((ptr) && !(ptr)->__sdidinit) \
|
||||||
|
__sinit (ptr); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
#else /* _REENT_SMALL && !_REENT_GLOBAL_STDIO_STREAMS */
|
||||||
|
# define _REENT_SMALL_CHECK_INIT(ptr) /* nothing */
|
||||||
|
#endif /* _REENT_SMALL && !_REENT_GLOBAL_STDIO_STREAMS */
|
||||||
|
|
||||||
|
struct __sFILE {
|
||||||
|
unsigned char *_p; /* current position in (some) buffer */
|
||||||
|
int _r; /* read space left for getc() */
|
||||||
|
int _w; /* write space left for putc() */
|
||||||
|
short _flags; /* flags, below; this FILE is free if 0 */
|
||||||
|
short _file; /* fileno, if Unix descriptor, else -1 */
|
||||||
|
struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
|
||||||
|
int _lbfsize; /* 0 or -_bf._size, for inline putc */
|
||||||
|
|
||||||
|
#ifdef _REENT_SMALL
|
||||||
|
struct _reent *_data;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* operations */
|
||||||
|
void * _cookie; /* cookie passed to io functions */
|
||||||
|
|
||||||
|
_READ_WRITE_RETURN_TYPE (*_read) (struct _reent *, void *,
|
||||||
|
char *, _READ_WRITE_BUFSIZE_TYPE);
|
||||||
|
_READ_WRITE_RETURN_TYPE (*_write) (struct _reent *, void *,
|
||||||
|
const char *,
|
||||||
|
_READ_WRITE_BUFSIZE_TYPE);
|
||||||
|
_fpos_t (*_seek) (struct _reent *, void *, _fpos_t, int);
|
||||||
|
int (*_close) (struct _reent *, void *);
|
||||||
|
|
||||||
|
/* separate buffer for long sequences of ungetc() */
|
||||||
|
struct __sbuf _ub; /* ungetc buffer */
|
||||||
|
unsigned char *_up; /* saved _p when _p is doing ungetc data */
|
||||||
|
int _ur; /* saved _r when _r is counting ungetc data */
|
||||||
|
|
||||||
|
/* tricks to meet minimum requirements even when malloc() fails */
|
||||||
|
unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */
|
||||||
|
unsigned char _nbuf[1]; /* guarantee a getc() buffer */
|
||||||
|
|
||||||
|
/* separate buffer for fgetline() when line crosses buffer boundary */
|
||||||
|
struct __sbuf _lb; /* buffer for fgetline() */
|
||||||
|
|
||||||
|
/* Unix stdio files get aligned to block boundaries on fseek() */
|
||||||
|
int _blksize; /* stat.st_blksize (may be != _bf._size) */
|
||||||
|
_off_t _offset; /* current lseek offset */
|
||||||
|
|
||||||
|
#ifndef _REENT_SMALL
|
||||||
|
struct _reent *_data; /* Here for binary compatibility? Remove? */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __SINGLE_THREAD__
|
||||||
|
_flock_t _lock; /* for thread-safety locking */
|
||||||
|
#endif
|
||||||
|
_mbstate_t _mbstate; /* for wide char stdio functions. */
|
||||||
|
int _flags2; /* for future use */
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __CUSTOM_FILE_IO__
|
||||||
|
|
||||||
|
/* Get custom _FILE definition. */
|
||||||
|
#include <sys/custom_file.h>
|
||||||
|
|
||||||
|
#else /* !__CUSTOM_FILE_IO__ */
|
||||||
|
#ifdef __LARGE64_FILES
|
||||||
|
struct __sFILE64 {
|
||||||
|
unsigned char *_p; /* current position in (some) buffer */
|
||||||
|
int _r; /* read space left for getc() */
|
||||||
|
int _w; /* write space left for putc() */
|
||||||
|
short _flags; /* flags, below; this FILE is free if 0 */
|
||||||
|
short _file; /* fileno, if Unix descriptor, else -1 */
|
||||||
|
struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */
|
||||||
|
int _lbfsize; /* 0 or -_bf._size, for inline putc */
|
||||||
|
|
||||||
|
struct _reent *_data;
|
||||||
|
|
||||||
|
/* operations */
|
||||||
|
void * _cookie; /* cookie passed to io functions */
|
||||||
|
|
||||||
|
_READ_WRITE_RETURN_TYPE (*_read) (struct _reent *, void *,
|
||||||
|
char *, _READ_WRITE_BUFSIZE_TYPE);
|
||||||
|
_READ_WRITE_RETURN_TYPE (*_write) (struct _reent *, void *,
|
||||||
|
const char *,
|
||||||
|
_READ_WRITE_BUFSIZE_TYPE);
|
||||||
|
_fpos_t (*_seek) (struct _reent *, void *, _fpos_t, int);
|
||||||
|
int (*_close) (struct _reent *, void *);
|
||||||
|
|
||||||
|
/* separate buffer for long sequences of ungetc() */
|
||||||
|
struct __sbuf _ub; /* ungetc buffer */
|
||||||
|
unsigned char *_up; /* saved _p when _p is doing ungetc data */
|
||||||
|
int _ur; /* saved _r when _r is counting ungetc data */
|
||||||
|
|
||||||
|
/* tricks to meet minimum requirements even when malloc() fails */
|
||||||
|
unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */
|
||||||
|
unsigned char _nbuf[1]; /* guarantee a getc() buffer */
|
||||||
|
|
||||||
|
/* separate buffer for fgetline() when line crosses buffer boundary */
|
||||||
|
struct __sbuf _lb; /* buffer for fgetline() */
|
||||||
|
|
||||||
|
/* Unix stdio files get aligned to block boundaries on fseek() */
|
||||||
|
int _blksize; /* stat.st_blksize (may be != _bf._size) */
|
||||||
|
int _flags2; /* for future use */
|
||||||
|
|
||||||
|
_off64_t _offset; /* current lseek offset */
|
||||||
|
_fpos64_t (*_seek64) (struct _reent *, void *, _fpos64_t, int);
|
||||||
|
|
||||||
|
#ifndef __SINGLE_THREAD__
|
||||||
|
_flock_t _lock; /* for thread-safety locking */
|
||||||
|
#endif
|
||||||
|
_mbstate_t _mbstate; /* for wide char stdio functions. */
|
||||||
|
};
|
||||||
|
typedef struct __sFILE64 __FILE;
|
||||||
|
#else
|
||||||
|
typedef struct __sFILE __FILE;
|
||||||
|
#endif /* __LARGE64_FILES */
|
||||||
|
#endif /* !__CUSTOM_FILE_IO__ */
|
||||||
|
|
||||||
|
struct _glue
|
||||||
|
{
|
||||||
|
struct _glue *_next;
|
||||||
|
int _niobs;
|
||||||
|
__FILE *_iobs;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rand48 family support
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
#define _RAND48_SEED_0 (0x330e)
|
||||||
|
#define _RAND48_SEED_1 (0xabcd)
|
||||||
|
#define _RAND48_SEED_2 (0x1234)
|
||||||
|
#define _RAND48_MULT_0 (0xe66d)
|
||||||
|
#define _RAND48_MULT_1 (0xdeec)
|
||||||
|
#define _RAND48_MULT_2 (0x0005)
|
||||||
|
#define _RAND48_ADD (0x000b)
|
||||||
|
struct _rand48 {
|
||||||
|
unsigned short _seed[3];
|
||||||
|
unsigned short _mult[3];
|
||||||
|
unsigned short _add;
|
||||||
|
#ifdef _REENT_SMALL
|
||||||
|
/* Put this in here as well, for good luck. */
|
||||||
|
__extension__ unsigned long long _rand_next;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
/* How big the some arrays are. */
|
||||||
|
#define _REENT_EMERGENCY_SIZE 25
|
||||||
|
#define _REENT_ASCTIME_SIZE 26
|
||||||
|
#define _REENT_SIGNAL_SIZE 24
|
||||||
|
|
||||||
|
/*
|
||||||
|
* struct _reent
|
||||||
|
*
|
||||||
|
* This structure contains *all* globals needed by the library.
|
||||||
|
* It's raison d'etre is to facilitate threads by making all library routines
|
||||||
|
* reentrant. IE: All state information is contained here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef _REENT_SMALL
|
||||||
|
|
||||||
|
struct _mprec
|
||||||
|
{
|
||||||
|
/* used by mprec routines */
|
||||||
|
struct _Bigint *_result;
|
||||||
|
int _result_k;
|
||||||
|
struct _Bigint *_p5s;
|
||||||
|
struct _Bigint **_freelist;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct _misc_reent
|
||||||
|
{
|
||||||
|
/* miscellaneous reentrant data */
|
||||||
|
char *_strtok_last;
|
||||||
|
_mbstate_t _mblen_state;
|
||||||
|
_mbstate_t _wctomb_state;
|
||||||
|
_mbstate_t _mbtowc_state;
|
||||||
|
char _l64a_buf[8];
|
||||||
|
int _getdate_err;
|
||||||
|
_mbstate_t _mbrlen_state;
|
||||||
|
_mbstate_t _mbrtowc_state;
|
||||||
|
_mbstate_t _mbsrtowcs_state;
|
||||||
|
_mbstate_t _wcrtomb_state;
|
||||||
|
_mbstate_t _wcsrtombs_state;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
{
|
||||||
|
/* As an exception to the above put _errno first for binary
|
||||||
|
compatibility with non _REENT_SMALL targets. */
|
||||||
|
int _errno; /* local copy of errno */
|
||||||
|
|
||||||
|
/* FILE is a big struct and may change over time. To try to achieve binary
|
||||||
|
compatibility with future versions, put stdin,stdout,stderr here.
|
||||||
|
These are pointers into member __sf defined below. */
|
||||||
|
__FILE *_stdin, *_stdout, *_stderr; /* XXX */
|
||||||
|
|
||||||
|
int _inc; /* used by tmpnam */
|
||||||
|
|
||||||
|
char *_emergency;
|
||||||
|
|
||||||
|
int __sdidinit; /* 1 means stdio has been init'd */
|
||||||
|
|
||||||
|
int _unspecified_locale_info; /* unused, reserved for locale stuff */
|
||||||
|
struct __locale_t *_locale;/* per-thread locale */
|
||||||
|
|
||||||
|
struct _mprec *_mp;
|
||||||
|
|
||||||
|
void (*__cleanup) (struct _reent *);
|
||||||
|
|
||||||
|
int _gamma_signgam;
|
||||||
|
|
||||||
|
/* used by some fp conversion routines */
|
||||||
|
int _cvtlen; /* should be size_t */
|
||||||
|
char *_cvtbuf;
|
||||||
|
|
||||||
|
struct _rand48 *_r48;
|
||||||
|
struct __tm *_localtime_buf;
|
||||||
|
char *_asctime_buf;
|
||||||
|
|
||||||
|
/* 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 */
|
||||||
|
struct _misc_reent *_misc; /* strtok, multibyte states */
|
||||||
|
char *_signal_buf; /* strsignal */
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
|
extern __FILE __sf[3];
|
||||||
|
|
||||||
|
# define _REENT_INIT(var) \
|
||||||
|
{ 0, \
|
||||||
|
&__sf[0], \
|
||||||
|
&__sf[1], \
|
||||||
|
&__sf[2], \
|
||||||
|
0, \
|
||||||
|
_NULL, \
|
||||||
|
0, \
|
||||||
|
0, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
0, \
|
||||||
|
0, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
_REENT_INIT_ATEXIT \
|
||||||
|
{_NULL, 0, _NULL}, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _REENT_INIT_PTR_ZEROED(var) \
|
||||||
|
{ (var)->_stdin = &__sf[0]; \
|
||||||
|
(var)->_stdout = &__sf[1]; \
|
||||||
|
(var)->_stderr = &__sf[2]; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* _REENT_GLOBAL_STDIO_STREAMS */
|
||||||
|
|
||||||
|
extern const struct __sFILE_fake __sf_fake_stdin;
|
||||||
|
extern const struct __sFILE_fake __sf_fake_stdout;
|
||||||
|
extern const struct __sFILE_fake __sf_fake_stderr;
|
||||||
|
|
||||||
|
# define _REENT_INIT(var) \
|
||||||
|
{ 0, \
|
||||||
|
(__FILE *)&__sf_fake_stdin, \
|
||||||
|
(__FILE *)&__sf_fake_stdout, \
|
||||||
|
(__FILE *)&__sf_fake_stderr, \
|
||||||
|
0, \
|
||||||
|
_NULL, \
|
||||||
|
0, \
|
||||||
|
0, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
0, \
|
||||||
|
0, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
_REENT_INIT_ATEXIT \
|
||||||
|
{_NULL, 0, _NULL}, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _REENT_INIT_PTR_ZEROED(var) \
|
||||||
|
{ (var)->_stdin = (__FILE *)&__sf_fake_stdin; \
|
||||||
|
(var)->_stdout = (__FILE *)&__sf_fake_stdout; \
|
||||||
|
(var)->_stderr = (__FILE *)&__sf_fake_stderr; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _REENT_GLOBAL_STDIO_STREAMS */
|
||||||
|
|
||||||
|
/* Only add assert() calls if we are specified to debug. */
|
||||||
|
#ifdef _REENT_CHECK_DEBUG
|
||||||
|
#include <assert.h>
|
||||||
|
#define __reent_assert(x) assert(x)
|
||||||
|
#else
|
||||||
|
#define __reent_assert(x) ((void)0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __CUSTOM_FILE_IO__
|
||||||
|
#error Custom FILE I/O and _REENT_SMALL not currently supported.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Generic _REENT check macro. */
|
||||||
|
#define _REENT_CHECK(var, what, type, size, init) do { \
|
||||||
|
struct _reent *_r = (var); \
|
||||||
|
if (_r->what == NULL) { \
|
||||||
|
_r->what = (type)malloc(size); \
|
||||||
|
__reent_assert(_r->what); \
|
||||||
|
init; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define _REENT_CHECK_TM(var) \
|
||||||
|
_REENT_CHECK(var, _localtime_buf, struct __tm *, sizeof *((var)->_localtime_buf), \
|
||||||
|
/* nothing */)
|
||||||
|
|
||||||
|
#define _REENT_CHECK_ASCTIME_BUF(var) \
|
||||||
|
_REENT_CHECK(var, _asctime_buf, char *, _REENT_ASCTIME_SIZE, \
|
||||||
|
memset((var)->_asctime_buf, 0, _REENT_ASCTIME_SIZE))
|
||||||
|
|
||||||
|
/* Handle the dynamically allocated rand48 structure. */
|
||||||
|
#define _REENT_INIT_RAND48(var) do { \
|
||||||
|
struct _reent *_r = (var); \
|
||||||
|
_r->_r48->_seed[0] = _RAND48_SEED_0; \
|
||||||
|
_r->_r48->_seed[1] = _RAND48_SEED_1; \
|
||||||
|
_r->_r48->_seed[2] = _RAND48_SEED_2; \
|
||||||
|
_r->_r48->_mult[0] = _RAND48_MULT_0; \
|
||||||
|
_r->_r48->_mult[1] = _RAND48_MULT_1; \
|
||||||
|
_r->_r48->_mult[2] = _RAND48_MULT_2; \
|
||||||
|
_r->_r48->_add = _RAND48_ADD; \
|
||||||
|
_r->_r48->_rand_next = 1; \
|
||||||
|
} while (0)
|
||||||
|
#define _REENT_CHECK_RAND48(var) \
|
||||||
|
_REENT_CHECK(var, _r48, struct _rand48 *, sizeof *((var)->_r48), _REENT_INIT_RAND48((var)))
|
||||||
|
|
||||||
|
#define _REENT_INIT_MP(var) do { \
|
||||||
|
struct _reent *_r = (var); \
|
||||||
|
_r->_mp->_result_k = 0; \
|
||||||
|
_r->_mp->_result = _r->_mp->_p5s = _NULL; \
|
||||||
|
_r->_mp->_freelist = _NULL; \
|
||||||
|
} while (0)
|
||||||
|
#define _REENT_CHECK_MP(var) \
|
||||||
|
_REENT_CHECK(var, _mp, struct _mprec *, sizeof *((var)->_mp), _REENT_INIT_MP(var))
|
||||||
|
|
||||||
|
#define _REENT_CHECK_EMERGENCY(var) \
|
||||||
|
_REENT_CHECK(var, _emergency, char *, _REENT_EMERGENCY_SIZE, /* nothing */)
|
||||||
|
|
||||||
|
#define _REENT_INIT_MISC(var) do { \
|
||||||
|
struct _reent *_r = (var); \
|
||||||
|
_r->_misc->_strtok_last = _NULL; \
|
||||||
|
_r->_misc->_mblen_state.__count = 0; \
|
||||||
|
_r->_misc->_mblen_state.__value.__wch = 0; \
|
||||||
|
_r->_misc->_wctomb_state.__count = 0; \
|
||||||
|
_r->_misc->_wctomb_state.__value.__wch = 0; \
|
||||||
|
_r->_misc->_mbtowc_state.__count = 0; \
|
||||||
|
_r->_misc->_mbtowc_state.__value.__wch = 0; \
|
||||||
|
_r->_misc->_mbrlen_state.__count = 0; \
|
||||||
|
_r->_misc->_mbrlen_state.__value.__wch = 0; \
|
||||||
|
_r->_misc->_mbrtowc_state.__count = 0; \
|
||||||
|
_r->_misc->_mbrtowc_state.__value.__wch = 0; \
|
||||||
|
_r->_misc->_mbsrtowcs_state.__count = 0; \
|
||||||
|
_r->_misc->_mbsrtowcs_state.__value.__wch = 0; \
|
||||||
|
_r->_misc->_wcrtomb_state.__count = 0; \
|
||||||
|
_r->_misc->_wcrtomb_state.__value.__wch = 0; \
|
||||||
|
_r->_misc->_wcsrtombs_state.__count = 0; \
|
||||||
|
_r->_misc->_wcsrtombs_state.__value.__wch = 0; \
|
||||||
|
_r->_misc->_l64a_buf[0] = '\0'; \
|
||||||
|
_r->_misc->_getdate_err = 0; \
|
||||||
|
} while (0)
|
||||||
|
#define _REENT_CHECK_MISC(var) \
|
||||||
|
_REENT_CHECK(var, _misc, struct _misc_reent *, sizeof *((var)->_misc), _REENT_INIT_MISC(var))
|
||||||
|
|
||||||
|
#define _REENT_CHECK_SIGNAL_BUF(var) \
|
||||||
|
_REENT_CHECK(var, _signal_buf, char *, _REENT_SIGNAL_SIZE, /* nothing */)
|
||||||
|
|
||||||
|
#define _REENT_SIGNGAM(ptr) ((ptr)->_gamma_signgam)
|
||||||
|
#define _REENT_RAND_NEXT(ptr) ((ptr)->_r48->_rand_next)
|
||||||
|
#define _REENT_RAND48_SEED(ptr) ((ptr)->_r48->_seed)
|
||||||
|
#define _REENT_RAND48_MULT(ptr) ((ptr)->_r48->_mult)
|
||||||
|
#define _REENT_RAND48_ADD(ptr) ((ptr)->_r48->_add)
|
||||||
|
#define _REENT_MP_RESULT(ptr) ((ptr)->_mp->_result)
|
||||||
|
#define _REENT_MP_RESULT_K(ptr) ((ptr)->_mp->_result_k)
|
||||||
|
#define _REENT_MP_P5S(ptr) ((ptr)->_mp->_p5s)
|
||||||
|
#define _REENT_MP_FREELIST(ptr) ((ptr)->_mp->_freelist)
|
||||||
|
#define _REENT_ASCTIME_BUF(ptr) ((ptr)->_asctime_buf)
|
||||||
|
#define _REENT_TM(ptr) ((ptr)->_localtime_buf)
|
||||||
|
#define _REENT_EMERGENCY(ptr) ((ptr)->_emergency)
|
||||||
|
#define _REENT_STRTOK_LAST(ptr) ((ptr)->_misc->_strtok_last)
|
||||||
|
#define _REENT_MBLEN_STATE(ptr) ((ptr)->_misc->_mblen_state)
|
||||||
|
#define _REENT_MBTOWC_STATE(ptr)((ptr)->_misc->_mbtowc_state)
|
||||||
|
#define _REENT_WCTOMB_STATE(ptr)((ptr)->_misc->_wctomb_state)
|
||||||
|
#define _REENT_MBRLEN_STATE(ptr) ((ptr)->_misc->_mbrlen_state)
|
||||||
|
#define _REENT_MBRTOWC_STATE(ptr) ((ptr)->_misc->_mbrtowc_state)
|
||||||
|
#define _REENT_MBSRTOWCS_STATE(ptr) ((ptr)->_misc->_mbsrtowcs_state)
|
||||||
|
#define _REENT_WCRTOMB_STATE(ptr) ((ptr)->_misc->_wcrtomb_state)
|
||||||
|
#define _REENT_WCSRTOMBS_STATE(ptr) ((ptr)->_misc->_wcsrtombs_state)
|
||||||
|
#define _REENT_L64A_BUF(ptr) ((ptr)->_misc->_l64a_buf)
|
||||||
|
#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_misc->_getdate_err))
|
||||||
|
#define _REENT_SIGNAL_BUF(ptr) ((ptr)->_signal_buf)
|
||||||
|
|
||||||
|
#else /* !_REENT_SMALL */
|
||||||
|
|
||||||
|
struct _reent
|
||||||
|
{
|
||||||
|
int _errno; /* local copy of errno */
|
||||||
|
|
||||||
|
/* FILE is a big struct and may change over time. To try to achieve binary
|
||||||
|
compatibility with future versions, put stdin,stdout,stderr here.
|
||||||
|
These are pointers into member __sf defined below. */
|
||||||
|
__FILE *_stdin, *_stdout, *_stderr;
|
||||||
|
|
||||||
|
int _inc; /* used by tmpnam */
|
||||||
|
char _emergency[_REENT_EMERGENCY_SIZE];
|
||||||
|
|
||||||
|
/* TODO */
|
||||||
|
int _unspecified_locale_info; /* unused, reserved for locale stuff */
|
||||||
|
struct __locale_t *_locale;/* per-thread locale */
|
||||||
|
|
||||||
|
int __sdidinit; /* 1 means stdio has been init'd */
|
||||||
|
|
||||||
|
void (*__cleanup) (struct _reent *);
|
||||||
|
|
||||||
|
/* used by mprec routines */
|
||||||
|
struct _Bigint *_result;
|
||||||
|
int _result_k;
|
||||||
|
struct _Bigint *_p5s;
|
||||||
|
struct _Bigint **_freelist;
|
||||||
|
|
||||||
|
/* used by some fp conversion routines */
|
||||||
|
int _cvtlen; /* should be size_t */
|
||||||
|
char *_cvtbuf;
|
||||||
|
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
unsigned int _unused_rand;
|
||||||
|
char * _strtok_last;
|
||||||
|
char _asctime_buf[_REENT_ASCTIME_SIZE];
|
||||||
|
struct __tm _localtime_buf;
|
||||||
|
int _gamma_signgam;
|
||||||
|
__extension__ unsigned long long _rand_next;
|
||||||
|
struct _rand48 _r48;
|
||||||
|
_mbstate_t _mblen_state;
|
||||||
|
_mbstate_t _mbtowc_state;
|
||||||
|
_mbstate_t _wctomb_state;
|
||||||
|
char _l64a_buf[8];
|
||||||
|
char _signal_buf[_REENT_SIGNAL_SIZE];
|
||||||
|
int _getdate_err;
|
||||||
|
_mbstate_t _mbrlen_state;
|
||||||
|
_mbstate_t _mbrtowc_state;
|
||||||
|
_mbstate_t _mbsrtowcs_state;
|
||||||
|
_mbstate_t _wcrtomb_state;
|
||||||
|
_mbstate_t _wcsrtombs_state;
|
||||||
|
int _h_errno;
|
||||||
|
} _reent;
|
||||||
|
/* Two next two fields were once used by malloc. They are no longer
|
||||||
|
used. They are used to preserve the space used before so as to
|
||||||
|
allow addition of new reent fields and keep binary compatibility. */
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
#define _N_LISTS 30
|
||||||
|
unsigned char * _nextf[_N_LISTS];
|
||||||
|
unsigned int _nmalloc[_N_LISTS];
|
||||||
|
} _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);
|
||||||
|
|
||||||
|
/* These are here last so that __FILE can grow without changing the offsets
|
||||||
|
of the above members (on the off chance that future binary compatibility
|
||||||
|
would be broken otherwise). */
|
||||||
|
struct _glue __sglue; /* root of glue chain */
|
||||||
|
# ifndef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
|
__FILE __sf[3]; /* first three file descriptors */
|
||||||
|
# endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef _REENT_GLOBAL_STDIO_STREAMS
|
||||||
|
extern __FILE __sf[3];
|
||||||
|
#define _REENT_STDIO_STREAM(var, index) &__sf[index]
|
||||||
|
#else
|
||||||
|
#define _REENT_STDIO_STREAM(var, index) &(var)->__sf[index]
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _REENT_INIT(var) \
|
||||||
|
{ 0, \
|
||||||
|
_REENT_STDIO_STREAM(&(var), 0), \
|
||||||
|
_REENT_STDIO_STREAM(&(var), 1), \
|
||||||
|
_REENT_STDIO_STREAM(&(var), 2), \
|
||||||
|
0, \
|
||||||
|
"", \
|
||||||
|
0, \
|
||||||
|
_NULL, \
|
||||||
|
0, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
0, \
|
||||||
|
_NULL, \
|
||||||
|
_NULL, \
|
||||||
|
0, \
|
||||||
|
_NULL, \
|
||||||
|
{ \
|
||||||
|
{ \
|
||||||
|
0, \
|
||||||
|
_NULL, \
|
||||||
|
"", \
|
||||||
|
{0, 0, 0, 0, 0, 0, 0, 0, 0}, \
|
||||||
|
0, \
|
||||||
|
1, \
|
||||||
|
{ \
|
||||||
|
{_RAND48_SEED_0, _RAND48_SEED_1, _RAND48_SEED_2}, \
|
||||||
|
{_RAND48_MULT_0, _RAND48_MULT_1, _RAND48_MULT_2}, \
|
||||||
|
_RAND48_ADD \
|
||||||
|
}, \
|
||||||
|
{0, {0}}, \
|
||||||
|
{0, {0}}, \
|
||||||
|
{0, {0}}, \
|
||||||
|
"", \
|
||||||
|
"", \
|
||||||
|
0, \
|
||||||
|
{0, {0}}, \
|
||||||
|
{0, {0}}, \
|
||||||
|
{0, {0}}, \
|
||||||
|
{0, {0}}, \
|
||||||
|
{0, {0}} \
|
||||||
|
} \
|
||||||
|
}, \
|
||||||
|
_REENT_INIT_ATEXIT \
|
||||||
|
_NULL, \
|
||||||
|
{_NULL, 0, _NULL} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _REENT_INIT_PTR_ZEROED(var) \
|
||||||
|
{ (var)->_stdin = _REENT_STDIO_STREAM(var, 0); \
|
||||||
|
(var)->_stdout = _REENT_STDIO_STREAM(var, 1); \
|
||||||
|
(var)->_stderr = _REENT_STDIO_STREAM(var, 2); \
|
||||||
|
(var)->_new._reent._rand_next = 1; \
|
||||||
|
(var)->_new._reent._r48._seed[0] = _RAND48_SEED_0; \
|
||||||
|
(var)->_new._reent._r48._seed[1] = _RAND48_SEED_1; \
|
||||||
|
(var)->_new._reent._r48._seed[2] = _RAND48_SEED_2; \
|
||||||
|
(var)->_new._reent._r48._mult[0] = _RAND48_MULT_0; \
|
||||||
|
(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; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _REENT_CHECK_RAND48(ptr) /* nothing */
|
||||||
|
#define _REENT_CHECK_MP(ptr) /* nothing */
|
||||||
|
#define _REENT_CHECK_TM(ptr) /* nothing */
|
||||||
|
#define _REENT_CHECK_ASCTIME_BUF(ptr) /* nothing */
|
||||||
|
#define _REENT_CHECK_EMERGENCY(ptr) /* nothing */
|
||||||
|
#define _REENT_CHECK_MISC(ptr) /* nothing */
|
||||||
|
#define _REENT_CHECK_SIGNAL_BUF(ptr) /* nothing */
|
||||||
|
|
||||||
|
#define _REENT_SIGNGAM(ptr) ((ptr)->_new._reent._gamma_signgam)
|
||||||
|
#define _REENT_RAND_NEXT(ptr) ((ptr)->_new._reent._rand_next)
|
||||||
|
#define _REENT_RAND48_SEED(ptr) ((ptr)->_new._reent._r48._seed)
|
||||||
|
#define _REENT_RAND48_MULT(ptr) ((ptr)->_new._reent._r48._mult)
|
||||||
|
#define _REENT_RAND48_ADD(ptr) ((ptr)->_new._reent._r48._add)
|
||||||
|
#define _REENT_MP_RESULT(ptr) ((ptr)->_result)
|
||||||
|
#define _REENT_MP_RESULT_K(ptr) ((ptr)->_result_k)
|
||||||
|
#define _REENT_MP_P5S(ptr) ((ptr)->_p5s)
|
||||||
|
#define _REENT_MP_FREELIST(ptr) ((ptr)->_freelist)
|
||||||
|
#define _REENT_ASCTIME_BUF(ptr) ((ptr)->_new._reent._asctime_buf)
|
||||||
|
#define _REENT_TM(ptr) (&(ptr)->_new._reent._localtime_buf)
|
||||||
|
#define _REENT_EMERGENCY(ptr) ((ptr)->_emergency)
|
||||||
|
#define _REENT_STRTOK_LAST(ptr) ((ptr)->_new._reent._strtok_last)
|
||||||
|
#define _REENT_MBLEN_STATE(ptr) ((ptr)->_new._reent._mblen_state)
|
||||||
|
#define _REENT_MBTOWC_STATE(ptr)((ptr)->_new._reent._mbtowc_state)
|
||||||
|
#define _REENT_WCTOMB_STATE(ptr)((ptr)->_new._reent._wctomb_state)
|
||||||
|
#define _REENT_MBRLEN_STATE(ptr)((ptr)->_new._reent._mbrlen_state)
|
||||||
|
#define _REENT_MBRTOWC_STATE(ptr)((ptr)->_new._reent._mbrtowc_state)
|
||||||
|
#define _REENT_MBSRTOWCS_STATE(ptr)((ptr)->_new._reent._mbsrtowcs_state)
|
||||||
|
#define _REENT_WCRTOMB_STATE(ptr)((ptr)->_new._reent._wcrtomb_state)
|
||||||
|
#define _REENT_WCSRTOMBS_STATE(ptr)((ptr)->_new._reent._wcsrtombs_state)
|
||||||
|
#define _REENT_L64A_BUF(ptr) ((ptr)->_new._reent._l64a_buf)
|
||||||
|
#define _REENT_SIGNAL_BUF(ptr) ((ptr)->_new._reent._signal_buf)
|
||||||
|
#define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_new._reent._getdate_err))
|
||||||
|
|
||||||
|
#endif /* !_REENT_SMALL */
|
||||||
|
|
||||||
|
#define _REENT_INIT_PTR(var) \
|
||||||
|
{ memset((var), 0, sizeof(*(var))); \
|
||||||
|
_REENT_INIT_PTR_ZEROED(var); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This value is used in stdlib/misc.c. reent/reent.c has to know it
|
||||||
|
as well to make sure the freelist is correctly free'd. Therefore
|
||||||
|
we define it here, rather than in stdlib/misc.c, as before. */
|
||||||
|
#define _Kmax (sizeof (size_t) << 3)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* All references to struct _reent are via this pointer.
|
||||||
|
* Internally, newlib routines that need to reference it should use _REENT.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ATTRIBUTE_IMPURE_PTR__
|
||||||
|
#define __ATTRIBUTE_IMPURE_PTR__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern struct _reent *_impure_ptr __ATTRIBUTE_IMPURE_PTR__;
|
||||||
|
extern struct _reent *const _global_impure_ptr __ATTRIBUTE_IMPURE_PTR__;
|
||||||
|
|
||||||
|
void _reclaim_reent (struct _reent *);
|
||||||
|
|
||||||
|
/* #define _REENT_ONLY define this to get only reentrant routines */
|
||||||
|
|
||||||
|
#if defined(__DYNAMIC_REENT__) && !defined(__SINGLE_THREAD__)
|
||||||
|
#ifndef __getreent
|
||||||
|
struct _reent * __getreent (void);
|
||||||
|
#endif
|
||||||
|
# define _REENT (__getreent())
|
||||||
|
#else /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */
|
||||||
|
# define _REENT _impure_ptr
|
||||||
|
#endif /* __SINGLE_THREAD__ || !__DYNAMIC_REENT__ */
|
||||||
|
|
||||||
|
#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
|
||||||
|
#endif /* _SYS_REENT_H_ */
|
|
@ -0,0 +1,69 @@
|
||||||
|
/*
|
||||||
|
* Written by Joel Sherrill <joel@OARcorp.com>.
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-2010.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose without fee is hereby granted, provided that this entire notice
|
||||||
|
* is included in all copies of any software which is or includes a copy
|
||||||
|
* or modification of this software.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION
|
||||||
|
* OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
|
||||||
|
* SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _SYS_SCHED_H_
|
||||||
|
#define _SYS_SCHED_H_
|
||||||
|
|
||||||
|
#include <sys/_timespec.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Scheduling Policies */
|
||||||
|
/* Open Group Specifications Issue 6 */
|
||||||
|
#if defined(__CYGWIN__)
|
||||||
|
#define SCHED_OTHER 3
|
||||||
|
#else
|
||||||
|
#define SCHED_OTHER 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define SCHED_FIFO 1
|
||||||
|
#define SCHED_RR 2
|
||||||
|
|
||||||
|
#if defined(_POSIX_SPORADIC_SERVER)
|
||||||
|
#define SCHED_SPORADIC 4
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Scheduling Parameters */
|
||||||
|
/* Open Group Specifications Issue 6 */
|
||||||
|
|
||||||
|
struct sched_param {
|
||||||
|
int sched_priority; /* Process execution scheduling priority */
|
||||||
|
|
||||||
|
#if defined(_POSIX_SPORADIC_SERVER) || defined(_POSIX_THREAD_SPORADIC_SERVER)
|
||||||
|
int sched_ss_low_priority; /* Low scheduling priority for sporadic */
|
||||||
|
/* server */
|
||||||
|
struct timespec sched_ss_repl_period;
|
||||||
|
/* Replenishment period for sporadic server */
|
||||||
|
struct timespec sched_ss_init_budget;
|
||||||
|
/* Initial budget for sporadic server */
|
||||||
|
int sched_ss_max_repl; /* Maximum pending replenishments for */
|
||||||
|
/* sporadic server */
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
/* end of include file */
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
#ifndef _SYS_SELECT_H
|
||||||
|
#define _SYS_SELECT_H
|
||||||
|
|
||||||
|
/* We don't define fd_set and friends if we are compiling POSIX
|
||||||
|
source, or if we have included (or may include as indicated
|
||||||
|
by __USE_W32_SOCKETS) the W32api winsock[2].h header which
|
||||||
|
defines Windows versions of them. Note that a program which
|
||||||
|
includes the W32api winsock[2].h header must know what it is doing;
|
||||||
|
it must not call the Cygwin select function.
|
||||||
|
*/
|
||||||
|
# if !(defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS))
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#include <sys/_sigset.h>
|
||||||
|
#include <sys/_timeval.h>
|
||||||
|
#include <sys/timespec.h>
|
||||||
|
|
||||||
|
#if !defined(_SIGSET_T_DECLARED)
|
||||||
|
#define _SIGSET_T_DECLARED
|
||||||
|
typedef __sigset_t sigset_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
# define _SYS_TYPES_FD_SET
|
||||||
|
/*
|
||||||
|
* Select uses bit masks of file descriptors in longs.
|
||||||
|
* These macros manipulate such bit fields (the filesystem macros use chars).
|
||||||
|
* FD_SETSIZE may be defined by the user, but the default here
|
||||||
|
* should be >= NOFILE (param.h).
|
||||||
|
*/
|
||||||
|
# ifndef FD_SETSIZE
|
||||||
|
# define FD_SETSIZE 64
|
||||||
|
# endif
|
||||||
|
|
||||||
|
typedef unsigned long fd_mask;
|
||||||
|
# define NFDBITS (sizeof (fd_mask) * 8) /* bits per mask */
|
||||||
|
# ifndef _howmany
|
||||||
|
# define _howmany(x,y) (((x)+((y)-1))/(y))
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* We use a macro for fd_set so that including Sockets.h afterwards
|
||||||
|
can work. */
|
||||||
|
typedef struct _types_fd_set {
|
||||||
|
fd_mask fds_bits[_howmany(FD_SETSIZE, NFDBITS)];
|
||||||
|
} _types_fd_set;
|
||||||
|
|
||||||
|
#define fd_set _types_fd_set
|
||||||
|
|
||||||
|
# define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS)))
|
||||||
|
# define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS)))
|
||||||
|
# define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS)))
|
||||||
|
# define FD_ZERO(p) (__extension__ (void)({ \
|
||||||
|
size_t __i; \
|
||||||
|
char *__tmp = (char *)p; \
|
||||||
|
for (__i = 0; __i < sizeof (*(p)); ++__i) \
|
||||||
|
*__tmp++ = 0; \
|
||||||
|
}))
|
||||||
|
|
||||||
|
#if !defined (__INSIDE_CYGWIN_NET__)
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
int select __P ((int __n, fd_set *__readfds, fd_set *__writefds,
|
||||||
|
fd_set *__exceptfds, struct timeval *__timeout));
|
||||||
|
#if __POSIX_VISIBLE >= 200112
|
||||||
|
int pselect __P ((int __n, fd_set *__readfds, fd_set *__writefds,
|
||||||
|
fd_set *__exceptfds, const struct timespec *__timeout,
|
||||||
|
const sigset_t *__set));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
#endif /* !__INSIDE_CYGWIN_NET__ */
|
||||||
|
|
||||||
|
#endif /* !(_WINSOCK_H || _WINSOCKAPI_ || __USE_W32_SOCKETS) */
|
||||||
|
|
||||||
|
#endif /* sys/select.h */
|
|
@ -0,0 +1,27 @@
|
||||||
|
#ifndef _NEWLIB_STDIO_H
|
||||||
|
#define _NEWLIB_STDIO_H
|
||||||
|
|
||||||
|
#include <sys/lock.h>
|
||||||
|
#include <sys/reent.h>
|
||||||
|
|
||||||
|
/* Internal locking macros, used to protect stdio functions. In the
|
||||||
|
general case, expand to nothing. Use __SSTR flag in FILE _flags to
|
||||||
|
detect if FILE is private to sprintf/sscanf class of functions; if
|
||||||
|
set then do nothing as lock is not initialised. */
|
||||||
|
#if !defined(_flockfile)
|
||||||
|
#ifndef __SINGLE_THREAD__
|
||||||
|
# define _flockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __lock_acquire_recursive((fp)->_lock))
|
||||||
|
#else
|
||||||
|
# define _flockfile(fp) ((void) 0)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(_funlockfile)
|
||||||
|
#ifndef __SINGLE_THREAD__
|
||||||
|
# define _funlockfile(fp) (((fp)->_flags & __SSTR) ? 0 : __lock_release_recursive((fp)->_lock))
|
||||||
|
#else
|
||||||
|
# define _funlockfile(fp) ((void) 0)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _NEWLIB_STDIO_H */
|
|
@ -0,0 +1,2 @@
|
||||||
|
/* This is a dummy <sys/string.h> used as a placeholder for
|
||||||
|
systems that need to have a special header file. */
|
|
@ -0,0 +1,63 @@
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1982, 1986, 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.
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* @(#)time.h 8.5 (Berkeley) 5/4/95
|
||||||
|
* from: FreeBSD: src/sys/sys/time.h,v 1.43 2000/03/20 14:09:05 phk Exp
|
||||||
|
* $FreeBSD$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS_TIMESPEC_H_
|
||||||
|
#define _SYS_TIMESPEC_H_
|
||||||
|
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#include <sys/_timespec.h>
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
#define TIMEVAL_TO_TIMESPEC(tv, ts) \
|
||||||
|
do { \
|
||||||
|
(ts)->tv_sec = (tv)->tv_sec; \
|
||||||
|
(ts)->tv_nsec = (tv)->tv_usec * 1000; \
|
||||||
|
} while (0)
|
||||||
|
#define TIMESPEC_TO_TIMEVAL(tv, ts) \
|
||||||
|
do { \
|
||||||
|
(tv)->tv_sec = (ts)->tv_sec; \
|
||||||
|
(tv)->tv_usec = (ts)->tv_nsec / 1000; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#endif /* __BSD_VISIBLE */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure defined by POSIX.1b to be like a itimerval, but with
|
||||||
|
* timespecs. Used in the timer_*() system calls.
|
||||||
|
*/
|
||||||
|
struct itimerspec {
|
||||||
|
struct timespec it_interval;
|
||||||
|
struct timespec it_value;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _SYS_TIMESPEC_H_ */
|
|
@ -0,0 +1,246 @@
|
||||||
|
/* unified sys/types.h:
|
||||||
|
start with sef's sysvi386 version.
|
||||||
|
merge go32 version -- a few ifdefs.
|
||||||
|
h8300hms, h8300xray, and sysvnecv70 disagree on the following types:
|
||||||
|
|
||||||
|
typedef int gid_t;
|
||||||
|
typedef int uid_t;
|
||||||
|
typedef int dev_t;
|
||||||
|
typedef int ino_t;
|
||||||
|
typedef int mode_t;
|
||||||
|
typedef int caddr_t;
|
||||||
|
|
||||||
|
however, these aren't "reasonable" values, the sysvi386 ones make far
|
||||||
|
more sense, and should work sufficiently well (in particular, h8300
|
||||||
|
doesn't have a stat, and the necv70 doesn't matter.) -- eichin
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SYS_TYPES_H
|
||||||
|
|
||||||
|
#include <_ansi.h>
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#include <machine/_types.h>
|
||||||
|
|
||||||
|
/* BSD types permitted by POSIX and always exposed as in Glibc. Only provided
|
||||||
|
for backward compatibility with BSD code. The uintN_t standard types should
|
||||||
|
be preferred in new code. */
|
||||||
|
#if ___int8_t_defined
|
||||||
|
typedef __uint8_t u_int8_t;
|
||||||
|
#endif
|
||||||
|
#if ___int16_t_defined
|
||||||
|
typedef __uint16_t u_int16_t;
|
||||||
|
#endif
|
||||||
|
#if ___int32_t_defined
|
||||||
|
typedef __uint32_t u_int32_t;
|
||||||
|
#endif
|
||||||
|
#if ___int64_t_defined
|
||||||
|
typedef __uint64_t u_int64_t;
|
||||||
|
#endif
|
||||||
|
typedef int register_t;
|
||||||
|
#define __BIT_TYPES_DEFINED__ 1
|
||||||
|
|
||||||
|
#if defined(__rtems__) || defined(__XMK__)
|
||||||
|
/*
|
||||||
|
* The following section is RTEMS specific and is needed to more
|
||||||
|
* closely match the types defined in the BSD sys/types.h.
|
||||||
|
* This is needed to let the RTEMS/BSD TCP/IP stack compile.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* deprecated */
|
||||||
|
#if ___int64_t_defined
|
||||||
|
typedef __uint64_t u_quad_t;
|
||||||
|
typedef __int64_t quad_t;
|
||||||
|
typedef quad_t * qaddr_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __rtems__ || __XMK__ */
|
||||||
|
|
||||||
|
#ifndef __need_inttypes
|
||||||
|
|
||||||
|
#define _SYS_TYPES_H
|
||||||
|
/* <stddef.h> must be before <sys/_types.h> for __size_t considerations */
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <sys/_types.h>
|
||||||
|
#include <sys/_stdint.h>
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
#include <machine/endian.h>
|
||||||
|
#include <sys/select.h>
|
||||||
|
# define physadr physadr_t
|
||||||
|
# define quad quad_t
|
||||||
|
|
||||||
|
#ifndef _IN_ADDR_T_DECLARED
|
||||||
|
typedef __uint32_t in_addr_t; /* base type for internet address */
|
||||||
|
#define _IN_ADDR_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _IN_PORT_T_DECLARED
|
||||||
|
typedef __uint16_t in_port_t;
|
||||||
|
#define _IN_PORT_T_DECLARED
|
||||||
|
#endif
|
||||||
|
#endif /* __BSD_VISIBLE */
|
||||||
|
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
#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
|
||||||
|
#endif /*__BSD_VISIBLE || __CYGWIN__ */
|
||||||
|
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
typedef unsigned short ushort; /* System V compatibility */
|
||||||
|
typedef unsigned int uint; /* System V compatibility */
|
||||||
|
typedef unsigned long ulong; /* System V compatibility */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _BLKCNT_T_DECLARED
|
||||||
|
typedef __blkcnt_t blkcnt_t;
|
||||||
|
#define _BLKCNT_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _BLKSIZE_T_DECLARED
|
||||||
|
typedef __blksize_t blksize_t;
|
||||||
|
#define _BLKSIZE_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__clock_t_defined) && !defined(_CLOCK_T_DECLARED)
|
||||||
|
typedef _CLOCK_T_ clock_t;
|
||||||
|
#define __clock_t_defined
|
||||||
|
#define _CLOCK_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__time_t_defined) && !defined(_TIME_T_DECLARED)
|
||||||
|
typedef _TIME_T_ time_t;
|
||||||
|
#define __time_t_defined
|
||||||
|
#define _TIME_T_DECLARED
|
||||||
|
#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 _FSBLKCNT_T_DECLARED /* for statvfs() */
|
||||||
|
typedef __fsblkcnt_t fsblkcnt_t;
|
||||||
|
typedef __fsfilcnt_t fsfilcnt_t;
|
||||||
|
#define _FSBLKCNT_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _ID_T_DECLARED
|
||||||
|
typedef __id_t id_t; /* can hold a uid_t or pid_t */
|
||||||
|
#define _ID_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _INO_T_DECLARED
|
||||||
|
typedef __ino_t ino_t; /* inode number */
|
||||||
|
#define _INO_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__i386__) && (defined(GO32) || defined(__MSDOS__))
|
||||||
|
typedef char * addr_t;
|
||||||
|
typedef unsigned long vm_offset_t;
|
||||||
|
typedef unsigned long vm_size_t;
|
||||||
|
#endif /* __i386__ && (GO32 || __MSDOS__) */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* All these should be machine specific - right now they are all broken.
|
||||||
|
* However, for all of Cygnus' embedded targets, we want them to all be
|
||||||
|
* the same. Otherwise things like sizeof (struct stat) might depend on
|
||||||
|
* how the file was compiled (e.g. -mint16 vs -mint32, etc.).
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _OFF_T_DECLARED
|
||||||
|
typedef __off_t off_t; /* file offset */
|
||||||
|
#define _OFF_T_DECLARED
|
||||||
|
#endif
|
||||||
|
#ifndef _DEV_T_DECLARED
|
||||||
|
typedef __dev_t dev_t; /* device number or struct cdev */
|
||||||
|
#define _DEV_T_DECLARED
|
||||||
|
#endif
|
||||||
|
#ifndef _UID_T_DECLARED
|
||||||
|
typedef __uid_t uid_t; /* user id */
|
||||||
|
#define _UID_T_DECLARED
|
||||||
|
#endif
|
||||||
|
#ifndef _GID_T_DECLARED
|
||||||
|
typedef __gid_t gid_t; /* group id */
|
||||||
|
#define _GID_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _PID_T_DECLARED
|
||||||
|
typedef __pid_t pid_t; /* process id */
|
||||||
|
#define _PID_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _KEY_T_DECLARED
|
||||||
|
typedef __key_t key_t; /* IPC key */
|
||||||
|
#define _KEY_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _SSIZE_T_DECLARED
|
||||||
|
typedef _ssize_t ssize_t;
|
||||||
|
#define _SSIZE_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _MODE_T_DECLARED
|
||||||
|
typedef __mode_t mode_t; /* permissions */
|
||||||
|
#define _MODE_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _NLINK_T_DECLARED
|
||||||
|
typedef __nlink_t nlink_t; /* link count */
|
||||||
|
#define _NLINK_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__clockid_t_defined) && !defined(_CLOCKID_T_DECLARED)
|
||||||
|
typedef __clockid_t clockid_t;
|
||||||
|
#define __clockid_t_defined
|
||||||
|
#define _CLOCKID_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__timer_t_defined) && !defined(_TIMER_T_DECLARED)
|
||||||
|
typedef __timer_t timer_t;
|
||||||
|
#define __timer_t_defined
|
||||||
|
#define _TIMER_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _USECONDS_T_DECLARED
|
||||||
|
typedef __useconds_t useconds_t; /* microseconds (unsigned) */
|
||||||
|
#define _USECONDS_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _SUSECONDS_T_DECLARED
|
||||||
|
typedef __suseconds_t suseconds_t;
|
||||||
|
#define _SUSECONDS_T_DECLARED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef __int64_t sbintime_t;
|
||||||
|
|
||||||
|
#include <sys/features.h>
|
||||||
|
#include <sys/_pthreadtypes.h>
|
||||||
|
#include <machine/types.h>
|
||||||
|
|
||||||
|
#endif /* !__need_inttypes */
|
||||||
|
|
||||||
|
#undef __need_inttypes
|
||||||
|
|
||||||
|
#endif /* _SYS_TYPES_H */
|
|
@ -0,0 +1,599 @@
|
||||||
|
#ifndef _SYS_UNISTD_H
|
||||||
|
#define _SYS_UNISTD_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <_ansi.h>
|
||||||
|
#define __need_size_t
|
||||||
|
#define __need_ptrdiff_t
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/_types.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
extern char **environ;
|
||||||
|
|
||||||
|
void _exit (int __status) _ATTRIBUTE ((__noreturn__));
|
||||||
|
|
||||||
|
int access (const char *__path, int __amode);
|
||||||
|
unsigned alarm (unsigned __secs);
|
||||||
|
int chdir (const char *__path);
|
||||||
|
int chmod (const char *__path, mode_t __mode);
|
||||||
|
#if !defined(__INSIDE_CYGWIN__)
|
||||||
|
int chown (const char *__path, uid_t __owner, gid_t __group);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112)
|
||||||
|
int chroot (const char *__path);
|
||||||
|
#endif
|
||||||
|
int close (int __fildes);
|
||||||
|
#if __POSIX_VISIBLE >= 199209
|
||||||
|
size_t confstr (int __name, char *__buf, size_t __len);
|
||||||
|
#endif
|
||||||
|
#if __XSI_VISIBLE
|
||||||
|
char * crypt (const char *__key, const char *__salt);
|
||||||
|
#endif
|
||||||
|
#if __XSI_VISIBLE && __XSI_VISIBLE < 700
|
||||||
|
char * ctermid (char *__s);
|
||||||
|
#endif
|
||||||
|
#if __XSI_VISIBLE && __XSI_VISIBLE < 600
|
||||||
|
char * cuserid (char *__s);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500)
|
||||||
|
int daemon (int nochdir, int noclose);
|
||||||
|
#endif
|
||||||
|
int dup (int __fildes);
|
||||||
|
int dup2 (int __fildes, int __fildes2);
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
int dup3 (int __fildes, int __fildes2, int flags);
|
||||||
|
int eaccess (const char *__path, int __mode);
|
||||||
|
#endif
|
||||||
|
#if __XSI_VISIBLE
|
||||||
|
void encrypt (char *__block, int __edflag);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500)
|
||||||
|
void endusershell (void);
|
||||||
|
#endif
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
int euidaccess (const char *__path, int __mode);
|
||||||
|
#endif
|
||||||
|
int execl (const char *__path, const char *, ...);
|
||||||
|
int execle (const char *__path, const char *, ...);
|
||||||
|
int execlp (const char *__file, const char *, ...);
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
int execlpe (const char *__file, const char *, ...);
|
||||||
|
#endif
|
||||||
|
int execv (const char *__path, char * const __argv[]);
|
||||||
|
int execve (const char *__path, char * const __argv[], char * const __envp[]);
|
||||||
|
int execvp (const char *__file, char * const __argv[]);
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
int execvpe (const char *__file, char * const __argv[], char * const __envp[]);
|
||||||
|
#endif
|
||||||
|
#if __ATFILE_VISIBLE
|
||||||
|
int faccessat (int __dirfd, const char *__path, int __mode, int __flags);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809
|
||||||
|
int fchdir (int __fildes);
|
||||||
|
#endif
|
||||||
|
#if __POSIX_VISIBLE >= 199309
|
||||||
|
int fchmod (int __fildes, mode_t __mode);
|
||||||
|
#endif
|
||||||
|
#if !defined(__INSIDE_CYGWIN__)
|
||||||
|
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809
|
||||||
|
int fchown (int __fildes, uid_t __owner, gid_t __group);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#if __ATFILE_VISIBLE
|
||||||
|
int fchownat (int __dirfd, const char *__path, uid_t __owner, gid_t __group, int __flags);
|
||||||
|
#endif
|
||||||
|
#if __POSIX_VISIBLE >= 200809
|
||||||
|
int fexecve (int __fd, char * const __argv[], char * const __envp[]);
|
||||||
|
#endif
|
||||||
|
pid_t fork (void);
|
||||||
|
long fpathconf (int __fd, int __name);
|
||||||
|
int fsync (int __fd);
|
||||||
|
#if __POSIX_VISIBLE >= 199309
|
||||||
|
int fdatasync (int __fd);
|
||||||
|
#endif
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
char * get_current_dir_name (void);
|
||||||
|
#endif
|
||||||
|
char * getcwd (char *__buf, size_t __size);
|
||||||
|
#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500)
|
||||||
|
int getdomainname (char *__name, size_t __len);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
int getentropy (void *, size_t);
|
||||||
|
#endif
|
||||||
|
#if !defined(__INSIDE_CYGWIN__)
|
||||||
|
gid_t getegid (void);
|
||||||
|
uid_t geteuid (void);
|
||||||
|
gid_t getgid (void);
|
||||||
|
#endif
|
||||||
|
int getgroups (int __gidsetsize, gid_t __grouplist[]);
|
||||||
|
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4
|
||||||
|
long gethostid (void);
|
||||||
|
#endif
|
||||||
|
char * getlogin (void);
|
||||||
|
#if defined(_POSIX_THREAD_SAFE_FUNCTIONS)
|
||||||
|
int getlogin_r (char *name, size_t namesize) ;
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || (__XSI_VISIBLE && __POSIX_VISIBLE < 200112)
|
||||||
|
char * getpass (const char *__prompt);
|
||||||
|
int getpagesize (void);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
int getpeereid (int, uid_t *, gid_t *);
|
||||||
|
#endif
|
||||||
|
#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 4
|
||||||
|
pid_t getpgid (pid_t);
|
||||||
|
#endif
|
||||||
|
pid_t getpgrp (void);
|
||||||
|
pid_t getpid (void);
|
||||||
|
pid_t getppid (void);
|
||||||
|
#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 4
|
||||||
|
pid_t getsid (pid_t);
|
||||||
|
#endif
|
||||||
|
#if !defined(__INSIDE_CYGWIN__)
|
||||||
|
uid_t getuid (void);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500)
|
||||||
|
char * getusershell (void);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200809)
|
||||||
|
char * getwd (char *__buf);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
int iruserok (unsigned long raddr, int superuser, const char *ruser, const char *luser);
|
||||||
|
#endif
|
||||||
|
int isatty (int __fildes);
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
int issetugid (void);
|
||||||
|
#endif
|
||||||
|
#if !defined(__INSIDE_CYGWIN__)
|
||||||
|
#if __BSD_VISIBLE || __XSI_VISIBLE >= 4 || __POSIX_VISIBLE >= 200809
|
||||||
|
int lchown (const char *__path, uid_t __owner, gid_t __group);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
int link (const char *__path1, const char *__path2);
|
||||||
|
#if __ATFILE_VISIBLE
|
||||||
|
int linkat (int __dirfd1, const char *__path1, int __dirfd2, const char *__path2, int __flags);
|
||||||
|
#endif
|
||||||
|
#if __MISC_VISIBLE || __XSI_VISIBLE
|
||||||
|
int nice (int __nice_value);
|
||||||
|
#endif
|
||||||
|
#if !defined(__INSIDE_CYGWIN__)
|
||||||
|
off_t lseek (int __fildes, off_t __offset, int __whence);
|
||||||
|
#endif
|
||||||
|
#if __MISC_VISIBLE || __XSI_VISIBLE >= 4
|
||||||
|
#define F_ULOCK 0
|
||||||
|
#define F_LOCK 1
|
||||||
|
#define F_TLOCK 2
|
||||||
|
#define F_TEST 3
|
||||||
|
int lockf (int __fd, int __cmd, off_t __len);
|
||||||
|
#endif
|
||||||
|
long pathconf (const char *__path, int __name);
|
||||||
|
int pause (void);
|
||||||
|
#if __POSIX_VISIBLE >= 199506
|
||||||
|
int pthread_atfork (void (*)(void), void (*)(void), void (*)(void));
|
||||||
|
#endif
|
||||||
|
int pipe (int __fildes[2]);
|
||||||
|
#if __GNU_VISIBLE
|
||||||
|
int pipe2 (int __fildes[2], int flags);
|
||||||
|
#endif
|
||||||
|
#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 500
|
||||||
|
ssize_t pread (int __fd, void *__buf, size_t __nbytes, off_t __offset);
|
||||||
|
ssize_t pwrite (int __fd, const void *__buf, size_t __nbytes, off_t __offset);
|
||||||
|
#endif
|
||||||
|
_READ_WRITE_RETURN_TYPE read (int __fd, void *__buf, size_t __nbyte);
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
int rresvport (int *__alport);
|
||||||
|
int revoke (char *__path);
|
||||||
|
#endif
|
||||||
|
int rmdir (const char *__path);
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
int ruserok (const char *rhost, int superuser, const char *ruser, const char *luser);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200112)
|
||||||
|
void * sbrk (ptrdiff_t __incr);
|
||||||
|
#endif
|
||||||
|
#if !defined(__INSIDE_CYGWIN__)
|
||||||
|
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112
|
||||||
|
int setegid (gid_t __gid);
|
||||||
|
int seteuid (uid_t __uid);
|
||||||
|
#endif
|
||||||
|
int setgid (gid_t __gid);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
int setgroups (int ngroups, const gid_t *grouplist);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500)
|
||||||
|
int sethostname (const char *, size_t);
|
||||||
|
#endif
|
||||||
|
int setpgid (pid_t __pid, pid_t __pgid);
|
||||||
|
#if __SVID_VISIBLE || __XSI_VISIBLE >= 500
|
||||||
|
int setpgrp (void);
|
||||||
|
#endif
|
||||||
|
#if (__BSD_VISIBLE || __XSI_VISIBLE >= 4) && !defined(__INSIDE_CYGWIN__)
|
||||||
|
int setregid (gid_t __rgid, gid_t __egid);
|
||||||
|
int setreuid (uid_t __ruid, uid_t __euid);
|
||||||
|
#endif
|
||||||
|
pid_t setsid (void);
|
||||||
|
#if !defined(__INSIDE_CYGWIN__)
|
||||||
|
int setuid (uid_t __uid);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || (__XSI_VISIBLE && __XSI_VISIBLE < 500)
|
||||||
|
void setusershell (void);
|
||||||
|
#endif
|
||||||
|
unsigned sleep (unsigned int __seconds);
|
||||||
|
#if __XSI_VISIBLE
|
||||||
|
void swab (const void *__restrict, void *__restrict, ssize_t);
|
||||||
|
#endif
|
||||||
|
long sysconf (int __name);
|
||||||
|
pid_t tcgetpgrp (int __fildes);
|
||||||
|
int tcsetpgrp (int __fildes, pid_t __pgrp_id);
|
||||||
|
char * ttyname (int __fildes);
|
||||||
|
int ttyname_r (int, char *, size_t);
|
||||||
|
int unlink (const char *__path);
|
||||||
|
#if __XSI_VISIBLE >= 500 && __POSIX_VISIBLE < 200809 || __BSD_VISIBLE
|
||||||
|
int usleep (useconds_t __useconds);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE
|
||||||
|
int vhangup (void);
|
||||||
|
#endif
|
||||||
|
_READ_WRITE_RETURN_TYPE write (int __fd, const void *__buf, size_t __nbyte);
|
||||||
|
|
||||||
|
#ifdef __CYGWIN__
|
||||||
|
# define __UNISTD_GETOPT__
|
||||||
|
# include <getopt.h>
|
||||||
|
# undef __UNISTD_GETOPT__
|
||||||
|
#else
|
||||||
|
extern char *optarg; /* getopt(3) external variables */
|
||||||
|
extern int optind, opterr, optopt;
|
||||||
|
int getopt(int, char * const [], const char *);
|
||||||
|
extern int optreset; /* getopt(3) external variable */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE || (__XSI_VISIBLE >= 4 && __POSIX_VISIBLE < 200809)
|
||||||
|
pid_t vfork (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _COMPILING_NEWLIB
|
||||||
|
/* Provide prototypes for most of the _<systemcall> names that are
|
||||||
|
provided in newlib for some compilers. */
|
||||||
|
int _close (int __fildes);
|
||||||
|
pid_t _fork (void);
|
||||||
|
pid_t _getpid (void);
|
||||||
|
int _isatty (int __fildes);
|
||||||
|
int _link (const char *__path1, const char *__path2);
|
||||||
|
_off_t _lseek (int __fildes, _off_t __offset, int __whence);
|
||||||
|
#ifdef __LARGE64_FILES
|
||||||
|
_off64_t _lseek64 (int __filedes, _off64_t __offset, int __whence);
|
||||||
|
#endif
|
||||||
|
_READ_WRITE_RETURN_TYPE _read (int __fd, void *__buf, size_t __nbyte);
|
||||||
|
void * _sbrk (ptrdiff_t __incr);
|
||||||
|
int _unlink (const char *__path);
|
||||||
|
_READ_WRITE_RETURN_TYPE _write (int __fd, const void *__buf, size_t __nbyte);
|
||||||
|
int _execve (const char *__path, char * const __argv[], char * const __envp[]);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__INSIDE_CYGWIN__)
|
||||||
|
#if __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 500
|
||||||
|
int ftruncate (int __fd, off_t __length);
|
||||||
|
#endif
|
||||||
|
#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 500
|
||||||
|
int truncate (const char *, off_t __length);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE || __POSIX_VISIBLE < 200112
|
||||||
|
int getdtablesize (void);
|
||||||
|
#endif
|
||||||
|
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 500
|
||||||
|
useconds_t ualarm (useconds_t __useconds, useconds_t __interval);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 500
|
||||||
|
#if !(defined (_WINSOCK_H) || defined (_WINSOCKAPI_) || defined (__USE_W32_SOCKETS))
|
||||||
|
/* winsock[2].h defines as __stdcall, and with int as 2nd arg */
|
||||||
|
int gethostname (char *__name, size_t __len);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __MISC_VISIBLE
|
||||||
|
int setdtablesize (int);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE || __XSI_VISIBLE >= 500
|
||||||
|
void sync (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200112 || __XSI_VISIBLE >= 4
|
||||||
|
ssize_t readlink (const char *__restrict __path,
|
||||||
|
char *__restrict __buf, size_t __buflen);
|
||||||
|
int symlink (const char *__name1, const char *__name2);
|
||||||
|
#endif
|
||||||
|
#if __ATFILE_VISIBLE
|
||||||
|
ssize_t readlinkat (int __dirfd1, const char *__restrict __path,
|
||||||
|
char *__restrict __buf, size_t __buflen);
|
||||||
|
int symlinkat (const char *, int, const char *);
|
||||||
|
int unlinkat (int, const char *, int);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define F_OK 0
|
||||||
|
#define R_OK 4
|
||||||
|
#define W_OK 2
|
||||||
|
#define X_OK 1
|
||||||
|
|
||||||
|
# define SEEK_SET 0
|
||||||
|
# define SEEK_CUR 1
|
||||||
|
# define SEEK_END 2
|
||||||
|
|
||||||
|
#include <sys/features.h>
|
||||||
|
|
||||||
|
#define STDIN_FILENO 0 /* standard input file descriptor */
|
||||||
|
#define STDOUT_FILENO 1 /* standard output file descriptor */
|
||||||
|
#define STDERR_FILENO 2 /* standard error file descriptor */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* sysconf values per IEEE Std 1003.1, 2008 Edition
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _SC_ARG_MAX 0
|
||||||
|
#define _SC_CHILD_MAX 1
|
||||||
|
#define _SC_CLK_TCK 2
|
||||||
|
#define _SC_NGROUPS_MAX 3
|
||||||
|
#define _SC_OPEN_MAX 4
|
||||||
|
#define _SC_JOB_CONTROL 5
|
||||||
|
#define _SC_SAVED_IDS 6
|
||||||
|
#define _SC_VERSION 7
|
||||||
|
#define _SC_PAGESIZE 8
|
||||||
|
#define _SC_PAGE_SIZE _SC_PAGESIZE
|
||||||
|
/* These are non-POSIX values we accidentally introduced in 2000 without
|
||||||
|
guarding them. Keeping them unguarded for backward compatibility. */
|
||||||
|
#define _SC_NPROCESSORS_CONF 9
|
||||||
|
#define _SC_NPROCESSORS_ONLN 10
|
||||||
|
#define _SC_PHYS_PAGES 11
|
||||||
|
#define _SC_AVPHYS_PAGES 12
|
||||||
|
/* End of non-POSIX values. */
|
||||||
|
#define _SC_MQ_OPEN_MAX 13
|
||||||
|
#define _SC_MQ_PRIO_MAX 14
|
||||||
|
#define _SC_RTSIG_MAX 15
|
||||||
|
#define _SC_SEM_NSEMS_MAX 16
|
||||||
|
#define _SC_SEM_VALUE_MAX 17
|
||||||
|
#define _SC_SIGQUEUE_MAX 18
|
||||||
|
#define _SC_TIMER_MAX 19
|
||||||
|
#define _SC_TZNAME_MAX 20
|
||||||
|
#define _SC_ASYNCHRONOUS_IO 21
|
||||||
|
#define _SC_FSYNC 22
|
||||||
|
#define _SC_MAPPED_FILES 23
|
||||||
|
#define _SC_MEMLOCK 24
|
||||||
|
#define _SC_MEMLOCK_RANGE 25
|
||||||
|
#define _SC_MEMORY_PROTECTION 26
|
||||||
|
#define _SC_MESSAGE_PASSING 27
|
||||||
|
#define _SC_PRIORITIZED_IO 28
|
||||||
|
#define _SC_REALTIME_SIGNALS 29
|
||||||
|
#define _SC_SEMAPHORES 30
|
||||||
|
#define _SC_SHARED_MEMORY_OBJECTS 31
|
||||||
|
#define _SC_SYNCHRONIZED_IO 32
|
||||||
|
#define _SC_TIMERS 33
|
||||||
|
#define _SC_AIO_LISTIO_MAX 34
|
||||||
|
#define _SC_AIO_MAX 35
|
||||||
|
#define _SC_AIO_PRIO_DELTA_MAX 36
|
||||||
|
#define _SC_DELAYTIMER_MAX 37
|
||||||
|
#define _SC_THREAD_KEYS_MAX 38
|
||||||
|
#define _SC_THREAD_STACK_MIN 39
|
||||||
|
#define _SC_THREAD_THREADS_MAX 40
|
||||||
|
#define _SC_TTY_NAME_MAX 41
|
||||||
|
#define _SC_THREADS 42
|
||||||
|
#define _SC_THREAD_ATTR_STACKADDR 43
|
||||||
|
#define _SC_THREAD_ATTR_STACKSIZE 44
|
||||||
|
#define _SC_THREAD_PRIORITY_SCHEDULING 45
|
||||||
|
#define _SC_THREAD_PRIO_INHERIT 46
|
||||||
|
/* _SC_THREAD_PRIO_PROTECT was _SC_THREAD_PRIO_CEILING in early drafts */
|
||||||
|
#define _SC_THREAD_PRIO_PROTECT 47
|
||||||
|
#define _SC_THREAD_PRIO_CEILING _SC_THREAD_PRIO_PROTECT
|
||||||
|
#define _SC_THREAD_PROCESS_SHARED 48
|
||||||
|
#define _SC_THREAD_SAFE_FUNCTIONS 49
|
||||||
|
#define _SC_GETGR_R_SIZE_MAX 50
|
||||||
|
#define _SC_GETPW_R_SIZE_MAX 51
|
||||||
|
#define _SC_LOGIN_NAME_MAX 52
|
||||||
|
#define _SC_THREAD_DESTRUCTOR_ITERATIONS 53
|
||||||
|
#define _SC_ADVISORY_INFO 54
|
||||||
|
#define _SC_ATEXIT_MAX 55
|
||||||
|
#define _SC_BARRIERS 56
|
||||||
|
#define _SC_BC_BASE_MAX 57
|
||||||
|
#define _SC_BC_DIM_MAX 58
|
||||||
|
#define _SC_BC_SCALE_MAX 59
|
||||||
|
#define _SC_BC_STRING_MAX 60
|
||||||
|
#define _SC_CLOCK_SELECTION 61
|
||||||
|
#define _SC_COLL_WEIGHTS_MAX 62
|
||||||
|
#define _SC_CPUTIME 63
|
||||||
|
#define _SC_EXPR_NEST_MAX 64
|
||||||
|
#define _SC_HOST_NAME_MAX 65
|
||||||
|
#define _SC_IOV_MAX 66
|
||||||
|
#define _SC_IPV6 67
|
||||||
|
#define _SC_LINE_MAX 68
|
||||||
|
#define _SC_MONOTONIC_CLOCK 69
|
||||||
|
#define _SC_RAW_SOCKETS 70
|
||||||
|
#define _SC_READER_WRITER_LOCKS 71
|
||||||
|
#define _SC_REGEXP 72
|
||||||
|
#define _SC_RE_DUP_MAX 73
|
||||||
|
#define _SC_SHELL 74
|
||||||
|
#define _SC_SPAWN 75
|
||||||
|
#define _SC_SPIN_LOCKS 76
|
||||||
|
#define _SC_SPORADIC_SERVER 77
|
||||||
|
#define _SC_SS_REPL_MAX 78
|
||||||
|
#define _SC_SYMLOOP_MAX 79
|
||||||
|
#define _SC_THREAD_CPUTIME 80
|
||||||
|
#define _SC_THREAD_SPORADIC_SERVER 81
|
||||||
|
#define _SC_TIMEOUTS 82
|
||||||
|
#define _SC_TRACE 83
|
||||||
|
#define _SC_TRACE_EVENT_FILTER 84
|
||||||
|
#define _SC_TRACE_EVENT_NAME_MAX 85
|
||||||
|
#define _SC_TRACE_INHERIT 86
|
||||||
|
#define _SC_TRACE_LOG 87
|
||||||
|
#define _SC_TRACE_NAME_MAX 88
|
||||||
|
#define _SC_TRACE_SYS_MAX 89
|
||||||
|
#define _SC_TRACE_USER_EVENT_MAX 90
|
||||||
|
#define _SC_TYPED_MEMORY_OBJECTS 91
|
||||||
|
#define _SC_V7_ILP32_OFF32 92
|
||||||
|
#define _SC_V6_ILP32_OFF32 _SC_V7_ILP32_OFF32
|
||||||
|
#define _SC_XBS5_ILP32_OFF32 _SC_V7_ILP32_OFF32
|
||||||
|
#define _SC_V7_ILP32_OFFBIG 93
|
||||||
|
#define _SC_V6_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
|
||||||
|
#define _SC_XBS5_ILP32_OFFBIG _SC_V7_ILP32_OFFBIG
|
||||||
|
#define _SC_V7_LP64_OFF64 94
|
||||||
|
#define _SC_V6_LP64_OFF64 _SC_V7_LP64_OFF64
|
||||||
|
#define _SC_XBS5_LP64_OFF64 _SC_V7_LP64_OFF64
|
||||||
|
#define _SC_V7_LPBIG_OFFBIG 95
|
||||||
|
#define _SC_V6_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
|
||||||
|
#define _SC_XBS5_LPBIG_OFFBIG _SC_V7_LPBIG_OFFBIG
|
||||||
|
#define _SC_XOPEN_CRYPT 96
|
||||||
|
#define _SC_XOPEN_ENH_I18N 97
|
||||||
|
#define _SC_XOPEN_LEGACY 98
|
||||||
|
#define _SC_XOPEN_REALTIME 99
|
||||||
|
#define _SC_STREAM_MAX 100
|
||||||
|
#define _SC_PRIORITY_SCHEDULING 101
|
||||||
|
#define _SC_XOPEN_REALTIME_THREADS 102
|
||||||
|
#define _SC_XOPEN_SHM 103
|
||||||
|
#define _SC_XOPEN_STREAMS 104
|
||||||
|
#define _SC_XOPEN_UNIX 105
|
||||||
|
#define _SC_XOPEN_VERSION 106
|
||||||
|
#define _SC_2_CHAR_TERM 107
|
||||||
|
#define _SC_2_C_BIND 108
|
||||||
|
#define _SC_2_C_DEV 109
|
||||||
|
#define _SC_2_FORT_DEV 110
|
||||||
|
#define _SC_2_FORT_RUN 111
|
||||||
|
#define _SC_2_LOCALEDEF 112
|
||||||
|
#define _SC_2_PBS 113
|
||||||
|
#define _SC_2_PBS_ACCOUNTING 114
|
||||||
|
#define _SC_2_PBS_CHECKPOINT 115
|
||||||
|
#define _SC_2_PBS_LOCATE 116
|
||||||
|
#define _SC_2_PBS_MESSAGE 117
|
||||||
|
#define _SC_2_PBS_TRACK 118
|
||||||
|
#define _SC_2_SW_DEV 119
|
||||||
|
#define _SC_2_UPE 120
|
||||||
|
#define _SC_2_VERSION 121
|
||||||
|
#define _SC_THREAD_ROBUST_PRIO_INHERIT 122
|
||||||
|
#define _SC_THREAD_ROBUST_PRIO_PROTECT 123
|
||||||
|
#define _SC_XOPEN_UUCP 124
|
||||||
|
#define _SC_LEVEL1_ICACHE_SIZE 125
|
||||||
|
#define _SC_LEVEL1_ICACHE_ASSOC 126
|
||||||
|
#define _SC_LEVEL1_ICACHE_LINESIZE 127
|
||||||
|
#define _SC_LEVEL1_DCACHE_SIZE 128
|
||||||
|
#define _SC_LEVEL1_DCACHE_ASSOC 129
|
||||||
|
#define _SC_LEVEL1_DCACHE_LINESIZE 130
|
||||||
|
#define _SC_LEVEL2_CACHE_SIZE 131
|
||||||
|
#define _SC_LEVEL2_CACHE_ASSOC 132
|
||||||
|
#define _SC_LEVEL2_CACHE_LINESIZE 133
|
||||||
|
#define _SC_LEVEL3_CACHE_SIZE 134
|
||||||
|
#define _SC_LEVEL3_CACHE_ASSOC 135
|
||||||
|
#define _SC_LEVEL3_CACHE_LINESIZE 136
|
||||||
|
#define _SC_LEVEL4_CACHE_SIZE 137
|
||||||
|
#define _SC_LEVEL4_CACHE_ASSOC 138
|
||||||
|
#define _SC_LEVEL4_CACHE_LINESIZE 139
|
||||||
|
#define _SC_POSIX_26_VERSION 140
|
||||||
|
|
||||||
|
/*
|
||||||
|
* pathconf values per IEEE Std 1003.1, 2008 Edition
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define _PC_LINK_MAX 0
|
||||||
|
#define _PC_MAX_CANON 1
|
||||||
|
#define _PC_MAX_INPUT 2
|
||||||
|
#define _PC_NAME_MAX 3
|
||||||
|
#define _PC_PATH_MAX 4
|
||||||
|
#define _PC_PIPE_BUF 5
|
||||||
|
#define _PC_CHOWN_RESTRICTED 6
|
||||||
|
#define _PC_NO_TRUNC 7
|
||||||
|
#define _PC_VDISABLE 8
|
||||||
|
#define _PC_ASYNC_IO 9
|
||||||
|
#define _PC_PRIO_IO 10
|
||||||
|
#define _PC_SYNC_IO 11
|
||||||
|
#define _PC_FILESIZEBITS 12
|
||||||
|
#define _PC_2_SYMLINKS 13
|
||||||
|
#define _PC_SYMLINK_MAX 14
|
||||||
|
#define _PC_ALLOC_SIZE_MIN 15
|
||||||
|
#define _PC_REC_INCR_XFER_SIZE 16
|
||||||
|
#define _PC_REC_MAX_XFER_SIZE 17
|
||||||
|
#define _PC_REC_MIN_XFER_SIZE 18
|
||||||
|
#define _PC_REC_XFER_ALIGN 19
|
||||||
|
#define _PC_TIMESTAMP_RESOLUTION 20
|
||||||
|
#ifdef __CYGWIN__
|
||||||
|
/* Ask for POSIX permission bits support. */
|
||||||
|
#define _PC_POSIX_PERMISSIONS 90
|
||||||
|
/* Ask for full POSIX permission support including uid/gid settings. */
|
||||||
|
#define _PC_POSIX_SECURITY 91
|
||||||
|
#define _PC_CASE_INSENSITIVE 92
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* confstr values per IEEE Std 1003.1, 2004 Edition
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __CYGWIN__ /* Only defined on Cygwin for now. */
|
||||||
|
#define _CS_PATH 0
|
||||||
|
#define _CS_POSIX_V7_ILP32_OFF32_CFLAGS 1
|
||||||
|
#define _CS_POSIX_V6_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
|
||||||
|
#define _CS_XBS5_ILP32_OFF32_CFLAGS _CS_POSIX_V7_ILP32_OFF32_CFLAGS
|
||||||
|
#define _CS_POSIX_V7_ILP32_OFF32_LDFLAGS 2
|
||||||
|
#define _CS_POSIX_V6_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
|
||||||
|
#define _CS_XBS5_ILP32_OFF32_LDFLAGS _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
|
||||||
|
#define _CS_POSIX_V7_ILP32_OFF32_LIBS 3
|
||||||
|
#define _CS_POSIX_V6_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
|
||||||
|
#define _CS_XBS5_ILP32_OFF32_LIBS _CS_POSIX_V7_ILP32_OFF32_LIBS
|
||||||
|
#define _CS_XBS5_ILP32_OFF32_LINTFLAGS 4
|
||||||
|
#define _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS 5
|
||||||
|
#define _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
|
||||||
|
#define _CS_XBS5_ILP32_OFFBIG_CFLAGS _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
|
||||||
|
#define _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS 6
|
||||||
|
#define _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
|
||||||
|
#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
|
||||||
|
#define _CS_POSIX_V7_ILP32_OFFBIG_LIBS 7
|
||||||
|
#define _CS_POSIX_V6_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
|
||||||
|
#define _CS_XBS5_ILP32_OFFBIG_LIBS _CS_POSIX_V7_ILP32_OFFBIG_LIBS
|
||||||
|
#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS 8
|
||||||
|
#define _CS_POSIX_V7_LP64_OFF64_CFLAGS 9
|
||||||
|
#define _CS_POSIX_V6_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
|
||||||
|
#define _CS_XBS5_LP64_OFF64_CFLAGS _CS_POSIX_V7_LP64_OFF64_CFLAGS
|
||||||
|
#define _CS_POSIX_V7_LP64_OFF64_LDFLAGS 10
|
||||||
|
#define _CS_POSIX_V6_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
|
||||||
|
#define _CS_XBS5_LP64_OFF64_LDFLAGS _CS_POSIX_V7_LP64_OFF64_LDFLAGS
|
||||||
|
#define _CS_POSIX_V7_LP64_OFF64_LIBS 11
|
||||||
|
#define _CS_POSIX_V6_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
|
||||||
|
#define _CS_XBS5_LP64_OFF64_LIBS _CS_POSIX_V7_LP64_OFF64_LIBS
|
||||||
|
#define _CS_XBS5_LP64_OFF64_LINTFLAGS 12
|
||||||
|
#define _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS 13
|
||||||
|
#define _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
|
||||||
|
#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
|
||||||
|
#define _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS 14
|
||||||
|
#define _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
|
||||||
|
#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
|
||||||
|
#define _CS_POSIX_V7_LPBIG_OFFBIG_LIBS 15
|
||||||
|
#define _CS_POSIX_V6_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
|
||||||
|
#define _CS_XBS5_LPBIG_OFFBIG_LIBS _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
|
||||||
|
#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS 16
|
||||||
|
#define _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS 17
|
||||||
|
#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
|
||||||
|
#define _CS_XBS5_WIDTH_RESTRICTED_ENVS _CS_POSIX_V7_WIDTH_RESTRICTED_ENVS
|
||||||
|
#define _CS_POSIX_V7_THREADS_CFLAGS 18
|
||||||
|
#define _CS_POSIX_V7_THREADS_LDFLAGS 19
|
||||||
|
#define _CS_V7_ENV 20
|
||||||
|
#define _CS_V6_ENV _CS_V7_ENV
|
||||||
|
#define _CS_LFS_CFLAGS 21
|
||||||
|
#define _CS_LFS_LDFLAGS 22
|
||||||
|
#define _CS_LFS_LIBS 23
|
||||||
|
#define _CS_LFS_LINTFLAGS 24
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if __SSP_FORTIFY_LEVEL > 0
|
||||||
|
#include <ssp/unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _SYS_UNISTD_H */
|
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef _UNISTD_H_
|
||||||
|
#define _UNISTD_H_
|
||||||
|
|
||||||
|
# include <sys/unistd.h>
|
||||||
|
|
||||||
|
#endif /* _UNISTD_H_ */
|
|
@ -0,0 +1,12 @@
|
||||||
|
/* Definition of opaque POSIX-1.2008 type locale_t for userspace. */
|
||||||
|
|
||||||
|
#ifndef _XLOCALE_H
|
||||||
|
#define _XLOCALE_H
|
||||||
|
|
||||||
|
#include <newlib.h>
|
||||||
|
#include <sys/config.h>
|
||||||
|
|
||||||
|
struct __locale_t;
|
||||||
|
typedef struct __locale_t *locale_t;
|
||||||
|
|
||||||
|
#endif /* _XLOCALE_H */
|
Loading…
Reference in New Issue