Skip to content
Browse files

better labelling in ast_function_labeling, this time the number is ev…

…en printed forward rather than backward... ;)
  • Loading branch information...
1 parent 2524d9c commit 7fec608417d47be97704ac605f9f125060679801 @Blub Blub committed Aug 24, 2012
Showing with 11 additions and 28 deletions.
  1. +11 −28 ast.c
View
39 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;
}
/*********************************************************************/

0 comments on commit 7fec608

Please sign in to comment.
Something went wrong with that request. Please try again.