strmap: split create_entry() out of strmap_put()

This will facilitate adding entries to a strmap subtype in ways that
differ slightly from that of strmap_put().

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Elijah Newren
2020-11-06 00:24:53 +00:00
committed by Junio C Hamano
parent 4fa1d501f7
commit 6abd22065c

View File

@ -70,15 +70,11 @@ void strmap_partial_clear(struct strmap *map, int free_values)
hashmap_partial_clear(&map->map); hashmap_partial_clear(&map->map);
} }
void *strmap_put(struct strmap *map, const char *str, void *data) static struct strmap_entry *create_entry(struct strmap *map,
const char *str,
void *data)
{ {
struct strmap_entry *entry = find_strmap_entry(map, str); struct strmap_entry *entry;
void *old = NULL;
if (entry) {
old = entry->value;
entry->value = data;
} else {
const char *key = str; const char *key = str;
entry = xmalloc(sizeof(*entry)); entry = xmalloc(sizeof(*entry));
@ -88,9 +84,22 @@ void *strmap_put(struct strmap *map, const char *str, void *data)
key = xstrdup(str); key = xstrdup(str);
entry->key = key; entry->key = key;
entry->value = data; entry->value = data;
hashmap_add(&map->map, &entry->ent); return entry;
} }
void *strmap_put(struct strmap *map, const char *str, void *data)
{
struct strmap_entry *entry = find_strmap_entry(map, str);
if (entry) {
void *old = entry->value;
entry->value = data;
return old; return old;
}
entry = create_entry(map, str, data);
hashmap_add(&map->map, &entry->ent);
return NULL;
} }
struct strmap_entry *strmap_get_entry(struct strmap *map, const char *str) struct strmap_entry *strmap_get_entry(struct strmap *map, const char *str)