summaryrefslogtreecommitdiff
path: root/oidmap.c
diff options
context:
space:
mode:
authorBrandon Williams <bmwill@google.com>2017-12-22 23:27:29 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-12-27 20:28:06 (GMT)
commite2a5a028c778febb6776da16ab18fb4de79014f0 (patch)
tree58668452c6dd4c0e0432b54a3fc5516cc2056851 /oidmap.c
parent3013dff8662eae06457fe6e5348dfe2270810ab2 (diff)
downloadgit-e2a5a028c778febb6776da16ab18fb4de79014f0.zip
git-e2a5a028c778febb6776da16ab18fb4de79014f0.tar.gz
git-e2a5a028c778febb6776da16ab18fb4de79014f0.tar.bz2
oidmap: ensure map is initialized
Ensure that an oidmap is initialized before attempting to add, remove, or retrieve an entry by simply performing the initialization step before accessing the underlying hashmap. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'oidmap.c')
-rw-r--r--oidmap.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/oidmap.c b/oidmap.c
index 6db4fff..d9fb19b 100644
--- a/oidmap.c
+++ b/oidmap.c
@@ -33,12 +33,19 @@ void oidmap_free(struct oidmap *map, int free_entries)
void *oidmap_get(const struct oidmap *map, const struct object_id *key)
{
+ if (!map->map.cmpfn)
+ return NULL;
+
return hashmap_get_from_hash(&map->map, hash(key), key);
}
void *oidmap_remove(struct oidmap *map, const struct object_id *key)
{
struct hashmap_entry entry;
+
+ if (!map->map.cmpfn)
+ oidmap_init(map, 0);
+
hashmap_entry_init(&entry, hash(key));
return hashmap_remove(&map->map, &entry, key);
}
@@ -46,6 +53,10 @@ void *oidmap_remove(struct oidmap *map, const struct object_id *key)
void *oidmap_put(struct oidmap *map, void *entry)
{
struct oidmap_entry *to_put = entry;
+
+ if (!map->map.cmpfn)
+ oidmap_init(map, 0);
+
hashmap_entry_init(&to_put->internal_entry, hash(&to_put->oid));
return hashmap_put(&map->map, to_put);
}