summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorespie <>2011-05-28 15:16:46 +0000
committerespie <>2011-05-28 15:16:46 +0000
commit4f95c6d97693bb8ecaa538419856ab37e88f1612 (patch)
treeab656b594c1b784500e488a856da2be9fb492783 /src
parentad544c844de4aebf9a34b9a0cd785ce2d834b7a3 (diff)
downloadopenbsd-4f95c6d97693bb8ecaa538419856ab37e88f1612.tar.gz
openbsd-4f95c6d97693bb8ecaa538419856ab37e88f1612.tar.bz2
openbsd-4f95c6d97693bb8ecaa538419856ab37e88f1612.zip
wcs(n)casecmp support, manpage comments from jmc@, okay deraadt@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libc/string/Makefile.inc6
-rw-r--r--src/lib/libc/string/wcscasecmp.c61
-rw-r--r--src/lib/libc/string/wmemchr.320
3 files changed, 82 insertions, 5 deletions
diff --git a/src/lib/libc/string/Makefile.inc b/src/lib/libc/string/Makefile.inc
index 679ba1b213..44e011e3c1 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.24 2011/04/04 18:16:24 stsp Exp $ 1# $OpenBSD: Makefile.inc,v 1.25 2011/05/28 15:16:46 espie 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
@@ -10,7 +10,7 @@ SRCS+= bm.c memccpy.c memrchr.c strcasecmp.c strcasestr.c strcoll.c strdup.c \
10 wcslen.c wcsncat.c wcsncmp.c wcsncpy.c wcspbrk.c wcsrchr.c wcsspn.c \ 10 wcslen.c wcsncat.c wcsncmp.c wcsncpy.c wcspbrk.c wcsrchr.c wcsspn.c \
11 wcsstr.c wcstok.c wcswcs.c wcswidth.c wmemchr.c wmemcmp.c wmemcpy.c \ 11 wcsstr.c wcstok.c wcswcs.c wcswidth.c wmemchr.c wmemcmp.c wmemcpy.c \
12 wmemmove.c wmemset.c \ 12 wmemmove.c wmemset.c \
13 timingsafe_bcmp.c 13 timingsafe_bcmp.c wcscasecmp.c
14 14
15# machine-dependent net sources 15# machine-dependent net sources
16# m-d Makefile.inc must include sources for: 16# m-d Makefile.inc must include sources for:
@@ -167,6 +167,7 @@ MLINKS+=wmemchr.3 wmemset.3
167MLINKS+=wmemchr.3 wcscat.3 167MLINKS+=wmemchr.3 wcscat.3
168MLINKS+=wmemchr.3 wcschr.3 168MLINKS+=wmemchr.3 wcschr.3
169MLINKS+=wmemchr.3 wcscmp.3 169MLINKS+=wmemchr.3 wcscmp.3
170MLINKS+=wmemchr.3 wcscasecmp.3
170MLINKS+=wmemchr.3 wcscpy.3 171MLINKS+=wmemchr.3 wcscpy.3
171MLINKS+=wmemchr.3 wcscspn.3 172MLINKS+=wmemchr.3 wcscspn.3
172MLINKS+=wmemchr.3 wcslcat.3 173MLINKS+=wmemchr.3 wcslcat.3
@@ -174,6 +175,7 @@ MLINKS+=wmemchr.3 wcslcpy.3
174MLINKS+=wmemchr.3 wcslen.3 175MLINKS+=wmemchr.3 wcslen.3
175MLINKS+=wmemchr.3 wcsncat.3 176MLINKS+=wmemchr.3 wcsncat.3
176MLINKS+=wmemchr.3 wcsncmp.3 177MLINKS+=wmemchr.3 wcsncmp.3
178MLINKS+=wmemchr.3 wcsncasecmp.3
177MLINKS+=wmemchr.3 wcsncpy.3 179MLINKS+=wmemchr.3 wcsncpy.3
178MLINKS+=wmemchr.3 wcspbrk.3 180MLINKS+=wmemchr.3 wcspbrk.3
179MLINKS+=wmemchr.3 wcsrchr.3 181MLINKS+=wmemchr.3 wcsrchr.3
diff --git a/src/lib/libc/string/wcscasecmp.c b/src/lib/libc/string/wcscasecmp.c
new file mode 100644
index 0000000000..d4085ad3e8
--- /dev/null
+++ b/src/lib/libc/string/wcscasecmp.c
@@ -0,0 +1,61 @@
1/* $OpenBSD: wcscasecmp.c,v 1.1 2011/05/28 15:16:46 espie Exp $ */
2
3/*
4 * Copyright (c) 2011 Marc Espie
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS
16 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBSD
19 * PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include <wchar.h>
29#include <wctype.h>
30#include "locale/runetype.h"
31
32int
33wcscasecmp(const wchar_t *s1, const char *s2)
34{
35 wchar_t l1, l2;
36
37 while ((l1 = towlower(*s1++)) == (l2 = towlower(*s2++))) {
38 if (l1 == 0)
39 return (0);
40 }
41 /* XXX assumes wchar_t = int */
42 return ((rune_t)l1 - (rune_t)l2);
43}
44
45int
46wcsncasecmp(const wchar_t *s1, const wchar_t *s2, size_t n)
47{
48 wchar_t l1, l2;
49
50 if (n == 0)
51 return (0);
52 do {
53 if (((l1 = towlower(*s1++))) != (l2 = towlower(*s2++))) {
54 /* XXX assumes wchar_t = int */
55 return ((rune_t)l1 - (rune_t)l2);
56 }
57 if (l1 == 0)
58 break;
59 } while (--n != 0);
60 return (0);
61}
diff --git a/src/lib/libc/string/wmemchr.3 b/src/lib/libc/string/wmemchr.3
index ff82c7b530..7c0740a03e 100644
--- a/src/lib/libc/string/wmemchr.3
+++ b/src/lib/libc/string/wmemchr.3
@@ -1,4 +1,4 @@
1.\" $OpenBSD: wmemchr.3,v 1.4 2010/09/10 18:38:20 jmc Exp $ 1.\" $OpenBSD: wmemchr.3,v 1.5 2011/05/28 15:16:46 espie Exp $
2.\" 2.\"
3.\" $NetBSD: wmemchr.3,v 1.9 2003/09/08 17:54:33 wiz Exp $ 3.\" $NetBSD: wmemchr.3,v 1.9 2003/09/08 17:54:33 wiz Exp $
4.\" 4.\"
@@ -35,7 +35,7 @@
35.\" 35.\"
36.\" from: @(#)strcpy.3 8.1 (Berkeley) 6/4/93 36.\" from: @(#)strcpy.3 8.1 (Berkeley) 6/4/93
37.\" 37.\"
38.Dd $Mdocdate: September 10 2010 $ 38.Dd $Mdocdate: May 28 2011 $
39.Dt WMEMCHR 3 39.Dt WMEMCHR 3
40.Os 40.Os
41.Sh NAME 41.Sh NAME
@@ -47,6 +47,7 @@
47.Nm wcscat , 47.Nm wcscat ,
48.Nm wcschr , 48.Nm wcschr ,
49.Nm wcscmp , 49.Nm wcscmp ,
50.Nm wcscasecmp ,
50.Nm wcscpy , 51.Nm wcscpy ,
51.Nm wcscspn , 52.Nm wcscspn ,
52.Nm wcslcat , 53.Nm wcslcat ,
@@ -54,6 +55,7 @@
54.Nm wcslen , 55.Nm wcslen ,
55.Nm wcsncat , 56.Nm wcsncat ,
56.Nm wcsncmp , 57.Nm wcsncmp ,
58.Nm wcsncasecmp ,
57.Nm wcsncpy , 59.Nm wcsncpy ,
58.Nm wcspbrk , 60.Nm wcspbrk ,
59.Nm wcsrchr , 61.Nm wcsrchr ,
@@ -78,6 +80,8 @@
78.Fn wcschr "const wchar_t *s" "wchar_t c" 80.Fn wcschr "const wchar_t *s" "wchar_t c"
79.Ft int 81.Ft int
80.Fn wcscmp "const wchar_t *s1" "const wchar_t *s2" 82.Fn wcscmp "const wchar_t *s1" "const wchar_t *s2"
83.Ft int
84.Fn wcscasecmp "const wchar_t *s1" "const wchar_t *s2"
81.Ft wchar_t * 85.Ft wchar_t *
82.Fn wcscpy "wchar_t * restrict s1" "const wchar_t * restrict s2" 86.Fn wcscpy "wchar_t * restrict s1" "const wchar_t * restrict s2"
83.Ft size_t 87.Ft size_t
@@ -92,6 +96,8 @@
92.Fn wcsncat "wchar_t * restrict s1" "const wchar_t * restrict s2" "size_t n" 96.Fn wcsncat "wchar_t * restrict s1" "const wchar_t * restrict s2" "size_t n"
93.Ft int 97.Ft int
94.Fn wcsncmp "const wchar_t *s1" "const wchar_t * s2" "size_t n" 98.Fn wcsncmp "const wchar_t *s1" "const wchar_t * s2" "size_t n"
99.Ft int
100.Fn wcsncasecmp "const wchar_t *s1" "const wchar_t * s2" "size_t n"
95.Ft wchar_t * 101.Ft wchar_t *
96.Fn wcsncpy "wchar_t * restrict s1" "const wchar_t * restrict s2" "size_t n" 102.Fn wcsncpy "wchar_t * restrict s1" "const wchar_t * restrict s2" "size_t n"
97.Ft wchar_t * 103.Ft wchar_t *
@@ -117,6 +123,7 @@ counterpart, such as
117.Xr strcat 3 , 123.Xr strcat 3 ,
118.Xr strchr 3 , 124.Xr strchr 3 ,
119.Xr strcmp 3 , 125.Xr strcmp 3 ,
126.Xr strcasecmp 3 ,
120.Xr strcpy 3 , 127.Xr strcpy 3 ,
121.Xr strcspn 3 , 128.Xr strcspn 3 ,
122.Xr strlcat 3 , 129.Xr strlcat 3 ,
@@ -124,6 +131,7 @@ counterpart, such as
124.Xr strlen 3 , 131.Xr strlen 3 ,
125.Xr strncat 3 , 132.Xr strncat 3 ,
126.Xr strncmp 3 , 133.Xr strncmp 3 ,
134.Xr strncasecmp 3 ,
127.Xr strncpy 3 , 135.Xr strncpy 3 ,
128.Xr strpbrk 3 , 136.Xr strpbrk 3 ,
129.Xr strrchr 3 , 137.Xr strrchr 3 ,
@@ -134,7 +142,13 @@ These functions conform to
134.St -isoC-99 142.St -isoC-99
135and were first introduced in 143and were first introduced in
136.St -isoC-amd1 , 144.St -isoC-amd1 ,
137with the exception of 145except for
146.Fn wcscasecmp
147and
148.Fn wcsncasecmp ,
149which conform to
150.St -p1003.1-2008 ,
151and for
138.Fn wcslcat 152.Fn wcslcat
139and 153and
140.Fn wcslcpy , 154.Fn wcslcpy ,