| ---
match.c (783B)
---
1 #include "mk.h"
2
3 int
4 match(char *name, char *template, char *stem, Shell *sh)
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 !sh->charin(stem, "./");
28 return 1;
29 }
30
31 void
32 subst(char *stem, char *template, char *dest)
33 {
34 Rune r;
35 char *s;
36 int n;
37
38 while(*template){
39 n = chartorune(&r, template);
40 if (PERCENT(r)) {
41 template += n;
42 for (s = stem; *s; s++)
43 *dest++ = *s;
44 } else
45 while (n--)
46 *dest++ = *template++;
47 }
48 *dest = 0;
49 } |