From 93ba78d6f4632ef1c5228965e3edc8c0faf88c1e Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Tue, 26 May 2020 00:06:52 +0100 Subject: revert(3p/git): Revert merge of git upstream at v2.26.2 This causes cgit to serve error pages, which is undesirable. This reverts commit 5229c9b232de5bfa959ad6ebbb4c8192ac513352, reversing changes made to f2b211131f2347342dde63975b09cf603149f1a3. --- third_party/git/hashmap.c | 60 +++++++++++++++++------------------------------ 1 file changed, 22 insertions(+), 38 deletions(-) (limited to 'third_party/git/hashmap.c') diff --git a/third_party/git/hashmap.c b/third_party/git/hashmap.c index 09813e1a4667..d42f01ff5ae6 100644 --- a/third_party/git/hashmap.c +++ b/third_party/git/hashmap.c @@ -51,7 +51,7 @@ unsigned int memihash(const void *buf, size_t len) } /* - * Incorporate another chunk of data into a memihash + * Incoporate another chunk of data into a memihash * computation. */ unsigned int memihash_cont(unsigned int hash_seed, const void *buf, size_t len) @@ -140,8 +140,8 @@ static inline struct hashmap_entry **find_entry_ptr(const struct hashmap *map, } static int always_equal(const void *unused_cmp_data, - const struct hashmap_entry *unused1, - const struct hashmap_entry *unused2, + const void *unused1, + const void *unused2, const void *unused_keydata) { return 0; @@ -171,49 +171,41 @@ void hashmap_init(struct hashmap *map, hashmap_cmp_fn equals_function, map->do_count_items = 1; } -void hashmap_free_(struct hashmap *map, ssize_t entry_offset) +void hashmap_free(struct hashmap *map, int free_entries) { if (!map || !map->table) return; - if (entry_offset >= 0) { /* called by hashmap_free_entries */ + if (free_entries) { struct hashmap_iter iter; struct hashmap_entry *e; - hashmap_iter_init(map, &iter); while ((e = hashmap_iter_next(&iter))) - /* - * like container_of, but using caller-calculated - * offset (caller being hashmap_free_entries) - */ - free((char *)e - entry_offset); + free(e); } free(map->table); memset(map, 0, sizeof(*map)); } -struct hashmap_entry *hashmap_get(const struct hashmap *map, - const struct hashmap_entry *key, - const void *keydata) +void *hashmap_get(const struct hashmap *map, const void *key, const void *keydata) { return *find_entry_ptr(map, key, keydata); } -struct hashmap_entry *hashmap_get_next(const struct hashmap *map, - const struct hashmap_entry *entry) +void *hashmap_get_next(const struct hashmap *map, const void *entry) { - struct hashmap_entry *e = entry->next; + struct hashmap_entry *e = ((struct hashmap_entry *) entry)->next; for (; e; e = e->next) if (entry_equals(map, entry, e, NULL)) return e; return NULL; } -void hashmap_add(struct hashmap *map, struct hashmap_entry *entry) +void hashmap_add(struct hashmap *map, void *entry) { unsigned int b = bucket(map, entry); /* add entry */ - entry->next = map->table[b]; + ((struct hashmap_entry *) entry)->next = map->table[b]; map->table[b] = entry; /* fix size and rehash if appropriate */ @@ -224,9 +216,7 @@ void hashmap_add(struct hashmap *map, struct hashmap_entry *entry) } } -struct hashmap_entry *hashmap_remove(struct hashmap *map, - const struct hashmap_entry *key, - const void *keydata) +void *hashmap_remove(struct hashmap *map, const void *key, const void *keydata) { struct hashmap_entry *old; struct hashmap_entry **e = find_entry_ptr(map, key, keydata); @@ -248,8 +238,7 @@ struct hashmap_entry *hashmap_remove(struct hashmap *map, return old; } -struct hashmap_entry *hashmap_put(struct hashmap *map, - struct hashmap_entry *entry) +void *hashmap_put(struct hashmap *map, void *entry) { struct hashmap_entry *old = hashmap_remove(map, entry, NULL); hashmap_add(map, entry); @@ -263,7 +252,7 @@ void hashmap_iter_init(struct hashmap *map, struct hashmap_iter *iter) iter->next = NULL; } -struct hashmap_entry *hashmap_iter_next(struct hashmap_iter *iter) +void *hashmap_iter_next(struct hashmap_iter *iter) { struct hashmap_entry *current = iter->next; for (;;) { @@ -286,15 +275,10 @@ struct pool_entry { }; static int pool_entry_cmp(const void *unused_cmp_data, - const struct hashmap_entry *eptr, - const struct hashmap_entry *entry_or_key, - const void *keydata) + const struct pool_entry *e1, + const struct pool_entry *e2, + const unsigned char *keydata) { - const struct pool_entry *e1, *e2; - - e1 = container_of(eptr, const struct pool_entry, ent); - e2 = container_of(entry_or_key, const struct pool_entry, ent); - return e1->data != keydata && (e1->len != e2->len || memcmp(e1->data, keydata, e1->len)); } @@ -306,18 +290,18 @@ const void *memintern(const void *data, size_t len) /* initialize string pool hashmap */ if (!map.tablesize) - hashmap_init(&map, pool_entry_cmp, NULL, 0); + hashmap_init(&map, (hashmap_cmp_fn) pool_entry_cmp, NULL, 0); /* lookup interned string in pool */ - hashmap_entry_init(&key.ent, memhash(data, len)); + hashmap_entry_init(&key, memhash(data, len)); key.len = len; - e = hashmap_get_entry(&map, &key, ent, data); + e = hashmap_get(&map, &key, data); if (!e) { /* not found: create it */ FLEX_ALLOC_MEM(e, data, data, len); - hashmap_entry_init(&e->ent, key.ent.hash); + hashmap_entry_init(e, key.ent.hash); e->len = len; - hashmap_add(&map, &e->ent); + hashmap_add(&map, e); } return e->data; } -- cgit 1.4.1