DragonFly On-Line Manual Pages
    
    
	
MBRLEN(3)             DragonFly Library Functions Manual             MBRLEN(3)
NAME
     mbrlen, mbrlen_l -- get number of bytes in a character (restartable)
LIBRARY
     Standard C Library (libc, -lc)
SYNOPSIS
     #include <wchar.h>
     size_t
     mbrlen(const char * restrict s, size_t n, mbstate_t * restrict ps);
     #include <xlocale.h>
     size_t
     mbrlen_l(const char * restrict s, size_t n, mbstate_t * restrict ps,
         locale_t locale);
DESCRIPTION
     The mbrlen() and mbrlen_l() functions inspect at most n bytes pointed to
     by s to determine the number of bytes needed to complete the next
     multibyte character.
     The mbstate_t argument, ps, is used to keep track of the shift state.  If
     it is NULL, mbrlen() and mbrlen_l() use an internal, static mbstate_t
     object, which is initialized to the initial conversion state at program
     startup.
     It is equivalent to:
           mbrtowc(NULL, s, n, ps);
     Except that when ps is a NULL pointer, mbrlen() and mbrlen_l() use their
     own static, internal mbstate_t object to keep track of the shift state.
     The mbrlen_l() function takes an explicit locale argument, whereas the
     mbrlen() function uses the current global or per-thread locale.
RETURN VALUES
     The mbrlen() and mbrlen_l() functions return:
     0       The next n or fewer bytes represent the null wide character
             (L'\0').
     >0      The next n or fewer bytes represent a valid character, mbrlen()
             and mbrlen_l() return the number of bytes used to complete the
             multibyte character.
     (size_t)-2
             The next n contribute to, but do not complete, a valid multibyte
             character sequence, and all n bytes have been processed.
     (size_t)-1
             An encoding error has occurred.  The next n or fewer bytes do not
             contribute to a valid multibyte character.
EXAMPLES
     A function that calculates the number of characters in a multibyte
     character string:
           size_t
           nchars(const char *s)
           {
                   size_t charlen, chars;
                   mbstate_t mbs;
                   chars = 0;
                   memset(&mbs, 0, sizeof(mbs));
                   while ((charlen = mbrlen(s, MB_CUR_MAX, &mbs)) != 0 &&
                       charlen != (size_t)-1 && charlen != (size_t)-2) {
                           s += charlen;
                           chars++;
                   }
                   return (chars);
           }
ERRORS
     The mbrlen() and mbrlen_l() functions will fail if:
     [EILSEQ]           An invalid multibyte sequence was detected.
     [EINVAL]           The conversion state is invalid.
SEE ALSO
     mblen(3), mbrtowc(3), multibyte(3), xlocale(3)
STANDARDS
     The mbrlen() function conforms to ISO/IEC 9899:1999 (``ISO C99'').
DragonFly 3.7                  December 26, 2013                 DragonFly 3.7