From 3c7fbdc5dde79d5de7fd1a2679369029ffd2f7ee Mon Sep 17 00:00:00 2001 From: Alexey Dobriyan Date: Sat, 30 Sep 2006 23:27:20 -0700 Subject: [PATCH] --- yaml --- r: 37615 b: refs/heads/master c: 1a2f67b459bb7846d4a15924face63eb2683acc2 h: refs/heads/master i: 37613: 7814dee316a547d27390042e22c834e66e059838 37611: d09fa257fcf9f344804c46afaa459ae7c6a3b425 37607: fa78717cd3e418096d490fafbab248d89f89cb14 37599: 1114d4acbed279fbba50cc57647fe3860ccd942f v: v3 --- [refs] | 2 +- trunk/include/linux/string.h | 1 + trunk/mm/util.c | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 2adcc455b7bd..1c95dcdb437c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9442e691e4aec85eba43ac60a3e77c77fd2e73a4 +refs/heads/master: 1a2f67b459bb7846d4a15924face63eb2683acc2 diff --git a/trunk/include/linux/string.h b/trunk/include/linux/string.h index e4c755860316..4f69ef9e6eb5 100644 --- a/trunk/include/linux/string.h +++ b/trunk/include/linux/string.h @@ -99,6 +99,7 @@ extern void * memchr(const void *,int,__kernel_size_t); #endif extern char *kstrdup(const char *s, gfp_t gfp); +extern void *kmemdup(const void *src, size_t len, gfp_t gfp); #ifdef __cplusplus } diff --git a/trunk/mm/util.c b/trunk/mm/util.c index 7368479220b3..e14fa84ef39a 100644 --- a/trunk/mm/util.c +++ b/trunk/mm/util.c @@ -40,6 +40,24 @@ char *kstrdup(const char *s, gfp_t gfp) } EXPORT_SYMBOL(kstrdup); +/** + * kmemdup - duplicate region of memory + * + * @src: memory region to duplicate + * @len: memory region length + * @gfp: GFP mask to use + */ +void *kmemdup(const void *src, size_t len, gfp_t gfp) +{ + void *p; + + p = ____kmalloc(len, gfp); + if (p) + memcpy(p, src, len); + return p; +} +EXPORT_SYMBOL(kmemdup); + /* * strndup_user - duplicate an existing string from user space *