diff --git a/os/log.c b/os/log.c index ac3c54ba5..df9589565 100644 --- a/os/log.c +++ b/os/log.c @@ -671,6 +671,8 @@ LogVMessageVerb(MessageType type, int verb, const char *format, va_list args) { const char *type_str; char buf[1024]; + const size_t size = sizeof(buf); + Bool newline; size_t len = 0; if (inSignalContext) { @@ -684,16 +686,17 @@ LogVMessageVerb(MessageType type, int verb, const char *format, va_list args) /* if type_str is not "", prepend it and ' ', to message */ if (type_str[0] != '\0') - len += Xscnprintf(&buf[len], sizeof(buf) - len, "%s ", type_str); + len += Xscnprintf(&buf[len], size - len, "%s ", type_str); - if (sizeof(buf) - len > 1) - len += Xvscnprintf(&buf[len], sizeof(buf) - len, format, args); + if (size - len > 1) + len += Xvscnprintf(&buf[len], size - len, format, args); /* Force '\n' at end of truncated line */ - if (sizeof(buf) - len == 1) + if (size - len == 1) buf[len - 1] = '\n'; - LogSWrite(verb, buf, len, (buf[len - 1] == '\n')); + newline = (buf[len - 1] == '\n'); + LogSWrite(verb, buf, len, newline); } /* Log message with verbosity level specified. */ @@ -734,6 +737,7 @@ LogVMessageVerbSigSafe(MessageType type, int verb, const char *format, va_list a const char *type_str; char buf[1024]; int len; + Bool newline; type_str = LogMessageTypeVerbString(type, verb); if (!type_str) @@ -751,7 +755,8 @@ LogVMessageVerbSigSafe(MessageType type, int verb, const char *format, va_list a if (sizeof(buf) - len == 1) buf[len - 1] = '\n'; - LogSWrite(verb, buf, len, (len > 0 && buf[len - 1] == '\n')); + newline = (len > 0 && buf[len - 1] == '\n'); + LogSWrite(verb, buf, len, newline); } void @@ -760,6 +765,8 @@ LogVHdrMessageVerb(MessageType type, int verb, const char *msg_format, { const char *type_str; char buf[1024]; + const size_t size = sizeof(buf); + Bool newline; size_t len = 0; int (*vprintf_func)(char *, int, const char* _X_RESTRICT_KYWD f, va_list args) _X_ATTRIBUTE_PRINTF(3, 0); @@ -780,19 +787,20 @@ LogVHdrMessageVerb(MessageType type, int verb, const char *msg_format, /* if type_str is not "", prepend it and ' ', to message */ if (type_str[0] != '\0') - len += printf_func(&buf[len], sizeof(buf) - len, "%s ", type_str); + len += printf_func(&buf[len], size - len, "%s ", type_str); - if (hdr_format && sizeof(buf) - len > 1) - len += vprintf_func(&buf[len], sizeof(buf) - len, hdr_format, hdr_args); + if (hdr_format && size - len > 1) + len += vprintf_func(&buf[len], size - len, hdr_format, hdr_args); - if (msg_format && sizeof(buf) - len > 1) - len += vprintf_func(&buf[len], sizeof(buf) - len, msg_format, msg_args); + if (msg_format && size - len > 1) + len += vprintf_func(&buf[len], size - len, msg_format, msg_args); /* Force '\n' at end of truncated line */ - if (sizeof(buf) - len == 1) + if (size - len == 1) buf[len - 1] = '\n'; - LogSWrite(verb, buf, len, (buf[len - 1] == '\n')); + newline = (buf[len - 1] == '\n'); + LogSWrite(verb, buf, len, newline); } void