Rev 4874 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4349 | Serge | 1 | /* |
2 | FUNCTION |
||
3 | < |
||
4 | |||
5 | INDEX |
||
6 | mbtowc |
||
7 | |||
8 | ANSI_SYNOPSIS |
||
9 | #include |
||
4921 | Serge | 10 | int mbtowc(wchar_t *restrict <[pwc]>, const char *restrict <[s]>, size_t <[n]>); |
4349 | Serge | 11 | |
12 | TRAD_SYNOPSIS |
||
13 | #include |
||
14 | int mbtowc(<[pwc]>, <[s]>, <[n]>) |
||
15 | wchar_t *<[pwc]>; |
||
16 | const char *<[s]>; |
||
17 | size_t <[n]>; |
||
18 | |||
19 | DESCRIPTION |
||
20 | When _MB_CAPABLE is not defined, this is a minimal ANSI-conforming |
||
21 | implementation of < |
||
22 | only ``multi-byte character sequences'' recognized are single bytes, |
||
23 | and they are ``converted'' to themselves. |
||
24 | Each call to < |
||
25 | <<*<[pwc]>>>, unless <[s]> is a null pointer. The argument n |
||
26 | is ignored. |
||
27 | |||
28 | When _MB_CAPABLE is defined, this routine calls <<_mbtowc_r>> to perform |
||
29 | the conversion, passing a state variable to allow state dependent |
||
30 | decoding. The result is based on the locale setting which may |
||
31 | be restricted to a defined set of locales. |
||
32 | |||
33 | RETURNS |
||
34 | This implementation of < |
||
35 | <[s]> is < |
||
36 | it returns <<1>> if not _MB_CAPABLE or |
||
37 | the character is a single-byte character; it returns <<-1>> |
||
38 | if n is <<0>> or the multi-byte character is invalid; |
||
39 | otherwise it returns the number of bytes in the multibyte character. |
||
40 | If the return value is -1, no changes are made to the < |
||
41 | output string. If the input is the empty string, a wchar_t nul |
||
42 | is placed in the output string and 0 is returned. If the input |
||
43 | has a length of 0, no changes are made to the < |
||
44 | |||
45 | PORTABILITY |
||
46 | < |
||
47 | effects vary with the locale. |
||
48 | |||
49 | < |
||
50 | */ |
||
51 | |||
52 | #ifndef _REENT_ONLY |
||
53 | |||
54 | #include |
||
55 | #include |
||
56 | #include |
||
57 | #include "local.h" |
||
58 | |||
59 | int |
||
60 | _DEFUN (mbtowc, (pwc, s, n), |
||
4921 | Serge | 61 | wchar_t *__restrict pwc _AND |
62 | const char *__restrict s _AND |
||
4349 | Serge | 63 | size_t n) |
64 | { |
||
65 | #ifdef _MB_CAPABLE |
||
66 | int retval = 0; |
||
4921 | Serge | 67 | struct _reent *reent = _REENT; |
4349 | Serge | 68 | mbstate_t *ps; |
69 | |||
4921 | Serge | 70 | _REENT_CHECK_MISC(reent); |
71 | ps = &(_REENT_MBTOWC_STATE(reent)); |
||
4349 | Serge | 72 | |
4921 | Serge | 73 | retval = __mbtowc (reent, pwc, s, n, __locale_charset (), ps); |
4349 | Serge | 74 | |
75 | if (retval < 0) |
||
76 | { |
||
77 | ps->__count = 0; |
||
78 | return -1; |
||
79 | } |
||
80 | return retval; |
||
81 | #else /* not _MB_CAPABLE */ |
||
82 | if (s == NULL) |
||
83 | return 0; |
||
84 | if (n == 0) |
||
85 | return -1; |
||
86 | if (pwc) |
||
87 | *pwc = (wchar_t) *s; |
||
88 | return (*s != '\0'); |
||
89 | #endif /* not _MB_CAPABLE */ |
||
90 | } |
||
91 | |||
92 | #endif /* !_REENT_ONLY */> |
||
93 |