From 3f9ef2bf8c821c16ea7ed8102c64b35df9bade1d Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 28 Nov 2007 09:17:46 +0000 Subject: [PATCH] Properly recognize and announce input errors. --- src/bin/psql/input.c | 13 ++++++++++--- src/bin/psql/mainloop.c | 6 +++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/bin/psql/input.c b/src/bin/psql/input.c index be30e9fcf7..47c3d55fa4 100644 --- a/src/bin/psql/input.c +++ b/src/bin/psql/input.c @@ -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); diff --git a/src/bin/psql/mainloop.c b/src/bin/psql/mainloop.c index 5a8c96863d..dcb5e4ac0a 100644 --- a/src/bin/psql/mainloop.c +++ b/src/bin/psql/mainloop.c @@ -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