Skip to content

Commit 0ecdd54

Browse files
committed
fix(command_line): handle missing flags
This commit fixes the command_line_t flag_value type-bound procedure to allocate and return a string of zero length when a flag is not found. Previously, the procdure would return an unallocated string, which caused test crashes.
1 parent 14f6402 commit 0ecdd54

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

src/sourcery/sourcery_command_line_s.f90

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,23 +39,28 @@
3939
integer argnum, arglen, flag_value_length
4040
character(len=:), allocatable :: arg
4141

42-
43-
flag_search: &
44-
do argnum = 1,command_argument_count()
45-
46-
if (allocated(arg)) deallocate(arg)
47-
48-
call get_command_argument(argnum, length=arglen)
49-
allocate(character(len=arglen) :: arg)
50-
call get_command_argument(argnum, arg)
51-
52-
if (arg==flag) then
53-
call get_command_argument(argnum+1, length=flag_value_length)
54-
allocate(character(len=flag_value_length) :: flag_value)
55-
call get_command_argument(argnum+1, flag_value)
56-
exit flag_search
42+
associate(argcount => command_argument_count())
43+
if (argcount==0) then
44+
flag_value=""
45+
else
46+
flag_search: &
47+
do argnum = 1,argcount
48+
49+
if (allocated(arg)) deallocate(arg)
50+
51+
call get_command_argument(argnum, length=arglen)
52+
allocate(character(len=arglen) :: arg)
53+
call get_command_argument(argnum, arg)
54+
55+
if (arg==flag) then
56+
call get_command_argument(argnum+1, length=flag_value_length)
57+
allocate(character(len=flag_value_length) :: flag_value)
58+
call get_command_argument(argnum+1, flag_value)
59+
exit flag_search
60+
end if
61+
end do flag_search
5762
end if
58-
end do flag_search
63+
end associate
5964

6065
end procedure
6166

0 commit comments

Comments
 (0)