* fix #15148 Co-authored-by: alaviss <leorize+oss@disroot.org>
This commit is contained in:
parent
6f482ab934
commit
eee3b189ff
2 changed files with 23 additions and 4 deletions
|
|
@ -379,7 +379,7 @@ proc writeBuffer*(f: AsyncFile, buf: pointer, size: int): Future[void] =
|
||||||
|
|
||||||
proc cb(fd: AsyncFD): bool =
|
proc cb(fd: AsyncFD): bool =
|
||||||
result = true
|
result = true
|
||||||
let remainderSize = size-written
|
let remainderSize = size - written
|
||||||
var cbuf = cast[cstring](buf)
|
var cbuf = cast[cstring](buf)
|
||||||
let res = write(fd.cint, addr cbuf[written], remainderSize.cint)
|
let res = write(fd.cint, addr cbuf[written], remainderSize.cint)
|
||||||
if res < 0:
|
if res < 0:
|
||||||
|
|
@ -409,7 +409,7 @@ proc write*(f: AsyncFile, data: string): Future[void] =
|
||||||
var copy = data
|
var copy = data
|
||||||
when defined(windows) or defined(nimdoc):
|
when defined(windows) or defined(nimdoc):
|
||||||
var buffer = alloc0(data.len)
|
var buffer = alloc0(data.len)
|
||||||
copyMem(buffer, addr copy[0], data.len)
|
copyMem(buffer, copy.cstring, data.len)
|
||||||
|
|
||||||
var ol = newCustom()
|
var ol = newCustom()
|
||||||
ol.data = CompletionData(fd: f.fd, cb:
|
ol.data = CompletionData(fd: f.fd, cb:
|
||||||
|
|
@ -454,8 +454,15 @@ proc write*(f: AsyncFile, data: string): Future[void] =
|
||||||
|
|
||||||
proc cb(fd: AsyncFD): bool =
|
proc cb(fd: AsyncFD): bool =
|
||||||
result = true
|
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:
|
if res < 0:
|
||||||
let lastError = osLastError()
|
let lastError = osLastError()
|
||||||
if lastError.int32 != EAGAIN:
|
if lastError.int32 != EAGAIN:
|
||||||
|
|
|
||||||
12
tests/async/t15148.nim
Normal file
12
tests/async/t15148.nim
Normal 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()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue