mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-27 09:43:58 +00:00
add io.readChars overload (simpler, less error prone) (#16044)
* add simpler to use readChars overload * use new readChars overload * Update lib/wrappers/openssl.nim Co-authored-by: Andreas Rumpf <rumpf_a@web.de> Co-authored-by: flywind <xzsflywind@gmail.com>
This commit is contained in:
@@ -231,7 +231,7 @@ proc secureHashFile*(filename: string): SecureHash =
|
||||
var state = newSha1State()
|
||||
var buffer = newString(BufferLength)
|
||||
while true:
|
||||
let length = readChars(f, buffer, 0, BufferLength)
|
||||
let length = readChars(f, buffer)
|
||||
if length == 0:
|
||||
break
|
||||
buffer.setLen(length)
|
||||
|
||||
@@ -174,14 +174,18 @@ proc readBytes*(f: File, a: var openArray[int8|uint8], start, len: Natural): int
|
||||
## `len` (if not as many bytes are remaining), but not greater.
|
||||
result = readBuffer(f, addr(a[start]), len)
|
||||
|
||||
proc readChars*(f: File, a: var openArray[char]): int {.tags: [ReadIOEffect], benign.} =
|
||||
## reads up to `a.len` bytes into the buffer `a`. Returns
|
||||
## the actual number of bytes that have been read which may be less than
|
||||
## `a.len` (if not as many bytes are remaining), but not greater.
|
||||
result = readBuffer(f, addr(a[0]), a.len)
|
||||
|
||||
proc readChars*(f: File, a: var openArray[char], start, len: Natural): int {.
|
||||
tags: [ReadIOEffect], benign.} =
|
||||
tags: [ReadIOEffect], benign, deprecated:
|
||||
"use other `readChars` overload, possibly via: readChars(toOpenArray(buf, start, len-1))".} =
|
||||
## reads `len` bytes into the buffer `a` starting at ``a[start]``. Returns
|
||||
## the actual number of bytes that have been read which may be less than
|
||||
## `len` (if not as many bytes are remaining), but not greater.
|
||||
##
|
||||
## **Warning:** The buffer `a` must be pre-allocated. This can be done
|
||||
## using, for example, ``newString``.
|
||||
if (start + len) > len(a):
|
||||
raiseEIO("buffer overflow: (start+len) > length of openarray buffer")
|
||||
result = readBuffer(f, addr(a[start]), len)
|
||||
|
||||
@@ -760,7 +760,7 @@ proc md5_File*(file: string): string {.raises: [IOError,Exception].} =
|
||||
ctx: MD5_CTX
|
||||
|
||||
discard md5_Init(ctx)
|
||||
while(let bytes = f.readChars(buf, 0, sz); bytes > 0):
|
||||
while (let bytes = f.readChars(buf); bytes > 0):
|
||||
discard md5_Update(ctx, buf[0].addr, cast[csize_t](bytes))
|
||||
|
||||
discard md5_Final(buf[0].addr, ctx)
|
||||
|
||||
Reference in New Issue
Block a user