14 static struct attr_name attr_names[]={
15 #define ATTR2(x,y) ATTR(y)
16 #define ATTR(x) { attr_##x, #x },
23 attr_from_name(const char *name)
27 for (i=0 ; i < sizeof(attr_names)/sizeof(struct attr_name) ; i++) {
28 if (! strcmp(attr_names[i].name, name))
29 return attr_names[i].attr;
35 attr_to_name(enum attr_type attr)
39 for (i=0 ; i < sizeof(attr_names)/sizeof(struct attr_name) ; i++) {
40 if (attr_names[i].attr == attr)
41 return attr_names[i].name;
47 attr_new_from_text(const char *name, const char *value)
52 ret=g_new0(struct attr, 1);
53 dbg(1,"enter name='%s' value='%s'\n", name, value);
54 attr=attr_from_name(name);
58 ret->u.item_type=item_from_name(value);
61 if (attr >= attr_type_string_begin && attr <= attr_type_string_end) {
65 if (attr >= attr_type_int_begin && attr <= attr_type_int_end) {
66 ret->u.num=atoi(value);
77 attr_search(struct attr **attrs, struct attr *last, enum attr_type attr)
79 dbg(1, "enter attrs=%p\n", attrs);
81 dbg(1,"*attrs=%p\n", *attrs);
82 if ((*attrs)->type == attr) {
91 attr_data_size(struct attr *attr)
93 if (attr->type >= attr_type_string_begin && attr->type <= attr_type_string_end) {
94 return strlen(attr->u.str)+1;
96 if (attr->type >= attr_type_int_begin && attr->type <= attr_type_int_end) {
97 return sizeof(attr->u.num);
103 attr_data_get(struct attr *attr)
105 if (attr->type >= attr_type_string_begin && attr->type <= attr_type_string_end) {
108 if (attr->type >= attr_type_int_begin && attr->type <= attr_type_int_end) {
115 attr_data_set(struct attr *attr, void *data)
117 if (attr->type >= attr_type_string_begin && attr->type <= attr_type_string_end) {
120 if (attr->type >= attr_type_int_begin && attr->type <= attr_type_int_end) {
121 attr->u.num=*((int *)data);
126 attr_free(struct attr *attr)