Module Name:    src
Committed By:   christos
Date:           Tue Jan  9 01:53:55 UTC 2018

Modified Files:
        src/sys/kern: subr_kmem.c
        src/sys/sys: kmem.h

Log Message:
add strndup and an alias to strdup.


To generate a diff of this commit:
cvs rdiff -u -r1.65 -r1.66 src/sys/kern/subr_kmem.c
cvs rdiff -u -r1.10 -r1.11 src/sys/sys/kmem.h

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

Modified files:

Index: src/sys/kern/subr_kmem.c
diff -u src/sys/kern/subr_kmem.c:1.65 src/sys/kern/subr_kmem.c:1.66
--- src/sys/kern/subr_kmem.c:1.65	Thu Nov  9 18:20:12 2017
+++ src/sys/kern/subr_kmem.c	Mon Jan  8 20:53:55 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_kmem.c,v 1.65 2017/11/09 23:20:12 riastradh Exp $	*/
+/*	$NetBSD: subr_kmem.c,v 1.66 2018/01/09 01:53:55 christos Exp $	*/
 
 /*-
  * Copyright (c) 2009-2015 The NetBSD Foundation, Inc.
@@ -100,7 +100,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_kmem.c,v 1.65 2017/11/09 23:20:12 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_kmem.c,v 1.66 2018/01/09 01:53:55 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_kmem.h"
@@ -544,6 +544,23 @@ kmem_strdupsize(const char *str, size_t 
 	return ptr;
 }
 
+char *
+kmem_strndup(const char *str, size_t maxlen, km_flag_t flags)
+{
+	KASSERT(str != NULL);
+	KASSERT(maxlen != 0);
+
+	size_t len = strnlen(str, maxlen);
+	char *ptr = kmem_alloc(len + 1, flags);
+	if (ptr == NULL)
+		return NULL;
+
+	memcpy(ptr, str, len);
+	ptr[len] = '\0';
+
+	return ptr;
+}
+
 void
 kmem_strfree(char *str)
 {

Index: src/sys/sys/kmem.h
diff -u src/sys/sys/kmem.h:1.10 src/sys/sys/kmem.h:1.11
--- src/sys/sys/kmem.h:1.10	Tue Nov  7 13:35:57 2017
+++ src/sys/sys/kmem.h	Mon Jan  8 20:53:55 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: kmem.h,v 1.10 2017/11/07 18:35:57 christos Exp $	*/
+/*	$NetBSD: kmem.h,v 1.11 2018/01/09 01:53:55 christos Exp $	*/
 
 /*-
  * Copyright (c)2006 YAMAMOTO Takashi,
@@ -47,6 +47,8 @@ void	kmem_intr_free(void *, size_t);
 char *	kmem_asprintf(const char *, ...) __printflike(1, 2);
 
 char *	kmem_strdupsize(const char *, size_t *, km_flag_t);
+#define kmem_strdup(s, f)	kmem_strdupsize((s), NULL, (f))
+char *	kmem_strndup(const char *, size_t, km_flag_t);
 void	kmem_strfree(char *);
 
 /*

Reply via email to