1
pmatch(const char * p,const char * s,unsigned int len)2 int pmatch(const char *p, const char *s, unsigned int len) {
3 for (;;) {
4 char c =*p++;
5 if (! c) return(! len);
6 switch(c) {
7 case '*':
8 if (! (c =*p)) return(1);
9 for (;;) {
10 if (! len) return(0);
11 if (*s == c) break;
12 ++s; --len;
13 }
14 continue;
15 case '+':
16 if ((c =*p++) != *s) return(0);
17 for (;;) {
18 if (! len) return(1);
19 if (*s != c) break;
20 ++s; --len;
21 }
22 continue;
23 /*
24 case '?':
25 if (*p == '?') {
26 if (*s != '?') return(0);
27 ++p;
28 }
29 ++s; --len;
30 continue;
31 */
32 default:
33 if (! len) return(0);
34 if (*s != c) return(0);
35 ++s; --len;
36 continue;
37 }
38 }
39 return(0);
40 }
41