X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2F_PDCLIB%2Fprint.c;h=b58fdd91cb8c7376a082dfde3fd426c5d164c398;hb=6db6becaed6f78506d12c5b5e64be44178eadd4a;hp=974c3daa03a23dfc57cb61eba08d6ff45a6f5c6c;hpb=d2e2706d6ea0ee8baef05034e39809283b1e645e;p=pdclib diff --git a/functions/_PDCLIB/print.c b/functions/_PDCLIB/print.c index 974c3da..b58fdd9 100644 --- a/functions/_PDCLIB/print.c +++ b/functions/_PDCLIB/print.c @@ -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; @@ -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;