Blame


1 b2ad2ef1 2005-01-04 devnull #include <u.h>
2 b2ad2ef1 2005-01-04 devnull #include <libc.h>
3 b2ad2ef1 2005-01-04 devnull
4 b2ad2ef1 2005-01-04 devnull void
5 b2ad2ef1 2005-01-04 devnull usage(void)
6 b2ad2ef1 2005-01-04 devnull {
7 b2ad2ef1 2005-01-04 devnull fprint(2, "usage: dial [-e] addr\n");
8 b2ad2ef1 2005-01-04 devnull exits("usage");
9 b2ad2ef1 2005-01-04 devnull }
10 b2ad2ef1 2005-01-04 devnull
11 b2ad2ef1 2005-01-04 devnull void
12 b2ad2ef1 2005-01-04 devnull killer(void *x, char *msg)
13 b2ad2ef1 2005-01-04 devnull {
14 b2ad2ef1 2005-01-04 devnull USED(x);
15 b2ad2ef1 2005-01-04 devnull if(strcmp(msg, "kill") == 0)
16 b2ad2ef1 2005-01-04 devnull exits(0);
17 b2ad2ef1 2005-01-04 devnull noted(NDFLT);
18 b2ad2ef1 2005-01-04 devnull }
19 b2ad2ef1 2005-01-04 devnull
20 b2ad2ef1 2005-01-04 devnull void
21 b2ad2ef1 2005-01-04 devnull main(int argc, char **argv)
22 b2ad2ef1 2005-01-04 devnull {
23 b2ad2ef1 2005-01-04 devnull int fd, pid;
24 b2ad2ef1 2005-01-04 devnull char buf[8192];
25 b2ad2ef1 2005-01-04 devnull int n, waitforeof;
26 b2ad2ef1 2005-01-04 devnull
27 b2ad2ef1 2005-01-04 devnull notify(killer);
28 b2ad2ef1 2005-01-04 devnull waitforeof = 0;
29 b2ad2ef1 2005-01-04 devnull ARGBEGIN{
30 b2ad2ef1 2005-01-04 devnull case 'e':
31 b2ad2ef1 2005-01-04 devnull waitforeof = 1;
32 b2ad2ef1 2005-01-04 devnull break;
33 b2ad2ef1 2005-01-04 devnull default:
34 b2ad2ef1 2005-01-04 devnull usage();
35 b2ad2ef1 2005-01-04 devnull }ARGEND
36 b2ad2ef1 2005-01-04 devnull
37 b2ad2ef1 2005-01-04 devnull if(argc != 1)
38 b2ad2ef1 2005-01-04 devnull usage();
39 b2ad2ef1 2005-01-04 devnull
40 b2ad2ef1 2005-01-04 devnull if((fd = dial(argv[0], nil, nil, nil)) < 0)
41 b2ad2ef1 2005-01-04 devnull sysfatal("dial: %r");
42 b2ad2ef1 2005-01-04 devnull
43 b2ad2ef1 2005-01-04 devnull switch(pid = fork()){
44 b2ad2ef1 2005-01-04 devnull case -1:
45 b2ad2ef1 2005-01-04 devnull sysfatal("fork: %r");
46 b2ad2ef1 2005-01-04 devnull case 0:
47 b2ad2ef1 2005-01-04 devnull while((n = read(0, buf, sizeof buf)) > 0)
48 9d597981 2005-02-11 devnull if(write(fd, buf, n) < 0)
49 b2ad2ef1 2005-01-04 devnull break;
50 b2ad2ef1 2005-01-04 devnull if(!waitforeof)
51 b2ad2ef1 2005-01-04 devnull postnote(PNPROC, getppid(), "kill");
52 b2ad2ef1 2005-01-04 devnull exits(nil);
53 b2ad2ef1 2005-01-04 devnull }
54 b2ad2ef1 2005-01-04 devnull
55 b2ad2ef1 2005-01-04 devnull while((n = read(fd, buf, sizeof buf)) > 0)
56 b2ad2ef1 2005-01-04 devnull if(write(1, buf, n) < 0)
57 b2ad2ef1 2005-01-04 devnull break;
58 b2ad2ef1 2005-01-04 devnull
59 b2ad2ef1 2005-01-04 devnull postnote(PNPROC, pid, "kill");
60 b2ad2ef1 2005-01-04 devnull waitpid();
61 b2ad2ef1 2005-01-04 devnull exits(0);
62 b2ad2ef1 2005-01-04 devnull }