summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorRuslan Mustakov <r.mustakov@gmail.com>2018-02-17 17:40:28 +0700
committerRuslan Mustakov <r.mustakov@gmail.com>2018-02-17 17:40:35 +0700
commit319e88585a25c57164f28f084ef8d75fbd9c34ed (patch)
tree86a40b4e39cd6d865a5963f3265cd578f796ba03
parentb5538990a2f0260b1ab04df3c73ecf9a7f927ad2 (diff)
downloadNim-319e88585a25c57164f28f084ef8d75fbd9c34ed.tar.gz
Fix AsyncFile open flags. Fixes #5531
-rw-r--r--lib/pure/asyncfile.nim13
-rw-r--r--lib/windows/winlean.nim1
-rw-r--r--tests/async/tasyncfile.nim4
3 files changed, 9 insertions, 9 deletions
diff --git a/lib/pure/asyncfile.nim b/lib/pure/asyncfile.nim
index 6ce9e8f75..97bec2815 100644
--- a/lib/pure/asyncfile.nim
+++ b/lib/pure/asyncfile.nim
@@ -50,22 +50,21 @@ when defined(windows) or defined(nimdoc):
     case mode
     of fmRead, fmReadWriteExisting:
       OPEN_EXISTING
-    of fmAppend, fmReadWrite, fmWrite:
-      if fileExists(filename):
-        OPEN_EXISTING
-      else:
-        CREATE_NEW
+    of fmReadWrite, fmWrite:
+      CREATE_ALWAYS
+    of fmAppend:
+      OPEN_ALWAYS
 else:
   proc getPosixFlags(mode: FileMode): cint =
     case mode
     of fmRead:
       result = O_RDONLY
     of fmWrite:
-      result = O_WRONLY or O_CREAT
+      result = O_WRONLY or O_CREAT or O_TRUNC
     of fmAppend:
       result = O_WRONLY or O_CREAT or O_APPEND
     of fmReadWrite:
-      result = O_RDWR or O_CREAT
+      result = O_RDWR or O_CREAT or O_TRUNC
     of fmReadWriteExisting:
       result = O_RDWR
     result = result or O_NONBLOCK
diff --git a/lib/windows/winlean.nim b/lib/windows/winlean.nim
index bd6e58a10..b2c1cc1f5 100644
--- a/lib/windows/winlean.nim
+++ b/lib/windows/winlean.nim
@@ -666,6 +666,7 @@ const
   CREATE_ALWAYS* = 2'i32
   CREATE_NEW* = 1'i32
   OPEN_EXISTING* = 3'i32
+  OPEN_ALWAYS* = 4'i32
   FILE_BEGIN* = 0'i32
   INVALID_SET_FILE_POINTER* = -1'i32
   NO_ERROR* = 0'i32
diff --git a/tests/async/tasyncfile.nim b/tests/async/tasyncfile.nim
index 6c0725c88..aa7f03ab1 100644
--- a/tests/async/tasyncfile.nim
+++ b/tests/async/tasyncfile.nim
@@ -41,11 +41,11 @@ proc main() {.async.} =
     await file.write("test2")
     file.close()
     file = openAsync(fn, fmWrite)
-    await file.write("test3")
+    await file.write("t3")
     file.close()
     file = openAsync(fn, fmRead)
     let data = await file.readAll()
-    doAssert data == "test3"
+    doAssert data == "t3"
     file.close()