-#include <stdio.h>
#include "cache.h"
#include "path-list.h"
(list->nr - index)
* sizeof(struct path_list_item));
list->items[index].path = list->strdup_paths ?
- strdup(path) : (char *)path;
+ xstrdup(path) : (char *)path;
list->items[index].util = NULL;
list->nr++;
int index = add_entry(list, path);
if (index < 0)
- index = 1 - index;
+ index = -1 - index;
return list->items + index;
}
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;
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;
+}
+