archie/prospero/user/vcache/main.c
2024-05-27 16:13:40 +02:00

157 lines
3.9 KiB
C

/* This is the main function for the Prospero program vcache.
Exit with status 0 if file retrieval was successful; nonzero if it was not.
This is called only by p__map_cache(), in lib/pcompat/pmap_cache.c and by
VGET in user/vget.c
*/
/*
* Copyright (c) 1991, 1992, 1993 by the University of Southern California
*
* For copying and distribution information, please see the file
* <usc-license.h>
*/
#include <usc-license.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <pfs.h>
#include <pcompat.h>
#include <perrno.h>
/* Variables declared in ftp_var.h */
extern int verbose;
extern int options;
extern int debug;
extern int trace;
/* Variables declared in vcache.c*/
extern int cache_verbose;
int pfs_debug = 0;
void
main(argc, argv)
int argc;
char *argv[];
{
int retval;
pfs_enable = PMAP_DISABLE;
if (retval = vcache1(argc,argv))
fprintf(stderr,"%s\n",p_err_string);
exit(retval);
}
/* This next routine could go in the library as well, if anything wants
to set options this way */
int
vcache1(argc, argv)
int argc;
char *argv[];
{
int manage_cache = 0; /* Must be set to manage the cache. */
int replace = 0; /* set, but never used */
int flush = 0; /* set, but never used */
char *host; /* remote host */
char *remote; /* remote filename */
char *local; /* local filename */
char *method; /* access method */
int retval;
vcache2_init();
p_initialize("VCACHE",0,NULL);
argc--;argv++;
while (argc > 0 && *argv[0] == '-') {
switch (*(argv[0]+1)) {
case 'D':
pfs_debug = 1; /* Default debug level */
verbose = 1; /* maximum verbosity */
cache_verbose = 1; /* verbosity -- see -v flag */
sscanf(argv[0],"-D%d",&pfs_debug);
options |= SO_DEBUG;
debug++;
break;
case 'f':
flush = 1;
break;
case 'm':
manage_cache = 1;
break;
case 'r':
replace = 1;
break;
case 't': /* FTP Trace */
trace++;
break;
case 'v':
verbose = 1; /* need to unify verbose and cache_verbose
variables -- they are used identically. */
cache_verbose = 1;
break;
case '\0': /* Ignore the dummy flag "-". This lets us
specify flags easily to execl(). */
break;
default: {
usage:
/* Note this doesnt use getopts, so the old usage
message was wrong, flags must be separated*/
fprintf(stderr,
"Usage: vcache [-f] [-m] [-r] [-v] local access-method-name hosttype \
host nametype name [additional args...]\n");
return(1);
} /* enclosing case of switch */
} /* switch */
argc--; argv++;
}
if((argc == 1) && flush) {
host = NULL;
remote = NULL;
local = argv[0]; argc--; argv++;
method = NULL;
}
else if((argc == 0) && flush) {
host = NULL;
remote = NULL;
local = NULL;
method = NULL;
}
else if(argc >= 6) {
local = argv[0]; argc--; argv++;
method = argv[0]; argc--; argv++;
if (!strequal(argv[0], "INTERNET-D")) goto usage;
argc--, argv++; /* hosttype always INTERNET-D for now. */
host = argv[0]; argc--; argv++;
if (!strequal(argv[0], "ASCII")) goto usage;
argc--, argv++; /* filetype always ASCII for now. */
remote = argv[0]; argc--; argv++;
}
else {
goto usage;
}
if (retval = vcache2a(host, remote, local, method, argv, manage_cache))
fprintf(stderr, "vcache: %s", p_err_string);
exit(retval);
}