aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ls_args.h20
-rw-r--r--tests/tests.c17
2 files changed, 32 insertions, 5 deletions
diff --git a/ls_args.h b/ls_args.h
index 1c9301a..a02b3d1 100644
--- a/ls_args.h
+++ b/ls_args.h
@@ -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;