mirror of
https://github.com/codex-storage/nim-leveldb.git
synced 2025-02-19 19:08:34 +00:00
fix: fixed length string with terminating character
This commit is contained in:
parent
068b9822d3
commit
f06f932669
@ -60,6 +60,10 @@ proc put*(self: LevelDb, key: string, value: string, sync = true) =
|
||||
key, key.len.csize, value, value.len.csize, addr errPtr)
|
||||
checkError(errPtr)
|
||||
|
||||
proc newString(cstr: cstring, length: csize): string =
|
||||
result = newString(length)
|
||||
copyMem(unsafeAddr result[0], cstr, length)
|
||||
|
||||
proc get*(self: LevelDb, key: string): Option[string] =
|
||||
var size: csize
|
||||
var errPtr: cstring = nil
|
||||
@ -69,7 +73,7 @@ proc get*(self: LevelDb, key: string): Option[string] =
|
||||
if s == nil:
|
||||
result = none(string)
|
||||
else:
|
||||
result = some ($s)[0..<size]
|
||||
result = some (newString(s, size))
|
||||
free(s)
|
||||
|
||||
proc delete*(self: LevelDb, key: string, sync = true) =
|
||||
@ -84,13 +88,13 @@ proc getIterData(iterPtr: ptr leveldb_iterator_t): (Option[string], Option[strin
|
||||
|
||||
str = leveldb_iter_key(iterPtr, addr len)
|
||||
if len > 0:
|
||||
result[0] = some ($str)[0..<len]
|
||||
result[0] = some (newString(str, len))
|
||||
else:
|
||||
result[0] = none string
|
||||
|
||||
str = leveldb_iter_value(iterPtr, addr len)
|
||||
if len > 0:
|
||||
result[1] = some ($str)[0..<len]
|
||||
result[1] = some (newString(str, len))
|
||||
else:
|
||||
result[1] = none string
|
||||
|
||||
|
@ -29,6 +29,10 @@ suite "leveldb":
|
||||
db.delete("hello")
|
||||
check(db.get("hello") == none(string))
|
||||
|
||||
test "get value with 0x00":
|
||||
db.put("\0key", "\0ff")
|
||||
check(db.get("\0key") == some("\0ff"))
|
||||
|
||||
proc initData(db: LevelDb) =
|
||||
db.put("aa", "1")
|
||||
db.put("ba", "2")
|
||||
@ -67,3 +71,8 @@ suite "leveldb":
|
||||
initData(db)
|
||||
check(toSeq(db.iterRange(start = "bb", limit = "b")) ==
|
||||
@[("bb", "3"), ("ba", "2")])
|
||||
|
||||
test "iter with 0x00":
|
||||
db.put("\0z1", "\0ff")
|
||||
db.put("z2\0", "ff\0")
|
||||
check(toSeq(db.iter()) == @[("\0z1", "\0ff"), ("z2\0", "ff\0")])
|
||||
|
Loading…
x
Reference in New Issue
Block a user