diff options
author | Dominik Picheta <dominikpicheta@googlemail.com> | 2016-11-14 18:45:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-14 18:45:48 +0100 |
commit | 52f20abf22b589bafdf93da024753f71b0e2495b (patch) | |
tree | c564376406ba424f0c4669ebb266d79974f4be28 | |
parent | 4a4a3cdf67d3bd80d18ebe01132d67a5b6400b3a (diff) | |
parent | e695d3bfbaa9f0d8b811259535be296a6441c468 (diff) | |
download | Nim-52f20abf22b589bafdf93da024753f71b0e2495b.tar.gz |
Merge pull request #5023 from nigredo-tori/fix-5022
Fix asyncfile in Windows Server 2003
-rw-r--r-- | lib/pure/asyncfile.nim | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/lib/pure/asyncfile.nim b/lib/pure/asyncfile.nim index ffe6a391e..0241e4796 100644 --- a/lib/pure/asyncfile.nim +++ b/lib/pure/asyncfile.nim @@ -118,8 +118,8 @@ proc readBuffer*(f: AsyncFile, buf: pointer, size: int): Future[int] = ## Read ``size`` bytes from the specified file asynchronously starting at ## the current position of the file pointer. ## - ## If the file pointer is past the end of the file then an empty string is - ## returned. + ## If the file pointer is past the end of the file then zero is returned + ## and no bytes are read into ``buf`` var retFuture = newFuture[int]("asyncfile.readBuffer") when defined(windows) or defined(nimdoc): @@ -149,7 +149,11 @@ proc readBuffer*(f: AsyncFile, buf: pointer, size: int): Future[int] = let err = osLastError() if err.int32 != ERROR_IO_PENDING: GC_unref(ol) - retFuture.fail(newException(OSError, osErrorMsg(err))) + if err.int32 == ERROR_HANDLE_EOF: + # This happens in Windows Server 2003 + retFuture.complete(0) + else: + retFuture.fail(newException(OSError, osErrorMsg(err))) else: # Request completed immediately. var bytesRead: DWord @@ -233,7 +237,12 @@ proc read*(f: AsyncFile, size: int): Future[string] = dealloc buffer buffer = nil GC_unref(ol) - retFuture.fail(newException(OSError, osErrorMsg(err))) + + if err.int32 == ERROR_HANDLE_EOF: + # This happens in Windows Server 2003 + retFuture.complete("") + else: + retFuture.fail(newException(OSError, osErrorMsg(err))) else: # Request completed immediately. var bytesRead: DWord |