1 #include <reent.h>
2 #include <newlib.h>
3 #include <wchar.h>
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <errno.h>
7 #include <string.h>
8 #include "local.h"
9 
10 size_t
11 _DEFUN (_mbrtowc_r, (ptr, pwc, s, n, ps),
12 	struct _reent *ptr _AND
13 	wchar_t *pwc _AND
14 	const char *s _AND
15 	size_t n _AND
16 	mbstate_t *ps)
17 {
18   int retval = 0;
19 
20 #ifdef _MB_CAPABLE
21   if (ps == NULL)
22     {
23       _REENT_CHECK_MISC(ptr);
24       ps = &(_REENT_MBRTOWC_STATE(ptr));
25     }
26 #endif
27 
28   if (s == NULL)
29     retval = __mbtowc (ptr, NULL, "", 1, __locale_charset (), ps);
30   else
31     retval = __mbtowc (ptr, pwc, s, n, __locale_charset (), ps);
32 
33   if (retval == -1)
34     {
35       ps->__count = 0;
36       ptr->_errno = EILSEQ;
37       return (size_t)(-1);
38     }
39   else
40     return (size_t)retval;
41 }
42 
43 #ifndef _REENT_ONLY
44 size_t
45 _DEFUN (mbrtowc, (pwc, s, n, ps),
46 	wchar_t *__restrict pwc _AND
47 	const char *__restrict s _AND
48 	size_t n _AND
49 	mbstate_t *__restrict ps)
50 {
51 #if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
52   return _mbrtowc_r (_REENT, pwc, s, n, ps);
53 #else
54   int retval = 0;
55   struct _reent *reent = _REENT;
56 
57 #ifdef _MB_CAPABLE
58   if (ps == NULL)
59     {
60       _REENT_CHECK_MISC(reent);
61       ps = &(_REENT_MBRTOWC_STATE(reent));
62     }
63 #endif
64 
65   if (s == NULL)
66     retval = __mbtowc (reent, NULL, "", 1, __locale_charset (), ps);
67   else
68     retval = __mbtowc (reent, pwc, s, n, __locale_charset (), ps);
69 
70   if (retval == -1)
71     {
72       ps->__count = 0;
73       reent->_errno = EILSEQ;
74       return (size_t)(-1);
75     }
76   else
77     return (size_t)retval;
78 #endif /* not PREFER_SIZE_OVER_SPEED */
79 }
80 #endif /* !_REENT_ONLY */
81