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