about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2025-01-09 20:04:31 +0100
committerbptato <nincsnevem662@gmail.com>2025-01-09 20:04:31 +0100
commitbbb6c7ded9bdd0c2983ba33b3fd8113f04d0cdb5 (patch)
treec0f014f252b7cad33ff7867200e697d98dc7fb44 /src
parent36c280848e85595166e51bacb215a4d1eb550e0d (diff)
downloadchawan-bbb6c7ded9bdd0c2983ba33b3fd8113f04d0cdb5.tar.gz
bufstream: allow 0-width packets
Diffstat (limited to 'src')
-rw-r--r--src/io/bufreader.nim2
-rw-r--r--src/io/dynstream.nim10
-rw-r--r--src/local/pager.nim1
-rw-r--r--src/server/buffer.nim2
4 files changed, 6 insertions, 9 deletions
diff --git a/src/io/bufreader.nim b/src/io/bufreader.nim
index 50341bbc..a13583b3 100644
--- a/src/io/bufreader.nim
+++ b/src/io/bufreader.nim
@@ -27,7 +27,7 @@ proc sread*(reader: var BufferedReader; c: var ARGBColor)
 proc sread*(reader: var BufferedReader; c: var CellColor)
 
 proc initReader*(stream: DynStream; len, auxLen: int): BufferedReader =
-  assert len != 0
+  assert len != 0 or auxLen != 0
   var reader = BufferedReader(
     buffer: newSeqUninitialized[uint8](len),
     bufIdx: 0
diff --git a/src/io/dynstream.nim b/src/io/dynstream.nim
index 668bbc32..963525f2 100644
--- a/src/io/dynstream.nim
+++ b/src/io/dynstream.nim
@@ -67,16 +67,16 @@ proc sreadChar*(s: DynStream): char =
 
 proc recvDataLoop*(s: DynStream; buffer: pointer; len: int) =
   var n = 0
-  while true:
+  while n < len:
     n += s.recvData(addr cast[ptr UncheckedArray[uint8]](buffer)[n], len - n)
-    if n == len:
-      break
 
 proc recvDataLoop*(s: DynStream; buffer: var openArray[uint8]) {.inline.} =
-  s.recvDataLoop(addr buffer[0], buffer.len)
+  if buffer.len > 0:
+    s.recvDataLoop(addr buffer[0], buffer.len)
 
 proc recvDataLoop*(s: DynStream; buffer: var openArray[char]) {.inline.} =
-  s.recvDataLoop(addr buffer[0], buffer.len)
+  if buffer.len > 0:
+    s.recvDataLoop(addr buffer[0], buffer.len)
 
 proc recvAll*(s: DynStream): string =
   var buffer = newString(4096)
diff --git a/src/local/pager.nim b/src/local/pager.nim
index dbe09992..6c46df67 100644
--- a/src/local/pager.nim
+++ b/src/local/pager.nim
@@ -3124,7 +3124,6 @@ proc acceptBuffers(pager: Pager) =
       container.setStream(stream, registerFun)
     else: # cloned buffer
       stream.withPacketWriter w:
-        w.swrite(false)
         w.sendAux.add(cstream.fd)
       # buffer is cloned, just share the parent's cached source
       loader.shareCachedItem(container.cacheId, container.process)
diff --git a/src/server/buffer.nim b/src/server/buffer.nim
index 43d2f689..3e76d2ee 100644
--- a/src/server/buffer.nim
+++ b/src/server/buffer.nim
@@ -1035,8 +1035,6 @@ proc clone*(buffer: Buffer; newurl: URL): int {.proxy.} =
     # get key for new buffer
     buffer.loader.controlStream.sclose()
     buffer.pstream.withPacketReader r:
-      var dummy: bool
-      r.sread(dummy)
       buffer.loader.controlStream = newSocketStream(r.recvAux.pop())
     buffer.rfd = buffer.pstream.fd
     buffer.pollData.register(buffer.rfd, POLLIN)