Don't raise OSError from memFileInput()

This commit is contained in:
Zahary Karadjov 2020-08-02 20:16:47 +03:00
commit 87309f3120
No known key found for this signature in database
GPG key ID: C8936F8A3073D609

View file

@ -166,7 +166,7 @@ let memFileInputVTable = InputStreamVTable(
) )
proc memFileInput*(filename: string, mappedSize = -1, offset = 0): InputStreamHandle proc memFileInput*(filename: string, mappedSize = -1, offset = 0): InputStreamHandle
{.raises: [IOError, OSError].} = {.raises: [IOError].} =
## Creates an input stream for reading the contents of a memory-mapped file. ## Creates an input stream for reading the contents of a memory-mapped file.
## ##
## Using this API will provide better performance than `fileInput`, ## Using this API will provide better performance than `fileInput`,
@ -187,24 +187,27 @@ proc memFileInput*(filename: string, mappedSize = -1, offset = 0): InputStreamHa
# Nim's memfiles module will fail to map an empty file, # Nim's memfiles module will fail to map an empty file,
# but we don't consider this a problem. The stream will # but we don't consider this a problem. The stream will
# be in non-readable state from the start. # be in non-readable state from the start.
let fileSize = getFileSize(filename) try:
if fileSize == 0: let fileSize = getFileSize(filename)
return makeHandle InputStream() if fileSize == 0:
return makeHandle InputStream()
let let
memFile = memfiles.open(filename, memFile = memfiles.open(filename,
mode = fmRead, mode = fmRead,
mappedSize = mappedSize, mappedSize = mappedSize,
offset = offset) offset = offset)
head = cast[ptr byte](memFile.mem) head = cast[ptr byte](memFile.mem)
mappedSize = memFile.size mappedSize = memFile.size
makeHandle MemFileInputStream( makeHandle MemFileInputStream(
vtable: vtableAddr memFileInputVTable, vtable: vtableAddr memFileInputVTable,
span: PageSpan( span: PageSpan(
startAddr: head, startAddr: head,
endAddr: offset(head, mappedSize)), endAddr: offset(head, mappedSize)),
file: memFile) file: memFile)
except OSError as err:
raise newException(IOError, err.msg, err)
func getNewSpan(s: InputStream) = func getNewSpan(s: InputStream) =
let buffers = s.buffers let buffers = s.buffers