X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev%2Flib%2Flibudev-list.c;h=9d157616a8c36ce4787837ae63705b582feec4b9;hp=ac57ee4ebf3fe9cc98babd82bc82821c4b2c188f;hb=ec2dd02e2a2748134f9c8347e12b802b42dea6b5;hpb=2c09b3b41d8feffee746eefe079619e6b7484fa8 diff --git a/udev/lib/libudev-list.c b/udev/lib/libudev-list.c index ac57ee4eb..9d157616a 100644 --- a/udev/lib/libudev-list.c +++ b/udev/lib/libudev-list.c @@ -28,8 +28,8 @@ #include "libudev-private.h" struct udev_list_entry { - struct udev *udev; struct udev_list_node node; + struct udev *udev; struct udev_list_node *list; char *name; char *value; @@ -43,14 +43,14 @@ void udev_list_init(struct udev_list_node *list) list->prev = list; } -static int list_is_empty(struct udev_list_node *list) +int udev_list_is_empty(struct udev_list_node *list) { return list->next == list; } -static void list_node_insert_between(struct udev_list_node *new, - struct udev_list_node *prev, - struct udev_list_node *next) +static void udev_list_node_insert_between(struct udev_list_node *new, + struct udev_list_node *prev, + struct udev_list_node *next) { next->prev = new; new->next = next; @@ -58,7 +58,12 @@ static void list_node_insert_between(struct udev_list_node *new, prev->next = new; } -static void list_node_remove(struct udev_list_node *entry) +void udev_list_node_append(struct udev_list_node *new, struct udev_list_node *list) +{ + udev_list_node_insert_between(new, list->prev, list); +} + +void udev_list_node_remove(struct udev_list_node *entry) { struct udev_list_node *prev = entry->prev; struct udev_list_node *next = entry->next; @@ -81,17 +86,24 @@ static struct udev_list_entry *list_node_to_entry(struct udev_list_node *node) } /* insert entry into a list as the last element */ -static void list_entry_append(struct udev_list_entry *new, struct udev_list_node *list) +void udev_list_entry_append(struct udev_list_entry *new, struct udev_list_node *list) { /* inserting before the list head make the node the last node in the list */ - list_node_insert_between(&new->node, list->prev, list); + udev_list_node_insert_between(&new->node, list->prev, list); new->list = list; } +/* remove entry from a list */ +void udev_list_entry_remove(struct udev_list_entry *entry) +{ + udev_list_node_remove(&entry->node); + entry->list = NULL; +} + /* insert entry into a list, before a given existing entry */ -static void list_entry_insert_before(struct udev_list_entry *new, struct udev_list_entry *entry) +void udev_list_entry_insert_before(struct udev_list_entry *new, struct udev_list_entry *entry) { - list_node_insert_between(&new->node, entry->node.prev, &entry->node); + udev_list_node_insert_between(&new->node, entry->node.prev, &entry->node); new->list = entry->list; } @@ -105,17 +117,17 @@ struct udev_list_entry *udev_list_entry_add(struct udev *udev, struct udev_list_ if (unique) udev_list_entry_foreach(entry_loop, udev_list_get_entry(list)) { if (strcmp(entry_loop->name, name) == 0) { - info(udev, "'%s' is already in the list\n", name); + dbg(udev, "'%s' is already in the list\n", name); free(entry_loop->value); if (value == NULL) { entry_loop->value = NULL; - info(udev, "'%s' value unset\n", name); + dbg(udev, "'%s' value unset\n", name); return entry_loop; } entry_loop->value = strdup(value); if (entry_loop->value == NULL) return NULL; - info(udev, "'%s' value replaced with '%s'\n", name, value); + dbg(udev, "'%s' value replaced with '%s'\n", name, value); return entry_loop; } } @@ -145,39 +157,33 @@ struct udev_list_entry *udev_list_entry_add(struct udev *udev, struct udev_list_ } } if (entry_loop != NULL) - list_entry_insert_before(entry_new, entry_loop); + udev_list_entry_insert_before(entry_new, entry_loop); else - list_entry_append(entry_new, list); - info(udev, "'%s=%s' added\n", entry_new->name, entry_new->value); + udev_list_entry_append(entry_new, list); + dbg(udev, "'%s=%s' added\n", entry_new->name, entry_new->value); return entry_new; } -void udev_list_entry_remove(struct udev_list_entry *entry) +void udev_list_entry_delete(struct udev_list_entry *entry) { - list_node_remove(&entry->node); + udev_list_node_remove(&entry->node); free(entry->name); free(entry->value); free(entry); } -void udev_list_cleanup(struct udev *udev, struct udev_list_node *list) +void udev_list_cleanup_entries(struct udev *udev, struct udev_list_node *list) { struct udev_list_entry *entry_loop; struct udev_list_entry *entry_tmp; - list_entry_foreach_safe(entry_loop, entry_tmp, udev_list_get_entry(list)) - udev_list_entry_remove(entry_loop); -} - -void udev_list_entry_move_to_end(struct udev_list_entry *list_entry) -{ - list_node_remove(&list_entry->node); - list_node_insert_between(&list_entry->node, list_entry->list->prev, list_entry->list); + udev_list_entry_foreach_safe(entry_loop, entry_tmp, udev_list_get_entry(list)) + udev_list_entry_delete(entry_loop); } struct udev_list_entry *udev_list_get_entry(struct udev_list_node *list) { - if (list_is_empty(list)) + if (udev_list_is_empty(list)) return NULL; return list_node_to_entry(list->next); }