xref: /dflybsd-src/lib/libc/locale/mbrlen.3 (revision 3623cebd048daab5b834d578b89faf1789b36672)
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