summaryrefslogtreecommitdiff
path: root/setup.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-09-06 12:32:30 -0700
committerJunio C Hamano <gitster@pobox.com>2011-09-06 12:54:19 -0700
commit4a085b16f430bcfe1b6e2e84e7a569f4e191e906 (patch)
tree3f6942e4b822e86aaf5cbb36597189f097761e51 /setup.c
parent5879f5684cfe8a38326b4ffd078f96e35c68e640 (diff)
downloadgit-4a085b16f430bcfe1b6e2e84e7a569f4e191e906.tar.gz
consolidate pathspec_prefix and common_prefix
The implementation from pathspec_prefix (slightly modified) replaces the current common_prefix, because it also respects glob characters. Based on a patch by Clemens Buchacher. Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'setup.c')
-rw-r--r--setup.c29
1 files changed, 2 insertions, 27 deletions
diff --git a/setup.c b/setup.c
index f767d8adb1..70b887fe68 100644
--- a/setup.c
+++ b/setup.c
@@ -266,34 +266,9 @@ const char **get_pathspec(const char *prefix, const char **pathspec)
char *pathspec_prefix(const char **pathspec)
{
- const char **p, *n, *prev;
- unsigned long max;
+ size_t len = common_prefix_len(pathspec);
- if (!pathspec)
- return NULL;
-
- prev = NULL;
- max = PATH_MAX;
- for (p = pathspec; (n = *p) != NULL; p++) {
- int i, len = 0;
- for (i = 0; i < max; i++) {
- char c = n[i];
- if (prev && prev[i] != c)
- break;
- if (!c || c == '*' || c == '?')
- break;
- if (c == '/')
- len = i+1;
- }
- prev = n;
- if (len < max) {
- max = len;
- if (!max)
- break;
- }
- }
-
- return max ? xmemdupz(prev, max) : NULL;
+ return len ? xmemdupz(*pathspec, len) : NULL;
}
/*