Fix initdb to not generate misleading error messages when postgres.bki

or other share-directory files are inaccessible for some reason other
than not existing.  Inspired by trouble report from Simon Kinsella.
This commit is contained in:
Tom Lane 2007-01-31 18:52:49 +00:00
parent 61f621b506
commit 068bf6534f
1 changed files with 19 additions and 3 deletions

View File

@ -42,7 +42,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* Portions taken from FreeBSD. * Portions taken from FreeBSD.
* *
* $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.129 2007/01/20 17:04:58 momjian Exp $ * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.130 2007/01/31 18:52:49 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -1041,10 +1041,26 @@ check_input(char *path)
{ {
struct stat statbuf; struct stat statbuf;
if (stat(path, &statbuf) != 0 || !S_ISREG(statbuf.st_mode)) if (stat(path, &statbuf) != 0)
{
if (errno == ENOENT)
fprintf(stderr,
_("%s: file \"%s\" does not exist\n"
"This means you have a corrupted installation or identified\n"
"the wrong directory with the invocation option -L.\n"),
progname, path);
else
fprintf(stderr,
_("%s: could not access file \"%s\": %s\n"
"This may mean you have a corrupted installation or identified\n"
"the wrong directory with the invocation option -L.\n"),
progname, path, strerror(errno));
exit(1);
}
if (!S_ISREG(statbuf.st_mode))
{ {
fprintf(stderr, fprintf(stderr,
_("%s: file \"%s\" does not exist\n" _("%s: file \"%s\" is not a regular file\n"
"This means you have a corrupted installation or identified\n" "This means you have a corrupted installation or identified\n"
"the wrong directory with the invocation option -L.\n"), "the wrong directory with the invocation option -L.\n"),
progname, path); progname, path);