summary refs log tree commit diff stats
path: root/lib/system/sysio.nim
diff options
context:
space:
mode:
authorReimer Behrends <behrends@gmail.com>2014-05-24 07:04:34 +0200
committerReimer Behrends <behrends@gmail.com>2014-05-26 14:29:55 +0200
commitce773b70a7725cecec14ed4dcbdeeac4c7c0db1c (patch)
treefe198f546aef88c8a28758da9dc73a62b7d4dae3 /lib/system/sysio.nim
parent912fbb9893fd57c124aff96a18b4f2299dc72758 (diff)
downloadNim-ce773b70a7725cecec14ed4dcbdeeac4c7c0db1c.tar.gz
Fixed readAllBuffer() to avoid adding garbage bytes at end.
The function readAllBuffer() always returned a string that was a
multiple of the BufSize in length, regardless of how many bytes were
actually read, padding the result with garbage bytes on the last chunk.
This fix properly trims the last chunk to its actual size.
Diffstat (limited to 'lib/system/sysio.nim')
-rw-r--r--lib/system/sysio.nim12
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/system/sysio.nim b/lib/system/sysio.nim
index 02c17b92b..32d4c3e91 100644
--- a/lib/system/sysio.nim
+++ b/lib/system/sysio.nim
@@ -115,10 +115,14 @@ proc readAllBuffer(file: TFile): string =
   # bytes we need to read before the buffer is empty.
   result = ""
   var buffer = newString(BufSize)
-  var bytesRead = BufSize
-  while bytesRead == BufSize:
-    bytesRead = readBuffer(file, addr(buffer[0]), BufSize)
-    result.add(buffer)
+  while true:
+    var bytesRead = readBuffer(file, addr(buffer[0]), BufSize)
+    if bytesRead == BufSize:
+      result.add(buffer)
+    else:
+      buffer.setLen(bytesRead)
+      result.add(buffer)
+      break
   
 proc rawFileSize(file: TFile): int = 
   # this does not raise an error opposed to `getFileSize`