remove some unnecessary code

This commit is contained in:
Lukas Wurzinger 2022-12-12 21:05:23 +01:00
parent 278098189d
commit 162498be5a

View file

@ -116,7 +116,6 @@ static void readarg_parse_arg(struct readarg_parser *rp, const char *arg);
static void readarg_parse_opt(struct readarg_parser *rp, enum readarg_form form, const char **pos); static void readarg_parse_opt(struct readarg_parser *rp, enum readarg_form form, const char **pos);
static struct readarg_opt *readarg_match_opt(struct readarg_parser *rp, enum readarg_form form, const char **needle); static struct readarg_opt *readarg_match_opt(struct readarg_parser *rp, enum readarg_form form, const char **needle);
static struct readarg_opt *readarg_match_finish(struct readarg_parser *rp, const char **needle, const char *adv, struct readarg_opt *opt);
static void readarg_update_opt(struct readarg_parser *rp, const char *attach, struct readarg_opt *opt); static void readarg_update_opt(struct readarg_parser *rp, const char *attach, struct readarg_opt *opt);
static void readarg_update_oper(struct readarg_parser *rp, struct readarg_view_strings val); static void readarg_update_oper(struct readarg_parser *rp, struct readarg_view_strings val);
@ -135,10 +134,9 @@ int readarg_parse(struct readarg_parser *rp) {
/* Check whether the current offset is at the end of argv. */ /* Check whether the current offset is at the end of argv. */
size_t off = rp->state.curr.arg - rp->args.strings; size_t off = rp->state.curr.arg - rp->args.strings;
if (off >= rp->args.len) { if (off >= rp->args.len) {
if (rp->state.pending) { if (rp->state.pending)
/* The last specified option required an argument, but no argument has been provided. */ /* The last specified option required an argument, but no argument has been provided. */
rp->error = READARG_ENOVAL; rp->error = READARG_ENOVAL;
}
return 0; return 0;
} }
@ -187,9 +185,8 @@ int readarg_helpgen_put_usage(struct readarg_parser *rp, struct readarg_helpgen_
for (size_t i = 0; next; i++) { for (size_t i = 0; next; i++) {
optwritten = 1; optwritten = 1;
if (i == 0) { if (i == 0)
READARG_HELPGEN_TRY_LIT(writer, " "); READARG_HELPGEN_TRY_LIT(writer, " ");
}
next = i + 1 < rp->nopts; next = i + 1 < rp->nopts;
size_t lower = readarg_select_lower(opts[i].arg.bounds); size_t lower = readarg_select_lower(opts[i].arg.bounds);
@ -198,9 +195,8 @@ int readarg_helpgen_put_usage(struct readarg_parser *rp, struct readarg_helpgen_
size_t nforms = sizeof opts[i].names / sizeof *opts[i].names; size_t nforms = sizeof opts[i].names / sizeof *opts[i].names;
for (size_t j = 0; j < (upper ? upper : !!inf); j++) { for (size_t j = 0; j < (upper ? upper : !!inf); j++) {
if (j >= lower) { if (j >= lower)
READARG_HELPGEN_TRY_LIT(writer, "["); READARG_HELPGEN_TRY_LIT(writer, "[");
}
for (size_t k = 0; k < nforms; k++) { for (size_t k = 0; k < nforms; k++) {
int grp = 0; int grp = 0;
@ -220,9 +216,8 @@ int readarg_helpgen_put_usage(struct readarg_parser *rp, struct readarg_helpgen_
if (k == READARG_FORM_SHORT) { if (k == READARG_FORM_SHORT) {
grp = 1; grp = 1;
if (!opts[i].names[k][l + 1]) { if (!opts[i].names[k][l + 1])
READARG_HELPGEN_TRY_LIT(writer, ", "); READARG_HELPGEN_TRY_LIT(writer, ", ");
}
continue; continue;
} else if (k + 1 < nforms || opts[i].names[k][l + 1]) { } else if (k + 1 < nforms || opts[i].names[k][l + 1]) {
READARG_HELPGEN_TRY_LIT(writer, ", "); READARG_HELPGEN_TRY_LIT(writer, ", ");
@ -230,36 +225,31 @@ int readarg_helpgen_put_usage(struct readarg_parser *rp, struct readarg_helpgen_
READARG_HELPGEN_TRY_LIT(writer, " "); READARG_HELPGEN_TRY_LIT(writer, " ");
READARG_HELPGEN_TRY_STR(writer, opts[i].arg.name); READARG_HELPGEN_TRY_STR(writer, opts[i].arg.name);
if (inf) { if (inf)
READARG_HELPGEN_TRY_LIT(writer, "..."); READARG_HELPGEN_TRY_LIT(writer, "...");
} }
} }
} }
} }
}
if (j >= lower) { if (j >= lower)
READARG_HELPGEN_TRY_LIT(writer, "]"); READARG_HELPGEN_TRY_LIT(writer, "]");
}
if (next) { if (next)
READARG_HELPGEN_TRY_LIT(writer, "\n "); READARG_HELPGEN_TRY_LIT(writer, "\n ");
} }
} }
}
if (optwritten) { if (optwritten)
READARG_HELPGEN_TRY_LIT(writer, "\n"); READARG_HELPGEN_TRY_LIT(writer, "\n");
}
struct readarg_arg *opers = rp->opers; struct readarg_arg *opers = rp->opers;
next = !!rp->nopers; next = !!rp->nopers;
for (size_t i = 0; next; i++) { for (size_t i = 0; next; i++) {
operwritten = 1; operwritten = 1;
if (i == 0) { if (i == 0)
READARG_HELPGEN_TRY_LIT(writer, " "); READARG_HELPGEN_TRY_LIT(writer, " ");
}
next = i + 1 < rp->nopers; next = i + 1 < rp->nopers;
size_t lower = readarg_select_lower(opers[i].bounds); size_t lower = readarg_select_lower(opers[i].bounds);
@ -269,14 +259,12 @@ int readarg_helpgen_put_usage(struct readarg_parser *rp, struct readarg_helpgen_
for (size_t j = 0; j < lower; j++) { for (size_t j = 0; j < lower; j++) {
READARG_HELPGEN_TRY_STR(writer, opers[i].name); READARG_HELPGEN_TRY_STR(writer, opers[i].name);
if (inf && j + 1 == lower) { if (inf && j + 1 == lower)
READARG_HELPGEN_TRY_LIT(writer, "..."); READARG_HELPGEN_TRY_LIT(writer, "...");
}
if (next) { if (next)
READARG_HELPGEN_TRY_LIT(writer, "\n "); READARG_HELPGEN_TRY_LIT(writer, "\n ");
} }
}
size_t amt = upper ? upper : inf ? lower + 1 : 0; size_t amt = upper ? upper : inf ? lower + 1 : 0;
for (size_t j = lower; j < amt; j++) { for (size_t j = lower; j < amt; j++) {
@ -284,21 +272,18 @@ int readarg_helpgen_put_usage(struct readarg_parser *rp, struct readarg_helpgen_
READARG_HELPGEN_TRY_STR(writer, opers[i].name); READARG_HELPGEN_TRY_STR(writer, opers[i].name);
if (inf && j + 1 == amt) { if (inf && j + 1 == amt)
READARG_HELPGEN_TRY_LIT(writer, "..."); READARG_HELPGEN_TRY_LIT(writer, "...");
}
READARG_HELPGEN_TRY_LIT(writer, "]"); READARG_HELPGEN_TRY_LIT(writer, "]");
if (next) { if (next)
READARG_HELPGEN_TRY_LIT(writer, "\n "); READARG_HELPGEN_TRY_LIT(writer, "\n ");
} }
} }
}
if (operwritten) { if (operwritten)
READARG_HELPGEN_TRY_LIT(writer, "\n"); READARG_HELPGEN_TRY_LIT(writer, "\n");
}
return 1; return 1;
} }
@ -379,9 +364,8 @@ static void readarg_parse_arg(struct readarg_parser *rp, const char *arg) {
/* Parse the next option in the grouped option string, which automatically advances it. */ /* Parse the next option in the grouped option string, which automatically advances it. */
if (rp->state.grppos) { if (rp->state.grppos) {
readarg_parse_opt(rp, READARG_FORM_SHORT, &rp->state.grppos); readarg_parse_opt(rp, READARG_FORM_SHORT, &rp->state.grppos);
if (!*rp->state.grppos) { if (!*rp->state.grppos)
rp->state.grppos = NULL; rp->state.grppos = NULL;
}
return; return;
} }
@ -399,10 +383,9 @@ static void readarg_parse_arg(struct readarg_parser *rp, const char *arg) {
/* "--" denotes the end of options. */ /* "--" denotes the end of options. */
off = rp->args.len - (rp->state.curr.arg - rp->args.strings); off = rp->args.len - (rp->state.curr.arg - rp->args.strings);
assert(off); assert(off);
if (off == 1) { if (off == 1)
/* No operands after the "--". */ /* No operands after the "--". */
return; return;
}
readarg_update_oper(rp, (struct readarg_view_strings){ readarg_update_oper(rp, (struct readarg_view_strings){
.len = off - 1, .len = off - 1,
@ -495,26 +478,23 @@ static struct readarg_opt *readarg_match_opt(struct readarg_parser *rp, enum rea
if (!cmp) if (!cmp)
continue; continue;
if (!*cmp) if (!*cmp) {
/* A guaranteed match. */ /* A guaranteed match. */
return readarg_match_finish(rp, needle, cmp, rp->opts + i); *needle = cmp;
else if ((cmp - *needle) > (loose.adv - *needle)) return rp->state.curr.opt = rp->opts + i;
} else if ((cmp - *needle) > (loose.adv - *needle))
/* Maybe a match, maybe not. */ /* Maybe a match, maybe not. */
loose.adv = cmp, loose.opt = rp->opts + i; loose.adv = cmp, loose.opt = rp->opts + i;
} }
} }
return readarg_match_finish(rp, needle, loose.adv, loose.opt); if (loose.adv)
} *needle = loose.adv;
static struct readarg_opt *readarg_match_finish(struct readarg_parser *rp, const char **needle, const char *adv, struct readarg_opt *opt) { if (loose.opt)
if (adv) return rp->state.curr.opt = loose.opt;
*needle = adv;
if (opt) return NULL;
rp->state.curr.opt = opt;
return opt;
} }
static void readarg_update_opt(struct readarg_parser *rp, const char *attach, struct readarg_opt *opt) { static void readarg_update_opt(struct readarg_parser *rp, const char *attach, struct readarg_opt *opt) {