16
16
/* readline for batch mode */
18
#include <drizzled/global.h>
18
#include "client_priv.h"
19
19
#include <mysys/my_sys.h>
20
20
#include <mystrings/m_string.h>
21
21
#include "my_readline.h"
25
static bool init_line_buffer(LINE_BUFFER *buffer,File file,uint32_t size,
23
static bool init_line_buffer(LINE_BUFFER *buffer,File file,ulong size,
27
25
static bool init_line_buffer_from_string(LINE_BUFFER *buffer,char * str);
28
26
static size_t fill_buffer(LINE_BUFFER *buffer);
29
static char *intern_read_line(LINE_BUFFER *buffer,uint32_t *out_length);
32
LINE_BUFFER *batch_readline_init(uint32_t max_size,FILE *file)
27
static char *intern_read_line(LINE_BUFFER *buffer,ulong *out_length);
30
LINE_BUFFER *batch_readline_init(ulong max_size,FILE *file)
34
32
LINE_BUFFER *line_buff;
35
if (!(line_buff=(LINE_BUFFER*) malloc(sizeof(*line_buff))))
33
if (!(line_buff=(LINE_BUFFER*)
34
my_malloc(sizeof(*line_buff),MYF(MY_WME | MY_ZEROFILL))))
37
memset(line_buff, 0, sizeof(*line_buff));
38
36
if (init_line_buffer(line_buff,fileno(file),IO_SIZE,max_size))
38
my_free(line_buff,MYF(0));
73
71
LINE_BUFFER *batch_readline_command(LINE_BUFFER *line_buff, char * str)
77
if (!(line_buff=(LINE_BUFFER*) malloc(sizeof(*line_buff))))
74
if (!(line_buff=(LINE_BUFFER*)
75
my_malloc(sizeof(*line_buff),MYF(MY_WME | MY_ZEROFILL))))
79
memset(line_buff, 0, sizeof(*line_buff));
81
77
if (init_line_buffer_from_string(line_buff,str))
79
my_free(line_buff,MYF(0));
92
88
******************************************************************************/
95
init_line_buffer(LINE_BUFFER *buffer,File file,uint32_t size,uint32_t max_buffer)
91
init_line_buffer(LINE_BUFFER *buffer,File file,ulong size,ulong max_buffer)
98
94
buffer->bufread=size;
99
95
buffer->max_size=max_buffer;
100
if (!(buffer->buffer = (char*) malloc(buffer->bufread+1)))
96
if (!(buffer->buffer = (char*) my_malloc(buffer->bufread+1,
97
MYF(MY_WME | MY_FAE))))
102
99
buffer->end_of_line=buffer->end=buffer->buffer;
103
100
buffer->buffer[0]=0; /* For easy start test */
114
111
uint old_length=(uint)(buffer->end - buffer->buffer);
115
112
uint length= (uint) strlen(str);
116
char * tmpptr= (char*)realloc(buffer->buffer, old_length+length+2);
113
if (!(buffer->buffer= buffer->start_of_line= buffer->end_of_line=
114
(char*) my_realloc((uchar*) buffer->buffer, old_length+length+2,
115
MYF(MY_FAE|MY_ALLOW_ZERO_PTR))))
120
buffer->buffer= buffer->start_of_line= buffer->end_of_line= tmpptr;
121
117
buffer->end= buffer->buffer + old_length;
123
119
buffer->end[-1]=' ';
154
150
if ((read_count*=IO_SIZE))
156
152
buffer->bufread *= 2;
157
if (!(buffer->buffer = (char*) realloc(buffer->buffer,
153
if (!(buffer->buffer = (char*) my_realloc(buffer->buffer,
155
MYF(MY_WME | MY_FAE))))
159
156
return (uint) -1;
160
157
buffer->start_of_line=buffer->buffer+start_offset;
161
158
buffer->end=buffer->buffer+bufbytes;
164
161
/* Shift stuff down. */
165
162
if (buffer->start_of_line != buffer->buffer)
167
memmove(buffer->buffer, buffer->start_of_line, (uint) bufbytes);
164
memcpy(buffer->buffer, buffer->start_of_line, (uint) bufbytes);
168
165
buffer->end=buffer->buffer+bufbytes;
171
168
/* Read in new stuff. */
172
if ((read_count= my_read(buffer->file, (unsigned char*) buffer->end, read_count,
169
if ((read_count= my_read(buffer->file, (uchar*) buffer->end, read_count,
173
170
MYF(MY_WME))) == MY_FILE_ERROR)
174
171
return (size_t) -1;
210
207
pos--; /* break line here */
212
209
buffer->end_of_line=pos+1;
213
*out_length=(uint32_t) (pos + 1 - buffer->eof - buffer->start_of_line);
210
*out_length=(ulong) (pos + 1 - buffer->eof - buffer->start_of_line);
214
211
return(buffer->start_of_line);