1 /* 2 * linux/lib/kasprintf.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 */ 6 7 #include <stdarg.h> 8 #include <linux/export.h> 9 #include <linux/slab.h> 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_track_caller(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); 46