diff options
Diffstat (limited to 'revision.c')
| -rw-r--r-- | revision.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/revision.c b/revision.c index 0fc0b425f6..0e39b2b8a5 100644 --- a/revision.c +++ b/revision.c @@ -108,30 +108,34 @@ struct path_and_oids_entry { }; static int path_and_oids_cmp(const void *hashmap_cmp_fn_data, - const struct path_and_oids_entry *e1, - const struct path_and_oids_entry *e2, + const struct hashmap_entry *eptr, + const struct hashmap_entry *entry_or_key, const void *keydata) { + const struct path_and_oids_entry *e1, *e2; + + e1 = container_of(eptr, const struct path_and_oids_entry, ent); + e2 = container_of(entry_or_key, const struct path_and_oids_entry, ent); + return strcmp(e1->path, e2->path); } static void paths_and_oids_init(struct hashmap *map) { - hashmap_init(map, (hashmap_cmp_fn) path_and_oids_cmp, NULL, 0); + hashmap_init(map, path_and_oids_cmp, NULL, 0); } static void paths_and_oids_clear(struct hashmap *map) { struct hashmap_iter iter; struct path_and_oids_entry *entry; - hashmap_iter_init(map, &iter); - while ((entry = (struct path_and_oids_entry *)hashmap_iter_next(&iter))) { + hashmap_for_each_entry(map, &iter, entry, ent /* member name */) { oidset_clear(&entry->trees); free(entry->path); } - hashmap_free(map, 1); + hashmap_free_entries(map, struct path_and_oids_entry, ent); } static void paths_and_oids_insert(struct hashmap *map, @@ -142,18 +146,19 @@ static void paths_and_oids_insert(struct hashmap *map, struct path_and_oids_entry key; struct path_and_oids_entry *entry; - hashmap_entry_init(&key, hash); + hashmap_entry_init(&key.ent, hash); /* use a shallow copy for the lookup */ key.path = (char *)path; oidset_init(&key.trees, 0); - if (!(entry = (struct path_and_oids_entry *)hashmap_get(map, &key, NULL))) { + entry = hashmap_get_entry(map, &key, ent, NULL); + if (!entry) { entry = xcalloc(1, sizeof(struct path_and_oids_entry)); - hashmap_entry_init(entry, hash); + hashmap_entry_init(&entry->ent, hash); entry->path = xstrdup(key.path); oidset_init(&entry->trees, 16); - hashmap_put(map, entry); + hashmap_put(map, &entry->ent); } oidset_insert(&entry->trees, oid); @@ -236,8 +241,7 @@ void mark_trees_uninteresting_sparse(struct repository *r, add_children_by_path(r, tree, &map); } - hashmap_iter_init(&map, &map_iter); - while ((entry = hashmap_iter_next(&map_iter))) + hashmap_for_each_entry(&map, &map_iter, entry, ent /* member name */) mark_trees_uninteresting_sparse(r, &entry->trees); paths_and_oids_clear(&map); |
