1 .\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
3 .\" %%%LICENSE_START(GPLv2+_DOC_ONEPARA)
4 .\" This is free documentation; you can redistribute it and/or
5 .\" modify it under the terms of the GNU General Public License as
6 .\" published by the Free Software Foundation; either version 2 of
7 .\" the License, or (at your option) any later version.
10 .\" References consulted:
11 .\" GNU glibc-2 source code and manual
12 .\" Dinkumware C library reference http://www.dinkumware.com/
13 .\" OpenGroup's Single UNIX specification
14 .\" http://www.UNIX-systems.org/online.html
17 .TH MBRTOWC 3 2011-09-28 "GNU" "Linux Programmer's Manual"
19 mbrtowc \- convert a multibyte sequence to a wide character
24 .BI "size_t mbrtowc(wchar_t *" pwc ", const char *" s ", size_t " n \
28 The main case for this function is when \fIs\fP is not NULL and \fIpwc\fP is
32 function inspects at most \fIn\fP
33 bytes of the multibyte string starting at \fIs\fP, extracts the next complete
34 multibyte character, converts it to a wide character and stores it at
36 It updates the shift state \fI*ps\fP.
38 character is not L\(aq\\0\(aq (the null wide character),
39 it returns the number of bytes that were consumed
41 If the converted wide character is L\(aq\\0\(aq, it resets the shift
42 state \fI*ps\fP to the initial state and returns 0.
44 If the \fIn\fP bytes starting at \fIs\fP do not contain a complete multibyte
47 returns \fI(size_t)\ \-2\fP.
48 This can happen even if
49 \fIn\fP >= \fIMB_CUR_MAX\fP, if the multibyte string contains redundant shift
52 If the multibyte string starting at \fIs\fP contains an invalid multibyte
53 sequence before the next complete character,
56 \fI(size_t)\ \-1\fP and sets \fIerrno\fP to \fBEILSEQ\fP.
58 the effects on \fI*ps\fP are undefined.
60 A different case is when \fIs\fP is not NULL but \fIpwc\fP is NULL.
64 function behaves as above, except that it does not
65 store the converted wide character in memory.
67 A third case is when \fIs\fP is NULL.
68 In this case, \fIpwc\fP and \fIn\fP are
70 If the conversion state represented by \fI*ps\fP denotes an
71 incomplete multibyte character conversion, the
74 returns \fI(size_t)\ \-1\fP, sets \fIerrno\fP to \fBEILSEQ\fP, and
75 leaves \fI*ps\fP in an undefined state.
79 puts \fI*ps\fP in the initial state and returns 0.
81 In all of the above cases, if \fIps\fP is a NULL pointer, a static anonymous
82 state only known to the mbrtowc function is used instead.
83 Otherwise, \fI*ps\fP must be a valid \fImbstate_t\fP object.
84 An \fImbstate_t\fP object \fIa\fP can be initialized to the initial state
85 by zeroing it, for example using
88 memset(&a, 0, sizeof(a));
93 function returns the number of bytes parsed from the
94 multibyte sequence starting at \fIs\fP, if a non-L\(aq\\0\(aq wide character
96 It returns 0, if a L\(aq\\0\(aq wide character was recognized.
99 and sets \fIerrno\fP to \fBEILSEQ\fP, if an invalid multibyte sequence was
101 It returns \fI(size_t)\ \-2\fP if it couldn't parse a complete multibyte
102 character, meaning that \fIn\fP should be increased.