diff options
-rw-r--r-- | cache.h | 7 | ||||
-rw-r--r-- | read-cache.c | 12 |
2 files changed, 13 insertions, 6 deletions
@@ -63,9 +63,10 @@ struct cache_entry { char name[0]; }; -#define CE_NAMEMASK (0x0fff) -#define CE_STAGE1 (0x1000) -#define CE_STAGE2 (0x2000) +#define CE_NAMEMASK (0x0fff) +#define CE_STAGEMASK (0x3000) + +#define create_ce_flags(len, stage) ((len) | ((stage) << 12)) const char *sha1_file_directory; struct cache_entry **active_cache; diff --git a/read-cache.c b/read-cache.c index 4173b4e45..acc6e236d 100644 --- a/read-cache.c +++ b/read-cache.c @@ -313,8 +313,10 @@ int cache_match_stat(struct cache_entry *ce, struct stat *st) return changed; } -int cache_name_compare(const char *name1, int len1, const char *name2, int len2) +int cache_name_compare(const char *name1, int flags1, const char *name2, int flags2) { + int len1 = flags1 & CE_NAMEMASK; + int len2 = flags2 & CE_NAMEMASK; int len = len1 < len2 ? len1 : len2; int cmp; @@ -325,6 +327,10 @@ int cache_name_compare(const char *name1, int len1, const char *name2, int len2) return -1; if (len1 > len2) return 1; + if (flags1 < flags2) + return -1; + if (flags1 > flags2) + return 1; return 0; } @@ -337,7 +343,7 @@ int cache_name_pos(const char *name, int namelen) while (last > first) { int next = (last + first) >> 1; struct cache_entry *ce = active_cache[next]; - int cmp = cache_name_compare(name, namelen, ce->name, ce_namelen(ce)); + int cmp = cache_name_compare(name, namelen, ce->name, htons(ce->ce_flags)); if (!cmp) return next; if (cmp < 0) { @@ -364,7 +370,7 @@ int add_cache_entry(struct cache_entry *ce, int ok_to_add) { int pos; - pos = cache_name_pos(ce->name, ce_namelen(ce)); + pos = cache_name_pos(ce->name, htons(ce->ce_flags)); /* existing match? Just replace it */ if (pos >= 0) { |