diff --git a/lib/mes/ntoab.c b/lib/mes/ntoab.c
index ce91c73a..0bd207af 100644
--- a/lib/mes/ntoab.c
+++ b/lib/mes/ntoab.c
@@ -18,20 +18,32 @@
* along with GNU Mes. If not, see .
*/
-#include
#include
+#include
+#include
+#include
+
+char *__itoa_buf;
char *
ntoab (long x, int base, int signed_p)
{
- static char itoa_buf[20];
- char *p = itoa_buf + 11;
- *p-- = 0;
- assert(base > 0);
+#if 0
+ if (! __itoa_buf)
+ __itoa_buf = malloc (20);
+ p = __itoa_buf + 11;
+#else
+ static char buf[20];
+ char *p = buf + 11;
+#endif
+
+ p[0] = 0;
+ p = p - 1;
+ assert_msg (base > 0, "base > 0");
int sign_p = 0;
unsigned long u;
- if (signed_p && x < 0)
+ if (signed_p != 0 && x < 0)
{
sign_p = 1;
u = -x;
@@ -48,12 +60,19 @@ ntoab (long x, int base, int signed_p)
i = u % base;
u = u / base;
#endif
- *p-- = i > 9 ? 'a' + i - 10 : '0' + i;
+ if (i > 9)
+ p[0] = 'a' + i - 10;
+ else
+ p[0] = '0' + i;
+ p = p - 1;
}
- while (u);
+ while (u != 0);
- if (sign_p && *(p + 1) != '0')
- *p-- = '-';
+ if (sign_p && p[1] != '0')
+ {
+ p[0] = '-';
+ p = p - 1;
+ }
return p + 1;
}