From e70b1a5213411af074683bb2da7157e00209674d Mon Sep 17 00:00:00 2001 From: josh Date: Mon, 20 Jul 2009 19:10:54 +0000 Subject: [PATCH] removed special cases for formatting of lowest signed values due to Corrin' rationale; fixed formatting routines to handle formatting "0" values git-svn-id: svn://anubis/hos/trunk@59 5b3e749e-e535-0410-8002-a9bb6afbdfca --- kernel/lang/kio.cc | 46 +++++++++++++++------------------------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/kernel/lang/kio.cc b/kernel/lang/kio.cc index 257904a..9edaefd 100644 --- a/kernel/lang/kio.cc +++ b/kernel/lang/kio.cc @@ -206,19 +206,12 @@ void kputs_pad(const char * s, int width, char pad_char, bool pad_right) static void fmt_d2a(char * buf, int val) { - if (val == INT_MIN) + if (val < 0) { - strcpy(buf, "-2147483648"); - } - else - { - if (val < 0) - { - *buf++ = '-'; - val = -val; - } - fmt_u2a(buf, (unsigned int) val); + *buf++ = '-'; + val = -val; } + fmt_u2a(buf, (unsigned int) val); } static void fmt_u2a(char * buf, unsigned int val) @@ -227,7 +220,7 @@ static void fmt_u2a(char * buf, unsigned int val) for (unsigned int div = 1000000000; div >= 1; div /= 10) { unsigned int n = val / div; - if (n) + if (n || div == 1) { printing = true; } @@ -242,19 +235,12 @@ static void fmt_u2a(char * buf, unsigned int val) static void fmt_ll2a(char * buf, long long val) { - if (val == LONG_LONG_MIN) + if (val < 0) { - strcpy(buf, "-9223372036854775808"); - } - else - { - if (val < 0) - { - *buf++ = '-'; - val = -val; - } - fmt_ull2a(buf, (unsigned long long) val); + *buf++ = '-'; + val = -val; } + fmt_ull2a(buf, (unsigned long long) val); } static void fmt_ull2a(char * buf, unsigned long long val) @@ -263,7 +249,7 @@ static void fmt_ull2a(char * buf, unsigned long long val) for (unsigned long long div = 10000000000000000000ull; div >= 1; div /= 10) { unsigned long long n = val / div; - if (n) + if (n || div == 1) { printing = true; } @@ -282,7 +268,7 @@ static void fmt_x2a(char * buf, unsigned int val) for (int s = 28; s >= 0; s -= 4) { unsigned int n = (val >> s) & 0xF; - if (n) + if (n || s == 0) { printing = true; } @@ -296,13 +282,11 @@ static void fmt_x2a(char * buf, unsigned int val) static void fmt_xl2a(char * buf, unsigned long long val) { - fmt_x2a(buf, val >> 32); - buf += strlen(buf); - bool printing = ( (val >> 32) != 0 ); - for (int s = 28; s >= 0; s -= 4) + bool printing = false; + for (int s = 60; s >= 0; s -= 4) { unsigned int n = (val >> s) & 0xF; - if (n) + if (n || s == 0) { printing = true; } @@ -320,7 +304,7 @@ static void fmt_o2a(char * buf, unsigned int val) for (int s = 30; s >= 0; s -= 3) { unsigned int n = (val >> s) & 0x7; - if (n) + if (n || s == 0) { printing = true; }