|
@@ -79,17 +79,23 @@ static char * |
|
|
smprintf(const char *fmt, ...) |
|
|
smprintf(const char *fmt, ...) |
|
|
{ |
|
|
{ |
|
|
va_list ap; |
|
|
va_list ap; |
|
|
char tmp[120]; |
|
|
|
|
|
char *ret = NULL; |
|
|
|
|
|
|
|
|
char *ret; |
|
|
|
|
|
int len; |
|
|
|
|
|
|
|
|
va_start(ap, fmt); |
|
|
va_start(ap, fmt); |
|
|
vsnprintf(tmp, sizeof(tmp)-1, fmt, ap); |
|
|
|
|
|
tmp[strlen(tmp)+1] = '\0'; |
|
|
|
|
|
|
|
|
len = vsnprintf(NULL, 0, fmt, ap); |
|
|
|
|
|
va_end(ap); |
|
|
|
|
|
|
|
|
if (asprintf(&ret, "%s", tmp) < 0) |
|
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
|
ret = malloc(++len); |
|
|
|
|
|
if (ret == NULL) { |
|
|
|
|
|
perror("malloc"); |
|
|
|
|
|
exit(1); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
va_start(ap, fmt); |
|
|
|
|
|
vsnprintf(ret, len, fmt, ap); |
|
|
va_end(ap); |
|
|
va_end(ap); |
|
|
|
|
|
|
|
|
return ret; |
|
|
return ret; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|