diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2009-11-18 09:49:57 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2009-11-18 09:49:57 +0000 |
commit | b4fee5273ece15d709b8e1e7149f92665a24df3e (patch) | |
tree | e50e4dbfa0e82b5de3e2115b990cb46782f1babd /newlib/libc/stdlib/mbrtowc.c | |
parent | 46471257e90bdc2c46e03a6371a329f8cac34d0c (diff) | |
download | newlib-b4fee5273ece15d709b8e1e7149f92665a24df3e.zip newlib-b4fee5273ece15d709b8e1e7149f92665a24df3e.tar.gz newlib-b4fee5273ece15d709b8e1e7149f92665a24df3e.tar.bz2 |
* libc/stdio/vfprintf.c: Include ../stdlib/local.h. Replace call to
_mbtowc_r with direct call to __mbtowc.
* libc/stdio/vfscanf.c: Ditto.
* libc/stdlib/btowc.c: Include local.h. Replace call to _mbtowc_r
with direct call to __mbtowc.
* libc/stdlib/mblen.c: Ditto.
* libc/stdlib/mblen_r.c: Ditto.
* libc/stdlib/mbrtowc.c: Ditto.
* libc/stdlib/mbstowcs_r.c: Ditto.
* libc/stdlib/mbtowc.c: Ditto.
* libc/stdlib/wcrtomb.c: Include local.h. Replace call to _wctomb_r
with direct call to __wctomb.
* libc/stdlib/wcsnrtombs.c: Ditto.
(_wcsnrtombs_r): Ditto.
* libc/stdlib/wcstombs_r.c: Ditto.
* libc/stdlib/wctob.c: Ditto.
* libc/stdlib/wctomb.c: Ditto.
* libc/stdlib/mbrtowc.c (mbrtowc): Implement independently from
_mbrtowc_r, unless PREFER_SIZE_OVER_SPEED or __OPTIMIZE_SIZE__ are
defined.
* libc/stdlib/wcrtomb.c (wcrtomb): Implement independently from
_wcrtomb_r, unless PREFER_SIZE_OVER_SPEED or __OPTIMIZE_SIZE__ are
defined.
* libc/stdlib/mbtowc_r.c (__utf8_mbtowc): Drop unnecessary test for
ch >= 0.
Diffstat (limited to 'newlib/libc/stdlib/mbrtowc.c')
-rw-r--r-- | newlib/libc/stdlib/mbrtowc.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/newlib/libc/stdlib/mbrtowc.c b/newlib/libc/stdlib/mbrtowc.c index c5e700d..e191e11 100644 --- a/newlib/libc/stdlib/mbrtowc.c +++ b/newlib/libc/stdlib/mbrtowc.c @@ -5,6 +5,7 @@ #include <stdio.h> #include <errno.h> #include <string.h> +#include "local.h" size_t _DEFUN (_mbrtowc_r, (ptr, pwc, s, n, ps), @@ -25,9 +26,9 @@ _DEFUN (_mbrtowc_r, (ptr, pwc, s, n, ps), #endif if (s == NULL) - retval = _mbtowc_r (ptr, NULL, "", 1, ps); + retval = __mbtowc (ptr, NULL, "", 1, __locale_charset (), ps); else - retval = _mbtowc_r (ptr, pwc, s, n, ps); + retval = __mbtowc (ptr, pwc, s, n, __locale_charset (), ps); if (retval == -1) { @@ -47,6 +48,32 @@ _DEFUN (mbrtowc, (pwc, s, n, ps), size_t n _AND mbstate_t *ps) { +#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__) return _mbrtowc_r (_REENT, pwc, s, n, ps); +#else + int retval = 0; + +#ifdef _MB_CAPABLE + if (ps == NULL) + { + _REENT_CHECK_MISC(_REENT); + ps = &(_REENT_MBRTOWC_STATE(_REENT)); + } +#endif + + if (s == NULL) + retval = __mbtowc (_REENT, NULL, "", 1, __locale_charset (), ps); + else + retval = __mbtowc (_REENT, pwc, s, n, __locale_charset (), ps); + + if (retval == -1) + { + ps->__count = 0; + _REENT->_errno = EILSEQ; + return (size_t)(-1); + } + else + return (size_t)retval; +#endif /* not PREFER_SIZE_OVER_SPEED */ } #endif /* !_REENT_ONLY */ |