13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier
4219b2ee8SDavid du Colombier void
main(int argc,char * argv[])5219b2ee8SDavid du Colombier main(int argc, char *argv[])
6219b2ee8SDavid du Colombier {
7219b2ee8SDavid du Colombier char *name, buf[4*1024];
83e12c5d1SDavid du Colombier int fd, n, i, errs;
93e12c5d1SDavid du Colombier
103e12c5d1SDavid du Colombier name = 0;
113e12c5d1SDavid du Colombier ARGBEGIN{
123e12c5d1SDavid du Colombier case 'n':
133e12c5d1SDavid du Colombier name = ARGF();
143e12c5d1SDavid du Colombier break;
153e12c5d1SDavid du Colombier default:
163e12c5d1SDavid du Colombier fprint(2, "usage: kfscmd [-n server] commands\n");
173e12c5d1SDavid du Colombier exits("usage");
183e12c5d1SDavid du Colombier }ARGEND
193e12c5d1SDavid du Colombier
203e12c5d1SDavid du Colombier if(name)
21*9a747e4fSDavid du Colombier snprint(buf, sizeof buf, "/srv/kfs.%s.cmd", name);
223e12c5d1SDavid du Colombier else
233e12c5d1SDavid du Colombier strcpy(buf, "/srv/kfs.cmd");
243e12c5d1SDavid du Colombier fd = open(buf, ORDWR);
25219b2ee8SDavid du Colombier if(fd < 0){
26219b2ee8SDavid du Colombier fprint(2, "kfscmd: can't open commands file\n");
27219b2ee8SDavid du Colombier exits("commands file");
28219b2ee8SDavid du Colombier }
29219b2ee8SDavid du Colombier
303e12c5d1SDavid du Colombier errs = 0;
313e12c5d1SDavid du Colombier for(i = 0; i < argc; i++){
323e12c5d1SDavid du Colombier if(write(fd, argv[i], strlen(argv[i])) != strlen(argv[i])){
333e12c5d1SDavid du Colombier fprint(2, "%s: error writing %s: %r", argv0, argv[i]);
343e12c5d1SDavid du Colombier errs++;
353e12c5d1SDavid du Colombier continue;
363e12c5d1SDavid du Colombier }
373e12c5d1SDavid du Colombier for(;;){
383e12c5d1SDavid du Colombier n = read(fd, buf, sizeof buf - 1);
393e12c5d1SDavid du Colombier if(n < 0){
403e12c5d1SDavid du Colombier fprint(2, "%s: error executing %s: %r", argv0, argv[i]);
413e12c5d1SDavid du Colombier errs++;
423e12c5d1SDavid du Colombier break;
433e12c5d1SDavid du Colombier }
443e12c5d1SDavid du Colombier buf[n] = '\0';
453e12c5d1SDavid du Colombier if(strcmp(buf, "done") == 0 || strcmp(buf, "success") == 0)
463e12c5d1SDavid du Colombier break;
473e12c5d1SDavid du Colombier if(strcmp(buf, "unknown command") == 0){
483e12c5d1SDavid du Colombier errs++;
493e12c5d1SDavid du Colombier print("kfscmd: command %s not recognized\n", argv[i]);
503e12c5d1SDavid du Colombier break;
513e12c5d1SDavid du Colombier }
523e12c5d1SDavid du Colombier write(1, buf, n);
533e12c5d1SDavid du Colombier }
543e12c5d1SDavid du Colombier }
553e12c5d1SDavid du Colombier exits(errs ? "errors" : 0);
563e12c5d1SDavid du Colombier }
57