X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/1e832aa31a16b4c9c36ceae8e34f1d7190e65e99..243fec4450d3a3246f3f0d92751a95daef7c1503:/embedded/libs4c/keyval/keyvalpb.c diff --git a/embedded/libs4c/keyval/keyvalpb.c b/embedded/libs4c/keyval/keyvalpb.c index e1f48b3..394a559 100644 --- a/embedded/libs4c/keyval/keyvalpb.c +++ b/embedded/libs4c/keyval/keyvalpb.c @@ -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); }