|
|
@@ -48,27 +48,37 @@ die(const char *fmt, ...) |
|
|
|
exit(1); |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|
esnprintf(char *str, size_t size, const char *fmt, ...) |
|
|
|
static int |
|
|
|
evsnprintf(char *str, size_t size, const char *fmt, va_list ap) |
|
|
|
{ |
|
|
|
va_list ap; |
|
|
|
int ret; |
|
|
|
|
|
|
|
va_start(ap, fmt); |
|
|
|
ret = vsnprintf(str, size, fmt, ap); |
|
|
|
va_end(ap); |
|
|
|
|
|
|
|
if (ret < 0) { |
|
|
|
warn("snprintf:"); |
|
|
|
warn("vsnprintf:"); |
|
|
|
return -1; |
|
|
|
} else if ((size_t)ret >= size) { |
|
|
|
warn("snprintf: Output truncated"); |
|
|
|
warn("vsnprintf: Output truncated"); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|
esnprintf(char *str, size_t size, const char *fmt, ...) |
|
|
|
{ |
|
|
|
va_list ap; |
|
|
|
int ret; |
|
|
|
|
|
|
|
va_start(ap, fmt); |
|
|
|
ret = evsnprintf(str, size, fmt, ap); |
|
|
|
va_end(ap); |
|
|
|
|
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
const char * |
|
|
|
bprintf(const char *fmt, ...) |
|
|
|
{ |
|
|
@@ -76,14 +86,10 @@ bprintf(const char *fmt, ...) |
|
|
|
int ret; |
|
|
|
|
|
|
|
va_start(ap, fmt); |
|
|
|
if ((ret = vsnprintf(buf, sizeof(buf), fmt, ap)) < 0) { |
|
|
|
warn("vsnprintf:"); |
|
|
|
} else if ((size_t)ret >= sizeof(buf)) { |
|
|
|
warn("vsnprintf: Output truncated"); |
|
|
|
} |
|
|
|
ret = evsnprintf(buf, sizeof(buf), fmt, ap); |
|
|
|
va_end(ap); |
|
|
|
|
|
|
|
return buf; |
|
|
|
return (ret < 0) ? NULL : buf; |
|
|
|
} |
|
|
|
|
|
|
|
const char * |
|
|
|