10d5acd74SJohn Marino.\" Copyright (c) 2002-2004 Tim J. Robbins 2eee2ef09SJoerg Sonnenberger.\" All rights reserved. 3eee2ef09SJoerg Sonnenberger.\" 4eee2ef09SJoerg Sonnenberger.\" Redistribution and use in source and binary forms, with or without 5eee2ef09SJoerg Sonnenberger.\" modification, are permitted provided that the following conditions 6eee2ef09SJoerg Sonnenberger.\" are met: 7eee2ef09SJoerg Sonnenberger.\" 1. Redistributions of source code must retain the above copyright 8eee2ef09SJoerg Sonnenberger.\" notice, this list of conditions and the following disclaimer. 9eee2ef09SJoerg Sonnenberger.\" 2. Redistributions in binary form must reproduce the above copyright 10eee2ef09SJoerg Sonnenberger.\" notice, this list of conditions and the following disclaimer in the 11eee2ef09SJoerg Sonnenberger.\" documentation and/or other materials provided with the distribution. 12eee2ef09SJoerg Sonnenberger.\" 13eee2ef09SJoerg Sonnenberger.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14eee2ef09SJoerg Sonnenberger.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15eee2ef09SJoerg Sonnenberger.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16eee2ef09SJoerg Sonnenberger.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17eee2ef09SJoerg Sonnenberger.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18eee2ef09SJoerg Sonnenberger.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19eee2ef09SJoerg Sonnenberger.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20eee2ef09SJoerg Sonnenberger.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21eee2ef09SJoerg Sonnenberger.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22eee2ef09SJoerg Sonnenberger.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23eee2ef09SJoerg Sonnenberger.\" SUCH DAMAGE. 24eee2ef09SJoerg Sonnenberger.\" 250d5acd74SJohn Marino.\" $FreeBSD: head/lib/libc/locale/mbrlen.3 131360 2004-06-30 19:32:41Z ru $ 260d5acd74SJohn Marino.\" 27*3623cebdSSascha Wildner.Dd December 26, 2013 28eee2ef09SJoerg Sonnenberger.Dt MBRLEN 3 29eee2ef09SJoerg Sonnenberger.Os 30eee2ef09SJoerg Sonnenberger.Sh NAME 31*3623cebdSSascha Wildner.Nm mbrlen , 32*3623cebdSSascha Wildner.Nm mbrlen_l 330d5acd74SJohn Marino.Nd "get number of bytes in a character (restartable)" 34eee2ef09SJoerg Sonnenberger.Sh LIBRARY 35eee2ef09SJoerg Sonnenberger.Lb libc 36eee2ef09SJoerg Sonnenberger.Sh SYNOPSIS 37eee2ef09SJoerg Sonnenberger.In wchar.h 380d5acd74SJohn Marino.Ft size_t 39eee2ef09SJoerg Sonnenberger.Fn mbrlen "const char * restrict s" "size_t n" "mbstate_t * restrict ps" 40*3623cebdSSascha Wildner.In xlocale.h 41*3623cebdSSascha Wildner.Ft size_t 42*3623cebdSSascha Wildner.Fn mbrlen_l "const char * restrict s" "size_t n" "mbstate_t * restrict ps" "locale_t locale" 43eee2ef09SJoerg Sonnenberger.Sh DESCRIPTION 44eee2ef09SJoerg SonnenbergerThe 45eee2ef09SJoerg Sonnenberger.Fn mbrlen 46*3623cebdSSascha Wildnerand 47*3623cebdSSascha Wildner.Fn mbrlen_l 48*3623cebdSSascha Wildnerfunctions inspect at most 49eee2ef09SJoerg Sonnenberger.Fa n 500d5acd74SJohn Marinobytes pointed to by 51eee2ef09SJoerg Sonnenberger.Fa s 520d5acd74SJohn Marinoto determine the number of bytes needed to complete the next 530d5acd74SJohn Marinomultibyte character. 54eee2ef09SJoerg Sonnenberger.Pp 550d5acd74SJohn MarinoThe 560d5acd74SJohn Marino.Vt mbstate_t 570d5acd74SJohn Marinoargument, 580d5acd74SJohn Marino.Fa ps , 590d5acd74SJohn Marinois used to keep track of the shift state. 600d5acd74SJohn MarinoIf it is 610d5acd74SJohn Marino.Dv NULL , 620d5acd74SJohn Marino.Fn mbrlen 63*3623cebdSSascha Wildnerand 64*3623cebdSSascha Wildner.Fn mbrlen_l 65*3623cebdSSascha Wildneruse an internal, static 660d5acd74SJohn Marino.Vt mbstate_t 670d5acd74SJohn Marinoobject, which is initialized to the initial conversion state 680d5acd74SJohn Marinoat program startup. 690d5acd74SJohn Marino.Pp 700d5acd74SJohn MarinoIt is equivalent to: 710d5acd74SJohn Marino.Pp 720d5acd74SJohn Marino.Dl "mbrtowc(NULL, s, n, ps);" 730d5acd74SJohn Marino.Pp 740d5acd74SJohn MarinoExcept that when 750d5acd74SJohn Marino.Fa ps 760d5acd74SJohn Marinois a 770d5acd74SJohn Marino.Dv NULL 780d5acd74SJohn Marinopointer, 790d5acd74SJohn Marino.Fn mbrlen 80*3623cebdSSascha Wildnerand 81*3623cebdSSascha Wildner.Fn mbrlen_l 82*3623cebdSSascha Wildneruse their own static, internal 830d5acd74SJohn Marino.Vt mbstate_t 840d5acd74SJohn Marinoobject to keep track of the shift state. 85*3623cebdSSascha Wildner.Pp 86*3623cebdSSascha WildnerThe 87*3623cebdSSascha Wildner.Fn mbrlen_l 88*3623cebdSSascha Wildnerfunction takes an explicit 89*3623cebdSSascha Wildner.Fa locale 90*3623cebdSSascha Wildnerargument, whereas the 91*3623cebdSSascha Wildner.Fn mbrlen 92*3623cebdSSascha Wildnerfunction uses the current global or per-thread locale. 93eee2ef09SJoerg Sonnenberger.Sh RETURN VALUES 94eee2ef09SJoerg SonnenbergerThe 95eee2ef09SJoerg Sonnenberger.Fn mbrlen 96*3623cebdSSascha Wildnerand 97*3623cebdSSascha Wildner.Fn mbrlen_l 98*3623cebdSSascha Wildnerfunctions return: 990d5acd74SJohn Marino.Bl -tag -width indent 1000d5acd74SJohn Marino.It 0 1010d5acd74SJohn MarinoThe next 102eee2ef09SJoerg Sonnenberger.Fa n 1030d5acd74SJohn Marinoor fewer bytes 1040d5acd74SJohn Marinorepresent the null wide character 1050d5acd74SJohn Marino.Pq Li "L'\e0'" . 1060d5acd74SJohn Marino.It >0 1070d5acd74SJohn MarinoThe next 108eee2ef09SJoerg Sonnenberger.Fa n 1090d5acd74SJohn Marinoor fewer bytes 1100d5acd74SJohn Marinorepresent a valid character, 111eee2ef09SJoerg Sonnenberger.Fn mbrlen 112*3623cebdSSascha Wildnerand 113*3623cebdSSascha Wildner.Fn mbrlen_l 114*3623cebdSSascha Wildnerreturn the number of bytes used to complete the multibyte character. 1150d5acd74SJohn Marino.It Po Vt size_t Pc Ns \-2 1160d5acd74SJohn MarinoThe next 1170d5acd74SJohn Marino.Fa n 1180d5acd74SJohn Marinocontribute to, but do not complete, a valid multibyte character sequence, 1190d5acd74SJohn Marinoand all 1200d5acd74SJohn Marino.Fa n 1210d5acd74SJohn Marinobytes have been processed. 1220d5acd74SJohn Marino.It Po Vt size_t Pc Ns \-1 1230d5acd74SJohn MarinoAn encoding error has occurred. 1240d5acd74SJohn MarinoThe next 1250d5acd74SJohn Marino.Fa n 1260d5acd74SJohn Marinoor fewer bytes do not contribute to a valid multibyte character. 1270d5acd74SJohn Marino.El 1280d5acd74SJohn Marino.Sh EXAMPLES 1290d5acd74SJohn MarinoA function that calculates the number of characters in a multibyte 1300d5acd74SJohn Marinocharacter string: 1310d5acd74SJohn Marino.Bd -literal -offset indent 1320d5acd74SJohn Marinosize_t 1330d5acd74SJohn Marinonchars(const char *s) 1340d5acd74SJohn Marino{ 1350d5acd74SJohn Marino size_t charlen, chars; 1360d5acd74SJohn Marino mbstate_t mbs; 1370d5acd74SJohn Marino 1380d5acd74SJohn Marino chars = 0; 1390d5acd74SJohn Marino memset(&mbs, 0, sizeof(mbs)); 1400d5acd74SJohn Marino while ((charlen = mbrlen(s, MB_CUR_MAX, &mbs)) != 0 && 1410d5acd74SJohn Marino charlen != (size_t)-1 && charlen != (size_t)-2) { 1420d5acd74SJohn Marino s += charlen; 1430d5acd74SJohn Marino chars++; 1440d5acd74SJohn Marino } 1450d5acd74SJohn Marino 1460d5acd74SJohn Marino return (chars); 1470d5acd74SJohn Marino} 1480d5acd74SJohn Marino.Ed 1490d5acd74SJohn Marino.Sh ERRORS 1500d5acd74SJohn MarinoThe 1510d5acd74SJohn Marino.Fn mbrlen 152*3623cebdSSascha Wildnerand 153*3623cebdSSascha Wildner.Fn mbrlen_l 154*3623cebdSSascha Wildnerfunctions will fail if: 155eee2ef09SJoerg Sonnenberger.Bl -tag -width Er 156eee2ef09SJoerg Sonnenberger.It Bq Er EILSEQ 1570d5acd74SJohn MarinoAn invalid multibyte sequence was detected. 158eee2ef09SJoerg Sonnenberger.It Bq Er EINVAL 1590d5acd74SJohn MarinoThe conversion state is invalid. 160eee2ef09SJoerg Sonnenberger.El 161eee2ef09SJoerg Sonnenberger.Sh SEE ALSO 162eee2ef09SJoerg Sonnenberger.Xr mblen 3 , 163eee2ef09SJoerg Sonnenberger.Xr mbrtowc 3 , 164*3623cebdSSascha Wildner.Xr multibyte 3 , 165*3623cebdSSascha Wildner.Xr xlocale 3 166eee2ef09SJoerg Sonnenberger.Sh STANDARDS 167eee2ef09SJoerg SonnenbergerThe 168eee2ef09SJoerg Sonnenberger.Fn mbrlen 169eee2ef09SJoerg Sonnenbergerfunction conforms to 170eee2ef09SJoerg Sonnenberger.St -isoC-99 . 171