log: simplify _sys_log() function

This commit is contained in:
Craig Barnes 2020-08-06 23:13:06 +01:00
parent 22eed3e579
commit 8541ce10a2

31
log.c
View file

@ -97,33 +97,14 @@ _sys_log(enum log_class log_class, const char *module,
assert(level != -1); assert(level != -1);
const char *sys_err = sys_errno != 0 ? strerror(sys_errno) : NULL; char msg[4096];
int n = vsnprintf(msg, sizeof(msg), fmt, va);
assert(n >= 0);
va_list va2; if (sys_errno != 0 && (size_t)n < sizeof(msg))
va_copy(va2, va); snprintf(msg + n, sizeof(msg) - n, ": %s", strerror(sys_errno));
/* Calculate required size of buffer holding the entire log message */ syslog(level, "%s: %s", module, msg);
int required_len = 0;
required_len += strlen(module) + 2; /* "%s: " */
required_len += vsnprintf(NULL, 0, fmt, va2); va_end(va2);
if (sys_errno != 0)
required_len += strlen(sys_err) + 2; /* ": %s" */
/* Format the msg */
char *msg = malloc(required_len + 1);
int idx = 0;
idx += snprintf(&msg[idx], required_len + 1 - idx, "%s: ", module);
idx += vsnprintf(&msg[idx], required_len + 1 - idx, fmt, va);
if (sys_errno != 0) {
snprintf(
&msg[idx], required_len + 1 - idx, ": %s", strerror(sys_errno));
}
syslog(level, "%s", msg);
free(msg);
} }
void void