Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature-vt/sys/src/cmd/aquarela/smbrep.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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