Blame


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