From 52de3c7fd2610f13a67183116b5ecee0d8dd88bf Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Thu, 12 Sep 2024 16:42:19 +0200 Subject: [PATCH] (!1691) os: log: make LogVMessageVerb() signal safe We already have our own signal safe vnsprintf() implementation, which is used for formatting log messages while being in a signal handler, there's no need to have two separate implementations of all the logging functions. Signed-off-by: Enrico Weigelt, metux IT consult --- include/os.h | 6 +++--- os/log.c | 32 ++++++-------------------------- 2 files changed, 9 insertions(+), 29 deletions(-) diff --git a/include/os.h b/include/os.h index 0a7fab322..a0369ac36 100644 --- a/include/os.h +++ b/include/os.h @@ -348,9 +348,6 @@ _X_ATTRIBUTE_PRINTF(2, 3); extern _X_EXPORT void LogMessageVerbSigSafe(MessageType type, int verb, const char *format, ...) _X_ATTRIBUTE_PRINTF(3, 4); -extern _X_EXPORT void -LogVMessageVerbSigSafe(MessageType type, int verb, const char *format, va_list args) -_X_ATTRIBUTE_PRINTF(3, 0); void LogVHdrMessageVerb(MessageType type, int verb, @@ -394,4 +391,7 @@ xorg_backtrace(void); typedef _sigset_t sigset_t; #endif +/* should not be used anymore, just for backwards compat with drivers */ +#define LogVMessageVerbSigSafe(...) LogVMessageVerb(__VA_ARGS__) + #endif /* OS_H */ diff --git a/os/log.c b/os/log.c index 367fc3035..00c6d6b0e 100644 --- a/os/log.c +++ b/os/log.c @@ -687,21 +687,17 @@ static inline void writeLog(int verb, char *buf, int len) LogSWrite(verb, buf, len, (buf[len - 1] == '\n')); } +/* signal safe */ void LogVMessageVerb(MessageType type, int verb, const char *format, va_list args) { char buf[LOG_MSG_BUF_SIZE]; - if (inSignalContext) { - LogVMessageVerbSigSafe(type, verb, format, args); - return; - } - size_t len = prepMsgHdr(type, verb, buf); if (len == -1) return; - len += Xvscnprintf(&buf[len], sizeof(buf) - len, format, args); + len += vpnprintf(&buf[len], sizeof(buf) - len, format, args); writeLog(verb, buf, len); } @@ -734,41 +730,25 @@ LogMessageVerbSigSafe(MessageType type, int verb, const char *format, ...) { va_list ap; va_start(ap, format); - LogVMessageVerbSigSafe(type, verb, format, ap); + LogVMessageVerb(type, verb, format, ap); va_end(ap); } -void -LogVMessageVerbSigSafe(MessageType type, int verb, const char *format, va_list args) -{ - char buf[LOG_MSG_BUF_SIZE]; - - int len = prepMsgHdr(type, verb, buf); - if (len == -1) - return; - - len += vpnprintf(&buf[len], sizeof(buf) - len, format, args); - - writeLog(verb, buf, len); -} - void LogVHdrMessageVerb(MessageType type, int verb, const char *msg_format, va_list msg_args, const char *hdr_format, va_list hdr_args) { char buf[LOG_MSG_BUF_SIZE]; - int (*vprintf_func)(char *, int, const char* _X_RESTRICT_KYWD f, va_list args) - _X_ATTRIBUTE_PRINTF(3, 0) = (inSignalContext ? vpnprintf : Xvscnprintf); size_t len = prepMsgHdr(type, verb, buf); if (len == -1) return; if (hdr_format && sizeof(buf) - len > 1) - len += vprintf_func(&buf[len], sizeof(buf) - len, hdr_format, hdr_args); + len += vpnprintf(&buf[len], sizeof(buf) - len, hdr_format, hdr_args); if (msg_format && sizeof(buf) - len > 1) - len += vprintf_func(&buf[len], sizeof(buf) - len, msg_format, msg_args); + len += vpnprintf(&buf[len], sizeof(buf) - len, msg_format, msg_args); writeLog(verb, buf, len); } @@ -948,7 +928,7 @@ ErrorF(const char *f, ...) void VErrorFSigSafe(const char *f, va_list args) { - LogVMessageVerbSigSafe(X_ERROR, -1, f, args); + LogVMessageVerb(X_ERROR, -1, f, args); } void