]> rtime.felk.cvut.cz Git - lincan.git/blob - embedded/libs4c/keyval/keyval_mem_store.c
Embedded code-base updated to actual version from uLan repository.
[lincan.git] / embedded / libs4c / keyval / keyval_mem_store.c
1 /******************************************************************************/
2 /* Key Value block in RAM */
3
4 #include <malloc.h>
5 #include <string.h>
6 #include <keyvalpb.h>
7 #include <keyval_mem_store.h>
8
9 int kvpb_mem_erase(kvpb_block_t *store, void *base,int size)
10 {
11   memset(base,0xff,size);
12   return 0;
13 }
14
15 int kvpb_mem_copy(kvpb_block_t *store, void *dst,const void *src,int len)
16 {
17   memcpy(dst,src,len);
18   return 0;
19 }
20
21 #ifndef  KVPB_MINIMALIZED
22 kvpb_block_t *kvpb_store_create_ram(int size)
23 {
24   kvpb_block_t *store;
25   int res;
26
27   if(!size)
28     size=0x4000;
29
30   store = malloc(sizeof(*store));
31   if(store == NULL)
32     return NULL;
33
34   memset(store, 0, sizeof(*store));
35
36   store->base = malloc(size*2);
37   if(store->base == NULL)
38     goto error_ret;
39
40   store->size = size;
41   store->flags = KVPB_DESC_DOUBLE;
42  #ifndef  KVPB_MINIMALIZED
43   store->erase = kvpb_mem_erase,
44   store->copy = kvpb_mem_copy;
45  #endif  /* KVPB_MINIMALIZED */
46
47   kvpb_block_erase(store, store->base,store->size);
48   if(store->flags & KVPB_DESC_DOUBLE)
49     kvpb_block_erase(store, (uint8_t*)store->base+store->size,store->size);
50
51   res=kvpb_check(store,3);
52
53   if(res<0)
54     goto error_ret;
55
56   return store;
57
58  error_ret:
59   if(store)
60     free(store);
61   return NULL;
62 }
63 #endif  /* KVPB_MINIMALIZED */