Blame


1 7763a61a 2003-11-23 devnull #include "stdinc.h"
2 7763a61a 2003-11-23 devnull #include "vac.h"
3 7763a61a 2003-11-23 devnull #include "dat.h"
4 7763a61a 2003-11-23 devnull #include "fns.h"
5 7763a61a 2003-11-23 devnull
6 7763a61a 2003-11-23 devnull void usage(void);
7 7763a61a 2003-11-23 devnull int unvac(VacFS *fs);
8 7763a61a 2003-11-23 devnull int readScore(int fd, uchar score[VtScoreSize]);
9 7763a61a 2003-11-23 devnull static void warn(char *fmt, ...);
10 7763a61a 2003-11-23 devnull void dirlist(VacFS *fs, char *path);
11 7763a61a 2003-11-23 devnull
12 7763a61a 2003-11-23 devnull static int nwant;
13 7763a61a 2003-11-23 devnull static char **want;
14 7763a61a 2003-11-23 devnull static int dflag = 1;
15 7763a61a 2003-11-23 devnull static int cflag;
16 7763a61a 2003-11-23 devnull static int lower;
17 7763a61a 2003-11-23 devnull static int verbose;
18 7763a61a 2003-11-23 devnull static int settimes;
19 7763a61a 2003-11-23 devnull
20 7763a61a 2003-11-23 devnull void
21 7763a61a 2003-11-23 devnull main(int argc, char *argv[])
22 7763a61a 2003-11-23 devnull {
23 7763a61a 2003-11-23 devnull char *zfile;
24 7763a61a 2003-11-23 devnull int ok, table;
25 7763a61a 2003-11-23 devnull VtSession *z;
26 7763a61a 2003-11-23 devnull char *vsrv = nil;
27 7763a61a 2003-11-23 devnull char *host = nil;
28 7763a61a 2003-11-23 devnull char *p;
29 7763a61a 2003-11-23 devnull int ncache = 1000;
30 7763a61a 2003-11-23 devnull VacFS *fs;
31 7763a61a 2003-11-23 devnull
32 7763a61a 2003-11-23 devnull table = 0;
33 7763a61a 2003-11-23 devnull zfile = nil;
34 7763a61a 2003-11-23 devnull ARGBEGIN{
35 7763a61a 2003-11-23 devnull case 'D':
36 7763a61a 2003-11-23 devnull dflag++;
37 7763a61a 2003-11-23 devnull break;
38 7763a61a 2003-11-23 devnull case 'c':
39 7763a61a 2003-11-23 devnull cflag++;
40 7763a61a 2003-11-23 devnull break;
41 7763a61a 2003-11-23 devnull case 'C':
42 7763a61a 2003-11-23 devnull p = ARGF();
43 7763a61a 2003-11-23 devnull if(p == nil)
44 7763a61a 2003-11-23 devnull usage();
45 7763a61a 2003-11-23 devnull ncache = atoi(p);
46 7763a61a 2003-11-23 devnull if(ncache < 10)
47 7763a61a 2003-11-23 devnull ncache = 10;
48 7763a61a 2003-11-23 devnull if(ncache > 1000000)
49 7763a61a 2003-11-23 devnull ncache = 1000000;
50 7763a61a 2003-11-23 devnull break;
51 7763a61a 2003-11-23 devnull case 'i':
52 7763a61a 2003-11-23 devnull lower++;
53 7763a61a 2003-11-23 devnull break;
54 7763a61a 2003-11-23 devnull case 'f':
55 7763a61a 2003-11-23 devnull zfile = ARGF();
56 7763a61a 2003-11-23 devnull if(zfile == nil)
57 7763a61a 2003-11-23 devnull usage();
58 7763a61a 2003-11-23 devnull break;
59 7763a61a 2003-11-23 devnull case 'h':
60 7763a61a 2003-11-23 devnull host = ARGF();
61 7763a61a 2003-11-23 devnull break;
62 7763a61a 2003-11-23 devnull case 't':
63 7763a61a 2003-11-23 devnull table++;
64 7763a61a 2003-11-23 devnull break;
65 7763a61a 2003-11-23 devnull case 'T':
66 7763a61a 2003-11-23 devnull settimes++;
67 7763a61a 2003-11-23 devnull break;
68 7763a61a 2003-11-23 devnull case 's':
69 7763a61a 2003-11-23 devnull vsrv = ARGF();
70 7763a61a 2003-11-23 devnull break;
71 7763a61a 2003-11-23 devnull case 'v':
72 7763a61a 2003-11-23 devnull verbose++;
73 7763a61a 2003-11-23 devnull break;
74 7763a61a 2003-11-23 devnull default:
75 7763a61a 2003-11-23 devnull usage();
76 7763a61a 2003-11-23 devnull break;
77 7763a61a 2003-11-23 devnull }ARGEND
78 7763a61a 2003-11-23 devnull
79 7763a61a 2003-11-23 devnull nwant = argc;
80 7763a61a 2003-11-23 devnull want = argv;
81 7763a61a 2003-11-23 devnull
82 7763a61a 2003-11-23 devnull vtAttach();
83 7763a61a 2003-11-23 devnull
84 7763a61a 2003-11-23 devnull if(zfile == nil)
85 7763a61a 2003-11-23 devnull usage();
86 7763a61a 2003-11-23 devnull
87 7763a61a 2003-11-23 devnull if(vsrv != nil)
88 7763a61a 2003-11-23 devnull z = vtStdioServer(vsrv);
89 7763a61a 2003-11-23 devnull else
90 7763a61a 2003-11-23 devnull z = vtDial(host);
91 7763a61a 2003-11-23 devnull if(z == nil)
92 7763a61a 2003-11-23 devnull vtFatal("could not connect to server: %s", vtGetError());
93 7763a61a 2003-11-23 devnull vtSetDebug(z, 0);
94 7763a61a 2003-11-23 devnull if(!vtConnect(z, 0))
95 7763a61a 2003-11-23 devnull vtFatal("vtConnect: %s", vtGetError());
96 7763a61a 2003-11-23 devnull fs = vfsOpen(z, zfile, 1, ncache);
97 7763a61a 2003-11-23 devnull if(fs == nil)
98 7763a61a 2003-11-23 devnull vtFatal("vfsOpen: %s", vtGetError());
99 7763a61a 2003-11-23 devnull ok = unvac(fs);
100 7763a61a 2003-11-23 devnull vtClose(z);
101 7763a61a 2003-11-23 devnull vtDetach();
102 7763a61a 2003-11-23 devnull
103 7763a61a 2003-11-23 devnull exits(ok? 0 : "error");
104 7763a61a 2003-11-23 devnull }
105 7763a61a 2003-11-23 devnull
106 7763a61a 2003-11-23 devnull void
107 7763a61a 2003-11-23 devnull usage(void)
108 7763a61a 2003-11-23 devnull {
109 7763a61a 2003-11-23 devnull fprint(2, "usage: %s [-tTcDv] -f zipfile [-s ventid] [-h host] [file ...]\n", argv0);
110 7763a61a 2003-11-23 devnull exits("usage");
111 7763a61a 2003-11-23 devnull }
112 7763a61a 2003-11-23 devnull
113 7763a61a 2003-11-23 devnull void
114 7763a61a 2003-11-23 devnull suck(VacFile *f)
115 7763a61a 2003-11-23 devnull {
116 7763a61a 2003-11-23 devnull USED(f);
117 7763a61a 2003-11-23 devnull }
118 7763a61a 2003-11-23 devnull
119 7763a61a 2003-11-23 devnull
120 7763a61a 2003-11-23 devnull void
121 7763a61a 2003-11-23 devnull vacfile(VacFS *fs, char *path, VacDir *vd)
122 7763a61a 2003-11-23 devnull {
123 7763a61a 2003-11-23 devnull char *path2;
124 7763a61a 2003-11-23 devnull
125 7763a61a 2003-11-23 devnull path2 = vtMemAlloc(strlen(path) + 1 + strlen(vd->elem) + 1);
126 7763a61a 2003-11-23 devnull if(path[1] == 0)
127 7763a61a 2003-11-23 devnull sprintf(path2, "/%s", vd->elem);
128 7763a61a 2003-11-23 devnull else
129 7763a61a 2003-11-23 devnull sprintf(path2, "%s/%s", path, vd->elem);
130 7763a61a 2003-11-23 devnull fprint(2, "vac file: %s\n", path2);
131 7763a61a 2003-11-23 devnull if(vd->mode & ModeDir)
132 7763a61a 2003-11-23 devnull dirlist(fs, path2);
133 7763a61a 2003-11-23 devnull vtMemFree(path2);
134 7763a61a 2003-11-23 devnull }
135 7763a61a 2003-11-23 devnull
136 7763a61a 2003-11-23 devnull void
137 7763a61a 2003-11-23 devnull dirlist(VacFS *fs, char *path)
138 7763a61a 2003-11-23 devnull {
139 7763a61a 2003-11-23 devnull VacDir vd[50];
140 7763a61a 2003-11-23 devnull VacDirEnum *ds;
141 7763a61a 2003-11-23 devnull int i, n;
142 7763a61a 2003-11-23 devnull
143 7763a61a 2003-11-23 devnull ds = vdeOpen(fs, path);
144 7763a61a 2003-11-23 devnull if(ds == nil) {
145 7763a61a 2003-11-23 devnull fprint(2, "could not open: %s: %s\n", path, vtGetError());
146 7763a61a 2003-11-23 devnull return;
147 7763a61a 2003-11-23 devnull }
148 7763a61a 2003-11-23 devnull for(;;) {
149 7763a61a 2003-11-23 devnull n = vdeRead(ds, vd, sizeof(vd)/sizeof(VacDir));
150 7763a61a 2003-11-23 devnull if(n < 0) {
151 7763a61a 2003-11-23 devnull warn("vdRead failed: %s: %s", path, vtGetError());
152 7763a61a 2003-11-23 devnull return;
153 7763a61a 2003-11-23 devnull }
154 7763a61a 2003-11-23 devnull if(n == 0)
155 7763a61a 2003-11-23 devnull break;
156 7763a61a 2003-11-23 devnull for(i=0; i<n; i++) {
157 7763a61a 2003-11-23 devnull vacfile(fs, path, &vd[i]);
158 7763a61a 2003-11-23 devnull vdCleanup(&vd[i]);
159 7763a61a 2003-11-23 devnull }
160 7763a61a 2003-11-23 devnull }
161 7763a61a 2003-11-23 devnull vdeFree(ds);
162 7763a61a 2003-11-23 devnull }
163 7763a61a 2003-11-23 devnull
164 7763a61a 2003-11-23 devnull int
165 7763a61a 2003-11-23 devnull unvac(VacFS *fs)
166 7763a61a 2003-11-23 devnull {
167 7763a61a 2003-11-23 devnull dirlist(fs, "/");
168 7763a61a 2003-11-23 devnull
169 7763a61a 2003-11-23 devnull return 1;
170 7763a61a 2003-11-23 devnull }
171 7763a61a 2003-11-23 devnull
172 7763a61a 2003-11-23 devnull static void
173 7763a61a 2003-11-23 devnull warn(char *fmt, ...)
174 7763a61a 2003-11-23 devnull {
175 7763a61a 2003-11-23 devnull va_list arg;
176 7763a61a 2003-11-23 devnull
177 7763a61a 2003-11-23 devnull va_start(arg, fmt);
178 7763a61a 2003-11-23 devnull fprint(2, "%s: ", argv0);
179 7763a61a 2003-11-23 devnull vfprint(2, fmt, arg);
180 7763a61a 2003-11-23 devnull fprint(2, "\n");
181 7763a61a 2003-11-23 devnull va_end(arg);
182 7763a61a 2003-11-23 devnull }