mirror of
https://github.com/git/git.git
synced 2026-01-29 03:52:00 +00:00
name-hash: eliminate duplicate memihash call
Remove duplicate memihash() call in hash_dir_entry(). The existing code called memihash() to do the find_dir_entry() and it not found, called memihash() again to do the hashmap_add(). Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
This commit is contained in:
20
name-hash.c
20
name-hash.c
@@ -23,13 +23,19 @@ static int dir_entry_cmp(const struct dir_entry *e1,
|
||||
name ? name : e2->name, e1->namelen);
|
||||
}
|
||||
|
||||
static struct dir_entry *find_dir_entry__hash(struct index_state *istate,
|
||||
const char *name, unsigned int namelen, unsigned int hash)
|
||||
{
|
||||
struct dir_entry key;
|
||||
hashmap_entry_init(&key, hash);
|
||||
key.namelen = namelen;
|
||||
return hashmap_get(&istate->dir_hash, &key, name);
|
||||
}
|
||||
|
||||
static struct dir_entry *find_dir_entry(struct index_state *istate,
|
||||
const char *name, unsigned int namelen)
|
||||
{
|
||||
struct dir_entry key;
|
||||
hashmap_entry_init(&key, memihash(name, namelen));
|
||||
key.namelen = namelen;
|
||||
return hashmap_get(&istate->dir_hash, &key, name);
|
||||
return find_dir_entry__hash(istate, name, namelen, memihash(name,namelen));
|
||||
}
|
||||
|
||||
static struct dir_entry *hash_dir_entry(struct index_state *istate,
|
||||
@@ -43,6 +49,7 @@ static struct dir_entry *hash_dir_entry(struct index_state *istate,
|
||||
* in index_state.name_hash (as ordinary cache_entries).
|
||||
*/
|
||||
struct dir_entry *dir;
|
||||
unsigned int hash;
|
||||
|
||||
/* get length of parent directory */
|
||||
while (namelen > 0 && !is_dir_sep(ce->name[namelen - 1]))
|
||||
@@ -52,11 +59,12 @@ static struct dir_entry *hash_dir_entry(struct index_state *istate,
|
||||
namelen--;
|
||||
|
||||
/* lookup existing entry for that directory */
|
||||
dir = find_dir_entry(istate, ce->name, namelen);
|
||||
hash = memihash(ce->name, namelen);
|
||||
dir = find_dir_entry__hash(istate, ce->name, namelen, hash);
|
||||
if (!dir) {
|
||||
/* not found, create it and add to hash table */
|
||||
FLEX_ALLOC_MEM(dir, name, ce->name, namelen);
|
||||
hashmap_entry_init(dir, memihash(ce->name, namelen));
|
||||
hashmap_entry_init(dir, hash);
|
||||
dir->namelen = namelen;
|
||||
hashmap_add(&istate->dir_hash, dir);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user