Commit 96e3e18eed3b48f6d4377dee0326a106e8a04569

Authored by Sam Ravnborg
Committed by Linus Torvalds
1 parent 9965a5d5a5

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

... ... @@ -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
  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);
... ... @@ -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);