]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - embedded/libs4c/keyval/keyvalpb.c
Update of system-less architecture and board support code to actual uLAN.sf.net version.
[lincan.git] / embedded / libs4c / keyval / keyvalpb.c
index e1f48b3ece42ed8e959479868179c86126f4d28c..394a559c27f09c869697b8b82dc8eceaccae337b 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!=des)
+        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);
     }