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_unix/sys/src/cmd/upas/send/skipequiv.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 "common.h"
2
#include "send.h"
3
 
4
#define isspace(c) ((c)==' ' || (c)=='\t' || (c)=='\n')
5
 
6
/*
7
 *  skip past all systems in equivlist
8
 */
9
extern char*
10
skipequiv(char *base)
11
{
12
	char *sp;
13
	static Biobuf *fp;
14
 
15
	while(*base){
16
		sp = strchr(base, '!');
17
		if(sp==0)
18
			break;
19
		*sp = '\0';
20
		if(lookup(base, "equivlist", &fp, 0, 0)==1){
21
			/* found or us, forget this system */
22
			*sp='!';
23
			base=sp+1;
24
		} else {
25
			/* no files or system is not found, and not us */
26
			*sp='!';
27
			break;
28
		}
29
	}
30
	return base;
31
}
32
 
33
static int
34
okfile(char *cp, Biobuf *fp)
35
{
36
	char *buf;
37
	int len;
38
	char *bp, *ep;
39
	int c;
40
 
41
	len = strlen(cp);
42
	Bseek(fp, 0, 0);
43
 
44
	/* one iteration per system name in the file */
45
	while(buf = Brdline(fp, '\n')) {
46
		ep = &buf[Blinelen(fp)];
47
		for(bp=buf; bp < ep;){
48
			while(isspace(*bp) || *bp==',')
49
				bp++;
50
			if(strncmp(bp, cp, len) == 0) {
51
				c = *(bp+len);
52
				if(isspace(c) || c==',')
53
					return 1;
54
			}
55
			while(bp < ep && (!isspace(*bp)) && *bp!=',')
56
				bp++;
57
		}
58
	}
59
 
60
	/* didn't find it, prohibit forwarding */
61
	return 0;
62
}
63
 
64
/* return 1 if name found in one of the files
65
 *	  0 if name not found in one of the files
66
 *	  -1 if neither file exists
67
 */
68
extern int
69
lookup(char *cp, char *local, Biobuf **lfpp, char *global, Biobuf **gfpp)
70
{
71
	static String *file = 0;
72
 
73
	if (local) {
74
		if (file == 0)
75
			file = s_new();
76
		abspath(local, UPASLIB, s_restart(file));
77
		if (*lfpp != 0 || (*lfpp = sysopen(s_to_c(file), "r", 0)) != 0) {
78
			if (okfile(cp, *lfpp))
79
				return 1;
80
		} else
81
			local = 0;
82
	}
83
	if (global) {
84
		abspath(global, UPASLIB, s_restart(file));
85
		if (*gfpp != 0 || (*gfpp = sysopen(s_to_c(file), "r", 0)) != 0) {
86
			if (okfile(cp, *gfpp))
87
				return 1;
88
		} else
89
			global = 0;
90
	}
91
	return (local || global)? 0 : -1;
92
}