(!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 <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2024-09-12 16:42:19 +02:00
parent 8ca763453a
commit 52de3c7fd2
2 changed files with 9 additions and 29 deletions

View File

@ -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 */

View File

@ -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