]> pd.if.org Git - pdclib/blobdiff - functions/_PDCLIB/print.c
Fix warnings
[pdclib] / functions / _PDCLIB / print.c
index 974c3daa03a23dfc57cb61eba08d6ff45a6f5c6c..95fbe9c752e62acd964b2f5c981e3c6e2d7d56da 100644 (file)
@@ -53,7 +53,7 @@ do { \
     int character = x; \
     if ( status->i < status->n ) { \
         if ( status->stream != NULL ) \
-            putc( character, status->stream ); \
+            putc_unlocked( character, status->stream ); \
         else \
             status->s[status->i] = character; \
     } \
@@ -97,14 +97,14 @@ static void int2base( uintmax_t value, struct _PDCLIB_status_t * status )
     size_t bufLen = (status->width > maxIntLen ? status->width : maxIntLen) + 2;
     char outbuf[bufLen];
     char * outend = outbuf + bufLen;
-    unsigned written = 0;
+    int written = 0;
 
     // Build up our output string - backwards
     {
         const char * digits = (status->flags & E_lower) ? 
                                 _PDCLIB_digits : _PDCLIB_Xdigits;
         uintmax_t remaining = value;
-        do {
+        if(status->prec != 0 || remaining != 0) do {
             uintmax_t digit = remaining % status->base;
             remaining /= status->base;
 
@@ -120,7 +120,7 @@ static void int2base( uintmax_t value, struct _PDCLIB_status_t * status )
     unsigned padding = 0;
     if ( ( ! ( status->flags & E_minus ) ) && ( status->flags & E_zero ) )    
     {
-        while( written < status->width ) 
+        while( written < (int) status->width ) 
         {
             outend[-++written] = '0';
             padding++;
@@ -156,7 +156,7 @@ static void int2base( uintmax_t value, struct _PDCLIB_status_t * status )
     // Space padding to field width
     if ( ! ( status->flags & ( E_minus | E_zero ) ) )
     {
-        while( written < status->width ) outend[-++written] = ' ';
+        while( written < (int) status->width ) outend[-++written] = ' ';
     }
 
     // Write output
@@ -312,17 +312,11 @@ const char * _PDCLIB_print( const char * spec, struct _PDCLIB_status_t * status
                EOF (negative), there is no need for testing for negative here.
             */
             status->prec = va_arg( status->arg, int );
+            ++spec;
         }
         else
         {
-            char * endptr;
-            status->prec = (int)strtol( spec, &endptr, 10 );
-            if ( spec == endptr )
-            {
-                /* Decimal point but no number - bad conversion specifier. */
-                return orig_spec;
-            }
-            spec = endptr;
+            status->prec = (int)strtol( spec, (char**) &spec, 10 );
         }
         /* Having a precision cancels out any zero flag. */
         status->flags &= ~E_zero;