Re: [PORTS] Solaris - psql returns 0 instead of 1 for file not found. - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: [PORTS] Solaris - psql returns 0 instead of 1 for file not found.
Date
Msg-id 200509201900.j8KJ0uh11335@candle.pha.pa.us
Whole thread Raw
List pgsql-patches
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
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
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);
  }


pgsql-patches by date:

Previous
From: Neil Conway
Date:
Subject: Re: Multiple -t options for pg_dump
Next
From: Alvaro Herrera
Date:
Subject: Re: Multiple -t options for pg_dump