diff options
Diffstat (limited to '')
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | src/expand.c | 14 |
2 files changed, 12 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog index 2f65e03..7cf15c0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-05-19 Herbert Xu <herbert@gondor.apana.org.au> + + * Fixed non-leading slash treatment in expmeta. + 2008-05-07 Gerrit Pape <pape@smarden.org> * Fixed lexical error in arithmetic expansion of & and |. diff --git a/src/expand.c b/src/expand.c index 2c52781..e4c4c8b 100644 --- a/src/expand.c +++ b/src/expand.c @@ -1269,10 +1269,11 @@ expmeta(char *enddir, char *name) struct dirent *dp; int atend; int matchdot; + int esc; metaflag = 0; start = name; - for (p = name; *p; p++) { + for (p = name; esc = 0, *p; p += esc + 1) { if (*p == '*' || *p == '?') metaflag = 1; else if (*p == '[') { @@ -1291,11 +1292,11 @@ expmeta(char *enddir, char *name) } } else { if (*p == '\\') - p++; - if (*p == '/') { + esc++; + if (p[esc] == '/') { if (metaflag) break; - start = p + 1; + start = p + esc + 1; } } } @@ -1337,7 +1338,8 @@ expmeta(char *enddir, char *name) atend = 1; } else { atend = 0; - *endname++ = '\0'; + *endname = '\0'; + endname += esc + 1; } matchdot = 0; p = start; @@ -1363,7 +1365,7 @@ expmeta(char *enddir, char *name) } closedir(dirp); if (! atend) - endname[-1] = '/'; + endname[-esc - 1] = esc ? '\\' : '/'; } #endif /* HAVE_GLOB */ |