switch on

This commit is contained in:
ringabout
2023-12-11 14:12:47 +00:00
committed by GitHub
parent 68bf6c7f93
commit f1a7bfce47
4 changed files with 11 additions and 8 deletions

View File

@@ -539,11 +539,11 @@ when not weirdTarget and (defined(freebsd) or defined(dragonfly) or defined(netb
when not weirdTarget and (defined(linux) or defined(solaris) or defined(bsd) or defined(aix)):
proc getApplAux(procPath: string): string =
result = newString(maxSymlinkLen)
var len = readlink(procPath, result.cstring, maxSymlinkLen)
result = newString(maxSymlinkLen+1) # TODO: fixme how to ?
var len = readlink(procPath, cast[cstring](addr result[0]), maxSymlinkLen)
if len > maxSymlinkLen:
result = newString(len+1)
len = readlink(procPath, result.cstring, len)
len = readlink(procPath, cast[cstring](addr result[0]), len)
setLen(result, len)
when not weirdTarget and defined(openbsd):

View File

@@ -378,7 +378,7 @@ proc write*(s: Stream, x: string) =
var x = x
writeData(s, addr(x), x.len)
else:
writeData(s, cstring(x), x.len)
writeData(s, addr x[0], x.len)
proc write*(s: Stream, args: varargs[string, `$`]) =
## Writes one or more strings to the the stream. No length fields or
@@ -937,11 +937,12 @@ proc peekFloat64*(s: Stream): float64 =
peek(s, result)
proc readStrPrivate(s: Stream, length: int, str: var string) =
if length == 0: return
if length > len(str): setLen(str, length)
when defined(js):
let L = readData(s, addr(str), length)
else:
let L = readData(s, cstring(str), length)
let L = readData(s, addr(str[0]), length)
if L != len(str): setLen(str, L)
proc readStr*(s: Stream, length: int, str: var string) {.since: (1, 3).} =
@@ -963,11 +964,13 @@ proc readStr*(s: Stream, length: int): string =
readStrPrivate(s, length, result)
proc peekStrPrivate(s: Stream, length: int, str: var string) =
# TODO: fixme breaking changes: cannot modify strings by cstring
if length == 0: return
if length > len(str): setLen(str, length)
when defined(js):
let L = peekData(s, addr(str), length)
else:
let L = peekData(s, cstring(str), length)
let L = peekData(s, addr str[0], length)
if L != len(str): setLen(str, L)
proc peekStr*(s: Stream, length: int, str: var string) {.since: (1, 3).} =

View File

@@ -1981,7 +1981,7 @@ func find*(s: string, sub: char, start: Natural = 0, last = -1): int {.rtl,
if length > 0:
let found = c_memchr(s[start].unsafeAddr, sub, cast[csize_t](length))
if not found.isNil:
return cast[int](found) -% cast[int](s.cstring)
return cast[int](found) -% cast[int](s[0].addr)
else:
findImpl()

View File

@@ -144,7 +144,7 @@ proc nimToCStringConv(s: NimStringV3): cstring {.compilerproc, nonReloadable, in
else:
## TODO: fixme: inject conversions somewhere else and be cleaned up
## but let it leak for now
let len = s.nimStrLenV3+1
let len = s.nimStrLenV3
result = cast[cstring](allocShared0(len+1))
copyMem(result, unsafeAddr s.p[0], len)