summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Dempsky <matthew@cvs.openbsd.org>2012-04-26 01:22:32 +0000
committerMatthew Dempsky <matthew@cvs.openbsd.org>2012-04-26 01:22:32 +0000
commit45051c025d569e3a072aaa143e731910bb812620 (patch)
treea1fb674c615406bc6fb07f4ed66f8148042eedc7
parent3f552609ac54f95f970f8906be1228e343eb41b4 (diff)
Add strnlen() to libkern.
ok deraadt
-rw-r--r--lib/libc/Makefile.inc6
-rw-r--r--lib/libc/string/strnlen.c6
-rw-r--r--share/man/man9/Makefile3
-rw-r--r--share/man/man9/kern.97
-rw-r--r--sys/conf/files3
-rw-r--r--sys/lib/libkern/libkern.h3
-rw-r--r--sys/lib/libkern/strnlen.c36
7 files changed, 55 insertions, 9 deletions
diff --git a/lib/libc/Makefile.inc b/lib/libc/Makefile.inc
index 69d1c5c330c..98d9599c58e 100644
--- a/lib/libc/Makefile.inc
+++ b/lib/libc/Makefile.inc
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.inc,v 1.16 2010/09/24 13:33:00 matthew Exp $
+# $OpenBSD: Makefile.inc,v 1.17 2012/04/26 01:22:31 matthew Exp $
#
# This file contains make rules used to build libc
#
@@ -61,8 +61,8 @@ CFLAGS+=-DNLS
LIBKERN= ${LIBCSRCDIR}/../../sys/lib/libkern
-KSRCS= bcmp.c bzero.c ffs.c strcat.c strcmp.c strcpy.c strlen.c strncmp.c \
- strncpy.c htonl.c htons.c ntohl.c ntohs.c timingsafe_bcmp.c
+KSRCS= bcmp.c bzero.c ffs.c strcat.c strcmp.c strcpy.c strlen.c strncmp.c \
+ strncpy.c strnlen.c htonl.c htons.c ntohl.c ntohs.c timingsafe_bcmp.c
.if (${MACHINE_CPU} != "alpha")
KSRCS+= adddi3.c anddi3.c ashldi3.c ashrdi3.c cmpdi2.c divdi3.c iordi3.c \
lshldi3.c lshrdi3.c moddi3.c muldi3.c negdi2.c notdi2.c qdivrem.c \
diff --git a/lib/libc/string/strnlen.c b/lib/libc/string/strnlen.c
index 2dc7b4fb326..a5e13ae04e2 100644
--- a/lib/libc/string/strnlen.c
+++ b/lib/libc/string/strnlen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: strnlen.c,v 1.3 2010/06/02 12:58:12 millert Exp $ */
+/* $OpenBSD: strnlen.c,v 1.4 2012/04/26 01:22:31 matthew Exp $ */
/*
* Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -18,7 +18,11 @@
#include <sys/types.h>
+#if !defined(_KERNEL) && !defined(_STANDALONE)
#include <string.h>
+#else
+#include <lib/libkern/libkern.h>
+#endif
size_t
strnlen(const char *str, size_t maxlen)
diff --git a/share/man/man9/Makefile b/share/man/man9/Makefile
index 2721d564a58..d291201e9e6 100644
--- a/share/man/man9/Makefile
+++ b/share/man/man9/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.169 2011/12/08 20:58:49 blambert Exp $
+# $OpenBSD: Makefile,v 1.170 2012/04/26 01:22:31 matthew Exp $
# $NetBSD: Makefile,v 1.4 1996/01/09 03:23:01 thorpej Exp $
# Makefile for section 9 (kernel function and variable) manual pages.
@@ -184,6 +184,7 @@ MLINKS+=kern.9 imax.9 kern.9 imin.9 kern.9 lmax.9 kern.9 lmin.9 \
kern.9 memchr.9 kern.9 memcmp.9 kern.9 ffs.9 \
kern.9 strlen.9 kern.9 strncpy.9 kern.9 strlcpy.9 kern.9 strlcat.9 \
kern.9 strcmp.9 kern.9 strncmp.9 kern.9 strncasecmp.9 \
+ kern.9 strnlen.9 \
kern.9 timingsafe_bcmp.9 kern.9 getsn.9
MLINKS+=km_alloc.9 km_free.9
MLINKS+=knote.9 KNOTE.9
diff --git a/share/man/man9/kern.9 b/share/man/man9/kern.9
index 5edc5a8101d..46e786464ba 100644
--- a/share/man/man9/kern.9
+++ b/share/man/man9/kern.9
@@ -1,4 +1,4 @@
-.\" $OpenBSD: kern.9,v 1.14 2011/01/09 02:26:31 deraadt Exp $
+.\" $OpenBSD: kern.9,v 1.15 2012/04/26 01:22:31 matthew Exp $
.\"
.\" Copyright (c) 2002, 2003 CubeSoft Communications, Inc.
.\" <http://www.csoft.org>
@@ -24,7 +24,7 @@
.\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd $Mdocdate: January 9 2011 $
+.Dd $Mdocdate: April 26 2012 $
.Dt KERN 9
.Os
.Sh NAME
@@ -164,6 +164,8 @@ and
.Ft char *
.Fn strncpy "char *dst" "const char *src" "size_t len"
.Ft size_t
+.Fn strnlen "const char *s" "size_t maxlen"
+.Ft size_t
.Fn strlcpy "char *dst" "const char *src" "size_t size"
.Ft size_t
.Fn strlcat "char *dst" "const char *src" "size_t size"
@@ -178,6 +180,7 @@ and
Those functions have the same semantics as their libc counterparts,
.Xr strlen 3 ,
.Xr strncpy 3 ,
+.Xr strnlen 3 ,
.Xr strlcpy 3 ,
.Xr strlcat 3 ,
.Xr strcmp 3 ,
diff --git a/sys/conf/files b/sys/conf/files
index c9f64518be5..3878a6926b3 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -1,4 +1,4 @@
-# $OpenBSD: files,v 1.536 2012/04/06 15:10:40 jsing Exp $
+# $OpenBSD: files,v 1.537 2012/04/26 01:22:31 matthew Exp $
# $NetBSD: files,v 1.87 1996/05/19 17:17:50 jonathan Exp $
# @(#)files.newconf 7.5 (Berkeley) 5/10/93
@@ -1034,6 +1034,7 @@ file lib/libkern/arch/${MACHINE_ARCH}/strlcpy.S | lib/libkern/strlcpy.c
file lib/libkern/arch/${MACHINE_ARCH}/strlen.S | lib/libkern/strlen.c
file lib/libkern/arch/${MACHINE_ARCH}/strncmp.S | lib/libkern/strncmp.c
file lib/libkern/arch/${MACHINE_ARCH}/strncpy.S | lib/libkern/strncpy.c
+file lib/libkern/arch/${MACHINE_ARCH}/strnlen.S | lib/libkern/strnlen.c
file lib/libkern/arch/${MACHINE_ARCH}/scanc.S | lib/libkern/scanc.c
file lib/libkern/arch/${MACHINE_ARCH}/skpc.S | lib/libkern/skpc.c
file lib/libkern/arch/${MACHINE_ARCH}/htonl.S | lib/libkern/htonl.c
diff --git a/sys/lib/libkern/libkern.h b/sys/lib/libkern/libkern.h
index c9545cd33ea..a2e6efccd3f 100644
--- a/sys/lib/libkern/libkern.h
+++ b/sys/lib/libkern/libkern.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: libkern.h,v 1.28 2011/01/10 23:23:56 tedu Exp $ */
+/* $OpenBSD: libkern.h,v 1.29 2012/04/26 01:22:31 matthew Exp $ */
/* $NetBSD: libkern.h,v 1.7 1996/03/14 18:52:08 christos Exp $ */
/*-
@@ -154,6 +154,7 @@ int skpc(int, size_t, u_char *);
size_t strlen(const char *);
char *strncpy(char *, const char *, size_t)
__attribute__ ((__bounded__(__string__,1,3)));
+size_t strnlen(const char *, size_t);
size_t strlcpy(char *, const char *, size_t)
__attribute__ ((__bounded__(__string__,1,3)));
size_t strlcat(char *, const char *, size_t)
diff --git a/sys/lib/libkern/strnlen.c b/sys/lib/libkern/strnlen.c
new file mode 100644
index 00000000000..ac439d066a2
--- /dev/null
+++ b/sys/lib/libkern/strnlen.c
@@ -0,0 +1,36 @@
+/* $OpenBSD: strnlen.c,v 1.1 2012/04/26 01:22:31 matthew Exp $ */
+
+/*
+ * Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <sys/types.h>
+
+#if !defined(_KERNEL) && !defined(_STANDALONE)
+#include <string.h>
+#else
+#include <lib/libkern/libkern.h>
+#endif
+
+size_t
+strnlen(const char *str, size_t maxlen)
+{
+ const char *cp;
+
+ for (cp = str; maxlen != 0 && *cp != '\0'; cp++, maxlen--)
+ ;
+
+ return (size_t)(cp - str);
+}