]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/disk/kfscmd.c
merge
[plan9front.git] / sys / src / cmd / disk / kfscmd.c
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 }