1*8ccd4a63SDavid du Colombier #include "headers.h"
2*8ccd4a63SDavid du Colombier
3*8ccd4a63SDavid du Colombier int
smbmatch(char * name,Reprog * rep)4*8ccd4a63SDavid du Colombier smbmatch(char *name, Reprog *rep)
5*8ccd4a63SDavid du Colombier {
6*8ccd4a63SDavid du Colombier Resub sub;
7*8ccd4a63SDavid du Colombier sub.sp = nil;
8*8ccd4a63SDavid du Colombier sub.ep = nil;
9*8ccd4a63SDavid du Colombier if (regexec(rep, name, &sub, 1) && sub.sp == name && *sub.ep == 0)
10*8ccd4a63SDavid du Colombier return 1;
11*8ccd4a63SDavid du Colombier return 0;
12*8ccd4a63SDavid du Colombier }
13*8ccd4a63SDavid du Colombier
14*8ccd4a63SDavid du Colombier Reprog *
smbmkrep(char * pattern)15*8ccd4a63SDavid du Colombier smbmkrep(char *pattern)
16*8ccd4a63SDavid du Colombier {
17*8ccd4a63SDavid du Colombier Reprog *r;
18*8ccd4a63SDavid du Colombier int l;
19*8ccd4a63SDavid du Colombier char *tmp, *p, *q, *t;
20*8ccd4a63SDavid du Colombier l = strlen(pattern);
21*8ccd4a63SDavid du Colombier tmp = smbemalloc(l * 5 + 1);
22*8ccd4a63SDavid du Colombier t = tmp;
23*8ccd4a63SDavid du Colombier p = pattern;
24*8ccd4a63SDavid du Colombier while (*p) {
25*8ccd4a63SDavid du Colombier if (*p == '*') {
26*8ccd4a63SDavid du Colombier if (p[1] == '.') {
27*8ccd4a63SDavid du Colombier strcpy(t, "[^.]*");
28*8ccd4a63SDavid du Colombier t += 5;
29*8ccd4a63SDavid du Colombier p++;
30*8ccd4a63SDavid du Colombier }
31*8ccd4a63SDavid du Colombier else {
32*8ccd4a63SDavid du Colombier *t++ = '.';
33*8ccd4a63SDavid du Colombier *t++ = '*';
34*8ccd4a63SDavid du Colombier p++;
35*8ccd4a63SDavid du Colombier }
36*8ccd4a63SDavid du Colombier }
37*8ccd4a63SDavid du Colombier else if (*p == '?') {
38*8ccd4a63SDavid du Colombier for (q = p + 1; *q && *q == '?'; q++)
39*8ccd4a63SDavid du Colombier ;
40*8ccd4a63SDavid du Colombier if (*q == 0 || *q == '.') {
41*8ccd4a63SDavid du Colombier /* at most n copies */
42*8ccd4a63SDavid du Colombier strcpy(t, "[^.]?");
43*8ccd4a63SDavid du Colombier t += 5;
44*8ccd4a63SDavid du Colombier p++;
45*8ccd4a63SDavid du Colombier }
46*8ccd4a63SDavid du Colombier else {
47*8ccd4a63SDavid du Colombier /* exactly n copies */
48*8ccd4a63SDavid du Colombier strcpy(t, "[^.]");
49*8ccd4a63SDavid du Colombier t += 4;
50*8ccd4a63SDavid du Colombier p++;
51*8ccd4a63SDavid du Colombier }
52*8ccd4a63SDavid du Colombier }
53*8ccd4a63SDavid du Colombier else if (strchr(".+{}()|\\^$", *p) != 0) {
54*8ccd4a63SDavid du Colombier /* regexp meta */
55*8ccd4a63SDavid du Colombier *t++ = '\\';
56*8ccd4a63SDavid du Colombier *t++ = *p++;
57*8ccd4a63SDavid du Colombier }
58*8ccd4a63SDavid du Colombier else
59*8ccd4a63SDavid du Colombier *t++ = *p++;
60*8ccd4a63SDavid du Colombier }
61*8ccd4a63SDavid du Colombier *t = 0;
62*8ccd4a63SDavid du Colombier smblogprintif(smbglobals.log.rep, "%s => %s\n", pattern, tmp);
63*8ccd4a63SDavid du Colombier r = regcomp(tmp);
64*8ccd4a63SDavid du Colombier free(tmp);
65*8ccd4a63SDavid du Colombier return r;
66*8ccd4a63SDavid du Colombier }
67*8ccd4a63SDavid du Colombier
68