mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 13:43:47 +01:00
Refactor the 'deliver a log message' logic to its own function.
This commit is contained in:
parent
de114587f0
commit
6e2ef4bc5e
@ -374,6 +374,58 @@ logfile_wants_message(const logfile_t *lf, int severity,
|
||||
return 1;
|
||||
}
|
||||
|
||||
/** Send a message to <b>lf</b>. The full message, with time prefix and
|
||||
* severity, is in <b>buf</b>. The message itself is in
|
||||
* <b>msg_after_prefix</b>. If <b>callbacks_deferred</b> points to true, then
|
||||
* we already deferred this message for pending callbacks and don't need to do
|
||||
* it again. Otherwise, if we need to do it, do it, and set
|
||||
* <b>callbacks_deferred</b> to 1. */
|
||||
static INLINE void
|
||||
logfile_deliver(logfile_t *lf, const char *buf, size_t msg_len,
|
||||
const char *msg_after_prefix, log_domain_mask_t domain,
|
||||
int severity, int *callbacks_deferred)
|
||||
{
|
||||
|
||||
if (lf->is_syslog) {
|
||||
#ifdef HAVE_SYSLOG_H
|
||||
#ifdef MAXLINE
|
||||
/* Some syslog implementations have limits on the length of what you can
|
||||
* pass them, and some very old ones do not detect overflow so well.
|
||||
* Regrettably, they call their maximum line length MAXLINE. */
|
||||
#if MAXLINE < 64
|
||||
#warn "MAXLINE is a very low number; it might not be from syslog.h after all"
|
||||
#endif
|
||||
char *m = msg_after_prefix;
|
||||
if (msg_len >= MAXLINE)
|
||||
m = tor_strndup(msg_after_prefix, MAXLINE-1);
|
||||
syslog(severity, "%s", m);
|
||||
if (m != msg_after_prefix) {
|
||||
tor_free(m);
|
||||
}
|
||||
#else
|
||||
/* We have syslog but not MAXLINE. That's promising! */
|
||||
syslog(severity, "%s", msg_after_prefix);
|
||||
#endif
|
||||
#endif
|
||||
} else if (lf->callback) {
|
||||
if (domain & LD_NOCB) {
|
||||
if (!*callbacks_deferred && pending_cb_messages) {
|
||||
smartlist_add(pending_cb_messages,
|
||||
pending_log_message_new(severity,domain,msg_after_prefix));
|
||||
*callbacks_deferred = 1;
|
||||
}
|
||||
} else {
|
||||
lf->callback(severity, domain, msg_after_prefix);
|
||||
}
|
||||
} else {
|
||||
if (write_all(lf->fd, buf, msg_len, 0) < 0) { /* error */
|
||||
/* don't log the error! mark this log entry to be blown away, and
|
||||
* continue. */
|
||||
lf->seems_dead = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Helper: sends a message to the appropriate logfiles, at loglevel
|
||||
* <b>severity</b>. If provided, <b>funcname</b> is prepended to the
|
||||
* message. The actual message is derived as from tor_snprintf(format,ap).
|
||||
@ -410,44 +462,8 @@ logv,(int severity, log_domain_mask_t domain, const char *funcname,
|
||||
formatted = 1;
|
||||
}
|
||||
|
||||
if (lf->is_syslog) {
|
||||
#ifdef HAVE_SYSLOG_H
|
||||
char *m = end_of_prefix;
|
||||
#ifdef MAXLINE
|
||||
/* Some syslog implementations have limits on the length of what you can
|
||||
* pass them, and some very old ones do not detect overflow so well.
|
||||
* Regrettably, they call their maximum line length MAXLINE. */
|
||||
#if MAXLINE < 64
|
||||
#warn "MAXLINE is a very low number; it might not be from syslog.h after all"
|
||||
#endif
|
||||
if (msg_len >= MAXLINE)
|
||||
m = tor_strndup(end_of_prefix, MAXLINE-1);
|
||||
#endif
|
||||
syslog(severity, "%s", m);
|
||||
#ifdef MAXLINE
|
||||
if (m != end_of_prefix) {
|
||||
tor_free(m);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
continue;
|
||||
} else if (lf->callback) {
|
||||
if (domain & LD_NOCB) {
|
||||
if (!callbacks_deferred && pending_cb_messages) {
|
||||
smartlist_add(pending_cb_messages,
|
||||
pending_log_message_new(severity,domain,end_of_prefix));
|
||||
callbacks_deferred = 1;
|
||||
}
|
||||
} else {
|
||||
lf->callback(severity, domain, end_of_prefix);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (write_all(lf->fd, buf, msg_len, 0) < 0) { /* error */
|
||||
/* don't log the error! mark this log entry to be blown away, and
|
||||
* continue. */
|
||||
lf->seems_dead = 1;
|
||||
}
|
||||
logfile_deliver(lf, buf, msg_len, end_of_prefix, domain, severity,
|
||||
&callbacks_deferred);
|
||||
}
|
||||
UNLOCK_LOGS();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user