X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=path-list.c;h=92e5cf20fe6e0891eb6cc8f230a0fcd238f2b9f8;hb=1eaa541f5fbda3fc30085da4f75e99dfae4ec9b3;hp=caaa5cc57b05e1a27bb4fd8f49bb74e06b9936e3;hpb=e986e26a86616054f96373280e8f9cc89d7ea8ca;p=git.git diff --git a/path-list.c b/path-list.c index caaa5cc57..92e5cf20f 100644 --- a/path-list.c +++ b/path-list.c @@ -76,16 +76,18 @@ struct path_list_item *path_list_lookup(const char *path, struct path_list *list return list->items + i; } -void path_list_clear(struct path_list *list, int free_items) +void path_list_clear(struct path_list *list, int free_util) { if (list->items) { int i; - if (free_items) - for (i = 0; i < list->nr; i++) { - if (list->strdup_paths) - free(list->items[i].path); + if (list->strdup_paths) { + for (i = 0; i < list->nr; i++) + free(list->items[i].path); + } + if (free_util) { + for (i = 0; i < list->nr; i++) free(list->items[i].util); - } + } free(list->items); } list->items = NULL; @@ -101,3 +103,32 @@ void print_path_list(const char *text, const struct path_list *p) printf("%s:%p\n", p->items[i].path, p->items[i].util); } +struct path_list_item *path_list_append(const char *path, struct path_list *list) +{ + ALLOC_GROW(list->items, list->nr + 1, list->alloc); + list->items[list->nr].path = + list->strdup_paths ? xstrdup(path) : (char *)path; + return list->items + list->nr++; +} + +static int cmp_items(const void *a, const void *b) +{ + const struct path_list_item *one = a; + const struct path_list_item *two = b; + return strcmp(one->path, two->path); +} + +void sort_path_list(struct path_list *list) +{ + qsort(list->items, list->nr, sizeof(*list->items), cmp_items); +} + +int unsorted_path_list_has_path(struct path_list *list, const char *path) +{ + int i; + for (i = 0; i < list->nr; i++) + if (!strcmp(path, list->items[i].path)) + return 1; + return 0; +} +