This commit is contained in:
Araq
2018-09-14 11:40:43 +02:00
parent d2208091fa
commit 4ab9953787
3 changed files with 14 additions and 5 deletions

View File

@@ -3127,8 +3127,8 @@ when not defined(JS): #and not defined(nimscript):
proc readLine*(f: File, line: var TaintedString): bool {.tags: [ReadIOEffect],
benign.}
## reads a line of text from the file `f` into `line`. `line` must not be
## ``nil``! May throw an IO exception.
## reads a line of text from the file `f` into `line`. May throw an IO
## exception.
## A line of text may be delimited by ``LF`` or ``CRLF``. The newline
## character(s) are not part of the returned string. Returns ``false``
## if the end of the file has been reached, ``true`` otherwise. If

View File

@@ -161,7 +161,7 @@ proc readLine(f: File, line: var TaintedString): bool =
var last = cast[ByteAddress](m) - cast[ByteAddress](addr line.string[0])
if last > 0 and line.string[last-1] == '\c':
line.string.setLen(last-1)
return fgetsSuccess
return last > 1 or fgetsSuccess
# We have to distinguish between two possible cases:
# \0\l\0 => line ending in a null character.
# \0\l\l => last line without newline, null was put there by fgets.
@@ -169,7 +169,7 @@ proc readLine(f: File, line: var TaintedString): bool =
if last < pos + sp - 1 and line.string[last+1] != '\0':
dec last
line.string.setLen(last)
return fgetsSuccess
return last > 0 or fgetsSuccess
else:
# fgets will have inserted a null byte at the end of the string.
dec sp

View File

@@ -1,9 +1,12 @@
discard """
output: '''9
b = false
b = true
123456789
Second readLine raised an exception
123456789
1
2aaaaaaaa
3bbbbbbb
'''
"""
# bug #5349
@@ -38,3 +41,9 @@ echo line
f.close()
removeFile(fn)
# bug #8961
writeFile("test.txt", "1\C\L2aaaaaaaa\C\L3bbbbbbb")
for line in lines("test.txt"):
echo line