X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=libudev%2Flibudev-list.c;h=e828a4e4c6d796bb9116b20982ac9948dc795e8d;hp=182d75aa8a201d116f0fdb4c1231b6d6a318aa4a;hb=e3c14a7ff3931e4c09711966e3a82fd8f98e568a;hpb=48a9b173e88738ff4eefb3519f1d27711b417c8d diff --git a/libudev/libudev-list.c b/libudev/libudev-list.c index 182d75aa8..e828a4e4c 100644 --- a/libudev/libudev-list.c +++ b/libudev/libudev-list.c @@ -19,16 +19,29 @@ #include "libudev.h" #include "libudev-private.h" +/** + * SECTION:libudev-list + * @short_description: list operation + * + * Libudev list operations. + */ + +/** + * udev_list_entry: + * + * Opaque object representing one entry in a list. An entry contains + * contains a name, and optionally a value. + */ struct udev_list_entry { struct udev_list_node node; struct udev *udev; struct udev_list_node *list; char *name; char *value; - int flag; + int num; }; -/* list head point to itself if empty */ +/* the list's head points to itself if empty */ void udev_list_init(struct udev_list_node *list) { list->next = list; @@ -101,12 +114,12 @@ void udev_list_entry_insert_before(struct udev_list_entry *new, struct udev_list struct udev_list_entry *udev_list_entry_add(struct udev *udev, struct udev_list_node *list, const char *name, const char *value, - int unique, int sort) + unsigned int flags) { struct udev_list_entry *entry_loop = NULL; struct udev_list_entry *entry_new; - if (unique) + if (flags & UDEV_LIST_UNIQUE) { udev_list_entry_foreach(entry_loop, udev_list_get_entry(list)) { if (strcmp(entry_loop->name, name) == 0) { dbg(udev, "'%s' is already in the list\n", name); @@ -123,12 +136,14 @@ struct udev_list_entry *udev_list_entry_add(struct udev *udev, struct udev_list_ return entry_loop; } } + } - if (sort) + if (flags & UDEV_LIST_SORT) { udev_list_entry_foreach(entry_loop, udev_list_get_entry(list)) { if (strcmp(entry_loop->name, name) > 0) break; } + } entry_new = malloc(sizeof(struct udev_list_entry)); if (entry_new == NULL) @@ -140,6 +155,7 @@ struct udev_list_entry *udev_list_entry_add(struct udev *udev, struct udev_list_ free(entry_new); return NULL; } + if (value != NULL) { entry_new->value = strdup(value); if (entry_new->value == NULL) { @@ -148,10 +164,12 @@ struct udev_list_entry *udev_list_entry_add(struct udev *udev, struct udev_list_ return NULL; } } + if (entry_loop != NULL) udev_list_entry_insert_before(entry_new, entry_loop); else udev_list_entry_append(entry_new, list); + dbg(udev, "'%s=%s' added\n", entry_new->name, entry_new->value); return entry_new; } @@ -180,7 +198,13 @@ struct udev_list_entry *udev_list_get_entry(struct udev_list_node *list) return list_node_to_entry(list->next); } -struct udev_list_entry *udev_list_entry_get_next(struct udev_list_entry *list_entry) +/** + * udev_list_entry_get_next: + * @list_entry: current entry + * + * Returns: the next entry from the list, #NULL is no more entries are found. + */ +UDEV_EXPORT struct udev_list_entry *udev_list_entry_get_next(struct udev_list_entry *list_entry) { struct udev_list_node *next; @@ -193,7 +217,14 @@ struct udev_list_entry *udev_list_entry_get_next(struct udev_list_entry *list_en return list_node_to_entry(next); } -struct udev_list_entry *udev_list_entry_get_by_name(struct udev_list_entry *list_entry, const char *name) +/** + * udev_list_entry_get_by_name: + * @list_entry: current entry + * @name: name string to match + * + * Returns: the entry where @name matched, #NULL if no matching entry is found. + */ +UDEV_EXPORT struct udev_list_entry *udev_list_entry_get_by_name(struct udev_list_entry *list_entry, const char *name) { struct udev_list_entry *entry; @@ -206,30 +237,42 @@ struct udev_list_entry *udev_list_entry_get_by_name(struct udev_list_entry *list return NULL; } -const char *udev_list_entry_get_name(struct udev_list_entry *list_entry) +/** + * udev_list_entry_get_name: + * @list_entry: current entry + * + * Returns: the name string of this entry. + */ +UDEV_EXPORT const char *udev_list_entry_get_name(struct udev_list_entry *list_entry) { if (list_entry == NULL) return NULL; return list_entry->name; } -const char *udev_list_entry_get_value(struct udev_list_entry *list_entry) +/** + * udev_list_entry_get_value: + * @list_entry: current entry + * + * Returns: the value string of this entry. + */ +UDEV_EXPORT const char *udev_list_entry_get_value(struct udev_list_entry *list_entry) { if (list_entry == NULL) return NULL; return list_entry->value; } -int udev_list_entry_get_flag(struct udev_list_entry *list_entry) +int udev_list_entry_get_num(struct udev_list_entry *list_entry) { if (list_entry == NULL) return -EINVAL; - return list_entry->flag; + return list_entry->num; } -void udev_list_entry_set_flag(struct udev_list_entry *list_entry, int flag) +void udev_list_entry_set_num(struct udev_list_entry *list_entry, int num) { if (list_entry == NULL) return; - list_entry->flag = flag; + list_entry->num = num; }