Module Name:    src
Committed By:   kamil
Date:           Sat Oct 15 14:22:00 UTC 2016

Modified Files:
        src/distrib/sets/lists/comp: mi
        src/include: wchar.h
        src/lib/libc/string: Makefile.inc wmemchr.3
Added Files:
        src/lib/libc/string: wcsnlen.c

Log Message:
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.


To generate a diff of this commit:
cvs rdiff -u -r1.2066 -r1.2067 src/distrib/sets/lists/comp/mi
cvs rdiff -u -r1.41 -r1.42 src/include/wchar.h
cvs rdiff -u -r1.81 -r1.82 src/lib/libc/string/Makefile.inc
cvs rdiff -u -r0 -r1.1 src/lib/libc/string/wcsnlen.c
cvs rdiff -u -r1.16 -r1.17 src/lib/libc/string/wmemchr.3

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/comp/mi
diff -u src/distrib/sets/lists/comp/mi:1.2066 src/distrib/sets/lists/comp/mi:1.2067
--- src/distrib/sets/lists/comp/mi:1.2066	Fri Oct 14 16:09:45 2016
+++ src/distrib/sets/lists/comp/mi	Sat Oct 15 14:21:59 2016
@@ -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

Index: src/include/wchar.h
diff -u src/include/wchar.h:1.41 src/include/wchar.h:1.42
--- src/include/wchar.h:1.41	Mon Oct 13 00:47:03 2014
+++ src/include/wchar.h	Sat Oct 15 14:22:00 2016
@@ -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 @@ size_t	wcslen(const wchar_t *);
 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,

Index: src/lib/libc/string/Makefile.inc
diff -u src/lib/libc/string/Makefile.inc:1.81 src/lib/libc/string/Makefile.inc:1.82
--- src/lib/libc/string/Makefile.inc:1.81	Wed Oct 12 20:01:12 2016
+++ src/lib/libc/string/Makefile.inc	Sat Oct 15 14:22:00 2016
@@ -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 @@ SRCS+=	popcount32.c popcount64.c
 
 # 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 @@ MLINKS+=wmemchr.3 wmemcmp.3 wmemchr.3 wm
 	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

Index: src/lib/libc/string/wmemchr.3
diff -u src/lib/libc/string/wmemchr.3:1.16 src/lib/libc/string/wmemchr.3:1.17
--- src/lib/libc/string/wmemchr.3:1.16	Thu Jul 14 17:17:58 2016
+++ src/lib/libc/string/wmemchr.3	Sat Oct 15 14:22:00 2016
@@ -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 @@ function is strongly recommended to be u
 .Xr strspn 3 ,
 .Xr strstr 3
 .Sh STANDARDS
-These functions conform to
-.St -isoC-99
-and were first introduced in
-.St -isoC-amd1 ,
-with the exception of
-.Fn wcslcat
+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 wcslcpy ,
-which are extensions.
+.Fn wcsncpy
+were modified in
+.St -isoC-99
+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.

Added files:

Index: src/lib/libc/string/wcsnlen.c
diff -u /dev/null src/lib/libc/string/wcsnlen.c:1.1
--- /dev/null	Sat Oct 15 14:22:00 2016
+++ src/lib/libc/string/wcsnlen.c	Sat Oct 15 14:22:00 2016
@@ -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;
+}

Reply via email to