]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - embedded/libs4c/keyval/keyvalpb.c
Embedded code-base updated to actual version from uLan repository.
[lincan.git] / embedded / libs4c / keyval / keyvalpb.c
index 8dd6d1e84952e2863e22f513756619e506a43521..e1f48b3ece42ed8e959479868179c86126f4d28c 100644 (file)
@@ -17,7 +17,7 @@
   some of the licenses, he/she can delete appropriate line.
   Warning, if you delete all lines, you are not allowed to
   distribute source code and/or binaries utilizing code.
-  
+
   See files COPYING and README for details.
 
  *******************************************************************/
@@ -57,16 +57,16 @@ kvpb_sum_t kvpb_memsum(KVPB_DPTRTYPE uint8_t *base, kvpb_size_t size)
  * File: keyvalpb.c
  */
 KVPB_DPTRTYPE kvpb_sum_t *kvpb_get_psum(kvpb_block_t *kvpb_block,
-                                  KVPB_DPTRTYPE uint8_t *base, kvpb_size_t size) 
+                                  KVPB_DPTRTYPE uint8_t *base, kvpb_size_t size)
 #else
 KVPB_DPTRTYPE kvpb_sum_t *__kvpb_get_psum(
-                                  KVPB_DPTRTYPE uint8_t *base, kvpb_size_t size) 
+                                  KVPB_DPTRTYPE uint8_t *base, kvpb_size_t size)
 #endif
 {
   KVPB_DPTRTYPE kvpb_sum_t *psum;
   psum=kvpb_psum_align(kvpb_block,(KVPB_DPTRTYPE kvpb_sum_t*)(base+size)-1);
   while((KVPB_DPTRTYPE uint8_t*)psum>=base) {
-    if (*kvpb_psum_valid_loc(kvpb_block,psum)!=0) 
+    if (*kvpb_psum_valid_loc(kvpb_block,psum)!=0)
       return psum;
     psum=kvpb_psum_align(kvpb_block,psum-1);
   }
@@ -142,9 +142,9 @@ int __kvpb_check(uint8_t mode)
   KVPB_DPTRTYPE uint8_t *p;
   KVPB_LOCALDATA int ret=-1;
   KVPB_LOCALDATA kvpb_sum_t sum;
-  
+
   kvpb_block->flags&=~KVPB_DESC_USE2ND;
-  
+
   p=kvpb_region_base(kvpb_block,0);
   kvpb_block->psum1=kvpb_get_psum(kvpb_block,p,kvpb_block->size);
   if (kvpb_block->psum1) {
@@ -172,7 +172,7 @@ int __kvpb_check(uint8_t mode)
     if(ret>=0)
       ret=0;
   }
-  
+
   if(ret){
     if(!mode) {
       kvpb_block->flags|=KVPB_DESC_RO;
@@ -207,7 +207,7 @@ int __kvpb_check(uint8_t mode)
       kvpb_block->flags&=~KVPB_DESC_RO;
     }
   }
-  kvpb_block_flush(kvpb_block); 
+  kvpb_block_flush(kvpb_block);
   if(ret>=0) kvpb_block->flags|=KVPB_DESC_VALID;
   return ret;
 }
@@ -236,7 +236,7 @@ KVPB_DPTRTYPE kvpb_key_t *__kvpb_first(uint8_t mode)
   }
   while(*kvpb_keyid_valid(kvpb_block,key)==KVPB_KEYID_INVALID) {
     key=kvpb_next(kvpb_block,key);
-    if (!key) 
+    if (!key)
       return NULL;
   }
   return key->size!=KVPB_EMPTY?key:NULL;
@@ -310,9 +310,9 @@ KVPB_DPTRTYPE kvpb_key_t *__kvpb_find(kvpb_keyid_t keyid, uint8_t mode, KVPB_DPT
  * Return Value: Operation cannot be finished.
  * File: keyvalpb.c
  */
-int kvpb_compact_region(kvpb_block_t *kvpb_block, uint8_t mode, kvpb_keyid_t keyid) 
+int kvpb_compact_region(kvpb_block_t *kvpb_block, uint8_t mode, kvpb_keyid_t keyid)
 #else
-int __kvpb_compact_region(uint8_t mode, kvpb_keyid_t keyid) 
+int __kvpb_compact_region(uint8_t mode, kvpb_keyid_t keyid)
 #endif
 {
   KVPB_DPTRTYPE uint8_t *p;
@@ -321,22 +321,24 @@ int __kvpb_compact_region(uint8_t mode, kvpb_keyid_t keyid)
   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;
-  kvpb_block->psum1=kvpb_psum_align(kvpb_block,
-                    (KVPB_DPTRTYPE kvpb_sum_t*)(kvpb_region_base(kvpb_block,1))-1);
   if((!mode && (kvpb_block->flags & KVPB_DESC_USE2ND))||(mode==2)) {
     if(!(kvpb_block->flags&KVPB_DESC_DOUBLE))
       return -1;
+    des=src;
     src=(KVPB_DPTRTYPE kvpb_key_t*)p;
-    des=(KVPB_DPTRTYPE kvpb_key_t*)kvpb_region_base(kvpb_block,1);
+    p=(KVPB_DPTRTYPE uint8_t *)des;
     kvpb_block->psum2=kvpb_psum_align(kvpb_block,
-                      (KVPB_DPTRTYPE kvpb_sum_t*)(kvpb_region_base(kvpb_block,2))-1);
+                      (KVPB_DPTRTYPE kvpb_sum_t*)(p+kvpb_block->size)-1);
+  } else {
+    kvpb_block->psum1=kvpb_psum_align(kvpb_block,
+                    (KVPB_DPTRTYPE kvpb_sum_t*)(p+kvpb_block->size)-1);
   }
   kvpb_block_flush(kvpb_block);
   kvpb_block_erase(kvpb_block,des,kvpb_block->size);
   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);    
+      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);
     }
@@ -397,12 +399,12 @@ int __kvpb_set_key(kvpb_keyid_t keyid, kvpb_size_t size, const void *buf)
   KVPB_DPTRTYPE kvpb_sum_t *psum;
   KVPB_DPTRTYPE kvpb_key_t *key;
   KVPB_DPTRTYPE uint8_t *p;
-  
+
   if(!(kvpb_block->flags&KVPB_DESC_VALID))
     return -1;
   if(kvpb_block->flags&KVPB_DESC_RO)
     return -1;
-  
+
   /*first region*/
   psum=kvpb_psum_align(kvpb_block,kvpb_block->psum1);
   sum=0;
@@ -429,10 +431,10 @@ int __kvpb_set_key(kvpb_keyid_t keyid, kvpb_size_t size, const void *buf)
 
   p=kvpb_region_base(kvpb_block,0);
   sum=kvpb_memsum(p,(KVPB_DPTRTYPE uint8_t*)kvpb_block->psum1-p);
-  kvpb_block_copy(kvpb_block,kvpb_block->psum1,&sum,sizeof(kvpb_sum_t));  
+  kvpb_block_copy(kvpb_block,kvpb_block->psum1,&sum,sizeof(kvpb_sum_t));
   kvpb_block_flush(kvpb_block);
   if(!(kvpb_block->flags&KVPB_DESC_DOUBLE))
-     return key?size:-1;
+    return key?size:-1;
 
   /*Write in the first region failed, switching to backup region */
   if(kvpb_block->flags&KVPB_DESC_RO){
@@ -462,7 +464,7 @@ int __kvpb_set_key(kvpb_keyid_t keyid, kvpb_size_t size, const void *buf)
     kvpb_block_copy(kvpb_block,(uint8_t*)(key+1),buf,/*align???*/ size);
   }
   kvpb_block_flush(kvpb_block);
-        
+
   p=kvpb_region_base(kvpb_block,1);
   sum=kvpb_memsum(p,(KVPB_DPTRTYPE uint8_t*)kvpb_block->psum2-p);
   kvpb_block_copy(kvpb_block,kvpb_block->psum2,&sum,sizeof(kvpb_sum_t));