make arg.name imply that an argument is required

This commit is contained in:
Lukas Wurzinger 2022-11-21 18:09:59 +01:00
parent 42219c391d
commit cd5acee3bd
2 changed files with 21 additions and 26 deletions

View file

@ -45,9 +45,6 @@ struct readarg_opt
{ {
/* Two null-terminated arrays of either long or short option names. */ /* Two null-terminated arrays of either long or short option names. */
char **names[2]; char **names[2];
int req;
struct readarg_arg arg; struct readarg_arg arg;
}; };
@ -249,7 +246,7 @@ static void readarg_parse_opt(struct readarg_parser *rp, enum readarg_form form,
{ {
const char *strpos = *pos; const char *strpos = *pos;
if (!match->req && *strpos) if (!match->arg.name && *strpos)
{ {
rp->state.grppos = strpos; rp->state.grppos = strpos;
readarg_update_opt(rp, NULL, match); readarg_update_opt(rp, NULL, match);
@ -348,7 +345,7 @@ static struct readarg_opt *readarg_match_finish(struct readarg_parser *rp, const
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)
{ {
if (opt->req) if (opt->arg.name)
{ {
if (attach) if (attach)
{ {
@ -630,17 +627,10 @@ int readarg_helpgen_put_usage(struct readarg_parser *rp, struct readarg_helpgen_
{ {
READARG_HELPGEN_TRY_LIT(writer, ", "); READARG_HELPGEN_TRY_LIT(writer, ", ");
} }
else if (opts[i].req) else if (opts[i].arg.name)
{ {
READARG_HELPGEN_TRY_LIT(writer, " "); READARG_HELPGEN_TRY_LIT(writer, " ");
if (opts[i].arg.name) READARG_HELPGEN_TRY_STR(writer, opts[i].arg.name);
{
READARG_HELPGEN_TRY_STR(writer, opts[i].arg.name);
}
else
{
READARG_HELPGEN_TRY_LIT(writer, "value");
}
if (inf) if (inf)
{ {

View file

@ -38,40 +38,45 @@ int main(int argc, char **argv)
[READARG_FORM_SHORT] = READARG_STRINGS("e", "x"), [READARG_FORM_SHORT] = READARG_STRINGS("e", "x"),
[READARG_FORM_LONG] = READARG_STRINGS("expr", "expression"), [READARG_FORM_LONG] = READARG_STRINGS("expr", "expression"),
}, },
.req = 1, .arg = {
.arg.bounds.val = { .name = "expression",
1, .bounds.val = {
4, 1,
}, 4,
},
}
}, },
{ {
.names = { .names = {
[READARG_FORM_SHORT] = READARG_STRINGS("c"), [READARG_FORM_SHORT] = READARG_STRINGS("c"),
[READARG_FORM_LONG] = READARG_STRINGS("config"), [READARG_FORM_LONG] = READARG_STRINGS("config"),
}, },
.req = 1,
.arg = { .arg = {
.name = "file", .name = "file",
.bounds.val = { .bounds.val = {
2, 2,
}, },
}, }
}, },
{ {
.names = { .names = {
[READARG_FORM_SHORT] = READARG_STRINGS("i"), [READARG_FORM_SHORT] = READARG_STRINGS("i"),
[READARG_FORM_LONG] = READARG_STRINGS("uri"), [READARG_FORM_LONG] = READARG_STRINGS("uri"),
}, },
.req = 1, .arg = {
.arg.bounds.inf = 1, .name = "uri",
.bounds.inf = 1,
}
}, },
{ {
.names = { .names = {
[READARG_FORM_SHORT] = READARG_STRINGS("b"), [READARG_FORM_SHORT] = READARG_STRINGS("b"),
[READARG_FORM_LONG] = READARG_STRINGS("backup", "backup-file"), [READARG_FORM_LONG] = READARG_STRINGS("backup", "backup-file"),
}, },
.req = 1, .arg = {
.arg.bounds.inf = 1, .name = "file",
.bounds.inf = 1,
}
}, },
{ {
.names = { .names = {
@ -178,7 +183,7 @@ int main(int argc, char **argv)
} }
} }
printf("{ [%zu] ", curr[i].arg.val.len); printf("{ [%zu] ", curr[i].arg.val.len);
if (curr[i].req) if (curr[i].arg.name)
{ {
struct readarg_view_strings val = curr[i].arg.val; struct readarg_view_strings val = curr[i].arg.val;
for (size_t j = 0; j < val.len; j++) for (size_t j = 0; j < val.len; j++)