diff options
author | Michael Haggerty <mhagger@alum.mit.edu> | 2012-10-28 17:16:24 +0100 |
---|---|---|
committer | Jeff King <peff@peff.net> | 2012-10-29 02:34:58 -0400 |
commit | 31171d9e454d71144685866cfd6476b8ac69d314 (patch) | |
tree | 518d646035a3ea9415472e7f874d396d52b07822 /path.c | |
parent | a5ccdbe416081d5749f286c193b70400e48ad03f (diff) | |
download | git-31171d9e454d71144685866cfd6476b8ac69d314.tar.gz |
longest_ancestor_length(): take a string_list argument for prefixes
Change longest_ancestor_length() to take the prefixes argument as a
string_list rather than as a colon-separated string. This will make
it easier for the caller to alter the entries before calling
longest_ancestor_length().
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Jeff King <peff@peff.net>
Diffstat (limited to 'path.c')
-rw-r--r-- | path.c | 22 |
1 files changed, 9 insertions, 13 deletions
@@ -570,30 +570,27 @@ int normalize_path_copy(char *dst, const char *src) /* * path = Canonical absolute path - * prefix_list = Colon-separated list of absolute paths + * prefixes = string_list containing absolute paths * - * Determines, for each path in prefix_list, whether the "prefix" really + * Determines, for each path in prefixes, whether the "prefix" really * is an ancestor directory of path. Returns the length of the longest * ancestor directory, excluding any trailing slashes, or -1 if no prefix - * is an ancestor. (Note that this means 0 is returned if prefix_list is - * "/".) "/foo" is not considered an ancestor of "/foobar". Directories + * is an ancestor. (Note that this means 0 is returned if prefixes is + * ["/"].) "/foo" is not considered an ancestor of "/foobar". Directories * are not considered to be their own ancestors. path must be in a * canonical form: empty components, or "." or ".." components are not - * allowed. prefix_list may be null, which is like "". + * allowed. Empty strings in prefixes are ignored. */ -int longest_ancestor_length(const char *path, const char *prefix_list) +int longest_ancestor_length(const char *path, struct string_list *prefixes) { - struct string_list prefixes = STRING_LIST_INIT_DUP; char buf[PATH_MAX+1]; int i, max_len = -1; - if (prefix_list == NULL || !strcmp(path, "/")) + if (!strcmp(path, "/")) return -1; - string_list_split(&prefixes, prefix_list, PATH_SEP, -1); - - for (i = 0; i < prefixes.nr; i++) { - const char *ceil = prefixes.items[i].string; + for (i = 0; i < prefixes->nr; i++) { + const char *ceil = prefixes->items[i].string; int len = strlen(ceil); if (len == 0 || len > PATH_MAX || !is_absolute_path(ceil)) @@ -611,7 +608,6 @@ int longest_ancestor_length(const char *path, const char *prefix_list) } } - string_list_clear(&prefixes, 0); return max_len; } |