diff options
author | Dmitry Polienko <dmitry@eldis.ru> | 2016-11-14 02:55:57 -0800 |
---|---|---|
committer | Dmitry Polienko <dmitry@eldis.ru> | 2016-11-14 02:55:57 -0800 |
commit | e695d3bfbaa9f0d8b811259535be296a6441c468 (patch) | |
tree | 7c152ea0b9d48fbe4050e3789920b4b1ca37b0b6 | |
parent | a29387424a1395052c6da164ebe0168698eae21e (diff) | |
download | Nim-e695d3bfbaa9f0d8b811259535be296a6441c468.tar.gz |
Fix asyncfile in Windows Server 2003
Fixes #5022
-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 |