* use the standard getopt() to parse command-line options

git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@1877 8eb893ce-cfd4-0310-b710-fb5ebe64c474
sayer/1.4-spce2.6
Ondrej Martine 16 years ago
parent 7cae214d9c
commit 2ee9a90417

@ -105,36 +105,34 @@ static void print_usage(bool short_=false)
} }
/* Note: The function should not use log because it is called before logging is initialized. */ /* Note: The function should not use log because it is called before logging is initialized. */
static bool parse_args(int argc, char* argv[], static bool parse_args(int argc, char* argv[], std::map<char,string>& args)
const string& flags, const string& options,
std::map<char,string>& args)
{ {
for(int i=1; i<argc; i++){ #ifndef DISABLE_DAEMON_MODE
char* arg = argv[i]; static const char* opts = ":hvEf:x:d:D:u:g:P:";
#else
if( (*arg != '-') || !*(++arg) ) { static const char* opts = ":hvEf:x:d:D:";
fprintf(stderr, "%s: invalid argument '%s'\n", progname, argv[i]); #endif
return false;
}
if( flags.find(*arg) != string::npos ) {
args[*arg] = "yes";
}
else if(options.find(*arg) != string::npos) {
if(!argv[++i]){
fprintf(stderr, "%s: missing argument for option '-%c'\n", progname, *arg);
return false;
}
args[*arg] = argv[i]; opterr = 0;
}
else { while (true) {
fprintf(stderr, "%s: unknown option '-%c'\n", progname, *arg); int c = getopt(argc, argv, opts);
return false; switch (c) {
case -1:
return true;
case ':':
fprintf(stderr, "%s: missing argument for option '-%c'\n", progname, optopt);
return false;
case '?':
fprintf(stderr, "%s: unknown option '-%c'\n", progname, optopt);
return false;
default:
args[c] = (optarg ? optarg : "yes");
}
} }
}
return true;
} }
/* Note: The function should not use logging because it is called before /* Note: The function should not use logging because it is called before
@ -391,11 +389,7 @@ int main(int argc, char* argv[])
progname = strrchr(argv[0], '/'); progname = strrchr(argv[0], '/');
progname = (progname == NULL ? argv[0] : progname + 1); progname = (progname == NULL ? argv[0] : progname + 1);
#ifndef DISABLE_DAEMON_MODE if(!parse_args(argc, argv, args)){
if(!parse_args(argc, argv, "hvE", "fxdDugP", args)){
#else
if(!parse_args(argc, argv, "hvE", "fxdD", args)){
#endif
print_usage(true); print_usage(true);
return 1; return 1;
} }

Loading…
Cancel
Save