| Sam Ravnborg | 96e3e18 | 2007-07-31 00:38:13 -0700 | [diff] [blame] | 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); |