xref: /freebsd/lib/libc/locale/mbrlen.3 (revision 7183f43d9543e724830f9895f32fd681be00b776)
1e92a3d83STim J. Robbins.\" Copyright (c) 2002 Tim J. Robbins
2e92a3d83STim J. Robbins.\" All rights reserved.
3e92a3d83STim J. Robbins.\"
4e92a3d83STim J. Robbins.\" Redistribution and use in source and binary forms, with or without
5e92a3d83STim J. Robbins.\" modification, are permitted provided that the following conditions
6e92a3d83STim J. Robbins.\" are met:
7e92a3d83STim J. Robbins.\" 1. Redistributions of source code must retain the above copyright
8e92a3d83STim J. Robbins.\"    notice, this list of conditions and the following disclaimer.
9e92a3d83STim J. Robbins.\" 2. Redistributions in binary form must reproduce the above copyright
10e92a3d83STim J. Robbins.\"    notice, this list of conditions and the following disclaimer in the
11e92a3d83STim J. Robbins.\"    documentation and/or other materials provided with the distribution.
12e92a3d83STim J. Robbins.\"
13e92a3d83STim J. Robbins.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14e92a3d83STim J. Robbins.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15e92a3d83STim J. Robbins.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16e92a3d83STim J. Robbins.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17e92a3d83STim J. Robbins.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18e92a3d83STim J. Robbins.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19e92a3d83STim J. Robbins.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20e92a3d83STim J. Robbins.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21e92a3d83STim J. Robbins.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22e92a3d83STim J. Robbins.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23e92a3d83STim J. Robbins.\" SUCH DAMAGE.
24e92a3d83STim J. Robbins.\"
25e92a3d83STim J. Robbins.\" $FreeBSD$
267183f43dSTim J. Robbins.Dd November 11, 2002
27e92a3d83STim J. Robbins.Dt MBRLEN 3
28e92a3d83STim J. Robbins.Os
29e92a3d83STim J. Robbins.Sh NAME
30e92a3d83STim J. Robbins.Nm mbrlen
31e92a3d83STim J. Robbins.Nd "get number of bytes in a character (restartable)"
32e92a3d83STim J. Robbins.Sh LIBRARY
33e92a3d83STim J. Robbins.Lb libc
34e92a3d83STim J. Robbins.Sh SYNOPSIS
35e92a3d83STim J. Robbins.In wchar.h
36e92a3d83STim J. Robbins.Ft size_t
37e92a3d83STim J. Robbins.Fn mbrlen "const char * restrict s" "size_t n" "mbstate_t * restrict ps"
38e92a3d83STim J. Robbins.Sh DESCRIPTION
39e92a3d83STim J. RobbinsThe
40e92a3d83STim J. Robbins.Fn mbrlen
41e92a3d83STim J. Robbinsfunction determines the the number of bytes constituting the
42f4937dbeSTim J. Robbinsmultibyte character sequence pointed to by
437183f43dSTim J. Robbins.Fa s ,
447183f43dSTim J. Robbinsexamining at most
457183f43dSTim J. Robbins.Fa n
467183f43dSTim J. Robbinsbytes.
477183f43dSTim J. Robbins.Pp
487183f43dSTim J. RobbinsThe
497183f43dSTim J. Robbins.Ft mbstate_t
507183f43dSTim J. Robbinsargument,
517183f43dSTim J. Robbins.Fa ps ,
527183f43dSTim J. Robbinsis used to keep track of the shift state.
537183f43dSTim J. RobbinsIf it is
547183f43dSTim J. Robbins.Dv NULL ,
557183f43dSTim J. Robbins.Fn mbrlen
567183f43dSTim J. Robbinsuses an internal, static
577183f43dSTim J. Robbins.Ft mbstate_t
587183f43dSTim J. Robbinsobject.
59e92a3d83STim J. Robbins.Pp
60e92a3d83STim J. RobbinsIt is equivalent to:
61e92a3d83STim J. Robbins.Pp
62e92a3d83STim J. Robbins.Dl "mbrtowc(NULL, s, n, ps);"
63e92a3d83STim J. Robbins.Pp
64e92a3d83STim J. RobbinsExcept that when
65e92a3d83STim J. Robbins.Fa ps
66e92a3d83STim J. Robbinsis a NULL pointer,
67e92a3d83STim J. Robbins.Fn mbrlen
68e92a3d83STim J. Robbinsuses its own static, internal
69e92a3d83STim J. Robbins.Ft mbstate_t
70e92a3d83STim J. Robbinsobject to keep track of shift state.
71e92a3d83STim J. Robbins.Sh RETURN VALUES
72e92a3d83STim J. RobbinsThe
73e92a3d83STim J. Robbins.Fn mbrlen
74e92a3d83STim J. Robbinsfunctions returns:
75e92a3d83STim J. Robbins.Bl -tag -width indent
76e92a3d83STim J. Robbins.It 0
77e92a3d83STim J. RobbinsThe first
78e92a3d83STim J. Robbins.Fa n
79e92a3d83STim J. Robbinsor fewer bytes of
80e92a3d83STim J. Robbins.Fa s
81e92a3d83STim J. Robbinsrepresent the null wide character (L'\e0').
82e92a3d83STim J. Robbins.It >0
83e92a3d83STim J. RobbinsThe first
84e92a3d83STim J. Robbins.Fa n
85e92a3d83STim J. Robbinsor fewer bytes of
86e92a3d83STim J. Robbins.Fa s
87e92a3d83STim J. Robbinsrepresent a valid character,
88e92a3d83STim J. Robbins.Fn mbrtowc
89e92a3d83STim J. Robbinsreturns the length (in bytes) of the multibyte sequence.
90e92a3d83STim J. Robbins.It Xo
91e92a3d83STim J. Robbins.No ( Ns
92e92a3d83STim J. Robbins.Ft size_t Ns
93e92a3d83STim J. Robbins.No ) Ns \&-2
94e92a3d83STim J. Robbins.Xc
95e92a3d83STim J. RobbinsThe first
96e92a3d83STim J. Robbins.Fa n
97e92a3d83STim J. Robbinsbytes of
98e92a3d83STim J. Robbins.Fa s
99e92a3d83STim J. Robbinsare an incomplete multibyte sequence.
100e92a3d83STim J. Robbins.It Xo
101e92a3d83STim J. Robbins.No ( Ns
102e92a3d83STim J. Robbins.Ft size_t Ns
103e92a3d83STim J. Robbins.No ) Ns \&-1
104e92a3d83STim J. Robbins.Xc
105e92a3d83STim J. RobbinsThe byte sequence pointed to by
106e92a3d83STim J. Robbins.Fa s
107e92a3d83STim J. Robbinsis an invalid multibyte sequence.
108e92a3d83STim J. Robbins.El
10928ddc413STim J. Robbins.Sh EXAMPLES
11028ddc413STim J. RobbinsA function which calculates the number of characters in a multibyte
11128ddc413STim J. Robbinscharacter string:
11228ddc413STim J. Robbins.Bd -literal -offset indent
11328ddc413STim J. Robbinssize_t
11428ddc413STim J. Robbinsnchars(const char *s)
11528ddc413STim J. Robbins{
11628ddc413STim J. Robbins	size_t charlen, chars;
11728ddc413STim J. Robbins	mbstate_t mbs;
11828ddc413STim J. Robbins
11928ddc413STim J. Robbins	chars = 0;
12028ddc413STim J. Robbins	memset(&mbs, 0, sizeof(mbs));
12128ddc413STim J. Robbins	while ((charlen = mbrlen(s, MB_CUR_MAX, &mbs)) != 0 &&
12228ddc413STim J. Robbins	    charlen != (size_t)-1 && charlen != (size_t)-2) {
12328ddc413STim J. Robbins		s += charlen;
12428ddc413STim J. Robbins		chars++;
12528ddc413STim J. Robbins	}
12628ddc413STim J. Robbins
12728ddc413STim J. Robbins	return (chars);
12828ddc413STim J. Robbins}
12928ddc413STim J. Robbins.Ed
130e92a3d83STim J. Robbins.Sh ERRORS
131e92a3d83STim J. RobbinsThe
132e92a3d83STim J. Robbins.Fn mbrlen
133e92a3d83STim J. Robbinsfunction will fail if:
134e92a3d83STim J. Robbins.Bl -tag -width Er
135e92a3d83STim J. Robbins.\".It Bq Er EINVAL
136e92a3d83STim J. Robbins.\"Invalid argument.
137e92a3d83STim J. Robbins.It Bq Er EILSEQ
138e92a3d83STim J. RobbinsAn invalid multibyte sequence was detected.
139e92a3d83STim J. Robbins.El
140e92a3d83STim J. Robbins.Sh SEE ALSO
141e92a3d83STim J. Robbins.Xr mblen 3 ,
142e92a3d83STim J. Robbins.Xr mbrtowc 3
143e92a3d83STim J. Robbins.Sh STANDARDS
144e92a3d83STim J. RobbinsThe
145e92a3d83STim J. Robbins.Fn mbrlen
146e92a3d83STim J. Robbinsfunction conforms to
147e92a3d83STim J. Robbins.St -isoC-99 .
148e92a3d83STim J. Robbins.Sh BUGS
149e92a3d83STim J. RobbinsThe current implementation does not support shift states.
150