Fix edge case bug in numlen, dropping use of math.h functions

(Specifically, numlen when called with INT_MIN gave an incorrect
result, because abs(INT_MIN) == INT_MIN < 0.)
This commit is contained in:
M Stoeckl 2019-01-21 12:46:45 -05:00
parent d7ff776552
commit c040defd5f

View file

@ -12,11 +12,12 @@ int wrap(int i, int max) {
} }
int numlen(int n) { int numlen(int n) {
if (n == 0) { int j = n <= 0 ? 1 : 0;
return 1; while (n) {
j++;
n /= 10;
} }
// Account for the '-' in negative numbers. return j;
return log10(abs(n)) + (n > 0 ? 1 : 2);
} }
uint32_t parse_color(const char *color) { uint32_t parse_color(const char *color) {