]>
Commit | Line | Data |
---|---|---|
fea681da MK |
1 | .\" Copyright (c) Bruno Haible <haible@clisp.cons.org> |
2 | .\" | |
3 | .\" This is free documentation; you can redistribute it and/or | |
4 | .\" modify it under the terms of the GNU General Public License as | |
5 | .\" published by the Free Software Foundation; either version 2 of | |
6 | .\" the License, or (at your option) any later version. | |
7 | .\" | |
8 | .\" References consulted: | |
9 | .\" GNU glibc-2 source code and manual | |
10 | .\" Dinkumware C library reference http://www.dinkumware.com/ | |
11 | .\" OpenGroup's Single Unix specification http://www.UNIX-systems.org/online.html | |
12 | .\" | |
13 | .TH MBSNRTOWCS 3 1999-07-25 "GNU" "Linux Programmer's Manual" | |
14 | .SH NAME | |
15 | mbsnrtowcs \- convert a multibyte string to a wide character string | |
16 | .SH SYNOPSIS | |
17 | .nf | |
18 | .B #include <wchar.h> | |
19 | .sp | |
20 | .BI "size_t mbsnrtowcs(wchar_t *" dest ", const char **" src , | |
21 | .BI " size_t " nms ", size_t " len ", mbstate_t *" ps ); | |
22 | .fi | |
23 | .SH DESCRIPTION | |
24 | The \fBmbsnrtowcs\fP function is like the \fBmbsrtowcs\fP function, except that | |
25 | the number of bytes to be converted, starting at \fI*src\fP, is limited to | |
26 | \fInms\fP. | |
27 | .PP | |
28 | If \fIdest\fP is not a NULL pointer, the \fBmbsnrtowcs\fP function converts at | |
29 | most \fInms\fP bytes from the | |
30 | multibyte string \fI*src\fP to a wide-character string starting at \fIdest\fP. | |
31 | At most \fIlen\fP wide characters are written to \fIdest\fP. The shift state | |
32 | \fI*ps\fP is updated. The conversion is effectively performed by repeatedly | |
33 | calling mbrtowc(\fIdest\fP,\fI*src\fP,\fIn\fP,\fIps\fP) where \fIn\fP is some | |
34 | positive number, as long as this call succeeds, and then incrementing | |
35 | \fIdest\fP by one and \fI*src\fP by the number of bytes consumed. The | |
36 | conversion can stop for three reasons: | |
37 | .PP | |
38 | 1. An invalid multibyte sequence has been encountered. In this case \fI*src\fP | |
2bc2f479 | 39 | is left pointing to the invalid multibyte sequence, (size_t)(\-1) is returned, |
fea681da MK |
40 | and \fBerrno\fP is set to \fBEILSEQ\fP. |
41 | .PP | |
42 | 2. The \fInms\fP limit forces a stop, or \fIlen\fP non-L'\\0' wide characters | |
43 | have been stored at \fIdest\fP. In this case \fI*src\fP is left pointing to the | |
44 | next multibyte sequence to be converted, and the number of wide characters | |
45 | written to \fIdest\fP is returned. | |
46 | .PP | |
47 | 3. The multibyte string has been completely converted, including the | |
48 | terminating '\\0' (which has the side effect of bringing back \fI*ps\fP to the | |
49 | initial state). In this case \fI*src\fP is set to NULL, and the number of wide | |
50 | characters written to \fIdest\fP, excluding the terminating L'\\0' character, | |
51 | is returned. | |
52 | .PP | |
53 | If \fIdest\fP is NULL, \fIlen\fP is ignored, and the conversion proceeds as | |
54 | above, except that the converted wide characters are not written out to memory, | |
55 | and that no destination length limit exists. | |
56 | .PP | |
57 | In both of the above cases, if \fIps\fP is a NULL pointer, a static anonymous | |
58 | state only known to the mbsnrtowcs function is used instead. | |
59 | .PP | |
60 | The programmer must ensure that there is room for at least \fIlen\fP wide | |
61 | characters at \fIdest\fP. | |
62 | .SH "RETURN VALUE" | |
63 | The \fBmbsnrtowcs\fP function returns the number of wide characters that make | |
64 | up the converted part of the wide character string, not including the | |
65 | terminating null wide character. If an invalid multibyte sequence was | |
2bc2f479 | 66 | encountered, (size_t)(\-1) is returned, and \fBerrno\fP set to \fBEILSEQ\fP. |
fea681da MK |
67 | .SH "CONFORMING TO" |
68 | This function is a GNU extension. | |
69 | .SH "SEE ALSO" | |
70 | .BR iconv (3), | |
71 | .BR mbsrtowcs (3) | |
72 | .SH NOTES | |
73 | The behaviour of \fBmbsnrtowcs\fP depends on the LC_CTYPE category of the | |
74 | current locale. | |
75 | .PP | |
76 | Passing NULL as \fIps\fP is not multi-thread safe. |