From 71f5f214dc8601749ad842559c786da9347cd1ba Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Mon, 9 Oct 2017 20:18:31 +0200 Subject: open stderr linewise when using it for tracing --- xe.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'xe.c') diff --git a/xe.c b/xe.c index 2c7e8a8..f5998e8 100644 --- a/xe.c +++ b/xe.c @@ -560,6 +560,18 @@ perc_subst(char *pat, char *base, char *arg) return buf; } +static void +trace_to_stderr() +{ + FILE *linestderr = fdopen(2, "w"); + if (linestderr) { + setvbuf(linestderr, 0, _IOLBF, 0); + traceout = linestderr; + } else { + traceout = stderr; + } +} + int main(int argc, char *argv[], char *envp[]) { @@ -602,7 +614,7 @@ main(int argc, char *argv[], char *envp[]) case 'p': pflag++; break; case 'q': qflag++; break; case 's': sflag = optarg; break; - case 'v': vflag++; traceout = stderr; break; + case 'v': vflag++; break; default: fprintf(stderr, "Usage: %s [-0FLRnqv] [-p | -I arg] [-N maxargs] [-j maxjobs] COMMAND...\n" @@ -618,8 +630,8 @@ main(int argc, char *argv[], char *envp[]) if (!children) exit(1); - if (Lflag && vflag > 1) - traceout = stdout; + if (!Lflag || vflag <= 1) + trace_to_stderr(); if (aflag || Aflag) { input = 0; -- cgit 1.4.1