add support for a const void * key in avl

This commit is contained in:
Felix Fietkau 2011-04-13 20:13:42 +02:00
parent e49b34f912
commit 74eddc472d
2 changed files with 6 additions and 5 deletions

View file

@ -46,7 +46,7 @@ static int ubusd_alloc_event_pattern(struct ubus_client *cl, struct blob_attr *m
struct event_source *ev; struct event_source *ev;
struct ubus_object *obj; struct ubus_object *obj;
struct blob_attr *attr[EVREG_LAST]; struct blob_attr *attr[EVREG_LAST];
char *pattern; char *pattern, *name;
uint32_t id; uint32_t id;
bool partial = false; bool partial = false;
int len; int len;
@ -82,8 +82,9 @@ static int ubusd_alloc_event_pattern(struct ubus_client *cl, struct blob_attr *m
list_add(&ev->list, &obj->events); list_add(&ev->list, &obj->events);
ev->obj = obj; ev->obj = obj;
ev->partial = partial; ev->partial = partial;
ev->avl.key = (void *) (ev + 1); name = (char *) (ev + 1);
strcpy(ev->avl.key, pattern); strcpy(name, pattern);
ev->avl.key = name;
avl_insert(&patterns, &ev->avl); avl_insert(&patterns, &ev->avl);
return 0; return 0;

View file

@ -135,7 +135,7 @@ struct ubus_object *ubusd_create_object(struct ubus_client *cl, struct blob_attr
goto free; goto free;
if (avl_insert(&path, &obj->path) != 0) { if (avl_insert(&path, &obj->path) != 0) {
free(obj->path.key); free((void *) obj->path.key);
obj->path.key = NULL; obj->path.key = NULL;
goto free; goto free;
} }
@ -158,7 +158,7 @@ void ubusd_free_object(struct ubus_object *obj)
if (obj->path.key) { if (obj->path.key) {
ubusd_send_obj_event(obj, false); ubusd_send_obj_event(obj, false);
avl_delete(&path, &obj->path); avl_delete(&path, &obj->path);
free(obj->path.key); free((void *) obj->path.key);
} }
if (!list_empty(&obj->list)) if (!list_empty(&obj->list))
list_del(&obj->list); list_del(&obj->list);