about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2025-01-14 18:24:10 +0100
committerbptato <nincsnevem662@gmail.com>2025-01-14 18:24:10 +0100
commit1abc51cccbe62a4f0e7e13eeb51cfa3aaa9aa542 (patch)
tree59686fb57f67ba065f29799769f460e60319e3bb
parentea9d594d196e2e24977f454f1fd5b07dddbf7f87 (diff)
downloadchawan-1abc51cccbe62a4f0e7e13eeb51cfa3aaa9aa542.tar.gz
More strict defs
-rw-r--r--adapter/format/gopher2html.nim2
-rw-r--r--adapter/protocol/man.nim6
-rw-r--r--adapter/protocol/sftp.nim2
-rw-r--r--src/io/bufreader.nim60
4 files changed, 38 insertions, 32 deletions
diff --git a/adapter/format/gopher2html.nim b/adapter/format/gopher2html.nim
index 21bfdf2e..fba8e521 100644
--- a/adapter/format/gopher2html.nim
+++ b/adapter/format/gopher2html.nim
@@ -29,7 +29,7 @@ proc main() =
 <title>Index of """ & url & """</title>
 <h1>Index of """ & url & """</h1>""")
   var ispre = false
-  var line: string
+  var line = ""
   while stdin.readLine(line):
     if line.len == 0:
       continue
diff --git a/adapter/protocol/man.nim b/adapter/protocol/man.nim
index 4b26379c..a8c4ae34 100644
--- a/adapter/protocol/man.nim
+++ b/adapter/protocol/man.nim
@@ -304,9 +304,9 @@ proc doKeyword(man, keyword, section: string) =
     quit(1)
   var line: string
   if not ofile.readLine(line) or ofile.endOfFile():
-    var wstatus: cint
-    discard wait(addr wstatus)
-    if not WIFEXITED(wstatus) or WEXITSTATUS(wstatus) != 0:
+    var wstatus = cint(0)
+    if wait(addr wstatus) >= 0 and not WIFEXITED(wstatus) or
+        WEXITSTATUS(wstatus) != 0:
       stdout.write("Cha-Control: ConnectionError 4 " & efile.readErrorMsg(line))
       ofile.close()
       efile.close()
diff --git a/adapter/protocol/sftp.nim b/adapter/protocol/sftp.nim
index a9ca5b9a..75d6f4cb 100644
--- a/adapter/protocol/sftp.nim
+++ b/adapter/protocol/sftp.nim
@@ -84,7 +84,7 @@ proc matchesPattern(s: string; pats: openArray[string]): bool =
 
 proc parseSSHConfig(f: File; host: string; pubKey, privKey: var string) =
   var skipTillNext = false
-  var line: string
+  var line = ""
   while f.readLine(line):
     var i = line.skipBlanks(0)
     if i == line.len or line[i] == '#':
diff --git a/src/io/bufreader.nim b/src/io/bufreader.nim
index 86ed1aed..203a2e52 100644
--- a/src/io/bufreader.nim
+++ b/src/io/bufreader.nim
@@ -10,19 +10,19 @@ type BufferedReader* = object
   bufIdx: int
   recvAux*: seq[cint] #TODO assert on unused ones
 
-proc sread*(reader: var BufferedReader; n: var SomeNumber)
-proc sread*[T](reader: var BufferedReader; s: var set[T])
-proc sread*[T: enum](reader: var BufferedReader; x: var T)
-proc sread*(reader: var BufferedReader; s: var string)
-proc sread*(reader: var BufferedReader; b: var bool)
+proc sread*(reader: var BufferedReader; n: out SomeNumber)
+proc sread*[T](reader: var BufferedReader; s: out set[T])
+proc sread*[T: enum](reader: var BufferedReader; x: out T)
+proc sread*(reader: var BufferedReader; s: out string)
+proc sread*(reader: var BufferedReader; b: out bool)
 proc sread*(reader: var BufferedReader; tup: var tuple)
-proc sread*[I, T](reader: var BufferedReader; a: var array[I, T])
-proc sread*(reader: var BufferedReader; s: var seq)
-proc sread*[U, V](reader: var BufferedReader; t: var Table[U, V])
+proc sread*[I, T](reader: var BufferedReader; a: out array[I, T])
+proc sread*[T](reader: var BufferedReader; s: out seq[T])
+proc sread*[U, V](reader: var BufferedReader; t: out Table[U, V])
 proc sread*(reader: var BufferedReader; obj: var object)
 proc sread*(reader: var BufferedReader; obj: var ref object)
-proc sread*[T](reader: var BufferedReader; o: var Option[T])
-proc sread*[T, E](reader: var BufferedReader; o: var Result[T, E])
+proc sread*[T](reader: var BufferedReader; o: out Option[T])
+proc sread*[T, E](reader: var BufferedReader; o: out Result[T, E])
 proc sread*(reader: var BufferedReader; c: var ARGBColor)
 proc sread*(reader: var BufferedReader; c: var CellColor)
 
@@ -57,30 +57,32 @@ proc readData*(reader: var BufferedReader; buffer: pointer; len: int) =
   copyMem(buffer, addr reader.buffer[reader.bufIdx], len)
   reader.bufIdx += len
 
-proc sread*(reader: var BufferedReader; n: var SomeNumber) =
+proc sread*(reader: var BufferedReader; n: out SomeNumber) =
+  n = 0
   reader.readData(addr n, sizeof(n))
 
-proc sread*[T: enum](reader: var BufferedReader; x: var T) =
-  var i: int
+proc sread*[T: enum](reader: var BufferedReader; x: out T) =
+  var i {.noinit.}: int
   reader.sread(i)
   x = cast[T](i)
 
-proc sread*[T](reader: var BufferedReader; s: var set[T]) =
-  var len: int
+proc sread*[T](reader: var BufferedReader; s: out set[T]) =
+  var len {.noinit.}: int
   reader.sread(len)
+  s = {}
   for i in 0 ..< len:
     var x: T
     reader.sread(x)
     s.incl(x)
 
-proc sread*(reader: var BufferedReader; s: var string) =
-  var len: int
+proc sread*(reader: var BufferedReader; s: out string) =
+  var len {.noinit.}: int
   reader.sread(len)
   s = newString(len)
   if len > 0:
     reader.readData(addr s[0], len)
 
-proc sread*(reader: var BufferedReader; b: var bool) =
+proc sread*(reader: var BufferedReader; b: out bool) =
   var n: uint8
   reader.sread(n)
   if n == 1u8:
@@ -93,20 +95,21 @@ proc sread*(reader: var BufferedReader; tup: var tuple) =
   for f in tup.fields:
     reader.sread(f)
 
-proc sread*[I; T](reader: var BufferedReader; a: var array[I, T]) =
+proc sread*[I; T](reader: var BufferedReader; a: out array[I, T]) =
   for x in a.mitems:
     reader.sread(x)
 
-proc sread*(reader: var BufferedReader; s: var seq) =
-  var len: int
+proc sread*[T](reader: var BufferedReader; s: out seq[T]) =
+  var len {.noinit.}: int
   reader.sread(len)
-  s.setLen(len)
+  s = newSeq[T](len)
   for x in s.mitems:
     reader.sread(x)
 
-proc sread*[U; V](reader: var BufferedReader; t: var Table[U, V]) =
-  var len: int
+proc sread*[U; V](reader: var BufferedReader; t: out Table[U, V]) =
+  var len {.noinit.}: int
   reader.sread(len)
+  t = initTable[U, V](len)
   for i in 0..<len:
     var k: U
     reader.sread(k)
@@ -115,6 +118,7 @@ proc sread*[U; V](reader: var BufferedReader; t: var Table[U, V]) =
     t[k] = v
 
 proc sread*(reader: var BufferedReader; obj: var object) =
+  obj = default(typeof(obj))
   for f in obj.fields:
     reader.sread(f)
 
@@ -122,10 +126,12 @@ proc sread*(reader: var BufferedReader; obj: var ref object) =
   var n: bool
   reader.sread(n)
   if n:
-    new(obj)
+    obj = new(typeof(obj))
     reader.sread(obj[])
+  else:
+    obj = nil
 
-proc sread*[T](reader: var BufferedReader; o: var Option[T]) =
+proc sread*[T](reader: var BufferedReader; o: out Option[T]) =
   var x: bool
   reader.sread(x)
   if x:
@@ -135,7 +141,7 @@ proc sread*[T](reader: var BufferedReader; o: var Option[T]) =
   else:
     o = none(T)
 
-proc sread*[T, E](reader: var BufferedReader; o: var Result[T, E]) =
+proc sread*[T, E](reader: var BufferedReader; o: out Result[T, E]) =
   var x: bool
   reader.sread(x)
   if x: