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. */ 14char *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} 32EXPORT_SYMBOL(kvasprintf); 33 34char *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} 45EXPORT_SYMBOL(kasprintf); 46