mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-02-17 09:02:25 +00:00
sprintf with length modifiers is annoying...
This commit is contained in:
parent
627ef279fd
commit
0f023bc219
1 changed files with 27 additions and 1 deletions
28
ast.c
28
ast.c
|
@ -368,10 +368,36 @@ void ast_function_delete(ast_function *self)
|
||||||
mem_d(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)
|
const char* ast_function_label(ast_function *self, const char *prefix)
|
||||||
{
|
{
|
||||||
size_t id = (self->labelcount++);
|
size_t id = (self->labelcount++);
|
||||||
sprintf(self->labelbuf, "%16s%8u", prefix, (unsigned int)id);
|
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;
|
return self->labelbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue