|  | /* | 
|  | *  linux/lib/kasprintf.c | 
|  | * | 
|  | *  Copyright (C) 1991, 1992  Linus Torvalds | 
|  | */ | 
|  |  | 
|  | #include <stdarg.h> | 
|  | #include <linux/export.h> | 
|  | #include <linux/slab.h> | 
|  | #include <linux/types.h> | 
|  | #include <linux/string.h> | 
|  |  | 
|  | /* Simplified asprintf. */ | 
|  | char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap) | 
|  | { | 
|  | unsigned int len; | 
|  | char *p; | 
|  | va_list aq; | 
|  |  | 
|  | va_copy(aq, ap); | 
|  | len = vsnprintf(NULL, 0, fmt, aq); | 
|  | va_end(aq); | 
|  |  | 
|  | p = kmalloc(len+1, gfp); | 
|  | if (!p) | 
|  | return NULL; | 
|  |  | 
|  | vsnprintf(p, len+1, fmt, ap); | 
|  |  | 
|  | return p; | 
|  | } | 
|  | EXPORT_SYMBOL(kvasprintf); | 
|  |  | 
|  | char *kasprintf(gfp_t gfp, const char *fmt, ...) | 
|  | { | 
|  | va_list ap; | 
|  | char *p; | 
|  |  | 
|  | va_start(ap, fmt); | 
|  | p = kvasprintf(gfp, fmt, ap); | 
|  | va_end(ap); | 
|  |  | 
|  | return p; | 
|  | } | 
|  | EXPORT_SYMBOL(kasprintf); |