ERROR_CODE cfg_init_from_cli(int argc, char **argv, Configuration *cfg) { char *equals_char = NULL; size_t arglen = 0; int i = 0; /* Clear the configuration first */ cfg_free(cfg); assert(argc > 1); for(i = 1; i < argc; i++) { if (arg_is(argv[i], OPT_HELP)) { return ERR_CFG_HELPREQUEST; } equals_char = strchr(argv[i], '='); if (arg_is(argv[i], OPT_OUTPATH)) { if ( equals_char ) { /* option is '--opt=value' or '-o=value' */ set_value(&cfg->lpath, ++equals_char); } else if (arg_is_short(argv[i], OPT_OUTPATH) && arglen > strlen(OPT_OUTPATH.sname)) { /* option is '-ovalue' */ set_value(&cfg->lpath, argv[i] + strlen(OPT_OUTPATH.sname)); } else { /* option is '-o value' or '--opt value' */ i++; if (i == argc) return ERR_CFG_NOARGS; set_value(&cfg->lpath, argv[i]); } } else { /* We have a URI */ set_value(&cfg->url, argv[i]); } } if (!cfg->lpath) set_value(&cfg->lpath, DFLT_OUTPUTPATH); return ERR_NONE; }
int wmain(int argc, const WCHAR* argv[]) { static const WCHAR helpW[]={'h','e','l','p',0}; static const WCHAR shelpW[]={'/','h','e','l','p',0}; static const WCHAR startW[]={'s','t','a','r','t',0}; static const WCHAR stopW[]={'s','t','o','p',0}; static const WCHAR useW[]={'u','s','e',0}; if (argc < 2) { output_string(STRING_USAGE); return 1; } if(arg_is(argv[1], helpW)) { if(argc > 3) { output_string(STRING_USAGE); return 1; } if(argc == 2) output_string(STRING_USAGE); else if(arg_is(argv[2], startW)) output_string(STRING_START_USAGE); else if(arg_is(argv[2], stopW)) output_string(STRING_STOP_USAGE); else output_string(STRING_USAGE); } else if(arg_is(argv[1], startW)) { if(argc > 3) { output_string(STRING_START_USAGE); return 1; } if (argc == 2) { if (!net_enum_services()) return 1; } else if(arg_is(argv[2], shelpW)) output_string(STRING_START_USAGE); else if(!net_service(NET_START, argv[2])) return 1; } else if(arg_is(argv[1], stopW)) { if(argc != 3) { output_string(STRING_STOP_USAGE); return 1; } if(arg_is(argv[2], shelpW)) output_string(STRING_STOP_USAGE); else if(!net_service(NET_STOP, argv[2])) return 1; } else if(arg_is(argv[1], useW)) { if(!net_use(argc, argv)) return 1; } else output_string(STRING_USAGE); return 0; }