]> git.rm.cloudns.org Git - xonotic/gmqcc.git/commitdiff
better labelling in ast_function_labeling, this time the number is even printed forwa...
authorWolfgang (Blub) Bumiller <blub@speed.at>
Fri, 24 Aug 2012 16:08:28 +0000 (18:08 +0200)
committerWolfgang (Blub) Bumiller <blub@speed.at>
Fri, 24 Aug 2012 16:08:28 +0000 (18:08 +0200)
ast.c

diff --git a/ast.c b/ast.c
index 0faaca1996ec6faf85688d4b52ed382e2c9df032..c039679adb6574d2738ea5588738ac467bc320ee 100644 (file)
--- a/ast.c
+++ b/ast.c
@@ -718,37 +718,20 @@ void ast_function_delete(ast_function *self)
     mem_d(self);
 }
 
-static void ast_util_hexitoa(char *buf, size_t size, unsigned int num)
-{
-    unsigned int base = 10;
-#define checknul() do { if (size == 1) { *buf = 0; return; } } while (0)
-#define addch(x) do { *buf++ = (x); --size; checknul(); } while (0)
-    if (size < 1)
-        return;
-    checknul();
-    if (!num)
-        addch('0');
-    else {
-        while (num)
-        {
-            int digit = num % base;
-            num /= base;
-            addch('0' + digit);
-        }
-    }
-
-    *buf = 0;
-#undef addch
-#undef checknul
-}
-
 const char* ast_function_label(ast_function *self, const char *prefix)
 {
-    size_t id = (self->labelcount++);
+    size_t id  = (self->labelcount++);
     size_t len = strlen(prefix);
-    strncpy(self->labelbuf, prefix, sizeof(self->labelbuf));
-    ast_util_hexitoa(self->labelbuf + len, sizeof(self->labelbuf)-len, id);
-    return self->labelbuf;
+
+    char *from = self->labelbuf + sizeof(self->labelbuf)-1;
+    *from-- = 0;
+    do {
+        unsigned int digit = id % 10;
+        *from = digit + '0';
+        id /= 10;
+    } while (id);
+    memcpy(from - len, prefix, len);
+    return from - len;
 }
 
 /*********************************************************************/