Skip to content

Commit 06cd156

Browse files
authored
fixes ptr to cstring warnings[backport] (#20848)
* fix =#13790 ptr char (+friends) should not implicitly convert to cstring * Apply suggestions from code review * first round; compiles on windows * nimPreviewSlimSystem * conversion is unsafe, cast needed * fixes more tests * fixes asyncnet * another try another error * last one * true * one more * why bugs didn't show at once * add `nimPreviewCstringConversion` switch * typo * fixes ptr to cstring warnings[backport] * add fixes Co-authored-by: xflywind <43030857+xflywind@users.noreply.github.com>
1 parent 3d692d0 commit 06cd156

25 files changed

+50
-50
lines changed

compiler/lexer.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -918,7 +918,7 @@ proc getSymbol(L: var Lexer, tok: var Token) =
918918
else: break
919919
tokenEnd(tok, pos-1)
920920
h = !$h
921-
tok.ident = L.cache.getIdent(addr(L.buf[L.bufpos]), pos - L.bufpos, h)
921+
tok.ident = L.cache.getIdent(cast[cstring](addr(L.buf[L.bufpos])), pos - L.bufpos, h)
922922
if (tok.ident.id < ord(tokKeywordLow) - ord(tkSymbol)) or
923923
(tok.ident.id > ord(tokKeywordHigh) - ord(tkSymbol)):
924924
tok.tokType = tkSymbol
@@ -932,7 +932,7 @@ proc getSymbol(L: var Lexer, tok: var Token) =
932932
proc endOperator(L: var Lexer, tok: var Token, pos: int,
933933
hash: Hash) {.inline.} =
934934
var h = !$hash
935-
tok.ident = L.cache.getIdent(addr(L.buf[L.bufpos]), pos - L.bufpos, h)
935+
tok.ident = L.cache.getIdent(cast[cstring](addr(L.buf[L.bufpos])), pos - L.bufpos, h)
936936
if (tok.ident.id < oprLow) or (tok.ident.id > oprHigh): tok.tokType = tkOpr
937937
else: tok.tokType = TokType(tok.ident.id - oprLow + ord(tkColon))
938938
L.bufpos = pos

compiler/sighashes.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ when defined(nimPreviewSlimSystem):
2020
proc `&=`(c: var MD5Context, s: string) = md5Update(c, s, s.len)
2121
proc `&=`(c: var MD5Context, ch: char) =
2222
# XXX suspicious code here; relies on ch being zero terminated?
23-
md5Update(c, unsafeAddr ch, 1)
23+
md5Update(c, cast[cstring](unsafeAddr ch), 1)
2424

2525
proc `&=`(c: var MD5Context, i: BiggestInt) =
2626
md5Update(c, cast[cstring](unsafeAddr i), sizeof(i))

lib/impure/db_odbc.nim

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ proc getErrInfo(db: var DbConn): tuple[res: int, ss, ne, msg: string] {.
137137
511.TSqlSmallInt, retSz.addr)
138138
except:
139139
discard
140-
return (res.int, $(addr sqlState), $(addr nativeErr), $(addr errMsg))
140+
return (res.int, $(cast[cstring](addr sqlState)), $cast[cstring](addr nativeErr), $cast[cstring](addr errMsg))
141141

142142
proc dbError*(db: var DbConn) {.
143143
tags: [ReadDbEffect, WriteDbEffect], raises: [DbError] .} =
@@ -187,7 +187,7 @@ proc sqlGetDBMS(db: var DbConn): string {.
187187
db.sqlCheck(SQLGetInfo(db.hDb, SQL_DBMS_NAME, cast[SqlPointer](buf.addr),
188188
4095.TSqlSmallInt, sz.addr))
189189
except: discard
190-
return $(addr buf)
190+
return $(cast[cstring](addr buf))
191191

192192
proc dbQuote*(s: string): string {.noSideEffect.} =
193193
## DB quotes the string.
@@ -291,7 +291,7 @@ iterator fastRows*(db: var DbConn, query: SqlQuery,
291291
buf[0] = '\0'
292292
db.sqlCheck(SQLGetData(db.stmt, colId.SqlUSmallInt, SQL_C_CHAR,
293293
cast[cstring](buf.addr), 4095, sz.addr))
294-
rowRes[colId-1] = $(addr buf)
294+
rowRes[colId-1] = $cast[cstring]((addr buf))
295295
yield rowRes
296296
res = SQLFetch(db.stmt)
297297
properFreeResult(SQL_HANDLE_STMT, db.stmt)
@@ -319,7 +319,7 @@ iterator instantRows*(db: var DbConn, query: SqlQuery,
319319
buf[0] = '\0'
320320
db.sqlCheck(SQLGetData(db.stmt, colId.SqlUSmallInt, SQL_C_CHAR,
321321
cast[cstring](buf.addr), 4095, sz.addr))
322-
rowRes[colId-1] = $(addr buf)
322+
rowRes[colId-1] = $cast[cstring](addr buf)
323323
yield (row: rowRes, len: cCnt.int)
324324
res = SQLFetch(db.stmt)
325325
properFreeResult(SQL_HANDLE_STMT, db.stmt)
@@ -358,7 +358,7 @@ proc getRow*(db: var DbConn, query: SqlQuery,
358358
buf[0] = '\0'
359359
db.sqlCheck(SQLGetData(db.stmt, colId.SqlUSmallInt, SQL_C_CHAR,
360360
cast[cstring](buf.addr), 4095, sz.addr))
361-
rowRes[colId-1] = $(addr buf)
361+
rowRes[colId-1] = $cast[cstring](addr buf)
362362
res = SQLFetch(db.stmt)
363363
result = rowRes
364364
properFreeResult(SQL_HANDLE_STMT, db.stmt)
@@ -386,7 +386,7 @@ proc getAllRows*(db: var DbConn, query: SqlQuery,
386386
buf[0] = '\0'
387387
db.sqlCheck(SQLGetData(db.stmt, colId.SqlUSmallInt, SQL_C_CHAR,
388388
cast[cstring](buf.addr), 4095, sz.addr))
389-
rowRes[colId-1] = $(addr buf)
389+
rowRes[colId-1] = $cast[cstring](addr buf)
390390
rows.add(rowRes)
391391
res = SQLFetch(db.stmt)
392392
result = rows

lib/posix/posix_utils.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type Uname* = object
2121
sysname*, nodename*, release*, version*, machine*: string
2222

2323
template charArrayToString(input: typed): string =
24-
$cstring(addr input)
24+
$cast[cstring](addr input)
2525

2626
proc uname*(): Uname =
2727
## Provides system information in a `Uname` struct with sysname, nodename,

lib/pure/asyncnet.nim

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ when defineSsl:
229229
let len = bioCtrlPending(socket.bioOut)
230230
if len > 0:
231231
var data = newString(len)
232-
let read = bioRead(socket.bioOut, addr data[0], len)
232+
let read = bioRead(socket.bioOut, cast[cstring](addr data[0]), len)
233233
assert read != 0
234234
if read < 0:
235235
raiseSSLError()
@@ -247,7 +247,7 @@ when defineSsl:
247247
var data = await recv(socket.fd.AsyncFD, BufferSize, flags)
248248
let length = len(data)
249249
if length > 0:
250-
let ret = bioWrite(socket.bioIn, addr data[0], length.cint)
250+
let ret = bioWrite(socket.bioIn, cast[cstring](addr data[0]), length.cint)
251251
if ret < 0:
252252
raiseSSLError()
253253
elif length == 0:
@@ -459,7 +459,7 @@ proc send*(socket: AsyncSocket, data: string,
459459
when defineSsl:
460460
var copy = data
461461
sslLoop(socket, flags,
462-
sslWrite(socket.sslHandle, addr copy[0], copy.len.cint))
462+
sslWrite(socket.sslHandle, cast[cstring](addr copy[0]), copy.len.cint))
463463
await sendPendingSslData(socket, flags)
464464
else:
465465
await send(socket.fd.AsyncFD, data, flags)

lib/pure/nativesockets.nim

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -481,13 +481,13 @@ when not useNimNetLite:
481481
result = newString(addrLen)
482482
let addr6 = addr cast[ptr Sockaddr_in6](sockAddr).sin6_addr
483483
when not useWinVersion:
484-
if posix.inet_ntop(posix.AF_INET6, addr6, addr result[0],
484+
if posix.inet_ntop(posix.AF_INET6, addr6, cast[cstring](addr result[0]),
485485
result.len.int32) == nil:
486486
raiseOSError(osLastError())
487487
if posix.IN6_IS_ADDR_V4MAPPED(addr6) != 0:
488488
result.setSlice("::ffff:".len..<addrLen)
489489
else:
490-
if winlean.inet_ntop(winlean.AF_INET6, addr6, addr result[0],
490+
if winlean.inet_ntop(winlean.AF_INET6, addr6, cast[cstring](addr result[0]),
491491
result.len.int32) == nil:
492492
raiseOSError(osLastError())
493493
setLen(result, len(cstring(result)))
@@ -509,23 +509,23 @@ when not useNimNetLite:
509509
if sockAddr.sa_family.cint == nativeAfInet:
510510
let addr4 = addr cast[ptr Sockaddr_in](sockAddr).sin_addr
511511
when not useWinVersion:
512-
if posix.inet_ntop(posix.AF_INET, addr4, addr strAddress[0],
512+
if posix.inet_ntop(posix.AF_INET, addr4, cast[cstring](addr strAddress[0]),
513513
strAddress.len.int32) == nil:
514514
raiseOSError(osLastError())
515515
else:
516-
if winlean.inet_ntop(winlean.AF_INET, addr4, addr strAddress[0],
516+
if winlean.inet_ntop(winlean.AF_INET, addr4, cast[cstring](addr strAddress[0]),
517517
strAddress.len.int32) == nil:
518518
raiseOSError(osLastError())
519519
elif sockAddr.sa_family.cint == nativeAfInet6:
520520
let addr6 = addr cast[ptr Sockaddr_in6](sockAddr).sin6_addr
521521
when not useWinVersion:
522-
if posix.inet_ntop(posix.AF_INET6, addr6, addr strAddress[0],
522+
if posix.inet_ntop(posix.AF_INET6, addr6, cast[cstring](addr strAddress[0]),
523523
strAddress.len.int32) == nil:
524524
raiseOSError(osLastError())
525525
if posix.IN6_IS_ADDR_V4MAPPED(addr6) != 0:
526526
strAddress.setSlice("::ffff:".len..<length)
527527
else:
528-
if winlean.inet_ntop(winlean.AF_INET6, addr6, addr strAddress[0],
528+
if winlean.inet_ntop(winlean.AF_INET6, addr6, cast[cstring](addr strAddress[0]),
529529
strAddress.len.int32) == nil:
530530
raiseOSError(osLastError())
531531
else:
@@ -584,7 +584,7 @@ when not useNimNetLite:
584584
# Cannot use INET6_ADDRSTRLEN here, because it's a C define.
585585
result[0] = newString(64)
586586
if inet_ntop(name.sin6_family.cint,
587-
addr name.sin6_addr, addr result[0][0], (result[0].len+1).int32).isNil:
587+
addr name.sin6_addr, cast[cstring](addr result[0][0]), (result[0].len+1).int32).isNil:
588588
raiseOSError(osLastError())
589589
setLen(result[0], result[0].cstring.len)
590590
result[1] = Port(nativesockets.ntohs(name.sin6_port))
@@ -621,7 +621,7 @@ when not useNimNetLite:
621621
# Cannot use INET6_ADDRSTRLEN here, because it's a C define.
622622
result[0] = newString(64)
623623
if inet_ntop(name.sin6_family.cint,
624-
addr name.sin6_addr, addr result[0][0], (result[0].len+1).int32).isNil:
624+
addr name.sin6_addr, cast[cstring](addr result[0][0]), (result[0].len+1).int32).isNil:
625625
raiseOSError(osLastError())
626626
setLen(result[0], result[0].cstring.len)
627627
result[1] = Port(nativesockets.ntohs(name.sin6_port))

lib/pure/strutils.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2435,11 +2435,11 @@ func formatBiggestFloat*(f: BiggestFloat, format: FloatFormatMode = ffDefault,
24352435
frmtstr[3] = '*'
24362436
frmtstr[4] = floatFormatToChar[format]
24372437
frmtstr[5] = '\0'
2438-
L = c_sprintf(addr buf, addr frmtstr, precision, f)
2438+
L = c_sprintf(cast[cstring](addr buf), cast[cstring](addr frmtstr), precision, f)
24392439
else:
24402440
frmtstr[1] = floatFormatToChar[format]
24412441
frmtstr[2] = '\0'
2442-
L = c_sprintf(addr buf, addr frmtstr, f)
2442+
L = c_sprintf(cast[cstring](addr buf), cast[cstring](addr frmtstr), f)
24432443
result = newString(L)
24442444
for i in 0 ..< L:
24452445
# Depending on the locale either dot or comma is produced,

lib/std/formatfloat.nim

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ proc writeFloatToBufferSprintf*(buf: var array[65, char]; value: BiggestFloat):
4949
##
5050
## returns the amount of bytes written to `buf` not counting the
5151
## terminating '\0' character.
52-
var n: int = c_sprintf(addr buf, "%.16g", value)
52+
var n: int = c_sprintf(cast[cstring](addr buf), "%.16g", value)
5353
var hasDot = false
5454
for i in 0..n-1:
5555
if buf[i] == ',':
@@ -90,15 +90,15 @@ proc addFloatRoundtrip*(result: var string; x: float | float32) =
9090
else:
9191
var buffer {.noinit.}: array[65, char]
9292
let n = writeFloatToBufferRoundtrip(buffer, x)
93-
result.addCstringN(cstring(buffer[0].addr), n)
93+
result.addCstringN(cast[cstring](buffer[0].addr), n)
9494

9595
proc addFloatSprintf*(result: var string; x: float) =
9696
when nimvm:
9797
doAssert false
9898
else:
9999
var buffer {.noinit.}: array[65, char]
100100
let n = writeFloatToBufferSprintf(buffer, x)
101-
result.addCstringN(cstring(buffer[0].addr), n)
101+
result.addCstringN(cast[cstring](buffer[0].addr), n)
102102

103103
proc nimFloatToString(a: float): cstring =
104104
## ensures the result doesn't print like an integer, i.e. return 2.0, not 2

lib/std/private/oscommon.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ when defined(windows) and not weirdTarget:
6363
template findNextFile*(a, b: untyped): untyped = findNextFileA(a, b)
6464
template getCommandLine*(): untyped = getCommandLineA()
6565

66-
template getFilename*(f: untyped): untyped = $cstring(addr f.cFileName)
66+
template getFilename*(f: untyped): untyped = $cast[cstring](addr f.cFileName)
6767

6868
proc skipFindData*(f: WIN32_FIND_DATA): bool {.inline.} =
6969
# Note - takes advantage of null delimiter in the cstring

lib/std/private/osdirs.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ iterator walkDir*(dir: string; relative = false, checkDir = false,
231231
while true:
232232
var x = readdir(d)
233233
if x == nil: break
234-
var y = $cstring(addr x.d_name)
234+
var y = $cast[cstring](addr x.d_name)
235235
if y != "." and y != "..":
236236
var s: Stat
237237
let path = dir / y

0 commit comments

Comments
 (0)