From edfea06688297f3d9268c58c212127a380619936 Mon Sep 17 00:00:00 2001 From: Sebastian Rasmussen Date: Tue, 8 Aug 2017 02:06:48 +0800 Subject: Place space/zero padding correctly before/after sign. --- source/fitz/printf.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'source/fitz/printf.c') diff --git a/source/fitz/printf.c b/source/fitz/printf.c index 30cf85fb..3fe8c7e4 100644 --- a/source/fitz/printf.c +++ b/source/fitz/printf.c @@ -93,10 +93,16 @@ static void fmtuint32(struct fmtbuf *out, unsigned int a, int s, int z, int w, i buf[i++] = fz_hex_digits[a % base]; a /= base; } - while (i < w) - buf[i++] = z; + if (z == '0') + while (i < w - !!s) + buf[i++] = z; if (s) buf[i++] = s; + while (i < w) + buf[i++] = z; + if (z == ' ') + while (i < w) + buf[i++] = z; while (i > 0) fmtputc(out, buf[--i]); } @@ -113,10 +119,19 @@ static void fmtuint64(struct fmtbuf *out, uint64_t a, int s, int z, int w, int b buf[i++] = fz_hex_digits[a % base]; a /= base; } - while (i < w) - buf[i++] = z; + if (z == '0') + while (i < w - !!s) + buf[i++] = z; if (s) + { buf[i++] = s; + w += 1; + } + while (i < w) + buf[i++] = z; + if (z == ' ') + while (i < w) + buf[i++] = z; while (i > 0) fmtputc(out, buf[--i]); } -- cgit v1.2.3