1 #include "mk.h"
2
3 int
match(char * name,char * template,char * stem)4 match(char *name, char *template, char *stem)
5 {
6 Rune r;
7 int n;
8
9 while(*name && *template){
10 n = chartorune(&r, template);
11 if (PERCENT(r))
12 break;
13 while (n--)
14 if(*name++ != *template++)
15 return 0;
16 }
17 if(!PERCENT(*template))
18 return 0;
19 n = strlen(name)-strlen(template+1);
20 if (n < 0)
21 return 0;
22 if (strcmp(template+1, name+n))
23 return 0;
24 strncpy(stem, name, n);
25 stem[n] = 0;
26 if(*template == '&')
27 return !charin(stem, "./");
28 return 1;
29 }
30
31 void
subst(char * stem,char * template,char * dest,int dlen)32 subst(char *stem, char *template, char *dest, int dlen)
33 {
34 Rune r;
35 char *s, *e;
36 int n;
37
38 e = dest+dlen-1;
39 while(*template){
40 n = chartorune(&r, template);
41 if (PERCENT(r)) {
42 template += n;
43 for (s = stem; *s; s++)
44 if(dest < e)
45 *dest++ = *s;
46 } else
47 while (n--){
48 if(dest < e)
49 *dest++ = *template;
50 template++;
51 }
52 }
53 *dest = 0;
54 }
55