Support for dynamc keys.

FossilOrigin-Name: 3d1f1b8e659560761b88814c32b1d78b4093d28a9e9e0f7e52c551743055a589
This commit is contained in:
7u83@mail.ru 2015-05-04 05:36:11 +00:00
parent f7f00c22e9
commit 533fb98dbb
1 changed files with 36 additions and 3 deletions

View File

@ -8,6 +8,7 @@
* @{
*/
/*
static int mbag_bstr16str(void *item,char *dst)
{
mbag_item_t *i= item;
@ -27,7 +28,7 @@ static int mbag_bstr16str(void *item,char *dst)
}
return d-dst;
}
*/
static int mbag_strstr(void *item,char *dst)
{
@ -42,15 +43,17 @@ static struct mbag_item * mbag_fromstr(const char *src)
return NULL;
i->type = MBAG_STR;
i->dynid=0;
i->data = strndup(src,2000);
return i;
}
/*
const struct mbag_typedef mbag_type_byte = {
"byte",NULL
};
*/
/*
const struct mbag_typedef mbag_type_word = {
@ -58,9 +61,11 @@ const struct mbag_typedef mbag_type_word = {
};
*/
/*
const struct mbag_typedef mbag_type_dword = {
"dword",NULL
};
*/
const struct mbag_typedef mbag_type_const_data = {
"data",NULL
@ -70,14 +75,19 @@ const struct mbag_typedef mbag_type_bstr = {
"bstr",free
};
/*
const struct mbag_typedef mbag_type_bstr16 = {
"bstr16",free,mbag_bstr16str
};
*/
const struct mbag_typedef mbag_type_str = {
"str",free,mbag_strstr,mbag_fromstr
};
/*
const struct mbag_typedef mbag_type_vendorstr = {
"vendorstr",free
@ -109,6 +119,10 @@ const struct mbag_typedef mbag_type_mbag = {
"mbag",mbag_type_mbag_del
};
const struct mbag_typedef mbag_type_mbag_dyn = {
"mbag",mbag_type_mbag_del
};
static void mbag_del_data(struct mbag_item *i)
{
@ -120,7 +134,11 @@ static void mbag_del_data(struct mbag_item *i)
static void mbag_del_fun(void *e)
{
mbag_item_t * i = (mbag_item_t*)e;
if (i->dynid){
free((void*)i->id);
}
mbag_del_data(e);
free(e);
}
@ -158,6 +176,19 @@ mbag_t mbag_create()
}
mbag_item_t *mbag_item_new(mbagtype_t type)
{
struct mbag_item *i= malloc(sizeof(mbag_item_t));
if (!i)
return NULL;
i->type = type;
i->dynid=0;
return i;
}
struct mbag_item *mbag_item_create(mbag_t s, const char *id)
{
struct mbag_item is;
@ -174,6 +205,7 @@ struct mbag_item *mbag_item_create(mbag_t s, const char *id)
if (!i)
return NULL;
i->id = id;
i->dynid=0;
return mavl_add(s, i);
}
@ -194,6 +226,7 @@ struct mbag_item *mbag_i_item_create(mbag_t s, uint32_t id)
if (!i)
return NULL;
i->iid = id;
i->dynid=0;
return mavl_add(s, i);
}