]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Push skipping leading slashes in patterns into pathmatch.
authorJoerg Sonnenberger <joerg.sonnenberger@gmail.com>
Tue, 26 May 2009 12:32:48 +0000 (08:32 -0400)
committerJoerg Sonnenberger <joerg.sonnenberger@gmail.com>
Tue, 26 May 2009 12:32:48 +0000 (08:32 -0400)
Skip all leading slashes when doing so.

SVN-Revision: 1116

cpio/matching.c
cpio/pathmatch.c

index 83efa50f145e42b163d284edd748821372453d44..2e244c445d21070c5b412f0abc2fbb5189624b22 100644 (file)
@@ -123,15 +123,15 @@ static void
 add_pattern(struct match **list, const char *pattern)
 {
        struct match *match;
+       size_t len;
 
-       match = malloc(sizeof(*match) + strlen(pattern) + 1);
+       len = strlen(pattern);
+       match = malloc(sizeof(*match) + len + 1);
        if (match == NULL)
                cpio_errc(1, errno, "Out of memory");
-       if (pattern[0] == '/')
-               pattern++;
        strcpy(match->pattern, pattern);
        /* Both "foo/" and "foo" should match "foo/bar". */
-       if (match->pattern[strlen(match->pattern)-1] == '/')
+       if (len && match->pattern[len - 1] == '/')
                match->pattern[strlen(match->pattern)-1] = '\0';
        match->next = *list;
        *list = match;
index 40fa836041b0427906a17292c9fb79a1f8536954..407dae9478cde59fe02aa2b693591f4bc014c07f 100644 (file)
@@ -230,8 +230,11 @@ pathmatch(const char *p, const char *s, int flags)
        }
 
        /* Certain patterns anchor implicitly. */
-       if (*p == '*' || *p == '/')
+       if (*p == '*' || *p == '/') {
+               while (*p == '/')
+                       ++p;
                return (pm(p, s, flags));
+       }
 
        /* If start is unanchored, try to match start of each path element. */
        if (flags & PATHMATCH_NO_ANCHOR_START) {