]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/webfsget.c
cwfs: back to previous version
[plan9front.git] / sys / src / cmd / webfsget.c
1 /* Example of how to use webfs */
2 #include <u.h>
3 #include <libc.h>
4
5 void
6 xfer(int from, int to)
7 {
8         char buf[12*1024];
9         int n;
10
11         while((n = read(from, buf, sizeof buf)) > 0)
12                 if(write(to, buf, n) < 0)
13                         sysfatal("write failed: %r");
14         if(n < 0)
15                 sysfatal("read failed: %r");
16 }
17
18 void
19 usage(void)
20 {
21         fprint(2, "usage: webfsget [-b baseurl] [-m mtpt] [-p postbody] url\n");
22         exits("usage");
23 }
24
25 void
26 main(int argc, char **argv)
27 {
28         int conn, ctlfd, fd, n;
29         char buf[128], *base, *mtpt, *post, *url;
30
31         mtpt = "/mnt/web";
32         post = nil;
33         base = nil;
34         ARGBEGIN{
35         default:
36                 usage();
37         case 'b':
38                 base = EARGF(usage());
39                 break;
40         case 'm':
41                 mtpt = EARGF(usage());
42                 break;
43         case 'p':
44                 post = EARGF(usage());
45                 break;
46         }ARGEND;
47
48         if (argc != 1) 
49                 usage();
50
51         url = argv[0];
52  
53         snprint(buf, sizeof buf, "%s/clone", mtpt);
54         if((ctlfd = open(buf, ORDWR)) < 0)
55                 sysfatal("couldn't open %s: %r", buf);
56         if((n = read(ctlfd, buf, sizeof buf-1)) < 0)
57                 sysfatal("reading clone: %r");
58         if(n == 0)
59                 sysfatal("short read on clone");
60         buf[n] = '\0';
61         conn = atoi(buf);
62
63         if(base)
64                 if(fprint(ctlfd, "baseurl %s", base) < 0)
65                         sysfatal("baseurl ctl write: %r");
66
67         if(fprint(ctlfd, "url %s", url) <= 0)
68                 sysfatal("get ctl write: %r");
69
70         if(post){
71                 snprint(buf, sizeof buf, "%s/%d/postbody", mtpt, conn);
72                 if((fd = open(buf, OWRITE)) < 0)
73                         sysfatal("open %s: %r", buf);
74                 if(write(fd, post, strlen(post)) < 0)
75                         sysfatal("post write failed: %r");
76                 close(fd);
77         }
78
79         snprint(buf, sizeof buf, "%s/%d/body", mtpt, conn);
80         if((fd = open(buf, OREAD)) < 0)
81                 sysfatal("open %s: %r", buf);
82
83         xfer(fd, 1);
84         exits(nil);
85 }