2002-08-23 09:56:05 +08:00
|
|
|
#ifndef _WCHAR_H_
|
|
|
|
#define _WCHAR_H_
|
|
|
|
|
2002-08-28 05:20:10 +08:00
|
|
|
#include <_ansi.h>
|
|
|
|
|
2003-12-06 04:51:57 +08:00
|
|
|
#include <sys/reent.h>
|
|
|
|
|
2002-08-23 09:56:05 +08:00
|
|
|
#define __need_size_t
|
|
|
|
#define __need_wchar_t
|
|
|
|
#define __need_wint_t
|
|
|
|
#include <stddef.h>
|
|
|
|
|
* libc/include/stdio.h (__VALIST): Guard against multiple definition.
* libc/include/wchar.h: Include stdarg.h.
(__VALIST): Define conditionally.
(fwprintf, swprintf, vfwprintf, vswprintf, vwprintf, wprintf: Declare.
(_fwprintf_r, _swprintf_r, _vfwprintf_r, _vswprintf_r, _vwprintf_r,
_wprintf_r): Declare.
* libc/stdio/Makefile.am: Add new files.
* libc/stdio/Makefile.in: Regenerate.
* libc/stdio/fwprintf.c: New file.
* libc/stdio/local.h (_svfwprintf_r, _svfiwprintf_r): Declare.
(__CH_CLASS, __STATE, __ACTION): Move definition from vfprintf.c here
and move to the __ namespace.
(__chclass, __state_table, __action_table): Declare.
* libc/stdio/stdio.tex: Add new documentation references.
* libc/stdio/swprintf.c: New file.
* libc/stdio/vfprintf.c (__SPRINT): New macro to call the right
__sprint_r function according to compilation unit. Use throughout.
(__ssprint_r): Rename STRING_ONLY variant from __sprint_r.
Make externaly available. Only define if INTEGER_ONLY is defined.
(__sprint_r): Make externaly available. Only define if INTEGER_ONLY
is defined. Handle stream orientation.
(__sbprintf): Copy FILE's _flags2 member as well.
(__chclass, __state_table, __action_table): Prepend __ to name and
make externally available.
* libc/stdio/vfwprintf.c: New file.
* libc/stdio/vswprintf.c: New file.
* libc/stdio/vwprintf.c: New file.
* libc/stdio/wprintf.c: New file.
2009-03-06 17:55:52 +08:00
|
|
|
#define __need___va_list
|
|
|
|
#include <stdarg.h>
|
|
|
|
|
2002-08-23 09:56:05 +08:00
|
|
|
/* For _mbstate_t definition. */
|
|
|
|
#include <sys/_types.h>
|
|
|
|
|
2011-01-27 19:55:01 +08:00
|
|
|
/* For __STDC_ISO_10646__ */
|
|
|
|
#include <sys/features.h>
|
|
|
|
|
2002-08-30 03:38:25 +08:00
|
|
|
#ifndef NULL
|
|
|
|
#define NULL 0
|
|
|
|
#endif
|
|
|
|
|
2002-08-23 09:56:05 +08:00
|
|
|
#ifndef WEOF
|
2002-08-30 03:38:25 +08:00
|
|
|
# define WEOF ((wint_t)-1)
|
2002-08-23 09:56:05 +08:00
|
|
|
#endif
|
|
|
|
|
2002-09-05 02:16:55 +08:00
|
|
|
#ifndef WCHAR_MIN
|
|
|
|
#define WCHAR_MIN 0
|
|
|
|
#endif
|
|
|
|
|
2002-09-05 23:26:42 +08:00
|
|
|
#ifndef WCHAR_MAX
|
2002-09-05 02:16:55 +08:00
|
|
|
#ifdef __WCHAR_MAX__
|
|
|
|
#define WCHAR_MAX __WCHAR_MAX__
|
|
|
|
#else
|
|
|
|
#define WCHAR_MAX 0x7fffffffu
|
|
|
|
#endif
|
2002-09-05 23:26:42 +08:00
|
|
|
#endif
|
2002-09-05 02:16:55 +08:00
|
|
|
|
2002-11-07 08:44:31 +08:00
|
|
|
_BEGIN_STD_C
|
2002-11-05 03:04:09 +08:00
|
|
|
|
2009-10-15 16:23:27 +08:00
|
|
|
/* As required by POSIX.1-2008, declare tm as incomplete type.
|
|
|
|
The actual definition is in time.h. */
|
|
|
|
struct tm;
|
|
|
|
|
2002-09-17 02:55:25 +08:00
|
|
|
#ifndef _MBSTATE_T
|
|
|
|
#define _MBSTATE_T
|
2002-08-23 09:56:05 +08:00
|
|
|
typedef _mbstate_t mbstate_t;
|
2002-09-17 02:55:25 +08:00
|
|
|
#endif /* _MBSTATE_T */
|
2002-08-23 09:56:05 +08:00
|
|
|
|
2002-08-30 03:38:25 +08:00
|
|
|
wint_t _EXFUN(btowc, (int));
|
|
|
|
int _EXFUN(wctob, (wint_t));
|
|
|
|
size_t _EXFUN(mbrlen, (const char * , size_t, mbstate_t *));
|
|
|
|
size_t _EXFUN(mbrtowc, (wchar_t * , const char * , size_t, mbstate_t *));
|
2003-12-05 09:36:32 +08:00
|
|
|
size_t _EXFUN(_mbrtowc_r, (struct _reent *, wchar_t * , const char * ,
|
|
|
|
size_t, mbstate_t *));
|
2002-08-30 03:38:25 +08:00
|
|
|
int _EXFUN(mbsinit, (const mbstate_t *));
|
2009-02-19 17:19:42 +08:00
|
|
|
size_t _EXFUN(mbsnrtowcs, (wchar_t * , const char ** , size_t, size_t,
|
|
|
|
mbstate_t *));
|
|
|
|
size_t _EXFUN(_mbsnrtowcs_r, (struct _reent *, wchar_t * , const char ** ,
|
|
|
|
size_t, size_t, mbstate_t *));
|
2002-08-30 03:38:25 +08:00
|
|
|
size_t _EXFUN(mbsrtowcs, (wchar_t * , const char ** , size_t, mbstate_t *));
|
2008-11-28 04:45:37 +08:00
|
|
|
size_t _EXFUN(_mbsrtowcs_r, (struct _reent *, wchar_t * , const char ** , size_t, mbstate_t *));
|
2002-08-30 03:38:25 +08:00
|
|
|
size_t _EXFUN(wcrtomb, (char * , wchar_t, mbstate_t *));
|
2003-12-05 09:36:32 +08:00
|
|
|
size_t _EXFUN(_wcrtomb_r, (struct _reent *, char * , wchar_t, mbstate_t *));
|
2009-02-19 17:19:42 +08:00
|
|
|
size_t _EXFUN(wcsnrtombs, (char * , const wchar_t ** , size_t, size_t,
|
|
|
|
mbstate_t *));
|
|
|
|
size_t _EXFUN(_wcsnrtombs_r, (struct _reent *, char * , const wchar_t ** ,
|
|
|
|
size_t, size_t, mbstate_t *));
|
2002-08-30 03:38:25 +08:00
|
|
|
size_t _EXFUN(wcsrtombs, (char * , const wchar_t ** , size_t, mbstate_t *));
|
2003-12-05 09:36:32 +08:00
|
|
|
size_t _EXFUN(_wcsrtombs_r, (struct _reent *, char * , const wchar_t ** ,
|
|
|
|
size_t, mbstate_t *));
|
2009-03-11 20:57:53 +08:00
|
|
|
int _EXFUN(wcscasecmp, (const wchar_t *, const wchar_t *));
|
2002-08-30 03:38:25 +08:00
|
|
|
wchar_t *_EXFUN(wcscat, (wchar_t * , const wchar_t *));
|
|
|
|
wchar_t *_EXFUN(wcschr, (const wchar_t *, wchar_t));
|
|
|
|
int _EXFUN(wcscmp, (const wchar_t *, const wchar_t *));
|
2003-04-03 16:26:07 +08:00
|
|
|
int _EXFUN(wcscoll, (const wchar_t *, const wchar_t *));
|
2002-08-30 03:38:25 +08:00
|
|
|
wchar_t *_EXFUN(wcscpy, (wchar_t * , const wchar_t *));
|
2007-12-20 01:33:12 +08:00
|
|
|
wchar_t *_EXFUN(wcpcpy, (wchar_t * , const wchar_t *));
|
2009-03-15 21:39:07 +08:00
|
|
|
wchar_t *_EXFUN(wcsdup, (const wchar_t *));
|
|
|
|
wchar_t *_EXFUN(_wcsdup_r, (struct _reent *, const wchar_t * ));
|
2002-08-30 03:38:25 +08:00
|
|
|
size_t _EXFUN(wcscspn, (const wchar_t *, const wchar_t *));
|
2009-03-09 20:35:03 +08:00
|
|
|
size_t _EXFUN(wcsftime, (wchar_t *, size_t, const wchar_t *, const struct tm *));
|
2002-08-30 03:38:25 +08:00
|
|
|
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 *));
|
2009-03-11 20:57:53 +08:00
|
|
|
int _EXFUN(wcsncasecmp, (const wchar_t *, const wchar_t *, size_t));
|
2002-08-30 03:38:25 +08:00
|
|
|
wchar_t *_EXFUN(wcsncat, (wchar_t * , const wchar_t * , size_t));
|
|
|
|
int _EXFUN(wcsncmp, (const wchar_t *, const wchar_t *, size_t));
|
|
|
|
wchar_t *_EXFUN(wcsncpy, (wchar_t * , const wchar_t * , size_t));
|
2007-12-20 01:33:12 +08:00
|
|
|
wchar_t *_EXFUN(wcpncpy, (wchar_t * , const wchar_t * , size_t));
|
2003-10-24 02:07:13 +08:00
|
|
|
size_t _EXFUN(wcsnlen, (const wchar_t *, size_t));
|
2002-08-30 03:38:25 +08:00
|
|
|
wchar_t *_EXFUN(wcspbrk, (const wchar_t *, const wchar_t *));
|
|
|
|
wchar_t *_EXFUN(wcsrchr, (const wchar_t *, wchar_t));
|
|
|
|
size_t _EXFUN(wcsspn, (const wchar_t *, const wchar_t *));
|
|
|
|
wchar_t *_EXFUN(wcsstr, (const wchar_t *, const wchar_t *));
|
2008-12-13 03:47:05 +08:00
|
|
|
wchar_t *_EXFUN(wcstok, (wchar_t *, const wchar_t *, wchar_t **));
|
2009-02-13 07:10:01 +08:00
|
|
|
double _EXFUN(wcstod, (const wchar_t *, wchar_t **));
|
|
|
|
double _EXFUN(_wcstod_r, (struct _reent *, const wchar_t *, wchar_t **));
|
|
|
|
float _EXFUN(wcstof, (const wchar_t *, wchar_t **));
|
|
|
|
float _EXFUN(_wcstof_r, (struct _reent *, const wchar_t *, wchar_t **));
|
2003-04-09 18:42:12 +08:00
|
|
|
int _EXFUN(wcswidth, (const wchar_t *, size_t));
|
2007-07-05 00:18:34 +08:00
|
|
|
size_t _EXFUN(wcsxfrm, (wchar_t *, const wchar_t *, size_t));
|
2003-04-09 18:42:12 +08:00
|
|
|
int _EXFUN(wcwidth, (const wchar_t));
|
2002-08-30 03:38:25 +08:00
|
|
|
wchar_t *_EXFUN(wmemchr, (const wchar_t *, wchar_t, size_t));
|
|
|
|
int _EXFUN(wmemcmp, (const wchar_t *, const wchar_t *, size_t));
|
|
|
|
wchar_t *_EXFUN(wmemcpy, (wchar_t * , const wchar_t * , size_t));
|
|
|
|
wchar_t *_EXFUN(wmemmove, (wchar_t *, const wchar_t *, size_t));
|
|
|
|
wchar_t *_EXFUN(wmemset, (wchar_t *, wchar_t, size_t));
|
2002-08-23 09:56:05 +08:00
|
|
|
|
2007-07-07 04:03:28 +08:00
|
|
|
long _EXFUN(wcstol, (const wchar_t *, wchar_t **, int));
|
|
|
|
long long _EXFUN(wcstoll, (const wchar_t *, wchar_t **, int));
|
|
|
|
unsigned long _EXFUN(wcstoul, (const wchar_t *, wchar_t **, int));
|
|
|
|
unsigned long long _EXFUN(wcstoull, (const wchar_t *, wchar_t **, int));
|
|
|
|
long _EXFUN(_wcstol_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));
|
|
|
|
|
2008-12-10 Corinna Vinschen <corinna@vinschen.de>
Implement basic wide char stdio functionality, based on FreeBSD.
* libc/include/stdio.h (__SORD): Define.
(__SWID): Define.
* libc/include/wchar.h: Add declarations for new wide char functions.
(getwc): Define as macro.
(getwchar): Ditto.
(putwc): Ditto.
(putwchar): Ditto.
* libc/include/sys/reent.h (struct __sFILE): Add _mbstate member.
(struct __sFILE64): Ditto.
* libc/stdio/Makefile.am (ELIX_4_SOURCES): Add fgetwc.c, fgetws.c,
fputwc.c, fputws.c, fwide.c, getwc.c, getwchar.c, putwc.c, putwchar.c
and ungetwc.c.
(CHEWOUT_FILES): Add fgetwc.def, fgetws.def, fputwc.def, fputws.def,
fwide.def, getwc.def, getwchar.def, putwc.def, putwchar.def and
ungetwc.def.
Add header dependency rules for the new files.
* libc/stdio/Makefile.in: Regenerate.
* libc/stdio/fgetwc.c: New file, implementing fgetwc and _fgetwc_r.
* libc/stdio/fgetws.c: New file, implementing fgetws and _fgetws_r.
* libc/stdio/findfp.c (std): Initialize FILE's _mbstate member.
(__sfmoreglue): Ditto.
* libc/stdio/fputs.c (_fputs_r): Set stream orientation.
* libc/stdio/fputwc.c: New file, implementing fputwc and _fputwc_r.
* libc/stdio/fputws.c: New file, implementing fputws and _fputws_r.
* libc/stdio/fread.c (_fread_r): Set stream orientation.
* libc/stdio/freopen.c (_freopen_r): Reset stream orientation. Reset
_mbstate.
* libc/stdio/fseek.c (_fseek_r): Reset _mbstate.
* libc/stdio/fwide.c: New file, implementing fwide and _fwide_r.
* libc/stdio/fwrite.c (_fwrite_r): Set stream orientation.
* libc/stdio/getwc.c: New file, implementing getwc and _getwc_r.
* libc/stdio/getwchar.c: New file, implementing getwchar and
_getwchar_r.
* libc/stdio/local.h (ORIENT): New macro.
* libc/stdio/puts.c (_puts_r): Set stream orientation.
* libc/stdio/putwc.c: New file, implementing putwc and _putwc_r.
* libc/stdio/putwchar.c: New file, implementing putwchar and
_putwchar_r.
* libc/stdio/refill.c (__srefill_r): Set stream orientation.
* libc/stdio/stdio.tex: Add documentation for new functions.
* libc/stdio/ungetc.c (_ungetc_r): Set stream orientation.
* libc/stdio/ungetwc.c: New file, implementing ungetwc and _ungetwc_r.
* libc/stdio/vfscanf.c (__SVFSCANF_R): Set stream orientation.
* libc/stdio/wbuf.c (__swbuf_r): Ditto.
2008-12-11 07:43:12 +08:00
|
|
|
wint_t _EXFUN(fgetwc, (__FILE *));
|
|
|
|
wchar_t *_EXFUN(fgetws, (wchar_t *, int, __FILE *));
|
|
|
|
wint_t _EXFUN(fputwc, (wchar_t, __FILE *));
|
|
|
|
int _EXFUN(fputws, (const wchar_t *, __FILE *));
|
|
|
|
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 *));
|
|
|
|
wchar_t *_EXFUN(_fgetws_r, (struct _reent *, wchar_t *, int, __FILE *));
|
|
|
|
wint_t _EXFUN(_fputwc_r, (struct _reent *, wchar_t, __FILE *));
|
|
|
|
int _EXFUN(_fputws_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 (_getwchar_r, (struct _reent *ptr));
|
|
|
|
wint_t _EXFUN(_putwc_r, (struct _reent *, wchar_t, __FILE *));
|
|
|
|
wint_t _EXFUN(_putwchar_r, (struct _reent *, wchar_t));
|
|
|
|
wint_t _EXFUN (_ungetwc_r, (struct _reent *, wint_t wc, __FILE *));
|
|
|
|
|
2009-02-19 01:35:24 +08:00
|
|
|
__FILE *_EXFUN (open_wmemstream, (wchar_t **, size_t *));
|
|
|
|
__FILE *_EXFUN (_open_wmemstream_r, (struct _reent *, wchar_t **, size_t *));
|
|
|
|
|
* libc/include/stdio.h (__VALIST): Guard against multiple definition.
* libc/include/wchar.h: Include stdarg.h.
(__VALIST): Define conditionally.
(fwprintf, swprintf, vfwprintf, vswprintf, vwprintf, wprintf: Declare.
(_fwprintf_r, _swprintf_r, _vfwprintf_r, _vswprintf_r, _vwprintf_r,
_wprintf_r): Declare.
* libc/stdio/Makefile.am: Add new files.
* libc/stdio/Makefile.in: Regenerate.
* libc/stdio/fwprintf.c: New file.
* libc/stdio/local.h (_svfwprintf_r, _svfiwprintf_r): Declare.
(__CH_CLASS, __STATE, __ACTION): Move definition from vfprintf.c here
and move to the __ namespace.
(__chclass, __state_table, __action_table): Declare.
* libc/stdio/stdio.tex: Add new documentation references.
* libc/stdio/swprintf.c: New file.
* libc/stdio/vfprintf.c (__SPRINT): New macro to call the right
__sprint_r function according to compilation unit. Use throughout.
(__ssprint_r): Rename STRING_ONLY variant from __sprint_r.
Make externaly available. Only define if INTEGER_ONLY is defined.
(__sprint_r): Make externaly available. Only define if INTEGER_ONLY
is defined. Handle stream orientation.
(__sbprintf): Copy FILE's _flags2 member as well.
(__chclass, __state_table, __action_table): Prepend __ to name and
make externally available.
* libc/stdio/vfwprintf.c: New file.
* libc/stdio/vswprintf.c: New file.
* libc/stdio/vwprintf.c: New file.
* libc/stdio/wprintf.c: New file.
2009-03-06 17:55:52 +08:00
|
|
|
#ifndef __VALIST
|
|
|
|
#ifdef __GNUC__
|
|
|
|
#define __VALIST __gnuc_va_list
|
|
|
|
#else
|
|
|
|
#define __VALIST char*
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
int _EXFUN(fwprintf, (__FILE *, const wchar_t *, ...));
|
|
|
|
int _EXFUN(swprintf, (wchar_t *, size_t, const wchar_t *, ...));
|
|
|
|
int _EXFUN(vfwprintf, (__FILE *, const wchar_t *, __VALIST));
|
|
|
|
int _EXFUN(vswprintf, (wchar_t *, size_t, const wchar_t *, __VALIST));
|
|
|
|
int _EXFUN(vwprintf, (const wchar_t *, __VALIST));
|
|
|
|
int _EXFUN(wprintf, (const wchar_t *, ...));
|
|
|
|
|
|
|
|
int _EXFUN(_fwprintf_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 *, ...));
|
|
|
|
|
* libc/include/wchar.h (fwscanf, swscanf, vfwscanf, vswscanf, vwscanf,
wscanf): Declare.
(_fwscanf_r, _swscanf_r, _vfwscanf_r, _vswscanf_r, _vwscanf_r,
_wscanf_r): Declare.
* libc/stdio/Makefile.am: Add new wscanf files.
* libc/stdio/Makefile.in: Regenerate.
* libc/stdio/fwscanf.c: New file.
* libc/stdio/local.h (__svfwscanf_r, __ssvfwscanf_r, __svfiwscanf_r,
__ssvfiwscanf_r): Declare.
* libc/stdio/stdio.tex: Add new documentation references.
* libc/stdio/swscanf.c: New file.
* libc/stdio/vfwscanf.c: New file.
* libc/stdio/vswscanf.c: New file.
* libc/stdio/vwscanf.c: New file.
* libc/stdio/wscanf.c: New file.
* libc/stdio/vfscanf.c (_sungetc_r): Make externaly available. Only
define if INTEGER_ONLY is defined. Declare otherwise.
(__ssrefill_r): Ditto.
(_sfread_r): Ditto.
Remove static eofread/eofread1 functions and use __seofread
function instead, throughout.
* libc/stdio/local.h (__seofread): Declare.
* libc/stdio/stdio.c (__seofread): Define.
* libc/stdio/fgetwc.c (__fgetwc): Fix compiler warning.
* libc/stdio/fgetws.c (_fgetws_r): Ditto.
* libc/stdio/fread.c (_fread_r): Ditto.
* libc/stdio/vfprintf.c: Ditto.
* libc/stdio/vswprintf.c: Ditto.
2009-03-11 19:53:22 +08:00
|
|
|
int _EXFUN(fwscanf, (__FILE *, const wchar_t *, ...));
|
|
|
|
int _EXFUN(swscanf, (const wchar_t *, const wchar_t *, ...));
|
|
|
|
int _EXFUN(vfwscanf, (__FILE *, const wchar_t *, __VALIST));
|
|
|
|
int _EXFUN(vswscanf, (const wchar_t *, const wchar_t *, __VALIST));
|
|
|
|
int _EXFUN(vwscanf, (const wchar_t *, __VALIST));
|
|
|
|
int _EXFUN(wscanf, (const wchar_t *, ...));
|
|
|
|
|
|
|
|
int _EXFUN(_fwscanf_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 *, ...));
|
|
|
|
|
2008-12-10 Corinna Vinschen <corinna@vinschen.de>
Implement basic wide char stdio functionality, based on FreeBSD.
* libc/include/stdio.h (__SORD): Define.
(__SWID): Define.
* libc/include/wchar.h: Add declarations for new wide char functions.
(getwc): Define as macro.
(getwchar): Ditto.
(putwc): Ditto.
(putwchar): Ditto.
* libc/include/sys/reent.h (struct __sFILE): Add _mbstate member.
(struct __sFILE64): Ditto.
* libc/stdio/Makefile.am (ELIX_4_SOURCES): Add fgetwc.c, fgetws.c,
fputwc.c, fputws.c, fwide.c, getwc.c, getwchar.c, putwc.c, putwchar.c
and ungetwc.c.
(CHEWOUT_FILES): Add fgetwc.def, fgetws.def, fputwc.def, fputws.def,
fwide.def, getwc.def, getwchar.def, putwc.def, putwchar.def and
ungetwc.def.
Add header dependency rules for the new files.
* libc/stdio/Makefile.in: Regenerate.
* libc/stdio/fgetwc.c: New file, implementing fgetwc and _fgetwc_r.
* libc/stdio/fgetws.c: New file, implementing fgetws and _fgetws_r.
* libc/stdio/findfp.c (std): Initialize FILE's _mbstate member.
(__sfmoreglue): Ditto.
* libc/stdio/fputs.c (_fputs_r): Set stream orientation.
* libc/stdio/fputwc.c: New file, implementing fputwc and _fputwc_r.
* libc/stdio/fputws.c: New file, implementing fputws and _fputws_r.
* libc/stdio/fread.c (_fread_r): Set stream orientation.
* libc/stdio/freopen.c (_freopen_r): Reset stream orientation. Reset
_mbstate.
* libc/stdio/fseek.c (_fseek_r): Reset _mbstate.
* libc/stdio/fwide.c: New file, implementing fwide and _fwide_r.
* libc/stdio/fwrite.c (_fwrite_r): Set stream orientation.
* libc/stdio/getwc.c: New file, implementing getwc and _getwc_r.
* libc/stdio/getwchar.c: New file, implementing getwchar and
_getwchar_r.
* libc/stdio/local.h (ORIENT): New macro.
* libc/stdio/puts.c (_puts_r): Set stream orientation.
* libc/stdio/putwc.c: New file, implementing putwc and _putwc_r.
* libc/stdio/putwchar.c: New file, implementing putwchar and
_putwchar_r.
* libc/stdio/refill.c (__srefill_r): Set stream orientation.
* libc/stdio/stdio.tex: Add documentation for new functions.
* libc/stdio/ungetc.c (_ungetc_r): Set stream orientation.
* libc/stdio/ungetwc.c: New file, implementing ungetwc and _ungetwc_r.
* libc/stdio/vfscanf.c (__SVFSCANF_R): Set stream orientation.
* libc/stdio/wbuf.c (__swbuf_r): Ditto.
2008-12-11 07:43:12 +08:00
|
|
|
#define getwc(fp) fgetwc(fp)
|
|
|
|
#define putwc(wc,fp) fputwc((wc), (fp))
|
|
|
|
#ifndef _REENT_ONLY
|
|
|
|
#define getwchar() fgetwc(_REENT->_stdin)
|
|
|
|
#define putwchar(wc) fputwc((wc), _REENT->_stdout)
|
|
|
|
#else
|
|
|
|
#define getwchar() fgetwc(_impure_ptr->_stdin)
|
|
|
|
#define putwchar(wc) fputwc((wc), _impure_ptr->_stdout)
|
|
|
|
#endif
|
|
|
|
|
2002-11-07 08:44:31 +08:00
|
|
|
_END_STD_C
|
2002-11-05 03:04:09 +08:00
|
|
|
|
2002-08-23 09:56:05 +08:00
|
|
|
#endif /* _WCHAR_H_ */
|