diff options
author | stsp <> | 2011-04-04 18:16:24 +0000 |
---|---|---|
committer | stsp <> | 2011-04-04 18:16:24 +0000 |
commit | 515602fafdedd66b15c0d7c6a1902217acea3b8e (patch) | |
tree | 59229a77bf938176eb0293b60ecb093b44e0e6d5 /src | |
parent | b34795695975df97bc9658c650b8fb5bb3d56912 (diff) | |
download | openbsd-515602fafdedd66b15c0d7c6a1902217acea3b8e.tar.gz openbsd-515602fafdedd66b15c0d7c6a1902217acea3b8e.tar.bz2 openbsd-515602fafdedd66b15c0d7c6a1902217acea3b8e.zip |
Add a wcswidth man page (based on FreeBSD), and fix the implementation
to return -1 in case of an unprintable character.
ok nicm jmc
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libc/string/Makefile.inc | 4 | ||||
-rw-r--r-- | src/lib/libc/string/wcswidth.3 | 60 | ||||
-rw-r--r-- | src/lib/libc/string/wcswidth.c | 9 |
3 files changed, 68 insertions, 5 deletions
diff --git a/src/lib/libc/string/Makefile.inc b/src/lib/libc/string/Makefile.inc index 34edd8eb33..679ba1b213 100644 --- a/src/lib/libc/string/Makefile.inc +++ b/src/lib/libc/string/Makefile.inc | |||
@@ -1,4 +1,4 @@ | |||
1 | # $OpenBSD: Makefile.inc,v 1.23 2010/09/24 13:33:00 matthew Exp $ | 1 | # $OpenBSD: Makefile.inc,v 1.24 2011/04/04 18:16:24 stsp Exp $ |
2 | 2 | ||
3 | # string sources | 3 | # string sources |
4 | .PATH: ${LIBCSRCDIR}/arch/${MACHINE_CPU}/string ${LIBCSRCDIR}/string | 4 | .PATH: ${LIBCSRCDIR}/arch/${MACHINE_CPU}/string ${LIBCSRCDIR}/string |
@@ -144,7 +144,7 @@ MAN+= bm.3 bcmp.3 bcopy.3 bstring.3 bzero.3 ffs.3 memccpy.3 memchr.3 \ | |||
144 | strchr.3 strcmp.3 strcoll.3 strcpy.3 strcspn.3 strerror.3 \ | 144 | strchr.3 strcmp.3 strcoll.3 strcpy.3 strcspn.3 strerror.3 \ |
145 | string.3 strlen.3 strmode.3 strdup.3 strpbrk.3 strrchr.3 strsep.3 \ | 145 | string.3 strlen.3 strmode.3 strdup.3 strpbrk.3 strrchr.3 strsep.3 \ |
146 | strsignal.3 strspn.3 strstr.3 strtok.3 strxfrm.3 swab.3 strlcpy.3 \ | 146 | strsignal.3 strspn.3 strstr.3 strtok.3 strxfrm.3 swab.3 strlcpy.3 \ |
147 | wcstok.3 wmemchr.3 | 147 | wcstok.3 wmemchr.3 wcswidth.3 |
148 | 148 | ||
149 | MLINKS+=bm.3 bm_comp.3 bm.3 bm_exec.3 bm.3 bm_free.3 | 149 | MLINKS+=bm.3 bm_comp.3 bm.3 bm_exec.3 bm.3 bm_free.3 |
150 | MLINKS+=memchr.3 memrchr.3 | 150 | MLINKS+=memchr.3 memrchr.3 |
diff --git a/src/lib/libc/string/wcswidth.3 b/src/lib/libc/string/wcswidth.3 new file mode 100644 index 0000000000..a68ec33cad --- /dev/null +++ b/src/lib/libc/string/wcswidth.3 | |||
@@ -0,0 +1,60 @@ | |||
1 | .\" $OpenBSD: wcswidth.3,v 1.1 2011/04/04 18:16:24 stsp Exp $ | ||
2 | .\" Copyright (c) 2002 Tim J. Robbins | ||
3 | .\" All rights reserved. | ||
4 | .\" | ||
5 | .\" Redistribution and use in source and binary forms, with or without | ||
6 | .\" modification, are permitted provided that the following conditions | ||
7 | .\" are met: | ||
8 | .\" 1. Redistributions of source code must retain the above copyright | ||
9 | .\" notice, this list of conditions and the following disclaimer. | ||
10 | .\" 2. Redistributions in binary form must reproduce the above copyright | ||
11 | .\" notice, this list of conditions and the following disclaimer in the | ||
12 | .\" documentation and/or other materials provided with the distribution. | ||
13 | .\" | ||
14 | .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||
15 | .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
16 | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
17 | .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||
18 | .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||
19 | .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||
20 | .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
21 | .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
22 | .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
23 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||
24 | .\" SUCH DAMAGE. | ||
25 | .\" | ||
26 | .\" | ||
27 | .Dd $Mdocdate: April 4 2011 $ | ||
28 | .Dt WCSWIDTH 3 | ||
29 | .Os | ||
30 | .Sh NAME | ||
31 | .Nm wcswidth | ||
32 | .Nd number of column positions in wide-character string | ||
33 | .Sh SYNOPSIS | ||
34 | .In wchar.h | ||
35 | .Ft int | ||
36 | .Fn wcswidth "const wchar_t *pwcs" "size_t n" | ||
37 | .Sh DESCRIPTION | ||
38 | The | ||
39 | .Fn wcswidth | ||
40 | function determines the number of column positions required for the first | ||
41 | .Fa n | ||
42 | characters of | ||
43 | .Fa pwcs , | ||
44 | or until a null wide character (L'\e0') is encountered. | ||
45 | .Sh RETURN VALUES | ||
46 | The | ||
47 | .Fn wcswidth | ||
48 | function returns 0 if | ||
49 | .Fa pwcs | ||
50 | is an empty string (L""), | ||
51 | \-1 if a non-printing wide character is encountered, | ||
52 | otherwise it returns the number of column positions occupied. | ||
53 | .Sh SEE ALSO | ||
54 | .Xr iswprint 3 , | ||
55 | .Xr wcwidth 3 | ||
56 | .Sh STANDARDS | ||
57 | The | ||
58 | .Fn wcswidth | ||
59 | function conforms to | ||
60 | .St -p1003.1-2001 . | ||
diff --git a/src/lib/libc/string/wcswidth.c b/src/lib/libc/string/wcswidth.c index cd240897b5..8ea1bdf6e6 100644 --- a/src/lib/libc/string/wcswidth.c +++ b/src/lib/libc/string/wcswidth.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: wcswidth.c,v 1.3 2005/08/08 08:05:37 espie Exp $ */ | 1 | /* $OpenBSD: wcswidth.c,v 1.4 2011/04/04 18:16:24 stsp Exp $ */ |
2 | /* $NetBSD: wcswidth.c,v 1.2 2001/01/03 14:29:37 lukem Exp $ */ | 2 | /* $NetBSD: wcswidth.c,v 1.2 2001/01/03 14:29:37 lukem Exp $ */ |
3 | 3 | ||
4 | /*- | 4 | /*- |
@@ -34,11 +34,14 @@ | |||
34 | int | 34 | int |
35 | wcswidth(const wchar_t *s, size_t n) | 35 | wcswidth(const wchar_t *s, size_t n) |
36 | { | 36 | { |
37 | int w; | 37 | int w, q; |
38 | 38 | ||
39 | w = 0; | 39 | w = 0; |
40 | while (n && *s) { | 40 | while (n && *s) { |
41 | w += wcwidth(*s); | 41 | q = wcwidth(*s); |
42 | if (q == -1) | ||
43 | return (-1); | ||
44 | w += q; | ||
42 | s++; | 45 | s++; |
43 | n--; | 46 | n--; |
44 | } | 47 | } |