#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; | |
} |