]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/ndb/csquery.c
ndb/dnsquery, ndb/csquery: handle long lines
[plan9front.git] / sys / src / cmd / ndb / csquery.c
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4
5 char *server;
6 char *status;
7 int statusonly;
8
9 void
10 usage(void)
11 {
12         fprint(2, "usage: ndb/csquery [/net/cs [addr...]]\n");
13         exits("usage");
14 }
15
16 void
17 query(char *addr)
18 {
19         char buf[8192];
20         int fd, n;
21
22         fd = open(server, ORDWR);
23         if(fd < 0)
24                 sysfatal("cannot open %s: %r", server);
25         if(write(fd, addr, strlen(addr)) != strlen(addr)){
26                 if(!statusonly)
27                         fprint(2, "translating %s: %r\n", addr);
28                 status = "errors";
29                 close(fd);
30                 return;
31         }
32         if(!statusonly){
33                 seek(fd, 0, 0);
34                 while((n = read(fd, buf, sizeof(buf))) > 0)
35                         write(1, buf, n);
36                 write(1, "\n", 1);
37         }
38         close(fd);
39 }
40
41 void
42 main(int argc, char **argv)
43 {
44         char *p;
45         int i;
46         Biobuf in;
47
48         ARGBEGIN{
49         case 's':
50                 statusonly = 1;
51                 break;
52         default:
53                 usage();
54         }ARGEND
55
56         if(argc > 0)
57                 server = argv[0];
58         else
59                 server = "/net/cs";
60
61         if(argc > 1){
62                 for(i=1; i<argc; i++)
63                         query(argv[i]);
64                 exits(status);
65         }
66
67         Binit(&in, 0, OREAD);
68         for(;;){
69                 print("> ");
70                 p = Brdline(&in, '\n');
71                 if(p == 0)
72                         break;
73                 p[Blinelen(&in)-1] = 0;
74                 query(p);
75         }
76         exits(nil);
77 }