Introduce "base_name_compare()" helper function
This one compares two pathnames that may be partial basenames, not full paths. We need to get the path sorting right, since a directory name will sort as if it had the final '/' at the end.
This commit is contained in:
parent
e59363822f
commit
958ba6c96e
1
cache.h
1
cache.h
@ -173,6 +173,7 @@ extern void usage(const char *err);
|
||||
extern void die(const char *err, ...);
|
||||
extern int error(const char *err, ...);
|
||||
|
||||
extern int base_name_compare(const char *name1, int len1, int mode1, const char *name2, int len2, int mode2);
|
||||
extern int cache_name_compare(const char *name1, int len1, const char *name2, int len2);
|
||||
|
||||
extern void *read_object_with_reference(const unsigned char *sha1,
|
||||
|
19
read-cache.c
19
read-cache.c
@ -74,6 +74,25 @@ int ce_match_stat(struct cache_entry *ce, struct stat *st)
|
||||
return changed;
|
||||
}
|
||||
|
||||
int base_name_compare(const char *name1, int len1, int mode1,
|
||||
const char *name2, int len2, int mode2)
|
||||
{
|
||||
unsigned char c1, c2;
|
||||
int len = len1 < len2 ? len1 : len2;
|
||||
int cmp;
|
||||
|
||||
cmp = memcmp(name1, name2, len);
|
||||
if (cmp)
|
||||
return cmp;
|
||||
c1 = name1[len];
|
||||
c2 = name2[len];
|
||||
if (!c1 && S_ISDIR(mode1))
|
||||
c1 = '/';
|
||||
if (!c2 && S_ISDIR(mode2))
|
||||
c2 = '/';
|
||||
return (c1 < c2) ? -1 : (c1 > c2) ? 1 : 0;
|
||||
}
|
||||
|
||||
int cache_name_compare(const char *name1, int flags1, const char *name2, int flags2)
|
||||
{
|
||||
int len1 = flags1 & CE_NAMEMASK;
|
||||
|
Loading…
Reference in New Issue
Block a user