patch-ids.c: use hashmap correctly
As alluded to in the previous patch, the code in patch-ids.c is using the hashmaps API wrong. Luckily we do not have a bug, as all hashmap functionality that we use here (hashmap_get) passes through the keydata. If hashmap_get_next were to be used, a bug would occur as that passes NULL for the key_data. So instead use the hashmap API correctly and provide the caller required data in the compare function via the first argument that always gets passed and was setup via the hashmap_init function. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Stefan Beller committed
Jun 30, 2017 at 12:14 UTC
3da492f8088413c9db2da6c489e117d4808859e9
1 file changed
+4
-4
patch-ids.c
+4
-4
@@ -35,10 +35,10 @@ int commit_patch_id(struct commit *commit, struct diff_options *options,
35
* the side of safety. The actual value being negative does not have
36
* any significance; only that it is non-zero matters.
37
*/
38
-static int patch_id_cmp(const void *unused_cmp_data,
38
+static int patch_id_cmp(struct diff_options *opt,
39
struct patch_id *a,
40
struct patch_id *b,
41
- struct diff_options *opt)
41
+ const void *unused_keydata)
42
{
43
if (is_null_oid(&a->patch_id) &&
44
commit_patch_id(a->commit, opt, &a->patch_id, 0))
@@ -59,7 +59,7 @@ int init_patch_ids(struct patch_ids *ids)
59
DIFF_OPT_SET(&ids->diffopts, RECURSIVE);
60
diff_setup_done(&ids->diffopts);
61
hashmap_init(&ids->patches, (hashmap_cmp_fn)patch_id_cmp,
62
- NULL, 256);
62
+ &ids->diffopts, 256);
63
return 0;
64
}
65
@@ -95,7 +95,7 @@ struct patch_id *has_commit_patch_id(struct commit *commit,
95
if (init_patch_id_entry(&patch, commit, ids))
96
return NULL;
97
98
- return hashmap_get(&ids->patches, &patch, &ids->diffopts);
98
+ return hashmap_get(&ids->patches, &patch, NULL);
99
}
100
101
struct patch_id *add_commit_patch_id(struct commit *commit,