diff options
Diffstat (limited to 'newlib/libc/stdlib/wcrtomb.c')
-rw-r--r-- | newlib/libc/stdlib/wcrtomb.c | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/newlib/libc/stdlib/wcrtomb.c b/newlib/libc/stdlib/wcrtomb.c index f68533cbd..0eb59ca94 100644 --- a/newlib/libc/stdlib/wcrtomb.c +++ b/newlib/libc/stdlib/wcrtomb.c @@ -5,21 +5,45 @@ #include <errno.h> size_t -wcrtomb(char *s, wchar_t wc, mbstate_t *ps) +_DEFUN (_wcrtomb_r, (ptr, s, wc, ps), + struct _reent *ptr _AND + char *s _AND + wchar_t wc _AND + mbstate_t *ps) { int retval = 0; - _REENT_CHECK_MISC(_REENT); + char buf[10]; + +#ifdef MB_CAPABLE + if (ps == NULL) + { + _REENT_CHECK_MISC(ptr); + ps = &(_REENT_WCRTOMB_STATE(ptr)); + } +#endif if (s == NULL) - retval = _wctomb_r (_REENT, "", wc, ps); + retval = _wctomb_r (ptr, buf, L'\0', ps); else - retval = _wctomb_r (_REENT, s, wc, ps); + retval = _wctomb_r (ptr, s, wc, ps); if (retval == -1) { - _REENT->_errno = EILSEQ; + ps->__count = 0; + ptr->_errno = EILSEQ; return (size_t)(-1); } else return (size_t)retval; } + +#ifndef _REENT_ONLY +size_t +_DEFUN (wcrtomb, (s, wc, ps), + char *s _AND + wchar_t wc _AND + mbstate_t *ps) +{ + return _wcrtomb_r (_REENT, s, wc, ps); +} +#endif /* !_REENT_ONLY */ |