diff options
| author | stsp <> | 2011-04-04 18:16:24 +0000 |
|---|---|---|
| committer | stsp <> | 2011-04-04 18:16:24 +0000 |
| commit | 94f3deae39a61ef324407c30b0a111d8aadf75b9 (patch) | |
| tree | 59229a77bf938176eb0293b60ecb093b44e0e6d5 /src/lib/libc | |
| parent | 02a85bcef48eb09f56ec3928c76a8577da494d98 (diff) | |
| download | openbsd-94f3deae39a61ef324407c30b0a111d8aadf75b9.tar.gz openbsd-94f3deae39a61ef324407c30b0a111d8aadf75b9.tar.bz2 openbsd-94f3deae39a61ef324407c30b0a111d8aadf75b9.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/lib/libc')
| -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 | } |
