X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/6e058b4b60e01b874bfe6a9814b1d6b1944d6ae7..d85d029b923a747fdf9fbf39154f8424129f7023:/token.c diff --git a/token.c b/token.c index 81e25372..838f8c97 100644 --- a/token.c +++ b/token.c @@ -3,7 +3,7 @@ * * Copyright (C) 1996 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras - * Copyright (C) 2003-2007 Wayne Davison + * Copyright (C) 2003-2009 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ */ #include "rsync.h" +#include "itypes.h" #include "zlib/zlib.h" extern int do_compression; @@ -44,12 +45,12 @@ static void add_suffix(struct suffix_tree **prior, char ltr, const char *str) if (ltr == '[') { const char *after = strchr(str, ']'); - /* Just skip bogus character classes. */ - if (!after++) + /* Treat "[foo" and "[]" as having a literal '['. */ + if (after && after++ != str+1) { + while ((ltr = *str++) != ']') + add_suffix(prior, ltr, after); return; - while ((ltr = *str++) != ']') - add_suffix(prior, ltr, after); - return; + } } for (node = *prior; node; prior = &node->sibling, node = node->sibling) { @@ -99,7 +100,6 @@ static void add_nocompress_suffixes(const char *str) } while (*++f != '/' && *f); *t++ = '\0'; - fprintf(stderr, "adding `%s'\n", buf); add_suffix(&suftree, *buf, buf+1); } @@ -151,7 +151,7 @@ static void init_set_compression(void) /* Move *.foo items into the stuffix tree. */ if (*start == '*' && start[1] == '.' && start[2] - && !strchr(start+2, '.')) { + && !strpbrk(start+2, ".?*")) { add_suffix(&suftree, start[2], start+3); t = start; }