]> granicus.if.org Git - postgresql/commitdiff
Properly recognize and announce input errors.
authorPeter Eisentraut <peter_e@gmx.net>
Wed, 28 Nov 2007 09:17:46 +0000 (09:17 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Wed, 28 Nov 2007 09:17:46 +0000 (09:17 +0000)
src/bin/psql/input.c
src/bin/psql/mainloop.c

index be30e9fcf78b4bf7c96bdc616b811bea978fe50d..47c3d55fa48cb4f0ce6d21322b0bb5c24939baf7 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2000-2007, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/input.c,v 1.62 2007/01/05 22:19:49 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/input.c,v 1.63 2007/11/28 09:17:46 petere Exp $
  */
 #include "postgres_fe.h"
 
@@ -147,7 +147,7 @@ pg_send_history(PQExpBuffer history_buf)
  * gets_fromFile
  *
  * Gets a line of noninteractive input from a file (which could be stdin).
- * The result is a malloc'd string.
+ * The result is a malloc'd string, or NULL on EOF or input error.
  *
  * Caller *must* have set up sigint_interrupt_jmp before calling.
  *
@@ -179,9 +179,16 @@ gets_fromFile(FILE *source)
                /* Disable SIGINT again */
                sigint_interrupt_enabled = false;
 
-               /* EOF? */
+               /* EOF or error? */
                if (result == NULL)
+               {
+                       if (ferror(source))
+                       {
+                               psql_error("could not read from input file: %s\n", strerror(errno));
+                               return NULL;
+                       }
                        break;
+               }
 
                appendPQExpBufferStr(buffer, line);
 
index 5a8c96863d7719f13058a42672cb814fe26e6eb4..dcb5e4ac0ab69c97a4bc46771c342480f90b1418 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2000-2007, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/mainloop.c,v 1.85 2007/01/05 22:19:49 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/mainloop.c,v 1.86 2007/11/28 09:17:46 petere Exp $
  */
 #include "postgres_fe.h"
 #include "mainloop.h"
@@ -129,7 +129,11 @@ MainLoop(FILE *source)
                        line = gets_interactive(get_prompt(prompt_status));
                }
                else
+               {
                        line = gets_fromFile(source);
+                       if (!line && ferror(source))
+                               successResult = EXIT_FAILURE;
+               }
 
                /*
                 * query_buf holds query already accumulated.  line is the malloc'd