X-Git-Url: https://git.ucc.asn.au/?p=tpg%2Fopendispense2.git;a=blobdiff_plain;f=src%2Fclient%2Fmain.c;fp=src%2Fclient%2Fmain.c;h=3c017a49a7cc06ba068f0a1cf665eb3c1a9d0e71;hp=ede9290d2ca43d15e96c224aa899922ffa5802fa;hb=9caffbc7ed251136bab144a957058e7d9f470b00;hpb=bc9985b6194aabd4439933925f50e249610577d0 diff --git a/src/client/main.c b/src/client/main.c index ede9290..3c017a4 100644 --- a/src/client/main.c +++ b/src/client/main.c @@ -618,14 +618,17 @@ int main(int argc, char *argv[]) return ret; // Load config file - Config_ParseFile(gsConfigFile); + // - Don't check return value, leads to defaults being used + if( Config_ParseFile(gsConfigFile) ) { + fprintf(stderr, "NOTICE: Loading of config file '%s' failed, using defaults\n", gsConfigFile); + } // Parse config values - if (!giDispenseServerSet) { - gsDispenseServer = Config_GetValue("dispense_server",0); + if( !giDispenseServerSet ) { + Config_GetValue_Str("dispense_server", &gsDispenseServer); } if (!giDispensePortSet) { - giDispensePort = Config_GetValue_Int("dispense_port",0); + Config_GetValue_Int("dispense_port", &giDispensePort); } @@ -844,11 +847,25 @@ int main(int argc, char *argv[]) int ParseArguments(int argc, char *argv[]) { + bool rest_free = false; for( int i = 1; i < argc; i ++ ) { char *arg = argv[i]; - if( arg[0] == '-' ) + // If it doesn't start with a '-', or -- has been seen + // XXX: Hack - If parsing "user type", don't parse - options + bool hack_usertype = (i > 2 && strcmp(argv[i-2], "user") == 0 && strcmp(argv[i-1], "type") == 0); + if( rest_free || arg[0] != '-' || hack_usertype ) + { + if( giTextArgc == MAX_TXT_ARGS ) + { + fprintf(stderr, "ERROR: Too many arguments\n"); + return RV_ARGUMENTS; + } + + gsTextArgs[giTextArgc++] = argv[i]; + } + else if( arg[1] != '-' ) { switch(arg[1]) { @@ -858,8 +875,6 @@ int ParseArguments(int argc, char *argv[]) exit(0); case 'c': - if( i > 2 && strcmp(argv[i-1], "type") == 0 ) - goto _default; if( i + 1 >= argc ) { fprintf(stderr, "%s: -c takes an argument\n", argv[0]); ShowUsage(); @@ -947,54 +962,47 @@ int ParseArguments(int argc, char *argv[]) case 'n': // Dry Run / read-only gbDryRun = 1; break; - case '-': - if( strcmp(argv[i], "--help") == 0 ) { - ShowUsage(); - exit(0); - } - else if( strcmp(argv[i], "--dry-run") == 0 ) { - gbDryRun = 1; - } - else if( strcmp(argv[i], "--drinks-only") == 0 ) { - giUIMode = UI_MODE_DRINKSONLY; - } - else if( strcmp(argv[i], "--can-select-all") == 0 ) { - gbDisallowSelectWithoutBalance = 0; - } - else { - fprintf(stderr, "%s: Unknown switch '%s'\n", argv[0], argv[i]); - ShowUsage(); - return RV_ARGUMENTS; - } - break; - default: _default: - // The first argument is not allowed to begin with 'i' - // (catches most bad flags) - if( giTextArgc == 0 ) { - fprintf(stderr, "%s: Unknown switch '%s'\n", argv[0], argv[i]); - ShowUsage(); - return RV_ARGUMENTS; - } - if( giTextArgc == MAX_TXT_ARGS ) - { - fprintf(stderr, "ERROR: Too many arguments\n"); - return RV_ARGUMENTS; - } - gsTextArgs[giTextArgc++] = argv[i]; - break; + default: + fprintf(stderr, "%s: Unknown switch '%s'\n", argv[0], argv[i]); + ShowUsage(); + return RV_ARGUMENTS; } continue; } - - if( giTextArgc == MAX_TXT_ARGS ) + else { - fprintf(stderr, "ERROR: Too many arguments\n"); - return RV_ARGUMENTS; + // '--' : Terminate argument processing (remainder is free) + if( arg[2] == '\0' ) { + rest_free = true; + } + else if( strcmp(arg, "--help") == 0 ) { + ShowUsage(); + exit(0); + } + else if( strcmp(arg, "--dry-run") == 0 ) { + gbDryRun = 1; + } + else if( strcmp(arg, "--drinks-only") == 0 ) { + giUIMode = UI_MODE_DRINKSONLY; + } + else if( strcmp(arg, "--can-select-all") == 0 ) { + gbDisallowSelectWithoutBalance = 0; + } + else if( strcmp(arg, "--configfile") == 0 ) { + if( i + 1 >= argc ) { + fprintf(stderr, "%s: %s takes an argument\n", argv[0], arg); + ShowUsage(); + return RV_ARGUMENTS; + } + gsConfigFile = argv[++i]; + } + else { + fprintf(stderr, "%s: Unknown switch '%s'\n", argv[0], arg); + ShowUsage(); + return RV_ARGUMENTS; + } } - - gsTextArgs[giTextArgc++] = argv[i]; - } return 0; } @@ -1004,18 +1012,13 @@ int ParseArguments(int argc, char *argv[]) // --------------- char *trim(char *string) { - int i; - + // Increment pointer while it points to a space while( isspace(*string) ) string ++; - for( i = strlen(string); i--; ) - { - if( isspace(string[i]) ) - string[i] = '\0'; - else - break; - } + // And repalce trailing spaces with NUL bytes + for( int i = strlen(string); i-- && isspace(string[i]); ) + string[i] = '\0'; return string; }