Skip to content

Commit e178c7b

Browse files
committed
Fix infinite loop with words greater than 80 characters in write_message. Closes #196 on github.
1 parent 21d3a51 commit e178c7b

1 file changed

Lines changed: 13 additions & 6 deletions

File tree

src/output.F90

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,11 @@ subroutine write_message(level)
185185

186186
integer, optional :: level ! verbosity level
187187

188-
integer :: i_start ! starting position
189-
integer :: i_end ! ending position
190-
integer :: line_wrap ! length of line
191-
integer :: length ! length of message
188+
integer :: i_start ! starting position
189+
integer :: i_end ! ending position
190+
integer :: line_wrap ! length of line
191+
integer :: length ! length of message
192+
integer :: last_space ! index of last space (relative to start)
192193

193194
! Set length of line
194195
line_wrap = 80
@@ -209,11 +210,17 @@ subroutine write_message(level)
209210

210211
else
211212
! Determine last space in current line
212-
i_end = i_start + index(message(i_start+1:i_start+line_wrap), &
213+
last_space = index(message(i_start+1:i_start+line_wrap), &
213214
' ', BACK=.true.)
215+
if (last_space == 0) then
216+
i_end = min(length + 1, i_start+line_wrap) - 1
217+
write(ou, fmt='(1X,A)') message(i_start+1:i_end)
218+
else
219+
i_end = i_start + last_space
220+
write(ou, fmt='(1X,A)') message(i_start+1:i_end-1)
221+
end if
214222

215223
! Write up to last space
216-
write(ou, fmt='(1X,A)') message(i_start+1:i_end-1)
217224

218225
! Advance starting position
219226
i_start = i_end

0 commit comments

Comments
 (0)