Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
 
4
void
5
main(int argc, char *argv[])
6
{
7
	char *name, buf[4*1024];
8
	int fd, n, i, errs;
9
 
10
	name = 0;
11
	ARGBEGIN{
12
	case 'n':
13
		name = ARGF();
14
		break;
15
	default:
16
		fprint(2, "usage: kfscmd [-n server] commands\n");
17
		exits("usage");
18
	}ARGEND
19
 
20
	if(name)
21
		snprint(buf, sizeof buf, "/srv/kfs.%s.cmd", name);
22
	else
23
		strcpy(buf, "/srv/kfs.cmd");
24
	fd = open(buf, ORDWR);
25
	if(fd < 0){
26
		fprint(2, "kfscmd: can't open commands file\n");
27
		exits("commands file");
28
	}
29
 
30
	errs = 0;
31
	for(i = 0; i < argc; i++){
32
		if(write(fd, argv[i], strlen(argv[i])) != strlen(argv[i])){
33
			fprint(2, "%s: error writing %s: %r", argv0, argv[i]);
34
			errs++;
35
			continue;
36
		}
37
		for(;;){
38
			n = read(fd, buf, sizeof buf - 1);
39
			if(n < 0){
40
				fprint(2, "%s: error executing %s: %r", argv0, argv[i]);
41
				errs++;
42
				break;
43
			}
44
			buf[n] = '\0';
45
			if(strcmp(buf, "done") == 0 || strcmp(buf, "success") == 0)
46
				break;
47
			if(strcmp(buf, "unknown command") == 0){
48
				errs++;
49
				print("kfscmd: command %s not recognized\n", argv[i]);
50
				break;
51
			}
52
			write(1, buf, n);
53
		}
54
	}
55
	exits(errs ? "errors" : 0);		
56
}