X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/e3426f7b4c12323e5e3ffa3e6b927f714fc369a5..04024c2cafab56ea76a9a2b35097584d6db98c06:/lib/printf.c diff --git a/lib/printf.c b/lib/printf.c index 32f18fe..15478ce 100644 --- a/lib/printf.c +++ b/lib/printf.c @@ -145,6 +145,7 @@ static int check_integer(const struct conversion *c) { case l_intmax_t: case l_size_t: case l_longdouble: + case l_ptrdiff_t: return 0; default: return -1; @@ -283,11 +284,11 @@ static int output_integer(struct state *s, struct conversion *c) { * '-' beats '0'. */ if(c->flags & f_left) { - if(pad && do_pad(s, ' ', pad) < 0) return -1; if(sign && do_write(s, &sign, 1)) return -1; if(xform && do_write(s, c->specifier->xform, xform)) return -1; if(prec && do_pad(s, '0', prec) < 0) return -1; if(ndigits && do_write(s, digits + dp, ndigits)) return -1; + if(pad && do_pad(s, ' ', pad) < 0) return -1; } else if(c->flags & f_zero) { if(sign && do_write(s, &sign, 1)) return -1; if(xform && do_write(s, c->specifier->xform, xform)) return -1; @@ -295,11 +296,11 @@ static int output_integer(struct state *s, struct conversion *c) { if(prec && do_pad(s, '0', prec) < 0) return -1; if(ndigits && do_write(s, digits + dp, ndigits)) return -1; } else { + if(pad && do_pad(s, ' ', pad) < 0) return -1; if(sign && do_write(s, &sign, 1)) return -1; if(xform && do_write(s, c->specifier->xform, xform)) return -1; if(prec && do_pad(s, '0', prec) < 0) return -1; if(ndigits && do_write(s, digits + dp, ndigits)) return -1; - if(pad && do_pad(s, ' ', pad) < 0) return -1; } return 0; } @@ -322,11 +323,11 @@ static int output_string(struct state *s, struct conversion *c) { } else pad = 0; if(c->flags & f_left) { - if(pad && do_pad(s, ' ', pad) < 0) return -1; if(do_write(s, str, len) < 0) return -1; + if(pad && do_pad(s, ' ', pad) < 0) return -1; } else { - if(do_write(s, str, len) < 0) return -1; if(pad && do_pad(s, ' ', pad) < 0) return -1; + if(do_write(s, str, len) < 0) return -1; } return 0; @@ -343,11 +344,11 @@ static int output_char(struct state *s, struct conversion *c) { } else pad = 0; if(c->flags & f_left) { - if(pad && do_pad(s, ' ', pad) < 0) return -1; if(do_write(s, &ch, 1) < 0) return -1; + if(pad && do_pad(s, ' ', pad) < 0) return -1; } else { - if(do_write(s, &ch, 1) < 0) return -1; if(pad && do_pad(s, ' ', pad) < 0) return -1; + if(do_write(s, &ch, 1) < 0) return -1; } return 0; } @@ -414,7 +415,7 @@ static int parse_conversion(struct conversion *c, const char *ptr) { ++ptr; c->precision = -1; } else - return -1; + c->precision = 0; c->flags |= f_precision; } /* length modifier */