]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
tiny-printf: Correct return values
authorSimon Glass <sjg@chromium.org>
Fri, 20 Sep 2024 07:24:29 +0000 (09:24 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 3 Oct 2024 17:52:16 +0000 (11:52 -0600)
The sprintf() etc. functions are supposed to return the length of the
string written, but do not. Fix this by checking the amount of buffer
space used.

Signed-off-by: Simon Glass <sjg@chromium.org>
lib/tiny-printf.c

index 9a70c6095b317726d525e250fe11dd265770e2a2..64dee779c4a265fed9a9768e8ec3cb94f3601b02 100644 (file)
@@ -365,16 +365,15 @@ int sprintf(char *buf, const char *fmt, ...)
 {
        struct printf_info info;
        va_list va;
-       int ret;
 
        va_start(va, fmt);
        info.outstr = buf;
        info.putc = putc_outstr;
-       ret = _vprintf(&info, fmt, va);
+       _vprintf(&info, fmt, va);
        va_end(va);
        *info.outstr = '\0';
 
-       return ret;
+       return info.outstr - buf;
 }
 
 #if CONFIG_IS_ENABLED(LOG)
@@ -382,14 +381,13 @@ int sprintf(char *buf, const char *fmt, ...)
 int vsnprintf(char *buf, size_t size, const char *fmt, va_list va)
 {
        struct printf_info info;
-       int ret;
 
        info.outstr = buf;
        info.putc = putc_outstr;
-       ret = _vprintf(&info, fmt, va);
+       _vprintf(&info, fmt, va);
        *info.outstr = '\0';
 
-       return ret;
+       return info.outstr - buf;
 }
 #endif
 
@@ -398,16 +396,15 @@ int snprintf(char *buf, size_t size, const char *fmt, ...)
 {
        struct printf_info info;
        va_list va;
-       int ret;
 
        va_start(va, fmt);
        info.outstr = buf;
        info.putc = putc_outstr;
-       ret = _vprintf(&info, fmt, va);
+       _vprintf(&info, fmt, va);
        va_end(va);
        *info.outstr = '\0';
 
-       return ret;
+       return info.outstr - buf;
 }
 
 void print_grouped_ull(unsigned long long int_val, int digits)