From 0c6aaa1aed5f619af2bfd65ad2c99799fc45edcb Mon Sep 17 00:00:00 2001 From: slinky55 Date: Wed, 15 Jul 2026 08:32:24 -0500 Subject: [PATCH] deleted some files --- sysroot/usr/fonts/cp850-8x16.psf | Bin 0 -> 4100 bytes sysroot/usr/include/assert.h | 50 - sysroot/usr/include/ctype.h | 110 --- sysroot/usr/include/errno.h | 202 ---- sysroot/usr/include/fcntl.h | 19 - sysroot/usr/include/float.h | 82 -- sysroot/usr/include/inttypes.h | 368 ------- sysroot/usr/include/iso646.h | 31 - sysroot/usr/include/limits.h | 50 - sysroot/usr/include/locale.h | 114 --- sysroot/usr/include/math.h | 467 --------- sysroot/usr/include/pdclib/_PDCLIB_config.h | 915 ----------------- sysroot/usr/include/pdclib/_PDCLIB_defguard.h | 29 - sysroot/usr/include/pdclib/_PDCLIB_glue.h | 93 -- sysroot/usr/include/pdclib/_PDCLIB_internal.h | 686 ------------- sysroot/usr/include/pdclib/_PDCLIB_lib_ext1.h | 32 - .../include/pdclib/_PDCLIB_platform_errno.h | 6 - .../include/pdclib/_PDCLIB_platform_fcntl.h | 6 - sysroot/usr/include/pdclib/_PDCLIB_print.h | 145 --- sysroot/usr/include/pdclib/_PDCLIB_tzcode.h | 153 --- sysroot/usr/include/signal.h | 91 -- sysroot/usr/include/stdalign.h | 30 - sysroot/usr/include/stdarg.h | 34 - sysroot/usr/include/stdbool.h | 24 - sysroot/usr/include/stddef.h | 55 -- sysroot/usr/include/stdint.h | 236 ----- sysroot/usr/include/stdio.h | 935 ------------------ sysroot/usr/include/stdlib.h | 379 ------- sysroot/usr/include/stdnoreturn.h | 26 - sysroot/usr/include/string.h | 394 -------- sysroot/usr/include/sys/stat.h | 50 - sysroot/usr/include/sys/time.h | 21 - sysroot/usr/include/sys/times.h | 17 - sysroot/usr/include/sys/types.h | 29 - sysroot/usr/include/time.h | 191 ---- sysroot/usr/include/unistd.h | 28 - sysroot/usr/include/wctype.h | 152 --- sysroot/usr/lib/rlibc.a | Bin 271538 -> 0 bytes 38 files changed, 6250 deletions(-) create mode 100644 sysroot/usr/fonts/cp850-8x16.psf delete mode 100644 sysroot/usr/include/assert.h delete mode 100644 sysroot/usr/include/ctype.h delete mode 100644 sysroot/usr/include/errno.h delete mode 100644 sysroot/usr/include/fcntl.h delete mode 100644 sysroot/usr/include/float.h delete mode 100644 sysroot/usr/include/inttypes.h delete mode 100644 sysroot/usr/include/iso646.h delete mode 100644 sysroot/usr/include/limits.h delete mode 100644 sysroot/usr/include/locale.h delete mode 100644 sysroot/usr/include/math.h delete mode 100644 sysroot/usr/include/pdclib/_PDCLIB_config.h delete mode 100644 sysroot/usr/include/pdclib/_PDCLIB_defguard.h delete mode 100644 sysroot/usr/include/pdclib/_PDCLIB_glue.h delete mode 100644 sysroot/usr/include/pdclib/_PDCLIB_internal.h delete mode 100644 sysroot/usr/include/pdclib/_PDCLIB_lib_ext1.h delete mode 100644 sysroot/usr/include/pdclib/_PDCLIB_platform_errno.h delete mode 100644 sysroot/usr/include/pdclib/_PDCLIB_platform_fcntl.h delete mode 100644 sysroot/usr/include/pdclib/_PDCLIB_print.h delete mode 100644 sysroot/usr/include/pdclib/_PDCLIB_tzcode.h delete mode 100644 sysroot/usr/include/signal.h delete mode 100644 sysroot/usr/include/stdalign.h delete mode 100644 sysroot/usr/include/stdarg.h delete mode 100644 sysroot/usr/include/stdbool.h delete mode 100644 sysroot/usr/include/stddef.h delete mode 100644 sysroot/usr/include/stdint.h delete mode 100644 sysroot/usr/include/stdio.h delete mode 100644 sysroot/usr/include/stdlib.h delete mode 100644 sysroot/usr/include/stdnoreturn.h delete mode 100644 sysroot/usr/include/string.h delete mode 100644 sysroot/usr/include/sys/stat.h delete mode 100644 sysroot/usr/include/sys/time.h delete mode 100644 sysroot/usr/include/sys/times.h delete mode 100644 sysroot/usr/include/sys/types.h delete mode 100644 sysroot/usr/include/time.h delete mode 100644 sysroot/usr/include/unistd.h delete mode 100644 sysroot/usr/include/wctype.h delete mode 100644 sysroot/usr/lib/rlibc.a diff --git a/sysroot/usr/fonts/cp850-8x16.psf b/sysroot/usr/fonts/cp850-8x16.psf new file mode 100644 index 0000000000000000000000000000000000000000..7539f61e8c4060b43fc40feec098534b95c4d428 GIT binary patch literal 4100 zcma)9y=xpt6d#P)YB`i{iG|#xaFJqh!f6SM6iohwG^rLjY+Nism2!~bY`O6NV3&q8 zD%~3v3AQ>^9s((cs=LM*Rgwy^m*4xC*%{eI-r1}B&3p5{=k471q1iBB(Dd-1!^4kn z4-copny$~+>yy=bt=O2R2id~!-6(7bv$9;RR#{f6>a3h%^MJ7okxaO2rqu}tIPHkvmYd*t(|^nYm_`t@e-=DsdLznIS~E||K<7l`QML-7~8HY znyzb#w6h|>PfD3Uq(k&+J_Tb*{ikoB!64F=_Nj7NM_%<+9w;|$+p2b6ebV&JlYzfc z6xKTPSVr+|F_do*i(Vx?h|Qm~%}~R;F3G+HEGFy)eSpz-(J8!Fzh z>%UTtOP(v=V1n%zn|@xEa(vR1`BY8O`;{k6TQtWPoJnf^c{P_+McGCZcsbjl0bKqz zVX1+*o^KMe9S(u#kDulf^4a&ZIUw?xYFqNQ@JYWU_t62N$v& zJo$t>b!IrvvSVgU=s$WdswXy^s6QYdVoaL|7nrLdpZw7NVSA)6>KBwP#H268rZ!Q3 zWOy?a6t32vY2nPZbo4q9F+ClBQCD5=)eW4uz*OA9lH&UG-L8o6tBo%) zvH{O=bJmPKG6twQ6a39D@#oj0`19{y@dt_f8r{0Zs`c%~{bsuur%8-a%-8SUzkmNu z;~f)SC)fP{P2?W#7L8fE_?*1M zD&pmJ-OC$;jtKe-D7s&8h}-$@U<%)M^X(|~8{_q}+}hkk{Ov(r`CgvoZU%Yc>vfCk zW6Y1)_sI^u9!lQJ_nB)zxzAua#q*(yF-~*LCnW`Ef%Rd&xC;$qOsfcEoJCmkr-NTS z!t=4NXZ#~5c&LP5k=KFN5lr|O=~qFon5TO=!NiF}iCidpLEI{~JM zNd8L-&JX2|56kqv*qYk#GT$42%JN~}{Ey#%8RlPhUmJeaVca9Z?uUm6Xjk5o9(HGi Z4~=Ck{TQ)>cv+{})7bT?&>$0h`wv&z1LObz literal 0 HcmV?d00001 diff --git a/sysroot/usr/include/assert.h b/sysroot/usr/include/assert.h deleted file mode 100644 index 34bea52..0000000 --- a/sysroot/usr/include/assert.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Diagnostics - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_internal.h" - -#ifndef _PDCLIB_ASSERT_H -#define _PDCLIB_ASSERT_H _PDCLIB_ASSERT_H -_PDCLIB_PUBLIC void _PDCLIB_assert99( const char * const, const char * const, const char * const ); -_PDCLIB_PUBLIC void _PDCLIB_assert89( const char * const ); -#endif - -/* If NDEBUG is set, assert() is a null operation. */ -#undef assert - -#ifdef NDEBUG -#define assert( ignore ) ( (void) 0 ) -#else -#if __STDC_VERSION__ >= 199901L -#define assert( expression ) ( ( expression ) ? (void) 0 \ - : _PDCLIB_assert99( "Assertion failed: " #expression \ - ", function ", __func__, \ - ", file " __FILE__ \ - ", line " _PDCLIB_value2string( __LINE__ ) \ - ".\n" ) ) -#else -#define assert( expression ) ( ( expression ) ? (void) 0 \ - : _PDCLIB_assert89( "Assertion failed: " #expression \ - ", file " __FILE__ \ - ", line " _PDCLIB_value2string( __LINE__ ) \ - ".\n" ) ) -#endif -#endif - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_ASSERT_H -#include _PDCLIB_EXTEND_ASSERT_H -#endif - -#ifdef __cplusplus -} -#endif diff --git a/sysroot/usr/include/ctype.h b/sysroot/usr/include/ctype.h deleted file mode 100644 index 551667a..0000000 --- a/sysroot/usr/include/ctype.h +++ /dev/null @@ -1,110 +0,0 @@ -/* Character handling - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_CTYPE_H -#define _PDCLIB_CTYPE_H _PDCLIB_CTYPE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_internal.h" - -/* Character classification functions */ - -/* Note that there is a difference between "whitespace" (any printing, non- - graph character, like horizontal and vertical tab), and "blank" (the literal - ' ' space character). - - There will be masking macros for each of these later on, but right now I - focus on the functions only. -*/ - -/* Returns isalpha( c ) || isdigit( c ) */ -_PDCLIB_PUBLIC int isalnum( int c ); - -/* Returns isupper( c ) || islower( c ) in the "C" locale. - In any other locale, also returns true for a locale-specific set of - alphabetic characters which are neither control characters, digits, - punctation, or whitespace. -*/ -_PDCLIB_PUBLIC int isalpha( int c ); - -/* Returns true if the character isspace() and used for separating words within - a line of text. In the "C" locale, only ' ' and '\t' are considered blanks. -*/ -_PDCLIB_PUBLIC int isblank( int c ); - -/* Returns true if the character is a control character. */ -_PDCLIB_PUBLIC int iscntrl( int c ); - -/* Returns true if the character is a decimal digit. Locale-independent. */ -_PDCLIB_PUBLIC int isdigit( int c ); - -/* Returns true for every printing character except space (' '). - NOTE: This definition differs from that of iswgraph() in , - which considers any iswspace() character, not only ' '. -*/ -_PDCLIB_PUBLIC int isgraph( int c ); - -/* Returns true for lowercase letters in the "C" locale. - In any other locale, also returns true for a locale-specific set of - characters which are neither control characters, digits, punctation, or - space (' '). In a locale other than the "C" locale, a character might test - true for both islower() and isupper(). -*/ -_PDCLIB_PUBLIC int islower( int c ); - -/* Returns true for every printing character including space (' '). */ -_PDCLIB_PUBLIC int isprint( int c ); - -/* Returns true for a locale-specific set of punctuation charcters; these - may not be whitespace or alphanumeric. In the "C" locale, returns true - for every printing character that is not whitespace or alphanumeric. -*/ -_PDCLIB_PUBLIC int ispunct( int c ); - -/* Returns true for every standard whitespace character (' ', '\f', '\n', '\r', - '\t', '\v') in the "C" locale. In any other locale, also returns true for a - locale-specific set of characters for which isalnum() is false. -*/ -_PDCLIB_PUBLIC int isspace( int c ); - -/* Returns true for uppercase letters in the "C" locale. - In any other locale, also returns true for a locale-specific set of - characters which are neither control characters, digits, punctation, or - space (' '). In a locale other than the "C" locale, a character might test - true for both islower() and isupper(). -*/ -_PDCLIB_PUBLIC int isupper( int c ); - -/* Returns true for any hexadecimal-digit character. Locale-independent. */ -_PDCLIB_PUBLIC int isxdigit( int c ); - -/* Character case mapping functions */ - -/* Converts an uppercase letter to a corresponding lowercase letter. Input that - is not an uppercase letter remains unchanged. -*/ -_PDCLIB_PUBLIC int tolower( int c ); - -/* Converts a lowercase letter to a corresponding uppercase letter. Input that - is not a lowercase letter remains unchanged. -*/ -_PDCLIB_PUBLIC int toupper( int c ); - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_CTYPE_H -#include _PDCLIB_EXTEND_CTYPE_H -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sysroot/usr/include/errno.h b/sysroot/usr/include/errno.h deleted file mode 100644 index 28eaf5b..0000000 --- a/sysroot/usr/include/errno.h +++ /dev/null @@ -1,202 +0,0 @@ -/* Errors - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_ERRNO_H -#define _PDCLIB_ERRNO_H _PDCLIB_ERRNO_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_lib_ext1.h" -#include "pdclib/_PDCLIB_internal.h" - -/* FIXME: With , this needs to be in thread-specific storage. */ -#define errno (*_PDCLIB_errno_func()) - -/* C only requires the following three */ - -/* Result too large */ -#define ERANGE _PDCLIB_ERANGE -/* Mathematics argument out of domain of function */ -#define EDOM _PDCLIB_EDOM -/* Illegal byte sequence */ -#define EILSEQ _PDCLIB_EILSEQ - -/* C++ additionally requires the folloing */ - -/* Argument list too long */ -#define E2BIG _PDCLIB_E2BIG -/* Permission denied */ -#define EACCES _PDCLIB_EACCES -/* Address in use */ -#define EADDRINUSE _PDCLIB_EADDRINUSE -/* Address not available */ -#define EADDRNOTAVAIL _PDCLIB_EADDRNOTAVAIL -/* Address family not supported */ -#define EAFNOSUPPORT _PDCLIB_EAFNOSUPPORT -/* Resource unavailable, try again */ -#define EAGAIN _PDCLIB_EAGAIN -/* Connection already in progress */ -#define EALREADY _PDCLIB_EALREADY -/* Bad file descriptor */ -#define EBADF _PDCLIB_EBADF -/* Bad message */ -#define EBADMSG _PDCLIB_EBADMSG -/* Device or resource busy */ -#define EBUSY _PDCLIB_EBUSY -/* Operation canceled */ -#define ECANCELED _PDCLIB_ECANCELED -/* No child processes */ -#define ECHILD _PDCLIB_ECHILD -/* Connection aborted */ -#define ECONNABORTED _PDCLIB_ECONNABORTED -/* Connection refused */ -#define ECONNREFUSED _PDCLIB_ECONNREFUSED -/* Connection reset */ -#define ECONNRESET _PDCLIB_ECONNRESET -/* Resource deadlock would occur */ -#define EDEADLK _PDCLIB_EDEADLK -/* Destination address required */ -#define EDESTADDRREQ _PDCLIB_EDESTADDRREQ -/* File exists */ -#define EEXIST _PDCLIB_EEXIST -/* Bad address */ -#define EFAULT _PDCLIB_EFAULT -/* File too large */ -#define EFBIG _PDCLIB_EFBIG -/* Host is unreachable */ -#define EHOSTUNREACH _PDCLIB_EHOSTUNREACH -/* Identifier removed */ -#define EIDRM _PDCLIB_EIDRM -/* Operation in progress */ -#define EINPROGRESS _PDCLIB_EINPROGRESS -/* Interrupted function */ -#define EINTR _PDCLIB_EINTR -/* Invalid argument */ -#define EINVAL _PDCLIB_EINVAL -/* I/O error */ -#define EIO _PDCLIB_EIO -/* Socket is connected */ -#define EISCONN _PDCLIB_EISCONN -/* Is a directory */ -#define EISDIR _PDCLIB_EISDIR -/* Too many levels of symbolic links */ -#define ELOOP _PDCLIB_ELOOP -/* File descriptor value too large */ -#define EMFILE _PDCLIB_EMFILE -/* Too many links */ -#define EMLINK _PDCLIB_EMLINK -/* Message too large */ -#define EMSGSIZE _PDCLIB_EMSGSIZE -/* Filename too long */ -#define ENAMETOOLONG _PDCLIB_ENAMETOOLONG -/* Network is down */ -#define ENETDOWN _PDCLIB_ENETDOWN -/* Connection aborted by network */ -#define ENETRESET _PDCLIB_ENETRESET -/* Network unreachable */ -#define ENETUNREACH _PDCLIB_ENETUNREACH -/* Too many files open in system */ -#define ENFILE _PDCLIB_ENFILE -/* No buffer space available */ -#define ENOBUFS _PDCLIB_ENOBUFS -/* No message is available on the STREAM head read queue */ -#define ENODATA _PDCLIB_ENODATA -/* No such device */ -#define ENODEV _PDCLIB_ENODEV -/* No such file or directory */ -#define ENOENT _PDCLIB_ENOENT -/* Executable file format error */ -#define ENOEXEC _PDCLIB_ENOEXEC -/* No locks available */ -#define ENOLCK _PDCLIB_ENOLCK -/* Link has been severed */ -#define ENOLINK _PDCLIB_ENOLINK -/* Not enough space */ -#define ENOMEM _PDCLIB_ENOMEM -/* No message of the desired type */ -#define ENOMSG _PDCLIB_ENOMSG -/* Protocol not available */ -#define ENOPROTOOPT _PDCLIB_ENOPROTOOPT -/* No space left on device */ -#define ENOSPC _PDCLIB_ENOSPC -/* No STREAM resources */ -#define ENOSR _PDCLIB_ENOSR -/* Not a STREAM */ -#define ENOSTR _PDCLIB_ENOSTR -/* Function not supported */ -#define ENOSYS _PDCLIB_ENOSYS -/* The socket is not connected */ -#define ENOTCONN _PDCLIB_ENOTCONN -/* Not a directory */ -#define ENOTDIR _PDCLIB_ENOTDIR -/* Directory not empty */ -#define ENOTEMPTY _PDCLIB_ENOTEMPTY -/* State not recoverable */ -#define ENOTRECOVERABLE _PDCLIB_ENOTRECOVERABLE -/* Not a socket */ -#define ENOTSOCK _PDCLIB_ENOTSOCK -/* Not supported */ -#define ENOTSUP _PDCLIB_ENOTSUP -/* Inappropriate I/O control operation */ -#define ENOTTY _PDCLIB_ENOTTY -/* No such device or address */ -#define ENXIO _PDCLIB_ENXIO -/* Operation not supported on socket */ -#define EOPNOTSUPP _PDCLIB_EOPNOTSUPP -/* Value too large to be stored in data type */ -#define EOVERFLOW _PDCLIB_EOVERFLOW -/* Previous owner died */ -#define EOWNERDEAD _PDCLIB_EOWNERDEAD -/* Operation not permitted */ -#define EPERM _PDCLIB_EPERM -/* Broken pipe */ -#define EPIPE _PDCLIB_EPIPE -/* Protocol error */ -#define EPROTO _PDCLIB_EPROTO -/* Protocol not supported */ -#define EPROTONOSUPPORT _PDCLIB_EPROTONOSUPPORT -/* Protocol wrong type for socket */ -#define EPROTOTYPE _PDCLIB_EPROTOTYPE -/* Read-only file system */ -#define EROFS _PDCLIB_EROFS -/* Invalid seek */ -#define ESPIPE _PDCLIB_ESPIPE -/* No such process */ -#define ESRCH _PDCLIB_ESRCH -/* Stream ioctl() timeout */ -#define ETIME _PDCLIB_ETIME -/* Connection timed out */ -#define ETIMEDOUT _PDCLIB_ETIMEDOUT -/* Text file busy */ -#define ETXTBSY _PDCLIB_ETXTBSY -/* Operation would block */ -#define EWOULDBLOCK _PDCLIB_EWOULDBLOCK -/* Cross-device link */ -#define EXDEV _PDCLIB_EXDEV - -/* Annex K -- Bounds-checking interfaces */ - -#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 -#ifndef _PDCLIB_ERRNO_T_DEFINED -#define _PDCLIB_ERRNO_T_DEFINED _PDCLIB_ERRNO_T_DEFINED -typedef int errno_t; -#endif -#endif - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_ERRNO_H -#include _PDCLIB_EXTEND_ERRNO_H -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sysroot/usr/include/fcntl.h b/sysroot/usr/include/fcntl.h deleted file mode 100644 index 99d530f..0000000 --- a/sysroot/usr/include/fcntl.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _FCNTL_H -#define _FCNTL_H - -/* File access modes for open() */ -#define O_RDONLY 00000000 -#define O_WRONLY 00000001 -#define O_RDWR 00000002 - -/* File creation flags */ -#define O_CREAT 00000100 -#define O_EXCL 00000200 -#define O_NOCTTY 00000400 -#define O_TRUNC 00001000 -#define O_APPEND 00002000 -#define O_NONBLOCK 00004000 - -#define AT_FDCWD (-100) - -#endif /* _FCNTL_H */ \ No newline at end of file diff --git a/sysroot/usr/include/float.h b/sysroot/usr/include/float.h deleted file mode 100644 index 49d5d2e..0000000 --- a/sysroot/usr/include/float.h +++ /dev/null @@ -1,82 +0,0 @@ -/* Characteristics of floating types - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_FLOAT_H -#define _PDCLIB_FLOAT_H _PDCLIB_FLOAT_H - -#include "pdclib/_PDCLIB_config.h" - -#define FLT_ROUNDS _PDCLIB_FLT_ROUNDS -#define FLT_EVAL_METHOD _PDCLIB_FLT_EVAL_METHOD -#define DECIMAL_DIG _PDCLIB_DECIMAL_DIG - -/* Radix of exponent representation */ -#define FLT_RADIX __FLT_RADIX__ -/* Number of base-FLT_RADIX digits in the significand of a float */ -#define FLT_MANT_DIG __FLT_MANT_DIG__ -/* Number of decimal digits of precision in a float */ -#define FLT_DIG __FLT_DIG__ -/* Difference between 1.0 and the minimum float greater than 1.0 */ -#define FLT_EPSILON __FLT_EPSILON__ -/* Minimum int x such that FLT_RADIX**(x-1) is a normalised float */ -#define FLT_MIN_EXP __FLT_MIN_EXP__ -/* Minimum normalised float */ -#define FLT_MIN __FLT_MIN__ -/* Minimum int x such that 10**x is a normalised float */ -#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__ -/* Maximum int x such that FLT_RADIX**(x-1) is a representable float */ -#define FLT_MAX_EXP __FLT_MAX_EXP__ -/* Maximum float */ -#define FLT_MAX __FLT_MAX__ -/* Maximum int x such that 10**x is a representable float */ -#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__ - -/* Number of base-FLT_RADIX digits in the significand of a double */ -#define DBL_MANT_DIG __DBL_MANT_DIG__ -/* Number of decimal digits of precision in a double */ -#define DBL_DIG __DBL_DIG__ -/* Difference between 1.0 and the minimum double greater than 1.0 */ -#define DBL_EPSILON __DBL_EPSILON__ -/* Minimum int x such that FLT_RADIX**(x-1) is a normalised double */ -#define DBL_MIN_EXP __DBL_MIN_EXP__ -/* Minimum normalised double */ -#define DBL_MIN __DBL_MIN__ -/* Minimum int x such that 10**x is a normalised double */ -#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__ -/* Maximum int x such that FLT_RADIX**(x-1) is a representable double */ -#define DBL_MAX_EXP __DBL_MAX_EXP__ -/* Maximum double */ -#define DBL_MAX __DBL_MAX__ -/* Maximum int x such that 10**x is a representable double */ -#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__ - -/* Number of base-FLT_RADIX digits in the significand of a long double */ -#define LDBL_MANT_DIG __LDBL_MANT_DIG__ -/* Number of decimal digits of precision in a long double */ -#define LDBL_DIG __LDBL_DIG__ -/* Difference between 1.0 and the minimum long double greater than 1.0 */ -#define LDBL_EPSILON __LDBL_EPSILON__ -/* Minimum int x such that FLT_RADIX**(x-1) is a normalised long double */ -#define LDBL_MIN_EXP __LDBL_MIN_EXP__ -/* Minimum normalised long double */ -#define LDBL_MIN __LDBL_MIN__ -/* Minimum int x such that 10**x is a normalised long double */ -#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ -/* Maximum int x such that FLT_RADIX**(x-1) is a representable long double */ -#define LDBL_MAX_EXP __LDBL_MAX_EXP__ -/* Maximum long double */ -#define LDBL_MAX __LDBL_MAX__ -/* Maximum int x such that 10**x is a representable long double */ -#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_FLOAT_H -#include _PDCLIB_EXTEND_FLOAT_H -#endif - -#endif diff --git a/sysroot/usr/include/inttypes.h b/sysroot/usr/include/inttypes.h deleted file mode 100644 index 0be401d..0000000 --- a/sysroot/usr/include/inttypes.h +++ /dev/null @@ -1,368 +0,0 @@ -/* Format conversion of integer types - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_INTTYPES_H -#define _PDCLIB_INTTYPES_H _PDCLIB_INTTYPES_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -typedef struct _PDCLIB_imaxdiv_t imaxdiv_t; - -/* 7.8.1 Macros for format specifiers */ - -/* The various leastN_t, fastN_t, intmax_t, and intptr_t types are typedefs - to native types. But the user does not know which ones, which gives some - problems when trying to *printf() / *scanf() those types. The various - macros defined below allow to give the correct conversion specifiers - without knowing the actual native type they represent. -*/ - -#if _PDCLIB_INT_LEAST8_MAX > _PDCLIB_INT_MAX -#define PRIdLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, d ) ) -#define PRIiLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, i ) ) -#define PRIoLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, o ) ) -#define PRIuLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, u ) ) -#define PRIxLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, x ) ) -#define PRIXLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, X ) ) -#else -#define PRIdLEAST8 "d" -#define PRIiLEAST8 "i" -#define PRIoLEAST8 "o" -#define PRIuLEAST8 "u" -#define PRIxLEAST8 "x" -#define PRIXLEAST8 "X" -#endif - -#if _PDCLIB_INT_FAST8_MAX > _PDCLIB_INT_MAX -#define PRIdFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, d ) ) -#define PRIiFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, i ) ) -#define PRIoFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, o ) ) -#define PRIuFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, u ) ) -#define PRIxFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, x ) ) -#define PRIXFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, X ) ) -#else -#define PRIdFAST8 "d" -#define PRIiFAST8 "i" -#define PRIoFAST8 "o" -#define PRIuFAST8 "u" -#define PRIxFAST8 "x" -#define PRIXFAST8 "X" -#endif - -#if _PDCLIB_INT_LEAST16_MAX > _PDCLIB_INT_MAX -#define PRIdLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, d ) ) -#define PRIiLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, i ) ) -#define PRIoLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, o ) ) -#define PRIuLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, u ) ) -#define PRIxLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, x ) ) -#define PRIXLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, X ) ) -#else -#define PRIdLEAST16 "d" -#define PRIiLEAST16 "i" -#define PRIoLEAST16 "o" -#define PRIuLEAST16 "u" -#define PRIxLEAST16 "x" -#define PRIXLEAST16 "X" -#endif - -#if _PDCLIB_INT_FAST16_MAX > _PDCLIB_INT_MAX -#define PRIdFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, d ) ) -#define PRIiFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, i ) ) -#define PRIoFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, o ) ) -#define PRIuFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, u ) ) -#define PRIxFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, x ) ) -#define PRIXFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, X ) ) -#else -#define PRIdFAST16 "d" -#define PRIiFAST16 "i" -#define PRIoFAST16 "o" -#define PRIuFAST16 "u" -#define PRIxFAST16 "x" -#define PRIXFAST16 "X" -#endif - -#if _PDCLIB_INT_LEAST32_MAX > _PDCLIB_INT_MAX -#define PRIdLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, d ) ) -#define PRIiLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, i ) ) -#define PRIoLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, o ) ) -#define PRIuLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, u ) ) -#define PRIxLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, x ) ) -#define PRIXLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, X ) ) -#else -#define PRIdLEAST32 "d" -#define PRIiLEAST32 "i" -#define PRIoLEAST32 "o" -#define PRIuLEAST32 "u" -#define PRIxLEAST32 "x" -#define PRIXLEAST32 "X" -#endif - -#if _PDCLIB_INT_FAST32_MAX > _PDCLIB_INT_MAX -#define PRIdFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, d ) ) -#define PRIiFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, i ) ) -#define PRIoFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, o ) ) -#define PRIuFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, u ) ) -#define PRIxFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, x ) ) -#define PRIXFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, X ) ) -#else -#define PRIdFAST32 "d" -#define PRIiFAST32 "i" -#define PRIoFAST32 "o" -#define PRIuFAST32 "u" -#define PRIxFAST32 "x" -#define PRIXFAST32 "X" -#endif - -#if _PDCLIB_INT_LEAST64_MAX > _PDCLIB_INT_MAX -#define PRIdLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, d ) ) -#define PRIiLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, i ) ) -#define PRIoLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, o ) ) -#define PRIuLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, u ) ) -#define PRIxLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, x ) ) -#define PRIXLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, X ) ) -#else -#define PRIdLEAST64 "d" -#define PRIiLEAST64 "i" -#define PRIoLEAST64 "o" -#define PRIuLEAST64 "u" -#define PRIxLEAST64 "x" -#define PRIXLEAST64 "X" -#endif - -#if _PDCLIB_INT_FAST64_MAX > _PDCLIB_INT_MAX -#define PRIdFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, d ) ) -#define PRIiFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, i ) ) -#define PRIoFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, o ) ) -#define PRIuFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, u ) ) -#define PRIxFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, x ) ) -#define PRIXFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, X ) ) -#else -#define PRIdFAST64 "d" -#define PRIiFAST64 "i" -#define PRIoFAST64 "o" -#define PRIuFAST64 "u" -#define PRIxFAST64 "x" -#define PRIXFAST64 "X" -#endif - -#if _PDCLIB_INTMAX_MAX > _PDCLIB_INT_MAX -#define PRIdMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, d ) ) -#define PRIiMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, i ) ) -#define PRIoMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, o ) ) -#define PRIuMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, u ) ) -#define PRIxMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, x ) ) -#define PRIXMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, X ) ) -#else -#define PRIdMAX "d" -#define PRIiMAX "i" -#define PRIoMAX "o" -#define PRIuMAX "u" -#define PRIxMAX "x" -#define PRIXMAX "X" -#endif - -#if _PDCLIB_INTPTR_MAX > _PDCLIB_INT_MAX -#define PRIdPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, d ) ) -#define PRIiPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, i ) ) -#define PRIoPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, o ) ) -#define PRIuPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, u ) ) -#define PRIxPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, x ) ) -#define PRIXPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, X ) ) -#else -#define PRIdPTR "d" -#define PRIiPTR "i" -#define PRIoPTR "o" -#define PRIuPTR "u" -#define PRIxPTR "x" -#define PRIXPTR "X" -#endif - -#define SCNdLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, d ) ) -#define SCNiLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, i ) ) -#define SCNoLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, o ) ) -#define SCNuLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, u ) ) -#define SCNxLEAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, x ) ) - -#define SCNdFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, d ) ) -#define SCNiFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, i ) ) -#define SCNoFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, o ) ) -#define SCNuFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, u ) ) -#define SCNxFAST8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST8_PREFIX, x ) ) - -#define SCNdLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, d ) ) -#define SCNiLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, i ) ) -#define SCNoLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, o ) ) -#define SCNuLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, u ) ) -#define SCNxLEAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, x ) ) - -#define SCNdFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, d ) ) -#define SCNiFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, i ) ) -#define SCNoFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, o ) ) -#define SCNuFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, u ) ) -#define SCNxFAST16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST16_PREFIX, x ) ) - -#define SCNdLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, d ) ) -#define SCNiLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, i ) ) -#define SCNoLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, o ) ) -#define SCNuLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, u ) ) -#define SCNxLEAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, x ) ) - -#define SCNdFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, d ) ) -#define SCNiFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, i ) ) -#define SCNoFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, o ) ) -#define SCNuFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, u ) ) -#define SCNxFAST32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST32_PREFIX, x ) ) - -#define SCNdLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, d ) ) -#define SCNiLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, i ) ) -#define SCNoLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, o ) ) -#define SCNuLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, u ) ) -#define SCNxLEAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, x ) ) - -#define SCNdFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, d ) ) -#define SCNiFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, i ) ) -#define SCNoFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, o ) ) -#define SCNuFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, u ) ) -#define SCNxFAST64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_FAST64_PREFIX, x ) ) - -#define SCNdMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, d ) ) -#define SCNiMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, i ) ) -#define SCNoMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, o ) ) -#define SCNuMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, u ) ) -#define SCNxMAX _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTMAX_PREFIX, x ) ) - -#define SCNdPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, d ) ) -#define SCNiPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, i ) ) -#define SCNoPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, o ) ) -#define SCNuPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, u ) ) -#define SCNxPTR _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INTPTR_PREFIX, x ) ) - -/* The exact-width types (int8_t, int16_t, ...) are *optional*, as not all - architectures support the necessary 8-bits-per-byte two's complement - native types. -*/ - -#if _PDCLIB_TWOS_COMPLEMENT == 1 - -#if _PDCLIB_INT_LEAST8_MAX == 0x7f -#if _PDCLIB_INT_LEAST8_MAX > _PDCLIB_INT_MAX -#define PRId8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, d ) ) -#define PRIi8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, i ) ) -#define PRIo8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, o ) ) -#define PRIu8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, u ) ) -#define PRIx8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, x ) ) -#define PRIX8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, X ) ) -#endif -#define SCNd8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, d ) ) -#define SCNi8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, i ) ) -#define SCNo8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, o ) ) -#define SCNu8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, u ) ) -#define SCNx8 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST8_PREFIX, x ) ) -#endif - -#if _PDCLIB_INT_LEAST16_MAX == 0x7fff -#if _PDCLIB_INT_LEAST16_MAX > _PDCLIB_INT_MAX -#define PRId16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, d ) ) -#define PRIi16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, i ) ) -#define PRIo16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, o ) ) -#define PRIu16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, u ) ) -#define PRIx16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, x ) ) -#define PRIX16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, X ) ) -#endif -#define SCNd16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, d ) ) -#define SCNi16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, i ) ) -#define SCNo16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, o ) ) -#define SCNu16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, u ) ) -#define SCNx16 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST16_PREFIX, x ) ) -#endif - -#if _PDCLIB_INT_LEAST32_MAX == 0x7fffffffl -#if _PDCLIB_INT_LEAST32_MAX > _PDCLIB_INT_MAX -#define PRId32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, d ) ) -#define PRIi32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, i ) ) -#define PRIo32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, o ) ) -#define PRIu32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, u ) ) -#define PRIx32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, x ) ) -#define PRIX32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, X ) ) -#endif -#define SCNd32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, d ) ) -#define SCNi32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, i ) ) -#define SCNo32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, o ) ) -#define SCNu32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, u ) ) -#define SCNx32 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST32_PREFIX, x ) ) -#endif - -#if _PDCLIB_INT_LEAST64_MAX == 0x7fffffffffffffffll -#if _PDCLIB_INT_LEAST64_MAX > _PDCLIB_INT_MAX -#define PRId64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, d ) ) -#define PRIi64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, i ) ) -#define PRIo64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, o ) ) -#define PRIu64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, u ) ) -#define PRIx64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, x ) ) -#define PRIX64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, X ) ) -#endif -#define SCNd64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, d ) ) -#define SCNi64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, i ) ) -#define SCNo64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, o ) ) -#define SCNu64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, u ) ) -#define SCNx64 _PDCLIB_value2string( _PDCLIB_concat( _PDCLIB_INT_LEAST64_PREFIX, x ) ) -#endif - -#endif - -/* 7.8.2 Functions for greatest-width integer types */ - -/* Calculate the absolute value of j */ -_PDCLIB_PUBLIC intmax_t imaxabs( intmax_t j ); - -/* Return quotient (quot) and remainder (rem) of an integer division in the - imaxdiv_t struct. -*/ -_PDCLIB_PUBLIC imaxdiv_t imaxdiv( intmax_t numer, intmax_t denom ); - -/* Separate the character array nptr into three parts: A (possibly empty) - sequence of whitespace characters, a character representation of an integer - to the given base, and trailing invalid characters (including the terminating - null character). If base is 0, assume it to be 10, unless the integer - representation starts with 0x / 0X (setting base to 16) or 0 (setting base to - 8). If given, base can be anything from 0 to 36, using the 26 letters of the - base alphabet (both lowercase and uppercase) as digits 10 through 35. - The integer representation is then converted into the return type of the - function. It can start with a '+' or '-' sign. If the sign is '-', the result - of the conversion is negated. - If the conversion is successful, the converted value is returned. If endptr - is not a NULL pointer, a pointer to the first trailing invalid character is - returned in *endptr. - If no conversion could be performed, zero is returned (and nptr in *endptr, - if endptr is not a NULL pointer). If the converted value does not fit into - the return type, the functions return INTMAX_MIN, INTMAX_MAX, or UINTMAX_MAX, - respectively, depending on the sign of the integer representation and the - return type, and errno is set to ERANGE. -*/ -/* This function is equivalent to strtol() / strtoul() in , but on - the potentially larger type. -*/ -_PDCLIB_PUBLIC intmax_t strtoimax( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr, int base ); -_PDCLIB_PUBLIC uintmax_t strtoumax( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr, int base ); - -/* TODO: wcstoimax(), wcstoumax() */ - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_INTTYPES_H -#include _PDCLIB_EXTEND_INTTYPES_H -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sysroot/usr/include/iso646.h b/sysroot/usr/include/iso646.h deleted file mode 100644 index 88e521c..0000000 --- a/sysroot/usr/include/iso646.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Alternative spellings - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_ISO646_H -#define _PDCLIB_ISO646_H _PDCLIB_ISO646_H - -#ifndef __cplusplus -#define and && -#define and_eq &= -#define bitand & -#define bitor | -#define compl ~ -#define not ! -#define not_eq != -#define or || -#define or_eq |= -#define xor ^ -#define xor_eq ^= -#endif - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_ISO646_H -#include _PDCLIB_EXTEND_ISO646_H -#endif - -#endif diff --git a/sysroot/usr/include/limits.h b/sysroot/usr/include/limits.h deleted file mode 100644 index 72268a4..0000000 --- a/sysroot/usr/include/limits.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Sizes of integer types - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_LIMITS_H -#define _PDCLIB_LIMITS_H _PDCLIB_LIMITS_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_internal.h" - -/* TODO: Defined to 1 as multibyte characters are not supported yet. */ -#define MB_LEN_MAX 1 - -#define LLONG_MIN _PDCLIB_LLONG_MIN -#define LLONG_MAX _PDCLIB_LLONG_MAX -#define ULLONG_MAX _PDCLIB_ULLONG_MAX - -#define CHAR_BIT _PDCLIB_CHAR_BIT -#define CHAR_MAX _PDCLIB_CHAR_MAX -#define CHAR_MIN _PDCLIB_CHAR_MIN -#define SCHAR_MAX _PDCLIB_SCHAR_MAX -#define SCHAR_MIN _PDCLIB_SCHAR_MIN -#define UCHAR_MAX _PDCLIB_UCHAR_MAX -#define SHRT_MAX _PDCLIB_SHRT_MAX -#define SHRT_MIN _PDCLIB_SHRT_MIN -#define INT_MAX _PDCLIB_INT_MAX -#define INT_MIN _PDCLIB_INT_MIN -#define LONG_MAX _PDCLIB_LONG_MAX -#define LONG_MIN _PDCLIB_LONG_MIN -#define USHRT_MAX _PDCLIB_USHRT_MAX -#define UINT_MAX _PDCLIB_UINT_MAX -#define ULONG_MAX _PDCLIB_ULONG_MAX - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_LIMITS_H -#include _PDCLIB_EXTEND_LIMITS_H -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sysroot/usr/include/locale.h b/sysroot/usr/include/locale.h deleted file mode 100644 index 0c18446..0000000 --- a/sysroot/usr/include/locale.h +++ /dev/null @@ -1,114 +0,0 @@ -/* Localization - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_LOCALE_H -#define _PDCLIB_LOCALE_H _PDCLIB_LOCALE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_internal.h" - -#ifndef _PDCLIB_NULL_DEFINED -#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED -#define NULL _PDCLIB_NULL -#endif - -/* The structure returned by localeconv(). - - The values for *_sep_by_space: - 0 - no space - 1 - if symbol and sign are adjacent, a space separates them from the value; - otherwise a space separates the symbol from the value - 2 - if symbol and sign are adjacent, a space separates them; otherwise a - space separates the sign from the value - - The values for *_sign_posn: - 0 - Parentheses surround value and symbol - 1 - sign precedes value and symbol - 2 - sign succeeds value and symbol - 3 - sign immediately precedes symbol - 4 - sign immediately succeeds symbol -*/ -struct lconv -{ - char * decimal_point; /* decimal point character */ /* LC_NUMERIC */ - char * thousands_sep; /* character for separating groups of digits */ /* LC_NUMERIC */ - char * grouping; /* string indicating the size of digit groups */ /* LC_NUMERIC */ - char * mon_decimal_point; /* decimal point for monetary quantities */ /* LC_MONETARY */ - char * mon_thousands_sep; /* thousands_sep for monetary quantities */ /* LC_MONETARY */ - char * mon_grouping; /* grouping for monetary quantities */ /* LC_MONETARY */ - char * positive_sign; /* string indicating nonnegative mty. qty. */ /* LC_MONETARY */ - char * negative_sign; /* string indicating negative mty. qty. */ /* LC_MONETARY */ - char * currency_symbol; /* local currency symbol (e.g. '$') */ /* LC_MONETARY */ - char * int_curr_symbol; /* international currency symbol (e.g. "USD" */ /* LC_MONETARY */ - char frac_digits; /* fractional digits in local monetary qty. */ /* LC_MONETARY */ - char p_cs_precedes; /* if currency_symbol precedes positive qty. */ /* LC_MONETARY */ - char n_cs_precedes; /* if currency_symbol precedes negative qty. */ /* LC_MONETARY */ - char p_sep_by_space; /* if it is separated by space from pos. qty. */ /* LC_MONETARY */ - char n_sep_by_space; /* if it is separated by space from neg. qty. */ /* LC_MONETARY */ - char p_sign_posn; /* positioning of positive_sign for mon. qty. */ /* LC_MONETARY */ - char n_sign_posn; /* positioning of negative_sign for mon. qty. */ /* LC_MONETARY */ - char int_frac_digits; /* Same as above, for international format */ /* LC_MONETARY */ - char int_p_cs_precedes; /* Same as above, for international format */ /* LC_MONETARY */ - char int_n_cs_precedes; /* Same as above, for international format */ /* LC_MONETARY */ - char int_p_sep_by_space; /* Same as above, for international format */ /* LC_MONETARY */ - char int_n_sep_by_space; /* Same as above, for international format */ /* LC_MONETARY */ - char int_p_sign_posn; /* Same as above, for international format */ /* LC_MONETARY */ - char int_n_sign_posn; /* Same as above, for international format */ /* LC_MONETARY */ -}; - -/* First arguments to setlocale(). - NOTE: If you add to / modify these, look at functions/locale/setlocale.c - and keep things in sync. -*/ -/* Entire locale */ -#define LC_ALL _PDCLIB_LC_ALL -/* Collation (strcoll(), strxfrm()) */ -#define LC_COLLATE _PDCLIB_LC_COLLATE -/* Character types (, ) */ -#define LC_CTYPE _PDCLIB_LC_CTYPE -/* Monetary formatting (as returned by localeconv) */ -#define LC_MONETARY _PDCLIB_LC_MONETARY -/* Decimal-point character (for printf() / scanf() functions), string - conversions, nonmonetary formatting as returned by localeconv -*/ -#define LC_NUMERIC _PDCLIB_LC_NUMERIC -/* Time formats (strftime(), wcsftime()) */ -#define LC_TIME _PDCLIB_LC_TIME -/* Messages (not specified but allowed by C99, and specified by POSIX) - (used by perror() / strerror()) -*/ -#define LC_MESSAGES _PDCLIB_LC_MESSAGES - -/* The category parameter can be any of the LC_* macros to specify if the call - to setlocale() shall affect the entire locale or only a portion thereof. - The category locale specifies which locale should be switched to, with "C" - being the minimal default locale, and "" being the locale-specific native - environment. A NULL pointer makes setlocale() return the *current* setting. - Otherwise, returns a pointer to a string associated with the specified - category for the new locale. -*/ -_PDCLIB_PUBLIC char * setlocale( int category, const char * locale ); - -/* Returns a struct lconv initialized to the values appropriate for the current - locale setting. -*/ -_PDCLIB_PUBLIC struct lconv * localeconv( void ); - -#ifdef __cplusplus -} -#endif - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_LOCALE_H -#include _PDCLIB_EXTEND_LOCALE_H -#endif - -#endif diff --git a/sysroot/usr/include/math.h b/sysroot/usr/include/math.h deleted file mode 100644 index 88b6619..0000000 --- a/sysroot/usr/include/math.h +++ /dev/null @@ -1,467 +0,0 @@ -/* Mathematics - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_MATH_H -#define _PDCLIB_MATH_H _PDCLIB_MATH_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_lib_ext1.h" -#include "pdclib/_PDCLIB_internal.h" - -typedef float float_t; -typedef double double_t; - -#define HUGE_VALF _PDCLIB_HUGE_VALF; -#define HUGE_VAL _PDCLIB_HUGE_VAL; -#define HUGE_VALL _PDCLIB_HUGE_VALL; - -#define INFINITY (_PDCLIB_FLT_MAX * 2) -#define NAN ( -(0.0f / 0.0f) ) - -#define FP_FAST_FMAF -#define FP_FAST_FMA -#define FP_FAST_FMAL - -#define FP_ILOGB0 INT_MIN -#define FP_ILOGBNAN INT_MAX - -#define MATH_ERRNO 1 -#define MATH_ERREXCEPT 2 - -#define math_errhandling - -/* Classification */ - -/* FP_ZERO, FP_SUBNORMAL, FP_NORMAL */ -#define isfinite( x ) _PDCLIB_GENERIC( isfinite, x ) - -/* FP_INFINITE */ -#define isinf( x ) _PDCLIB_GENERIC( isinf, x ) - -/* FP_NAN */ -#define isnan( x ) _PDCLIB_GENERIC( isnan, x ) - -/* FP_NORMAL */ -#define isnormal( x ) _PDCLIB_GENERIC( isnormal, x ) - -/* Negative */ -#define signbit( x ) _PDCLIB_GENERIC( signbit, x ) - -/* See FP_* classes */ -#define fpclassify( x ) _PDCLIB_GENERIC( fpclassify, x ) - -#define FP_INFINITE 1 -#define FP_NAN 2 -#define FP_NORMAL 3 -#define FP_SUBNORMAL 4 -#define FP_ZERO 5 - -/* Trigonometric functions */ - -/* The principal value of the arc cosine of x. - Domain error for arguments not in the interval -1..+1. - Returns the interval 0..Pi radians. -*/ -double acos( double x ); -float acosf( float x ); -long double acosl( long double x ); - -/* The principal value of the arc sine of x. - Domain error for arguments not in the interval -1..+1. - Returns the interval -Pi/2..Pi/2 radians. -*/ -double asin( double x ); -float asinf( float x ); -long double asinl( long double x ); - -/* The principal value of the arc tangent of x. - Returns the interval -Pi/2..Pi/2 radians. -*/ -double atan( double x ); -float atanf( float x ); -long double atanl( long double x ); - -/* The value of the arc tangent of y/x, using the signs of both - arguments to determine the quadrant of the return value. - Domain error if both arguments are zero. - Returns the interval -Pi..Pi radians. -*/ -double atan2( double y, double x ); -float atan2f( float y, float x ); -long double atan2l( long double y, long double x ); - -/* Cosine of x in radians. */ -double cos( double x ); -float cosf( float x ); -long double cosl( long double x ); - -/* Sine of x in radians. */ -double sin( double x ); -float sinf( float x ); -long double sinl( long double x ); - -/* Tangent of x in radians. */ -double tan( double x ); -float tanf( float x ); -long double tanl( long double x ); - -/* Hyperbolic functions */ - -/* The (nonnegative) arc hyberbolic cosine of x. - Domain error for arguments less than 1. - Returns the interval 0..INF. -*/ -double acosh( double x ); -float acoshf( float x ); -long double acoshl( long double x ); - -/* The arc hyberbolic sine of x. -*/ -double asinh( double x ); -float asinhf( float x ); -long double asinhl( long double x ); - -/* The arc hyberbolic tangent of x. - Domain error for arguments not in -1..1. - Range error if -1 or +1. -*/ -double atanh( double x ); -float atanhf( float x ); -long double atanhl( long double x ); - -/* The hyberbolic cosine of x. - Range error if magnitude of x is too large. -*/ -double cosh( double x ); -float coshf( float x ); -long double coshl( long double x ); - -/* The hyberbolic sine of x. - Range error if magnitude of x is too large. -*/ -double sinh( double x ); -float sinhf( float x ); -long double sinhl( long double x ); - -/* The hyberbolic tangent of x. - Range error if magnitude of x is too large. -*/ -double tanh( double x ); -float tanhf( float x ); -long double tanhl( long double x ); - -/* Exponential and logarithmic functions */ - -/* The base-e exponential of x. - Range error if magnitude of x is too large. -*/ -double exp( double x ); -float expf( float x ); -long double expl( long double x ); - -/* The base-2 exponential of x. - Range error if magnitude of x is too large. -*/ -double exp2( double x ); -float exp2f( float x ); -long double exp2l( long double x ); - -/* The base-e exponential of x, minus 1. - Range error if magnitude of x is too large. - Returns e^x - 1. -*/ -double expm1( double x ); -float expm1f( float x ); -long double expm1l( long double x ); - -/* Breaks a floating-point number into a normalized fraction - and an integral power of 2 (stored in the object pointed - to by exp). -*/ -double frexp( double value, int * exp ); -float frexpf( float value, int * exp ); -long double frexpl( long double value, int * exp ); - -/* Extract the exponent of x as a signed int. - * Returns FP_ILOGB0 if x is zero, INT_MAX if x is infinite, - * FP_ILOGBNAN if x is a NaN. Range error may occur if x is 0. -*/ -double ilogb( double x ); -float ilogbf( float x ); -long double ilogbl( long double x ); - -/* Multiply x by 2^exp. Range error may occur. */ -double ldexp( double x, int exp ); -float ldexpf( float x, int exp ); -long double ldexpl( long double x, int exp ); - -/* Compute the base-e logarithm of x. - Domain error if argument is negative. - Range error if argument is zero. -*/ -double log( double x ); -float logf( float x ); -long double logl( long double x ); - -/* Compute the base-10 logarithm of x. - Domain error if argument is negative. - Range error if argument is zero. -*/ -double log10( double x ); -float log10f( float x ); -long double log10l( long double x ); - -/* Compute the base-e logarithm of 1 plus x. - Domain error if argument is less than -1. - Range error if argument is -1. -*/ -double log1p( double x ); -float log1pf( float x ); -long double log1pl( long double x ); - -/* Compute the base-2 logarithm of x. - Domain error if argument is negative. - Range error if argument is zero. -*/ -double log2( double x ); -float log2f( float x ); -long double log2l( long double x ); - -/* Extract exponent of x, as signed integer in floating-point format. - Subnormal is treated as though normalized. - Domain error if argument is zero. -*/ -double logb( double x ); -float logbf( float x ); -long double logbl( long double x ); - -/* Breaks value into integral and fractional parts, each having - the same type and sign as the argument. The integral part is - stored in the object pointed to by iptr. -*/ -double modf( double value, double * exp ); -float modff( float value, float * exp ); -long double modfl( long double value, long double * exp ); - -/* Compute x * FLT_RADIX^n efficiently. Range error may occur. */ -double scalbn( double x, int n ); -float scalbnf( float x, int n ); -long double scalbnl( long double x, int n ); - -double scalbln( double x, long int * n ); -float scalblnf( float x, long int * n ); -long double scalblnl( long double x, long int * n ); - -/* Power and absolute-value functions */ - -/* Returns x^1/3. */ -double cbrt( double x ); -float cbrtf( float x ); -long double cbrtl( long double x ); - -/* Returns absolute value of x. */ -double fabs( double x ); -float fabsf( float x ); -long double fabsl( long double x ); - -/* Returns square root of the sum of squares of x and y. - Range error may occur. -*/ -double hypot( double x, double y ); -float hypotf( float x, float y ); -long double hypotl( long double x, long double y ); - -/* Returns x^y. - Domain error if x is finite and negative and y is finite and not - an integer value. - Domain error if x is zero and y is less or equal zero. - Range error may occur. -*/ -double pow( double x, double y ); -float powf( float x, float y ); -long double powl( long double x, long double y ); - -/* Returns x^1/2. */ -double sqrt( double x ); -float sqrtf( float x ); -long double sqrtl( long double x ); - -/* Error and gamma functions */ - -/* Compute the error function of x. */ -double erf( double x ); -float erff( float x ); -long double erfl( long double x ); - -/* Compute the complementary error function of x. - Range error if x is too large. -*/ -double erfc( double x ); -float erfcf( float x ); -long double erfcl( long double x ); - -/* Compute the natural logarithm of the absolute value of gamma(x). - Range error if x is too lange, x is negative, or zero. -*/ -double lgamma( double x ); -float lgammaf( float x ); -long double lgammal( long double x ); - -/* Compute the gamma function of x. - Range error if x is negative, or zero, too large or too small. -*/ -double tgamma( double x ); -float tgammaf( float x ); -long double tgammal( long double x ); - -/* Nearest integer functions */ - -/* The smallest integer no less than x. */ -double ceil( double x ); -float ceilf( float x ); -long double ceill( long double x ); - -/* The largest integer no greater than x. */ -double floor( double x ); -float floorf( float x ); -long double floorl( long double x ); - -/* Round in current rounding direction. No "inexact" exception. */ -double nearbyint( double x ); -float nearbyintf( float x ); -long double nearbyintl( long double x ); - -/* Round in current rounding direction. Raises "inexact" exception. */ -double rint( double x ); -float rintf( float x ); -long double rintl( long double x ); - -/* Round in current rounding direction. - Range error if magnitude is too large. -*/ -long int lrint( double x ); -long int lrintf( float x ); -long int lrintl( long double x ); -long long int llrint( double x ); -long long int llrintf( float x ); -long long int llrintl( long double x ); - -/* Round to nearest, breaking ties away from zero. */ -double round( double x ); -float roundf( float x ); -long double roundl( long double x ); - -/* Round to nearest, breaking ties away from zero. - Range error if magnitude is too large. -*/ -long int lround( double x ); -long int lroundf( float x ); -long int lroundl( long double x ); -long long int llround( double x ); -long long int llroundf( float x ); -long long int llroundl( long double x ); - -/* Round toward zero. */ -double trunc( double x ); -float truncf( float x ); -long double truncl( long double x ); - -/* Remainder functions */ - -/* Compute the remainder of x / y. */ -double fmod( double x, double y ); -float fmodf( float x, float y ); -long double fmodl( long double x, long double y ); - -/* Compute the remainder of x REM y. */ -double remainder( double x, double y ); -float remainderf( float x, float y ); -long double remainderl( long double x, long double y ); - -/* Compute the remainder of x REM y. In quo store a value with - the sign of the quotient and magnitude congruent mod 2^n to - the magnitude of the integral quotient of x / y, with n - an implementation-defined integer greater than or equal to 3. -*/ -double rmquo( double x, double y ); -float rmquof( float x, float y ); -long double rmquol( long double x, long double y ); - -/* Manipulation functions */ - -/* Returns a value with magnitude of x and sign of y. */ -double copysign( double x, double y ); -float copysignf( float x, float y ); -long double copysignl( long double x, long double y ); - -/* Returns a NaN value with the given n-char sequence. */ -double nan( const char * tagp ); -float nanf( const char * tagp ); -long double nanl( const char * tagp ); - -/* Determine the next representable value after x in direction y. - Range error if result is not representable. -*/ -double nextafter( double x, double y ); -float nextafterf( float x, float y ); -long double nextafterl( long double x, long double y ); - -/* As nextafter but with long double as second parameter. */ -double nexttoward( double x, double y ); -float nexttowardf( float x, float y ); -long double nexttowardl( long double x, long double y ); - -/* Maximum, minimum, and positive difference functions */ - -/* Positive difference. */ -double fdim( double x, double y ); -float fdimf( float x, float y ); -long double fdiml( long double x, long double y ); - -/* Maximum. */ -double fmax( double x, double y ); -float fmaxf( float x, float y ); -long double fmaxl( long double x, long double y ); - -/* Minimum. */ -double fmin( double x, double y ); -float fminf( float x, float y ); -long double fminl( long double x, long double y ); - -/* Multiply-add. */ -double fma( double x, double y, double z ); -float fmaf( float x, float y, float z ); -long double fmal( long double x, long double y, long double z ); - -/* Comparison macros (without "invalid" FP exception) */ - -#define isgreater( x, y ) - -#define isgreaterequal( x, y ) - -#define isless( x, y ) - -#define islessequal( x, y ) - -#define islessgreater( x, y ) - -#define isunordered( x, y ) - -#ifdef __cplusplus -} -#endif - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_MATH_H -#include _PDCLIB_EXTEND_MATH_H -#endif - -#endif diff --git a/sysroot/usr/include/pdclib/_PDCLIB_config.h b/sysroot/usr/include/pdclib/_PDCLIB_config.h deleted file mode 100644 index 653f89e..0000000 --- a/sysroot/usr/include/pdclib/_PDCLIB_config.h +++ /dev/null @@ -1,915 +0,0 @@ -/* Internal PDCLib configuration <_PDCLIB_config.h> - ("Example" platform target, for PDCLib development) - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_CONFIG_H -#define _PDCLIB_CONFIG_H _PDCLIB_CONFIG_H - -/* -------------------------------------------------------------------------- */ -/* Misc */ -/* -------------------------------------------------------------------------- */ - -/* Helper macros also documented in _PDCLIB_internal.h, but defined here as */ -/* they are needed in this file already. */ -/* _PDCLIB_cc( x, y ) concatenates two preprocessor tokens without extending. */ -/* _PDCLIB_concat( x, y ) concatenates two preprocessor tokens with extending */ -#define _PDCLIB_cc( x, y ) x ## y -#define _PDCLIB_concat( x, y ) _PDCLIB_cc( x, y ) - -/* exit() can signal success to the host environment by the value of zero or */ -/* the constant EXIT_SUCCESS. Failure is signaled by EXIT_FAILURE. Note that */ -/* any other return value is "implementation-defined", i.e. your environment */ -/* is not required to handle it gracefully. Set your definitions here. */ -#define _PDCLIB_SUCCESS 0 -#define _PDCLIB_FAILURE -1 - -/* qsort() in requires a function that swaps two memory areas. */ -/* Below is a naive implementation that can be improved significantly for */ -/* specific platforms, e.g. by swapping int instead of char. */ -#define _PDCLIB_memswp( i, j, size ) \ - char tmp; \ - do { \ - tmp = *i; \ - *i++ = *j; \ - *j++ = tmp; \ - } while ( --size ); - -/* Define this to some compiler directive that can be written after the */ -/* parameter list of a function declaration to indicate the function does */ -/* never return. If your compiler does not support such a directive, define */ -/* to nothing. (This is to avoid warnings with the exit functions under GCC */ -/* when compiling with C99/C++ settings, where C11 _Noreturn is unavailable.) */ -#define _PDCLIB_NORETURN __attribute__(( noreturn )) - -/* -------------------------------------------------------------------------- */ -/* Symbol Visibility */ -/* -------------------------------------------------------------------------- */ - -/* This defines _PDCLIB_PUBLIC to indicate external linkage, and _PDCLIB_LOCAL - to indicate local linkage. -*/ - -#ifdef _PDCLIB_STATIC_DEFINE - #define _PDCLIB_PUBLIC - #define _PDCLIB_LOCAL -#else - #if defined _WIN32 || defined __CYGWIN__ - #ifdef _PDCLIB_BUILD - #ifdef __GNUC__ - #define _PDCLIB_PUBLIC __attribute__ ((dllexport)) - #else - #define _PDCLIB_PUBLIC __declspec(dllexport) - #endif - #else - #ifdef __GNUC__ - #define _PDCLIB_PUBLIC __attribute__ ((dllimport)) - #else - #define _PDCLIB_PUBLIC __declspec(dllimport) - #endif - #endif - #define _PDCLIB_LOCAL - #else - #if __GNUC__ >= 4 - #define _PDCLIB_PUBLIC __attribute__ ((visibility ("default"))) - #define _PDCLIB_LOCAL __attribute__ ((visibility ("hidden"))) - #else - #define _PDCLIB_PUBLIC - #define _PDCLIB_LOCAL - #endif - #endif -#endif - -/* -------------------------------------------------------------------------- */ -/* Integers */ -/* -------------------------------------------------------------------------- */ -/* The defines below make use of predefines offered by GCC and clang. If you */ -/* adapt PDCLib for a different compiler family, you will have to use what */ -/* that compiler provides, or enter actual values. */ -/* -------------------------------------------------------------------------- */ - -/* At the point of writing, PDCLib makes no provisions for, nor has it been */ -/* tested, on a platform that uses signed magnitude or one's complement to */ -/* encode its integers. Most importantly, there are no guarantees that the */ -/* negative zero of those encodings is in any form handled gracefully. */ -#define _PDCLIB_TWOS_COMPLEMENT 1 - -/* 1234 for little endian, 4321 for big endian; other types not supported. */ -#define _PDCLIB_ENDIANESS __BYTE_ORDER__ - -/* Calculation of a minimum value from a given maximum for two's complement. */ -/* (For convenience only, used only in this header file below.) */ -#define _PDCLIB_MIN_CALC( max ) ( ( - max ) - 1 ) - -/* Now, introducting the various predefines to the _PDCLIB_* namespace, so */ -/* the rest of PDCLib can work with that and adapting to a different compiler */ -/* will require changes only in this one file. */ - -/* Bits in a char */ -#define _PDCLIB_CHAR_BIT __CHAR_BIT__ - -/* Maximum and minimum values of signed / unsigned char */ -#define _PDCLIB_SCHAR_MAX __SCHAR_MAX__ -#define _PDCLIB_SCHAR_MIN _PDCLIB_MIN_CALC( __SCHAR_MAX__ ) -#define _PDCLIB_UCHAR_MAX ( __SCHAR_MAX__ * 2 + 1 ) - -/* Whether the 'char' type is unsigned */ -#ifdef __CHAR_UNSIGNED__ -#define _PDCLIB_CHAR_MAX _PDCLIB_UCHAR_MAX -#define _PDCLIB_CHAR_MIN 0 -#else -#define _PDCLIB_CHAR_MAX _PDCLIB_SCHAR_MAX -#define _PDCLIB_CHAR_MIN _PDCLIB_SCHAR_MIN -#endif - -/* Maximum and minimum values of signed / unsigned short */ -#define _PDCLIB_SHRT_MAX __SHRT_MAX__ -#define _PDCLIB_SHRT_MIN _PDCLIB_MIN_CALC( __SHRT_MAX__ ) -#define _PDCLIB_USHRT_MAX ( __SHRT_MAX__ * 2u + 1 ) - -/* Maximum and minimum values of signed / unsigned int */ -#define _PDCLIB_INT_MAX __INT_MAX__ -#define _PDCLIB_INT_MIN _PDCLIB_MIN_CALC( __INT_MAX__ ) -#define _PDCLIB_UINT_MAX ( __INT_MAX__ * 2u + 1 ) - -/* Maximum and minimum values of signed / unsigned long */ -#define _PDCLIB_LONG_MAX __LONG_MAX__ -#define _PDCLIB_LONG_MIN _PDCLIB_MIN_CALC( __LONG_MAX__ ) -#define _PDCLIB_ULONG_MAX ( __LONG_MAX__ * 2ul + 1 ) - -/* Maximum and minimum values of signed / unsigned long long */ -#define _PDCLIB_LLONG_MAX __LONG_LONG_MAX__ -#define _PDCLIB_LLONG_MIN _PDCLIB_MIN_CALC( __LONG_LONG_MAX__ ) -#define _PDCLIB_ULLONG_MAX ( __LONG_LONG_MAX__ * 2ull + 1 ) - -/* -------------------------------------------------------------------------- */ -/* defines a set of integer types that are of a minimum width, and */ -/* "usually fastest" on the system. (If, for example, accessing a single char */ -/* requires the CPU to access a complete int and then mask out the char, the */ -/* "usually fastest" type of at least 8 bits would be int, not char.) */ -/* If you do not have information on the relative performance of the types, */ -/* the standard allows you to define any type that meets minimum width and */ -/* signedness requirements. */ -/* The first define is the appropriate basic type (e.g. "long int"), second */ -/* its max value, the third its min value (both expressed in the given type). */ -/* The same follows for the unsigned type (for which the minimum value is */ -/* obviously zero and need not be defined). */ -/* There *are* predefines provided for the printf()/scanf() length specifiers */ -/* but tunneling them through here would have added many lines of repetitive */ -/* and mostly redundant defines. They are determined in <_PDCLIB_internal.h>. */ -/* -------------------------------------------------------------------------- */ - -/* int_fast8_t / uint_fast8_t */ -#define _PDCLIB_int_fast8_t __INT_FAST8_TYPE__ -#define _PDCLIB_INT_FAST8_MAX __INT_FAST8_MAX__ -#define _PDCLIB_INT_FAST8_MIN _PDCLIB_MIN_CALC( __INT_FAST8_MAX__ ) -#define _PDCLIB_uint_fast8_t __UINT_FAST8_TYPE__ -#define _PDCLIB_UINT_FAST8_MAX __UINT_FAST8_MAX__ - -/* int_least8_t / uint_least8_t */ -#define _PDCLIB_int_least8_t __INT_LEAST8_TYPE__ -#define _PDCLIB_INT_LEAST8_MAX __INT_LEAST8_MAX__ -#define _PDCLIB_INT_LEAST8_MIN _PDCLIB_MIN_CALC( __INT_LEAST8_MAX__ ) -#define _PDCLIB_uint_least8_t __UINT_LEAST8_TYPE__ -#define _PDCLIB_UINT_LEAST8_MAX __UINT_LEAST8_MAX__ - -/* int_fast16_t / uint_fast16_t */ -#define _PDCLIB_int_fast16_t __INT_FAST16_TYPE__ -#define _PDCLIB_INT_FAST16_MAX __INT_FAST16_MAX__ -#define _PDCLIB_INT_FAST16_MIN _PDCLIB_MIN_CALC( __INT_FAST16_MAX__ ) -#define _PDCLIB_uint_fast16_t __UINT_FAST16_TYPE__ -#define _PDCLIB_UINT_FAST16_MAX __UINT_FAST16_MAX__ - -/* int_least16_t / uint_least16_t */ -#define _PDCLIB_int_least16_t __INT_LEAST16_TYPE__ -#define _PDCLIB_INT_LEAST16_MAX __INT_LEAST16_MAX__ -#define _PDCLIB_INT_LEAST16_MIN _PDCLIB_MIN_CALC( __INT_LEAST16_MAX__ ) -#define _PDCLIB_uint_least16_t __UINT_LEAST16_TYPE__ -#define _PDCLIB_UINT_LEAST16_MAX __UINT_LEAST16_MAX__ - -/* int_fast32_t / uint_fast32_t */ -#define _PDCLIB_int_fast32_t __INT_FAST32_TYPE__ -#define _PDCLIB_INT_FAST32_MAX __INT_FAST32_MAX__ -#define _PDCLIB_INT_FAST32_MIN _PDCLIB_MIN_CALC( __INT_FAST32_MAX__ ) -#define _PDCLIB_uint_fast32_t __UINT_FAST32_TYPE__ -#define _PDCLIB_UINT_FAST32_MAX __UINT_FAST32_MAX__ - -/* int_least32_t / uint_least32_t */ -#define _PDCLIB_int_least32_t __INT_LEAST32_TYPE__ -#define _PDCLIB_INT_LEAST32_MAX __INT_LEAST32_MAX__ -#define _PDCLIB_INT_LEAST32_MIN _PDCLIB_MIN_CALC( __INT_LEAST32_MAX__ ) -#define _PDCLIB_uint_least32_t __UINT_LEAST32_TYPE__ -#define _PDCLIB_UINT_LEAST32_MAX __UINT_LEAST32_MAX__ - -/* int_fast64_t / uint_fast64_t */ -#define _PDCLIB_int_fast64_t __INT_FAST64_TYPE__ -#define _PDCLIB_INT_FAST64_MAX __INT_FAST64_MAX__ -#define _PDCLIB_INT_FAST64_MIN _PDCLIB_MIN_CALC( __INT_FAST64_MAX__ ) -#define _PDCLIB_uint_fast64_t __UINT_FAST64_TYPE__ -#define _PDCLIB_UINT_FAST64_MAX __UINT_FAST64_MAX__ - -/* int_least64_t / uint_least64_t */ -#define _PDCLIB_int_least64_t __INT_LEAST64_TYPE__ -#define _PDCLIB_INT_LEAST64_MAX __INT_LEAST64_MAX__ -#define _PDCLIB_INT_LEAST64_MIN _PDCLIB_MIN_CALC( __INT_LEAST64_MAX__ ) -#define _PDCLIB_uint_least64_t __UINT_LEAST64_TYPE__ -#define _PDCLIB_UINT_LEAST64_MAX __UINT_LEAST64_MAX__ - -/* Exact-width integer types. These are *optional*. If your platform does not */ -/* support types of these exact widths in two's complement encoding, just */ -/* leave them undefined. */ -#define _PDCLIB_int8_t __INT8_TYPE__ -#define _PDCLIB_int16_t __INT16_TYPE__ -#define _PDCLIB_int32_t __INT32_TYPE__ -#define _PDCLIB_int64_t __INT64_TYPE__ -#define _PDCLIB_uint8_t __UINT8_TYPE__ -#define _PDCLIB_uint16_t __UINT16_TYPE__ -#define _PDCLIB_uint32_t __UINT32_TYPE__ -#define _PDCLIB_uint64_t __UINT64_TYPE__ - -/* INTn_C / UINTn_C macros to define int_leastN_t / uint_leastN_t literals. */ -#if defined( __INT8_C ) -/* GCC */ -#define _PDCLIB_INT_LEAST8_C __INT8_C -#define _PDCLIB_UINT_LEAST8_C __UINT8_C -#define _PDCLIB_INT_LEAST16_C __INT16_C -#define _PDCLIB_UINT_LEAST16_C __UINT16_C -#define _PDCLIB_INT_LEAST32_C __INT32_C -#define _PDCLIB_UINT_LEAST32_C __UINT32_C -#define _PDCLIB_INT_LEAST64_C __INT64_C -#define _PDCLIB_UINT_LEAST64_C __UINT64_C -#elif defined( __INT8_C_SUFFIX__ ) -/* Clang */ -#define _PDCLIB_INT_LEAST8_C(c) _PDCLIB_concat( c, __INT8_C_SUFFIX__ ) -#define _PDCLIB_UINT_LEAST8_C(c) _PDCLIB_concat( c, __UINT8_C_SUFFIX__ ) -#define _PDCLIB_INT_LEAST16_C(c) _PDCLIB_concat( c, __INT16_C_SUFFIX__ ) -#define _PDCLIB_UINT_LEAST16_C(c) _PDCLIB_concat( c, __UINT16_C_SUFFIX__ ) -#define _PDCLIB_INT_LEAST32_C(c) _PDCLIB_concat( c, __INT32_C_SUFFIX__ ) -#define _PDCLIB_UINT_LEAST32_C(c) _PDCLIB_concat( c, __UINT32_C_SUFFIX__ ) -#define _PDCLIB_INT_LEAST64_C(c) _PDCLIB_concat( c, __INT64_C_SUFFIX__ ) -#define _PDCLIB_UINT_LEAST64_C(c) _PDCLIB_concat( c, __UINT64_C_SUFFIX__ ) -#else -#error Please create your own _PDCLIB_config.h. Using the existing one as-is will not work. (Unsupported *INTn_C macros.) -#endif - -/* defines the div() function family that allows taking quotient */ -/* and remainder of an integer division in one operation. Many platforms */ -/* support this in hardware / opcode, and the standard permits ordering of */ -/* the return structure in any way to fit the hardware. That is why those */ -/* structs can be configured here. */ - -struct _PDCLIB_div_t -{ - int quot; - int rem; -}; - -struct _PDCLIB_ldiv_t -{ - long int quot; - long int rem; -}; - -struct _PDCLIB_lldiv_t -{ - long long int quot; - long long int rem; -}; - -/* -------------------------------------------------------------------------- */ -/* What follows are a couple of "special" typedefs and their limits. */ -/* -------------------------------------------------------------------------- */ - -/* The result type of substracting two pointers */ -#define _PDCLIB_ptrdiff_t __PTRDIFF_TYPE__ -#define _PDCLIB_PTRDIFF_MAX __PTRDIFF_MAX__ -#define _PDCLIB_PTRDIFF_MIN _PDCLIB_MIN_CALC( __PTRDIFF_MAX__ ) - -/* An integer type that can be accessed as atomic entity (think asynchronous */ -/* interrupts). In a freestanding environment, the type itself need not be */ -/* defined, but its limits must. (Don't ask.) GCC is so kind to predefine it, */ -/* but clang is only giving us its MAX value, so we use that to identify the */ -/* type in _PDCLIB_int.h if the type definition is unavailable. */ -#ifdef __SIG_ATOMIC_TYPE__ -#define _PDCLIB_sig_atomic_t __SIG_ATOMIC_TYPE__ -#endif -#define _PDCLIB_SIG_ATOMIC_MAX __SIG_ATOMIC_MAX__ -#define _PDCLIB_SIG_ATOMIC_MIN _PDCLIB_MIN_CALC( __SIG_ATOMIC_MAX__ ) - -/* Result type of the 'sizeof' operator (must be unsigned). */ -/* Note: In , this is taken as the base for RSIZE_MAX, the limit */ -/* for the bounds-checking interfaces of Annex K. The recommendation by the */ -/* standard is to use ( SIZE_MAX >> 1 ) when "targeting machines with large */ -/* addess spaces", whereas small address spaces should use SIZE_MAX directly. */ -#define _PDCLIB_size_t __SIZE_TYPE__ -#define _PDCLIB_SIZE_MAX __SIZE_MAX__ - -/* Large enough an integer to hold all character codes of the widest */ -/* supported locale. */ -#define _PDCLIB_wchar_t __WCHAR_TYPE__ -#define _PDCLIB_WCHAR_MAX __WCHAR_MAX__ -#define _PDCLIB_WCHAR_MIN __WCHAR_MIN__ - -/* Large enough an integer to hold all character codes of the widest */ -/* supported locale plus WEOF (which needs not to be equal to EOF, nor needs */ -/* to be of negative value). */ -#define _PDCLIB_wint_t __WINT_TYPE__ -#define _PDCLIB_WINT_MAX __WINT_MAX__ -#define _PDCLIB_WINT_MIN __WINT_MIN__ - -/* Integer types capable of taking the (cast) value of a void *, and having */ -/* the value cast back to void *, comparing equal to the original. */ -#define _PDCLIB_intptr_t __INTPTR_TYPE__ -#define _PDCLIB_INTPTR_MAX __INTPTR_MAX__ -#define _PDCLIB_INTPTR_MIN _PDCLIB_MIN_CALC( __INTPTR_MAX__ ) -#define _PDCLIB_uintptr_t __UINTPTR_TYPE__ -#define _PDCLIB_UINTPTR_MAX __UINTPTR_MAX__ - -/* Largest supported integer type. Implementation note: see _PDCLIB_atomax(). */ -#define _PDCLIB_intmax_t __INTMAX_TYPE__ -#define _PDCLIB_INTMAX_MAX __INTMAX_MAX__ -#define _PDCLIB_INTMAX_MIN _PDCLIB_MIN_CALC( __INTMAX_MAX__ ) -#define _PDCLIB_INTMAX_C __INTMAX_C -#define _PDCLIB_uintmax_t __UINTMAX_TYPE__ -#define _PDCLIB_UINTMAX_MAX __UINTMAX_MAX__ -#define _PDCLIB_UINTMAX_C __UINTMAX_C - -/* defines imaxdiv(), which is equivalent to the div() function */ -/* family (see further above) with intmax_t as basis. */ -struct _PDCLIB_imaxdiv_t -{ - _PDCLIB_intmax_t quot; - _PDCLIB_intmax_t rem; -}; - -/* -------------------------------------------------------------------------- */ -/* Time types, limits, constants, and paths */ -/* -------------------------------------------------------------------------- */ - -/* _PDCLIB_time is the type for type_t; _PDCLIB_clock for clock_t. Both types */ -/* are defined as "real types capable of representing times". The "range and */ -/* precision of times representable" is implementation-defined. */ - -/* For clock_t, the standard defines that dividing the result of clock() by */ -/* CLOCKS_PER_SEC gives the seconds elapsed. */ -#ifdef __CYGWIN__ -#define _PDCLIB_clock_t unsigned long -#else -#define _PDCLIB_clock_t long -#endif -#define _PDCLIB_CLOCKS_PER_SEC 1000000 - -/* For time_t, no such divider exists. Most implementations use a count of */ -/* seconds since a specified epoch. While PDCLib really should support other */ -/* encodings as well, for now "count of seconds" is the only supported one. */ -/* MIN / MAX values for time_t are not required by the standard (and they are */ -/* not "exported" from the _PDCLIB namespace), but they are useful in support */ -/* of the _tzcode implementation. */ -#ifdef __MINGW64__ -#define _PDCLIB_time_t long long -#define _PDCLIB_TIME_MAX __LONG_LONG_MAX__ -#define _PDCLIB_TIME_MIN _PDCLIB_MIN_CALC( __LONG_LONG_MAX__ ) -#else -#define _PDCLIB_time_t long -#define _PDCLIB_TIME_MAX __LONG_MAX__ -#define _PDCLIB_TIME_MIN _PDCLIB_MIN_CALC( __LONG_MAX__ ) -#endif - -/* "Unix time" uses 1970-01-01T00:00:00 as "epoch". If your system uses a */ -/* different "zero point" for its timestamps, set this to the offset between */ -/* your epoch and Unix epoch. (For example, NTP uses 1900-01-01T00:00:00 as */ -/* epoch, giving an offset of (70 * 365 + 17) * 86400 = 220898800 seconds.) */ -#define _PDCLIB_EPOCH_BIAS INT64_C( 0 ) - -/* Leave this alone for now. */ -#define _PDCLIB_TIME_UTC 1 - -/* Path to TZ data. */ -/* IMPORTANT: *Must* end with separator character! */ -/* It does make it much easier for the time data handling code if this detail */ -/* can be relied upon and need not be handled in code. */ -#define _PDCLIB_TZDIR "/usr/share/zoneinfo/" - -/* Path to default (local) timezone */ -#define _PDCLIB_TZDEFAULT "/etc/localtime" - -/* -------------------------------------------------------------------------- */ -/* Floating Point */ -/* -------------------------------------------------------------------------- */ - -/* Whether the implementation rounds toward zero (0), to nearest (1), toward */ -/* positive infinity (2), or toward negative infinity (3). (-1) signifies */ -/* indeterminable rounding, any other value implementation-specific rounding. */ -#define _PDCLIB_FLT_ROUNDS -1 - -/* Check for explanations on each of these values. */ -#define _PDCLIB_FLT_EVAL_METHOD __FLT_EVAL_METHOD__ - -#define _PDCLIB_FLT_HAS_SUBNORM __FLT_HAS_DENORM__ -#define _PDCLIB_DBL_HAS_SUBNORM __DBL_HAS_DENORM__ -#define _PDCLIB_LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__ - -#define _PDCLIB_FLT_RADIX __FLT_RADIX__ - -#define _PDCLIB_FLT_MANT_DIG __FLT_MANT_DIG__ -#define _PDCLIB_DBL_MANT_DIG __DBL_MANT_DIG__ -#define _PDCLIB_LDBL_MANT_DIG __LDBL_MANT_DIG__ - -#define _PDCLIB_FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__ -#define _PDCLIB_DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__ -#define _PDCLIB_LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__ - -#define _PDCLIB_DECIMAL_DIG __DECIMAL_DIG__ - -#define _PDCLIB_FLT_DIG __FLT_DIG__ -#define _PDCLIB_DBL_DIG __DBL_DIG__ -#define _PDCLIB_LDBL_DIG __LDBL_DIG__ - -#define _PDCLIB_FLT_MIN_EXP __FLT_MIN_EXP__ -#define _PDCLIB_DBL_MIN_EXP __DBL_MIN_EXP__ -#define _PDCLIB_LDBL_MIN_EXP __LDBL_MIN_EXP__ - -#define _PDCLIB_FLT_MIN_10_EXP __FLT_MIN_10_EXP__ -#define _PDCLIB_DBL_MIN_10_EXP __DBL_MIN_10_EXP__ -#define _PDCLIB_LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ - -#define _PDCLIB_FLT_MAX_EXP __FLT_MAX_EXP__ -#define _PDCLIB_DBL_MAX_EXP __DBL_MAX_EXP__ -#define _PDCLIB_LDBL_MAX_EXP __LDBL_MAX_EXP__ - -#define _PDCLIB_FLT_MAX_10_EXP __FLT_MAX_10_EXP__ -#define _PDCLIB_DBL_MAX_10_EXP __DBL_MAX_10_EXP__ -#define _PDCLIB_LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ - -#define _PDCLIB_FLT_MAX __FLT_MAX__ -#define _PDCLIB_DBL_MAX __DBL_MAX__ -#define _PDCLIB_LDBL_MAX __LDBL_MAX__ - -#define _PDCLIB_FLT_EPSILON __FLT_EPSILON__ -#define _PDCLIB_DBL_EPSILON __DBL_EPSILON__ -#define _PDCLIB_LDBL_EPSILON __LDBL_EPSILON__ - -#define _PDCLIB_FLT_MIN __FLT_MIN__ -#define _PDCLIB_DBL_MIN __DBL_MIN__ -#define _PDCLIB_LDBL_MIN __LDBL_MIN__ - -#define _PDCLIB_FLT_TRUE_MIN __FLT_DENORM_MIN__ -#define _PDCLIB_DBL_TRUE_MIN __DBL_DENORM_MIN__ -#define _PDCLIB_LDBL_TRUE_MIN __LDBL_DENORM_MIN__ - -/* Macros for deconstructing floating point values */ -/* This assumes that the floating point value has been memcpy'd into an array */ -/* of _PDCLIB_bigint_digit_t (see _PDCLIB_bigint_from_*dbl.c with the array */ -/* passed to the macro as parameter. */ -#define _PDCLIB_FLT_SIGN( data ) ( ( data[1] & 0x8000 ) >> 15 ) -#define _PDCLIB_FLT_EXP( data ) ( ( data[1] & 0x7f80 ) >> 7 ) -#define _PDCLIB_FLT_SIZE( data ) ( data[1] &= 0x007f, 2 ) - -#define _PDCLIB_DBL_SIGN( data ) ( ( data[3] & 0x8000 ) >> 15 ) -#define _PDCLIB_DBL_EXP( data ) ( ( data[3] & 0x7ff0u ) >> 4 ) -#define _PDCLIB_DBL_SIZE( data ) ( data[3] &= 0x000fu, 4 ) - -/* Most platforms today use IEEE 754 single precision for 'float', and double */ -/* precision for 'double'. But type 'long double' varies. We use what the */ -/* compiler states about LDBL_MANT_DIG to determine the type. */ -#if _PDCLIB_LDBL_MANT_DIG == 64 - -/* Intel "Extended Precision" format, using 80 bits (64bit mantissa) */ -#define _PDCLIB_LDBL_SIGN( data ) ( ( data[4] & 0x8000u ) >> 15 ) -#define _PDCLIB_LDBL_EXP( data ) ( data[4] & 0x7fffu ) -#define _PDCLIB_LDBL_SIZE( data ) ( data[3] &= 0x7fffu, 4 ) - -#elif _PDCLIB_LDBL_MANT_DIG == 113 - -/* IEEE "Quadruple Precision" format, using 128 bits (113bit mantissa) */ -#define _PDCLIB_LDBL_SIGN( data ) ( ( data[7] & 0x8000u ) >> 15 ) -#define _PDCLIB_LDBL_EXP( data ) ( data[7] & 0x7fffu ) -#define _PDCLIB_LDBL_SIZE( data ) 7 - -#else - -/* IEEE "Double Precision" format, using 64 bits (53bit mantissa) */ -/* (Same as DBL above) */ -#define _PDCLIB_LDBL_SIGN( data ) ( ( data[3] & 0x8000 ) >> 15 ) -#define _PDCLIB_LDBL_EXP( data ) ( ( data[3] & 0x7ff0u ) >> 4 ) -#define _PDCLIB_LDBL_SIZE( data ) ( data[3] &= 0x000fu, 4 ) - -#endif - -/* Given the definitions for *_MANT_START above, which resolve to "pointer - to most dignificant byte of mantissa", the operand to use to get at the - less significant bytes. (That would be - for i386, x86_64, and ARM.) -*/ -#define _PDCLIB_FLT_OP - - -/* -------------------------------------------------------------------------- */ -/* Big Integer Arithmetic */ -/* -------------------------------------------------------------------------- */ -/* In support of the floating point converstions required by printf() etc., */ -/* PDCLib provides rudimentary big integer arithmetics. The _PDCLIB_bigint_t */ -/* type stores values in a sequence of integer "digits", which may be of any */ -/* uint_leastN_t type with N being 32 or 16. Note that multiplication and */ -/* division require the help of the next larger type. So set the define to */ -/* 32 if efficient 64bit integer arithmetics are available on your platform, */ -/* and to 16 otherwise. */ -/* (The value range of _PDCLIB_bigint_t is not affected by this setting.) */ - -#define _PDCLIB_BIGINT_DIGIT_BITS 16 - -/* -------------------------------------------------------------------------- */ -/* Platform-dependent macros defined by the standard headers. */ -/* -------------------------------------------------------------------------- */ - -/* The offsetof macro */ -/* Contract: Expand to an integer constant expression of type size_t, which */ -/* represents the offset in bytes to the structure member from the beginning */ -/* of the structure. If the specified member is a bitfield, behaviour is */ -/* undefined. */ -/* There is no standard-compliant way to do this. */ -/* This implementation casts an integer zero to 'pointer to type', and then */ -/* takes the address of member. This is undefined behaviour but should work */ -/* on most compilers. */ -#define _PDCLIB_offsetof( type, member ) ( (size_t) &( ( (type *) 0 )->member ) ) - -/* Variable Length Parameter List Handling () */ -/* The macros defined by are highly dependent on the calling */ -/* conventions used, and you probably have to replace them with builtins of */ -/* your compiler. */ - -#if defined( __i386 ) - -/* The following generic implementation works only for pure stack-based */ -/* architectures, and only if arguments are aligned to pointer type. Credits */ -/* to Michael Moody, who contributed this to the Public Domain. */ - -/* Internal helper macro. va_round is not part of . */ -#define _PDCLIB_va_round( type ) ( (sizeof(type) + sizeof(void *) - 1) & ~(sizeof(void *) - 1) ) - -typedef char * _PDCLIB_va_list; -#define _PDCLIB_va_arg( ap, type ) ( (ap) += (_PDCLIB_va_round(type)), ( *(type*) ( (ap) - (_PDCLIB_va_round(type)) ) ) ) -#define _PDCLIB_va_copy( dest, src ) ( (dest) = (src), (void)0 ) -#define _PDCLIB_va_end( ap ) ( (ap) = (void *)0, (void)0 ) -#define _PDCLIB_va_start( ap, parmN ) ( (ap) = (char *) &parmN + ( _PDCLIB_va_round(parmN) ), (void)0 ) - -#elif defined( __x86_64 ) || defined( __arm__ ) || defined( __ARM_NEON ) - -/* No way to cover x86_64 or arm with a generic implementation, as it uses */ -/* register-based parameter passing. Using compiler builtins here. */ -typedef __builtin_va_list _PDCLIB_va_list; -#define _PDCLIB_va_arg( ap, type ) ( __builtin_va_arg( ap, type ) ) -#define _PDCLIB_va_copy( dest, src ) ( __builtin_va_copy( dest, src ) ) -#define _PDCLIB_va_end( ap ) ( __builtin_va_end( ap ) ) -#define _PDCLIB_va_start( ap, parmN ) ( __builtin_va_start( ap, parmN ) ) - -#else - -#error Please create your own _PDCLIB_config.h. Using the existing one as-is will not work. (Unsupported varargs.) - -#endif - -/* -------------------------------------------------------------------------- */ -/* OS "glue", part 1 */ -/* These are values and data type definitions that you would have to adapt to */ -/* the capabilities and requirements of your OS. */ -/* The actual *functions* of the OS interface are declared in _PDCLIB_glue.h. */ -/* -------------------------------------------------------------------------- */ - -/* I/O ---------------------------------------------------------------------- */ - -/* The type of the file descriptor returned by _PDCLIB_open(), i.e. whatever */ -/* the underlying kernel uses for stream identification. */ -typedef int _PDCLIB_fd_t; - -/* The value of type _PDCLIB_fd_t returned by _PDCLIB_open() if the operation */ -/* failed. */ -#define _PDCLIB_NOHANDLE ( (_PDCLIB_fd_t) -1 ) - -/* The default size for file buffers. Must be at least 256. */ -#define _PDCLIB_BUFSIZ 1024 - -/* The minimum number of files the implementation guarantees can opened */ -/* simultaneously. Must be at least 8. Depends largely on how the platform */ -/* does the bookkeeping in whatever is called by _PDCLIB_open(). PDCLib puts */ -/* no further limits on the number of open files other than available memory. */ -#define _PDCLIB_FOPEN_MAX 8 - -/* Length of the longest filename the implementation guarantees to support. */ -#define _PDCLIB_FILENAME_MAX 128 - -/* Maximum length of filenames generated by tmpnam(). (See tmpfile.c.) */ -#define _PDCLIB_L_tmpnam 52 - -/* Number of distinct file names that can be generated by tmpnam(). */ -#define _PDCLIB_TMP_MAX 50 - -/* The values of SEEK_SET, SEEK_CUR and SEEK_END, used by fseek(). */ -/* Since at least one platform (POSIX) uses the same symbols for its own */ -/* "seek" function, you should use whatever the host defines (if it does */ -/* define them). */ -#define _PDCLIB_SEEK_SET 0 -#define _PDCLIB_SEEK_CUR 1 -#define _PDCLIB_SEEK_END 2 - -/* The number of characters that can be buffered with ungetc(). The standard */ -/* guarantees only one (1); PDCLib supports larger values, but applications */ -/* relying on this would rely on implementation-defined behaviour (not good). */ -#define _PDCLIB_UNGETCBUFSIZE 1 - -/* The number of functions that can be registered with atexit(). Needs to be */ -/* at least 33 (32 guaranteed by the standard, plus _PDCLIB_closeall() which */ -/* is used internally by PDCLib to close all open streams). */ -/* TODO: Should expand dynamically. */ -#define _PDCLIB_ATEXIT_SLOTS 40 - -/* errno -------------------------------------------------------------------- */ - -/* These are the values that _PDCLIB_errno can be set to by the library. */ -/* */ -/* By keeping PDCLib's errno in the _PDCLIB_* namespace, the library is */ -/* capable of "translating" between errno values used by the hosting OS and */ -/* those used and passed out by the library. */ -/* */ -/* Example: In the example platform, the remove() function uses the unlink() */ -/* system call as backend. Linux sets its errno to EISDIR if you try to */ -/* unlink() a directory, but POSIX demands EPERM. Within the remove() */ -/* function, you can catch 'errno == EISDIR', and set '*_PDCLIB_errno_func() */ -/* = _PDCLIB_EPERM'. Anyone using PDCLib's will "see" EPERM instead */ -/* of EISDIR. */ -/* */ -/* If you do not want that kind of translation, you might want to "match" the */ -/* values used by PDCLib with those used by the host OS, to avoid confusion. */ -/* auxiliary/errno/errno_readout.c provides a convenience program to read */ -/* those errno values mandated by the standard from a platform's , */ -/* giving output that can readily be pasted here. */ -/* Either way, note that the list below, the list in PDCLib's , and */ -/* the list in _PDCLIB_stdinit.h, need to be kept in sync. */ -/* */ -/* The values below are read from a Linux system. */ - -/* Argument list too long */ -#define _PDCLIB_E2BIG 7 -/* Permission denied */ -#define _PDCLIB_EACCES 13 -/* Address in use */ -#define _PDCLIB_EADDRINUSE 98 -/* Address not available */ -#define _PDCLIB_EADDRNOTAVAIL 99 -/* Address family not supported */ -#define _PDCLIB_EAFNOSUPPORT 97 -/* Resource unavailable, try again */ -#define _PDCLIB_EAGAIN 11 -/* Connection already in progress */ -#define _PDCLIB_EALREADY 114 -/* Bad file descriptor */ -#define _PDCLIB_EBADF 9 -/* Bad message */ -#define _PDCLIB_EBADMSG 74 -/* Device or resource busy */ -#define _PDCLIB_EBUSY 16 -/* Operation canceled */ -#define _PDCLIB_ECANCELED 125 -/* No child processes */ -#define _PDCLIB_ECHILD 10 -/* Connection aborted */ -#define _PDCLIB_ECONNABORTED 103 -/* Connection refused */ -#define _PDCLIB_ECONNREFUSED 111 -/* Connection reset */ -#define _PDCLIB_ECONNRESET 104 -/* Resource deadlock would occur */ -#define _PDCLIB_EDEADLK 35 -/* Destination address required */ -#define _PDCLIB_EDESTADDRREQ 89 -/* Mathematics argument out of domain of function */ -#define _PDCLIB_EDOM 33 -/* File exists */ -#define _PDCLIB_EEXIST 17 -/* Bad address */ -#define _PDCLIB_EFAULT 14 -/* File too large */ -#define _PDCLIB_EFBIG 27 -/* Host is unreachable */ -#define _PDCLIB_EHOSTUNREACH 113 -/* Identifier removed */ -#define _PDCLIB_EIDRM 43 -/* Illegal byte sequence */ -#define _PDCLIB_EILSEQ 84 -/* Operation in progress */ -#define _PDCLIB_EINPROGRESS 115 -/* Interrupted function */ -#define _PDCLIB_EINTR 4 -/* Invalid argument */ -#define _PDCLIB_EINVAL 22 -/* I/O error */ -#define _PDCLIB_EIO 5 -/* Socket is connected */ -#define _PDCLIB_EISCONN 106 -/* Is a directory */ -#define _PDCLIB_EISDIR 21 -/* Too many levels of symbolic links */ -#define _PDCLIB_ELOOP 40 -/* File descriptor value too large */ -#define _PDCLIB_EMFILE 24 -/* Too many links */ -#define _PDCLIB_EMLINK 31 -/* Message too large */ -#define _PDCLIB_EMSGSIZE 90 -/* Filename too long */ -#define _PDCLIB_ENAMETOOLONG 36 -/* Network is down */ -#define _PDCLIB_ENETDOWN 100 -/* Connection aborted by network */ -#define _PDCLIB_ENETRESET 102 -/* Network unreachable */ -#define _PDCLIB_ENETUNREACH 101 -/* Too many files open in system */ -#define _PDCLIB_ENFILE 23 -/* No buffer space available */ -#define _PDCLIB_ENOBUFS 105 -/* No message is available on the STREAM head read queue */ -#define _PDCLIB_ENODATA 61 -/* No such device */ -#define _PDCLIB_ENODEV 19 -/* No such file or directory */ -#define _PDCLIB_ENOENT 2 -/* Executable file format error */ -#define _PDCLIB_ENOEXEC 8 -/* No locks available */ -#define _PDCLIB_ENOLCK 37 -/* Link has been severed */ -#define _PDCLIB_ENOLINK 67 -/* Not enough space */ -#define _PDCLIB_ENOMEM 12 -/* No message of the desired type */ -#define _PDCLIB_ENOMSG 42 -/* Protocol not available */ -#define _PDCLIB_ENOPROTOOPT 92 -/* No space left on device */ -#define _PDCLIB_ENOSPC 28 -/* No STREAM resources */ -#define _PDCLIB_ENOSR 63 -/* Not a STREAM */ -#define _PDCLIB_ENOSTR 60 -/* Function not supported */ -#define _PDCLIB_ENOSYS 38 -/* The socket is not connected */ -#define _PDCLIB_ENOTCONN 107 -/* Not a directory */ -#define _PDCLIB_ENOTDIR 20 -/* Directory not empty */ -#define _PDCLIB_ENOTEMPTY 39 -/* State not recoverable */ -#define _PDCLIB_ENOTRECOVERABLE 131 -/* Not a socket */ -#define _PDCLIB_ENOTSOCK 88 -/* Not supported */ -#define _PDCLIB_ENOTSUP 95 -/* Inappropriate I/O control operation */ -#define _PDCLIB_ENOTTY 25 -/* No such device or address */ -#define _PDCLIB_ENXIO 6 -/* Operation not supported on socket */ -#define _PDCLIB_EOPNOTSUPP 95 -/* Value too large to be stored in data type */ -#define _PDCLIB_EOVERFLOW 75 -/* Previous owner died */ -#define _PDCLIB_EOWNERDEAD 130 -/* Operation not permitted */ -#define _PDCLIB_EPERM 1 -/* Broken pipe */ -#define _PDCLIB_EPIPE 32 -/* Protocol error */ -#define _PDCLIB_EPROTO 71 -/* Protocol not supported */ -#define _PDCLIB_EPROTONOSUPPORT 93 -/* Protocol wrong type for socket */ -#define _PDCLIB_EPROTOTYPE 91 -/* Result too large */ -#define _PDCLIB_ERANGE 34 -/* Read-only file system */ -#define _PDCLIB_EROFS 30 -/* Invalid seek */ -#define _PDCLIB_ESPIPE 29 -/* No such process */ -#define _PDCLIB_ESRCH 3 -/* Stream ioctl() timeout */ -#define _PDCLIB_ETIME 62 -/* Connection timed out */ -#define _PDCLIB_ETIMEDOUT 110 -/* Text file busy */ -#define _PDCLIB_ETXTBSY 26 -/* Operation would block */ -#define _PDCLIB_EWOULDBLOCK 11 -/* Cross-device link */ -#define _PDCLIB_EXDEV 18 - -/* The highest defined errno value, plus one. This is used to set the size */ -/* of the array in struct _PDCLIB_lc_text_t holding error messages for the */ -/* strerror() and perror() functions. (If you change this value because you */ -/* are using additional errno values, you *HAVE* to provide appropriate error */ -/* messages for *ALL* locales.) */ -#define _PDCLIB_ERRNO_MAX 132 - -/* The error message used for unknown error codes (generated by errno_readout */ -/* for consistency between the 'holes' in the list of defined error messages */ -/* and the text generated by e.g. strerror() for out-of-range error values.) */ -#define _PDCLIB_EUNKNOWN_TEXT (char*)"unknown error" - -/* locale data -------------------------------------------------------------- */ - -/* The default path where PDCLib should look for its locale data. */ -/* Must end with the appropriate separator character. */ -#define _PDCLIB_LOCALE_PATH "/usr/share/pdclib/i18n/" - -/* The name of the environment variable that can be used to override that */ -/* path setting. */ -#define _PDCLIB_LOCALE_PATH_ENV PDCLIB_I18N - -#ifdef __CYGWIN__ -typedef unsigned int wint_t; -#endif - -/* threads ------------------------------------------------------------------ */ - -/* This is relying on underlying implementation to provide thread */ -/* support. */ -/* The problem here is we cannot just #include and access the */ -/* original definitions. The standard library must not drag identifiers into */ -/* the user's namespace, so we have to set our own definitions in the _PDCLIB */ -/* namespace. Which are, obviously, platform-specific. */ -/* If you do NOT want to provide threads support, define __STDC_NO_THREADS__ */ -/* to 1 and simply delete the threads.h header and the corresponding files in */ -/* functions/threads/. This makes PDCLib non-thread-safe (obviously), as the */ -/* safeguards against race conditions (e.g. in ) will be omitted. */ - -/* auxiliary/pthread/pthread_readout.c provides a convenience program to read */ -/* appropriate definitions from a platform's , giving output that */ -/* can be copy & pasted here. */ - -#define __STDC_NO_THREADS__ - -#ifndef __STDC_NO_THREADS__ - -typedef unsigned long int _PDCLIB_thrd_t; -typedef union { unsigned char _PDCLIB_cnd_t_data[ 48 ]; long long int _PDCLIB_cnd_t_align; } _PDCLIB_cnd_t; -#if defined( __arm__ ) || defined( __ARM_NEON ) -typedef union { unsigned char _PDCLIB_mtx_t_data[ 24 ]; long int _PDCLIB_mtx_t_align; } _PDCLIB_mtx_t; -#else -typedef union { unsigned char _PDCLIB_mtx_t_data[ 40 ]; long int _PDCLIB_mtx_t_align; } _PDCLIB_mtx_t; -#endif -typedef unsigned int _PDCLIB_tss_t; -typedef int _PDCLIB_once_flag; -#define _PDCLIB_ONCE_FLAG_INIT 0 -#define _PDCLIB_RECURSIVE_MUTEX_INIT PTHREAD_MUTEX_INITIALIZER -/* This one is actually hidden in , and only if __USE_POSIX is */ -/* defined prior to #include (PTHREAD_DESTRUCTOR_ITERATIONS). */ -#define _PDCLIB_TSS_DTOR_ITERATIONS 4 -/* The following are not made public in any header, but used internally for */ -/* interfacing with the pthread API. */ -typedef union { unsigned char _PDCLIB_cnd_attr_t_data[ 4 ]; int _PDCLIB_cnd_attr_t_align; } _PDCLIB_cnd_attr_t; -typedef union { unsigned char _PDCLIB_mtx_attr_t_data[ 4 ]; int _PDCLIB_mtx_attr_t_align; } _PDCLIB_mtx_attr_t; -#if defined( __arm__ ) || defined( __ARM_NEON ) -typedef union { unsigned char _PDCLIB_thrd_attr_t_data[ 36 ]; long int _PDCLIB_thrd_attr_t_align; } _PDCLIB_thrd_attr_t; -#else -typedef union { unsigned char _PDCLIB_thrd_attr_t_data[ 56 ]; long int _PDCLIB_thrd_attr_t_align; } _PDCLIB_thrd_attr_t; -#endif -/* Static initialization of recursive mutex. */ -#if defined( __arm__ ) || defined( __ARM_NEON ) -#define _PDCLIB_MTX_RECURSIVE_INIT { {\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } -/* Static initialization of plain / timeout mutex (identical with pthread). */ -#define _PDCLIB_MTX_PLAIN_INIT { {\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } -#else -#define _PDCLIB_MTX_RECURSIVE_INIT { {\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } -/* Static initialization of plain / timeout mutex (identical with pthread). */ -#define _PDCLIB_MTX_PLAIN_INIT { {\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } -#endif - -#endif - -/* Termux defines atexit in crtbegin_so.o leading to a multiple definition */ -/* error from the linker. This is a crude workaround, which does NOT fix */ -/* various run-time issues on Termux likely also related to crt linkage. But */ -/* at least things compile OK, and SOME tests can be run. */ -#if defined( __ARM_NEON ) -#define atexit _PDCLIB_atexit -#endif - -#endif diff --git a/sysroot/usr/include/pdclib/_PDCLIB_defguard.h b/sysroot/usr/include/pdclib/_PDCLIB_defguard.h deleted file mode 100644 index cd51abe..0000000 --- a/sysroot/usr/include/pdclib/_PDCLIB_defguard.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Definition guard <_PDCLIB_defguard.h> - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_DEFGUARD_H -#define _PDCLIB_DEFGUARD_H _PDCLIB_DEFGUARD_H - -#if defined( __ANDROID__ ) -/* typedef sigset_t */ -#include "bits/signal_types.h" -#endif - -/* Linux defines its own version of struct timespec (from ) in - some internal header (depending on clib implementation), which leads - to problems when accessing e.g. sys/time.h (type redefinition). - The solution is to set the Linux header's include guard (to avoid - Linux' definition), and to include PDCLib's to define the - type unambiguously. -*/ - -#define _TIMESPEC_DEFINED -#define _SYS__TIMESPEC_H_ -#define _STRUCT_TIMESPEC - -#include - -#endif diff --git a/sysroot/usr/include/pdclib/_PDCLIB_glue.h b/sysroot/usr/include/pdclib/_PDCLIB_glue.h deleted file mode 100644 index 3e59302..0000000 --- a/sysroot/usr/include/pdclib/_PDCLIB_glue.h +++ /dev/null @@ -1,93 +0,0 @@ -/* OS glue functions declaration <_PDCLIB_glue.h> - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_GLUE_H -#define _PDCLIB_GLUE_H _PDCLIB_GLUE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_internal.h" - -/* -------------------------------------------------------------------------- */ -/* OS "glue", part 2 */ -/* These are the functions you will have to touch, as they are where PDCLib */ -/* interfaces with the operating system. */ -/* They operate on data types partially defined by _PDCLIB_config.h. */ -/* -------------------------------------------------------------------------- */ - -/* stdlib.h */ - -/* A system call that terminates the calling process, returning a given status - to the environment. -*/ -_PDCLIB_LOCAL _PDCLIB_Noreturn void _PDCLIB_Exit( int status ) _PDCLIB_NORETURN; - - -/* stdio.h */ - -/* A system call that opens a file identified by name in a given mode. Return - a file descriptor uniquely identifying that file. - (The mode is the return value of the _PDCLIB_filemode() function.) -*/ -_PDCLIB_LOCAL _PDCLIB_fd_t _PDCLIB_open( const char * const filename, unsigned int mode ); - -/* A system call that writes a stream's buffer. - Returns 0 on success, EOF on write error. - Sets stream error flags and errno appropriately on error. -*/ -_PDCLIB_LOCAL int _PDCLIB_flushbuffer( struct _PDCLIB_file_t * stream ); - -/* A system call that fills a stream's buffer. - Returns 0 on success, EOF on read error / EOF. - Sets stream EOF / error flags and errno appropriately on error. -*/ -_PDCLIB_LOCAL int _PDCLIB_fillbuffer( struct _PDCLIB_file_t * stream ); - -/* A system call that repositions within a file. Returns new offset on success, - -1 / errno on error. -*/ -_PDCLIB_LOCAL _PDCLIB_int_least64_t _PDCLIB_seek( struct _PDCLIB_file_t * stream, _PDCLIB_int_least64_t offset, int whence ); - -/* A system call that closes a file identified by given file descriptor. Return - zero on success, non-zero otherwise. -*/ -_PDCLIB_LOCAL int _PDCLIB_close( _PDCLIB_fd_t fd ); - -/* A system call that changes the mode of a given stream to that passed as - argument (the argument being the value returned by _PDCLIB_filemode()), - *without* closing the stream. See comments in example implementation - for details. Return zero if the requested mode change is not supported - for this stream and freopen() should try to close and reopen the stream; - return INT_MIN if the change is not supported and freopen() should close - and NOT try to close / reopen (i.e., fail). Return any other value on - success. -*/ -_PDCLIB_LOCAL int _PDCLIB_changemode( struct _PDCLIB_file_t * stream, unsigned int mode ); - -/* A system call that returns a canonicalized absolute filename in - dynamically allocated memory, or NULL if the file does not exist. -*/ -_PDCLIB_LOCAL char * _PDCLIB_realpath( const char * path ); - -/* A system call that removes a file. Return zero on success, non-zero - otherwise. -*/ -_PDCLIB_LOCAL int _PDCLIB_remove( const char * pathname ); - -/* A system call that renames a file from given old name to given new name. - Return zero on success, non-zero otherwise. In case of failure, the file - must still be accessible by old name. Any handling of open files etc. is - done by standard rename() already. -*/ -_PDCLIB_LOCAL int _PDCLIB_rename( const char * oldpath, const char * newpath ); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sysroot/usr/include/pdclib/_PDCLIB_internal.h b/sysroot/usr/include/pdclib/_PDCLIB_internal.h deleted file mode 100644 index 1ad3c66..0000000 --- a/sysroot/usr/include/pdclib/_PDCLIB_internal.h +++ /dev/null @@ -1,686 +0,0 @@ -/* PDCLib internal logic <_PDCLIB_internal.h> - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_INTERNAL_H -#define _PDCLIB_INTERNAL_H _PDCLIB_INTERNAL_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* -------------------------------------------------------------------------- */ -/* You should not have to edit anything in this file; if you DO have to, it */ -/* would be considered a bug / missing feature: notify the author(s). */ -/* -------------------------------------------------------------------------- */ - -#include "pdclib/_PDCLIB_config.h" - -/* -------------------------------------------------------------------------- */ -/* Standard Version */ -/* -------------------------------------------------------------------------- */ - -/* Many a compiler gets this wrong, so you might have to hardcode it instead. */ - -#if __STDC__ != 1 -#error Compiler does not define _ _STDC_ _ to 1 (not standard-compliant)! -#endif - -#ifndef __STDC_HOSTED__ -#error Compiler does not define _ _STDC_HOSTED_ _ (not standard-compliant)! -#elif __STDC_HOSTED__ != 0 && __STDC_HOSTED__ != 1 -#error Compiler does not define _ _STDC_HOSTED_ _ to 0 or 1 (not standard-compliant)! -#endif - -/* null pointer constant -- ((void *)0) in C, 0 in C++98, nullptr since C++11 */ -#ifdef __cplusplus -#if __cplusplus >= 201103L -#define _PDCLIB_NULL nullptr -#else -#define _PDCLIB_NULL 0 -#endif -#else -#define _PDCLIB_NULL ((void *)0) -#endif - -/* restrict / inline enabled for C99 onward only */ -#if defined( __cplusplus ) || ! defined( __STDC_VERSION ) || __STDC_VERSION__ < 199901L -#define _PDCLIB_restrict -#define _PDCLIB_inline -#else -#define _PDCLIB_restrict restrict -#define _PDCLIB_inline inline -#endif - -/* noreturn enabled for C11 onward only */ -#if defined( __cplusplus ) && __cplusplus >= 201103L -#define _PDCLIB_Noreturn [[noreturn]] -#else -#if defined( __STDC_VERSION__ ) >= 201112L -#define _PDCLIB_Noreturn _Noreturn -#else -#define _PDCLIB_Noreturn -#endif -#endif - -/* -------------------------------------------------------------------------- */ -/* Helper macros: */ -/* */ -/* (defined in _PDCLIB_config.h) */ -/* _PDCLIB_cc( x, y ) concatenates two preprocessor tokens without extending. */ -/* _PDCLIB_concat( x, y ) concatenates two preprocessor tokens with extending */ -/* */ -/* (defined below) */ -/* _PDCLIB_static_assert( e, m ) does a compile-time assertion of expression */ -/* e, with m as the failure message. */ -/* _PDCLIB_symbol2string( x ) turn symbol into string literal (by adding ""). */ -/* _PDCLIB_value2string( x ) expands a preprocessor token and turns it into a */ -/* string literal (by adding ""). */ -/* _PDCLIB_TYPE_SIGNED( type ) resolves to true if type is signed. */ -/* _PDCLIB_LOCK( mtx ) lock a mutex if library has threads support. */ -/* _PDCLIB_UNLOCK( mtx ) unlock a mutex if library has threads support. */ -/* _PDCLIB_CONSTRAINT_VIOLATION( e ) expand errno number e to parameter list */ -/* fit for Annex K constraint violation */ -/* handler. */ -/* _PDCLIB_Generic( f, fp ) expand to _PDCLIB_f, _PDCLIB_ff, _PDCLIB_fl */ -/* depending on fp being sizeof double, float, or */ -/* long double. */ -/* -------------------------------------------------------------------------- */ - -#define _PDCLIB_static_assert( e, m ) enum { _PDCLIB_concat( _PDCLIB_assert_, __LINE__ ) = 1 / ( !!(e) ) } - -#define _PDCLIB_TYPE_SIGNED( type ) (((type) -1) < 0) - -#define _PDCLIB_symbol2string( x ) #x -#define _PDCLIB_value2string( x ) _PDCLIB_symbol2string( x ) - -#ifndef __STDC_NO_THREADS__ -#define _PDCLIB_LOCK( mtx ) mtx_lock( &mtx ) -#define _PDCLIB_UNLOCK( mtx ) mtx_unlock( &mtx ) -#else -#define _PDCLIB_LOCK( mtx ) -#define _PDCLIB_UNLOCK( mtx ) -#endif - -#define _PDCLIB_CONSTRAINT_VIOLATION( e ) _PDCLIB_lc_messages->errno_texts[e], NULL, e - -#define _PDCLIB_GETC( fh ) ( ( fh->ungetidx == 0 ) ? ( unsigned char )fh->buffer[ fh->bufidx++ ] : ( unsigned char )fh->ungetbuf[ --fh->ungetidx ] ) - -#define _PDCLIB_CHECKBUFFER( fh ) ( ( ( fh->bufidx == fh->bufend ) && ( fh->ungetidx == 0 ) ) ? _PDCLIB_fillbuffer( fh ) : 0 ) - -#define _PDCLIB_GENERIC( func, x ) ( ( sizeof( x ) == sizeof( double ) ) ? _PDCLIB_ ## func ## d( x ) : \ - ( sizeof( x ) == sizeof( float ) ) ? _PDCLIB_ ## func ## f( x ) : \ - ( _PDCLIB_ ## func ## l( x ) ) ) - -/* -------------------------------------------------------------------------- */ -/* Preparing the length modifiers used in . */ -/* -------------------------------------------------------------------------- */ - -/* We use the _MAX value as a proxy for the actual type here. That is crude - but the best we can do, cross-platform wise. - Identifying which type the leastN_t / fastN_t / intmax_t / intptr_t are - and providing the appropriate printf()/scanf() length modifier. -*/ - -#if _PDCLIB_INT_FAST8_MAX == _PDCLIB_SCHAR_MAX -#define _PDCLIB_INT_FAST8_PREFIX hh -#elif _PDCLIB_INT_FAST8_MAX == _PDCLIB_SHRT_MAX -#define _PDCLIB_INT_FAST8_PREFIX h -#elif _PDCLIB_INT_FAST8_MAX == _PDCLIB_INT_MAX -#define _PDCLIB_INT_FAST8_PREFIX -#elif _PDCLIB_INT_FAST8_MAX == _PDCLIB_LONG_MAX -#define _PDCLIB_INT_FAST8_PREFIX l -#elif _PDCLIB_INT_FAST8_MAX == _PDCLIB_LLONG_MAX -#define _PDCLIB_INT_FAST8_PREFIX ll -#else -#error No matching native type for int_fast8_t. Please check your setup. -#endif - -#if _PDCLIB_INT_FAST16_MAX == _PDCLIB_SCHAR_MAX -#define _PDCLIB_INT_FAST16_PREFIX hh -#elif _PDCLIB_INT_FAST16_MAX == _PDCLIB_SHRT_MAX -#define _PDCLIB_INT_FAST16_PREFIX h -#elif _PDCLIB_INT_FAST16_MAX == _PDCLIB_INT_MAX -#define _PDCLIB_INT_FAST16_PREFIX -#elif _PDCLIB_INT_FAST16_MAX == _PDCLIB_LONG_MAX -#define _PDCLIB_INT_FAST16_PREFIX l -#elif _PDCLIB_INT_FAST16_MAX == _PDCLIB_LLONG_MAX -#define _PDCLIB_INT_FAST16_PREFIX ll -#else -#error No matching native type for int_fast16_t. Please check your setup. -#endif - -#if _PDCLIB_INT_FAST32_MAX == _PDCLIB_SCHAR_MAX -#define _PDCLIB_INT_FAST32_PREFIX hh -#elif _PDCLIB_INT_FAST32_MAX == _PDCLIB_SHRT_MAX -#define _PDCLIB_INT_FAST32_PREFIX h -#elif _PDCLIB_INT_FAST32_MAX == _PDCLIB_INT_MAX -#define _PDCLIB_INT_FAST32_PREFIX -#elif _PDCLIB_INT_FAST32_MAX == _PDCLIB_LONG_MAX -#define _PDCLIB_INT_FAST32_PREFIX l -#elif _PDCLIB_INT_FAST32_MAX == _PDCLIB_LLONG_MAX -#define _PDCLIB_INT_FAST32_PREFIX ll -#else -#error No matching native type for int_fast32_t. Please check your setup. -#endif - -#if _PDCLIB_INT_FAST64_MAX == _PDCLIB_SCHAR_MAX -#define _PDCLIB_INT_FAST64_PREFIX hh -#elif _PDCLIB_INT_FAST64_MAX == _PDCLIB_SHRT_MAX -#define _PDCLIB_INT_FAST64_PREFIX h -#elif _PDCLIB_INT_FAST64_MAX == _PDCLIB_INT_MAX -#define _PDCLIB_INT_FAST64_PREFIX -#elif _PDCLIB_INT_FAST64_MAX == _PDCLIB_LONG_MAX -#define _PDCLIB_INT_FAST64_PREFIX l -#elif _PDCLIB_INT_FAST64_MAX == _PDCLIB_LLONG_MAX -#define _PDCLIB_INT_FAST64_PREFIX ll -#else -#error No matching native type for int_fast64_t. Please check your setup. -#endif - -/* Many of the combinations below can very likely be ruled out logically. - All combinations are still listed for simplicity's sake (and to not fall - into the trap of false assumptions). -*/ - -#if _PDCLIB_INT_LEAST8_MAX == _PDCLIB_SCHAR_MAX -#define _PDCLIB_INT_LEAST8_PREFIX hh -#elif _PDCLIB_INT_LEAST8_MAX == _PDCLIB_SHRT_MAX -#define _PDCLIB_INT_LEAST8_PREFIX h -#elif _PDCLIB_INT_LEAST8_MAX == _PDCLIB_INT_MAX -#define _PDCLIB_INT_LEAST8_PREFIX -#elif _PDCLIB_INT_LEAST8_MAX == _PDCLIB_LONG_MAX -#define _PDCLIB_INT_LEAST8_PREFIX l -#elif _PDCLIB_INT_LEAST8_MAX == _PDCLIB_LLONG_MAX -#define _PDCLIB_INT_LEAST8_PREFIX ll -#else -#error No matching native type for int_least8_t. Please check your setup. -#endif - -#if _PDCLIB_INT_LEAST16_MAX == _PDCLIB_SCHAR_MAX -#define _PDCLIB_INT_LEAST16_PREFIX hh -#elif _PDCLIB_INT_LEAST16_MAX == _PDCLIB_SHRT_MAX -#define _PDCLIB_INT_LEAST16_PREFIX h -#elif _PDCLIB_INT_LEAST16_MAX == _PDCLIB_INT_MAX -#define _PDCLIB_INT_LEAST16_PREFIX -#elif _PDCLIB_INT_LEAST16_MAX == _PDCLIB_LONG_MAX -#define _PDCLIB_INT_LEAST16_PREFIX l -#elif _PDCLIB_INT_LEAST16_MAX == _PDCLIB_LLONG_MAX -#define _PDCLIB_INT_LEAST16_PREFIX ll -#else -#error No matching native type for int_least16_t. Please check your setup. -#endif - -#if _PDCLIB_INT_LEAST32_MAX == _PDCLIB_SCHAR_MAX -#define _PDCLIB_INT_LEAST32_PREFIX hh -#elif _PDCLIB_INT_LEAST32_MAX == _PDCLIB_SHRT_MAX -#define _PDCLIB_INT_LEAST32_PREFIX h -#elif _PDCLIB_INT_LEAST32_MAX == _PDCLIB_INT_MAX -#define _PDCLIB_INT_LEAST32_PREFIX -#elif _PDCLIB_INT_LEAST32_MAX == _PDCLIB_LONG_MAX -#define _PDCLIB_INT_LEAST32_PREFIX l -#elif _PDCLIB_INT_LEAST32_MAX == _PDCLIB_LLONG_MAX -#define _PDCLIB_INT_LEAST32_PREFIX ll -#else -#error No matching native type for int_least32_t. Please check your setup. -#endif - -#if _PDCLIB_INT_LEAST64_MAX == _PDCLIB_SCHAR_MAX -#define _PDCLIB_INT_LEAST64_PREFIX hh -#elif _PDCLIB_INT_LEAST64_MAX == _PDCLIB_SHRT_MAX -#define _PDCLIB_INT_LEAST64_PREFIX h -#elif _PDCLIB_INT_LEAST64_MAX == _PDCLIB_INT_MAX -#define _PDCLIB_INT_LEAST64_PREFIX -#elif _PDCLIB_INT_LEAST64_MAX == _PDCLIB_LONG_MAX -#define _PDCLIB_INT_LEAST64_PREFIX l -#elif _PDCLIB_INT_LEAST64_MAX == _PDCLIB_LLONG_MAX -#define _PDCLIB_INT_LEAST64_PREFIX ll -#else -#error No matching native type for int_least64_t. Please check your setup. -#endif - -#if _PDCLIB_INTMAX_MAX == _PDCLIB_SCHAR_MAX -#define _PDCLIB_INTMAX_PREFIX hh -#elif _PDCLIB_INTMAX_MAX == _PDCLIB_SHRT_MAX -#define _PDCLIB_INTMAX_PREFIX h -#elif _PDCLIB_INTMAX_MAX == _PDCLIB_INT_MAX -#define _PDCLIB_INTMAX_PREFIX -#elif _PDCLIB_INTMAX_MAX == _PDCLIB_LONG_MAX -#define _PDCLIB_INTMAX_PREFIX l -#elif _PDCLIB_INTMAX_MAX == _PDCLIB_LLONG_MAX -#define _PDCLIB_INTMAX_PREFIX ll -#else -#error No matching native type for intmax_t. Please check your setup. -#endif - -#if _PDCLIB_INTPTR_MAX == _PDCLIB_SCHAR_MAX -#define _PDCLIB_INTPTR_PREFIX hh -#elif _PDCLIB_INTPTR_MAX == _PDCLIB_SHRT_MAX -#define _PDCLIB_INTPTR_PREFIX h -#elif _PDCLIB_INTPTR_MAX == _PDCLIB_INT_MAX -#define _PDCLIB_INTPTR_PREFIX -#elif _PDCLIB_INTPTR_MAX == _PDCLIB_LONG_MAX -#define _PDCLIB_INTPTR_PREFIX l -#elif _PDCLIB_INTPTR_MAX == _PDCLIB_LLONG_MAX -#define _PDCLIB_INTPTR_PREFIX ll -#else -#error No matching native type for intptr_t. Please check your setup. -#endif - -/* We might not have a type definition for sig_atomic_t at this point. The */ -/* clang compiler does not provide an appropriate predefine for it. So if we */ -/* do not have _PDCLIB_sig_atomic_t, identify the type trough its MAX value. */ - -#ifndef _PDCLIB_sig_atomic_t - -#if _PDCLIB_SIG_ATOMIC_MAX == _PDCLIB_SCHAR_MAX -#define _PDCLIB_sig_atomic_t char -#elif _PDCLIB_SIG_ATOMIC_MAX == _PDCLIB_SHRT_MAX -#define _PDCLIB_sig_atomic_t short -#elif _PDCLIB_SIG_ATOMIC_MAX == _PDCLIB_INT_MAX -#define _PDCLIB_sig_atomic_t int -#elif _PDCLIB_SIG_ATOMIC_MAX == _PDCLIB_LONG_MAX -#define _PDCLIB_sig_atomic_t long -#elif _PDCLIB_SIG_ATOMIC_MAX == _PDCLIB_LLONG_MAX -#define _PDCLIB_sig_atomic_t long long -#else -#error No matching native type for sig_atomic_t. Please check your setup. -#endif - -#endif - -/* -------------------------------------------------------------------------- */ -/* Various internals */ -/* -------------------------------------------------------------------------- */ - -/* Flags for representing mode (see fopen()). Note these must fit the same - status field as the _IO?BF flags in and the internal flags below. -*/ -#define _PDCLIB_FREAD (1u<<3) -#define _PDCLIB_FWRITE (1u<<4) -#define _PDCLIB_FAPPEND (1u<<5) -#define _PDCLIB_FRW (1u<<6) -#define _PDCLIB_FBIN (1u<<7) - -/* Internal flags, made to fit the same status field as the flags above. */ -/* -------------------------------------------------------------------------- */ -/* free() the buffer memory on closing (setvbuf()) */ -#define _PDCLIB_FREEBUFFER (1u<<8) -/* stream has encountered error / EOF */ -#define _PDCLIB_ERRORFLAG (1u<<9) -#define _PDCLIB_EOFFLAG (1u<<10) -/* stream is wide-oriented */ -#define _PDCLIB_WIDESTREAM (1u<<11) -/* stream is byte-oriented */ -#define _PDCLIB_BYTESTREAM (1u<<12) -/* file associated with stream should be remove()d on closing (tmpfile()) */ -#define _PDCLIB_DELONCLOSE (1u<<13) - -/* Position / status structure for getpos() / fsetpos(). */ -struct _PDCLIB_fpos_t -{ - _PDCLIB_uint_least64_t offset; /* File position offset */ - int status; /* Multibyte parsing state (unused, reserved) */ -}; - -/* FILE structure */ -struct _PDCLIB_file_t -{ - _PDCLIB_fd_t handle; /* OS file handle */ - char * buffer; /* Pointer to buffer memory */ - _PDCLIB_size_t bufsize; /* Size of buffer */ - _PDCLIB_size_t bufidx; /* Index of current position in buffer */ - _PDCLIB_size_t bufend; /* Index of last pre-read character in buffer */ - struct _PDCLIB_fpos_t pos; /* Offset and multibyte parsing state */ - _PDCLIB_size_t ungetidx; /* Number of ungetc()'ed characters */ - unsigned char ungetbuf[_PDCLIB_UNGETCBUFSIZE]; /* ungetc() buffer */ - unsigned int status; /* Status flags; see above */ - /* multibyte parsing status to be added later */ -#ifndef __STDC_NO_THREADS__ - _PDCLIB_mtx_t mtx; /* Multithreading safety */ -#endif - char * filename; /* Name the current stream has been opened with */ - struct _PDCLIB_file_t * next; /* Pointer to next struct (internal) */ -}; - -/* -------------------------------------------------------------------------- */ -/* Internal data types */ -/* -------------------------------------------------------------------------- */ - -/* Structure required by both atexit() and exit() for handling atexit functions */ -struct _PDCLIB_exitfunc_t -{ - struct _PDCLIB_exitfunc_t * next; - void ( *func )( void ); -}; - -/* Status structure required by _PDCLIB_print(). */ -struct _PDCLIB_status_t -{ - int base; /* base to which the value shall be converted */ - _PDCLIB_int_fast32_t flags; /* flags and length modifiers */ - _PDCLIB_size_t n; /* print: maximum characters to be written */ - /* scan: number matched conversion specifiers */ - _PDCLIB_size_t i; /* number of characters read/written */ - _PDCLIB_size_t current;/* chars read/written in the CURRENT conversion */ - char * s; /* *sprintf(): target buffer */ - /* *sscanf(): source string */ - _PDCLIB_size_t width; /* specified field width */ - int prec; /* specified field precision */ - struct _PDCLIB_file_t * stream; /* *fprintf() / *fscanf() stream */ - _PDCLIB_va_list arg; /* argument stack */ -}; - -/* -------------------------------------------------------------------------- */ -/* Declaration of helper functions (implemented in functions/_PDCLIB). */ -/* -------------------------------------------------------------------------- */ - -/* This is the main function called by atoi(), atol() and atoll(). */ -_PDCLIB_LOCAL _PDCLIB_intmax_t _PDCLIB_atomax( const char * s ); - -/* Two helper functions used by strtol(), strtoul() and long long variants. */ -_PDCLIB_LOCAL const char * _PDCLIB_strtox_prelim( const char * p, char * sign, int * base ); -_PDCLIB_LOCAL _PDCLIB_uintmax_t _PDCLIB_strtox_main( const char ** p, unsigned int base, _PDCLIB_uintmax_t error, _PDCLIB_uintmax_t limit, char * sign ); - -/* Helper function used by strtof(), strtod(), and strtold(). */ -_PDCLIB_LOCAL int _PDCLIB_strtod_prelim( const char * p, char * sign, char ** endptr ); - -/* Digits arrays used by various integer conversion functions */ -extern const char _PDCLIB_digits[]; -extern const char _PDCLIB_Xdigits[]; - -/* The worker for all printf() type of functions. The pointer spec should point - to the introducing '%' of a conversion specifier. The status structure is to - be that of the current printf() function, of which the members n, s, stream - and arg will be preserved; i will be updated; and all others will be trashed - by the function. - Returns a pointer to the first character not parsed as conversion specifier. -*/ -_PDCLIB_LOCAL const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status ); - -/* The worker for all scanf() type of functions. The pointer spec should point - to the introducing '%' of a conversion specifier. The status structure is to - be that of the current scanf() function, of which the member stream will be - preserved; n, i, and s will be updated; and all others will be trashed by - the function. - Returns a pointer to the first character not parsed as conversion specifier, - or NULL in case of error. - FIXME: Should distinguish between matching and input error -*/ -_PDCLIB_LOCAL const char * _PDCLIB_scan( const char * spec, struct _PDCLIB_status_t * status ); - -/* Parsing any fopen() style filemode string into a number of flags. */ -_PDCLIB_LOCAL unsigned int _PDCLIB_filemode( const char * mode ); - -/* Initialize a FILE structure. If the parameter is NULL, a new FILE structure - is malloc'ed. Returns a pointer to the stream if successful, NULL otherwise. -*/ -_PDCLIB_LOCAL struct _PDCLIB_file_t * _PDCLIB_init_file_t( struct _PDCLIB_file_t * stream ); - -/* Sanity checking and preparing of read buffer, should be called first thing - by any stdio read-data function. - Returns 0 on success, EOF on error. - On error, EOF / error flags and errno are set appropriately. -*/ -_PDCLIB_LOCAL int _PDCLIB_prepread( struct _PDCLIB_file_t * stream ); - -/* Sanity checking, should be called first thing by any stdio write-data - function. - Returns 0 on success, EOF on error. - On error, error flags and errno are set appropriately. -*/ -_PDCLIB_LOCAL int _PDCLIB_prepwrite( struct _PDCLIB_file_t * stream ); - -/* Closing all streams on program exit */ -_PDCLIB_LOCAL void _PDCLIB_closeall( void ); - -/* Check if a given year is a leap year. Parameter is offset to 1900. */ -_PDCLIB_LOCAL int _PDCLIB_is_leap( int year_offset ); - -/* Read a specified number of lines from a file stream; return a pointer to - allocated memory holding the lines (newlines replaced with zero terminators) - or NULL in case of error. -*/ -_PDCLIB_LOCAL char * _PDCLIB_load_lines( struct _PDCLIB_file_t * stream, _PDCLIB_size_t lines ); - -/* Returns the (locale dependent) error message associated with the argument - errno value. -*/ -_PDCLIB_LOCAL char * _PDCLIB_geterrtext( int errnum ); - -/* Returns non-zero if the given stream is on the internal list of open files, - zero otherwise. Sets the second paramenter (if not NULL) to the previous - stream on the list (or NULL if the given stream is the first on the list). - This function does not lock _PDCLIB_filelist_mtx, this needs to be done by - the calling function (_PDCLIB_getstream() or freopen()). -*/ -_PDCLIB_LOCAL int _PDCLIB_isstream( struct _PDCLIB_file_t * stream, struct _PDCLIB_file_t ** previous ); - -/* Removes the given stream from the internal list of open files. Returns zero - if successful, non-zero otherwise. In case of error, sets errno to EBADF. - This function does not lock _PDCLIB_filelist_mtx, this needs to be done by - the calling function (fclose()). -*/ -_PDCLIB_LOCAL int _PDCLIB_getstream( struct _PDCLIB_file_t * stream ); - -/* Backend for strtok and strtok_s (plus potential extensions like strtok_r). */ -_PDCLIB_LOCAL char * _PDCLIB_strtok( char * _PDCLIB_restrict s1, _PDCLIB_size_t * _PDCLIB_restrict s1max, const char * _PDCLIB_restrict s2, char ** _PDCLIB_restrict ptr ); - -/* Conversion of exponent notation to floating point */ -_PDCLIB_LOCAL long double _PDCLIB_naive_etod( const char * s, char ** endptr ); - -/* Conversion of hexadecimal notation to floating point */ -_PDCLIB_LOCAL long double _PDCLIB_naive_ptod( const char * s, char ** endptr ); - -/* -------------------------------------------------------------------------- */ -/* Declaration of math helper functions (implemented in functions/math). */ -/* -------------------------------------------------------------------------- */ - -int _PDCLIB_isnand( double x ); -int _PDCLIB_isnanf( float x ); -int _PDCLIB_isnanl( long double x ); - -int _PDCLIB_isinfd( double x ); -int _PDCLIB_isinff( float x ); -int _PDCLIB_isinfl( long double x ); - -int _PDCLIB_signbitd( double x ); -int _PDCLIB_signbitf( float x ); -int _PDCLIB_signbitl( long double x ); - -int _PDCLIB_isfinited( double x ); -int _PDCLIB_isfinitef( float x ); -int _PDCLIB_isfinitel( long double x ); - -int _PDCLIB_isnormald( double x ); -int _PDCLIB_isnormalf( float x ); -int _PDCLIB_isnormall( long double x ); - -int _PDCLIB_fpclassifyd( double x ); -int _PDCLIB_fpclassifyf( float x ); -int _PDCLIB_fpclassifyl( long double x ); - -/* -------------------------------------------------------------------------- */ -/* errno */ -/* -------------------------------------------------------------------------- */ - -/* A mechanism for delayed evaluation. - If PDCLib would call its error number "errno" directly, there would be no way - to catch its value from underlying system calls that also use it (i.e., POSIX - operating systems). That is why we use an internal name, providing a means to - access it through . -*/ -_PDCLIB_PUBLIC int * _PDCLIB_errno_func( void ); - -/* -------------------------------------------------------------------------- */ -/* support */ -/* -------------------------------------------------------------------------- */ - -#define _PDCLIB_LC_ALL 0 -#define _PDCLIB_LC_COLLATE 1 -#define _PDCLIB_LC_CTYPE 2 -#define _PDCLIB_LC_MONETARY 3 -#define _PDCLIB_LC_NUMERIC 4 -#define _PDCLIB_LC_TIME 5 -#define _PDCLIB_LC_MESSAGES 6 -#define _PDCLIB_LC_COUNT 7 - -#define _PDCLIB_CTYPE_ALPHA 1 -#define _PDCLIB_CTYPE_BLANK 2 -#define _PDCLIB_CTYPE_CNTRL 4 -#define _PDCLIB_CTYPE_GRAPH 8 -#define _PDCLIB_CTYPE_PUNCT 16 -#define _PDCLIB_CTYPE_SPACE 32 -#define _PDCLIB_CTYPE_LOWER 64 -#define _PDCLIB_CTYPE_UPPER 128 - -#define _PDCLIB_CHARSET_SIZE ( 1 << _PDCLIB_CHAR_BIT ) - -struct _PDCLIB_lc_lconv_numeric_t -{ - char * decimal_point; - char * thousands_sep; - char * grouping; -}; - -struct _PDCLIB_lc_lconv_monetary_t -{ - char * mon_decimal_point; - char * mon_thousands_sep; - char * mon_grouping; - char * positive_sign; - char * negative_sign; - char * currency_symbol; - char * int_curr_symbol; - char frac_digits; - char p_cs_precedes; - char n_cs_precedes; - char p_sep_by_space; - char n_sep_by_space; - char p_sign_posn; - char n_sign_posn; - char int_frac_digits; - char int_p_cs_precedes; - char int_n_cs_precedes; - char int_p_sep_by_space; - char int_n_sep_by_space; - char int_p_sign_posn; - char int_n_sign_posn; -}; - -struct _PDCLIB_lc_numeric_monetary_t -{ - struct lconv * lconv; - int numeric_alloced; - int monetary_alloced; -}; - -extern struct _PDCLIB_lc_numeric_monetary_t _PDCLIB_lc_numeric_monetary; - -struct _PDCLIB_lc_collate_t -{ - int alloced; - /* 1..3 code points */ - /* 1..8, 18 collation elements of 3 16-bit integers */ -}; - -extern struct _PDCLIB_lc_collate_t _PDCLIB_lc_collate_C; -extern struct _PDCLIB_lc_collate_t * _PDCLIB_lc_collate; - -/* One entry to the _PDCLIB_lc_ctype_t.entry data table */ -struct _PDCLIB_lc_ctype_entry_t -{ - _PDCLIB_uint_least16_t flags; /* Whether a character is of a given CTYPE */ - unsigned char upper; /* Result for toupper() */ - unsigned char lower; /* Result for tolower() */ -}; - -struct _PDCLIB_lc_ctype_t -{ - int alloced; /* .entry dynamically allocated? */ - int digits_low; /* Where decimal digits start */ - int digits_high; /* Where decimal digits end */ - int Xdigits_low; /* Where A..F start */ - int Xdigits_high; /* Where A..F end */ - int xdigits_low; /* Where a..f start */ - int xdigits_high; /* Where a..f end */ - struct _PDCLIB_lc_ctype_entry_t * entry; /* The data table */ -}; - -extern struct _PDCLIB_lc_ctype_t _PDCLIB_lc_ctype_C; -extern struct _PDCLIB_lc_ctype_t * _PDCLIB_lc_ctype; - -struct _PDCLIB_lc_messages_t -{ - int alloced; - char * errno_texts[_PDCLIB_ERRNO_MAX]; /* strerror() / perror() */ -}; - -extern struct _PDCLIB_lc_messages_t _PDCLIB_lc_messages_C; -extern struct _PDCLIB_lc_messages_t * _PDCLIB_lc_messages; - -struct _PDCLIB_lc_time_t -{ - int alloced; - char * month_name_abbr[12]; /* month names, abbreviated */ - char * month_name_full[12]; /* month names, full */ - char * day_name_abbr[7]; /* weekday names, abbreviated */ - char * day_name_full[7]; /* weekday names, full */ - char * date_time_format; /* date / time format for strftime( "%c" ) */ - char * time_format_12h; /* 12-hour time format for strftime( "%r" ) */ - char * date_format; /* date format for strftime( "%x" ) */ - char * time_format; /* time format for strftime( "%X" ) */ - char * am_pm[2]; /* AM / PM designation */ -}; - -extern struct _PDCLIB_lc_time_t _PDCLIB_lc_time_C; -extern struct _PDCLIB_lc_time_t * _PDCLIB_lc_time; - -_PDCLIB_LOCAL struct _PDCLIB_lc_lconv_numeric_t * _PDCLIB_load_lc_numeric( const char * path, const char * locale ); -_PDCLIB_LOCAL struct _PDCLIB_lc_lconv_monetary_t * _PDCLIB_load_lc_monetary( const char * path, const char * locale ); -_PDCLIB_LOCAL struct _PDCLIB_lc_collate_t * _PDCLIB_load_lc_collate( const char * path, const char * locale ); -_PDCLIB_LOCAL struct _PDCLIB_lc_ctype_t * _PDCLIB_load_lc_ctype( const char * path, const char * locale ); -_PDCLIB_LOCAL struct _PDCLIB_lc_time_t * _PDCLIB_load_lc_time( const char * path, const char * locale ); -_PDCLIB_LOCAL struct _PDCLIB_lc_messages_t * _PDCLIB_load_lc_messages( const char * path, const char * locale ); - -/* -------------------------------------------------------------------------- */ -/* Sanity checks */ -/* -------------------------------------------------------------------------- */ - -/* signed-ness of char */ -_PDCLIB_static_assert( _PDCLIB_CHAR_MIN == ((((char) -1) < 0) ? _PDCLIB_SCHAR_MIN : 0), "Compiler disagrees on signed-ness of 'char'." ); - -/* two's complement */ -#if _PDCLIB_TWOS_COMPLEMENT == 1 -#if _PDCLIB_CHAR_MIN < 0 -_PDCLIB_static_assert( ((char) ~ (char) 0 < 0), "Not two's complement on 'char'." ); -#endif -_PDCLIB_static_assert( ((short) ~ (short) 0 < 0), "Not two's complement on 'short'." ); -_PDCLIB_static_assert( ((int) ~ (int) 0 < 0), "Not two's complement on 'int'." ); -_PDCLIB_static_assert( ((long) ~ (long) 0 < 0), "Not two's complement on 'long'." ); -_PDCLIB_static_assert( ((long long) ~ (long long) 0 < 0), "Not two's complement on 'long long'." ); -#endif - -/* size_t as the result of sizeof */ -_PDCLIB_static_assert( sizeof( sizeof( int ) ) == sizeof( _PDCLIB_size_t ), "Compiler disagrees on size_t." ); - -/* wchar_t as the type of wide character literals */ -_PDCLIB_static_assert( sizeof( _PDCLIB_wchar_t ) == sizeof( L'x' ), "Compiler disagrees on wchar_t." ); -#ifdef __cplusplus -_PDCLIB_static_assert( sizeof( _PDCLIB_wchar_t ) == sizeof( wchar_t ), "Compiler disagrees on wchar_t (C++)." ); -#endif - -/* intptr_t/uintptr_t being wide enough to store the value of a pointer */ -_PDCLIB_static_assert( sizeof( void * ) == sizeof( _PDCLIB_intptr_t ), "Compiler disagrees on intptr_t." ); -_PDCLIB_static_assert( sizeof( void * ) == sizeof( _PDCLIB_uintptr_t ), "Compiler disagrees on uintptr_t." ); - -/* ptrdiff_t as the result of pointer arithmetic */ -_PDCLIB_static_assert( sizeof( &_PDCLIB_digits[1] - &_PDCLIB_digits[0] ) == sizeof( _PDCLIB_ptrdiff_t ), "Compiler disagrees on ptrdiff_t." ); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sysroot/usr/include/pdclib/_PDCLIB_lib_ext1.h b/sysroot/usr/include/pdclib/_PDCLIB_lib_ext1.h deleted file mode 100644 index fe96bca..0000000 --- a/sysroot/usr/include/pdclib/_PDCLIB_lib_ext1.h +++ /dev/null @@ -1,32 +0,0 @@ -/* __STDC_WANT_LIB_EXT1__ redefinition guard - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef __STDC_WANT_LIB_EXT1__ - #ifdef __STDC_WANT_LIB_EXT1_PREVIOUS__ - #if __STDC_WANT_LIB_EXT1_PREVIOUS__ != -1 - #error __STDC_WANT_LIB_EXT1__ undefined when it was defined earlier. - #endif - #else - #define __STDC_WANT_LIB_EXT1_PREVIOUS__ -1 - #endif -#else - #if ( __STDC_WANT_LIB_EXT1__ + 0 ) == 0 && ( 0 - __STDC_WANT_LIB_EXT1__ - 1 ) == 1 - #error __STDC_WANT_LIB_EXT1__ defined but empty. Should be an integer value. - #endif - #ifdef __STDC_WANT_LIB_EXT1_PREVIOUS__ - #if ( __STDC_WANT_LIB_EXT1__ + 0 ) != __STDC_WANT_LIB_EXT1_PREVIOUS__ - #error __STDC_WANT_LIB_EXT1__ redefined from previous value. - #endif - #else - #if ( __STDC_WANT_LIB_EXT1__ + 0 ) == 0 - #define __STDC_WANT_LIB_EXT1_PREVIOUS__ 0 - #elif ( __STDC_WANT_LIB_EXT1__ + 0 ) == 1 - #define __STDC_WANT_LIB_EXT1_PREVIOUS__ 1 - #else - #error __STDC_WANT_LIB_EXT1__ set to value other than 0,1 -- undefined behavior - #endif - #endif -#endif diff --git a/sysroot/usr/include/pdclib/_PDCLIB_platform_errno.h b/sysroot/usr/include/pdclib/_PDCLIB_platform_errno.h deleted file mode 100644 index 04e4f3d..0000000 --- a/sysroot/usr/include/pdclib/_PDCLIB_platform_errno.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _PDCLIB_PLATFORM_ERRNO -#define _PDCLIB_PLATFORM_ERRNO - -#include "errno.h" - -#endif diff --git a/sysroot/usr/include/pdclib/_PDCLIB_platform_fcntl.h b/sysroot/usr/include/pdclib/_PDCLIB_platform_fcntl.h deleted file mode 100644 index 8c7c026..0000000 --- a/sysroot/usr/include/pdclib/_PDCLIB_platform_fcntl.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _PDCLIB_PLATFORM_FCNTL -#define _PDCLIB_PLATFORM_FCNTL - -#include "fcntl.h" - -#endif diff --git a/sysroot/usr/include/pdclib/_PDCLIB_print.h b/sysroot/usr/include/pdclib/_PDCLIB_print.h deleted file mode 100644 index 015b0ff..0000000 --- a/sysroot/usr/include/pdclib/_PDCLIB_print.h +++ /dev/null @@ -1,145 +0,0 @@ -/* PDCLib printf logic <_PDCLIB_print.h> - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_PRINT_H -#define _PDCLIB_PRINT_H _PDCLIB_PRINT_H - -#include "pdclib/_PDCLIB_internal.h" - -#include -#include -#include - -/* This macro delivers a given character to either a memory buffer or a stream, - depending on the contents of 'status' (struct _PDCLIB_status_t). - x - the character to be delivered - i - pointer to number of characters already delivered in this call - n - pointer to maximum number of characters to be delivered in this call - s - the buffer into which the character shall be delivered -*/ -#define PUT( x ) \ - do { \ - int character = x; \ - if ( status->i < status->n ) { \ - if ( status->stream != NULL ) \ - putc( character, status->stream ); \ - else \ - status->s[status->i] = character; \ - } \ - ++(status->i); \ - } while ( 0 ) - - -/* Using an integer's bits as flags for both the conversion flags and length - modifiers. -*/ -#define E_minus (INT32_C(1)<<0) -#define E_plus (INT32_C(1)<<1) -#define E_alt (INT32_C(1)<<2) -#define E_space (INT32_C(1)<<3) - -#define E_zero (INT32_C(1)<<4) -#define E_done (INT32_C(1)<<5) -#define E_char (INT32_C(1)<<6) -#define E_short (INT32_C(1)<<7) - -#define E_long (INT32_C(1)<<8) -#define E_llong (INT32_C(1)<<9) -#define E_intmax (INT32_C(1)<<10) -#define E_size (INT32_C(1)<<11) - -#define E_ptrdiff (INT32_C(1)<<12) -#define E_pointer (INT32_C(1)<<13) -#define E_double (INT32_C(1)<<14) -#define E_ldouble (INT32_C(1)<<15) - -#define E_lower (INT32_C(1)<<16) -#define E_unsigned (INT32_C(1)<<17) -#define E_decimal (INT32_C(1)<<18) -#define E_exponent (INT32_C(1)<<19) - -#define E_generic (INT32_C(1)<<20) -#define E_hexa (INT32_C(1)<<21) - -/* -------------------------------------------------------------------------- */ -/* _PDCLIB_bigint_t support (required for floating point conversions) */ -/* -------------------------------------------------------------------------- */ - -/* Must be divisible by 32. */ -/* 1120 is enough for 64bit floats. A 128 float takes 16544 bits. */ -#define _PDCLIB_BIGINT_BITS 1120 - -#if _PDCLIB_BIGINT_DIGIT_BITS == 32 -#define _PDCLIB_BIGINT_DIGIT_MAX _PDCLIB_UINT_LEAST32_C( 0xFFFFFFFF ) -typedef _PDCLIB_uint_least32_t _PDCLIB_bigint_digit_t; -typedef _PDCLIB_int_least32_t _PDCLIB_bigint_sdigit_t; -typedef _PDCLIB_uint_least64_t _PDCLIB_bigint_arith_t; -#elif _PDCLIB_BIGINT_DIGIT_BITS == 16 -#define _PDCLIB_BIGINT_DIGIT_MAX _PDCLIB_UINT_LEAST16_C( 0xFFFF ) -typedef _PDCLIB_uint_least16_t _PDCLIB_bigint_digit_t; -typedef _PDCLIB_int_least16_t _PDCLIB_bigint_sdigit_t; -typedef _PDCLIB_uint_least32_t _PDCLIB_bigint_arith_t; -#else -#error _PDCLIB_BIGINT_DIGIT_BITS.needs to be 16 or 32. -#endif - -/* How many "digits" a _PDCLIB_bigint_t holds. */ -#define _PDCLIB_BIGINT_DIGITS _PDCLIB_BIGINT_BITS / _PDCLIB_BIGINT_DIGIT_BITS - -/* Maximum number of characters needed for _PDCLIB_bigint_tostring() */ -#define _PDCLIB_BIGINT_CHARS ( _PDCLIB_BIGINT_BITS / 4 + _PDCLIB_BIGINT_DIGITS + 2 ) - -/* Type */ -/* ---- */ - -typedef struct -{ - /* Number of digits used; zero value == zero size */ - _PDCLIB_size_t size; - /* Least significant digit first */ - _PDCLIB_bigint_digit_t data[ _PDCLIB_BIGINT_DIGITS ]; -} _PDCLIB_bigint_t; - -typedef struct -{ - _PDCLIB_bigint_t mantissa; - _PDCLIB_int_least16_t exponent; - _PDCLIB_int_least16_t scale; - enum - { - _PDCLIB_FP_NORMAL, - _PDCLIB_FP_SUBNORMAL, - _PDCLIB_FP_INF, - _PDCLIB_FP_NAN - } state; - char sign; -} _PDCLIB_fp_t; - -void _PDCLIB_fp_from_dbl( _PDCLIB_fp_t * fp, double value ); -void _PDCLIB_fp_from_ldbl( _PDCLIB_fp_t * fp, long double value ); - -void _PDCLIB_bigint_from_digit( _PDCLIB_bigint_t * bigint, _PDCLIB_bigint_digit_t digit ); -void _PDCLIB_bigint_from_pow2( _PDCLIB_bigint_t * bigint, unsigned pow ); -void _PDCLIB_bigint_from_pow10( _PDCLIB_bigint_t * bigint, unsigned pow ); -void _PDCLIB_bigint_from_bigint( _PDCLIB_bigint_t * bigint, _PDCLIB_bigint_t const * other ); -void _PDCLIB_bigint_add( _PDCLIB_bigint_t * bigint, _PDCLIB_bigint_t const * other ); -void _PDCLIB_bigint_mul( _PDCLIB_bigint_t * bigint, _PDCLIB_bigint_t const * other ); -void _PDCLIB_bigint_mul_pow10( _PDCLIB_bigint_t * bigint, int pow10 ); -int _PDCLIB_bigint_cmp( _PDCLIB_bigint_t const * lhs, _PDCLIB_bigint_t const * rhs ); -void _PDCLIB_bigint_shl( _PDCLIB_bigint_t * bigint, _PDCLIB_size_t bits ); -void _PDCLIB_bigint_mul10( _PDCLIB_bigint_t * bigint ); -int _PDCLIB_bigint_digit_log2( _PDCLIB_bigint_digit_t digit ); -int _PDCLIB_bigint_log2( _PDCLIB_bigint_t const * bigint ); -unsigned _PDCLIB_bigint_div( _PDCLIB_bigint_t * dividend, _PDCLIB_bigint_t const * divisor ); - -void _PDCLIB_print_integer( struct _PDCLIB_imaxdiv_t div, struct _PDCLIB_status_t * status ); -void _PDCLIB_print_string( const char * s, struct _PDCLIB_status_t * status ); -void _PDCLIB_print_fp( _PDCLIB_fp_t * fp, struct _PDCLIB_status_t * status ); -int _PDCLIB_print_fp_deci( _PDCLIB_fp_t * fp, struct _PDCLIB_status_t * status, char * buffer ); -void _PDCLIB_print_fp_hexa( _PDCLIB_fp_t * fp, struct _PDCLIB_status_t * status, char * buffer ); -void _PDCLIB_print_fp_dragon4( _PDCLIB_bigint_t * fp, struct _PDCLIB_status_t * status ); - -#endif diff --git a/sysroot/usr/include/pdclib/_PDCLIB_tzcode.h b/sysroot/usr/include/pdclib/_PDCLIB_tzcode.h deleted file mode 100644 index d12c4a7..0000000 --- a/sysroot/usr/include/pdclib/_PDCLIB_tzcode.h +++ /dev/null @@ -1,153 +0,0 @@ -/* TZ Code declarations and definitions <_PDCLIB_tzcode.h> - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_TZCODE_H -#define _PDCLIB_TZCODE_H _PDCLIB_TZCODE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#include -#include -#include - -/* Handy macros that are independent of tzfile implementation. */ -#define YEARSPERREPEAT 400 /* years before a Gregorian repeat */ - -#define SECSPERMIN 60 -#define MINSPERHOUR 60 -#define HOURSPERDAY 24 -#define DAYSPERWEEK 7 -#define DAYSPERNYEAR 365 -#define DAYSPERLYEAR 366 -#define SECSPERHOUR (SECSPERMIN * MINSPERHOUR) -#define SECSPERDAY ((int_fast32_t) SECSPERHOUR * HOURSPERDAY) -#define MONSPERYEAR 12 - -#define AVGSECSPERYEAR 31556952L -#define SECSPERREPEAT ((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR) -#define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */ - -#define TM_SUNDAY 0 -#define TM_MONDAY 1 -#define TM_TUESDAY 2 -#define TM_WEDNESDAY 3 -#define TM_THURSDAY 4 -#define TM_FRIDAY 5 -#define TM_SATURDAY 6 - -#define TM_YEAR_BASE 1900 - -#define EPOCH_YEAR 1970 -#define EPOCH_WDAY TM_THURSDAY - -extern struct tm _PDCLIB_tm; -extern int lcl_is_set; - -static const char gmt[] = "GMT"; - -static const int mon_lengths[ 2 ][ MONSPERYEAR ] = -{ - { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, - { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } -}; - -static const int year_lengths[2] = -{ - DAYSPERNYEAR, DAYSPERLYEAR -}; - -/* time type information */ -struct ttinfo -{ - int_fast32_t utoff; /* UT offset in seconds */ - bool isdst; /* used to set tm_isdst */ - int desigidx; /* abbreviation list index */ - bool ttisstd; /* transition is std time */ - bool ttisut; /* transition is UT */ -}; - -/* leap second information */ -struct lsinfo -{ - time_t trans; /* transition time */ - int_fast64_t corr; /* correction to apply */ -}; - -#define BIGGEST( a, b ) (((a) > (b)) ? (a) : (b)) - -#ifndef TZ_MAX_TIMES -#define TZ_MAX_TIMES 2000 -#endif - -#ifndef TZ_MAX_TYPES -/* This must be at least 17 for Europe/Vilnius. */ -/* Limited by what (unsigned char)s can hold */ -#define TZ_MAX_TYPES 256 -#endif - -#ifndef TZ_MAX_CHARS -/* Maximum number of abbreviation characters */ -/* Limited by what (unsigned char)s can hold */ -#define TZ_MAX_CHARS 50 -#endif - -#ifndef TZ_MAX_LEAPS -/* Maximum number of leap second corrections */ -#define TZ_MAX_LEAPS 50 -#endif - -#ifdef TZNAME_MAX -#define MY_TZNAME_MAX TZNAME_MAX -#else -#define MY_TZNAME_MAX 255 -#endif - -struct state -{ - int leapcnt; - int timecnt; - int typecnt; - int charcnt; - bool goback; - bool goahead; - time_t ats[ TZ_MAX_TIMES ]; - unsigned char types[ TZ_MAX_TIMES ]; - struct ttinfo ttis[ TZ_MAX_TYPES ]; - char chars[ BIGGEST( BIGGEST( TZ_MAX_CHARS + 1, sizeof gmt ), ( 2 * ( MY_TZNAME_MAX + 1 ) ) ) ]; - struct lsinfo lsis[ TZ_MAX_LEAPS ]; - - /* The time type to use for early times or if no transitions. - It is always zero for recent tzdb releases. - It might be nonzero for data from tzdb 2018e or earlier. - */ - int defaulttype; -}; - -extern struct state _PDCLIB_lclmem; -extern struct state _PDCLIB_gmtmem; - -void _PDCLIB_gmtcheck(void); -struct tm * _PDCLIB_gmtsub( struct state const * sp, time_t const * timep, int_fast32_t offset, struct tm * tmp ); -bool _PDCLIB_increment_overflow( int * ip, int j ); -void _PDCLIB_init_ttinfo( struct ttinfo * s, int_fast32_t utoff, bool isdst, int desigidx ); -struct tm * _PDCLIB_localsub( struct state const * sp, time_t const * timep, int_fast32_t setname, struct tm * const tmp ); -struct tm * _PDCLIB_localtime_tzset( time_t const * timep, struct tm * tmp, bool setname ); -time_t _PDCLIB_mktime_tzname( struct state * sp, struct tm * tmp, bool setname ); -struct tm * _PDCLIB_timesub( const time_t * timep, int_fast32_t offset, const struct state * sp, struct tm * tmp ); -int _PDCLIB_tzload( char const * name, struct state * sp, bool doextend ); -bool _PDCLIB_tzparse(char const *, struct state *, bool); -void _PDCLIB_tzset_unlocked( void ); -void _PDCLIB_update_tzname_etc( struct state const * sp, struct ttinfo const * ttisp ); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sysroot/usr/include/signal.h b/sysroot/usr/include/signal.h deleted file mode 100644 index 1f679ec..0000000 --- a/sysroot/usr/include/signal.h +++ /dev/null @@ -1,91 +0,0 @@ -/* Signal handling - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_SIGNAL_H -#define _PDCLIB_SIGNAL_H _PDCLIB_SIGNAL_H - -#include "pdclib/_PDCLIB_internal.h" - -/* Signals ------------------------------------------------------------------ */ - -/* A word on signals, to the people using PDCLib in their OS projects. - - The definitions of the C standard leave about everything that *could* be - useful to be "implementation defined". Without additional, non-standard - arrangements, it is not possible to turn them into a useful tool. - - This example implementation chose to "not generate any of these signals, - except as a result of explicit calls to the raise function", which is - allowed by the standard but of course does nothing for the usefulness of - . - - A useful signal handling would: - 1) make signal() a system call that registers the signal handler with the OS - 2) make raise() a system call triggering an OS signal to the running process - 3) make provisions that further signals of the same type are blocked until - the signal handler returns (optional for SIGILL) -*/ - -/* These are the values used by Linux. */ - -/* Abnormal termination / abort() */ -#define SIGABRT 6 -/* Arithmetic exception / division by zero / overflow */ -#define SIGFPE 8 -/* Illegal instruction */ -#define SIGILL 4 -/* Interactive attention signal */ -#define SIGINT 2 -/* Invalid memory access */ -#define SIGSEGV 11 -/* Termination request */ -#define SIGTERM 15 - -/* The following should be defined to pointer values that could NEVER point to - a valid signal handler function. (They are used as special arguments to - signal().) Again, these are the values used by Linux. -*/ -#define SIG_DFL (void (*)( int ))0 -#define SIG_ERR (void (*)( int ))-1 -#define SIG_IGN (void (*)( int ))1 - -typedef _PDCLIB_sig_atomic_t sig_atomic_t; - -/* Installs a signal handler "func" for the given signal. - A signal handler is a function that takes an integer as argument (the signal - number) and returns void. - - Note that a signal handler can do very little else than: - 1) assign a value to a static object of type "volatile sig_atomic_t", - 2) call signal() with the value of sig equal to the signal received, - 3) call _Exit(), - 4) call abort(). - Virtually everything else is undefind. - - The signal() function returns the previous installed signal handler, which - at program start may be SIG_DFL or SIG_ILL. (This implementation uses - SIG_DFL for all handlers.) If the request cannot be honored, SIG_ERR is - returned and errno is set to an unspecified positive value. -*/ -_PDCLIB_PUBLIC void ( *signal( int sig, void ( *func )( int ) ) )( int ); - -/* Raises the given signal (executing the registered signal handler with the - given signal number as parameter). - This implementation does not prevent further signals of the same time from - occuring, but executes signal( sig, SIG_DFL ) before entering the signal - handler (i.e., a second signal before the signal handler re-registers itself - or SIG_IGN will end the program). - Returns zero if successful, nonzero otherwise. */ -_PDCLIB_PUBLIC int raise( int sig ); - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_SIGNAL_H -#include _PDCLIB_EXTEND_SIGNAL_H -#endif - -#endif diff --git a/sysroot/usr/include/stdalign.h b/sysroot/usr/include/stdalign.h deleted file mode 100644 index b302601..0000000 --- a/sysroot/usr/include/stdalign.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Alignment - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_STDALIGN_H -#define _PDCLIB_STDALIGN_H _PDCLIB_STDALIGN_H - -#ifndef __cplusplus -#define __alignas_is_defined 1 -#define __alignof_is_defined 1 - -#if ! defined( __STDC_VERSION__ ) || ( __STDC_VERSION__ < 202311L ) -#define alignas _Alignas -#define alignof _Alignof -#elif __STDC_VERSION__ >= 202311L -#warning has been deprecated as of C23. -#endif -#endif - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_STDALIGN_H -#include _PDCLIB_EXTEND_STDALIGN_H -#endif - -#endif - diff --git a/sysroot/usr/include/stdarg.h b/sysroot/usr/include/stdarg.h deleted file mode 100644 index 7741b70..0000000 --- a/sysroot/usr/include/stdarg.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Variable arguments - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_STDARG_H -#define _PDCLIB_STDARG_H _PDCLIB_STDARG_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_config.h" - -typedef _PDCLIB_va_list va_list; - -#define va_arg( ap, type ) _PDCLIB_va_arg( ap, type ) -#define va_copy( dest, src ) _PDCLIB_va_copy( dest, src ) -#define va_end( ap ) _PDCLIB_va_end( ap ) -#define va_start( ap, parmN ) _PDCLIB_va_start( ap, parmN ) - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_STDARG_H -#include _PDCLIB_EXTEND_STDARG_H -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sysroot/usr/include/stdbool.h b/sysroot/usr/include/stdbool.h deleted file mode 100644 index e901f63..0000000 --- a/sysroot/usr/include/stdbool.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Boolean type and values - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_STDBOOL_H -#define _PDCLIB_STDBOOL_H _PDCLIB_STDBOOL_H - -#ifndef __cplusplus -#define bool _Bool -#define true 1 -#define false 0 -#endif -#define __bool_true_false_are_defined 1 - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_STDBOOL_H -#include _PDCLIB_EXTEND_STDBOOL_H -#endif - -#endif diff --git a/sysroot/usr/include/stddef.h b/sysroot/usr/include/stddef.h deleted file mode 100644 index 7d03d07..0000000 --- a/sysroot/usr/include/stddef.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Common definitions - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_STDDEF_H -#define _PDCLIB_STDDEF_H _PDCLIB_STDDEF_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_lib_ext1.h" -#include "pdclib/_PDCLIB_internal.h" - -typedef _PDCLIB_ptrdiff_t ptrdiff_t; - -#ifndef _PDCLIB_SIZE_T_DEFINED -#define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED -typedef _PDCLIB_size_t size_t; -#endif - -#ifndef __cplusplus -typedef _PDCLIB_wchar_t wchar_t; -#endif - -#ifndef _PDCLIB_NULL_DEFINED -#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED -#define NULL _PDCLIB_NULL -#endif - -#define offsetof( type, member ) _PDCLIB_offsetof( type, member ) - -/* Annex K -- Bounds-checking interfaces */ - -#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 -#ifndef _PDCLIB_RSIZE_T_DEFINED -#define _PDCLIB_RSIZE_T_DEFINED _PDCLIB_RSIZE_T_DEFINED -typedef size_t rsize_t; -#endif -#endif - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_STDDEF_H -#include _PDCLIB_EXTEND_STDDEF_H -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sysroot/usr/include/stdint.h b/sysroot/usr/include/stdint.h deleted file mode 100644 index 04af6b0..0000000 --- a/sysroot/usr/include/stdint.h +++ /dev/null @@ -1,236 +0,0 @@ -/* Integer types - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_STDINT_H -#define _PDCLIB_STDINT_H _PDCLIB_STDINT_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_lib_ext1.h" -#include "pdclib/_PDCLIB_internal.h" - -/* 7.18.1.1 Exact-width integer types. */ - -#ifdef _PDCLIB_int8_t -typedef _PDCLIB_int8_t int8_t; -typedef _PDCLIB_uint8_t uint8_t; -#endif - -#ifdef _PDCLIB_int16_t -typedef _PDCLIB_int16_t int16_t; -typedef _PDCLIB_uint16_t uint16_t; -#endif - -#ifdef _PDCLIB_int32_t -typedef _PDCLIB_int32_t int32_t; -typedef _PDCLIB_uint32_t uint32_t; -#endif - -#ifdef _PDCLIB_int64_t -typedef _PDCLIB_int64_t int64_t; -typedef _PDCLIB_uint64_t uint64_t; -#endif - -/* 7.18.1.2 Minimum-width integer types */ - -/* You are allowed to add more types here, e.g. int_least24_t. */ - -typedef _PDCLIB_int_least8_t int_least8_t; -typedef _PDCLIB_int_least16_t int_least16_t; -typedef _PDCLIB_int_least32_t int_least32_t; -typedef _PDCLIB_int_least64_t int_least64_t; - -typedef _PDCLIB_uint_least8_t uint_least8_t; -typedef _PDCLIB_uint_least16_t uint_least16_t; -typedef _PDCLIB_uint_least32_t uint_least32_t; -typedef _PDCLIB_uint_least64_t uint_least64_t; - -/* 7.18.1.3 Fastest minimum-width integer types */ - -/* You are allowed to add more types here, e.g. int_fast24_t. */ - -typedef _PDCLIB_int_fast8_t int_fast8_t; -typedef _PDCLIB_int_fast16_t int_fast16_t; -typedef _PDCLIB_int_fast32_t int_fast32_t; -typedef _PDCLIB_int_fast64_t int_fast64_t; - -typedef _PDCLIB_uint_fast8_t uint_fast8_t; -typedef _PDCLIB_uint_fast16_t uint_fast16_t; -typedef _PDCLIB_uint_fast32_t uint_fast32_t; -typedef _PDCLIB_uint_fast64_t uint_fast64_t; - -/* 7.18.1.4 Integer types capable of holding object pointers */ - -typedef _PDCLIB_intptr_t intptr_t; -typedef _PDCLIB_uintptr_t uintptr_t; - -/* 7.18.1.5 Greatest-width integer types */ - -typedef _PDCLIB_intmax_t intmax_t; -typedef _PDCLIB_uintmax_t uintmax_t; - -/* 7.18.2 Limits of specified-width integer types */ - -#if defined( __cplusplus ) && __cplusplus < 201103L -#ifndef __STDC_LIMIT_MACROS -#define _PDCLIB_NO_LIMIT_MACROS -#endif -#endif - -#ifndef _PDCLIB_NO_LIMIT_MACROS - -/* 7.18.2.1 Limits of exact-width integer types */ - -#if _PDCLIB_TWOS_COMPLEMENT == 1 - -#if _PDCLIB_INT_LEAST8_MAX == 0x7f -#define INT8_MAX _PDCLIB_INT_LEAST8_MAX -#define INT8_MIN _PDCLIB_INT_LEAST8_MIN -#define UINT8_MAX _PDCLIB_UINT_LEAST8_MAX -#endif - -#if _PDCLIB_INT_LEAST16_MAX == 0x7fff -#define INT16_MAX _PDCLIB_INT_LEAST16_MAX -#define INT16_MIN _PDCLIB_INT_LEAST16_MIN -#define UINT16_MAX _PDCLIB_UINT_LEAST16_MAX -#endif - -#if _PDCLIB_INT_LEAST32_MAX == 0x7fffffffl -#define INT32_MAX _PDCLIB_INT_LEAST32_MAX -#define INT32_MIN _PDCLIB_INT_LEAST32_MIN -#define UINT32_MAX _PDCLIB_UINT_LEAST32_MAX -#endif - -#if _PDCLIB_INT_LEAST64_MAX == 0x7fffffffffffffffll -#define INT64_MAX _PDCLIB_INT_LEAST64_MAX -#define INT64_MIN _PDCLIB_INT_LEAST64_MIN -#define UINT64_MAX _PDCLIB_UINT_LEAST64_MAX -#endif - -#endif - -/* 7.18.2.2 Limits of minimum-width integer types */ - -#define INT_LEAST8_MIN _PDCLIB_INT_LEAST8_MIN -#define INT_LEAST8_MAX _PDCLIB_INT_LEAST8_MAX -#define UINT_LEAST8_MAX _PDCLIB_UINT_LEAST8_MAX - -#define INT_LEAST16_MIN _PDCLIB_INT_LEAST16_MIN -#define INT_LEAST16_MAX _PDCLIB_INT_LEAST16_MAX -#define UINT_LEAST16_MAX _PDCLIB_UINT_LEAST16_MAX - -#define INT_LEAST32_MIN _PDCLIB_INT_LEAST32_MIN -#define INT_LEAST32_MAX _PDCLIB_INT_LEAST32_MAX -#define UINT_LEAST32_MAX _PDCLIB_UINT_LEAST32_MAX - -#define INT_LEAST64_MIN _PDCLIB_INT_LEAST64_MIN -#define INT_LEAST64_MAX _PDCLIB_INT_LEAST64_MAX -#define UINT_LEAST64_MAX _PDCLIB_UINT_LEAST64_MAX - -/* 7.18.2.3 Limits of fastest minimum-width integer types */ - -#define INT_FAST8_MIN _PDCLIB_INT_FAST8_MIN -#define INT_FAST8_MAX _PDCLIB_INT_FAST8_MAX -#define UINT_FAST8_MAX _PDCLIB_UINT_FAST8_MAX - -#define INT_FAST16_MIN _PDCLIB_INT_FAST16_MIN -#define INT_FAST16_MAX _PDCLIB_INT_FAST16_MAX -#define UINT_FAST16_MAX _PDCLIB_UINT_FAST16_MAX - -#define INT_FAST32_MIN _PDCLIB_INT_FAST32_MIN -#define INT_FAST32_MAX _PDCLIB_INT_FAST32_MAX -#define UINT_FAST32_MAX _PDCLIB_UINT_FAST32_MAX - -#define INT_FAST64_MIN _PDCLIB_INT_FAST64_MIN -#define INT_FAST64_MAX _PDCLIB_INT_FAST64_MAX -#define UINT_FAST64_MAX _PDCLIB_UINT_FAST64_MAX - -/* 7.18.2.4 Limits of integer types capable of holding object pointers */ - -#define INTPTR_MIN _PDCLIB_INTPTR_MIN -#define INTPTR_MAX _PDCLIB_INTPTR_MAX -#define UINTPTR_MAX _PDCLIB_UINTPTR_MAX - -/* 7.18.2.5 Limits of greatest-width integer types */ - -#define INTMAX_MIN _PDCLIB_INTMAX_MIN -#define INTMAX_MAX _PDCLIB_INTMAX_MAX -#define UINTMAX_MAX _PDCLIB_UINTMAX_MAX - -/* 7.18.3 Limits of other integer types */ - -#define PTRDIFF_MIN _PDCLIB_PTRDIFF_MIN -#define PTRDIFF_MAX _PDCLIB_PTRDIFF_MAX - -#define SIG_ATOMIC_MIN _PDCLIB_SIG_ATOMIC_MIN -#define SIG_ATOMIC_MAX _PDCLIB_SIG_ATOMIC_MAX - -#define SIZE_MAX _PDCLIB_SIZE_MAX - -#define WCHAR_MIN _PDCLIB_WCHAR_MIN -#define WCHAR_MAX _PDCLIB_WCHAR_MAX - -#define WINT_MIN _PDCLIB_WINT_MIN -#define WINT_MAX _PDCLIB_WINT_MAX - -#endif - -/* 7.18.4 Macros for integer constants */ - -#if defined( __cplusplus ) && __cplusplus < 201103L -#ifndef __STDC_CONSTANT_MACROS -#define _PDCLIB_NO_CONSTANT_MACROS -#endif -#endif - -#ifndef _PDCLIB_NO_CONSTANT_MACROS - -/* 7.18.4.1 Macros for minimum-width integer constants */ - -/* Expand to an integer constant of specified value and type int_leastN_t */ - -#define INT8_C _PDCLIB_INT_LEAST8_C -#define INT16_C _PDCLIB_INT_LEAST16_C -#define INT32_C _PDCLIB_INT_LEAST32_C -#define INT64_C _PDCLIB_INT_LEAST64_C - -/* Expand to an integer constant of specified value and type uint_leastN_t */ - -#define UINT8_C _PDCLIB_UINT_LEAST8_C -#define UINT16_C _PDCLIB_UINT_LEAST16_C -#define UINT32_C _PDCLIB_UINT_LEAST32_C -#define UINT64_C _PDCLIB_UINT_LEAST64_C - -/* 7.18.4.2 Macros for greatest-width integer constants */ - -/* Expand to an integer constant of specified value and type intmax_t */ -#define INTMAX_C( value ) _PDCLIB_INTMAX_C( value ) - -/* Expand to an integer constant of specified value and type uintmax_t */ -#define UINTMAX_C( value ) _PDCLIB_UINTMAX_C( value ) - -#endif - -/* Annex K -- Bounds-checking interfaces */ - -#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 -#define RSIZE_MAX ( _PDCLIB_SIZE_MAX >> 1 ) -#endif - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_STDINT_H -#include _PDCLIB_EXTEND_STDINT_H -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sysroot/usr/include/stdio.h b/sysroot/usr/include/stdio.h deleted file mode 100644 index 4ee538f..0000000 --- a/sysroot/usr/include/stdio.h +++ /dev/null @@ -1,935 +0,0 @@ -/* Input/output - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_STDIO_H -#define _PDCLIB_STDIO_H _PDCLIB_STDIO_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_lib_ext1.h" -#include "pdclib/_PDCLIB_internal.h" - -#ifndef _PDCLIB_SIZE_T_DEFINED -#define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED -typedef _PDCLIB_size_t size_t; -#endif - -#ifndef _PDCLIB_NULL_DEFINED -#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED -#define NULL _PDCLIB_NULL -#endif - -/* See setvbuf(), third argument */ -#define _IOFBF (1u<<0) -#define _IOLBF (1u<<1) -#define _IONBF (1u<<2) - -/* The following are platform-dependent, and defined in _PDCLIB_config.h. */ -typedef struct _PDCLIB_fpos_t fpos_t; -typedef struct _PDCLIB_file_t FILE; -#define EOF (-1) -#define BUFSIZ _PDCLIB_BUFSIZ -#define FOPEN_MAX _PDCLIB_FOPEN_MAX -#define FILENAME_MAX _PDCLIB_FILENAME_MAX -#define L_tmpnam _PDCLIB_L_tmpnam -#define TMP_MAX _PDCLIB_TMP_MAX - -/* See fseek(), third argument */ -#define SEEK_CUR _PDCLIB_SEEK_CUR -#define SEEK_END _PDCLIB_SEEK_END -#define SEEK_SET _PDCLIB_SEEK_SET - -extern FILE * stdin; -extern FILE * stdout; -extern FILE * stderr; - -/* Operations on files */ - -/* Remove the given file. - Returns zero if successful, non-zero otherwise. - This implementation does detect if a file of that name is currently open, - and fails the remove in this case. This does not detect two distinct names - that merely result in the same file (e.g. "/home/user/foo" vs. "~/foo"). -*/ -_PDCLIB_PUBLIC int remove( const char * filename ); - -/* Rename the given old file to the given new name. - Returns zero if successful, non-zero otherwise. - This implementation does detect if the old filename corresponds to an open - file, and fails the rename in this case. - If there already is a file with the new filename, behaviour is defined by - the glue code (see functions/_PDCLIB/rename.c). -*/ -_PDCLIB_PUBLIC int rename( const char * oldpath, const char * newpath ); - -/* Open a temporary file with mode "wb+", i.e. binary-update. Remove the file - automatically if it is closed or the program exits normally (by returning - from main() or calling exit()). - Returns a pointer to a FILE handle for this file. - This implementation does not remove temporary files if the process aborts - abnormally (e.g. abort()). -*/ -_PDCLIB_PUBLIC FILE * tmpfile( void ); - -/* Generate a file name that is not equal to any existing filename AT THE TIME - OF GENERATION. Generate a different name each time it is called. - Returns a pointer to an internal static buffer containing the filename if s - is a NULL pointer. (This is not thread-safe!) - Returns s if it is not a NULL pointer (s is then assumed to point to an array - of at least L_tmpnam characters). - Returns NULL if unable to generate a suitable name (because all possible - names already exist, or the function has been called TMP_MAX times already). - Note that this implementation cannot guarantee a file of the name generated - is not generated between the call to this function and a subsequent fopen(). -*/ -_PDCLIB_PUBLIC char * tmpnam( char * s ); - -/* File access functions */ - -/* Close the file associated with the given stream (after flushing its buffers). - Returns zero if successful, EOF if any errors occur. -*/ -_PDCLIB_PUBLIC int fclose( FILE * stream ); - -/* Flush the buffers of the given output stream. If the stream is an input - stream, or an update stream with the last operation being an input operation, - behaviour is undefined. - If stream is a NULL pointer, perform the buffer flushing for all applicable - streams. - Returns zero if successful, EOF if a write error occurs. - Sets the error indicator of the stream if a write error occurs. -*/ -_PDCLIB_PUBLIC int fflush( FILE * stream ); - -/* Open the file with the given filename in the given mode, and return a stream - handle for it in which error and end-of-file indicator are cleared. Defined - values for mode are: - - READ MODES - text files binary files - without update "r" "rb" - with update "r+" "rb+" or "r+b" - - Opening in read mode fails if no file with the given filename exists, or if - cannot be read. - - WRITE MODES - text files binary files - without update "w" "wb" - with update "w+" "wb+" or "w+b" - - With write modes, if a file with the given filename already exists, it is - truncated to zero length. - - APPEND MODES - text files binary files - without update "a" "ab" - with update "a+" "ab+" or "a+b" - - With update modes, if a file with the given filename already exists, it is - not truncated to zero length, but all writes are forced to end-of-file (this - regardless to fseek() calls). Note that binary files opened in append mode - might have their end-of-file padded with '\0' characters. - - Update modes mean that both input and output functions can be performed on - the stream, but output must be terminated with a call to either fflush(), - fseek(), fsetpos(), or rewind() before input is performed, and input must - be terminated with a call to either fseek(), fsetpos(), or rewind() before - output is performed, unless input encountered end-of-file. - - If a text file is opened with update mode, the implementation is at liberty - to open a binary stream instead. This implementation honors the exact mode - given. - - The stream is fully buffered if and only if it can be determined not to - refer to an interactive device. - - If the mode string begins with but is longer than one of the above sequences - the implementation is at liberty to ignore the additional characters, or do - implementation-defined things. This implementation only accepts the exact - modes above. - - Returns a pointer to the stream handle if successfull, NULL otherwise. -*/ -_PDCLIB_PUBLIC FILE * fopen( const char * _PDCLIB_restrict filename, const char * _PDCLIB_restrict mode ); - -/* Close any file currently associated with the given stream. Open the file - identified by the given filename with the given mode (equivalent to fopen()), - and associate it with the given stream. If filename is a NULL pointer, - attempt to change the mode of the given stream. - This implementation allows any mode changes on "real" files, and associating - of the standard streams with files. It does *not* support mode changes on - standard streams. - (Primary use of this function is to redirect stdin, stdout, and stderr.) - - Returns a pointer to the stream handle if successfull, NULL otherwise. -*/ -_PDCLIB_PUBLIC FILE * freopen( const char * _PDCLIB_restrict filename, const char * _PDCLIB_restrict mode, FILE * _PDCLIB_restrict stream ); - -/* If buf is a NULL pointer, call setvbuf( stream, NULL, _IONBF, BUFSIZ ). - If buf is not a NULL pointer, call setvbuf( stream, buf, _IOFBF, BUFSIZ ). -*/ -_PDCLIB_PUBLIC void setbuf( FILE * _PDCLIB_restrict stream, char * _PDCLIB_restrict buf ); - -/* Set the given stream to the given buffering mode. If buf is not a NULL - pointer, use buf as file buffer (of given size). If buf is a NULL pointer, - use a buffer of given size allocated internally. _IONBF causes unbuffered - behaviour, _IOLBF causes line-buffered behaviour, _IOFBF causes fully - buffered behaviour. Calling this function is only valid right after a file is - opened, and before any other operation (except for any unsuccessful calls to - setvbuf()) has been performed. - Returns zero if successful, nonzero otherwise. -*/ -_PDCLIB_PUBLIC int setvbuf( FILE * _PDCLIB_restrict stream, char * _PDCLIB_restrict buf, int mode, size_t size ); - -/* Formatted input/output functions */ - -/* - Write output to the given stream, as defined by the given format string and - 0..n subsequent arguments (the argument stack). - - The format string is written to the given stream verbatim, except for any - conversion specifiers included, which start with the letter '%' and are - documented below. If the given conversion specifiers require more arguments - from the argument stack than provided, behaviour is undefined. Additional - arguments not required by conversion specifiers are evaluated but otherwise - ignored. - - (The standard specifies the format string is allowed to contain multibyte - character sequences as long as it starts and ends in initial shift state, - but this is not yet supported by this implementation, which interprets the - format string as sequence of char.) - TODO: Add multibyte support to printf() functions. - - A conversion specifier consists of: - - Zero or more flags (one of the characters "-+ #0"). - - Optional minimum field width as decimal integer. Default is padding to the - left, using spaces. Note that 0 is taken as a flag, not the beginning of a - field width. Note also that a small field width will not result in the - truncation of a value. - - Optional precision (given as ".#" with # being a decimal integer), - specifying: - - the min. number of digits to appear (diouxX), - - the max. number of digits after the decimal point (aAeEfF), - - the max. number of significant digits (gG), - - the max. number of bytes to be written (s). - - behaviour with other conversion specifiers is undefined. - - Optional length modifier specifying the size of the argument (one of "hh", - "ll", or one of the characters "hljztL"). - - Conversion specifier character specifying the type of conversion to be - applied (and the type of the next argument from the argument stack). One - of the characters "diouxXfFeEgGaAcspn%". - - Minimum field width and/or precision may be given as asterisk ('*') instead - of a decimal integer. In this case, the next argument from the argument - stack is assumed to be an int value specifying the width / precision. A - negative field width is interpreted as flag '-' followed by a positive field - width. A negative precision is interpreted as if no precision was given. - - FLAGS - - Left-justify the conversion result within its field width. - + Prefix a '+' on positive signed conversion results. Prefix a '-' on - floating conversions resulting in negative zero, or negative values - rounding to zero. - space Prefix a space on positive signed conversion results, or if a signed - conversion results in no characters. If both '+' and ' ' are given, - ' ' is ignored. - # Use an "alternative form" for - - 'o' conversion, increasing precision until the first digit of the - result is a zero; - - 'x' or 'X' conversion, prefixing "0x" or "0X" to nonzero results; - - "aAeEfF" conversions, always printing a decimal point even if no - digits are following; - - 'g' or 'G' conversions, always printing a decimal point even if no - digits are following, and not removing trailing zeroes. - - behaviour for other conversions is unspecified. - 0 Use leading zeroes instead of spaces for field width padding. If both - '-' and '0' are given, '0' is ignored. If a precision is specified for - any of the "diouxX" conversions, '0' is ignored. Behaviour is only - defined for "diouxXaAeEfFgG". - - LENGTH MODIFIERS - hh For "diouxX" conversions, the argument from the argument stack is - assumed to be of char width. (It will have been subject to integer - promotion but will be converted back.) For 'n' conversions, the argument - is assumed to be a pointer to signed char. - h For "diouxX" conversions, the argument from the argument stack is - assumed to be of short int width. (It will have been subject to integer - promotion but will be converted back.) For 'n' conversions, the argument - is assumed to be a pointer to short int. - l For "diouxX" conversions, the argument from the argument stack is - assumed to be of long int width. For 'n' conversions, the argument is - assumed to be a pointer to short int. For 'c' conversions, the argument - is assumed to be a wint_t. For 's' conversions, the argument is assumed - to be a pointer to wchar_t. No effect on "aAeEfFgG" conversions. - ll For "diouxX" conversions, the argument from the argument stack is - assumed to be of long long int width. For 'n' conversions, the argument - is assumed to be a pointer to long long int. - j For "diouxX" conversions, the argument from the argument stack is - assumed to be of intmax_t width. For 'n' conversions, the argument is - assumed to be a pointer to intmax_t. - z For "diouxX" conversions, the argument from the argument stack is - assumed to be of size_t width. For 'n' conversions, the argument is - assumed to be a pointer to size_t. - t For "diouxX" conversions, the argument from the argument stack is - assumed to be of ptrdiff_t width. For 'n' conversions, the argument is - assumed to be a pointer to ptrdiff_t. - L For "aAeEfFgG" conversions, the argument from the argument stack is - assumed to be a long double. - Length modifiers appearing for any conversions not mentioned above will have - undefined behaviour. - If a length modifier appears with any conversion specifier other than as - specified above, the behavior is undefined. - - CONVERSION SPECIFIERS - d,i The argument from the argument stack is assumed to be of type int, and - is converted to a signed decimal value with a minimum number of digits - as specified by the precision (default 1), padded with leading zeroes. - A zero value converted with precision zero yields no output. - o The argument from the argument stack is assumed to be of type unsigned - int, and is converted to an unsigned octal value, other behaviour being - as above. - u The argument from the argument stack is assumed to be of type unsigned - int, and converted to an unsigned decimal value, other behaviour being - as above. - x,X The argument from the argument stack is assumed to be of type unsigned - int, and converted to an unsigned hexadecimal value, using lowercase - "abcdef" for 'x' and uppercase "ABCDEF" for 'X' conversion, other - behaviour being as above. - f,F The argument from the argument stack is assumed to be of type double, - and converted to a decimal floating point in decimal-point notation, - with the number of digits after the decimal point as specified by the - precision (default 6) and the value being rounded appropriately. If - precision is zero (and the '#' flag is not given), no decimal point is - printed. At least one digit is always printed before the decimal point. - For 'f' conversions, an infinity value is printed as either [-]inf or - [-]infinity (, depending on the configuration of this implementation. A - NaN value is printed as [-]nan. For 'F' conversions uppercase characters - are used for these special values. The flags '-', '+' and ' ' apply as - usual to these special values, '#' and '0' have no effect. - e,E The argument from the argument stack is assumed to be of type double, - and converted to a decimal floating point in normalized exponential - notation ([?]d.ddd edd). "Normalized" means one nonzero digit before - the decimal point, unless the value is zero. The number of digits after - the decimal point is specified by the precision (default 6), the value - being rounded appropriately. If precision is zero (and the '#' flag is - not given), no decimal point is printed. The exponent has at least two - digits, and not more than necessary to represent the exponent. If the - value is zero, the exponent is zero. The 'e' written to indicate the - exponend is uppercase for 'E' conversions. - Infinity or NaN values are represented as for 'f' and 'F' conversions, - respectively. - g,G The argument from the argument stack is assumed to be of type double, - and converted according to either 'f' or 'e' format for 'g' conversions, - or 'F' or 'E' format for 'G' conversions, respectively, with the actual - conversion chosen depending on the value. 'e' / 'E' conversion is chosen - if the resulting exponent is < -4 or >= the precision (default 1). - Trailing zeroes are removed (unless the '#' flag is given). A decimal - point appears only if followed by a digit. - Infinity or NaN values are represented as for 'f' and 'F' conversions, - respectively. - a,A The argument from the argument stack is assumed to be of type double, - and converted to a floating point hexadecimal notation ([?]0xh.hhhh pd) - with one hexadecimal digit (being nonzero if the value is normalized, - and otherwise unspecified) before the decimal point, and the number of - digits after the decimal point being specified by the precision. If no - precision is given, the default is to print as many digits as nevessary - to give an exact representation of the value (if FLT_RADIX is a power of - 2). If no precision is given and FLT_RADIX is not a power of 2, the - default is to print as many digits to distinguish values of type double - (possibly omitting trailing zeroes). (A precision p is sufficient to - distinguish values of the source type if 16^p-1 > b^n where b is - FLT_RADIX and n is the number of digits in the significand (to base b) - of the source type. A smaller p might suffice depending on the - implementation's scheme for determining the digit to the left of the - decimal point.) The error has the correct sign for the current rounding - direction. - Unless the '#' flag is given, no decimal-point is given for zero - precision. - The 'a' conversion uses lowercase "abcdef", "0x" and 'p', the 'A' - conversion uppercase "ABCDEF", "0X" and 'P'. - The exponent always has at least one digit, and not more than necessary - to represent the decimal exponent of 2. If the value is zero, the - exponent is zero. - Infinity or NaN values are represented as for 'f' and 'F' conversions, - respectively. - Binary implementations are at liberty to chose the hexadecimal digit to - the left of the decimal point so that subsequent digits align to nibble - boundaries. - c The argument from the argument stack is assumed to be of type int, and - converted to a character after the value has been cast to unsigned char. - If the 'l' length modifier is given, the argument is assumed to be of - type wint_t, and converted as by a "%ls" conversion with no precision - and a pointer to a two-element wchar_t array, with the first element - being the wint_t argument and the second a '\0' wide character. - s The argument from the argument stack is assumed to be a char array (i.e. - pointer to char). Characters from that array are printed until a zero - byte is encountered or as many bytes as specified by a given precision - have been written. - If the l length modifier is given, the argument from the argument stack - is assumed to be a wchar_t array (i.e. pointer to wchar_t). Wide - characters from that array are converted to multibyte characters as by - calls to wcrtomb() (using a mbstate_t object initialized to zero prior - to the first conversion), up to and including the terminating null wide - character. The resulting multibyte character sequence is then printed up - to but not including the terminating null character. If a precision is - given, it specifies the maximum number of bytes to be written (including - shift sequences). If the given precision would require access to a wide - character one past the end of the array, the array shall contain a '\0' - wide character. In no case is a partial multibyte character written. - Redundant shift sequences may result if the multibyte characters have a - state-dependent encoding. - TODO: Clarify these statements regarding %ls. - p The argument from the argument stack is assumed to be a void pointer, - and converted to a sequence of printing characters in an implementation- - defined manner. - This implementation casts the pointer to type intptr_t, and prints the - value as if a %#x conversion specifier was given. - n The argument from the argument stack is assumed to be a pointer to a - signed integer, into which the number of characters written so far by - this call to fprintf is stored. The behaviour, should any flags, field - widths, or precisions be given is undefined. - % A verbatim '%' character is written. No argument is taken from the - argument stack. - - Returns the number of characters written if successful, a negative value - otherwise. -*/ -_PDCLIB_PUBLIC int fprintf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, ... ); - -/* TODO: fscanf() documentation */ -/* - Read input from a given stream, as defined by the given format string, and - store converted input in the objects pointed to by 0..n subsequent arguments - (the argument stack). - - The format string contains a sequence of directives that are expected to - match the input. If such a directive fails to match, the function returns - (matching error). It also returns if an input error occurs (input error). - - Directives can be: - - one or more whitespaces, matching any number of whitespaces in the input; - - printing characters, matching the input verbatim; - - conversion specifications, which convert an input sequence into a value as - defined by the individual specifier, and store that value in a memory - location pointed to by the next pointer on the argument stack. Details are - documented below. If there is an insufficient number of pointers on the - argument stack, behaviour is undefined. Additional arguments not required - by any conversion specifications are evaluated, but otherwise ignored. - - (The standard specifies the format string is allowed to contain multibyte - character sequences as long as it starts and ends in initial shift state, - but this is not yet supported by this implementation, which interprets the - format string as sequence of char.) - TODO: Add multibyte support to scanf() functions. - - A conversion specifier consists of: - - Optional assignment-suppressing character ('*') that makes the conversion - read input as usual, but does not assign the conversion result. - - Optional maximum field width as decimal integer. - - Optional length modifier specifying the size of the argument (one of "hh", - "ll", or one of the characters "hljztL"). - - Conversion specifier character specifying the type of conversion to be - applied (and the type of the next argument from the argument stack). One - of the characters "diouxXaAeEfFgGcs[pn%". - - LENGTH MODIFIERS - hh For "diouxXn" conversions, the next pointer from the argument stack is - assumed to point to a variable of of char width. - h For "diouxXn" conversions, the next pointer from the argument stack is - assumed to point to a variable of short int width. - l For "diouxXn" conversions, the next pointer from the argument stack is - assumed to point to a variable of long int width. - For "aAeEfFgG" conversions, it is assumed to point to a variable of type - double. - For "cs[" conversions, it is assumed to point to a variable of type - wchar_t. - ll For "diouxXn" conversions, the next pointer from the argument stack is - assumed to point to a variable of long long int width. - j For "diouxXn" conversions, the next pointer from the argument stack is - assumed to point to a variable of intmax_t width. - z For "diouxXn" conversions, the next pointer from the argument stack is - assumed to point to a variable of size_t width. - t For "diouxXn" conversions, the next pointer from the argument stack is - assumed to point to a variable of ptrdiff_t width. - L For "aAeEfFgG" conversions, the next pointer from the argument stack is - assumed to point to a variable of type long double. - Length modifiers appearing for any conversions not mentioned above will have - undefined behaviour. - If a length modifier appears with any conversion specifier other than as - specified above, the behavior is undefined. - - CONVERSION SPECIFIERS - d Matches an (optionally signed) decimal integer of the format expected - by strtol() with base 10. The next pointer from the argument stack is - assumed to point to a signed integer. - i Matches an (optionally signed) integer of the format expected by - strtol() with base 0. The next pointer from the argument stack is - assumed to point to a signed integer. - o Matches an (optionally signed) octal integer of the format expected by - strtoul() with base 8. The next pointer from the argument stack is - assumed to point to an unsigned integer. - u Matches an (optionally signed) decimal integer of the format expected - by strtoul() with base 10. The next pointer from the argument stack is - assumed to point to an unsigned integer. - x Matches an (optionally signed) hexadecimal integer of the format - expected by strtoul() with base 16. The next pointer from the argument - stack is assumed to point to an unsigned integer. - aefg Matches an (optionally signed) floating point number, infinity, or not- - a-number-value of the format expected by strtod(). The next pointer - from the argument stack is assumed to point to a float. - c Matches a number of characters as specified by the field width (default - 1). The next pointer from the argument stack is assumed to point to a - character array large enough to hold that many characters. - If the 'l' length modifier is given, the input is assumed to match a - sequence of multibyte characters (starting in the initial shift state), - which will be converted to a wide character sequence as by successive - calls to mbrtowc() with a mbstate_t object initialized to zero prior to - the first conversion. The next pointer from the argument stack is - assumed to point to a wchar_t array large enough to hold that many - characters. - In either case, note that no '\0' character is added to terminate the - sequence. - s Matches a sequence of non-white-space characters. The next pointer from - the argument stack is assumed to point to a character array large - enough to hold the sequence including terminating '\0' character. - If the 'l' length modifier is given, the input is assumed to match a - sequence of multibyte characters (starting in the initial shift state), - which will be converted to a wide character sequence as by a call to - mbrtowc() with a mbstate_t object initialized to zero prior to the - first conversion. The next pointer from the argument stack is assumed - to point to a wchar_t array large enough to hold the sequence including - terminating '\0' character. - [ Matches a nonempty sequence consisting of any of those characters - specified between itself and a corresponding closing bracket (']'). - If the first character in the list is a circumflex ('^'), this matches - a nonempty sequence consisting of any characters NOT specified. If the - closing bracket appears as the first character in the scanset ("[]" or - "[^]", it is assumed to belong to the scanset, which then ends with the - NEXT closing bracket. - If there is a '-' character in the scanset which is not the first after - the opening bracket (or the circumflex, see above) or the last in the - scanset, behaviour is implementation-defined. This implementation - handles this character like any other. - - The extend of the input field is determined byte-by-byte for the above - conversions ('c', 's', '['), with no special provisions being made for - multibyte characters. The resulting field is nevertheless a multibyte - sequence begining in intial shift state. - - p Matches a sequence of characters as produced by the printf() "%p" - conversion. The next pointer from the argument stack is assumed to - point to a void pointer, which will be filled with the same location - as the pointer used in the printf() statement. Note that behaviour is - undefined if the input value is not the result of an earlier printf() - call. - n Does not read input. The next pointer from the argument stack is - assumed to point to a signed integer, into which the number of - characters read from input so far by this call to fscanf() is stored. - This does not affect the return value of fscanf(). The behaviour, - should an assignment-supressing character of field width be given, - is undefined. - This can be used to test the success of literal matches and suppressed - assignments. - % Matches a single, verbatim '%' character. - - A, E, F, G and X are valid, and equivalent to their lowercase counterparts. - - All conversions except [, c, or n imply that whitespace characters from the - input stream are consumed until a non-whitespace character is encountered. - Such whitespaces do not count against a maximum field width. - - Conversions push at most one character back into the input stream. That - implies that some character sequences converted by the strtol() and strtod() - function families are not converted identically by the scnaf() function - family. - - Returns the number of input items successfully assigned. This can be zero if - an early mismatch occurs. Returns EOF if an input failure occurs before the - first conversion. -*/ -_PDCLIB_PUBLIC int fscanf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, ... ); - -/* Equivalent to fprintf( stdout, format, ... ). */ -_PDCLIB_PUBLIC int printf( const char * _PDCLIB_restrict format, ... ); - -/* Equivalent to fscanf( stdin, format, ... ). */ -_PDCLIB_PUBLIC int scanf( const char * _PDCLIB_restrict format, ... ); - -/* Equivalent to fprintf( stdout, format, ... ), except that the result is - written into the buffer pointed to by s, instead of stdout, and that any - characters beyond the (n-1)th are discarded. The (n)th character is - replaced by a '\0' character in this case. - Returns the number of characters that would have been written (not counting - the terminating '\0' character) if n had been sufficiently large, if - successful, and a negative number if an encoding error ocurred. -*/ -_PDCLIB_PUBLIC int snprintf( char * _PDCLIB_restrict s, size_t n, const char * _PDCLIB_restrict format, ... ); - -/* Equivalent to fprintf( stdout, format, ... ), except that the result is - written into the buffer pointed to by s, instead of stdout. -*/ -_PDCLIB_PUBLIC int sprintf( char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, ... ); - -/* Equivalent to fscanf( stdin, format, ... ), except that the input is read - from the buffer pointed to by s, instead of stdin. -*/ -_PDCLIB_PUBLIC int sscanf( const char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, ... ); - -/* Equivalent to fprintf( stream, format, ... ), except that the argument stack - is passed as va_list parameter. Note that va_list is not declared by - . -*/ -_PDCLIB_PUBLIC int vfprintf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); - -/* Equivalent to fscanf( stream, format, ... ), except that the argument stack - is passed as va_list parameter. Note that va_list is not declared by - . -*/ -_PDCLIB_PUBLIC int vfscanf( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); - -/* Equivalent to fprintf( stdout, format, ... ), except that the argument stack - is passed as va_list parameter. Note that va_list is not declared by - . -*/ -_PDCLIB_PUBLIC int vprintf( const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); - -/* Equivalent to fscanf( stdin, format, ... ), except that the argument stack - is passed as va_list parameter. Note that va_list is not declared by - . -*/ -_PDCLIB_PUBLIC int vscanf( const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); - -/* Equivalent to snprintf( s, n, format, ... ), except that the argument stack - is passed as va_list parameter. Note that va_list is not declared by - . -*/ -_PDCLIB_PUBLIC int vsnprintf( char * _PDCLIB_restrict s, size_t n, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); - -/* Equivalent to fprintf( stdout, format, ... ), except that the argument stack - is passed as va_list parameter, and the result is written to the buffer - pointed to by s, instead of stdout. Note that va_list is not declared by - . -*/ -_PDCLIB_PUBLIC int vsprintf( char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); - -/* Equivalent to fscanf( stdin, format, ... ), except that the argument stack - is passed as va_list parameter, and the input is read from the buffer - pointed to by s, instead of stdin. Note that va_list is not declared by - . -*/ -_PDCLIB_PUBLIC int vsscanf( const char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); - -/* Character input/output functions */ - -/* Retrieve the next character from given stream. - Returns the character, EOF otherwise. - If end-of-file is reached, the EOF indicator of the stream is set. - If a read error occurs, the error indicator of the stream is set. -*/ -_PDCLIB_PUBLIC int fgetc( FILE * stream ); - -/* Read at most n-1 characters from given stream into the array s, stopping at - \n or EOF. Terminate the read string with \n. If EOF is encountered before - any characters are read, leave the contents of s unchanged. - Returns s if successful, NULL otherwise. - If a read error occurs, the error indicator of the stream is set. In this - case, the contents of s are indeterminate. -*/ -_PDCLIB_PUBLIC char * fgets( char * _PDCLIB_restrict s, int n, FILE * _PDCLIB_restrict stream ); - -/* Write the value c (cast to unsigned char) to the given stream. - Returns c if successful, EOF otherwise. - If a write error occurs, sets the error indicator of the stream is set. -*/ -_PDCLIB_PUBLIC int fputc( int c, FILE * stream ); - -/* Write the string s (not including the terminating \0) to the given stream. - Returns a value >=0 if successful, EOF otherwise. - This implementation does set the error indicator of the stream if a write - error occurs. -*/ -_PDCLIB_PUBLIC int fputs( const char * _PDCLIB_restrict s, FILE * _PDCLIB_restrict stream ); - -/* Equivalent to fgetc( stream ), but may be overloaded by a macro that - evaluates its parameter more than once. -*/ -_PDCLIB_PUBLIC int getc( FILE * stream ); - -/* Equivalent to fgetc( stdin ). */ -_PDCLIB_PUBLIC int getchar( void ); - -/* Equivalent to fputc( c, stream ), but may be overloaded by a macro that - evaluates its parameter more than once. -*/ -_PDCLIB_PUBLIC int putc( int c, FILE * stream ); - -/* Equivalent to fputc( c, stdout ), but may be overloaded by a macro that - evaluates its parameter more than once. -*/ -_PDCLIB_PUBLIC int putchar( int c ); - -/* Write the string s (not including the terminating \0) to stdout, and append - a newline to the output. Returns a value >= 0 when successful, EOF if a - write error occurred. -*/ -_PDCLIB_PUBLIC int puts( const char * s ); - -/* Push the value c (cast to unsigned char) back onto the given (input) stream. - A character pushed back in this way will be delivered by subsequent read - operations (and skipped by subsequent file positioning operations) as if it - has not been read. The external representation of the stream is unaffected - by this pushback (it is a buffer operation). One character of pushback is - guaranteed, further pushbacks may fail. EOF as value for c does not change - the input stream and results in failure of the function. - For text files, the file position indicator is indeterminate until all - pushed-back characters are read. For binary files, the file position - indicator is decremented by each successful call of ungetc(). If the file - position indicator for a binary file was zero before the call of ungetc(), - behaviour is undefined. (Older versions of the library allowed such a call.) - Returns the pushed-back character if successful, EOF if it fails. -*/ -_PDCLIB_PUBLIC int ungetc( int c, FILE * stream ); - -/* Direct input/output functions */ - -/* Read up to nmemb elements of given size from given stream into the buffer - pointed to by ptr. Returns the number of elements successfully read, which - may be less than nmemb if a read error or EOF is encountered. If a read - error is encountered, the value of the file position indicator is - indeterminate. If a partial element is read, its value is indeterminate. - If size or nmemb are zero, the function does nothing and returns zero. -*/ -_PDCLIB_PUBLIC size_t fread( void * _PDCLIB_restrict ptr, size_t size, size_t nmemb, FILE * _PDCLIB_restrict stream ); - -/* Write up to nmemb elements of given size from buffer pointed to by ptr to - the given stream. Returns the number of elements successfully written, which - will be less than nmemb only if a write error is encountered. If a write - error is encountered, the value of the file position indicator is - indeterminate. If size or nmemb are zero, the function does nothing and - returns zero. -*/ -_PDCLIB_PUBLIC size_t fwrite( const void * _PDCLIB_restrict ptr, size_t size, size_t nmemb, FILE * _PDCLIB_restrict stream ); - -/* File positioning functions */ - -/* Store the current position indicator (and, where appropriate, the current - mbstate_t status object) for the given stream into the given pos object. The - actual contents of the object are unspecified, but it can be used as second - parameter to fsetpos() to reposition the stream to the exact position and - parse state at the time fgetpos() was called. - Returns zero if successful, nonzero otherwise. - TODO: Implementation-defined errno setting for fgetpos(). -*/ -_PDCLIB_PUBLIC int fgetpos( FILE * _PDCLIB_restrict stream, fpos_t * _PDCLIB_restrict pos ); - -/* Set the position indicator for the given stream to the given offset from: - - the beginning of the file if whence is SEEK_SET, - - the current value of the position indicator if whence is SEEK_CUR, - - end-of-file if whence is SEEK_END. - On text streams, non-zero offsets are only allowed with SEEK_SET, and must - have been returned by ftell() for the same file. - Any characters buffered by ungetc() are dropped, the end-of-file indicator - for the stream is cleared. If the given stream is an update stream, the next - operation after a successful fseek() may be either input or output. - Returns zero if successful, nonzero otherwise. If a read/write error occurs, - the error indicator for the given stream is set. -*/ -_PDCLIB_PUBLIC int fseek( FILE * stream, long int offset, int whence ); - -/* Set the position indicator (and, where appropriate the mbstate_t status - object) for the given stream to the given pos object (created by an earlier - call to fgetpos() on the same file). - Any characters buffered by ungetc() are dropped, the end-of-file indicator - for the stream is cleared. If the given stream is an update stream, the next - operation after a successful fsetpos() may be either input or output. - Returns zero if successful, nonzero otherwise. If a read/write error occurs, - the error indicator for the given stream is set. - TODO: Implementation-defined errno setting for fsetpos(). -*/ -_PDCLIB_PUBLIC int fsetpos( FILE * stream, const fpos_t * pos ); - -/* Return the current offset of the given stream from the beginning of the - associated file. For text streams, the exact value returned is unspecified - (and may not be equal to the number of characters), but may be used in - subsequent calls to fseek(). - Returns -1L if unsuccessful. - TODO: Implementation-defined errno setting for ftell(). -*/ -_PDCLIB_PUBLIC long int ftell( FILE * stream ); - -/* Equivalent to (void)fseek( stream, 0L, SEEK_SET ), except that the error - indicator for the stream is also cleared. -*/ -_PDCLIB_PUBLIC void rewind( FILE * stream ); - -/* Error-handling functions */ - -/* Clear the end-of-file and error indicators for the given stream. */ -_PDCLIB_PUBLIC void clearerr( FILE * stream ); - -/* Return zero if the end-of-file indicator for the given stream is not set, - nonzero otherwise. -*/ -_PDCLIB_PUBLIC int feof( FILE * stream ); - -/* Return zero if the error indicator for the given stream is not set, nonzero - otherwise. -*/ -_PDCLIB_PUBLIC int ferror( FILE * stream ); - -/* If s is neither a NULL pointer nor an empty string, print the string to - stderr (with appended colon (':') and a space) first. In any case, print an - error message depending on the current value of errno (being the same as if - strerror( errno ) had been called). -*/ -_PDCLIB_PUBLIC void perror( const char * s ); - -/* Annex K -- Bounds-checking interfaces */ - -#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 - -#define L_tmpnam_s _PDCLIB_L_tmpnam -#define TMP_MAX_S _PDCLIB_TMP_MAX - -#ifndef _PDCLIB_ERRNO_T_DEFINED -#define _PDCLIB_ERRNO_T_DEFINED _PDCLIB_ERRNO_T_DEFINED -typedef int errno_t; -#endif - -#ifndef _PDCLIB_RSIZE_T_DEFINED -#define _PDCLIB_RSIZE_T_DEFINED _PDCLIB_RSIZE_T_DEFINED -typedef _PDCLIB_size_t rsize_t; -#endif - -/* Open a temporary file with mode "wb+", i.e. binary-update. Remove the file - automatically if it is closed or the program exits normally (by returning - from main() or calling exit()). - If successful, the FILE * pointed to by streamptr will be set to point at - the opened file handle, and the function returns zero. If unsuccessful, - the FILE * pointed to by streamptr will be set to NULL and a non-zero - value is returned. - The following conditions will be considered runtime constraint violations: - - streamptr being NULL. - In case of a constraint violation, no file is being created. - This implementation does not remove temporary files if the process aborts - abnormally (e.g. abort()). -*/ -_PDCLIB_PUBLIC errno_t tmpfile_s( FILE * _PDCLIB_restrict * _PDCLIB_restrict streamptr ); - -/* Open the file with the given filename in the given mode, and sets the given - streamptr to point at the file handle for that file, in which error and - end-of-file indicator are cleared. Defined values for mode are: - - READ MODES - text files binary files - without update "r" "rb" - with update "r+" "rb+" or "r+b" - - Opening in read mode fails if no file with the given filename exists, or if - cannot be read. - - WRITE MODES - text files binary files - without update "w" "wb" - with update "w+" "wb+" or "w+b" - - With write modes, if a file with the given filename already exists, it is - truncated to zero length. - - APPEND MODES - text files binary files - without update "a" "ab" - with update "a+" "ab+" or "a+b" - - With update modes, if a file with the given filename already exists, it is - not truncated to zero length, but all writes are forced to end-of-file (this - regardless to fseek() calls). Note that binary files opened in append mode - might have their end-of-file padded with '\0' characters. - - Update modes mean that both input and output functions can be performed on - the stream, but output must be terminated with a call to either fflush(), - fseek(), fsetpos(), or rewind() before input is performed, and input must - be terminated with a call to either fseek(), fsetpos(), or rewind() before - output is performed, unless input encountered end-of-file. - - If a text file is opened with update mode, the implementation is at liberty - to open a binary stream instead. This implementation honors the exact mode - given. - - The stream is fully buffered if and only if it can be determined not to - refer to an interactive device. - - If the mode string begins with but is longer than one of the above sequences - the implementation is at liberty to ignore the additional characters, or do - implementation-defined things. This implementation only accepts the exact - modes above. - - The following conditions will be considered runtime constraint violations: - - streamptr being NULL. - - filename being NULL. - - mode being NULL. - In case of a constraint violation, no file is opened. If streamptr is not - NULL, *streamptr is set to NULL. - - Returns zero if successful, non-zero otherwise. -*/ -_PDCLIB_PUBLIC errno_t fopen_s( FILE * _PDCLIB_restrict * _PDCLIB_restrict streamptr, const char * _PDCLIB_restrict filename, const char * _PDCLIB_restrict mode ); - -/* Close any file currently associated with the given stream. Open the file - identified by the given filename with the given mode (equivalent to fopen()), - and associate it with the given stream. If filename is a NULL pointer, - attempt to change the mode of the given stream. - This implementation allows any mode changes on "real" files, and associating - of the standard streams with files. It does *not* support mode changes on - standard streams. - (Primary use of this function is to redirect stdin, stdout, and stderr.) - - The following conditions will be considered runtime constraint violations: - - newstreamptr being NULL. - - mode being NULL. - - stream being NULL. - In case of a constraint violation, no attempt is made to close or open any - file. If newstreamptr is not NULL, *newstreamptr is set to NULL. - - Returns zero if successfull, non-zero otherwise. -*/ -_PDCLIB_PUBLIC errno_t freopen_s( FILE * _PDCLIB_restrict * _PDCLIB_restrict newstreamptr, const char * _PDCLIB_restrict filename, const char * _PDCLIB_restrict mode, FILE * _PDCLIB_restrict stream ); - -/* None of these are implemented yet. Placeholder declarations. */ -_PDCLIB_PUBLIC errno_t tmpnam_s( char * s, rsize_t maxsize ); -_PDCLIB_PUBLIC int fprintf_s( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, ... ); -_PDCLIB_PUBLIC int fscanf_s( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, ... ); -_PDCLIB_PUBLIC int printf_s( const char * _PDCLIB_restrict format, ... ); -_PDCLIB_PUBLIC int scanf_s( const char * _PDCLIB_restrict format, ... ); -_PDCLIB_PUBLIC int snprintf_s( char * _PDCLIB_restrict s, rsize_t n, const char * _PDCLIB_restrict format, ... ); -_PDCLIB_PUBLIC int sprintf_s( char * _PDCLIB_restrict s, rsize_t n, const char * _PDCLIB_restrict format, ... ); -_PDCLIB_PUBLIC int sscanf_s( const char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, ... ); -_PDCLIB_PUBLIC int vfprintf_s( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); -_PDCLIB_PUBLIC int vfscanf_s( FILE * _PDCLIB_restrict stream, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); -_PDCLIB_PUBLIC int vprintf_s( const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); -_PDCLIB_PUBLIC int vscanf_s( const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); -_PDCLIB_PUBLIC int vsnprintf_s( char * _PDCLIB_restrict s, rsize_t n, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); -_PDCLIB_PUBLIC int vsprintf_s( char * _PDCLIB_restrict s, rsize_t n, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); -_PDCLIB_PUBLIC int vsscanf_s( const char * _PDCLIB_restrict s, const char * _PDCLIB_restrict format, _PDCLIB_va_list arg ); -_PDCLIB_PUBLIC char * gets_s( char * s, rsize_t n ); - -#endif - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_STDIO_H -#include _PDCLIB_EXTEND_STDIO_H -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sysroot/usr/include/stdlib.h b/sysroot/usr/include/stdlib.h deleted file mode 100644 index 9dc8b33..0000000 --- a/sysroot/usr/include/stdlib.h +++ /dev/null @@ -1,379 +0,0 @@ -/* General utilities - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_STDLIB_H -#define _PDCLIB_STDLIB_H _PDCLIB_STDLIB_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_lib_ext1.h" -#include "pdclib/_PDCLIB_internal.h" - -#ifndef _PDCLIB_SIZE_T_DEFINED -#define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED -typedef _PDCLIB_size_t size_t; -#endif - -#ifndef _PDCLIB_NULL_DEFINED -#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED -#define NULL _PDCLIB_NULL -#endif - -/* Numeric conversion functions */ - -/* TODO: atof(), strtof(), strtod(), strtold() */ - -_PDCLIB_PUBLIC double atof( const char * nptr ); -_PDCLIB_PUBLIC double strtod( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr ); -_PDCLIB_PUBLIC float strtof( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr ); -_PDCLIB_PUBLIC long double strtold( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr ); - -/* Separate the character array nptr into three parts: A (possibly empty) - sequence of whitespace characters, a character representation of an integer - to the given base, and trailing invalid characters (including the terminating - null character). If base is 0, assume it to be 10, unless the integer - representation starts with 0x / 0X (setting base to 16) or 0 (setting base to - 8). If given, base can be anything from 0 to 36, using the 26 letters of the - base alphabet (both lowercase and uppercase) as digits 10 through 35. - The integer representation is then converted into the return type of the - function. It can start with a '+' or '-' sign. If the sign is '-', the result - of the conversion is negated. - If the conversion is successful, the converted value is returned. If endptr - is not a NULL pointer, a pointer to the first trailing invalid character is - returned in *endptr. - If no conversion could be performed, zero is returned (and nptr in *endptr, - if endptr is not a NULL pointer). If the converted value does not fit into - the return type, the functions return LONG_MIN, LONG_MAX, ULONG_MAX, - LLONG_MIN, LLONG_MAX, or ULLONG_MAX respectively, depending on the sign of - the integer representation and the return type, and errno is set to ERANGE. -*/ -/* There is strtoimax() and strtoumax() in operating on intmax_t / - uintmax_t, if the long long versions do not suit your needs. -*/ -_PDCLIB_PUBLIC long int strtol( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr, int base ); -_PDCLIB_PUBLIC long long int strtoll( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr, int base ); -_PDCLIB_PUBLIC unsigned long int strtoul( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr, int base ); -_PDCLIB_PUBLIC unsigned long long int strtoull( const char * _PDCLIB_restrict nptr, char ** _PDCLIB_restrict endptr, int base ); - -/* These functions are the equivalent of (int)strtol( nptr, NULL, 10 ), - strtol( nptr, NULL, 10 ) and strtoll(nptr, NULL, 10 ) respectively, with the - exception that they do not have to handle overflow situations in any defined - way. - (PDCLib does not simply forward these to their strtox() equivalents, but - provides a simpler atox() function that saves a couple of tests and simply - continues with the conversion in case of overflow.) -*/ -_PDCLIB_PUBLIC int atoi( const char * nptr ); -_PDCLIB_PUBLIC long int atol( const char * nptr ); -_PDCLIB_PUBLIC long long int atoll( const char * nptr ); - -/* Pseudo-random sequence generation functions */ - -extern unsigned long int _PDCLIB_seed; - -#define RAND_MAX 32767 - -/* Returns the next number in a pseudo-random sequence, which is between 0 and - RAND_MAX. - (PDCLib uses the implementation suggested by the standard document, which is - next = next * 1103515245 + 12345; return (unsigned int)(next/65536) % 32768;) -*/ -_PDCLIB_PUBLIC int rand( void ); - -/* Initialize a new pseudo-random sequence with the starting seed. Same seeds - result in the same pseudo-random sequence. The default seed is 1. -*/ -_PDCLIB_PUBLIC void srand( unsigned int seed ); - -/* Memory management functions */ - -/* Allocate a chunk of heap memory of given size. If request could not be - satisfied, return NULL. Otherwise, return a pointer to the allocated - memory. Memory contents are undefined. -*/ -_PDCLIB_PUBLIC void * malloc( size_t size ); - -/* Allocate a chunk of heap memory that is large enough to hold nmemb elements - of the given size, and zero-initialize that memory. If request could not be - satisfied, return NULL. Otherwise, return a pointer to the allocated - memory. -*/ -_PDCLIB_PUBLIC void * calloc( size_t nmemb, size_t size ); - -/* De-allocate a chunk of heap memory previously allocated using malloc(), - calloc(), or realloc(), and pointed to by ptr. If ptr does not match a - pointer previously returned by the mentioned allocation functions, or - free() has already been called for this ptr, behaviour is undefined. -*/ -_PDCLIB_PUBLIC void free( void * ptr ); - -/* Resize a chunk of memory previously allocated with malloc() and pointed to - by ptr to the given size (which might be larger or smaller than the original - size). Returns a pointer to the reallocated memory, or NULL if the request - could not be satisfied. Note that the resizing might include a memcpy() - from the original location to a different one, so the return value might or - might not equal ptr. If size is larger than the original size, the value of - memory beyond the original size is undefined. If ptr is NULL, realloc() - behaves like malloc(). -*/ -_PDCLIB_PUBLIC void * realloc( void * ptr, size_t size ); - -/* Communication with the environment */ - -/* These two can be passed to exit() or _Exit() as status values, to signal - successful and unsuccessful program termination, respectively. EXIT_SUCCESS - can be replaced by 0. How successful or unsuccessful program termination are - signaled to the environment, and what happens if exit() or _Exit() are being - called with a value that is neither of the three, is defined by the hosting - OS and its glue function. -*/ -#define EXIT_SUCCESS _PDCLIB_SUCCESS -#define EXIT_FAILURE _PDCLIB_FAILURE - -/* Initiate abnormal process termination, unless programm catches SIGABRT and - does not return from the signal handler. - This implementantion flushes all streams, closes all files, and removes any - temporary files before exiting with EXIT_FAILURE. - abort() does not return. -*/ -_PDCLIB_PUBLIC _PDCLIB_Noreturn void abort( void ) _PDCLIB_NORETURN; - -/* Register a function that will be called on quick_exit(). - At least 32 functions can be registered this way, and will be called in - reverse order of registration (last-in, first-out). - Returns zero if registration is successfull, nonzero if it failed. -*/ -_PDCLIB_PUBLIC int at_quick_exit( void ( *func )( void ) ); - -/* Register a function that will be called on exit(), or when main() returns. - At least 32 functions can be registered this way, and will be called in - reverse order of registration (last-in, first-out). - Returns zero if registration is successfull, nonzero if it failed. -*/ -_PDCLIB_PUBLIC int atexit( void ( *func )( void ) ); - -/* Normal process termination. Functions registered by atexit() (see above) are - called, streams flushed, files closed and temporary files removed before the - program is terminated with the given status. (See comment for EXIT_SUCCESS - and EXIT_FAILURE above.) - exit() does not return. -*/ -_PDCLIB_PUBLIC _PDCLIB_Noreturn void exit( int status ) _PDCLIB_NORETURN; - -/* Normal process termination. Functions registered by at_quick_exit() (see - above) are called, streams flushed, files closed and temporary files removed - before the program is terminated with the given status. (See comment for - EXIT_SUCCESS and EXIT_FAILURE above.) - quick_exit() does not return. -*/ -_PDCLIB_PUBLIC _PDCLIB_Noreturn void quick_exit( int status ) _PDCLIB_NORETURN; - -/* Normal process termination. Functions registered by atexit()/at_quick_exit() - (see above) are NOT CALLED. This implementation DOES flush streams, close - files and removes temporary files before the program is teminated with the - given status. (See comment for EXIT_SUCCESS and EXIT_FAILURE above.) - _Exit() does not return. -*/ -_PDCLIB_PUBLIC _PDCLIB_Noreturn void _Exit( int status ) _PDCLIB_NORETURN; - -/* Search an environment-provided key-value map for the given key name, and - return a pointer to the associated value string (or NULL if key name cannot - be found). The value string pointed to might be overwritten by a subsequent - call to getenv(). The library never calls getenv() itself. - Details on the provided keys and how to set / change them are determined by - the hosting OS and its glue function. -*/ -_PDCLIB_PUBLIC char * getenv( const char * name ); - -/* If string is a NULL pointer, system() returns nonzero if a command processor - is available, and zero otherwise. If string is not a NULL pointer, it is - passed to the command processor. If system() returns, it does so with a - value that is determined by the hosting OS and its glue function. -*/ -_PDCLIB_PUBLIC int system( const char * string ); - -/* Searching and sorting */ - -/* Do a binary search for a given key in the array with a given base pointer, - which consists of nmemb elements that are of the given size each. To compare - the given key with an element from the array, the given function compar is - called (with key as first parameter and a pointer to the array member as - second parameter); the function should return a value less than, equal to, - or greater than 0 if the key is considered to be less than, equal to, or - greater than the array element, respectively. - The function returns a pointer to a matching element found, or NULL if no - match is found. -*/ -_PDCLIB_PUBLIC void * bsearch( const void * key, const void * base, size_t nmemb, size_t size, int ( *compar )( const void *, const void * ) ); - -/* Do a quicksort on an array with a given base pointer, which consists of - nmemb elements that are of the given size each. To compare two elements from - the array, the given function compar is called, which should return a value - less than, equal to, or greater than 0 if the first argument is considered - to be less than, equal to, or greater than the second argument, respectively. - If two elements are compared equal, their order in the sorted array is not - specified. -*/ -_PDCLIB_PUBLIC void qsort( void * base, size_t nmemb, size_t size, int ( *compar )( const void *, const void * ) ); - -/* Integer arithmetic functions */ - -/* Return the absolute value of the argument. Note that on machines using two- - complement's notation (most modern CPUs), the largest negative value cannot - be represented as positive value. In this case, behaviour is unspecified. -*/ -_PDCLIB_PUBLIC int abs( int j ); -_PDCLIB_PUBLIC long int labs( long int j ); -_PDCLIB_PUBLIC long long int llabs( long long int j ); - -/* These structures each have a member quot and a member rem, of type int (for - div_t), long int (for ldiv_t) and long long it (for lldiv_t) respectively. - The order of the members is platform-defined to allow the div() functions - below to be implemented efficiently. -*/ -typedef struct _PDCLIB_div_t div_t; -typedef struct _PDCLIB_ldiv_t ldiv_t; -typedef struct _PDCLIB_lldiv_t lldiv_t; - -/* Return quotient (quot) and remainder (rem) of an integer division in one of - the structs above. -*/ -_PDCLIB_PUBLIC div_t div( int numer, int denom ); -_PDCLIB_PUBLIC ldiv_t ldiv( long int numer, long int denom ); -_PDCLIB_PUBLIC lldiv_t lldiv( long long int numer, long long int denom ); - -/* TODO: Multibyte / wide character conversion functions */ - -/* TODO: Macro MB_CUR_MAX */ - -/* -_PDCLIB_PUBLIC int mblen( const char * s, size_t n ); -_PDCLIB_PUBLIC int mbtowc( wchar_t * _PDCLIB_restrict pwc, const char * _PDCLIB_restrict s, size_t n ); -_PDCLIB_PUBLIC int wctomb( char * s, wchar_t wc ); -_PDCLIB_PUBLIC size_t mbstowcs( wchar_t * _PDCLIB_restrict pwcs, const char * _PDCLIB_restrict s, size_t n ); -_PDCLIB_PUBLIC size_t wcstombs( char * _PDCLIB_restrict s, const wchar_t * _PDCLIB_restrict pwcs, size_t n ); -*/ - -/* Annex K -- Bounds-checking interfaces */ - -#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 - -#ifndef _PDCLIB_ERRNO_T_DEFINED -#define _PDCLIB_ERRNO_T_DEFINED _PDCLIB_ERRNO_T_DEFINED -typedef int errno_t; -#endif - -#ifndef _PDCLIB_RSIZE_T_DEFINED -#define _PDCLIB_RSIZE_T_DEFINED _PDCLIB_RSIZE_T_DEFINED -typedef size_t rsize_t; -#endif - -/* A function type that can serve as a constraint handler (see below). The - first parameter is an error message on the constraint violation, the - second parameter a pointer to an implementation-defined object, the - third an error code related to the constraint violation. - If the function calling the constraint handler is defined to return - errno_t, the third parameter will be identical to the return value of - that function. - This implementation sets the second parameter of the constraint handler - call to NULL. -*/ -typedef void ( *constraint_handler_t )( const char * _PDCLIB_restrict msg, void * _PDCLIB_restrict ptr, errno_t error ); - -/* The currently active constraint violation handler. This implementation - sets abort_handler_s as the default constraint violation handler. -*/ -extern constraint_handler_t _PDCLIB_constraint_handler; - -/* Set the given function as the new constraint violation handler. */ -_PDCLIB_PUBLIC constraint_handler_t set_constraint_handler_s( constraint_handler_t handler ); - -/* One of two predefined constraint violation handlers. When called, it will - print an error message (including the message passed as the first - parameter to the handler function) and call abort(). -*/ -_PDCLIB_PUBLIC void abort_handler_s( const char * _PDCLIB_restrict msg, void * _PDCLIB_restrict ptr, errno_t error ); - -/* One of two predefined constraint violation handlers. Simply returns, - ignoring the constraint violation. -*/ -_PDCLIB_PUBLIC void ignore_handler_s( const char * _PDCLIB_restrict msg, void * _PDCLIB_restrict ptr, errno_t error ); - -/* Search an environment-provided key-value map for the given key name. - If the name is found, - - if len is not NULL, the length of the associated value string is stored - in that location. - - if len < maxsize, the value string is copied to the indicated location. - If the name is not found, - - if len is not NULL, a zero is stored in that location. - - if maxsize > 0, value[0] is set to the null character. - Details on the provided keys and how to set / change them are determined by - the hosting OS and its glue function. - The following conditions will be considered runtime constraint violations: - - value being a NULL pointer. - - maxsize == 0 or maxsize > RSIZE_MAX. - In case of a constraint violation, if len is not NULL a zero will be - stored at that location, and the environment key-value map not searched. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC errno_t getenv_s( size_t * _PDCLIB_restrict len, char * _PDCLIB_restrict value, rsize_t maxsize, const char * _PDCLIB_restrict name ); - -/* Do a binary search for a given key in the array with a given base pointer, - which consists of nmemb elements that are of the given size each. To compare - the given key with an element from the array, the given function compar is - called (with key as first parameter, a pointer to the array member as - second parameter, and the context parameter passed to bsearch_s() as third - parameter); the function should return a value less than, equal to, - or greater than 0 if the key is considered to be less than, equal to, or - greater than the array element, respectively. - The function returns a pointer to a matching element found, or NULL if no - match is found. - The following conditions will be considered runtime constraint violations: - - nmemb or size > RSIZE_MAX. - - nmemb > 0 and either of key, base, or compar being a null pointer. - In case of a constraint violation, the array will not be searched. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC void * bsearch_s( const void * key, const void * base, rsize_t nmemb, rsize_t size, int ( *compar )( const void * k, const void * y, void * context ), void * context ); - -/* Do a quicksort on an array with a given base pointer, which consists of - nmemb elements that are of the given size each. To compare two elements from - the array, the given function compar is called, with the first two arguments - being pointers to the two objects to be compared, and the third argument - being the context parameter passed to qsort_s. The compar function should - return a value less than, equal to, or greater than 0 if the first argument - is considered to be less than, equal to, or greater than the second argument, - respectively. If two elements are compared equal, their order in the sorted - array is not specified. - The following conditions will be considered runtime constraint violations: - - nmemb or size > RSIZE_MAX. - - nmemb > 0 and either of base or compar being a null pointer. - In case of a constraint violation, the array will not be sorted. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC errno_t qsort_s( void * base, rsize_t nmemb, rsize_t size, int ( *compar )( const void * x, const void * y, void * context ), void * context ); - -/* TODO: Multibyte / wide character functions */ - -#endif - -#ifdef __cplusplus -} -#endif - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_STDLIB_H -#include _PDCLIB_EXTEND_STDLIB_H -#endif - -#endif diff --git a/sysroot/usr/include/stdnoreturn.h b/sysroot/usr/include/stdnoreturn.h deleted file mode 100644 index ab4ddb4..0000000 --- a/sysroot/usr/include/stdnoreturn.h +++ /dev/null @@ -1,26 +0,0 @@ -/* _Noreturn - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_STDNORETURN_H -#define _PDCLIB_STDNORETURN_H _PDCLIB_STDNORETURN_H - -#include "pdclib/_PDCLIB_internal.h" - -/* This basically breaks the letter of the standard (which states that - noreturn be defined to _Noreturn). This defines noreturn -> _Noreturn - on C11 compliant compilers only (as older compilers do not know about - _Noreturn). -*/ -#define noreturn _PDCLIB_Noreturn - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_STDNORETURN_H -#include _PDCLIB_EXTEND_STDNORETURN_H -#endif - -#endif diff --git a/sysroot/usr/include/string.h b/sysroot/usr/include/string.h deleted file mode 100644 index 05062fd..0000000 --- a/sysroot/usr/include/string.h +++ /dev/null @@ -1,394 +0,0 @@ -/* String handling - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_STRING_H -#define _PDCLIB_STRING_H _PDCLIB_STRING_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_lib_ext1.h" -#include "pdclib/_PDCLIB_internal.h" - -#ifndef _PDCLIB_SIZE_T_DEFINED -#define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED -typedef _PDCLIB_size_t size_t; -#endif - -#ifndef _PDCLIB_NULL_DEFINED -#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED -#define NULL _PDCLIB_NULL -#endif - -/* String function conventions */ - -/* - In any of the following functions taking a size_t n to specify the length of - an array or size of a memory region, n may be 0, but the pointer arguments to - the call shall still be valid unless otherwise stated. -*/ - -/* Copying functions */ - -/* Copy a number of n characters from the memory area pointed to by s2 to the - area pointed to by s1. If the two areas overlap, behaviour is undefined. - Returns the value of s1. -*/ -_PDCLIB_PUBLIC void * memcpy( void * _PDCLIB_restrict s1, const void * _PDCLIB_restrict s2, size_t n ); - -/* Copy a number of n characters from the memory area pointed to by s2 to the - area pointed to by s1. The two areas may overlap. - Returns the value of s1. -*/ -_PDCLIB_PUBLIC void * memmove( void * _PDCLIB_restrict s1, const void * _PDCLIB_restrict s2, size_t n ); - -/* Copy the character array s2 (including terminating '\0' byte) into the - character array s1. - Returns the value of s1. -*/ -_PDCLIB_PUBLIC char * strcpy( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2 ); - -/* Copy a maximum of n characters from the character array s2 into the character - array s1. If s2 is shorter than n characters, '\0' bytes will be appended to - the copy in s1 until n characters have been written. If s2 is longer than n - characters, NO terminating '\0' will be written to s1. If the arrays overlap, - behaviour is undefined. - Returns the value of s1. -*/ -_PDCLIB_PUBLIC char * strncpy( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2, size_t n ); - -/* Concatenation functions */ - -/* Append the contents of the character array s2 (including terminating '\0') to - the character array s1 (first character of s2 overwriting the '\0' of s1). If - the arrays overlap, behaviour is undefined. - Returns the value of s1. -*/ -_PDCLIB_PUBLIC char * strcat( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2 ); - -/* Append a maximum of n characters from the character array s2 to the character - array s1 (first character of s2 overwriting the '\0' of s1). A terminating - '\0' is ALWAYS appended, even if the full n characters have already been - written. If the arrays overlap, behaviour is undefined. - Returns the value of s1. -*/ -_PDCLIB_PUBLIC char * strncat( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2, size_t n ); - -/* Comparison functions */ - -/* Compare the first n characters of the memory areas pointed to by s1 and s2. - Returns 0 if s1 == s2, a negative number if s1 < s2, and a positive number if - s1 > s2. -*/ -_PDCLIB_PUBLIC int memcmp( const void * s1, const void * s2, size_t n ); - -/* Compare the character arrays s1 and s2. - Returns 0 if s1 == s2, a negative number if s1 < s2, and a positive number if - s1 > s2. -*/ -_PDCLIB_PUBLIC int strcmp( const char * s1, const char * s2 ); - -/* Compare the character arrays s1 and s2, interpreted as specified by the - LC_COLLATE category of the current locale. - Returns 0 if s1 == s2, a negative number if s1 < s2, and a positive number if - s1 > s2. - TODO: Currently a dummy wrapper for strcmp() as PDCLib does not yet support - locales. -*/ -_PDCLIB_PUBLIC int strcoll( const char * s1, const char * s2 ); - -/* Compare no more than the first n characters of the character arrays s1 and - s2. - Returns 0 if s1 == s2, a negative number if s1 < s2, and a positive number if - s1 > s2. -*/ -_PDCLIB_PUBLIC int strncmp( const char * s1, const char * s2, size_t n ); - -/* Transform the character array s2 as appropriate for the LC_COLLATE setting of - the current locale. If length of resulting string is less than n, store it in - the character array pointed to by s1. Return the length of the resulting - string. -*/ -_PDCLIB_PUBLIC size_t strxfrm( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2, size_t n ); - -/* Search functions */ - -/* Search the first n characters in the memory area pointed to by s for the - character c (interpreted as unsigned char). - Returns a pointer to the first instance found, or NULL. -*/ -_PDCLIB_PUBLIC void * memchr( const void * s, int c, size_t n ); - -/* Search the character array s (including terminating '\0') for the character c - (interpreted as char). - Returns a pointer to the first instance found, or NULL. -*/ -_PDCLIB_PUBLIC char * strchr( const char * s, int c ); - -/* Determine the length of the initial substring of character array s1 which - consists only of characters not from the character array s2. - Returns the length of that substring. -*/ -_PDCLIB_PUBLIC size_t strcspn( const char * s1, const char * s2 ); - -/* Search the character array s1 for any character from the character array s2. - Returns a pointer to the first occurrence, or NULL. -*/ -_PDCLIB_PUBLIC char * strpbrk( const char * s1, const char * s2 ); - -/* Search the character array s (including terminating '\0') for the character c - (interpreted as char). - Returns a pointer to the last instance found, or NULL. -*/ -_PDCLIB_PUBLIC char * strrchr( const char * s, int c ); - -/* Determine the length of the initial substring of character array s1 which - consists only of characters from the character array s2. - Returns the length of that substring. -*/ -_PDCLIB_PUBLIC size_t strspn( const char * s1, const char * s2 ); - -/* Search the character array s1 for the substring in character array s2. - Returns a pointer to that sbstring, or NULL. If s2 is of length zero, - returns s1. -*/ -_PDCLIB_PUBLIC char * strstr( const char * s1, const char * s2 ); - -/* In a series of subsequent calls, parse a C string into tokens. - On the first call to strtok(), the first argument is a pointer to the to-be- - parsed C string. On subsequent calls, the first argument is NULL unless you - want to start parsing a new string. s2 holds an array of separator characters - which can differ from call to call. Leading separators are skipped, the first - trailing separator overwritten with '\0'. - Returns a pointer to the next token. - WARNING: This function uses static storage, and as such is not reentrant. -*/ -_PDCLIB_PUBLIC char * strtok( char * _PDCLIB_restrict s1, const char * _PDCLIB_restrict s2 ); - -/* Miscellaneous functions */ - -/* Write the character c (interpreted as unsigned char) to the first n - characters of the memory area pointed to by s. - Returns s. -*/ -_PDCLIB_PUBLIC void * memset( void * s, int c, size_t n ); - -/* Map an error number to a (locale-specific) error message string. Error - numbers are typically errno values, but any number is mapped to a message. - TODO: PDCLib does not yet support locales. -*/ -_PDCLIB_PUBLIC char * strerror( int errnum ); - -/* Returns the length of the string s (excluding terminating '\0'). -*/ -_PDCLIB_PUBLIC size_t strlen( const char * s ); - -/* Annex K -- Bounds-checking interfaces */ - -#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 - -#ifndef _PDCLIB_ERRNO_T_DEFINED -#define _PDCLIB_ERRNO_T_DEFINED _PDCLIB_ERRNO_T_DEFINED -typedef int errno_t; -#endif - -#ifndef _PDCLIB_RSIZE_T_DEFINED -#define _PDCLIB_RSIZE_T_DEFINED _PDCLIB_RSIZE_T_DEFINED -typedef _PDCLIB_size_t rsize_t; -#endif - -/* Copy a number of n characters from the memory area pointed to by s2 to the - area pointed to by s1 of size s1max. - Returns zero if successful, non-zero otherwise. - The following conditions will be considered runtime constraint violations: - - s1 or s2 being NULL. - - s1max or n being > RSIZE_MAX. - - n > s1max (not enough space in s1). - - copying between overlapping objects. - In case of a constraint violation, if s1 is not NULL and s1max <= RSIZE_MAX - then the first s1max characters of s1 will be set to zero. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC errno_t memcpy_s( void * _PDCLIB_restrict s1, rsize_t s1max, const void * _PDCLIB_restrict s2, rsize_t n ); - -/* Copy a number of n characters from the memory area pointed to by s2 to the - area pointed to by s1 of size s1max. The two areas may overlap. - Returns zero if successful, non-zero otherwise. - The following conditions will be considered runtime constraint violations: - - s1 or s2 being NULL. - - s1max or n being > RSIZE_MAX. - - n > s1max (not enough space in s1). - In case of a constraint violation, if s1 is not NULL and s1max <= RSIZE_MAX - then the first s1max characters of s1 will be set to zero. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC errno_t memmove_s( void * _PDCLIB_restrict s1, rsize_t s1max, const void * _PDCLIB_restrict s2, rsize_t n ); - -/* Copy the character array s2 (including terminating '\0' byte) into the - character array s1. - Returns zero if successful, non-zero otherwise. - The following conditions will be considered runtime constraint violations: - - s1 or s2 being NULL. - - s1max being zero or > RSIZE_MAX. - - s1max not greater than strnlen_s( s2, s1max ) (not enough space in s1). - - copying between overlapping objects. - In case of a constraint violation, if s1 is not NULL and s1max <= RSIZE_MAX - then s1[0] will be set to '\0'. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC errno_t strcpy_s( char * _PDCLIB_restrict s1, rsize_t s1max, const char * _PDCLIB_restrict s2 ); - -/* Copy a maximum of n characters from the character array s2 into the character - array s1. If s2 is longer than n, s1[n] will be set to '\0'. - Returns zero if successful, non-zero otherwise. - - ATTENTION ATTENTION ATTENTION - - This function differs in two fundamental ways from strncpy(): - - remaining space in s1 will NOT be zeroed. Their value is unspecified. - - s1 WILL be zero-terminated even if there is not enough space to hold - all n characters from s2. - - THANK YOU FOR YOUR ATTENTION. - - The following conditions will be considered runtime constraint violations: - - s1 or s2 being NULL. - - s1max or n being > RSIZE_MAX. - - s1max being zero. - - n >= s1max and s1max <= strnlen_s( s2, s1max ) (not enough space in s1). - - copying between overlapping objects. - In case of a constraint violation, if s1 is not NULL and s1max is greater - zero and <= RSIZE_MAX, s1[0] will be set to '\0'. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC errno_t strncpy_s( char * _PDCLIB_restrict s1, rsize_t s1max, const char * _PDCLIB_restrict s2, rsize_t n ); - -/* Append the contents of the character array s2 (including terminating '\0') to - the character array s1 (first character of s2 overwriting the '\0' of s1). - Elements following the terminating null character (if any) take unspecified - values. - Returns zero if successful, non-zero otherwise. - The following conditions will be considered runtime constraint violations: - - s1 or s2 being NULL. - - s1max being > RSIZE_MAX. - - s1max being zero. - - not enough space in s1 for both s1 and the characters copied from s2. - - copying between overlapping objects. - In case of a constraint violation, if s1 is not NULL and s1max is greater - zero and <= RSIZE_MAX, s1[0] will be set to '\0'. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC errno_t strcat_s( char * _PDCLIB_restrict s1, rsize_t s1max, const char * _PDCLIB_restrict s2 ); - -/* Append a maximum of n characters from the character array s2 to the - character array s1 (first character of s2 overwriting the '\0' of s1). A - terminating '\0' is ALWAYS appended, even if the full n characters have - already been written. - Elements following the terminating null character (if any) take unspecified - values. - Returns zero if successful, non-zero otherwise. - The following conditions will be considered runtime constraint violations: - - s1 or s2 being NULL. - - s1max or n being > RSIZE_MAX. - - s1max being zero. - - not enough space in s1 for both s1 and the characters copied from s2. - - copying between overlapping objects. - In case of a constraint violation, if s1 is not NULL and s1max is greater - zero and <= RSIZE_MAX, s1[0] will be set to '\0'. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC errno_t strncat_s( char * _PDCLIB_restrict s1, rsize_t s1max, const char * _PDCLIB_restrict s2, rsize_t n ); - -/* In a series of subsequent calls, parse a C string into tokens. - On the first call to strtok(), the first argument is a pointer to the to-be- - parsed C string of size *s1max. On subsequent calls, the first argument is - NULL unless you want to start parsing a new string. s2 holds an array of - separator characters which can differ from call to call. Leading separators - are skipped, the first trailing separator overwritten with '\0'. - Returns a pointer to the next token. - The following conditions will be considered runtime constraint violations: - - s1max, s2, or ptr being NULL. - - s1max or n being > RSIZE_MAX. - - s1max being zero. - - not enough space in s1 for both s1 and the characters copied from s2. - - copying between overlapping objects. - In case of a constraint violation, if s1 is not NULL and s1max is greater - zero and <= RSIZE_MAX, s1[0] will be set to '\0'. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC char * strtok_s( char * _PDCLIB_restrict s1, rsize_t * _PDCLIB_restrict s1max, const char * _PDCLIB_restrict s2, char ** _PDCLIB_restrict ptr ); - -/* Write the character c (interpreted as unsigned char) to the first n - characters of the memory area pointed to by s of size smax. - Returns zero if successful, non-zero otherwise. - The following conditions will be considered runtime constraint violations: - - s being NULL. - - smax or n being > RSIZE_MAX. - - n being > smax. - In case of a constraint violation, if s is not NULL and smax is <= RSIZE_MAX - the value of c (interpreted as unsigned char) is written to the first smax - characters of s. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC errno_t memset_s( void * s, rsize_t smax, int c, rsize_t n ); - -/* Map an error number to a (locale-specific) error message string. Error - numbers are typically errno values, but any number is mapped to a message. - TODO: PDCLib does not yet support locales. - If the length of the mapped string is < maxsize, the string is copied to s. - Otherwise, if maxsize is greater than zero, as much of the string as does - fit is copied, and s[maxsize-1] set to '\0'. If maxsize is greater than 3, - the partial string is made to end in "...". - Returns zero if the string was copied successfully in full, non-zero - otherwise. - The following conditions will be considered runtime constraint violations: - - s being NULL. - - maxsize being zero or > RSIZE_MAX. - In case of a constraint violation, s is not modified. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC errno_t strerror_s( char * s, rsize_t maxsize, errno_t errnum ); - -/* Map an error number to a (locale-specific) error message string, the same - way as strerror_s() would do. Error numbers are typically errno values, - but any number is mapped to a message. - TODO: PDCLib does not yet support locales. - Returns the length of the mapped string. -*/ -_PDCLIB_PUBLIC size_t strerrorlen_s( errno_t errnum ); - -/* Returns the length of the string s (excluding terminating '\0'). - If there is no null character in the first maxsize characters of s, - rerturns maxsize. If s is NULL, returns zero. - At most the first maxsize characters of s shall be accessed by the - function. -*/ -_PDCLIB_PUBLIC size_t strnlen_s( const char * s, size_t maxsize ); - -#endif - -#ifdef __cplusplus -} -#endif - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_STRING_H -#include _PDCLIB_EXTEND_STRING_H -#endif - -#endif diff --git a/sysroot/usr/include/sys/stat.h b/sysroot/usr/include/sys/stat.h deleted file mode 100644 index 7225b36..0000000 --- a/sysroot/usr/include/sys/stat.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef _SYS_STAT_H -#define _SYS_STAT_H - -#include - -// Basic POSIX types for i686 execution -typedef uint32_t dev_t; -typedef uint32_t ino_t; -typedef uint32_t mode_t; -typedef uint32_t nlink_t; -typedef uint32_t uid_t; -typedef uint32_t gid_t; -typedef int32_t off_t; -typedef int32_t time_t; - -// The stat layout expected by standard C files -struct stat { - dev_t st_dev; /* ID of device containing file */ - ino_t st_ino; /* Inode number */ - mode_t st_mode; /* File type and mode flags */ - nlink_t st_nlink; /* Number of hard links */ - uid_t st_uid; /* User ID of owner */ - gid_t st_gid; /* Group ID of owner */ - dev_t st_rdev; /* Device ID (if special file) */ - off_t st_size; /* Total size, in bytes */ - time_t st_atime; /* Time of last access */ - time_t st_mtime; /* Time of last modification */ - time_t st_ctime; /* Time of last status change */ -}; - -// Traditional POSIX file permission/type bitmasks -#define S_IFMT 0170000 /* Bitmask for the file type bit fields */ -#define S_IFSOCK 0140000 /* Socket */ -#define S_IFLNK 0120000 /* Symbolic link */ -#define S_IFREG 0100000 /* Regular file */ -#define S_IFBLK 0060000 /* Block device */ -#define S_IFDIR 0040000 /* Directory */ -#define S_IFCHR 0020000 /* Character device */ -#define S_IFIFO 0010000 /* FIFO */ - -#define S_IRUSR 00400 /* Owner has read permission */ -#define S_IWUSR 00200 /* Owner has write permission */ -#define S_IXUSR 00100 /* Owner has execute permission */ -#define S_IRWXU 00700 /* Owner has read, write, and execute permission */ - -// Helper check macros commonly used in PDCLib -#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) -#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) - -#endif /* _SYS_STAT_H */ \ No newline at end of file diff --git a/sysroot/usr/include/sys/time.h b/sysroot/usr/include/sys/time.h deleted file mode 100644 index de1d7ce..0000000 --- a/sysroot/usr/include/sys/time.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef _SYS_TIME_H -#define _SYS_TIME_H - -#include - -// Represents an exact elapsed time signature -struct timeval { - time_t tv_sec; /* Seconds since Unix Epoch */ - int32_t tv_usec; /* Microseconds component */ -}; - -// Represents traditional timezone offsets (largely obsolete but required) -struct timezone { - int tz_minuteswest; /* Minutes west of Greenwich */ - int tz_dsttime; /* Type of DST correction */ -}; - -/* Prototype for time fetching system operation */ -int gettimeofday(struct timeval *restrict tv, void *restrict tz); - -#endif /* _SYS_TIME_H */ \ No newline at end of file diff --git a/sysroot/usr/include/sys/times.h b/sysroot/usr/include/sys/times.h deleted file mode 100644 index 0ca899e..0000000 --- a/sysroot/usr/include/sys/times.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef _SYS_TIMES_H -#define _SYS_TIMES_H - -#include - -/* Structure describing CPU time used by a process and its children */ -struct tms { - clock_t tms_utime; /* User CPU time */ - clock_t tms_stime; /* System CPU time */ - clock_t tms_cutime; /* User CPU time of dead children */ - clock_t tms_cstime; /* System CPU time of dead children */ -}; - -/* Function prototype for timing system call */ -clock_t times(struct tms *buffer); - -#endif /* _SYS_TIMES_H */ \ No newline at end of file diff --git a/sysroot/usr/include/sys/types.h b/sysroot/usr/include/sys/types.h deleted file mode 100644 index be32cab..0000000 --- a/sysroot/usr/include/sys/types.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef _SYS_TYPES_H -#define _SYS_TYPES_H - -#include - -// Standard signed and unsigned size primitives -typedef int32_t ssize_t; -typedef uint32_t size_t; - -// Process and Thread IDs -typedef int32_t pid_t; -typedef int32_t id_t; - -// File system block and reference markers -typedef int32_t blkcnt_t; -typedef int32_t blksize_t; -typedef uint32_t dev_t; -typedef uint32_t gid_t; -typedef uint32_t ino_t; -typedef uint32_t mode_t; -typedef uint32_t nlink_t; -typedef int32_t off_t; -typedef uint32_t uid_t; - -// Clock and Timing fields -typedef int32_t time_t; -typedef int32_t clock_t; - -#endif /* _SYS_TYPES_H */ \ No newline at end of file diff --git a/sysroot/usr/include/time.h b/sysroot/usr/include/time.h deleted file mode 100644 index 17ae34f..0000000 --- a/sysroot/usr/include/time.h +++ /dev/null @@ -1,191 +0,0 @@ -/* Date and time - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_TIME_H -#define _PDCLIB_TIME_H _PDCLIB_TIMEH - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_lib_ext1.h" -#include "pdclib/_PDCLIB_internal.h" - -#ifndef _PDCLIB_SIZE_T_DEFINED -#define _PDCLIB_SIZE_T_DEFINED _PDCLIB_SIZE_T_DEFINED -typedef _PDCLIB_size_t size_t; -#endif - -#ifndef _PDCLIB_NULL_DEFINED -#define _PDCLIB_NULL_DEFINED _PDCLIB_NULL_DEFINED -#define NULL _PDCLIB_NULL -#endif - -/* See comments in _PDCLIB_config.h on the semantics of time_t and clock_t. */ - -typedef _PDCLIB_time_t time_t; -typedef _PDCLIB_clock_t clock_t; - -#define CLOCKS_PER_SEC _PDCLIB_CLOCKS_PER_SEC -#define TIME_UTC _PDCLIB_TIME_UTC - -/* Implementor's note: If you change this structure, and are using Pthread - threading support, check auxiliary/pthread/pthread_readout.c for its - twin. It is imperative that Pthread and PDCLib use identical layouts for - struct timespec, as they are implicitly cast from one to the other. This - cannot be checked for in this header (as we may not include host system - headers here), so the assert()s are in pthread_readout.c (which, in turn, - cannot include *this* header, which is why this admonishment to keep the - definitions in sync exists...). -*/ -struct timespec -{ - time_t tv_sec; - long tv_nsec; -}; - -struct tm -{ - int tm_sec; /* 0-60 */ - int tm_min; /* 0-59 */ - int tm_hour; /* 0-23 */ - int tm_mday; /* 1-31 */ - int tm_mon; /* 0-11 */ - int tm_year; /* years since 1900 */ - int tm_wday; /* 0-6 */ - int tm_yday; /* 0-365 */ - int tm_isdst; /* >0 DST, 0 no DST, <0 information unavailable */ -}; - -/* Returns the number of "clocks" in processor time since the invocation - of the program. Divide by CLOCKS_PER_SEC to get the value in seconds. - Returns -1 if the value cannot be represented in the return type or is - not available. -*/ -_PDCLIB_PUBLIC clock_t clock( void ); - -/* Returns the difference between two calendar times in seconds. */ -_PDCLIB_PUBLIC double difftime( time_t time1, time_t time0 ); - -/* Normalizes the values in the broken-down time pointed to by timeptr. - Returns the calender time specified by the broken-down time. -*/ -_PDCLIB_PUBLIC time_t mktime( struct tm * timeptr ); - -/* Returns the current calender time. If timer is not a NULL pointer, stores - the current calender time at that address as well. -*/ -_PDCLIB_PUBLIC time_t time( time_t * timer ); - -/* Sets the interval pointed to by ts to the current calender time, based - on the specified base. - Returns base, if successful, otherwise zero. -*/ -_PDCLIB_PUBLIC int timespec_get( struct timespec * ts, int base ); - -/* Converts the broken-down time pointed to by timeptr into a string in the - form "Sun Sep 16 01:03:52 1973\n\0". -*/ -_PDCLIB_PUBLIC char * asctime( const struct tm * timeptr ); - -/* Equivalent to asctime( localtime( timer ) ). */ -_PDCLIB_PUBLIC char * ctime( const time_t * timer ); - -/* Converts the calender time pointed to by timer into a broken-down time - expressed as UTC. - Returns a pointer to the broken-down time, or a NULL pointer if it - cannot be represented. -*/ -_PDCLIB_PUBLIC struct tm * gmtime( const time_t * timer ); - -/* Converts the calender time pointed to by timer into a broken-down time - expressed as local time. - Returns a pointer to the broken-down time, or a NULL pointer if if - cannot be represented. -*/ -_PDCLIB_PUBLIC struct tm * localtime( const time_t * timer ); - -/* Writes the broken-down time pointed to by timeptr into the character - array pointed to by s. The string pointed to by format controls the - exact output. No more than maxsize charactrs will be written. - Returns the number of characters written (excluding the terminating - null character), or zero on failure. -*/ -_PDCLIB_PUBLIC size_t strftime( char * _PDCLIB_restrict s, size_t maxsize, const char * _PDCLIB_restrict format, const struct tm * _PDCLIB_restrict timeptr ); - -/* Annex K -- Bounds-checking interfaces */ - -#if ( __STDC_WANT_LIB_EXT1__ + 0 ) != 0 - -#ifndef _PDCLIB_ERRNO_T_DEFINED -#define _PDCLIB_ERRNO_T_DEFINED _PDCLIB_ERRNO_T_DEFINED -typedef int errno_t; -#endif - -#ifndef _PDCLIB_RSIZE_T_DEFINED -#define _PDCLIB_RSIZE_T_DEFINED _PDCLIB_RSIZE_T_DEFINED -typedef _PDCLIB_size_t rsize_t; -#endif - -/* Converts the broken-down time pointed to by timeptr into a string in the - form "Sun Sep 16 01:03:52 1973\n\0", which is stored in buffer s of maxsize. - Returns zero if the time was successfully converted and stored, non-zero - otherwise. - The following conditions will be considered runtime constraint violations: - - s or timeptr being NULL. - - maxsize being < 26 or > RSIZE_MAX. - - the broken-down time pointed to by timeptr not being normalized. - - the year represented by the broken-down time pointed to by timeptr - being < 0 or > 9999. - In case of a constraint violation, the time will not be converted. If - s is not NULL and maxsize is neither zero nor > RSIZE_MAX, s[0] will be - set to '\0'. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC errno_t asctime_s( char * s, rsize_t maxsize, const struct tm * timeptr ); - -/* Equivalent to asctime_s( s, maxsize, localtime( timer ) ). */ -_PDCLIB_PUBLIC errno_t ctime_s( char * s, rsize_t maxsize, const time_t * timer ); - -/* Converts the calender time pointed to by timer into a broken-down time - expressed as UTC, which gets stored in the result struct. - Returns a pointer to the broken-down time, or a NULL pointer if if - cannot be represented or stored. - The following conditions will be considered runtime constraint violations: - - timer or result being NULL. - In case of a constraint violation, the time will not be converted. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC struct tm * gmtime_s( const time_t * _PDCLIB_restrict timer, struct tm * _PDCLIB_restrict result ); - -/* Converts the calender time pointed to by timer into a broken-down time - expressed as local time, which gets stored in the result struct. - Returns a pointer to the broken-down time, or a NULL pointer if if - cannot be represented or stored. - The following conditions will be considered runtime constraint violations: - - timer or result being NULL. - In case of a constraint violation, the time will not be converted. - The currently active constraint violation handler function will be called - (see set_constraint_handler_s()). -*/ -_PDCLIB_PUBLIC struct tm * localtime_s( const time_t * _PDCLIB_restrict timer, struct tm * _PDCLIB_restrict result ); - -#endif - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_TIME_H -#include _PDCLIB_EXTEND_TIME_H -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sysroot/usr/include/unistd.h b/sysroot/usr/include/unistd.h deleted file mode 100644 index 35ce2bb..0000000 --- a/sysroot/usr/include/unistd.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _UNISTD_H -#define _UNISTD_H - -#include - -/* Standard file descriptors used by streams */ -#define STDIN_FILENO 0 /* Standard input */ -#define STDOUT_FILENO 1 /* Standard output */ -#define STDERR_FILENO 2 /* Standard error output */ - -/* Seek constants for lseek() / _PDCLIB_lseek() */ -#ifndef SEEK_SET -#define SEEK_SET 0 /* Seek from beginning of file */ -#define SEEK_CUR 1 /* Seek from current position */ -#define SEEK_END 2 /* Seek from end of file */ -#endif - -/* Null pointer declaration constant */ -#ifndef NULL -#define NULL ((void *)0) -#endif - -int open(const char *pathname, int flags, ...); -int read(int fd, void *buf, size_t count); -int close(int fd); - - -#endif /* _UNISTD_H */ \ No newline at end of file diff --git a/sysroot/usr/include/wctype.h b/sysroot/usr/include/wctype.h deleted file mode 100644 index 3776b7a..0000000 --- a/sysroot/usr/include/wctype.h +++ /dev/null @@ -1,152 +0,0 @@ -/* Wide character classification and mapping utilities - - This file is part of the Public Domain C Library (PDCLib). - Permission is granted to use, modify, and / or redistribute at will. -*/ - -#ifndef _PDCLIB_WCTYPE_H -#define _PDCLIB_WCTYPE_H _PDCLIB_WCTYPE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "pdclib/_PDCLIB_internal.h" - -typedef _PDCLIB_wint_t wint_t; -typedef int wctrans_t; -typedef int wctype_t; - -#ifndef _PDCLIB_WEOF_DEFINED -#define _PDCLIB_WEOF_DEFINED _PDCLIB_WEOF_DEFINED -#define WEOF (wint_t)-1 -#endif - -/* Wide character classification functions */ - -/* Returns iswalpha( wc ) || iswdigit( wc ) */ -_PDCLIB_PUBLIC int iswalnum( wint_t wc ); - -/* Returns true for wide characters for which either isupper( wc ) or - islower( wc ) is true, as well as a set of locale-specific wide - characters which are neither control characters, digits, punctuation, - or whitespace. -*/ -_PDCLIB_PUBLIC int iswalpha( wint_t wc ); - -/* Returns true if the character iswspace() and used for separating words - within a line of text. In the "C" locale, only L' ' and L'\t' are - considered blanks. -*/ -_PDCLIB_PUBLIC int iswblank( wint_t wc ); - -/* Returns true if the wide character is a control character. */ -_PDCLIB_PUBLIC int iswcntrl( wint_t wc ); - -/* Returns true if the wide character is a decimal digit. Locale- - independent. */ -_PDCLIB_PUBLIC int iswdigit( wint_t wc ); - -/* Returns iswprint( wc ) && ! iswspace( wc ). - NOTE: This definition differs from that of isgraph() in , - which considers only ' ', not all isspace() characters. -*/ -_PDCLIB_PUBLIC int iswgraph( wint_t wc ); - -/* Returns true for lowerspace wide characters, as well as a set of - locale-specific wide characters which are neither control charcters, - digits, punctuation, or whitespace. -*/ -_PDCLIB_PUBLIC int iswlower( wint_t wc ); - -/* Returns true for every printing wide character. */ -_PDCLIB_PUBLIC int iswprint( wint_t wc ); - -/* Returns true for a locale-specific set of punctuation characters that - are neither whitespace nor alphanumeric. -*/ -_PDCLIB_PUBLIC int iswpunct( wint_t wc ); - -/* Returns true for a locale-specific set of whitespace characters that - are neither alphanumeric, graphic, or punctuation. -*/ -_PDCLIB_PUBLIC int iswspace( wint_t wc ); - -/* Returns true for upperspace wide characters, as well as a set of - locale-specific wide characters which are neither control charcters, - digits, punctuation, or whitespace. -*/ -_PDCLIB_PUBLIC int iswupper( wint_t wc ); - -/* Returns true if the wide character is a hexadecimal digit. Locale- - independent. */ -_PDCLIB_PUBLIC int iswxdigit( wint_t wc ); - -/* Extensible wide character classification functions */ - -/* Returns true if the wide character wc has the property described by - desc (which was retrieved by a previous call to wctype() without - changing the LC_CTYPE locale setting between the two calls). -*/ -_PDCLIB_PUBLIC int iswctype( wint_t wc, wctype_t desc ); - -/* Returns a description object for a named character property, to be - used as parameter to the iswctype() function. Supported property - names are: - "alnum" -- alphanumeric, as per iswalnum() - "alpha" -- alphabetic, as per iswalpha() - "blank" -- blank, as per iswblank() - "cntrl" -- control, as per iswcntrl() - "digit" -- decimal digit, as per iswdigit() - "graph" -- graphic, as per iswgraph() - "lower" -- lowercase, as per iswlower() - "print" -- printing, as per iswprint() - "punct" -- punctuation, as per iswprint() - "space" -- whitespace, as per iswspace() - "upper" -- uppercase, as per iswupper() - "xdigit" -- hexadecimal digit, as per iswxdigit() - For unsupported properties, the function returns zero. -*/ -_PDCLIB_PUBLIC wctype_t wctype( const char * property ); - -/* Wide character case mapping utilities */ - -/* Converts an uppercase letter to a corresponding lowercase letter. Input for - which no corresponding lowercase letter exists remains unchanged. -*/ -_PDCLIB_PUBLIC wint_t towlower( wint_t wc ); - -/* Converts a lowercase letter to a corresponding uppercase letter. Input for - which no corresponding uppercase letter exists remains unchanged. -*/ -_PDCLIB_PUBLIC wint_t towupper( wint_t wc ); - -/* Extensible wide character case mapping utilities */ - -/* Converts the wide character wc according to the transition described - by desc (which was retrieved by a previous call to wctrans() without - changing the LC_CTYPE locale setting between the two calls). -*/ -_PDCLIB_PUBLIC wint_t towctrans( wint_t wc, wctrans_t desc ); - -/* Returns a description object for a named character transformation, to - be used as parameter to the towctrans() function. Supported transformation - properties are: - "tolower" -- lowercase mapping, as per towlower() - "toupper" -- uppercase mapping, as per towupper() - For unsupported properties, the function returns zero. -*/ -_PDCLIB_PUBLIC wctrans_t wctrans( const char * property ); - -/* Extension hook for downstream projects that want to have non-standard - extensions to standard headers. -*/ -#ifdef _PDCLIB_EXTEND_WCTYPE_H -#include _PDCLIB_EXTEND_WCTYPE_H -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/sysroot/usr/lib/rlibc.a b/sysroot/usr/lib/rlibc.a deleted file mode 100644 index f367739e2ef2ef3410195f8dadf7b4530956a9a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 271538 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
9P{9O!iUTK)rW&1*W( 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