summaryrefslogtreecommitdiff
path: root/src/strmap.c
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2019-01-23 10:44:33 +0100
committerPatrick Steinhardt <ps@pks.im>2019-02-15 13:16:48 +0100
commit03555830784a2856e0c9651d2643b3ee5ce2084d (patch)
tree9796bff7a6ea1a3035565645ab41c49b32d457c8 /src/strmap.c
parentef507bc7bdd736d2379a0d0614b3db1341d77187 (diff)
downloadlibgit2-03555830784a2856e0c9651d2643b3ee5ce2084d.tar.gz
strmap: introduce high-level setter for key/value pairs
Currently, one would use the function `git_strmap_insert` to insert key/value pairs into a map. This function has historically been a macro, which is why its syntax is kind of weird: instead of returning an error code directly, it instead has to be passed a pointer to where the return value shall be stored. This does not match libgit2's common idiom of directly returning error codes. Introduce a new function `git_strmap_set`, which takes as parameters the map, key and value and directly returns an error code. Convert all callers of `git_strmap_insert` to make use of it.
Diffstat (limited to 'src/strmap.c')
-rw-r--r--src/strmap.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/strmap.c b/src/strmap.c
index bf8e7f34d..4c1818a0e 100644
--- a/src/strmap.c
+++ b/src/strmap.c
@@ -50,6 +50,23 @@ void *git_strmap_get(git_strmap *map, const char *key)
return kh_val(map, idx);
}
+int git_strmap_set(git_strmap *map, const char *key, void *value)
+{
+ size_t idx;
+ int rval;
+
+ idx = kh_put(str, map, key, &rval);
+ if (rval < 0)
+ return -1;
+
+ if (rval == 0)
+ kh_key(map, idx) = key;
+
+ kh_val(map, idx) = value;
+
+ return 0;
+}
+
size_t git_strmap_lookup_index(git_strmap *map, const char *key)
{
return kh_get(str, map, key);