Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src Import wcsnlen(3) to libc
details: https://anonhg.NetBSD.org/src/rev/01c77b294ce6
branches: trunk
changeset: 348340:01c77b294ce6
user: kamil <kamil%NetBSD.org@localhost>
date: Sat Oct 15 14:21:59 2016 +0000
description:
Import wcsnlen(3) to libc
The wcsnlen(3) function conforms to POSIX.1-2008 and is an addition to the
ISO C standard.
size_t wcsnlen(const wchar_t *s, size_t maxlen);
The wcsnlen(3) function computes the number of wide-characters in a wide-
-string to which s points, not including NULL terminating wide-character
code and checking no more than maxlen wide-characters. This function never
examines wide-characters beyond a wide-string of maxlen size.
This function is a safer version of wcslen(3):
size_t wcslen(const wchar_t *s);
Update STANDARDS section of wmemchr(3) describing wide-character functions.
diffstat:
distrib/sets/lists/comp/mi | 5 ++-
include/wchar.h | 3 +-
lib/libc/string/Makefile.inc | 13 ++++---
lib/libc/string/wcsnlen.c | 49 ++++++++++++++++++++++++++++++
lib/libc/string/wmemchr.3 | 71 +++++++++++++++++++++++++++++++++++++------
5 files changed, 122 insertions(+), 19 deletions(-)
diffs (243 lines):
diff -r e2df9c5de9f3 -r 01c77b294ce6 distrib/sets/lists/comp/mi
--- a/distrib/sets/lists/comp/mi Sat Oct 15 12:38:03 2016 +0000
+++ b/distrib/sets/lists/comp/mi Sat Oct 15 14:21:59 2016 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.2066 2016/10/14 16:09:45 spz Exp $
+# $NetBSD: mi,v 1.2067 2016/10/15 14:21:59 kamil Exp $
#
# Note: don't delete entries from here - mark them as "obsolete" instead.
./etc/mtree/set.comp comp-sys-root
@@ -9541,6 +9541,7 @@
./usr/share/man/cat3/wcsncat.0 comp-c-catman .cat
./usr/share/man/cat3/wcsncmp.0 comp-c-catman .cat
./usr/share/man/cat3/wcsncpy.0 comp-c-catman .cat
+./usr/share/man/cat3/wcsnlen.0 comp-c-catman .cat
./usr/share/man/cat3/wcspbrk.0 comp-c-catman .cat
./usr/share/man/cat3/wcsrchr.0 comp-c-catman .cat
./usr/share/man/cat3/wcsrtombs.0 comp-c-catman .cat
@@ -16790,6 +16791,7 @@
./usr/share/man/html3/wcsncat.html comp-c-htmlman html
./usr/share/man/html3/wcsncmp.html comp-c-htmlman html
./usr/share/man/html3/wcsncpy.html comp-c-htmlman html
+./usr/share/man/html3/wcsnlen.html comp-c-htmlman html
./usr/share/man/html3/wcspbrk.html comp-c-htmlman html
./usr/share/man/html3/wcsrchr.html comp-c-htmlman html
./usr/share/man/html3/wcsrtombs.html comp-c-htmlman html
@@ -24110,6 +24112,7 @@
./usr/share/man/man3/wcsncat.3 comp-c-man .man
./usr/share/man/man3/wcsncmp.3 comp-c-man .man
./usr/share/man/man3/wcsncpy.3 comp-c-man .man
+./usr/share/man/man3/wcsnlen.3 comp-c-man .man
./usr/share/man/man3/wcspbrk.3 comp-c-man .man
./usr/share/man/man3/wcsrchr.3 comp-c-man .man
./usr/share/man/man3/wcsrtombs.3 comp-c-man .man
diff -r e2df9c5de9f3 -r 01c77b294ce6 include/wchar.h
--- a/include/wchar.h Sat Oct 15 12:38:03 2016 +0000
+++ b/include/wchar.h Sat Oct 15 14:21:59 2016 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: wchar.h,v 1.41 2014/10/13 00:47:03 christos Exp $ */
+/* $NetBSD: wchar.h,v 1.42 2016/10/15 14:22:00 kamil Exp $ */
/*-
* Copyright (c)1999 Citrus Project,
@@ -116,6 +116,7 @@
wchar_t *wcsncat(wchar_t * __restrict, const wchar_t * __restrict, size_t);
int wcsncmp(const wchar_t *, const wchar_t *, size_t);
wchar_t *wcsncpy(wchar_t * __restrict , const wchar_t * __restrict, size_t);
+size_t wcsnlen(const wchar_t *, size_t);
wchar_t *wcspbrk(const wchar_t *, const wchar_t *);
wchar_t *wcsrchr(const wchar_t *, wchar_t);
size_t wcsrtombs(char * __restrict, const wchar_t ** __restrict, size_t,
diff -r e2df9c5de9f3 -r 01c77b294ce6 lib/libc/string/Makefile.inc
--- a/lib/libc/string/Makefile.inc Sat Oct 15 12:38:03 2016 +0000
+++ b/lib/libc/string/Makefile.inc Sat Oct 15 14:21:59 2016 +0000
@@ -1,5 +1,5 @@
# from: @(#)Makefile.inc 8.1 (Berkeley) 6/4/93
-# $NetBSD: Makefile.inc,v 1.81 2016/10/12 20:01:12 christos Exp $
+# $NetBSD: Makefile.inc,v 1.82 2016/10/15 14:22:00 kamil Exp $
# string sources
.PATH: ${ARCHDIR}/string ${.CURDIR}/string
@@ -27,7 +27,7 @@
# wide char
SRCS+= wcscat.c wcschr.c wcscmp.c wcscpy.c wcscspn.c wcslcat.c wcslcpy.c \
- wcslen.c wcsncat.c wcscasecmp.c wcsdup.c wcsncasecmp.c \
+ wcslen.c wcsncat.c wcsnlen.c wcscasecmp.c wcsdup.c wcsncasecmp.c \
wcsncmp.c wcsncpy.c wcspbrk.c wcsrchr.c wcsspn.c wcsstr.c wcstok.c \
wcswcs.c wmemchr.c wmemcmp.c wmemcpy.c wmemmove.c wmemset.c
CPPFLAGS.wcscmp.c+= -I${LIBCDIR}/locale
@@ -72,8 +72,9 @@
wmemchr.3 wcscmp.3 wmemchr.3 wcscpy.3 \
wmemchr.3 wcscspn.3 wmemchr.3 wcslcat.3 \
wmemchr.3 wcslcpy.3 wmemchr.3 wcslen.3 \
- wmemchr.3 wcsncat.3 wmemchr.3 wcsncmp.3 \
- wmemchr.3 wcsncpy.3 wmemchr.3 wcspbrk.3 \
- wmemchr.3 wcsrchr.3 wmemchr.3 wcsspn.3 \
- wmemchr.3 wcsstr.3 wmemchr.3 wcswcs.3
+ wmemchr.3 wcsncat.3 wmemchr.3 wcsnlen.3 \
+ wmemchr.3 wcsncmp.3 wmemchr.3 wcsncpy.3 \
+ wmemchr.3 wcspbrk.3 wmemchr.3 wcsrchr.3 \
+ wmemchr.3 wcsspn.3 wmemchr.3 wcsstr.3 \
+ wmemchr.3 wcswcs.3
MLINKS+=wcscasecmp.3 wcsncasecmp.3
diff -r e2df9c5de9f3 -r 01c77b294ce6 lib/libc/string/wcsnlen.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/libc/string/wcsnlen.c Sat Oct 15 14:21:59 2016 +0000
@@ -0,0 +1,49 @@
+/*-
+ * Copyright (c) 2016 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Kamil Rytarowski.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: wcsnlen.c,v 1.1 2016/10/15 14:22:00 kamil Exp $");
+
+#include <assert.h>
+#include <wchar.h>
+
+size_t
+wcsnlen(const wchar_t *s, size_t maxlen)
+{
+ const wchar_t *p;
+
+ _DIAGASSERT(s != NULL);
+
+ p = s;
+ while (maxlen-->0 && *p) {
+ p++;
+ }
+
+ return p - s;
+}
diff -r e2df9c5de9f3 -r 01c77b294ce6 lib/libc/string/wmemchr.3
--- a/lib/libc/string/wmemchr.3 Sat Oct 15 12:38:03 2016 +0000
+++ b/lib/libc/string/wmemchr.3 Sat Oct 15 14:21:59 2016 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: wmemchr.3,v 1.16 2016/07/14 17:17:58 abhinav Exp $
+.\" $NetBSD: wmemchr.3,v 1.17 2016/10/15 14:22:00 kamil Exp $
.\"
.\" Copyright (c) 1990, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -33,7 +33,7 @@
.\"
.\" from: @(#)strcpy.3 8.1 (Berkeley) 6/4/93
.\"
-.Dd May 1, 2009
+.Dd October 15, 2016
.Dt WMEMCHR 3
.Os
.Sh NAME
@@ -53,6 +53,7 @@
.Nm wcsncat ,
.Nm wcsncmp ,
.Nm wcsncpy ,
+.Nm wcsnlen ,
.Nm wcspbrk ,
.Nm wcsrchr ,
.Nm wcsspn ,
@@ -95,6 +96,8 @@
.Fn wcsncmp "const wchar_t *s1" "const wchar_t * s2" "size_t n"
.Ft wchar_t *
.Fn wcsncpy "wchar_t * restrict s1" "const wchar_t * restrict s2" "size_t n"
+.Ft size_t
+.Fn wcsnlen "const wchar_t *s" "size_t maxlen"
.Ft wchar_t *
.Fn wcspbrk "const wchar_t *s1" "const wchar_t *s2"
.Ft wchar_t *
@@ -147,16 +150,62 @@
.Xr strspn 3 ,
.Xr strstr 3
.Sh STANDARDS
-These functions conform to
+The
+.Fn wmemchr ,
+.Fn wmemcmp ,
+.Fn wmemcpy ,
+.Fn wmemmove ,
+.Fn wmemset ,
+.Fn wcscat ,
+.Fn wcschr ,
+.Fn wcscmp ,
+.Fn wcscpy ,
+.Fn wcscspn ,
+.Fn wcslen ,
+.Fn wcsncat ,
+.Fn wcsncmp ,
+.Fn wcsncpy ,
+.Fn wcspbrk ,
+.Fn wcsrchr ,
+.Fn wcsspn
+and
+.Fn wcsstr
+functions were first introduced in
+.St -isoC-amd1
+and conform to
+.St -isoC-99 .
+Part of them:
+.Fn wmemmove ,
+.Fn wcscat ,
+.Fn wcscpy ,
+.Fn wcsncat
+and
+.Fn wcsncpy
+were modified in
.St -isoC-99
-and were first introduced in
-.St -isoC-amd1 ,
-with the exception of
-.Fn wcslcat
-and
-.Fn wcslcpy ,
-which are extensions.
+and gained the
+.Dv restrict
+keyword in parameter list,
+this new version is present in
+.Nx .
+.Pp
The
.Fn wcswcs
function conforms to
-.St -xpg4.2 .
+.St -xpg4.2 ,
+it is recommended to use technically equivalent
+.Fn wcsstr
+for maximum portability.
+.Pp
+The
+.Fn wcsnlen
+function conforms to
+.St -p1003.1-2008 .
+.Pp
+The
+.Fn wcslcat
+and
+.Fn wcslcpy
+functions are
+.Nx
+extensions.
Home |
Main Index |
Thread Index |
Old Index