Add a kvasprintf() function to compliment kasprintf(). [ No in-tree users yet, but I have some coming up. ]
Signed-off-by: Jeremy Fitzhardinge <[EMAIL PROTECTED]> Cc: Andrew Morton <[EMAIL PROTECTED]> Cc: Keir Fraser <[EMAIL PROTECTED]> --- include/linux/kernel.h | 1 + lib/vsprintf.c | 28 ++++++++++++++++++++-------- 2 files changed, 21 insertions(+), 8 deletions(-) =================================================================== --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -121,6 +121,7 @@ extern int vscnprintf(char *buf, size_t __attribute__ ((format (printf, 3, 0))); extern char *kasprintf(gfp_t gfp, const char *fmt, ...) __attribute__ ((format (printf, 2, 3))); +extern char *kvasprintf(gfp_t gfp, const char *fmt, va_list args); extern int sscanf(const char *, const char *, ...) __attribute__ ((format (scanf, 2, 3))); =================================================================== --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -851,22 +851,34 @@ EXPORT_SYMBOL(sscanf); /* Simplified asprintf. */ -char *kasprintf(gfp_t gfp, const char *fmt, ...) -{ - va_list ap; +char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap) +{ unsigned int len; char *p; - - va_start(ap, fmt); - len = vsnprintf(NULL, 0, fmt, ap); - va_end(ap); + 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; +} + +char *kasprintf(gfp_t gfp, const char *fmt, ...) +{ + va_list ap; + char *p; + va_start(ap, fmt); - vsnprintf(p, len+1, fmt, ap); + p = kvasprintf(gfp, fmt, ap); va_end(ap); + return p; } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/