summaryrefslogtreecommitdiff
path: root/client/my_readline.h
diff options
context:
space:
mode:
authorDmitry Shulga <Dmitry.Shulga@oracle.com>2011-02-05 11:02:00 +0600
committerDmitry Shulga <Dmitry.Shulga@oracle.com>2011-02-05 11:02:00 +0600
commit980868eb4e4db550497ba40674b5b64f2e062cd9 (patch)
tree0081afb284ed8dce0f349971d24915910f875a70 /client/my_readline.h
parent7c8c7c27b5ff72e17b126e8db0c9e40be9673a15 (diff)
downloadmariadb-git-980868eb4e4db550497ba40674b5b64f2e062cd9.tar.gz
Fixed bug#57450 - mysql client enter in an infinite loop
if the standard input is a directory. The problem is that mysql monitor try to read from stdin without checking input source type. The solution is to stop reading data from standard input if a call to read(2) failed. A new test case was added into mysql.test. client/my_readline.h: Data members error and truncated was added to LINE_BUFFER structure. These data members used instead of out parameters in functions batch_readline, intern_read_line. client/mysql.cc: read_and_execute() was modified: set status.exit_status to 1 when the error occured while reading the next command line in non-interactive mode. Also the value of the truncated attribute of structure LINE_BUFF is taken into account only for non-iteractive mode. client/readline.cc: intern_read_line() was modified: cancel reading from input if fill_buffer() returns -1, e.g. if call to read failed. batch_readline was modified: set the error data member of LINE_BUFFER structure to value of my_errno when system error happened during call to my_read/my_realloc. mysql-test/t/mysql.test: Test for bug#57450 was added.
Diffstat (limited to 'client/my_readline.h')
-rw-r--r--client/my_readline.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/client/my_readline.h b/client/my_readline.h
index 62ad19bece9..3376fc81761 100644
--- a/client/my_readline.h
+++ b/client/my_readline.h
@@ -25,9 +25,11 @@ typedef struct st_line_buffer
uint eof;
ulong max_size;
ulong read_length; /* Length of last read string */
+ int error;
+ bool truncated;
} LINE_BUFFER;
extern LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file);
extern LINE_BUFFER *batch_readline_command(LINE_BUFFER *buffer, char * str);
-extern char *batch_readline(LINE_BUFFER *buffer, bool *truncated);
+extern char *batch_readline(LINE_BUFFER *buffer);
extern void batch_readline_end(LINE_BUFFER *buffer);