diff options
author | Sam Ravnborg <sam@ravnborg.org> | 2007-07-31 00:38:13 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-31 15:39:39 -0700 |
commit | 96e3e18eed3b48f6d4377dee0326a106e8a04569 (patch) | |
tree | d6e4d66ec415ffc934930f32ed62cebe403e9a29 | |
parent | 9965a5d5a5aab575f995ba58dc80285aa0f6ecbf (diff) | |
download | linux-96e3e18eed3b48f6d4377dee0326a106e8a04569.tar.gz linux-96e3e18eed3b48f6d4377dee0326a106e8a04569.tar.bz2 linux-96e3e18eed3b48f6d4377dee0326a106e8a04569.zip |
lib: move kasprintf to a separate file
kasprintf pulls in kmalloc which proved to be fatal for at least
bootimage target on alpha.
Move it to a separate file so only users of kasprintf are exposed
to the dependency on kmalloc.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Meelis Roos <mroos@linux.ee>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Jay Estabrook <jay.estabrook@hp.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | lib/Makefile | 2 | ||||
-rw-r--r-- | lib/kasprintf.c | 44 | ||||
-rw-r--r-- | lib/vsprintf.c | 35 |
3 files changed, 45 insertions, 36 deletions
diff --git a/lib/Makefile b/lib/Makefile index 614966387402..d9e5f1cd0bfb 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -2,7 +2,7 @@ # Makefile for some libs needed in the kernel. # -lib-y := ctype.o string.o vsprintf.o cmdline.o \ +lib-y := ctype.o string.o vsprintf.o kasprintf.o cmdline.o \ rbtree.o radix-tree.o dump_stack.o \ idr.o int_sqrt.o bitmap.o extable.o prio_tree.o \ sha1.o irq_regs.o reciprocal_div.o argv_split.o diff --git a/lib/kasprintf.c b/lib/kasprintf.c new file mode 100644 index 000000000000..c5ff1fd10030 --- /dev/null +++ b/lib/kasprintf.c @@ -0,0 +1,44 @@ +/* + * linux/lib/kasprintf.c + * + * Copyright (C) 1991, 1992 Linus Torvalds + */ + +#include <stdarg.h> +#include <linux/module.h> +#include <linux/types.h> +#include <linux/string.h> + +/* Simplified asprintf. */ +char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap) +{ + unsigned int len; + char *p; + va_list aq; + + va_copy(aq, ap); + len = vsnprintf(NULL, 0, fmt, aq); + va_end(aq); + + p = kmalloc(len+1, gfp); + if (!p) + return NULL; + + vsnprintf(p, len+1, fmt, ap); + + return p; +} +EXPORT_SYMBOL(kvasprintf); + +char *kasprintf(gfp_t gfp, const char *fmt, ...) +{ + va_list ap; + char *p; + + va_start(ap, fmt); + p = kvasprintf(gfp, fmt, ap); + va_end(ap); + + return p; +} +EXPORT_SYMBOL(kasprintf); diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 6b6734df6d2d..7b481cea54ae 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -978,38 +978,3 @@ int sscanf(const char * buf, const char * fmt, ...) } EXPORT_SYMBOL(sscanf); - - -/* Simplified asprintf. */ -char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap) -{ - unsigned int len; - char *p; - va_list aq; - - va_copy(aq, ap); - len = vsnprintf(NULL, 0, fmt, aq); - va_end(aq); - - p = kmalloc(len+1, gfp); - if (!p) - return NULL; - - vsnprintf(p, len+1, fmt, ap); - - return p; -} -EXPORT_SYMBOL(kvasprintf); - -char *kasprintf(gfp_t gfp, const char *fmt, ...) -{ - va_list ap; - char *p; - - va_start(ap, fmt); - p = kvasprintf(gfp, fmt, ap); - va_end(ap); - - return p; -} -EXPORT_SYMBOL(kasprintf); |