|
|
@ -17,10 +17,14 @@ struct dir_entry { |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
static int dir_entry_cmp(const void *unused_cmp_data, |
|
|
|
static int dir_entry_cmp(const void *unused_cmp_data, |
|
|
|
const struct dir_entry *e1, |
|
|
|
const void *entry, |
|
|
|
const struct dir_entry *e2, |
|
|
|
const void *entry_or_key, |
|
|
|
const char *name) |
|
|
|
const void *keydata) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
const struct dir_entry *e1 = entry; |
|
|
|
|
|
|
|
const struct dir_entry *e2 = entry_or_key; |
|
|
|
|
|
|
|
const char *name = keydata; |
|
|
|
|
|
|
|
|
|
|
|
return e1->namelen != e2->namelen || strncasecmp(e1->name, |
|
|
|
return e1->namelen != e2->namelen || strncasecmp(e1->name, |
|
|
|
name ? name : e2->name, e1->namelen); |
|
|
|
name ? name : e2->name, e1->namelen); |
|
|
|
} |
|
|
|
} |
|
|
@ -110,10 +114,12 @@ static void hash_index_entry(struct index_state *istate, struct cache_entry *ce) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int cache_entry_cmp(const void *unused_cmp_data, |
|
|
|
static int cache_entry_cmp(const void *unused_cmp_data, |
|
|
|
const struct cache_entry *ce1, |
|
|
|
const void *entry, |
|
|
|
const struct cache_entry *ce2, |
|
|
|
const void *entry_or_key, |
|
|
|
const void *remove) |
|
|
|
const void *remove) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
const struct cache_entry *ce1 = entry; |
|
|
|
|
|
|
|
const struct cache_entry *ce2 = entry_or_key; |
|
|
|
/* |
|
|
|
/* |
|
|
|
* For remove_name_hash, find the exact entry (pointer equality); for |
|
|
|
* For remove_name_hash, find the exact entry (pointer equality); for |
|
|
|
* index_file_exists, find all entries with matching hash code and |
|
|
|
* index_file_exists, find all entries with matching hash code and |
|
|
@ -574,10 +580,8 @@ static void lazy_init_name_hash(struct index_state *istate) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (istate->name_hash_initialized) |
|
|
|
if (istate->name_hash_initialized) |
|
|
|
return; |
|
|
|
return; |
|
|
|
hashmap_init(&istate->name_hash, (hashmap_cmp_fn) cache_entry_cmp, |
|
|
|
hashmap_init(&istate->name_hash, cache_entry_cmp, NULL, istate->cache_nr); |
|
|
|
NULL, istate->cache_nr); |
|
|
|
hashmap_init(&istate->dir_hash, dir_entry_cmp, NULL, istate->cache_nr); |
|
|
|
hashmap_init(&istate->dir_hash, (hashmap_cmp_fn) dir_entry_cmp, |
|
|
|
|
|
|
|
NULL, istate->cache_nr); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (lookup_lazy_params(istate)) { |
|
|
|
if (lookup_lazy_params(istate)) { |
|
|
|
hashmap_disallow_rehash(&istate->dir_hash, 1); |
|
|
|
hashmap_disallow_rehash(&istate->dir_hash, 1); |
|
|
|