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