Implement a kernel strdup() function (API synch with FreeBSD).
authorMatthew Dillon <dillon@dragonflybsd.org>
Thu, 29 Jul 2004 08:50:09 +0000 (08:50 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Thu, 29 Jul 2004 08:50:09 +0000 (08:50 +0000)
sys/kern/kern_slaballoc.c
sys/sys/malloc.h

index 08ed145..ff9d31b 100644 (file)
@@ -33,7 +33,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * 
- * $DragonFly: src/sys/kern/kern_slaballoc.c,v 1.23 2004/07/16 05:51:10 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_slaballoc.c,v 1.24 2004/07/29 08:50:09 dillon Exp $
  *
  * This module implements a slab allocator drop-in replacement for the
  * kernel malloc().
@@ -656,6 +656,20 @@ realloc(void *ptr, unsigned long size, struct malloc_type *type, int flags)
     return(nptr);
 }
 
+char *
+strdup(const char *str, struct malloc_type *type)
+{
+    int zlen;  /* length inclusive of terminating NUL */
+    char *nstr;
+
+    if (str == NULL)
+       return(NULL);
+    zlen = strlen(str) + 1;
+    nstr = malloc(zlen, type, M_WAITOK);
+    bcopy(str, nstr, zlen);
+    return(nstr);
+}
+
 #ifdef SMP
 /*
  * free()      (SLAB ALLOCATOR)
index 13234be..abf9d90 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)malloc.h    8.5 (Berkeley) 5/3/95
  * $FreeBSD: src/sys/sys/malloc.h,v 1.48.2.2 2002/03/16 02:19:16 archie Exp $
- * $DragonFly: src/sys/sys/malloc.h,v 1.18 2004/03/12 22:05:53 joerg Exp $
+ * $DragonFly: src/sys/sys/malloc.h,v 1.19 2004/07/29 08:50:07 dillon Exp $
  */
 
 #ifndef _SYS_MALLOC_H_
@@ -215,6 +215,7 @@ void        *realloc (void *addr, unsigned long size,
                      struct malloc_type *type, int flags);
 void   *reallocf (void *addr, unsigned long size,
                      struct malloc_type *type, int flags);
+char   *strdup (const char *, struct malloc_type *);
 
 #endif /* _KERNEL */