From 987509a5486baf1cc675f9cfef74cc319fc85926 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Mon, 15 Jul 2013 11:58:16 +0800 Subject: [PATCH] Usermode/libc - Fixed printf itoa putting precision padding before sign --- Usermode/Libraries/libc.so_src/printf.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Usermode/Libraries/libc.so_src/printf.c b/Usermode/Libraries/libc.so_src/printf.c index 4d1a3d46..2568ae82 100644 --- a/Usermode/Libraries/libc.so_src/printf.c +++ b/Usermode/Libraries/libc.so_src/printf.c @@ -423,6 +423,12 @@ size_t _printf_itoa(printf_puts_t puts_cb, void *puts_h, uint64_t num, } tmpBuf[--pos] = map[ num % base ]; // Most significant digit of {number} + // TODO: This assertion may not be valid + assert(Precision <= (int)sizeof(tmpBuf)); + Precision -= sizeof(tmpBuf)-pos + (sign_is_neg || SignChar != '\0'); + while( Precision-- > 0 ) + tmpBuf[--pos] = '0'; + // Sign if(sign_is_neg) tmpBuf[--pos] = '-'; // Negative sign character @@ -434,16 +440,11 @@ size_t _printf_itoa(printf_puts_t puts_cb, void *puts_h, uint64_t num, // length of number, minus the sign character size_t len = sizeof(tmpBuf)-pos; PadLength -= len; - Precision -= len; if( !bPadRight ) { while(PadLength-- > 0) puts_cb(puts_h, &PadChar, 1), ret ++; } - - // TODO: Will {Precision} ever be > size - while( Precision-- > 0 ) - puts_cb(puts_h, "0", 1), ret++; puts_cb(puts_h, tmpBuf+pos, len); ret += len; -- 2.20.1