From 908759b935cebda76084535213586637901126f2 Mon Sep 17 00:00:00 2001 From: H.G.Muller Date: Mon, 4 Apr 2016 12:00:57 +0200 Subject: [PATCH] Ignore stderr when reading from man command BufferCommandOutput was using StartChildProcess also used for engines, which combines the output from stdout and stderr on the pipe. On FreeBSD "man -w" produces spurious error messages, however, which would append to the path of the man file. To work around this we now use popen() to collect the output of the man command during help clicks. --- usystem.c | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-) diff --git a/usystem.c b/usystem.c index 572b910..743c701 100644 --- a/usystem.c +++ b/usystem.c @@ -519,18 +519,25 @@ DestroyChildProcess (ProcRef pr, int signalType) char * BufferCommandOutput (char *command, int size) { - ChildProc *pr; char *res = (char *) calloc(1, size); if(res) { int count; FILE *f; +#if 0 + ChildProc *pr; StartChildProcess(command, ".", (ProcRef) &pr); // run command in daughter process f = fdopen(pr->fdFrom, "r"); count = fread(res, 1, size-1, f); // read its output fclose(f); - res[count > 0 ? count : 0] = NULLCHAR; DestroyChildProcess((ProcRef) pr, 9); free(pr); +#else + f = popen(command, "r"); + if(!f) return res; + count = fread(res, 1, size-1, f); // read its output + pclose(f); +#endif + res[count > 0 ? count : 0] = NULLCHAR; } return res; // return buffer with output } -- 1.7.0.4