aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/port/snprintf.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/port/snprintf.c b/src/port/snprintf.c
index 3bd598d75c6..872d8001240 100644
--- a/src/port/snprintf.c
+++ b/src/port/snprintf.c
@@ -1007,6 +1007,7 @@ fmtint(long long value, char type, int forcesign, int leftjust,
PrintfTarget *target)
{
unsigned long long base;
+ unsigned long long uvalue;
int dosign;
const char *cvt = "0123456789abcdef";
int signvalue = 0;
@@ -1045,7 +1046,9 @@ fmtint(long long value, char type, int forcesign, int leftjust,
/* Handle +/- */
if (dosign && adjust_sign((value < 0), forcesign, &signvalue))
- value = -value;
+ uvalue = -(uint64) value;
+ else
+ uvalue = (uint64) value;
/*
* SUS: the result of converting 0 with an explicit precision of 0 is no
@@ -1056,8 +1059,6 @@ fmtint(long long value, char type, int forcesign, int leftjust,
else
{
/* make integer string */
- unsigned long long uvalue = (unsigned long long) value;
-
do
{
convert[sizeof(convert) - (++vallen)] = cvt[uvalue % base];