Re: [PATCH 2.6] 1/7 create kstrdup library function
Pekka Enberg wrote: At some point in time, I wrote: kstrdup() is a special-case _memory allocator_ (not so much a string operation) so I think it should go into mm/slab.c where we currently have kcalloc(). On Tue, 01 Feb 2005 17:00:17 +, Paulo Marques <[EMAIL PROTECTED]> wrote: I was following Rusty Russell's approach. Also, I believe this is more intuitive because the standard libc strdup function is declared in string.h. However, I really don't have strong feelings either way, so if the majority agrees that this should be in mm/slab, its fine by me. Intuitive, perhaps, but I think it's wrong. I don't like it because it makes string operations depend on slab. Furthermore, kstrdup() is not a string operation. It is about memory allocation, really, just like kcalloc(). I agree with the "is like kcalloc" argument in the sense that it does an allocation + something else. But in this case the "something else" is in fact a string operation, so this just seem to be in the middle. One possible way to clean this up would be to extract the standard-like allocators (kmalloc, kcalloc, and kstrdup) from mm/slab.c and move them into a separate file. I don't like this approach. From a quick grep you get 4972 kmalloc's in .c files in the kernel tree and only 35 kstrdup's. Moving kstrdup around is still just 7 patches, kmalloc is a much bigger problem. Anyway, as I said before, if more people believe that moving kstrdup into mm/slab.c is the way to go, then its fine by me. The problem I was trying to solve was having several versions of strdup-like functions all around the kernel, and this problem gets fixed either way. Right now, the poll goes something like this: string.c: me, Rusty Russell slab.c: Pekka Enberg I think we need more votes :) -- Paulo Marques - www.grupopie.com All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke (1729 - 1797) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 2.6] 1/7 create kstrdup library function
At some point in time, I wrote: > > kstrdup() is a special-case _memory allocator_ (not so much a string > > operation) so I think it should go into mm/slab.c where we currently > > have kcalloc(). On Tue, 01 Feb 2005 17:00:17 +, Paulo Marques <[EMAIL PROTECTED]> wrote: > I was following Rusty Russell's approach. Also, I believe this is more > intuitive because the standard libc strdup function is declared in string.h. > > However, I really don't have strong feelings either way, so if the > majority agrees that this should be in mm/slab, its fine by me. Intuitive, perhaps, but I think it's wrong. I don't like it because it makes string operations depend on slab. Furthermore, kstrdup() is not a string operation. It is about memory allocation, really, just like kcalloc(). One possible way to clean this up would be to extract the standard-like allocators (kmalloc, kcalloc, and kstrdup) from mm/slab.c and move them into a separate file. Pekka - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 2.6] 1/7 create kstrdup library function
Pekka Enberg wrote: [...] kstrdup() is a special-case _memory allocator_ (not so much a string operation) so I think it should go into mm/slab.c where we currently have kcalloc(). I was following Rusty Russell's approach. Also, I believe this is more intuitive because the standard libc strdup function is declared in string.h. However, I really don't have strong feelings either way, so if the majority agrees that this should be in mm/slab, its fine by me. P.S. Please inline patches to your email as per Documentation/SubmittingPatches. I, for one, have trouble with attachments. Unfortunately my email client messes up inline patches and wordwraps / mangles white space, so I resort to attaching them until I have time to look into fixing that :( -- Paulo Marques - www.grupopie.com All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke (1729 - 1797) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 2.6] 1/7 create kstrdup library function
Hi, On Tue, 1 Feb 2005 03:28:21 +, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > > This patch creates the kstrdup library function so that it doesn't have to be > reimplemented (or even EXPORT'ed) by every user that needs it. > > Signed-off-by: Paulo Marques <[EMAIL PROTECTED]> > > diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/lib/string.c > linux-2.6.11-rc2-bk9/lib/string.c > --- vanilla-2.6.11-rc2-bk9/lib/string.c 2005-01-31 20:05:37.0 + > +++ linux-2.6.11-rc2-bk9/lib/string.c 2005-01-31 20:00:31.0 + > @@ -599,3 +599,23 @@ void *memchr(const void *s, int c, size_ > } > EXPORT_SYMBOL(memchr); > #endif > + > +/* > + * kstrdup - allocate space for and copy an existing string > + * > + * @s: the string to duplicate > + * @gfp: the GFP mask used in the kmalloc() call when allocating memory > + */ > +char *kstrdup(const char *s, int gfp) > +{ > + int len; > + char *buf; > + > + if (!s) return NULL; > + > + len = strlen(s) + 1; > + buf = kmalloc(len, gfp); > + if (buf) > + memcpy(buf, s, len); > + return buf; > +} > + > +EXPORT_SYMBOL(kstrdup); kstrdup() is a special-case _memory allocator_ (not so much a string operation) so I think it should go into mm/slab.c where we currently have kcalloc(). P.S. Please inline patches to your email as per Documentation/SubmittingPatches. I, for one, have trouble with attachments. Pekka - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 2.6] 1/7 create kstrdup library function
This patch creates the kstrdup library function so that it doesn't have to be reimplemented (or even EXPORT'ed) by every user that needs it. Signed-off-by: Paulo Marques <[EMAIL PROTECTED]> -- Paulo Marques - www.grupopie.com All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke (1729 - 1797) diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/include/linux/string.h linux-2.6.11-rc2-bk9/include/linux/string.h --- vanilla-2.6.11-rc2-bk9/include/linux/string.h 2004-12-24 21:34:31.0 + +++ linux-2.6.11-rc2-bk9/include/linux/string.h 2005-01-31 19:31:12.0 + @@ -88,6 +88,8 @@ extern int memcmp(const void *,const voi extern void * memchr(const void *,int,__kernel_size_t); #endif +extern char *kstrdup(const char *s, int gfp); + #ifdef __cplusplus } #endif diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/lib/string.c linux-2.6.11-rc2-bk9/lib/string.c --- vanilla-2.6.11-rc2-bk9/lib/string.c 2005-01-31 20:05:37.0 + +++ linux-2.6.11-rc2-bk9/lib/string.c 2005-01-31 20:00:31.0 + @@ -599,3 +599,23 @@ void *memchr(const void *s, int c, size_ } EXPORT_SYMBOL(memchr); #endif + +/* + * kstrdup - allocate space for and copy an existing string + * + * @s: the string to duplicate + * @gfp: the GFP mask used in the kmalloc() call when allocating memory + */ +char *kstrdup(const char *s, int gfp) +{ + int len; + char *buf; + + if (!s) return NULL; + + len = strlen(s) + 1; + buf = kmalloc(len, gfp); + if (buf) + memcpy(buf, s, len); + return buf; +} + +EXPORT_SYMBOL(kstrdup);