Raise error on spaced UNIX-style flag with no value

This commit is contained in:
Feoramund
2024-06-15 00:18:49 -04:00
parent 42a5a2cf17
commit 76575e834b
2 changed files with 25 additions and 1 deletions

View File

@@ -1,6 +1,7 @@
package flags
import "core:container/bit_array"
import "core:fmt"
Parsing_Style :: enum {
// Odin-style: `-flag`, `-flag:option`, `-map:key=value`
@@ -71,9 +72,15 @@ parse :: proc(
return
}
for /**/; future_args > 0; future_args -= 1 {
for starting_future_args := future_args; future_args > 0; future_args -= 1 {
i += 1
if i == len(args) {
if future_args == starting_future_args {
return Parse_Error {
.No_Value,
fmt.tprintf("Expected a value for `%s` but none was given.", current_flag),
}
}
break
}
#no_bounds_check arg = args[i]

View File

@@ -1055,6 +1055,23 @@ test_unix_double_dash_variadic :: proc(t: ^testing.T) {
testing.expect_value(t, s.varg[2], "5")
}
@(test)
test_unix_no_value :: proc(t: ^testing.T) {
S :: struct {
i: int,
}
s: S
args := [?]string { "--i" }
result := flags.parse(&s, args[:], .Unix)
err, ok := result.(flags.Parse_Error)
testing.expectf(t, ok, "unexpected result: %v", result)
if ok {
testing.expect_value(t, err.reason, flags.Parse_Error_Reason.No_Value)
}
}
// This test ensures there are no bad frees with cstrings.
@(test)
test_if_dynamic_cstrings_get_freed :: proc(t: ^testing.T) {