]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/ip/hogports.c
ip/tftpd: fix %.*s format for homedir path
[plan9front.git] / sys / src / cmd / ip / hogports.c
1 #include <u.h>
2 #include <libc.h>
3
4 void
5 hogport(char *proto, int port)
6 {
7         char buf[256];
8         char dir[40];
9
10         snprint(buf, sizeof(buf), "%s!%d", proto, port);
11         if(announce(buf, dir) < 0)
12                 fprint(2, "%s: can't hog %s\n", argv0, buf);
13 }
14
15 void
16 hogrange(char *str)
17 {
18         char *er, *sr;
19         int start, end;
20
21         sr = strrchr(str, '!');
22         if(sr == nil)
23                 sysfatal("bad range: %s", str);
24         *sr++ = 0;
25
26         er = strchr(sr, '-');
27         if(er == nil)
28                 er = sr;
29         else
30                 er++;
31
32         start = atoi(sr);
33         end = atoi(er);
34         if(end < start)
35                 sysfatal("bad range: %s", sr);
36
37         for(; start <= end; start++)
38                 hogport(str, start);
39 }
40
41 void
42 main(int argc, char **argv)
43 {
44         int i;
45
46         ARGBEGIN{
47         }ARGEND;
48
49         if(argc == 0){
50                 fprint(2, "usage: %s portrange\n", argv0);
51                 exits("usage");
52         }
53
54         switch(rfork(RFREND|RFNOTEG|RFFDG|RFPROC|RFNAMEG)){
55         case 0:
56                 close(0);
57                 close(1);
58                 break;
59         case -1:
60                 abort(); /* "fork failed\n" */;
61         default:
62                 _exits(0);
63         }
64
65         for(i = 0; i < argc; i++)
66                 hogrange(argv[i]);
67
68         close(2);
69         for(;;)
70                 sleep(10000);
71 }