diff options
author | Leah Neukirchen <leah@vuxu.org> | 2017-10-09 20:18:31 +0200 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2017-10-09 20:18:31 +0200 |
commit | 71f5f214dc8601749ad842559c786da9347cd1ba (patch) | |
tree | 89019cab781e25247938d55baeabe3f526f99096 /xe.c | |
parent | 857e8afe74520dab491cd15a6fd7464980c56609 (diff) | |
download | xe-71f5f214dc8601749ad842559c786da9347cd1ba.tar.gz xe-71f5f214dc8601749ad842559c786da9347cd1ba.tar.xz xe-71f5f214dc8601749ad842559c786da9347cd1ba.zip |
open stderr linewise when using it for tracing
Diffstat (limited to 'xe.c')
-rw-r--r-- | xe.c | 18 |
1 files changed, 15 insertions, 3 deletions
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; |