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