Provided by: manpages-dev_3.54-1ubuntu1_all bug

NAME

       mbrtowc - convert a multibyte sequence to a wide character

SYNOPSIS

       #include <wchar.h>

       size_t mbrtowc(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps);

DESCRIPTION

       The  main case for this function is when s is not NULL and pwc is not NULL.  In this case,
       the mbrtowc() function inspects at most n bytes of the multibyte  string  starting  at  s,
       extracts the next complete multibyte character, converts it to a wide character and stores
       it at *pwc.  It updates the shift state *ps.  If the converted wide character is not L'\0'
       (the  null  wide character), it returns the number of bytes that were consumed from s.  If
       the converted wide character is L'\0', it resets the shift state *ps to the initial  state
       and returns 0.

       If  the  n  bytes  starting  at s do not contain a complete multibyte character, mbrtowc()
       returns (size_t) -2.  This can happen even if n >= MB_CUR_MAX,  if  the  multibyte  string
       contains redundant shift sequences.

       If  the  multibyte  string starting at s contains an invalid multibyte sequence before the
       next complete character, mbrtowc() returns (size_t) -1 and sets errno to EILSEQ.  In  this
       case, the effects on *ps are undefined.

       A  different  case  is  when  s  is  not NULL but pwc is NULL.  In this case the mbrtowc()
       function behaves as above, except that it does not store the converted wide  character  in
       memory.

       A  third  case is when s is NULL.  In this case, pwc and n are ignored.  If the conversion
       state represented by  *ps  denotes  an  incomplete  multibyte  character  conversion,  the
       mbrtowc()  function  returns  (size_t) -1,  sets  errno  to  EILSEQ,  and leaves *ps in an
       undefined state.  Otherwise, the mbrtowc() function puts *ps  in  the  initial  state  and
       returns 0.

       In all of the above cases, if ps is a NULL pointer, a static anonymous state known only to
       the mbrtowc() function is used instead.  Otherwise, *ps must be a valid mbstate_t  object.
       An  mbstate_t  object a can be initialized to the initial state by zeroing it, for example
       using

           memset(&a, 0, sizeof(a));

RETURN VALUE

       The mbrtowc() function returns the number of bytes  parsed  from  the  multibyte  sequence
       starting  at  s,  if  a non-L'\0' wide character was recognized.  It returns 0, if a L'\0'
       wide character was recognized.  It returns (size_t) -1 and sets errno  to  EILSEQ,  if  an
       invalid multibyte sequence was encountered.  It returns (size_t) -2 if it couldn't parse a
       complete multibyte character, meaning that n should be increased.

ATTRIBUTES

   Multithreading (see pthreads(7))
       The mbrtowc() function is thread-safe with exceptions.  It is not  thread-safe  if  called
       with a NULL ps parameter.

CONFORMING TO

       C99.

NOTES

       The behavior of mbrtowc() depends on the LC_CTYPE category of the current locale.

SEE ALSO

       mbsrtowcs(3)

COLOPHON

       This  page  is  part of release 3.54 of the Linux man-pages project.  A description of the
       project,    and    information    about    reporting    bugs,    can    be    found     at
       http://www.kernel.org/doc/man-pages/.