author | Junio C Hamano <gitster@pobox.com> | |
Tue, 22 Jun 2010 16:45:23 +0000 (09:45 -0700) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Tue, 22 Jun 2010 16:45:23 +0000 (09:45 -0700) |
* jc/maint-simpler-common-prefix:
common_prefix: simplify and fix scanning for prefixes
common_prefix: simplify and fix scanning for prefixes
dir.c | patch | blob | history |
index 5e36f8e616d63f8a9c5950897e0f06235d8e9acf..151ea670d961d39394990f122469557b6f217de3 100644 (file)
--- a/dir.c
+++ b/dir.c
if (!slash)
return 0;
+ /*
+ * The first 'prefix' characters of 'path' are common leading
+ * path components among the pathspecs we have seen so far,
+ * including the trailing slash.
+ */
prefix = slash - path + 1;
while ((next = *++pathspec) != NULL) {
- int len = strlen(next);
- if (len >= prefix && !memcmp(path, next, prefix))
+ int len, last_matching_slash = -1;
+ for (len = 0; len < prefix && next[len] == path[len]; len++)
+ if (next[len] == '/')
+ last_matching_slash = len;
+ if (len == prefix)
continue;
- len = prefix - 1;
- for (;;) {
- if (!len)
- return 0;
- if (next[--len] != '/')
- continue;
- if (memcmp(path, next, len+1))
- continue;
- prefix = len + 1;
- break;
- }
+ if (last_matching_slash < 0)
+ return 0;
+ prefix = last_matching_slash + 1;
}
return prefix;
}