ash: fix slash treatment in expmeta
No binary (build failed)
—
(log yok)
| @@ -6992,10 +6992,11 @@ expmeta(char *expdir, 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 == '[') { | |
| @@ -7012,15 +7013,16 @@ expmeta(char *expdir, char *enddir, char *name) | |
| break; | |
| } | |
| } | |
| - | } else if (*p == '\\') |
| - | p++; |
| - | else if (*p == '/') { |
| - | if (metaflag) |
| - | goto out; |
| - | start = p + 1; |
| + | } else { |
| + | if (*p == '\\') |
| + | esc++; |
| + | if (p[esc] == '/') { |
| + | if (metaflag) |
| + | break; |
| + | start = p + esc + 1; |
| + | } |
| } | |
| } | |
| - | out: |
| if (metaflag == 0) { /* we've reached the end of the file name */ | |
| if (enddir != expdir) | |
| metaflag++; | |
| @@ -7060,7 +7062,8 @@ expmeta(char *expdir, char *enddir, char *name) | |
| atend = 1; | |
| } else { | |
| atend = 0; | |
| - | *endname++ = '\0'; |
| + | *endname = '\0'; |
| + | endname += esc + 1; |
| } | |
| matchdot = 0; | |
| p = start; | |
| @@ -7085,7 +7088,7 @@ expmeta(char *expdir, char *enddir, char *name) | |
| } | |
| closedir(dirp); | |
| if (!atend) | |
| - | endname[-1] = '/'; |
| + | endname[-esc - 1] = esc ? '\\' : '/'; |
| } | |
| static struct strlist * | |