From ebf0db77eef0bc192b9e075f6925f3ba7dd32d93 Mon Sep 17 00:00:00 2001 From: CTCaer Date: Sun, 8 May 2022 05:26:01 +0300 Subject: [PATCH] bdk: sprintf: add negative number support for %d This will now force a number as negative if bit31 is set and properly create the relevant string. That means that external handling in order to show sign is now not needed. --- bdk/utils/sprintf.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/bdk/utils/sprintf.c b/bdk/utils/sprintf.c index a5b8cef..58b1fb3 100644 --- a/bdk/utils/sprintf.c +++ b/bdk/utils/sprintf.c @@ -40,10 +40,19 @@ static void _s_putn(u32 v, int base, char fill, int fcnt) static const char digits[] = "0123456789ABCDEFghijklmnopqrstuvwxyz"; char *p; int c = fcnt; + bool negative = false; if (base > 36) return; + // Account for negative numbers. + if (base == 10 && v & 0x80000000) + { + negative = true; + v = (int)v * -1; + c--; + } + p = buf + 64; *p = 0; do @@ -53,9 +62,12 @@ static void _s_putn(u32 v, int base, char fill, int fcnt) v /= base; } while (v); + if (negative) + *--p = '-'; + if (fill != 0) { - while (c > 0) + while (c > 0 && p > buf) { *--p = fill; c--;