X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/f72399f8674aca5eae57b7981a233c7f4b95fb11..de5fb3744da115dbdb66c7fbb894bf2ad9317fb7:/util.c diff --git a/util.c b/util.c index 04420048..89bc75be 100644 --- a/util.c +++ b/util.c @@ -558,10 +558,11 @@ static void glob_expand_one(char *s, char **argv, int *argc, int maxargs) #endif } -void glob_expand(char *base, char **argv, int *argc, int maxargs) +void glob_expand(char *base1, char **argv, int *argc, int maxargs) { char *s = argv[*argc]; char *p, *q; + char *base = base1; if (!s || !*s) return; @@ -572,21 +573,23 @@ void glob_expand(char *base, char **argv, int *argc, int maxargs) s = strdup(s); if (!s) out_of_memory("glob_expand"); + base = (char *)malloc(strlen(base1)+3); + if (!base) out_of_memory("glob_expand"); + + sprintf(base," %s/", base1); + q = s; while ((p = strstr(q,base)) && ((*argc) < maxargs)) { - if (p != q && *(p-1) == ' ' && p[strlen(base)] == '/') { - /* split it at this point */ - *(p-1) = 0; - glob_expand_one(q, argv, argc, maxargs); - q = p+strlen(base)+1; - } else { - q++; - } + /* split it at this point */ + *p = 0; + glob_expand_one(q, argv, argc, maxargs); + q = p+strlen(base); } if (*q && (*argc < maxargs)) glob_expand_one(q, argv, argc, maxargs); free(s); + free(base); } /******************************************************************* @@ -633,7 +636,7 @@ int vslprintf(char *str, int n, const char *format, va_list ap) buf = malloc(len); if (!buf) { /* can't call debug or we would recurse */ - exit(1); + exit_cleanup(1); } } @@ -641,7 +644,7 @@ int vslprintf(char *str, int n, const char *format, va_list ap) ret = strlen(buf); if (ret > n) { /* yikes! */ - exit(1); + exit_cleanup(1); } buf[ret] = 0; @@ -663,3 +666,4 @@ int slprintf(char *str, int n, char *format, ...) va_end(ap); return ret; } +