summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2012-07-27 19:31:13 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2012-07-27 19:31:13 -0400
commit9ae8ebe0b221d9d547adfbfae74bd62e73e39fcd (patch)
treedfc85983a56abbf4a69b64d7abff4957935af2d4
parentc9a2532c832cdc87dfa62bfdfd247707e3906e00 (diff)
downloadpostgresql-9ae8ebe0b221d9d547adfbfae74bd62e73e39fcd.tar.gz
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.
-rw-r--r--src/port/exec.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/port/exec.c b/src/port/exec.c
index 24bcd806c0..1687c9c972 100644
--- a/src/port/exec.c
+++ b/src/port/exec.c
@@ -322,7 +322,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;
@@ -352,12 +352,20 @@ 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;
}