Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElijah Newren <newren@gmail.com>2020-11-06 03:24:53 +0300
committerJunio C Hamano <gitster@pobox.com>2020-11-06 20:33:35 +0300
commit6abd22065ccbec054db5af85296dd1167c670eda (patch)
tree84a09ebbf2e3c343956349d5fc241384f059fcca /strmap.c
parent4fa1d501f775253fe70bf6c6a00fe8156c8c61c7 (diff)
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>
Diffstat (limited to 'strmap.c')
-rw-r--r--strmap.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/strmap.c b/strmap.c
index 0d10a884b5..dc84c57c07 100644
--- a/strmap.c
+++ b/strmap.c
@@ -70,27 +70,36 @@ void strmap_partial_clear(struct strmap *map, int free_values)
hashmap_partial_clear(&map->map);
}
+static struct strmap_entry *create_entry(struct strmap *map,
+ const char *str,
+ void *data)
+{
+ struct strmap_entry *entry;
+ const char *key = str;
+
+ entry = xmalloc(sizeof(*entry));
+ hashmap_entry_init(&entry->ent, strhash(str));
+
+ if (map->strdup_strings)
+ key = xstrdup(str);
+ entry->key = key;
+ entry->value = data;
+ return entry;
+}
+
void *strmap_put(struct strmap *map, const char *str, void *data)
{
struct strmap_entry *entry = find_strmap_entry(map, str);
- void *old = NULL;
if (entry) {
- old = entry->value;
+ void *old = entry->value;
entry->value = data;
- } else {
- const char *key = str;
-
- entry = xmalloc(sizeof(*entry));
- hashmap_entry_init(&entry->ent, strhash(str));
-
- if (map->strdup_strings)
- key = xstrdup(str);
- entry->key = key;
- entry->value = data;
- hashmap_add(&map->map, &entry->ent);
+ 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)