X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=usystem.c;h=743c701c8c12744bf9c02280329fab83f52fbaa2;hb=6341a1e8f282d099affed789a69bad4660fe9cdc;hp=77efb609d54ac6756e081abe3383803662e5b77e;hpb=4247eefccb8916d045dccd2d63a4b78f8c5cdf45;p=xboard.git diff --git a/usystem.c b/usystem.c index 77efb60..743c701 100644 --- a/usystem.c +++ b/usystem.c @@ -347,7 +347,7 @@ ExpandPathName (char *path) if (*s == '~') { if(s[1] == '~') { // use ~~ for XBoard's private data directory - snprintf(d, 4*MSG_SIZ, DATADIR "%s", s+2); + snprintf(d, 4*MSG_SIZ, "%s%s", dataDir, s+2); } else if (*(s+1) == '/') { safeStrCpy(d, getpwuid(getuid())->pw_dir, 4*MSG_SIZ ); @@ -516,6 +516,32 @@ DestroyChildProcess (ProcRef pr, int signalType) close(cp->fdTo); } +char * +BufferCommandOutput (char *command, int size) +{ + 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); + 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 +} + void InterruptChildProcess (ProcRef pr) {