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>
This commit is contained in:
29
setup.c
29
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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user