#include <u.h>
#include <libc.h>
#include <String.h>
#include "common.h"
#include "debug.h"
#include "holemanager.h"
#include "fs.h"
enum { DEBUG_MAIN = true };
static void usage(void)
{
debug_print("usage",
"\tdivergefs -f rulefile [-h holefile] [-d debuglevel] mountpoint\n"
"\t\tdivergefs -p defaultpath mountpoint");
exits("usage");
}
/**
* parses use the command line arguments to initialize the given setting object
*/
static Setting *parse_options(int argc, char **argv)
{
char *rulefile = nil;
char *holefile = nil;
char *defaultpath = nil;
ARGBEGIN
{
case 'd':
/* sets fs' own debugging level */
debug_set_level(atoi(EARGF(usage())));
break;
case 'D':
fs_native_9p_debug_enable();
break;
case 'h':
holefile = EARGF(usage());
break;
case 'f':
rulefile = EARGF(usage());
break;
case 'p':
defaultpath = EARGF(usage());
break;
default:
usage();
}
ARGEND
if(argc < 1)
{
usage();
}
if(rulefile == nil && holefile == nil && defaultpath == nil)
{
defaultpath = "/tmp";
}
NOISE(DEBUG_MAIN, "parse_options rulefile: %s holefile: %s defaultpath: %s",
rulefile, holefile, defaultpath);
return (defaultpath == nil) ?
setting_new(rulefile, argv[0], holefile) :
setting_default_path_new(defaultpath, rulefile, argv[0], holefile);
}
void main(int argc, char **argv)
{
Setting *setting;
debug_init();
setting = parse_options(argc, argv);
if(setting != nil)
{
NOISE(DEBUG_MAIN, "main starting fs ...");
fs_start(setting);
}
else
{
ERROR(DEBUG_MAIN, "main failed to parse rule file");
}
NOISE(DEBUG_MAIN, "main exits");
exits(nil);
}
|