| 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> | 
| Tejun Heo | 5a0e3ad | 2010-03-24 17:04:11 +0900 | [diff] [blame] | 9 | #include <linux/slab.h> | 
| Sam Ravnborg | 96e3e18 | 2007-07-31 00:38:13 -0700 | [diff] [blame] | 10 | #include <linux/types.h> | 
|  | 11 | #include <linux/string.h> | 
|  | 12 |  | 
|  | 13 | /* Simplified asprintf. */ | 
|  | 14 | char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap) | 
|  | 15 | { | 
|  | 16 | unsigned int len; | 
|  | 17 | char *p; | 
|  | 18 | va_list aq; | 
|  | 19 |  | 
|  | 20 | va_copy(aq, ap); | 
|  | 21 | len = vsnprintf(NULL, 0, fmt, aq); | 
|  | 22 | va_end(aq); | 
|  | 23 |  | 
|  | 24 | p = kmalloc(len+1, gfp); | 
|  | 25 | if (!p) | 
|  | 26 | return NULL; | 
|  | 27 |  | 
|  | 28 | vsnprintf(p, len+1, fmt, ap); | 
|  | 29 |  | 
|  | 30 | return p; | 
|  | 31 | } | 
|  | 32 | EXPORT_SYMBOL(kvasprintf); | 
|  | 33 |  | 
|  | 34 | char *kasprintf(gfp_t gfp, const char *fmt, ...) | 
|  | 35 | { | 
|  | 36 | va_list ap; | 
|  | 37 | char *p; | 
|  | 38 |  | 
|  | 39 | va_start(ap, fmt); | 
|  | 40 | p = kvasprintf(gfp, fmt, ap); | 
|  | 41 | va_end(ap); | 
|  | 42 |  | 
|  | 43 | return p; | 
|  | 44 | } | 
|  | 45 | EXPORT_SYMBOL(kasprintf); |