diff options
author | Matthew Dempsky <matthew@cvs.openbsd.org> | 2012-04-26 01:22:32 +0000 |
---|---|---|
committer | Matthew Dempsky <matthew@cvs.openbsd.org> | 2012-04-26 01:22:32 +0000 |
commit | 45051c025d569e3a072aaa143e731910bb812620 (patch) | |
tree | a1fb674c615406bc6fb07f4ed66f8148042eedc7 | |
parent | 3f552609ac54f95f970f8906be1228e343eb41b4 (diff) |
Add strnlen() to libkern.
ok deraadt
-rw-r--r-- | lib/libc/Makefile.inc | 6 | ||||
-rw-r--r-- | lib/libc/string/strnlen.c | 6 | ||||
-rw-r--r-- | share/man/man9/Makefile | 3 | ||||
-rw-r--r-- | share/man/man9/kern.9 | 7 | ||||
-rw-r--r-- | sys/conf/files | 3 | ||||
-rw-r--r-- | sys/lib/libkern/libkern.h | 3 | ||||
-rw-r--r-- | sys/lib/libkern/strnlen.c | 36 |
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); +} |