X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Flibc.so_src%2Fprintf.c;h=905f790b14907abe2e97d7ef5a0542d0a5e3bfb1;hb=d7dcea0e5a8df0f479e99f168a10b9a9535c7ad6;hp=4d1a3d46183f898d6e99eee85c54e595fa8d99d0;hpb=5228a990933853fc5f5df7083ff458cdaddac371;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/libc.so_src/printf.c b/Usermode/Libraries/libc.so_src/printf.c index 4d1a3d46..905f790b 100644 --- a/Usermode/Libraries/libc.so_src/printf.c +++ b/Usermode/Libraries/libc.so_src/printf.c @@ -44,7 +44,6 @@ size_t _printf_ftoa(printf_puts_t puts_cb, void *puts_h, long double num, size_t */ EXPORT int _vcprintf_int(printf_puts_t puts_cb, void *puts_h, const char *format, va_list args) { - char tmp[65]; int c, minSize, precision, len; size_t pos = 0; char *p; @@ -60,8 +59,6 @@ EXPORT int _vcprintf_int(printf_puts_t puts_cb, void *puts_h, const char *format pos ++; \ } while(0) - tmp[32] = '\0'; - while((c = *format++) != 0) { // Non-control character @@ -165,9 +162,6 @@ EXPORT int _vcprintf_int(printf_puts_t puts_cb, void *puts_h, const char *format } } - // Just help things along later - p = tmp; - // Get Type switch( c ) { @@ -423,6 +417,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 +434,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;