| match.c - 9base - revived minimalist port of Plan 9 userland to Unix | |
| git clone git://git.suckless.org/9base | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| 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 } |