Skip to content

Commit 7008ea7

Browse files
author
Damian Rouson
committed
make patch version search more robust
1 parent f00dd96 commit 7008ea7

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

prerequisites/acceptable_compiler.f90

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ pure function major(version_string) result(major_value)
103103

104104
end function
105105

106-
pure function minor(version_string) result(minor_value)
106+
pure function minor(version_string) result(minor_value)
107107
character(len=*), intent(in) :: version_string
108108
integer minor_value
109109
character(len=:), allocatable :: middle_digits
@@ -117,14 +117,14 @@ pure function minor(version_string) result(minor_value)
117117

118118
end function
119119

120-
pure function patch(version_string) result(patch_value)
120+
pure function patch(version_string) result(patch_value)
121121
character(len=*), intent(in) :: version_string
122122
integer patch_value
123123
character(len=:), allocatable :: trailing_digits
124124

125125
associate( first_dot => scan(version_string, '.') )
126126
associate( second_dot => first_dot + scan(version_string(first_dot+1:), '.') )
127-
associate( first_non_digit=> second_dot + scan(version_string(second_dot+1:), ' ') )
127+
associate( first_non_digit=> second_dot + first_printable_non_digit(version_string(second_dot+1:)) )
128128
trailing_digits = version_string( second_dot+1 : first_non_digit-1 )
129129
read(trailing_digits,*) patch_value
130130
end associate
@@ -133,4 +133,14 @@ pure function patch(version_string) result(patch_value)
133133

134134
end function
135135

136+
pure function first_printable_non_digit( string ) result(location)
137+
character(len=*), intent(in) :: string
138+
integer i, location
139+
integer, parameter :: ASCII_non_digit(*)=[(i,i=32,47),(i,i=58,126)]
140+
character(len=1), parameter :: non_digit(*)=[( char(ASCII_non_digit(i)) , i=1, size(ASCII_non_digit) )]
141+
character(len=size(non_digit)) non_digit_string
142+
write(non_digit_string,'(85a)') non_digit
143+
location = scan(string,non_digit_string)
144+
end function
145+
136146
end program

0 commit comments

Comments
 (0)