From 0d4bd8ba31515d329dee1532b6c30ff5e74019b3 Mon Sep 17 00:00:00 2001
From: Sebastian Rasmussen <sebras@gmail.com>
Date: Tue, 8 Aug 2017 02:03:34 +0800
Subject: Move sign printing into inner formatting functions.

---
 source/fitz/printf.c | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

(limited to 'source/fitz')

diff --git a/source/fitz/printf.c b/source/fitz/printf.c
index 3b0072f7..30cf85fb 100644
--- a/source/fitz/printf.c
+++ b/source/fitz/printf.c
@@ -96,7 +96,7 @@ static void fmtuint32(struct fmtbuf *out, unsigned int a, int s, int z, int w, i
 	while (i < w)
 		buf[i++] = z;
 	if (s)
-		fmtputc(out, '+');
+		buf[i++] = s;
 	while (i > 0)
 		fmtputc(out, buf[--i]);
 }
@@ -116,7 +116,7 @@ static void fmtuint64(struct fmtbuf *out, uint64_t a, int s, int z, int w, int b
 	while (i < w)
 		buf[i++] = z;
 	if (s)
-		fmtputc(out, '+');
+		buf[i++] = s;
 	while (i > 0)
 		fmtputc(out, buf[--i]);
 }
@@ -127,11 +127,19 @@ static void fmtint32(struct fmtbuf *out, int value, int s, int z, int w, int bas
 
 	if (value < 0)
 	{
-		fmtputc(out, '-');
+		s = '-';
 		a = -value;
 	}
+	else if (s)
+	{
+		s = '+';
+		a = value;
+	}
 	else
+	{
+		s = 0;
 		a = value;
+	}
 	fmtuint32(out, a, s, z, w, base);
 }
 
@@ -141,11 +149,19 @@ static void fmtint64(struct fmtbuf *out, int64_t value, int s, int z, int w, int
 
 	if (value < 0)
 	{
-		fmtputc(out, '-');
+		s = '-';
 		a = -value;
 	}
+	else if (s)
+	{
+		s = '+';
+		a = value;
+	}
 	else
+	{
+		s = 0;
 		a = value;
+	}
 	fmtuint64(out, a, s, z, w, base);
 }
 
-- 
cgit v1.2.3