mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-22 21:23:07 +03:00
* Use newlib libc library This change adds libcmin.a, which is created from newlib libc by selectively removing some of the object files (mostly related to heap management). The list of files is available in tools/sdk/lib/make_libcmin.sh. Files which are not needed are commented out. This change adds support for various functions which were missing, like sscanf, strftime, etc. * Fix some of the time functions * Redirect stdout to serial * Implement __putc_r * Switch to custom newlib build Built from https://github.com/igrr/newlib-xtensa using: ./configure --with-newlib --enable-multilib --disable-newlib-io-c99-formats --enable-newlib-supplied-syscalls --enable-target-optspace --program-transform-name="s&^&xtensa-lx106-elf-&" --disable-option-checking --with-target-subdir=xtensa-lx106-elf --target=xtensa-lx106-elf --enable-newlib-nano-formatted-io --enable-newlib-reent-small --prefix=path-to-arduino-core/tools/sdk/libc CROSS_CFLAGS="-DMALLOC_PROVIDED -DSIGNAL_PROVIDED -DABORT_PROVIDED" make make install * Update tests
255 lines
10 KiB
C
255 lines
10 KiB
C
#ifndef _WCHAR_H_
|
|
#define _WCHAR_H_
|
|
|
|
#include <_ansi.h>
|
|
|
|
#include <sys/reent.h>
|
|
|
|
#define __need_size_t
|
|
#define __need_wchar_t
|
|
#define __need_wint_t
|
|
#define __need_NULL
|
|
#include <stddef.h>
|
|
|
|
#define __need___va_list
|
|
#include <stdarg.h>
|
|
|
|
/* For _mbstate_t definition. */
|
|
#include <sys/_types.h>
|
|
#include <sys/cdefs.h>
|
|
/* For __STDC_ISO_10646__ */
|
|
#include <sys/features.h>
|
|
|
|
#ifndef WEOF
|
|
# define WEOF ((wint_t)-1)
|
|
#endif
|
|
|
|
/* This must match definition in <stdint.h> */
|
|
#ifndef WCHAR_MIN
|
|
#ifdef __WCHAR_MIN__
|
|
#define WCHAR_MIN __WCHAR_MIN__
|
|
#elif defined(__WCHAR_UNSIGNED__) || (L'\0' - 1 > 0)
|
|
#define WCHAR_MIN (0 + L'\0')
|
|
#else
|
|
#define WCHAR_MIN (-0x7fffffff - 1 + L'\0')
|
|
#endif
|
|
#endif
|
|
|
|
/* This must match definition in <stdint.h> */
|
|
#ifndef WCHAR_MAX
|
|
#ifdef __WCHAR_MAX__
|
|
#define WCHAR_MAX __WCHAR_MAX__
|
|
#elif defined(__WCHAR_UNSIGNED__) || (L'\0' - 1 > 0)
|
|
#define WCHAR_MAX (0xffffffffu + L'\0')
|
|
#else
|
|
#define WCHAR_MAX (0x7fffffff + L'\0')
|
|
#endif
|
|
#endif
|
|
|
|
_BEGIN_STD_C
|
|
|
|
/* As in stdio.h, <sys/reent.h> defines __FILE. */
|
|
typedef __FILE FILE;
|
|
|
|
/* As required by POSIX.1-2008, declare tm as incomplete type.
|
|
The actual definition is in time.h. */
|
|
struct tm;
|
|
|
|
#ifndef _MBSTATE_T
|
|
#define _MBSTATE_T
|
|
typedef _mbstate_t mbstate_t;
|
|
#endif /* _MBSTATE_T */
|
|
|
|
wint_t _EXFUN(btowc, (int));
|
|
int _EXFUN(wctob, (wint_t));
|
|
size_t _EXFUN(mbrlen, (const char *__restrict, size_t, mbstate_t *__restrict));
|
|
size_t _EXFUN(mbrtowc, (wchar_t *__restrict, const char *__restrict, size_t,
|
|
mbstate_t *__restrict));
|
|
size_t _EXFUN(_mbrtowc_r, (struct _reent *, wchar_t * , const char * ,
|
|
size_t, mbstate_t *));
|
|
int _EXFUN(mbsinit, (const mbstate_t *));
|
|
size_t _EXFUN(mbsnrtowcs, (wchar_t *__restrict, const char **__restrict,
|
|
size_t, size_t, mbstate_t *__restrict));
|
|
size_t _EXFUN(_mbsnrtowcs_r, (struct _reent *, wchar_t * , const char ** ,
|
|
size_t, size_t, mbstate_t *));
|
|
size_t _EXFUN(mbsrtowcs, (wchar_t *__restrict, const char **__restrict, size_t,
|
|
mbstate_t *__restrict));
|
|
size_t _EXFUN(_mbsrtowcs_r, (struct _reent *, wchar_t * , const char ** , size_t, mbstate_t *));
|
|
size_t _EXFUN(wcrtomb, (char *__restrict, wchar_t, mbstate_t *__restrict));
|
|
size_t _EXFUN(_wcrtomb_r, (struct _reent *, char * , wchar_t, mbstate_t *));
|
|
size_t _EXFUN(wcsnrtombs, (char *__restrict, const wchar_t **__restrict,
|
|
size_t, size_t, mbstate_t *__restrict));
|
|
size_t _EXFUN(_wcsnrtombs_r, (struct _reent *, char * , const wchar_t ** ,
|
|
size_t, size_t, mbstate_t *));
|
|
size_t _EXFUN(wcsrtombs, (char *__restrict, const wchar_t **__restrict,
|
|
size_t, mbstate_t *__restrict));
|
|
size_t _EXFUN(_wcsrtombs_r, (struct _reent *, char * , const wchar_t ** ,
|
|
size_t, mbstate_t *));
|
|
int _EXFUN(wcscasecmp, (const wchar_t *, const wchar_t *));
|
|
wchar_t *_EXFUN(wcscat, (wchar_t *__restrict, const wchar_t *__restrict));
|
|
wchar_t *_EXFUN(wcschr, (const wchar_t *, wchar_t));
|
|
int _EXFUN(wcscmp, (const wchar_t *, const wchar_t *));
|
|
int _EXFUN(wcscoll, (const wchar_t *, const wchar_t *));
|
|
wchar_t *_EXFUN(wcscpy, (wchar_t *__restrict, const wchar_t *__restrict));
|
|
wchar_t *_EXFUN(wcpcpy, (wchar_t *__restrict,
|
|
const wchar_t *__restrict));
|
|
wchar_t *_EXFUN(wcsdup, (const wchar_t *));
|
|
wchar_t *_EXFUN(_wcsdup_r, (struct _reent *, const wchar_t * ));
|
|
size_t _EXFUN(wcscspn, (const wchar_t *, const wchar_t *));
|
|
size_t _EXFUN(wcsftime, (wchar_t *__restrict, size_t,
|
|
const wchar_t *__restrict, const struct tm *__restrict));
|
|
size_t _EXFUN(wcslcat, (wchar_t *, const wchar_t *, size_t));
|
|
size_t _EXFUN(wcslcpy, (wchar_t *, const wchar_t *, size_t));
|
|
size_t _EXFUN(wcslen, (const wchar_t *));
|
|
int _EXFUN(wcsncasecmp, (const wchar_t *, const wchar_t *, size_t));
|
|
wchar_t *_EXFUN(wcsncat, (wchar_t *__restrict,
|
|
const wchar_t *__restrict, size_t));
|
|
int _EXFUN(wcsncmp, (const wchar_t *, const wchar_t *, size_t));
|
|
wchar_t *_EXFUN(wcsncpy, (wchar_t *__restrict,
|
|
const wchar_t *__restrict, size_t));
|
|
wchar_t *_EXFUN(wcpncpy, (wchar_t *__restrict,
|
|
const wchar_t *__restrict, size_t));
|
|
size_t _EXFUN(wcsnlen, (const wchar_t *, size_t));
|
|
wchar_t *_EXFUN(wcspbrk, (const wchar_t *, const wchar_t *));
|
|
wchar_t *_EXFUN(wcsrchr, (const wchar_t *, wchar_t));
|
|
size_t _EXFUN(wcsspn, (const wchar_t *, const wchar_t *));
|
|
wchar_t *_EXFUN(wcsstr, (const wchar_t *__restrict,
|
|
const wchar_t *__restrict));
|
|
wchar_t *_EXFUN(wcstok, (wchar_t *__restrict, const wchar_t *__restrict,
|
|
wchar_t **__restrict));
|
|
double _EXFUN(wcstod, (const wchar_t *__restrict, wchar_t **__restrict));
|
|
double _EXFUN(_wcstod_r, (struct _reent *, const wchar_t *, wchar_t **));
|
|
float _EXFUN(wcstof, (const wchar_t *__restrict, wchar_t **__restrict));
|
|
float _EXFUN(_wcstof_r, (struct _reent *, const wchar_t *, wchar_t **));
|
|
#ifdef _LDBL_EQ_DBL
|
|
long double _EXFUN(wcstold, (const wchar_t *, wchar_t **));
|
|
#endif /* _LDBL_EQ_DBL */
|
|
int _EXFUN(wcswidth, (const wchar_t *, size_t));
|
|
size_t _EXFUN(wcsxfrm, (wchar_t *__restrict, const wchar_t *__restrict,
|
|
size_t));
|
|
int _EXFUN(wcwidth, (const wchar_t));
|
|
wchar_t *_EXFUN(wmemchr, (const wchar_t *, wchar_t, size_t));
|
|
int _EXFUN(wmemcmp, (const wchar_t *, const wchar_t *, size_t));
|
|
wchar_t *_EXFUN(wmemcpy, (wchar_t *__restrict, const wchar_t *__restrict,
|
|
size_t));
|
|
wchar_t *_EXFUN(wmemmove, (wchar_t *, const wchar_t *, size_t));
|
|
wchar_t *_EXFUN(wmemset, (wchar_t *, wchar_t, size_t));
|
|
|
|
long _EXFUN(wcstol, (const wchar_t *__restrict, wchar_t **__restrict, int));
|
|
long long _EXFUN(wcstoll, (const wchar_t *__restrict, wchar_t **__restrict,
|
|
int));
|
|
unsigned long _EXFUN(wcstoul, (const wchar_t *__restrict, wchar_t **__restrict,
|
|
int));
|
|
unsigned long long _EXFUN(wcstoull, (const wchar_t *__restrict,
|
|
wchar_t **__restrict, int));
|
|
long _EXFUN(_wcstol_r, (struct _reent *, const wchar_t *, wchar_t **, int));
|
|
long long _EXFUN(_wcstoll_r, (struct _reent *, const wchar_t *, wchar_t **, int));
|
|
unsigned long _EXFUN(_wcstoul_r, (struct _reent *, const wchar_t *, wchar_t **, int));
|
|
unsigned long long _EXFUN(_wcstoull_r, (struct _reent *, const wchar_t *, wchar_t **, int));
|
|
/* On platforms where long double equals double. */
|
|
#ifdef _LDBL_EQ_DBL
|
|
long double _EXFUN(wcstold, (const wchar_t *, wchar_t **));
|
|
#endif /* _LDBL_EQ_DBL */
|
|
|
|
wint_t _EXFUN(fgetwc, (__FILE *));
|
|
wchar_t *_EXFUN(fgetws, (wchar_t *__restrict, int, __FILE *__restrict));
|
|
wint_t _EXFUN(fputwc, (wchar_t, __FILE *));
|
|
int _EXFUN(fputws, (const wchar_t *__restrict, __FILE *__restrict));
|
|
int _EXFUN (fwide, (__FILE *, int));
|
|
wint_t _EXFUN (getwc, (__FILE *));
|
|
wint_t _EXFUN (getwchar, (void));
|
|
wint_t _EXFUN(putwc, (wchar_t, __FILE *));
|
|
wint_t _EXFUN(putwchar, (wchar_t));
|
|
wint_t _EXFUN (ungetwc, (wint_t wc, __FILE *));
|
|
|
|
wint_t _EXFUN(_fgetwc_r, (struct _reent *, __FILE *));
|
|
wint_t _EXFUN(_fgetwc_unlocked_r, (struct _reent *, __FILE *));
|
|
wchar_t *_EXFUN(_fgetws_r, (struct _reent *, wchar_t *, int, __FILE *));
|
|
wchar_t *_EXFUN(_fgetws_unlocked_r, (struct _reent *, wchar_t *, int, __FILE *));
|
|
wint_t _EXFUN(_fputwc_r, (struct _reent *, wchar_t, __FILE *));
|
|
wint_t _EXFUN(_fputwc_unlocked_r, (struct _reent *, wchar_t, __FILE *));
|
|
int _EXFUN(_fputws_r, (struct _reent *, const wchar_t *, __FILE *));
|
|
int _EXFUN(_fputws_unlocked_r, (struct _reent *, const wchar_t *, __FILE *));
|
|
int _EXFUN (_fwide_r, (struct _reent *, __FILE *, int));
|
|
wint_t _EXFUN (_getwc_r, (struct _reent *, __FILE *));
|
|
wint_t _EXFUN (_getwc_unlocked_r, (struct _reent *, __FILE *));
|
|
wint_t _EXFUN (_getwchar_r, (struct _reent *ptr));
|
|
wint_t _EXFUN (_getwchar_unlocked_r, (struct _reent *ptr));
|
|
wint_t _EXFUN(_putwc_r, (struct _reent *, wchar_t, __FILE *));
|
|
wint_t _EXFUN(_putwc_unlocked_r, (struct _reent *, wchar_t, __FILE *));
|
|
wint_t _EXFUN(_putwchar_r, (struct _reent *, wchar_t));
|
|
wint_t _EXFUN(_putwchar_unlocked_r, (struct _reent *, wchar_t));
|
|
wint_t _EXFUN (_ungetwc_r, (struct _reent *, wint_t wc, __FILE *));
|
|
|
|
#if __GNU_VISIBLE
|
|
wint_t _EXFUN(fgetwc_unlocked, (__FILE *));
|
|
wchar_t *_EXFUN(fgetws_unlocked, (wchar_t *__restrict, int, __FILE *__restrict));
|
|
wint_t _EXFUN(fputwc_unlocked, (wchar_t, __FILE *));
|
|
int _EXFUN(fputws_unlocked, (const wchar_t *__restrict, __FILE *__restrict));
|
|
wint_t _EXFUN(getwc_unlocked, (__FILE *));
|
|
wint_t _EXFUN(getwchar_unlocked, (void));
|
|
wint_t _EXFUN(putwc_unlocked, (wchar_t, __FILE *));
|
|
wint_t _EXFUN(putwchar_unlocked, (wchar_t));
|
|
#endif
|
|
|
|
__FILE *_EXFUN (open_wmemstream, (wchar_t **, size_t *));
|
|
__FILE *_EXFUN (_open_wmemstream_r, (struct _reent *, wchar_t **, size_t *));
|
|
|
|
#ifndef __VALIST
|
|
#ifdef __GNUC__
|
|
#define __VALIST __gnuc_va_list
|
|
#else
|
|
#define __VALIST char*
|
|
#endif
|
|
#endif
|
|
|
|
int _EXFUN(fwprintf, (__FILE *__restrict, const wchar_t *__restrict, ...));
|
|
int _EXFUN(swprintf, (wchar_t *__restrict, size_t,
|
|
const wchar_t *__restrict, ...));
|
|
int _EXFUN(vfwprintf, (__FILE *__restrict, const wchar_t *__restrict,
|
|
__VALIST));
|
|
int _EXFUN(vswprintf, (wchar_t *__restrict, size_t,
|
|
const wchar_t *__restrict, __VALIST));
|
|
int _EXFUN(vwprintf, (const wchar_t *__restrict, __VALIST));
|
|
int _EXFUN(wprintf, (const wchar_t *__restrict, ...));
|
|
|
|
int _EXFUN(_fwprintf_r, (struct _reent *, __FILE *, const wchar_t *, ...));
|
|
int _EXFUN(_swprintf_r, (struct _reent *, wchar_t *, size_t, const wchar_t *, ...));
|
|
int _EXFUN(_vfwprintf_r, (struct _reent *, __FILE *, const wchar_t *, __VALIST));
|
|
int _EXFUN(_vswprintf_r, (struct _reent *, wchar_t *, size_t, const wchar_t *, __VALIST));
|
|
int _EXFUN(_vwprintf_r, (struct _reent *, const wchar_t *, __VALIST));
|
|
int _EXFUN(_wprintf_r, (struct _reent *, const wchar_t *, ...));
|
|
|
|
int _EXFUN(fwscanf, (__FILE *__restrict, const wchar_t *__restrict, ...));
|
|
int _EXFUN(swscanf, (const wchar_t *__restrict,
|
|
const wchar_t *__restrict, ...));
|
|
int _EXFUN(vfwscanf, (__FILE *__restrict, const wchar_t *__restrict,
|
|
__VALIST));
|
|
int _EXFUN(vswscanf, (const wchar_t *__restrict, const wchar_t *__restrict,
|
|
__VALIST));
|
|
int _EXFUN(vwscanf, (const wchar_t *__restrict, __VALIST));
|
|
int _EXFUN(wscanf, (const wchar_t *__restrict, ...));
|
|
|
|
int _EXFUN(_fwscanf_r, (struct _reent *, __FILE *, const wchar_t *, ...));
|
|
int _EXFUN(_swscanf_r, (struct _reent *, const wchar_t *, const wchar_t *, ...));
|
|
int _EXFUN(_vfwscanf_r, (struct _reent *, __FILE *, const wchar_t *, __VALIST));
|
|
int _EXFUN(_vswscanf_r, (struct _reent *, const wchar_t *, const wchar_t *, __VALIST));
|
|
int _EXFUN(_vwscanf_r, (struct _reent *, const wchar_t *, __VALIST));
|
|
int _EXFUN(_wscanf_r, (struct _reent *, const wchar_t *, ...));
|
|
|
|
#define getwc(fp) fgetwc(fp)
|
|
#define putwc(wc,fp) fputwc((wc), (fp))
|
|
#define getwchar() fgetwc(_REENT->_stdin)
|
|
#define putwchar(wc) fputwc((wc), _REENT->_stdout)
|
|
|
|
#if __GNU_VISIBLE
|
|
#define getwc_unlocked(fp) fgetwc_unlocked(fp)
|
|
#define putwc_unlocked(wc,fp) fputwc_unlocked((wc), (fp))
|
|
#define getwchar_unlocked() fgetwc_unlocked(_REENT->_stdin)
|
|
#define putwchar_unlocked(wc) fputwc_unlocked((wc), _REENT->_stdout)
|
|
#endif
|
|
|
|
_END_STD_C
|
|
|
|
#endif /* _WCHAR_H_ */
|