diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2012-07-27 19:31:38 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2012-07-27 19:31:38 -0400 |
commit | 53bc376d089d29cf34b98d1c72444ada4a7d9450 (patch) | |
tree | bd206f59e5703dbc9928f283118a87deb4c7b235 /src | |
parent | 588586b3f3daad2f4ddace9fc79caeade446420e (diff) |
Improve reporting of error situations in find_other_exec().
This function suppressed any stderr output from the called program, which
is unnecessary in the normal case and unhelpful in error cases. It also
gave a rather opaque message along the lines of "fgets failure: Success"
in case the called program failed to return anything on stdout. Since
we've seen multiple reports of people not understanding what's wrong when
pg_ctl reports this, improve the message.
Back-patch to all active branches.
Diffstat (limited to 'src')
-rw-r--r-- | src/port/exec.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/port/exec.c b/src/port/exec.c index 17f45563de9..f751e8eae35 100644 --- a/src/port/exec.c +++ b/src/port/exec.c @@ -392,7 +392,7 @@ find_other_exec(const char *argv0, const char *target, if (validate_exec(retpath) != 0) return -1; - snprintf(cmd, sizeof(cmd), "\"%s\" -V 2>%s", retpath, DEVNULL); + snprintf(cmd, sizeof(cmd), "\"%s\" -V", retpath); if (!pipe_read_line(cmd, line, sizeof(line))) return -1; @@ -422,12 +422,21 @@ pipe_read_line(char *cmd, char *line, int maxsize) fflush(stdout); fflush(stderr); + errno = 0; if ((pgver = popen(cmd, "r")) == NULL) + { + perror("popen failure"); return NULL; + } + errno = 0; if (fgets(line, maxsize, pgver) == NULL) { - perror("fgets failure"); + if (feof(pgver)) + fprintf(stderr, "no data was returned by command \"%s\"\n", cmd); + else + perror("fgets failure"); + pclose(pgver); /* no error checking */ return NULL; } |