From: Eric Wong <e@80x24.org>
To: Junio C Hamano <gitster@pobox.com>
Cc: Derrick Stolee <stolee@gmail.com>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Phillip Wood <phillip.wood@dunelm.org.uk>,
git@vger.kernel.org
Subject: [PATCH v2 09/19] hashmap_put takes "struct hashmap_entry *"
Date: Tue, 24 Sep 2019 01:03:14 +0000 [thread overview]
Message-ID: <20190924010324.22619-10-e@80x24.org> (raw)
In-Reply-To: <20190924010324.22619-1-e@80x24.org>
This is less error-prone than "void *" as the compiler now
detects invalid types being passed.
Signed-off-by: Eric Wong <e@80x24.org>
---
builtin/fast-export.c | 2 +-
hashmap.c | 2 +-
hashmap.h | 2 +-
merge-recursive.c | 4 ++--
oidmap.c | 2 +-
refs.c | 5 ++++-
remote.c | 2 +-
revision.c | 2 +-
sequencer.c | 2 +-
submodule-config.c | 2 +-
t/helper/test-hashmap.c | 2 +-
11 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index c693cf6a8c..192e21dae4 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -160,7 +160,7 @@ static const void *anonymize_mem(struct hashmap *map,
ret->orig_len = *len;
ret->anon = generate(orig, len);
ret->anon_len = *len;
- hashmap_put(map, ret);
+ hashmap_put(map, &ret->hash);
}
*len = ret->anon_len;
diff --git a/hashmap.c b/hashmap.c
index bdf33e0381..9b83e73d03 100644
--- a/hashmap.c
+++ b/hashmap.c
@@ -241,7 +241,7 @@ void *hashmap_remove(struct hashmap *map, const struct hashmap_entry *key,
return old;
}
-void *hashmap_put(struct hashmap *map, void *entry)
+void *hashmap_put(struct hashmap *map, struct hashmap_entry *entry)
{
struct hashmap_entry *old = hashmap_remove(map, entry, NULL);
hashmap_add(map, entry);
diff --git a/hashmap.h b/hashmap.h
index 5e0818c134..cb630447bb 100644
--- a/hashmap.h
+++ b/hashmap.h
@@ -340,7 +340,7 @@ void hashmap_add(struct hashmap *map, struct hashmap_entry *entry);
* `entry` is the entry to add or replace.
* Returns the replaced entry, or NULL if not found (i.e. the entry was added).
*/
-void *hashmap_put(struct hashmap *map, void *entry);
+void *hashmap_put(struct hashmap *map, struct hashmap_entry *entry);
/*
* Removes a hashmap entry matching the specified key. If the hashmap contains
diff --git a/merge-recursive.c b/merge-recursive.c
index f60451d396..a685b4fb69 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -2229,7 +2229,7 @@ static struct hashmap *get_directory_renames(struct diff_queue_struct *pairs)
if (!entry) {
entry = xmalloc(sizeof(*entry));
dir_rename_entry_init(entry, old_dir);
- hashmap_put(dir_renames, entry);
+ hashmap_put(dir_renames, &entry->ent);
} else {
free(old_dir);
}
@@ -2360,7 +2360,7 @@ static void compute_collisions(struct hashmap *collisions,
sizeof(struct collision_entry));
hashmap_entry_init(&collision_ent->ent,
strhash(new_path));
- hashmap_put(collisions, collision_ent);
+ hashmap_put(collisions, &collision_ent->ent);
collision_ent->target_file = new_path;
} else {
free(new_path);
diff --git a/oidmap.c b/oidmap.c
index 6d6e840d03..cd22b3a8bf 100644
--- a/oidmap.c
+++ b/oidmap.c
@@ -51,5 +51,5 @@ void *oidmap_put(struct oidmap *map, void *entry)
oidmap_init(map, 0);
hashmap_entry_init(&to_put->internal_entry, oidhash(&to_put->oid));
- return hashmap_put(&map->map, to_put);
+ return hashmap_put(&map->map, &to_put->internal_entry);
}
diff --git a/refs.c b/refs.c
index c43ec59c6e..3e55031256 100644
--- a/refs.c
+++ b/refs.c
@@ -1863,10 +1863,13 @@ static void register_ref_store_map(struct hashmap *map,
struct ref_store *refs,
const char *name)
{
+ struct ref_store_hash_entry *entry;
+
if (!map->tablesize)
hashmap_init(map, ref_store_hash_cmp, NULL, 0);
- if (hashmap_put(map, alloc_ref_store_hash_entry(name, refs)))
+ entry = alloc_ref_store_hash_entry(name, refs);
+ if (hashmap_put(map, &entry->ent))
BUG("%s ref_store '%s' initialized twice", type, name);
}
diff --git a/remote.c b/remote.c
index bd81cb71bc..8ca23d95dc 100644
--- a/remote.c
+++ b/remote.c
@@ -159,7 +159,7 @@ static struct remote *make_remote(const char *name, int len)
remotes[remotes_nr++] = ret;
hashmap_entry_init(&ret->ent, lookup_entry.hash);
- replaced = hashmap_put(&remotes_hash, ret);
+ replaced = hashmap_put(&remotes_hash, &ret->ent);
assert(replaced == NULL); /* no previous entry overwritten */
return ret;
}
diff --git a/revision.c b/revision.c
index 4336281286..a7e2339064 100644
--- a/revision.c
+++ b/revision.c
@@ -153,7 +153,7 @@ static void paths_and_oids_insert(struct hashmap *map,
hashmap_entry_init(&entry->ent, hash);
entry->path = xstrdup(key.path);
oidset_init(&entry->trees, 16);
- hashmap_put(map, entry);
+ hashmap_put(map, &entry->ent);
}
oidset_insert(&entry->trees, oid);
diff --git a/sequencer.c b/sequencer.c
index ee11cda7e7..b4ef70e260 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -5254,7 +5254,7 @@ int todo_list_rearrange_squash(struct todo_list *todo_list)
entry->i = i;
hashmap_entry_init(&entry->entry,
strhash(entry->subject));
- hashmap_put(&subject2item, entry);
+ hashmap_put(&subject2item, &entry->entry);
}
}
diff --git a/submodule-config.c b/submodule-config.c
index 7486745a6a..9248c5ea5b 100644
--- a/submodule-config.c
+++ b/submodule-config.c
@@ -125,7 +125,7 @@ static void cache_put_path(struct submodule_cache *cache,
struct submodule_entry *e = xmalloc(sizeof(*e));
hashmap_entry_init(&e->ent, hash);
e->config = submodule;
- hashmap_put(&cache->for_path, e);
+ hashmap_put(&cache->for_path, &e->ent);
}
static void cache_remove_path(struct submodule_cache *cache,
diff --git a/t/helper/test-hashmap.c b/t/helper/test-hashmap.c
index 49e715f1cd..de2bd083b9 100644
--- a/t/helper/test-hashmap.c
+++ b/t/helper/test-hashmap.c
@@ -187,7 +187,7 @@ int cmd__hashmap(int argc, const char **argv)
entry = alloc_test_entry(hash, p1, p2);
/* add / replace entry */
- entry = hashmap_put(&map, entry);
+ entry = hashmap_put(&map, &entry->ent);
/* print and free replaced entry, if any */
puts(entry ? get_value(entry) : "NULL");
next prev parent reply other threads:[~2019-09-24 1:03 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-26 2:43 [PATCH 00/11] hashmap: bugfixes, safety fixes, and WIP improvements Eric Wong
2019-08-26 2:43 ` [PATCH 01/11] diff: use hashmap_entry_init on moved_entry.ent Eric Wong
2019-08-27 13:31 ` Derrick Stolee
2019-08-26 2:43 ` [PATCH 02/11] packfile: use hashmap_entry in delta_base_cache_entry Eric Wong
2019-08-26 2:43 ` [PATCH 03/11] hashmap_entry_init takes "struct hashmap_entry *" Eric Wong
2019-08-27 13:35 ` Derrick Stolee
2019-08-28 15:01 ` Johannes Schindelin
2019-08-30 19:48 ` Eric Wong
2019-09-02 13:46 ` Johannes Schindelin
2019-08-26 2:43 ` [PATCH 04/11] hashmap_entry: detect improper initialization Eric Wong
2019-08-27 9:10 ` Johannes Schindelin
2019-08-27 9:49 ` Eric Wong
2019-08-27 22:16 ` Junio C Hamano
2019-08-28 15:04 ` Johannes Schindelin
2019-08-28 9:03 ` Phillip Wood
2019-08-30 19:52 ` Eric Wong
2019-09-08 7:49 ` [RFC 04/11] coccicheck: detect hashmap_entry.hash assignment Eric Wong
2019-09-09 18:15 ` Junio C Hamano
2019-08-26 2:43 ` [PATCH 05/11] hashmap_get_next takes "const struct hashmap_entry *" Eric Wong
2019-08-26 2:43 ` [PATCH 06/11] hashmap_add takes "struct " Eric Wong
2019-08-26 2:43 ` [PATCH 07/11] hashmap_get takes "const struct " Eric Wong
2019-08-26 2:43 ` [PATCH 08/11] hashmap_remove " Eric Wong
2019-08-26 2:43 ` [PATCH 09/11] hashmap_put takes "struct " Eric Wong
2019-08-26 2:43 ` [PATCH 10/11] introduce container_of macro Eric Wong
2019-08-27 14:49 ` Derrick Stolee
2019-08-28 9:11 ` Phillip Wood
2019-08-30 19:43 ` Eric Wong
2019-08-26 2:43 ` [PATCH 11/11] hashmap_get_next returns "struct hashmap_entry *" Eric Wong
2019-08-27 14:53 ` Derrick Stolee
2019-08-30 19:36 ` Eric Wong
2019-09-24 1:03 ` [PATCH v2 00/19] hashmap bug/safety/ease-of-use fixes Eric Wong
2019-09-24 1:03 ` [PATCH v2 01/19] diff: use hashmap_entry_init on moved_entry.ent Eric Wong
2019-09-24 1:03 ` [PATCH v2 02/19] coccicheck: detect hashmap_entry.hash assignment Eric Wong
2019-09-25 12:44 ` Derrick Stolee
2019-09-24 1:03 ` [PATCH v2 03/19] packfile: use hashmap_entry in delta_base_cache_entry Eric Wong
2019-09-24 1:03 ` [PATCH v2 04/19] hashmap_entry_init takes "struct hashmap_entry *" Eric Wong
2019-09-25 12:48 ` Derrick Stolee
2019-09-24 1:03 ` [PATCH v2 05/19] hashmap_get_next takes "const struct " Eric Wong
2019-09-24 1:03 ` [PATCH v2 06/19] hashmap_add takes "struct " Eric Wong
2019-09-24 1:03 ` [PATCH v2 07/19] hashmap_get takes "const struct " Eric Wong
2019-09-25 12:52 ` Derrick Stolee
2019-09-30 9:57 ` Eric Wong
2019-09-24 1:03 ` [PATCH v2 08/19] hashmap_remove " Eric Wong
2019-09-25 12:54 ` Derrick Stolee
2019-09-24 1:03 ` Eric Wong [this message]
2019-09-24 1:03 ` [PATCH v2 10/19] introduce container_of macro Eric Wong
2019-09-25 13:12 ` Derrick Stolee
2019-09-30 10:39 ` Eric Wong
2019-09-24 1:03 ` [PATCH v2 11/19] hashmap_get_next returns "struct hashmap_entry *" Eric Wong
2019-09-25 13:05 ` Derrick Stolee
2019-09-24 1:03 ` [PATCH v2 12/19] hashmap: use *_entry APIs to wrap container_of Eric Wong
2019-09-25 13:15 ` Derrick Stolee
2019-09-24 1:03 ` [PATCH v2 13/19] hashmap_get{,_from_hash} return "struct hashmap_entry *" Eric Wong
2019-09-24 1:03 ` [PATCH v2 14/19] hashmap_cmp_fn takes hashmap_entry params Eric Wong
2019-09-24 1:03 ` [PATCH v2 15/19] hashmap: use *_entry APIs for iteration Eric Wong
2019-09-24 1:03 ` [PATCH v2 16/19] hashmap: hashmap_{put,remove} return hashmap_entry * Eric Wong
2019-09-24 1:03 ` [PATCH v2 17/19] hashmap: introduce hashmap_free_entries Eric Wong
2019-09-24 1:03 ` [PATCH v2 18/19] OFFSETOF_VAR macro to simplify hashmap iterators Eric Wong
2019-09-30 16:58 ` Junio C Hamano
2019-10-04 1:18 ` Junio C Hamano
2019-10-04 2:51 ` Eric Wong
2019-10-04 3:29 ` Junio C Hamano
2019-10-04 17:26 ` Eric Wong
2019-10-06 0:04 ` Junio C Hamano
2019-09-24 1:03 ` [PATCH v2 19/19] hashmap: remove type arg from hashmap_{get,put,remove}_entry Eric Wong
2019-09-25 12:42 ` Derrick Stolee
2019-09-25 13:30 ` [PATCH v2 00/19] hashmap bug/safety/ease-of-use fixes Derrick Stolee
2019-09-26 8:39 ` Johannes Schindelin
2019-09-30 10:01 ` Eric Wong
2019-09-26 13:48 ` Phillip Wood
2019-09-29 9:22 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190924010324.22619-10-e@80x24.org \
--to=e@80x24.org \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=phillip.wood@dunelm.org.uk \
--cc=stolee@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).