diff --git a/lib/mes/ntoab.c b/lib/mes/ntoab.c
index f2f0e89d..988a0b25 100644
--- a/lib/mes/ntoab.c
+++ b/lib/mes/ntoab.c
@@ -18,24 +18,32 @@
* along with GNU Mes. If not, see .
*/
-#include
#include
-#include
+#include
+#include
+#include
-#define STR(x) #x
-#define XSTR(s) STR(s)
+char *__itoa_buf;
char *
ntoab (long x, unsigned base, int signed_p)
{
- static char itoa_buf[20];
- char *p = itoa_buf + 11;
- *p-- = 0;
- assert(base > 1);
+#if 0
+ if (! __itoa_buf)
+ __itoa_buf = malloc (20);
+ p = __itoa_buf + 11;
+#else
+ static char buf[20];
+ char *p = buf + 19;
+#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;
/* Avoid LONG_MIN */
@@ -54,12 +62,19 @@ ntoab (long x, unsigned 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;
}