# HG changeset patch # User Matti Hamalainen # Date 1411605428 -10800 # Node ID 0f43a94516f4757252f839647a2cd785e0a96337 # Parent 286b2249c5d253dd0500a639302d70132b8e5ea8 Improve argument handling module. diff -r 286b2249c5d2 -r 0f43a94516f4 th_args.c --- a/th_args.c Thu Sep 25 03:18:27 2014 +0300 +++ b/th_args.c Thu Sep 25 03:37:08 2014 +0300 @@ -62,15 +62,15 @@ ------- The return value from handler callbacks affects the return value of th_args_process(). Additionally, a failure in callback (returns FALSE) -effects the argument processing if bailOut argument of th_args_process() -is TRUE! +effects the argument processing if OPTH_BAILOUT flag for th_args_process() +is set. -If bailOut is TRUE, any error/failure in argument processing (including +If OPTH_BAILOUT is set, any error/failure in argument processing (including callbacks) immediately stops the argument processing and FALSE is returned from th_args_process(). -If bailOut is FALSE, most errors are "ignored", but FALSE is still returned -if any errors occured. +If OPTH_BAILOUT is NOT set, most errors are "ignored", but FALSE is still +returned if any errors occured. NOTICE #2! @@ -251,11 +251,11 @@ BOOL th_args_process(int argc, char *argv[], optarg_t optList[], int optListN, BOOL(*handleOpt) (int, char *, char *), - BOOL(*handleNonOption) (char *), BOOL bailOut) + BOOL(*handleNonOption) (char *), int flags) { BOOL endOptions, optionsOK; int argIndex, newArgIndex; - char *currArg; + int handle = flags & OPTH_ONLY_MASK; // Parse arguments argIndex = 1; @@ -263,8 +263,8 @@ endOptions = FALSE; while (argIndex < argc) { - currArg = argv[argIndex]; - if ((currArg[0] == '-') && !endOptions) + char *currArg = argv[argIndex]; + if (*currArg == '-' && !endOptions && (handle == OPTH_ONLY_OPTS || handle == 0)) { newArgIndex = argIndex; currArg++; @@ -296,6 +296,7 @@ argIndex = newArgIndex; } else + if (handle == OPTH_ONLY_OTHER || handle == 0) { // Was not option argument if (handleNonOption == NULL @@ -307,7 +308,7 @@ } // Check if we bail out on invalid argument - if (!optionsOK && bailOut) + if (!optionsOK && (flags & OPTH_BAILOUT)) return FALSE; argIndex++; diff -r 286b2249c5d2 -r 0f43a94516f4 th_args.h --- a/th_args.h Thu Sep 25 03:18:27 2014 +0300 +++ b/th_args.h Thu Sep 25 03:37:08 2014 +0300 @@ -21,6 +21,11 @@ #define OPT_ARGREQ (1) // Option requires an argument #define OPT_ARGMASK (3) // Mask for option argument flags +#define OPTH_BAILOUT 0x0001 // Bail out on errors +#define OPTH_ONLY_OPTS 0x0010 // Handle only options +#define OPTH_ONLY_OTHER 0x0020 // Handle only "non-options" +#define OPTH_ONLY_MASK 0x00f0 // Mask + typedef struct { @@ -35,7 +40,7 @@ BOOL th_args_process(int argc, char *argv[], optarg_t argList[], int argListN, BOOL (*handleOpt)(int, char *, char *), - BOOL (*handleFile)(char *), BOOL); + BOOL (*handleFile)(char *), int flags); void th_args_help(FILE *, optarg_t optList[], int optListN);