New members for mbag_typedef.

FossilOrigin-Name: 054af4c80f4e6772e82f471c78f1a1794392551a31f64b96ef44367c40ad72fe
This commit is contained in:
7u83@mail.ru 2015-04-29 17:31:40 +00:00
parent 5e339914e9
commit 4580d0d310
2 changed files with 43 additions and 10 deletions

View File

@ -1,36 +1,67 @@
#include "mbag.h"
#include "capwap.h"
#include "format.h"
static int mbag_bstr16str(void *item,char *dst)
{
mbag_item_t *i= item;
char *d = dst;
int utf8 = cw_is_utf8(bstr16_data(i->data), bstr16_len(i->data));
if (utf8) {
d += sprintf(d, "\"%.*s\"", bstr16_len(i->data), bstr16_data(i->data));
} else {
d += sprintf(d, "\".x");
d += cw_format_hex(d, bstr16_data(i->data), bstr16_len(i->data));
d += sprintf(d, "\"");
}
return d-dst;
}
static int mbag_strstr(void *item,char *dst)
{
mbag_item_t *i= item;
return sprintf(dst, "\"%s\"", i->data);
}
const struct mbag_typedef mbag_type_byte = {
NULL
"byte",NULL
};
const struct mbag_typedef mbag_type_word = {
NULL
"word",NULL
};
const struct mbag_typedef mbag_type_dword = {
NULL
"dword",NULL
};
const struct mbag_typedef mbag_type_const_data = {
NULL
"data",NULL
};
const struct mbag_typedef mbag_type_bstr = {
free
"bstr",free
};
const struct mbag_typedef mbag_type_bstr16 = {
free
"bstr16",free,mbag_bstr16str
};
const struct mbag_typedef mbag_type_str = {
free
"str",free,mbag_strstr
};
const struct mbag_typedef mbag_type_vendorstr = {
free
"vendorstr",free
};
@ -41,7 +72,7 @@ void free_avltree(void*t){
}
const struct mbag_typedef mbag_type_avltree = {
free_avltree
"mavl",free_avltree
};
@ -55,7 +86,7 @@ static void mbag_type_mbag_del(void *i)
}
const struct mbag_typedef mbag_type_mbag = {
mbag_type_mbag_del
"mbag",mbag_type_mbag_del
};

View File

@ -34,7 +34,9 @@
struct mbag_item;
struct mbag_typedef{
const char *name;
void (*del)(void*);
int (*to_str)(void*,char *dst);
};
typedef const struct mbag_typedef * mbagtype_t;