diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/ndb/csquery.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/ndb/csquery.c')
-rwxr-xr-x | sys/src/cmd/ndb/csquery.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/sys/src/cmd/ndb/csquery.c b/sys/src/cmd/ndb/csquery.c new file mode 100755 index 000000000..6a324028b --- /dev/null +++ b/sys/src/cmd/ndb/csquery.c @@ -0,0 +1,78 @@ +#include <u.h> +#include <libc.h> +#include <bio.h> + +char *server; +char *status; +int statusonly; + +void +usage(void) +{ + fprint(2, "usage: ndb/csquery [/net/cs [addr...]]\n"); + exits("usage"); +} + +void +query(char *addr) +{ + char buf[128]; + int fd, n; + + fd = open(server, ORDWR); + if(fd < 0) + sysfatal("cannot open %s: %r", server); + if(write(fd, addr, strlen(addr)) != strlen(addr)){ + if(!statusonly) + fprint(2, "translating %s: %r\n", addr); + status = "errors"; + close(fd); + return; + } + if(!statusonly){ + seek(fd, 0, 0); + while((n = read(fd, buf, sizeof(buf)-1)) > 0){ + buf[n] = 0; + print("%s\n", buf); + } + } + close(fd); +} + +void +main(int argc, char **argv) +{ + char *p; + int i; + Biobuf in; + + ARGBEGIN{ + case 's': + statusonly = 1; + break; + default: + usage(); + }ARGEND + + if(argc > 0) + server = argv[0]; + else + server = "/net/cs"; + + if(argc > 1){ + for(i=1; i<argc; i++) + query(argv[i]); + exits(status); + } + + Binit(&in, 0, OREAD); + for(;;){ + print("> "); + p = Brdline(&in, '\n'); + if(p == 0) + break; + p[Blinelen(&in)-1] = 0; + query(p); + } + exits(nil); +} |