summaryrefslogtreecommitdiff
path: root/setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'setup.c')
-rw-r--r--setup.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/setup.c b/setup.c
index 5ea5502e48..2c51a9a4c7 100644
--- a/setup.c
+++ b/setup.c
@@ -264,6 +264,38 @@ const char **get_pathspec(const char *prefix, const char **pathspec)
return pathspec;
}
+const char *pathspec_prefix(const char *prefix, const char **pathspec)
+{
+ const char **p, *n, *prev;
+ unsigned long max;
+
+ if (!pathspec)
+ return prefix ? xmemdupz(prefix, strlen(prefix)) : 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;
+}
+
/*
* Test if it looks like we're at a git directory.
* We want to see: