summaryrefslogtreecommitdiffstats
path: root/newlib/libc/stdlib/wcrtomb.c
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/stdlib/wcrtomb.c')
-rw-r--r--newlib/libc/stdlib/wcrtomb.c34
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 */