Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/stdlib/mbrtowc.c')
-rw-r--r--newlib/libc/stdlib/mbrtowc.c38
1 files changed, 30 insertions, 8 deletions
diff --git a/newlib/libc/stdlib/mbrtowc.c b/newlib/libc/stdlib/mbrtowc.c
index 7934ca117..0db1208d0 100644
--- a/newlib/libc/stdlib/mbrtowc.c
+++ b/newlib/libc/stdlib/mbrtowc.c
@@ -6,24 +6,46 @@
#include <string.h>
size_t
-mbrtowc(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
+_DEFUN (_mbrtowc_r, (ptr, pwc, s, n, ps),
+ struct _reent *ptr _AND
+ wchar_t *pwc _AND
+ const char *s _AND
+ size_t n _AND
+ mbstate_t *ps)
{
int retval = 0;
- _REENT_CHECK_MISC(_REENT);
+
+#ifdef MB_CAPABLE
+ if (ps == NULL)
+ {
+ _REENT_CHECK_MISC(ptr);
+ ps = &(_REENT_MBRTOWC_STATE(ptr));
+ }
+#endif
if (s == NULL)
- retval = _mbtowc_r (_REENT, pwc, "", 1, ps);
+ retval = _mbtowc_r (ptr, pwc, "", 1, ps);
else
- retval = _mbtowc_r (_REENT, pwc, s, n, ps);
-
- if (*pwc == NULL)
- memset (ps, '\0', sizeof (mbstate_t));
+ retval = _mbtowc_r (ptr, pwc, s, n, 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 (mbrtowc, (pwc, s, n, ps),
+ wchar_t *pwc _AND
+ const char *s _AND
+ size_t n _AND
+ mbstate_t *ps)
+{
+ return _mbrtowc_r (_REENT, pwc, s, n, ps);
+}
+#endif /* !_REENT_ONLY */