summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorCharles Blake <cblake@csail.mit.edu>2015-07-29 06:14:44 -0400
committerCharles Blake <cblake@csail.mit.edu>2015-07-29 06:14:44 -0400
commit0b4c816cba8f11c28e983818e89ee8cbf20dff9e (patch)
treebddf5c0d76aa976f6c1e0ec985ab1ff18adcfde3
parentf2c5676767fd9d9d25fc671a5be4577d029a8a16 (diff)
downloadNim-0b4c816cba8f11c28e983818e89ee8cbf20dff9e.tar.gz
cstring->pointer in MemSlice to make consistent with MemFile and
also to make more clear the care required to use MemSlice instances.
(E.g., memXXX functions rather than strXXX functions).
-rw-r--r--lib/pure/memfiles.nim16
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/pure/memfiles.nim b/lib/pure/memfiles.nim
index 90797ecc6..ccd45ab2b 100644
--- a/lib/pure/memfiles.nim
+++ b/lib/pure/memfiles.nim
@@ -246,16 +246,16 @@ proc close*(f: var MemFile) =
   if error: raiseOSError(lastErr)
 
 type MemSlice* {.unchecked.} = object
-  data*: cstring
+  data*: pointer
   size*: int
 
 iterator memSlices*(mfile: MemFile, delim='\l', eat='\r'): MemSlice {.inline.} =
-  proc c_memchr(cstr: cstring, c: char, n: csize): cstring {.
+  proc c_memchr(cstr: pointer, c: char, n: csize): pointer {.
        importc: "memchr", header: "<string.h>" .}
-  proc `-!`(p, q: cstring): int {.inline.} = return cast[int](p) -% cast[int](q)
+  proc `-!`(p, q: pointer): int {.inline.} = return cast[int](p) -% cast[int](q)
   var ms: MemSlice
-  var ending: cstring
-  ms.data = cast[cstring](mfile.mem)
+  var ending: pointer
+  ms.data = mfile.mem
   var remaining = mfile.size
   while remaining > 0:
     ending = c_memchr(ms.data, delim, remaining)
@@ -264,11 +264,11 @@ iterator memSlices*(mfile: MemFile, delim='\l', eat='\r'): MemSlice {.inline.} =
       yield ms
       break
     ms.size = ending -! ms.data                     # delim is NOT included
-    if eat != '\0' and ms.size > 0 and ms.data[ms.size - 1] == eat:
+    if eat != '\0' and ms.size > 0 and cast[cstring](ms.data)[ms.size - 1] == eat:
       dec(ms.size)                                  # trim pre-delim char
     yield ms
-    ms.data = cast[cstring](cast[int](ending) +% 1)     # skip delim
-    remaining = mfile.size - (ms.data -! cast[cstring](mfile.mem))
+    ms.data = cast[pointer](cast[int](ending) +% 1)     # skip delim
+    remaining = mfile.size - (ms.data -! mfile.mem)
 
 proc toString*(ms: MemSlice): string {.inline.} =
   proc toNimStr(str: cstring, len: int): string {. importc: "toNimStr" .}