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--;