From b61ed2106bcbe0d74d37f65c54a25930408250f3 Mon Sep 17 00:00:00 2001 From: Tony Bellavia Date: Fri, 12 Jun 2020 06:24:19 +0200 Subject: [PATCH] Add support for 64 bits integers. Fix issue #306 --- minix/lib/libc/gen/itoa.c | 55 ++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/minix/lib/libc/gen/itoa.c b/minix/lib/libc/gen/itoa.c index ac5a84910..f22a322ee 100644 --- a/minix/lib/libc/gen/itoa.c +++ b/minix/lib/libc/gen/itoa.c @@ -1,35 +1,42 @@ #include /* Integer to ASCII for signed decimal integers. */ -static int next; -static char qbuf[8]; +static char qbuf[12]; char *itoa(int n); char *itoa(int n) { - register int r, k; - int flag = 0; + register int r; + register int k; + int flag = 0; + long long nb = n; + int next = 0; - next = 0; - if (n < 0) { - qbuf[next++] = '-'; - n = -n; - } - if (n == 0) { - qbuf[next++] = '0'; - } else { - k = 10000; - while (k > 0) { - r = n / k; - if (flag || r > 0) { - qbuf[next++] = '0' + r; - flag = 1; - } - n -= r * k; - k = k / 10; + if (nb < 0) + { + qbuf[next++] = '-'; + nb = -nb; } - } - qbuf[next] = 0; - return(qbuf); + if (nb == 0) + { + qbuf[next++] = '0'; + } + else + { + k = 1000000000; + while (k > 0) + { + r = nb / k; + if (flag || r > 0) + { + qbuf[next++] = '0' + r; + flag = 1; + } + nb -= r * k; + k = k / 10; + } + } + qbuf[next] = 0; + return(qbuf); }