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; \
} \
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;
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;