summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorstsp <>2011-04-04 18:16:24 +0000
committerstsp <>2011-04-04 18:16:24 +0000
commit515602fafdedd66b15c0d7c6a1902217acea3b8e (patch)
tree59229a77bf938176eb0293b60ecb093b44e0e6d5 /src
parentb34795695975df97bc9658c650b8fb5bb3d56912 (diff)
downloadopenbsd-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.inc4
-rw-r--r--src/lib/libc/string/wcswidth.360
-rw-r--r--src/lib/libc/string/wcswidth.c9
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
149MLINKS+=bm.3 bm_comp.3 bm.3 bm_exec.3 bm.3 bm_free.3 149MLINKS+=bm.3 bm_comp.3 bm.3 bm_exec.3 bm.3 bm_free.3
150MLINKS+=memchr.3 memrchr.3 150MLINKS+=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
38The
39.Fn wcswidth
40function determines the number of column positions required for the first
41.Fa n
42characters of
43.Fa pwcs ,
44or until a null wide character (L'\e0') is encountered.
45.Sh RETURN VALUES
46The
47.Fn wcswidth
48function returns 0 if
49.Fa pwcs
50is an empty string (L""),
51\-1 if a non-printing wide character is encountered,
52otherwise it returns the number of column positions occupied.
53.Sh SEE ALSO
54.Xr iswprint 3 ,
55.Xr wcwidth 3
56.Sh STANDARDS
57The
58.Fn wcswidth
59function 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 @@
34int 34int
35wcswidth(const wchar_t *s, size_t n) 35wcswidth(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 }