#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
+#include "compat.h"
#include "internal.h"
-#include <assert.h>
-#include <stdbool.h>
-#include <string.h>
-
size_t
-utilvserver_uint2str(char *buf, size_t len, unsigned int val, unsigned char base)
+utilvserver_int2str(char *buf, size_t len, signed int val, unsigned char base)
{
- char *ptr = buf+len-1;
- register size_t res;
- if (base>=36 || len==0) return 0;
-
- *ptr = '\0';
- while (ptr>buf) {
- unsigned char digit = val%base;
-
- --ptr;
- *ptr = (digit<10 ? '0'+digit :
- digit<36 ? 'a'+digit-10 :
- (assert(false),'?'));
-
- val /= base;
- if (val==0) break;
+ int offset = 0;
+
+ if (val<0 && len>0) {
+ *buf++ = '-';
+ --len;
+ offset = 1;
+ val = -val;
}
- assert(ptr>=buf && ptr<=buf+len-1);
-
- res = buf+len-ptr;
- memmove(buf, ptr, res);
-
- return res-1;
+ return utilvserver_uint2str(buf, len, val, base)+offset;
}