diff options
Diffstat (limited to 'setup.c')
-rw-r--r-- | setup.c | 32 |
1 files changed, 32 insertions, 0 deletions
@@ -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: |