p Each character will be converted as if .Xr mbrtowc 3 is continuously called.
p After conversion, if .Fa pwcs is not a NULL pointer, the pointer object pointed to by .Fa s is a NULL pointer
q if the conversion is stopped due to reaching a NUL byte or the first byte of the character just after the last character converted.
p If .Fa pwcs is not a NULL pointer and the conversion is stopped due to reaching a NUL byte, the .Fn mbsrtowcs places the state object pointed to by .Fa ps to an initial state after the conversion has taken place.
p The behaviour of .Fn mbsrtowcs is affected by the .Dv LC_CTYPE category of the current locale.
p These are the special cases: l -tag -width Li . t Li "s == NULL || *s == NULL" Undefined (may cause the program to crash). . t Li "pwcs == NULL" The conversion has taken place, but the resulting wide-character string was discarded. In this case, the pointer object pointed to by .Fa s is not modified and .Fa n is ignored. . t Li "ps == NULL" The .Fn mbsrtowcs uses its own internal state object to keep the conversion state, instead of .Fa ps mentioned in this manual page.
p Calling any other functions in .Lb libc never changes the internal state of .Fn mbsrtowcs , which is initialized at startup time of the program. .El
p
The
.Fn mbsnrtowcs
function behaves identically to
.Fn mbsrtowcs ,
except that the conversion stops after reading at most
.Fa nmc
characters from the buffer pointed to by
.Fa s .
----------------------------------------------------------------------
.Sh RETURN VALUES
The
.Fn mbsrtowcs
and
.Fn mbsnrtowcs
functions return:
l -tag -width Li t Li 0 , No or positive The value returned is the number of elements stored in the array
pointed to by
.Fa pwcs ,
except for a terminating NUL wide character (if any).
If
.Fa pwcs
is not
.Dv NULL
and the value returned is equal to
.Fa n ,
the wide-character string pointed to by
.Fa pwcs
is not NUL-terminated.
If
.Fa pwcs
is a NULL pointer, the value returned is the number of elements to contain
the whole string converted, except for a terminating NUL wide character.
t Li "(size_t)-1" The array indirectly pointed to by
.Fa s
contains a byte sequence forming invalid character.
In this case,
.Fn mbsrtowcs
sets
.Va errno
to indicate the error.
.El
----------------------------------------------------------------------
.Sh ERRORS
The
.Fn mbsrtowcs
and
.Fn mbsnrtowcs
functions may fail with the following errors:
l -tag -width Er t Bq Er EILSEQ .Fa s
points to a string containing an invalid or incomplete multibyte
character.
t Bq Er EINVAL .Fa ps
points to an invalid or uninitialized mbstate_t object.
.El
----------------------------------------------------------------------
.Sh SEE ALSO
.Xr mbrtowc 3 ,
.Xr mbstowcs 3 ,
.Xr setlocale 3
----------------------------------------------------------------------
.Sh STANDARDS
The
.Fn mbsrtowcs
function conforms to
.St -isoC-amd1 .
The
.Li restrict
qualifier was added by
.St -isoC-99 .
p The .Fn mbsnrtowcs function conforms to .St -p1003.1-2008 .