vsnprintf patch
Subsystems (2)
When using the snprintf function from the kernel the length returned is not the length written:
len = snprintf(test,1,"BLA 1");
len is 5 although test is "B"
the patch below fixes the symptom, but I am not sure if this is the real solution for this problem.
lib/vsprintf.c 2003-08-13 13:41:15.000000000 +0200 renamed from lib/vsprintf.c 2003-08-09 06:40:52.000000000 +0200 +4 -1
@@ -455,7 +455,10 @@ /* the trailing null byte doesn't count towards the total * ++str; */ - return str-buf; + if (str-buf > size) + return size; + else + return str-buf; } /**
Adrian
Quoted 10 lines · Adrian Reber
When using the snprintf function from the kernel the length returned is not the length written:
len =
snprintf(test,1,"BLA 1");len is 5 although test is "B"
the patch below fixes the symptom, but I am not sure if this is the real solution for this problem.
For what problem? In the example above, 5 is correct return value.
7.19.6.5 The snprintf function
Synopsis
#include <stdio.h>
int snprintf(char * restrict s, size_t n, const char * restrict format, ...);
Description
The snprintf function is equivalent to fprintf, except that the output is written into an array (specified by argument s) rather than to a stream. If n is zero, nothing is written, and s may be a null pointer. Otherwise, output characters beyond the n-1st are discarded rather than being written to the array, and a null character is written at the end of the characters actually written into the array. If copying takes place between objects that overlap, the behavior is undefined.
Returns
The snprintf function returns the number of characters that would have been written had n been sufficiently large, not counting the terminating null character, or a negative value if an encoding error occurred. Thus, the null-terminated output has been completely written if and only if the returned value is nonnegative and less than n.
Quoted 2 lines · Adrian Reber
When using the snprintf function from the kernel the length returned is not the length written:
This is how the function is defined:
http://www.opengroup.org/onlinepubs/007908799/xsh/fprintf.html
Bernd
Signature · 3 lines
Firmix Software GmbH http://www.firmix.at/
mobil: +43 664 4416156 fax: +43 1 7890849-55
Embedded Linux Development and ServicesAdrian Reber <[email protected]> writes:
|> When using the snprintf function from the kernel the length returned is |> not the length written: |> |> len = snprintf(test,1,"BLA 1"); |> |> len is 5 although test is "B"
Exactly how it should be.
|> the patch below fixes the symptom, but I am not sure if this is the real |> solution for this problem.
There is no problem here.
Andreas.
Signature · 4 lines
Andreas Schwab, SuSE Labs, [email protected] SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."