Usermode/libc - Fixing errors from clang, disabled heap for native build
[tpg/acess2.git] / Usermode / Libraries / libc.so_src / printf.c
index 4d1a3d4..905f790 100644 (file)
@@ -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;

UCC git Repository :: git.ucc.asn.au