| '\" t |
| .\" Copyright, the authors of the Linux man-pages project |
| .\" |
| .\" SPDX-License-Identifier: GPL-2.0-or-later |
| .\" |
| .TH mbsnrtowcs 3 (date) "Linux man-pages (unreleased)" |
| .SH NAME |
| mbsnrtowcs \- convert a multibyte string to a wide-character string |
| .SH LIBRARY |
| Standard C library |
| .RI ( libc ,\~ \-lc ) |
| .SH SYNOPSIS |
| .nf |
| .B #include <wchar.h> |
| .P |
| .BR "size_t mbsnrtowcs(" "size_t size;" |
| .BI " wchar_t " dest "[restrict " size "], const char **restrict " src , |
| .BI " size_t " nms ", size_t " size \ |
| ", mbstate_t *restrict " ps ); |
| .fi |
| .P |
| .RS -4 |
| Feature Test Macro Requirements for glibc (see |
| .BR feature_test_macros (7)): |
| .RE |
| .P |
| .BR mbsnrtowcs (): |
| .nf |
| Since glibc 2.10: |
| _POSIX_C_SOURCE >= 200809L |
| Before glibc 2.10: |
| _GNU_SOURCE |
| .fi |
| .SH DESCRIPTION |
| The |
| .BR mbsnrtowcs () |
| function is like the |
| .BR mbsrtowcs (3) |
| function, except that |
| the number of bytes to be converted, starting at |
| .IR *src , |
| is limited to at most |
| .I nms |
| bytes. |
| .P |
| If |
| .I dest |
| is not NULL, the |
| .BR mbsnrtowcs () |
| function converts at |
| most |
| .I nms |
| bytes from the |
| multibyte string |
| .I *src |
| to a wide-character string starting at |
| .IR dest . |
| At most |
| .I size |
| wide characters are written to |
| .IR dest . |
| The shift state |
| .I *ps |
| is updated. |
| The conversion is effectively performed by repeatedly |
| calling |
| .I "mbrtowc(dest, *src, n, ps)" |
| where |
| .I n |
| is some |
| positive number, as long as this call succeeds, and then incrementing |
| .I dest |
| by one and |
| .I *src |
| by the number of bytes consumed. |
| The |
| conversion can stop for three reasons: |
| .IP \[bu] 3 |
| An invalid multibyte sequence has been encountered. |
| In this case, |
| .I *src |
| is left pointing to the invalid multibyte sequence, |
| .I (size_t)\ \-1 |
| is returned, |
| and |
| .I errno |
| is set to |
| .BR EILSEQ . |
| .IP \[bu] |
| The |
| .I nms |
| limit forces a stop, |
| or |
| .I size |
| non-L\[aq]\[rs]0\[aq] wide characters |
| have been stored at |
| .IR dest . |
| In this case, |
| .I *src |
| is left pointing to the |
| next multibyte sequence to be converted, and the number of wide characters |
| written to |
| .I dest |
| is returned. |
| .IP \[bu] |
| The multibyte string has been completely converted, including the |
| terminating null wide character (\[aq]\[rs]0\[aq]) |
| (which has the side effect of bringing back |
| .I *ps |
| to the |
| initial state). |
| In this case, |
| .I *src |
| is set to NULL, and the number of wide |
| characters written to |
| .IR dest , |
| excluding the terminating null wide character, |
| is returned. |
| .P |
| According to POSIX.1, |
| if the input buffer ends with an incomplete character, |
| it is unspecified whether conversion stops at the end of |
| the previous character (if any), or at the end of the input buffer. |
| The glibc implementation adopts the former behavior. |
| .P |
| If |
| .I dest |
| is NULL, |
| .I size |
| is ignored, and the conversion proceeds as |
| above, except that the converted wide characters |
| are not written out to memory, |
| and that no destination size limit exists. |
| .P |
| In both of the above cases, if |
| .I ps |
| is NULL, a static anonymous |
| state known only to the |
| .BR mbsnrtowcs () |
| function is used instead. |
| .P |
| The programmer must ensure that there is room for at least |
| .I size |
| wide |
| characters at |
| .IR dest . |
| .SH RETURN VALUE |
| The |
| .BR mbsnrtowcs () |
| function returns the number of wide characters |
| that make up the converted part of the wide-character string, |
| not including the terminating null wide character. |
| If an invalid multibyte sequence was |
| encountered, |
| .I (size_t)\ \-1 |
| is returned, and |
| .I errno |
| set to |
| .BR EILSEQ . |
| .SH ATTRIBUTES |
| For an explanation of the terms used in this section, see |
| .BR attributes (7). |
| .TS |
| allbox; |
| lb lb lbx |
| l l l. |
| Interface Attribute Value |
| T{ |
| .na |
| .nh |
| .BR mbsnrtowcs () |
| T} Thread safety T{ |
| .na |
| .nh |
| MT-Unsafe race:mbsnrtowcs/!ps |
| T} |
| .TE |
| .SH STANDARDS |
| POSIX.1-2008. |
| .SH NOTES |
| The behavior of |
| .BR mbsnrtowcs () |
| depends on the |
| .B LC_CTYPE |
| category of the |
| current locale. |
| .P |
| Passing NULL as |
| .I ps |
| is not multithread safe. |
| .SH SEE ALSO |
| .BR iconv (3), |
| .BR mbrtowc (3), |
| .BR mbsinit (3), |
| .BR mbsrtowcs (3) |