diff options
Diffstat (limited to 'server-tools/instance-manager/commands.cc')
-rw-r--r-- | server-tools/instance-manager/commands.cc | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/server-tools/instance-manager/commands.cc b/server-tools/instance-manager/commands.cc index ad9d46be1ed..0f801c8cc7e 100644 --- a/server-tools/instance-manager/commands.cc +++ b/server-tools/instance-manager/commands.cc @@ -470,7 +470,8 @@ int Show_instance_log::execute(struct st_net *net, ulong connection_id) size_t buff_size; int read_len; /* calculate buffer size */ - struct stat file_stat; + MY_STAT file_stat; + Buffer read_buff; /* my_fstat doesn't use the flag parameter */ if (my_fstat(fd, &file_stat, MYF(0))) @@ -478,13 +479,16 @@ int Show_instance_log::execute(struct st_net *net, ulong connection_id) buff_size= (size - offset); + read_buff.reserve(0, buff_size); + /* read in one chunk */ read_len= my_seek(fd, file_stat.st_size - size, MY_SEEK_SET, MYF(0)); - char *bf= (char*) malloc(sizeof(char)*buff_size); - if ((read_len= my_read(fd, bf, buff_size, MYF(0))) < 0) + if ((read_len= my_read(fd, (byte*) read_buff.buffer, + buff_size, MYF(0))) < 0) return ER_READ_FILE; - store_to_protocol_packet(&send_buff, (char*) bf, &position, read_len); + store_to_protocol_packet(&send_buff, read_buff.buffer, + &position, read_len); close(fd); } else @@ -605,7 +609,7 @@ int Show_instance_log_files::execute(struct st_net *net, ulong connection_id) store_to_protocol_packet(&send_buff, "", &position); store_to_protocol_packet(&send_buff, (char*) "0", &position); } - else if (S_ISREG(file_stat.st_mode)) + else if (MY_S_ISREG(file_stat.st_mode)) { store_to_protocol_packet(&send_buff, (char*) log_files->value, @@ -693,7 +697,6 @@ int Set_option::correct_file(int skip) error= modify_defaults_file(Options::config_file, option, option_value, instance_name, skip); - switch (error) { case 0: |