Re: [PORTS] Solaris - psql returns 0 instead of 1 for file not found.
Bruce Momjian <[email protected]>
| Newsgroups | gmane.comp.db.postgresql.ports,gmane.comp.db.postgresql.devel.patches |
|---|---|
| Message-ID | <[email protected]> |
I have applied the following patch to 8.1beta and 8.0.X to return the proper failure value for a psql -f filename open failure. The bug was that process_file() was returning false for failure, while the call site expected MainLoop() return values, meaning false/0 was success. --------------------------------------------------------------------------- Clark, Andrew wrote: > Hi all, > > I've found the when psql is used with the -f flag and the specified file > doesn't exist the rc value is 0. > > $ uname -a > SunOS bld 5.8 Generic_108528-29 sun4u sparc SUNW,Sun-Fire-V440 > > $ psql -V > psql (PostgreSQL) 8.0.2 > > $ ls foo > foo: No such file or directory > > $ psql -f foo > foo: No such file or directory > > $ echo $? > 0 > > However, in the man page for psql it says: > > EXIT STATUS > psql returns 0 to the shell if it finished normally, 1 if a > fatal error of its own (out of memory, file not found) > occurs, ... > > I'm assuming this is the same with other platforms, but I only use > PostgreSQL on Solaris. > > Has this been fix in 8.0.3? > > Cheers, > Andrew -- Bruce Momjian | http://candle.pha.pa.us [email protected] | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 ---------------------------(end of broadcast)--------------------------- TIP 9: In versions below 8.0, the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match
/bjm/diff
(text/plain, 2.2 KB)
Index: src/bin/psql/command.c
===================================================================
RCS file: /cvsroot/pgsql/src/bin/psql/command.c,v
retrieving revision 1.152
diff -c -c -r1.152 command.c
*** src/bin/psql/command.c 14 Aug 2005 18:49:30 -0000 1.152
--- src/bin/psql/command.c 20 Sep 2005 18:43:41 -0000
***************
*** 1314,1320 ****
* process_file
*
* Read commands from filename and then them to the main processing loop
! * Handler for \i, but can be used for other things as well.
*/
int
process_file(char *filename)
--- 1314,1321 ----
* process_file
*
* Read commands from filename and then them to the main processing loop
! * Handler for \i, but can be used for other things as well. Returns
! * MainLoop() error code.
*/
int
process_file(char *filename)
***************
*** 1324,1330 ****
char *oldfilename;
if (!filename)
! return false;
canonicalize_path(filename);
fd = fopen(filename, PG_BINARY_R);
--- 1325,1331 ----
char *oldfilename;
if (!filename)
! return EXIT_FAILURE;
canonicalize_path(filename);
fd = fopen(filename, PG_BINARY_R);
***************
*** 1332,1338 ****
if (!fd)
{
psql_error("%s: %s\n", filename, strerror(errno));
! return false;
}
oldfilename = pset.inputfile;
--- 1333,1339 ----
if (!fd)
{
psql_error("%s: %s\n", filename, strerror(errno));
! return EXIT_FAILURE;
}
oldfilename = pset.inputfile;
Index: src/bin/psql/startup.c
===================================================================
RCS file: /cvsroot/pgsql/src/bin/psql/startup.c,v
retrieving revision 1.122
diff -c -c -r1.122 startup.c
*** src/bin/psql/startup.c 5 Sep 2005 18:05:13 -0000 1.122
--- src/bin/psql/startup.c 20 Sep 2005 18:43:41 -0000
***************
*** 690,698 ****
sprintf(psqlrc, "%s-%s", filename, PG_VERSION);
if (access(psqlrc, R_OK) == 0)
! process_file(psqlrc);
else if (access(filename, R_OK) == 0)
! process_file(filename);
free(psqlrc);
}
--- 690,698 ----
sprintf(psqlrc, "%s-%s", filename, PG_VERSION);
if (access(psqlrc, R_OK) == 0)
! (void)process_file(psqlrc);
else if (access(filename, R_OK) == 0)
! (void)process_file(filename);
free(psqlrc);
}