/* | |
* 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_track_caller(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); |