p Each character will be converted as if .Xr mbrtowc 3 is continuously called.
p After conversion, if .Fa pwcs is not a .Dv NULL pointer, the pointer object pointed to by .Fa s is a .Dv NULL pointer (if the conversion is stopped due to reaching a null byte) or the first byte of the character just after the last character converted.
p If .Fa pwcs is not a .Dv NULL pointer and the conversion is stopped due to reaching a null 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 012345678901 t "s == NULL || *s == NULL" Undefined (may cause the program to crash). t "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 "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
----------------------------------------------------------------------
.Sh RETURN VALUES
.Fn mbsrtowcs
returns:
l -tag -width 012345678901 t 0 or positive The value returned is the number of elements stored in the array
pointed to by
.Fa pwcs ,
except for a terminating null wide character (if any).
If
.Fa pwcs
is not null and the value returned is equal to
.Fa n ,
the wide character string pointed to by
.Fa pwcs
is not null 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 null wide character.
t (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
.Fn mbsrtowcs
may cause an error in the following case:
l -tag -width Er t Bq Er EILSEQ The pointer pointed to by
.Fa s
points to 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 restrict qualifier is added at
.St -isoC-99 .