| .\" Copyright (c) Bruno Haible <haible@clisp.cons.org> |
| .\" |
| .\" This is free documentation; you can redistribute it and/or |
| .\" modify it under the terms of the GNU General Public License as |
| .\" published by the Free Software Foundation; either version 2 of |
| .\" the License, or (at your option) any later version. |
| .\" |
| .\" References consulted: |
| .\" GNU glibc-2 source code and manual |
| .\" Dinkumware C library reference http://www.dinkumware.com/ |
| .\" OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html |
| .\" ISO/IEC 9899:1999 |
| .\" |
| .TH MBRLEN 3 1999-07-25 "GNU" "Linux Programmer's Manual" |
| .SH NAME |
| mbrlen \- determine number of bytes in next multibyte character |
| .SH SYNOPSIS |
| .nf |
| .B #include <wchar.h> |
| .sp |
| .BI "size_t mbrlen(const char *" s ", size_t " n ", mbstate_t *" ps ); |
| .fi |
| .SH DESCRIPTION |
| The |
| .BR mbrlen () |
| function inspects at most \fIn\fP bytes of the multibyte |
| string starting at \fIs\fP and extracts the next complete multibyte character. |
| It updates the shift state \fI*ps\fP. |
| If the multibyte character is not the |
| null wide character, it returns the number of bytes that were consumed from |
| \fIs\fP. |
| If the multibyte character is the null wide character, it resets the |
| shift state \fI*ps\fP to the initial state and returns 0. |
| .PP |
| If the \fIn\fP bytes starting at \fIs\fP do not contain a complete multibyte |
| character, |
| .BR mbrlen () |
| returns \fI(size_t)\ \-2\fP. |
| This can happen even if |
| \fIn\fP >= \fIMB_CUR_MAX\fP, if the multibyte string contains redundant shift |
| sequences. |
| .PP |
| If the multibyte string starting at \fIs\fP contains an invalid multibyte |
| sequence before the next complete character, |
| .BR mbrlen () |
| returns |
| \fI(size_t)\ \-1\fP and sets \fIerrno\fP to \fBEILSEQ\fP. |
| In this case, |
| the effects on \fI*ps\fP are undefined. |
| .PP |
| If \fIps\fP is a NULL pointer, a static anonymous state only known to the |
| .BR mbrlen () |
| function is used instead. |
| .SH "RETURN VALUE" |
| The |
| .BR mbrlen () |
| function returns the number of bytes |
| parsed from the multibyte |
| sequence starting at \fIs\fP, if a non-null wide character was recognized. |
| It returns 0, if a null wide character was recognized. |
| It returns |
| .I "(size_t)\ \-1" |
| and sets \fIerrno\fP to \fBEILSEQ\fP, if an invalid multibyte sequence was |
| encountered. |
| It returns \fI(size_t)\ \-2\fP if it couldn't parse a complete multibyte |
| character, meaning that \fIn\fP should be increased. |
| .SH "CONFORMING TO" |
| C99. |
| .SH NOTES |
| The behavior of |
| .BR mbrlen () |
| depends on the |
| .B LC_CTYPE |
| category of the |
| current locale. |
| .SH "SEE ALSO" |
| .BR mbrtowc (3) |