diff options
author | midipix <writeonce@midipix.org> | 2016-03-04 12:13:22 -0500 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2016-11-11 00:22:36 -0500 |
commit | d81b54b567dfc593dcc3f16a5cce61b78b869439 (patch) | |
tree | e5cf88f37f01d57b14b3cf2005d6dabe9a175c2c /src/internal/argv | |
parent | 875f8d4698fcfe32b4efb9a0fd45ee3d91c6a51a (diff) | |
download | mdso-d81b54b567dfc593dcc3f16a5cce61b78b869439.tar.bz2 mdso-d81b54b567dfc593dcc3f16a5cce61b78b869439.tar.xz |
argv.h: argv_scan(): report argv index of first unit and first error (if any).
Diffstat (limited to 'src/internal/argv')
-rw-r--r-- | src/internal/argv/argv.h | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/internal/argv/argv.h b/src/internal/argv/argv.h index 3bcfc9b..884ed14 100644 --- a/src/internal/argv/argv.h +++ b/src/internal/argv/argv.h @@ -128,6 +128,8 @@ struct argv_ctx { int flags; int mode; int nentries; + int unitidx; + int erridx; enum argv_error errcode; const char * errch; const struct argv_option * erropt; @@ -292,8 +294,7 @@ static void argv_scan( bool fhybrid; bool fnoscan; - argv++; - parg = argv; + parg = &argv[1]; ch = *parg; ferr = ARGV_ERROR_OK; fshort = false; @@ -301,6 +302,9 @@ static void argv_scan( fval = false; mentry = meta ? meta->entries : 0; + ctx->unitidx = 0; + ctx->erridx = 0; + while (ch && (ferr == ARGV_ERROR_OK)) { option = 0; fhybrid = false; @@ -424,10 +428,15 @@ static void argv_scan( if (!is_arg_in_paradigm(ch,option->paradigm)) ferr = ARGV_ERROR_OPTARG_PARADIGM; + if (ferr == ARGV_ERROR_OK) + if (!option && !ctx->unitidx) + ctx->unitidx = parg - argv; + if (ferr != ARGV_ERROR_OK) { ctx->errcode = ferr; ctx->errch = ctx->errch ? ctx->errch : ch; ctx->erropt = option; + ctx->erridx = parg - argv; return; } else if (ctx->mode == ARGV_MODE_SCAN) { if (!fnoscan) @@ -670,7 +679,7 @@ static struct argv_meta * argv_get( int flags) { struct argv_meta * meta; - struct argv_ctx ctx = {flags,ARGV_MODE_SCAN,0,0,0,0,0}; + struct argv_ctx ctx = {flags,ARGV_MODE_SCAN,0,0,0,0,0,0,0}; argv_scan(argv,options,&ctx,0); |