summaryrefslogtreecommitdiffabout
path: root/src/main.c
authorSergey Poznyakoff <gray@gnu.org.ua>2012-08-04 17:07:48 (GMT)
committer Sergey Poznyakoff <gray@gnu.org.ua>2012-08-04 17:07:48 (GMT)
commit365cd1ef4cde229e19bbcad3c26f47d4d700376b (patch) (side-by-side diff)
treea0a2761fb5ff103d283f23a194d5ad90df4018ab /src/main.c
parent7ee140e5d91a71311cade4c702a560e90178cb94 (diff)
downloadmailfromd-365cd1ef4cde229e19bbcad3c26f47d4d700376b.tar.gz
mailfromd-365cd1ef4cde229e19bbcad3c26f47d4d700376b.tar.bz2
Fix trace output.
The c-escape filter used by the trace output stream suppresses newlines in output. This is harmless when the output goes to syslog, but when it goes to stderr, all trace lines get concatenated into a single one on output. To fix this, newline has to be sent directly to the underlying stream, bypassing the filter. * src/main.c (trace): Send newline bypassing the c-escape filter (which would have converted it to the "\n" sequence). This requires MU commit 1cbbd572.
Diffstat (limited to 'src/main.c') (more/less context) (ignore whitespace changes)
-rw-r--r--src/main.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/main.c b/src/main.c
index 11a60ab..4b92598 100644
--- a/src/main.c
+++ b/src/main.c
@@ -126,13 +126,14 @@ open_trace_stream()
"using standard log: %s"),
mu_strerror(rc));
mf_trace_stream = mf_strecho;
- }
+ }
}
void
trace(const char *fmt, ...)
{
if (do_trace) {
+ int bval = 0;
va_list ap;
if (!mf_trace_stream)
@@ -140,7 +141,15 @@ trace(const char *fmt, ...)
va_start(ap, fmt);
mu_stream_vprintf(mf_trace_stream, fmt, ap);
- mu_stream_flush(mf_trace_stream);
+ bval = 1;
+ mu_stream_ioctl(mf_trace_stream, MU_IOCTL_FILTER,
+ MU_IOCTL_FILTER_SET_DISABLED,
+ &bval);
+ mu_stream_write(mf_trace_stream, "\n", 1, NULL);
+ bval = 0;
+ mu_stream_ioctl(mf_trace_stream, MU_IOCTL_FILTER,
+ MU_IOCTL_FILTER_SET_DISABLED,
+ &bval);
va_end(ap);
}
}

Return to:

Send suggestions and report system problems to the System administrator.