| #include "mk.h" |
| |
| int |
| match(char *name, char *template, char *stem, Shell *sh) |
| { |
| Rune r; |
| int n; |
| |
| while(*name && *template){ |
| n = chartorune(&r, template); |
| if (PERCENT(r)) |
| break; |
| while (n--) |
| if(*name++ != *template++) |
| return 0; |
| } |
| if(!PERCENT(*template)) |
| return 0; |
| n = strlen(name)-strlen(template+1); |
| if (n < 0) |
| return 0; |
| if (strcmp(template+1, name+n)) |
| return 0; |
| strncpy(stem, name, n); |
| stem[n] = 0; |
| if(*template == '&') |
| return !sh->charin(stem, "./"); |
| return 1; |
| } |
| |
| void |
| subst(char *stem, char *template, char *dest) |
| { |
| Rune r; |
| char *s; |
| int n; |
| |
| while(*template){ |
| n = chartorune(&r, template); |
| if (PERCENT(r)) { |
| template += n; |
| for (s = stem; *s; s++) |
| *dest++ = *s; |
| } else |
| while (n--) |
| *dest++ = *template++; |
| } |
| *dest = 0; |
| } |