mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 13:02:28 +01:00
980868eb4e
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.
35 lines
1.3 KiB
C
35 lines
1.3 KiB
C
/* Copyright (C) 2000 MySQL AB
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
|
|
/* readline for batch mode */
|
|
|
|
typedef struct st_line_buffer
|
|
{
|
|
File file;
|
|
char *buffer; /* The buffer itself, grown as needed. */
|
|
char *end; /* Pointer at buffer end */
|
|
char *start_of_line,*end_of_line;
|
|
uint bufread; /* Number of bytes to get with each read(). */
|
|
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);
|
|
extern void batch_readline_end(LINE_BUFFER *buffer);
|