~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to storage/myisam/mi_delete.c

  • Committer: Kristian Nielsen
  • Date: 2008-11-29 08:46:32 UTC
  • mto: (632.1.2 devel)
  • mto: This revision was merged to the branch mainline in revision 634.
  • Revision ID: knielsen@odin-20081129084632-1n5czk0pvf14qbk0
Take Mats'es changes from bmove()->memcpy(), and fix all of them to be
memmove() instead. I checked several of them, all of which were wrong
(due to potentially overlapping source and destination), so most
likely more of them are wrong. Painstakingly checking all of them for
whether memcpy() could be used instead would be a very big and
errorprone task, and really is not worth it.

Fixes a bunch of Valgrind errors in the test suite as well.

Show diffs side-by-side

added added

removed removed

Lines of Context:
369
369
  if (length > 0)
370
370
    bmove_upp((unsigned char*) endpos+length,(unsigned char*) endpos,(uint) (endpos-keypos));
371
371
  else
372
 
    memcpy(keypos,keypos-length, (int) (endpos-keypos)+length);
 
372
    memmove(keypos,keypos-length, (int) (endpos-keypos)+length);
373
373
  (*keyinfo->store_key)(keyinfo,keypos,&s_temp);
374
374
  /* Save pointer to next leaf */
375
375
  if (!(*keyinfo->get_key)(keyinfo,share->base.key_reflength,&keypos,ret_key))
437
437
    buff_length=mi_getint(buff);
438
438
 
439
439
    /* find keys to make a big key-page */
440
 
    memcpy(next_keypos - key_reflength, buff + 2, key_reflength);
 
440
    memmove(next_keypos - key_reflength, buff + 2, key_reflength);
441
441
    if (!_mi_get_last_key(info,keyinfo,anc_buff,anc_key,next_keypos,&length)
442
442
        || !_mi_get_last_key(info,keyinfo,leaf_buff,leaf_key,
443
443
                             leaf_buff+leaf_length,&length))
499
499
        bmove_upp((unsigned char*) endpos+t_length,(unsigned char*) endpos,
500
500
                  (uint) (endpos-keypos));
501
501
      else
502
 
        memcpy(keypos,keypos-t_length,(uint) (endpos-keypos)+t_length);
 
502
        memmove(keypos,keypos-t_length,(uint) (endpos-keypos)+t_length);
503
503
      (*keyinfo->store_key)(keyinfo,keypos,&s_temp);
504
504
      mi_putint(anc_buff,(anc_length+=t_length),key_reflength);
505
505
 
506
506
        /* Store key first in new page */
507
507
      if (nod_flag)
508
 
        memcpy(buff + 2, half_pos - nod_flag, nod_flag);
 
508
        memmove(buff + 2, half_pos - nod_flag, nod_flag);
509
509
      if (!(*keyinfo->get_key)(keyinfo,nod_flag,&half_pos,leaf_key))
510
510
        goto err;
511
511
      t_length=(int) (*keyinfo->pack_key)(keyinfo, nod_flag, (unsigned char*) 0,
513
513
                                          leaf_key, &s_temp);
514
514
      /* t_length will always be > 0 for a new page !*/
515
515
      length=(uint) ((buff+mi_getint(buff))-half_pos);
516
 
      memcpy(buff + p_length + t_length, half_pos, length);
 
516
      memmove(buff + p_length + t_length, half_pos, length);
517
517
      (*keyinfo->store_key)(keyinfo,buff+p_length,&s_temp);
518
518
      mi_putint(buff,length+t_length+p_length,nod_flag);
519
519
 
536
536
  endpos=buff+buff_length;
537
537
 
538
538
  /* find keys to make a big key-page */
539
 
  memcpy(next_keypos - key_reflength, leaf_buff+2, key_reflength);
 
539
  memmove(next_keypos - key_reflength, leaf_buff+2, key_reflength);
540
540
  next_keypos=keypos;
541
541
  if (!(*keyinfo->get_key)(keyinfo,key_reflength,&next_keypos,
542
542
                           anc_key))
552
552
                                prev_key, prev_key,
553
553
                                anc_key, &s_temp);
554
554
  if (t_length >= 0)
555
 
    memcpy(endpos+t_length,leaf_buff+p_length, leaf_length-p_length);
 
555
    memmove(endpos+t_length,leaf_buff+p_length, leaf_length-p_length);
556
556
  else                                          /* We gained space */
557
 
    memcpy(endpos, leaf_buff+((int) p_length-t_length),
558
 
           leaf_length - p_length + t_length);
 
557
    memmove(endpos, leaf_buff+((int) p_length-t_length),
 
558
            leaf_length - p_length + t_length);
559
559
 
560
560
  (*keyinfo->store_key)(keyinfo,endpos,&s_temp);
561
561
  buff_length=buff_length+leaf_length-p_length+t_length;
598
598
      bmove_upp((unsigned char*) temp_pos+t_length,(unsigned char*) temp_pos,
599
599
                (uint) (temp_pos-keypos));
600
600
    else
601
 
      memcpy(keypos,keypos-t_length,(uint) (temp_pos-keypos)+t_length);
 
601
      memmove(keypos,keypos-t_length,(uint) (temp_pos-keypos)+t_length);
602
602
    (*keyinfo->store_key)(keyinfo,keypos,&s_temp);
603
603
    mi_putint(anc_buff,(anc_length+=t_length),key_reflength);
604
604
 
605
605
    /* Store first key on new page */
606
606
    if (nod_flag)
607
 
      memcpy(leaf_buff+2, half_pos - nod_flag, nod_flag);
 
607
      memmove(leaf_buff+2, half_pos - nod_flag, nod_flag);
608
608
    if (!(length=(*keyinfo->get_key)(keyinfo,nod_flag,&half_pos,leaf_key)))
609
609
      goto err;
610
610
    t_length=(*keyinfo->pack_key)(keyinfo,nod_flag, (unsigned char*) 0,
611
611
                                  (unsigned char*) 0, (unsigned char*) 0, leaf_key, &s_temp);
612
612
    length=(uint) ((buff+buff_length)-half_pos);
613
 
    memcpy(leaf_buff + p_length + t_length, half_pos, length);
 
613
    memmove(leaf_buff + p_length + t_length, half_pos, length);
614
614
    (*keyinfo->store_key)(keyinfo,leaf_buff+p_length,&s_temp);
615
615
    mi_putint(leaf_buff,length+t_length+p_length,nod_flag);
616
616
    if (_mi_write_keypage(info,keyinfo,leaf_page,DFLT_INIT_HITS,leaf_buff))
752
752
  }
753
753
end:
754
754
  assert(page_end-start >= s_length);
755
 
  memcpy(start, start + s_length, page_end-start-s_length);
 
755
  memmove(start, start + s_length, page_end-start-s_length);
756
756
  return s_length;
757
757
} /* remove_key */