diff options
Diffstat (limited to 'lib/kasprintf.c')
-rw-r--r-- | lib/kasprintf.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/kasprintf.c b/lib/kasprintf.c index f194e6e593e1..7f6c506a4942 100644 --- a/lib/kasprintf.c +++ b/lib/kasprintf.c | |||
@@ -13,19 +13,21 @@ | |||
13 | /* Simplified asprintf. */ | 13 | /* Simplified asprintf. */ |
14 | char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap) | 14 | char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap) |
15 | { | 15 | { |
16 | unsigned int len; | 16 | unsigned int first, second; |
17 | char *p; | 17 | char *p; |
18 | va_list aq; | 18 | va_list aq; |
19 | 19 | ||
20 | va_copy(aq, ap); | 20 | va_copy(aq, ap); |
21 | len = vsnprintf(NULL, 0, fmt, aq); | 21 | first = vsnprintf(NULL, 0, fmt, aq); |
22 | va_end(aq); | 22 | va_end(aq); |
23 | 23 | ||
24 | p = kmalloc_track_caller(len+1, gfp); | 24 | p = kmalloc_track_caller(first+1, gfp); |
25 | if (!p) | 25 | if (!p) |
26 | return NULL; | 26 | return NULL; |
27 | 27 | ||
28 | vsnprintf(p, len+1, fmt, ap); | 28 | second = vsnprintf(p, first+1, fmt, ap); |
29 | WARN(first != second, "different return values (%u and %u) from vsnprintf(\"%s\", ...)", | ||
30 | first, second, fmt); | ||
29 | 31 | ||
30 | return p; | 32 | return p; |
31 | } | 33 | } |