start thinking about vac -- doesn't build yet
This commit is contained in:
parent
7a4ee46d25
commit
7763a61a35
22 changed files with 7959 additions and 0 deletions
182
src/cmd/vac/vactest.c
Normal file
182
src/cmd/vac/vactest.c
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
#include "stdinc.h"
|
||||
#include "vac.h"
|
||||
#include "dat.h"
|
||||
#include "fns.h"
|
||||
|
||||
void usage(void);
|
||||
int unvac(VacFS *fs);
|
||||
int readScore(int fd, uchar score[VtScoreSize]);
|
||||
static void warn(char *fmt, ...);
|
||||
void dirlist(VacFS *fs, char *path);
|
||||
|
||||
static int nwant;
|
||||
static char **want;
|
||||
static int dflag = 1;
|
||||
static int cflag;
|
||||
static int lower;
|
||||
static int verbose;
|
||||
static int settimes;
|
||||
|
||||
void
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
char *zfile;
|
||||
int ok, table;
|
||||
VtSession *z;
|
||||
char *vsrv = nil;
|
||||
char *host = nil;
|
||||
char *p;
|
||||
int ncache = 1000;
|
||||
VacFS *fs;
|
||||
|
||||
table = 0;
|
||||
zfile = nil;
|
||||
ARGBEGIN{
|
||||
case 'D':
|
||||
dflag++;
|
||||
break;
|
||||
case 'c':
|
||||
cflag++;
|
||||
break;
|
||||
case 'C':
|
||||
p = ARGF();
|
||||
if(p == nil)
|
||||
usage();
|
||||
ncache = atoi(p);
|
||||
if(ncache < 10)
|
||||
ncache = 10;
|
||||
if(ncache > 1000000)
|
||||
ncache = 1000000;
|
||||
break;
|
||||
case 'i':
|
||||
lower++;
|
||||
break;
|
||||
case 'f':
|
||||
zfile = ARGF();
|
||||
if(zfile == nil)
|
||||
usage();
|
||||
break;
|
||||
case 'h':
|
||||
host = ARGF();
|
||||
break;
|
||||
case 't':
|
||||
table++;
|
||||
break;
|
||||
case 'T':
|
||||
settimes++;
|
||||
break;
|
||||
case 's':
|
||||
vsrv = ARGF();
|
||||
break;
|
||||
case 'v':
|
||||
verbose++;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
break;
|
||||
}ARGEND
|
||||
|
||||
nwant = argc;
|
||||
want = argv;
|
||||
|
||||
vtAttach();
|
||||
|
||||
if(zfile == nil)
|
||||
usage();
|
||||
|
||||
if(vsrv != nil)
|
||||
z = vtStdioServer(vsrv);
|
||||
else
|
||||
z = vtDial(host);
|
||||
if(z == nil)
|
||||
vtFatal("could not connect to server: %s", vtGetError());
|
||||
vtSetDebug(z, 0);
|
||||
if(!vtConnect(z, 0))
|
||||
vtFatal("vtConnect: %s", vtGetError());
|
||||
fs = vfsOpen(z, zfile, 1, ncache);
|
||||
if(fs == nil)
|
||||
vtFatal("vfsOpen: %s", vtGetError());
|
||||
ok = unvac(fs);
|
||||
vtClose(z);
|
||||
vtDetach();
|
||||
|
||||
exits(ok? 0 : "error");
|
||||
}
|
||||
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fprint(2, "usage: %s [-tTcDv] -f zipfile [-s ventid] [-h host] [file ...]\n", argv0);
|
||||
exits("usage");
|
||||
}
|
||||
|
||||
void
|
||||
suck(VacFile *f)
|
||||
{
|
||||
USED(f);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
vacfile(VacFS *fs, char *path, VacDir *vd)
|
||||
{
|
||||
char *path2;
|
||||
|
||||
path2 = vtMemAlloc(strlen(path) + 1 + strlen(vd->elem) + 1);
|
||||
if(path[1] == 0)
|
||||
sprintf(path2, "/%s", vd->elem);
|
||||
else
|
||||
sprintf(path2, "%s/%s", path, vd->elem);
|
||||
fprint(2, "vac file: %s\n", path2);
|
||||
if(vd->mode & ModeDir)
|
||||
dirlist(fs, path2);
|
||||
vtMemFree(path2);
|
||||
}
|
||||
|
||||
void
|
||||
dirlist(VacFS *fs, char *path)
|
||||
{
|
||||
VacDir vd[50];
|
||||
VacDirEnum *ds;
|
||||
int i, n;
|
||||
|
||||
ds = vdeOpen(fs, path);
|
||||
if(ds == nil) {
|
||||
fprint(2, "could not open: %s: %s\n", path, vtGetError());
|
||||
return;
|
||||
}
|
||||
for(;;) {
|
||||
n = vdeRead(ds, vd, sizeof(vd)/sizeof(VacDir));
|
||||
if(n < 0) {
|
||||
warn("vdRead failed: %s: %s", path, vtGetError());
|
||||
return;
|
||||
}
|
||||
if(n == 0)
|
||||
break;
|
||||
for(i=0; i<n; i++) {
|
||||
vacfile(fs, path, &vd[i]);
|
||||
vdCleanup(&vd[i]);
|
||||
}
|
||||
}
|
||||
vdeFree(ds);
|
||||
}
|
||||
|
||||
int
|
||||
unvac(VacFS *fs)
|
||||
{
|
||||
dirlist(fs, "/");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
warn(char *fmt, ...)
|
||||
{
|
||||
va_list arg;
|
||||
|
||||
va_start(arg, fmt);
|
||||
fprint(2, "%s: ", argv0);
|
||||
vfprint(2, fmt, arg);
|
||||
fprint(2, "\n");
|
||||
va_end(arg);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue