diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-20 09:09:18 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-20 09:09:18 -0700 |
commit | 958ba6c96eb58b359c855c9d07e3e45072f0503e (patch) | |
tree | 0d9f3f853998315a6d6abd045b5de32b074066c8 /read-cache.c | |
parent | e59363822f7026896209a9e986c6bf80b10ab37a (diff) | |
download | git-958ba6c96eb58b359c855c9d07e3e45072f0503e.tar.gz |
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.
Diffstat (limited to 'read-cache.c')
-rw-r--r-- | read-cache.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/read-cache.c b/read-cache.c index 732f483cda..b3eec84673 100644 --- a/read-cache.c +++ b/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; |