xref: /plan9/sys/src/cmd/disk/kfscmd.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1 #include <u.h>
2 #include <libc.h>
3 
4 void
main(int argc,char * argv[])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 }
57