Commit d5281263 authored by sasha@mysql.sashanet.com's avatar sasha@mysql.sashanet.com
Browse files

fixed bugs in IO_CACHE and Load_event constructor. The code now passes

replication test suite
parent 02ee7434
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@

void my_b_seek(IO_CACHE *info,my_off_t pos)
{
  info->seek_not_done=0;
  info->seek_not_done=1;
  info->pos_in_file=pos;
  info->rc_pos=info->rc_end=info->buffer;
}
+5 −5
Original line number Diff line number Diff line
@@ -256,7 +256,7 @@ void Log_event::print_header(FILE* file)
{
  fputc('#', file);
  print_timestamp(file);
  fprintf(file, " server id  %ld ", server_id); 
  fprintf(file, " server id  %d ", server_id); 
}

void Log_event::print_timestamp(FILE* file, time_t* ts)
@@ -418,7 +418,7 @@ Query_log_event::Query_log_event(IO_CACHE* file, time_t when_arg,
Query_log_event::Query_log_event(const char* buf, int event_len):
  Log_event(buf),data_buf(0), query(NULL), db(NULL)
{
  if (event_len < QUERY_EVENT_OVERHEAD)
  if ((uint)event_len < QUERY_EVENT_OVERHEAD)
    return;				
  ulong data_len;
  buf += EVENT_LEN_OFFSET;
@@ -577,10 +577,10 @@ Load_log_event::Load_log_event(const char* buf, int event_len):
{
  ulong data_len;

  if(event_len < (LOAD_EVENT_OVERHEAD + LOG_EVENT_HEADER_LEN))
  if((uint)event_len < (LOAD_EVENT_OVERHEAD + LOG_EVENT_HEADER_LEN))
    return;

  buf += EVENT_LEN_OFFSET;
  memcpy(&sql_ex, buf + LOAD_HEADER_LEN + 4, sizeof(sql_ex));
  data_len = event_len;
  
  if(!(data_buf = (char*)my_malloc(data_len + 1, MYF(MY_WME))))
@@ -671,7 +671,7 @@ void Load_log_event::print(FILE* file, bool short_form)
  }
     
  if((int)skip_lines > 0)
    fprintf(file, " IGNORE %ld LINES ", skip_lines);
    fprintf(file, " IGNORE %d LINES ", skip_lines);

  if (num_fields)
  {
+11 −6
Original line number Diff line number Diff line
@@ -241,11 +241,16 @@ int _my_b_read(register IO_CACHE *info, byte *Buffer, uint Count)
  uint length,diff_length,left_length;
  my_off_t max_length, pos_in_file;
  
  if((left_length=(uint) (info->rc_end-info->rc_pos)))
  {
    if(Count < left_length)
      left_length = Count;
    memcpy(Buffer,info->rc_pos,
	 (size_t) (left_length=(uint) (info->rc_end-info->rc_pos)));
	   (size_t) (left_length));
    Buffer+=left_length;
    Count-=left_length;
  pos_in_file=info->pos_in_file+(uint) (info->rc_end - info->buffer);
  }
  pos_in_file=info->pos_in_file+ left_length;
  if (info->seek_not_done)
  {					/* File touched, do seek */
    VOID(my_seek(info->file,pos_in_file,MY_SEEK_SET,MYF(0)));