aboutsummaryrefslogtreecommitdiff
path: root/ls_args.h
diff options
context:
space:
mode:
authorLion Kortlepel <[email protected]>2026-02-01 09:45:06 +0000
committerLion Kortlepel <[email protected]>2026-02-01 09:45:06 +0000
commitacf522e7bab50b24ec702b405b4e450b65f835cd (patch)
tree5109c3a0c25d054093d95984bb99c92d6da46510 /ls_args.h
parentb4feabc2c1dccb7212421c8e1edf57db6388a7a3 (diff)
downloadargs-acf522e7bab50b24ec702b405b4e450b65f835cd.tar.zst
args-acf522e7bab50b24ec702b405b4e450b65f835cd.zip
fix: fix ls_args_parse segfault on required positional args
Diffstat (limited to 'ls_args.h')
-rw-r--r--ls_args.h20
1 files changed, 15 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;
}