diff options
| -rw-r--r-- | ls_args.h | 20 | ||||
| -rw-r--r-- | tests/tests.c | 17 |
2 files changed, 32 insertions, 5 deletions
@@ -576,11 +576,21 @@ int ls_args_parse(ls_args* a, int argc, char** argv) { for (i = 0; i < (int)a->args_len; ++i) { if (a->args[i].mode == LS_ARGS_REQUIRED && !a->args[i].found) { - const size_t len = 64 + strlen(a->args[i].match.name.long_opt); - a->_allocated_error = LS_REALLOC(a->_allocated_error, len); - memset(a->_allocated_error, 0, len); - sprintf(a->_allocated_error, "Required argument '--%s' not found", - a->args[i].match.name.long_opt); + size_t len; + if (a->args[i].is_pos) { + len = 64; + a->_allocated_error = LS_REALLOC(a->_allocated_error, len); + memset(a->_allocated_error, 0, len); + sprintf(a->_allocated_error, "Required positional argument not found (argument %d)", + a->args[i].match.pos); + } else { + len = 64 + strlen(a->args[i].match.name.long_opt); + a->_allocated_error = LS_REALLOC(a->_allocated_error, len); + memset(a->_allocated_error, 0, len); + sprintf(a->_allocated_error, "Required argument '--%s' not found", + a->args[i].match.name.long_opt); + } + a->last_error = a->_allocated_error; return 0; } diff --git a/tests/tests.c b/tests/tests.c index 78c8f24..0a136b1 100644 --- a/tests/tests.c +++ b/tests/tests.c @@ -113,6 +113,23 @@ TEST_CASE(too_many_positional_after_double_dash) { return 0; } +TEST_CASE(basic_args_positional_required_error) { + int help = 0; + const char* first; + ls_args args; + char* argv[] = { "./hello", "world", NULL }; + int argc = sizeof(argv) / sizeof(*argv) - 1; + + ls_args_init(&args); + ls_args_pos_string(&args, 0, &first, "First positional argument", LS_ARGS_REQUIRED); + + ASSERT(!ls_args_parse(&args, argc, argv)); + + ASSERT_STR_EQ(args.last_error, "Required positional argument not found (argument 0)"); + ls_args_free(&args); + return 0; +} + TEST_CASE(basic_args_positional_only_error) { int help = 0; const char* input; |
