]> rtime.felk.cvut.cz Git - sysless.git/commitdiff
Do the sane things when only single copy of data block setup is used.
authorppisa <ppisa>
Sun, 22 Feb 2009 17:43:55 +0000 (17:43 +0000)
committerppisa <ppisa>
Sun, 22 Feb 2009 17:43:55 +0000 (17:43 +0000)
libs4c/keyval/keyvalpb.c

index e1f48b3ece42ed8e959479868179c86126f4d28c..7a787e98d54b614da4c7c53f97dc3f69cc4058d8 100644 (file)
@@ -319,8 +319,12 @@ int __kvpb_compact_region(uint8_t mode, kvpb_keyid_t keyid)
   KVPB_DPTRTYPE kvpb_key_t *des,*src;
 
   p=kvpb_region_base(kvpb_block,0);
-  src=(KVPB_DPTRTYPE kvpb_key_t*)kvpb_region_base(kvpb_block,1);
   des=(KVPB_DPTRTYPE kvpb_key_t*)p;
+  if(kvpb_block->flags&KVPB_DESC_DOUBLE)
+    src=(KVPB_DPTRTYPE kvpb_key_t*)kvpb_region_base(kvpb_block,1);
+  else
+    src=(KVPB_DPTRTYPE kvpb_key_t*)p;
+
   if((!mode && (kvpb_block->flags & KVPB_DESC_USE2ND))||(mode==2)) {
     if(!(kvpb_block->flags&KVPB_DESC_DOUBLE))
       return -1;
@@ -338,7 +342,8 @@ int __kvpb_compact_region(uint8_t mode, kvpb_keyid_t keyid)
   while(src) {
     int s=kvpb_chunk_align(kvpb_block,src->size+sizeof(kvpb_key_t));
     if((*kvpb_keyid_valid(kvpb_block,src)!=KVPB_KEYID_INVALID) && (src->keyid!=keyid)) {
-      kvpb_block_copy(kvpb_block,des,src,s);
+      if(src!=dst)
+        kvpb_block_copy(kvpb_block,des,src,s);
       if (kvpb_block->flags&KVPB_DESC_CHUNKWO) s+=kvpb_chunk_size(kvpb_block);
       des=(KVPB_DPTRTYPE kvpb_key_t*)((uint8_t*)des+s);
     }