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:
authorJeff Johnston <jjohnstn@redhat.com>2002-09-10 01:42:14 +0400
committerJeff Johnston <jjohnstn@redhat.com>2002-09-10 01:42:14 +0400
commit9c64d2a7ba6feb196099ee8b65bba163191008c0 (patch)
treec68382219855cc0e74227118398befe77b5934a1 /newlib/libc/stdlib/mbrtowc.c
parentb0591c89af3471f90b1762a712d7eb5a857cc568 (diff)
2002-09-09 Jeff Johnston <jjohnstn@redhat.com>
* libc/include/sys/_types.h (_mbstate_t): Changed to use unsigned char internally. * libc/sys/linux/sys/_types.h: Ditto. * libc/include/sys/reent.h * libc/stdlib/mblen.c (mblen): Use function-specific state value from default reentrancy structure. * libc/stdlib/mblen_r.c (_mblen_r): If return code from _mbtowc_r is less than 0, reset state __count value and return -1. * libc/stdlib/mbrlen.c (mbrlen): If the input state pointer is NULL, use the function-specific pointer provided in the default reentrancy structure. * libc/stdlib/mbrtowc.c: Add reentrant form of function. If input state pointer is NULL, use function-specific area provided in reentrancy structure. * libc/stdlib/mbsrtowcs.c: Ditto. * libc/stdlib/wcrtomb.c: Ditto. * libc/stdlib/wcsrtombs.c: Ditto. * libc/stdlib/mbstowcs.c: Reformat. * libc/stdlib/wcstombs.c: Ditto. * libc/stdlib/mbstowcs_r.c (_mbstowcs_r): If an error occurs, reset the state's __count value and return -1. * libc/stdlib/mbtowc.c: Ditto. * libc/stdlib/mbtowc_r.c (_mbtowc_r): Add restartable functionality. If number of bytes is used up before completing a valid multibyte character, return -2 and save the state. * libc/stdlib/wctomb_r.c (_wctomb_r): Define __state as __count and change some __count references to __state for clarity.
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 */