diff options
author | flywind <43030857+xflywind@users.noreply.github.com> | 2020-08-08 13:24:54 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-08 07:24:54 +0200 |
commit | eee3b189ff867c0149434e198e89802eca4920ce (patch) | |
tree | ef358d59c4c4972155854d359c217cc179a0992c /lib/pure | |
parent | 6f482ab9346230f8e9c24f71091bcd5ca2cb41f8 (diff) | |
download | Nim-eee3b189ff867c0149434e198e89802eca4920ce.tar.gz |
fix #15148 (#15149)
* fix #15148 Co-authored-by: alaviss <leorize+oss@disroot.org>
Diffstat (limited to 'lib/pure')
-rw-r--r-- | lib/pure/asyncfile.nim | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/lib/pure/asyncfile.nim b/lib/pure/asyncfile.nim index ad111ec50..71b42c763 100644 --- a/lib/pure/asyncfile.nim +++ b/lib/pure/asyncfile.nim @@ -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: |