Commit 96e3e18eed3b48f6d4377dee0326a106e8a04569
Committed by
Linus Torvalds
1 parent
9965a5d5a5
Exists in
master
and in
4 other branches
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>
Showing 3 changed files with 45 additions and 36 deletions Side-by-side Diff
lib/Makefile
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | # Makefile for some libs needed in the kernel. |
3 | 3 | # |
4 | 4 | |
5 | -lib-y := ctype.o string.o vsprintf.o cmdline.o \ | |
5 | +lib-y := ctype.o string.o vsprintf.o kasprintf.o cmdline.o \ | |
6 | 6 | rbtree.o radix-tree.o dump_stack.o \ |
7 | 7 | idr.o int_sqrt.o bitmap.o extable.o prio_tree.o \ |
8 | 8 | sha1.o irq_regs.o reciprocal_div.o argv_split.o |
lib/kasprintf.c
1 | +/* | |
2 | + * linux/lib/kasprintf.c | |
3 | + * | |
4 | + * Copyright (C) 1991, 1992 Linus Torvalds | |
5 | + */ | |
6 | + | |
7 | +#include <stdarg.h> | |
8 | +#include <linux/module.h> | |
9 | +#include <linux/types.h> | |
10 | +#include <linux/string.h> | |
11 | + | |
12 | +/* Simplified asprintf. */ | |
13 | +char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap) | |
14 | +{ | |
15 | + unsigned int len; | |
16 | + char *p; | |
17 | + va_list aq; | |
18 | + | |
19 | + va_copy(aq, ap); | |
20 | + len = vsnprintf(NULL, 0, fmt, aq); | |
21 | + va_end(aq); | |
22 | + | |
23 | + p = kmalloc(len+1, gfp); | |
24 | + if (!p) | |
25 | + return NULL; | |
26 | + | |
27 | + vsnprintf(p, len+1, fmt, ap); | |
28 | + | |
29 | + return p; | |
30 | +} | |
31 | +EXPORT_SYMBOL(kvasprintf); | |
32 | + | |
33 | +char *kasprintf(gfp_t gfp, const char *fmt, ...) | |
34 | +{ | |
35 | + va_list ap; | |
36 | + char *p; | |
37 | + | |
38 | + va_start(ap, fmt); | |
39 | + p = kvasprintf(gfp, fmt, ap); | |
40 | + va_end(ap); | |
41 | + | |
42 | + return p; | |
43 | +} | |
44 | +EXPORT_SYMBOL(kasprintf); |
lib/vsprintf.c
... | ... | @@ -978,39 +978,4 @@ |
978 | 978 | } |
979 | 979 | |
980 | 980 | EXPORT_SYMBOL(sscanf); |
981 | - | |
982 | - | |
983 | -/* Simplified asprintf. */ | |
984 | -char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap) | |
985 | -{ | |
986 | - unsigned int len; | |
987 | - char *p; | |
988 | - va_list aq; | |
989 | - | |
990 | - va_copy(aq, ap); | |
991 | - len = vsnprintf(NULL, 0, fmt, aq); | |
992 | - va_end(aq); | |
993 | - | |
994 | - p = kmalloc(len+1, gfp); | |
995 | - if (!p) | |
996 | - return NULL; | |
997 | - | |
998 | - vsnprintf(p, len+1, fmt, ap); | |
999 | - | |
1000 | - return p; | |
1001 | -} | |
1002 | -EXPORT_SYMBOL(kvasprintf); | |
1003 | - | |
1004 | -char *kasprintf(gfp_t gfp, const char *fmt, ...) | |
1005 | -{ | |
1006 | - va_list ap; | |
1007 | - char *p; | |
1008 | - | |
1009 | - va_start(ap, fmt); | |
1010 | - p = kvasprintf(gfp, fmt, ap); | |
1011 | - va_end(ap); | |
1012 | - | |
1013 | - return p; | |
1014 | -} | |
1015 | -EXPORT_SYMBOL(kasprintf); |