aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kasprintf.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kasprintf.c')
-rw-r--r--lib/kasprintf.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/kasprintf.c b/lib/kasprintf.c
index 32f12150fc4f..f194e6e593e1 100644
--- a/lib/kasprintf.c
+++ b/lib/kasprintf.c
@@ -31,6 +31,22 @@ char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap)
31} 31}
32EXPORT_SYMBOL(kvasprintf); 32EXPORT_SYMBOL(kvasprintf);
33 33
34/*
35 * If fmt contains no % (or is exactly %s), use kstrdup_const. If fmt
36 * (or the sole vararg) points to rodata, we will then save a memory
37 * allocation and string copy. In any case, the return value should be
38 * freed using kfree_const().
39 */
40const char *kvasprintf_const(gfp_t gfp, const char *fmt, va_list ap)
41{
42 if (!strchr(fmt, '%'))
43 return kstrdup_const(fmt, gfp);
44 if (!strcmp(fmt, "%s"))
45 return kstrdup_const(va_arg(ap, const char*), gfp);
46 return kvasprintf(gfp, fmt, ap);
47}
48EXPORT_SYMBOL(kvasprintf_const);
49
34char *kasprintf(gfp_t gfp, const char *fmt, ...) 50char *kasprintf(gfp_t gfp, const char *fmt, ...)
35{ 51{
36 va_list ap; 52 va_list ap;