* fix #15148

Co-authored-by: alaviss <leorize+oss@disroot.org>
This commit is contained in:
flywind
2020-08-08 13:24:54 +08:00
committed by GitHub
parent 6f482ab934
commit eee3b189ff
2 changed files with 23 additions and 4 deletions

View File

@@ -379,7 +379,7 @@ proc writeBuffer*(f: AsyncFile, buf: pointer, size: int): Future[void] =
proc cb(fd: AsyncFD): bool =
result = true
let remainderSize = size-written
let remainderSize = size - written
var cbuf = cast[cstring](buf)
let res = write(fd.cint, addr cbuf[written], remainderSize.cint)
if res < 0:
@@ -409,7 +409,7 @@ proc write*(f: AsyncFile, data: string): Future[void] =
var copy = data
when defined(windows) or defined(nimdoc):
var buffer = alloc0(data.len)
copyMem(buffer, addr copy[0], data.len)
copyMem(buffer, copy.cstring, data.len)
var ol = newCustom()
ol.data = CompletionData(fd: f.fd, cb:
@@ -454,8 +454,15 @@ proc write*(f: AsyncFile, data: string): Future[void] =
proc cb(fd: AsyncFD): bool =
result = true
let remainderSize = data.len-written
let res = write(fd.cint, addr copy[written], remainderSize.cint)
let remainderSize = data.len - written
let res =
if data.len == 0:
write(fd.cint, copy.cstring, 0)
else:
write(fd.cint, addr copy[written], remainderSize.cint)
if res < 0:
let lastError = osLastError()
if lastError.int32 != EAGAIN:

12
tests/async/t15148.nim Normal file
View File

@@ -0,0 +1,12 @@
import asyncdispatch, asyncfile, os
const Filename = "t15148.txt"
proc saveEmpty() {.async.} =
let
text = ""
file = openAsync(Filename, fmWrite)
await file.write(text)
file.close()
waitFor saveEmpty()