]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/mk/match.c
rio: fix goodrect() bug (thanks mike)
[plan9front.git] / sys / src / cmd / mk / match.c
1 #include        "mk.h"
2
3 int
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
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 }