Ignore stderr when reading from man command
authorH.G.Muller <hgm@hgm-xboard.(none)>
Mon, 4 Apr 2016 10:00:57 +0000 (12:00 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Sun, 17 Apr 2016 08:24:57 +0000 (10:24 +0200)
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

index 572b910..743c701 100644 (file)
--- a/usystem.c
+++ b/usystem.c
@@ -519,18 +519,25 @@ DestroyChildProcess (ProcRef pr, int signalType)
 char *
 BufferCommandOutput (char *command, int size)
 {
 char *
 BufferCommandOutput (char *command, int size)
 {
-    ChildProc *pr;
     char *res = (char *) calloc(1, size);
     if(res) {
        int count;
        FILE *f;
     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);
        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);
        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
 }
     }
     return res; // return buffer with output
 }