Skip to content

Commit dd80e96

Browse files
ringaboutnarimiran
authored andcommitted
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> (cherry picked from commit 06cd156)
1 parent 99528ee commit dd80e96

File tree

21 files changed

+44
-44
lines changed

21 files changed

+44
-44
lines changed

compiler/lexer.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -912,7 +912,7 @@ proc getSymbol(L: var Lexer, tok: var Token) =
912912
else: break
913913
tokenEnd(tok, pos-1)
914914
h = !$h
915-
tok.ident = L.cache.getIdent(addr(L.buf[L.bufpos]), pos - L.bufpos, h)
915+
tok.ident = L.cache.getIdent(cast[cstring](addr(L.buf[L.bufpos])), pos - L.bufpos, h)
916916
if (tok.ident.id < ord(tokKeywordLow) - ord(tkSymbol)) or
917917
(tok.ident.id > ord(tokKeywordHigh) - ord(tkSymbol)):
918918
tok.tokType = tkSymbol
@@ -926,7 +926,7 @@ proc getSymbol(L: var Lexer, tok: var Token) =
926926
proc endOperator(L: var Lexer, tok: var Token, pos: int,
927927
hash: Hash) {.inline.} =
928928
var h = !$hash
929-
tok.ident = L.cache.getIdent(addr(L.buf[L.bufpos]), pos - L.bufpos, h)
929+
tok.ident = L.cache.getIdent(cast[cstring](addr(L.buf[L.bufpos])), pos - L.bufpos, h)
930930
if (tok.ident.id < oprLow) or (tok.ident.id > oprHigh): tok.tokType = tkOpr
931931
else: tok.tokType = TokType(tok.ident.id - oprLow + ord(tkColon))
932932
L.bufpos = pos

compiler/sighashes.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import types
1616
proc `&=`(c: var MD5Context, s: string) = md5Update(c, s, s.len)
1717
proc `&=`(c: var MD5Context, ch: char) =
1818
# XXX suspicious code here; relies on ch being zero terminated?
19-
md5Update(c, unsafeAddr ch, 1)
19+
md5Update(c, cast[cstring](unsafeAddr ch), 1)
2020
proc `&=`(c: var MD5Context, r: Rope) =
2121
for l in leaves(r): md5Update(c, l.cstring, l.len)
2222
proc `&=`(c: var MD5Context, i: BiggestInt) =

lib/impure/db_odbc.nim

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

138138
proc dbError*(db: var DbConn) {.
139139
tags: [ReadDbEffect, WriteDbEffect], raises: [DbError] .} =
@@ -183,7 +183,7 @@ proc sqlGetDBMS(db: var DbConn): string {.
183183
db.sqlCheck(SQLGetInfo(db.hDb, SQL_DBMS_NAME, cast[SqlPointer](buf.addr),
184184
4095.TSqlSmallInt, sz.addr))
185185
except: discard
186-
return $(addr buf)
186+
return $(cast[cstring](addr buf))
187187

188188
proc dbQuote*(s: string): string {.noSideEffect.} =
189189
## DB quotes the string.
@@ -294,7 +294,7 @@ iterator fastRows*(db: var DbConn, query: SqlQuery,
294294
buf[0] = '\0'
295295
db.sqlCheck(SQLGetData(db.stmt, colId.SqlUSmallInt, SQL_C_CHAR,
296296
cast[cstring](buf.addr), 4095, sz.addr))
297-
rowRes[colId-1] = $(addr buf)
297+
rowRes[colId-1] = $cast[cstring]((addr buf))
298298
yield rowRes
299299
res = SQLFetch(db.stmt)
300300
properFreeResult(SQL_HANDLE_STMT, db.stmt)
@@ -322,7 +322,7 @@ iterator instantRows*(db: var DbConn, query: SqlQuery,
322322
buf[0] = '\0'
323323
db.sqlCheck(SQLGetData(db.stmt, colId.SqlUSmallInt, SQL_C_CHAR,
324324
cast[cstring](buf.addr), 4095, sz.addr))
325-
rowRes[colId-1] = $(addr buf)
325+
rowRes[colId-1] = $cast[cstring](addr buf)
326326
yield (row: rowRes, len: cCnt.int)
327327
res = SQLFetch(db.stmt)
328328
properFreeResult(SQL_HANDLE_STMT, db.stmt)
@@ -361,7 +361,7 @@ proc getRow*(db: var DbConn, query: SqlQuery,
361361
buf[0] = '\0'
362362
db.sqlCheck(SQLGetData(db.stmt, colId.SqlUSmallInt, SQL_C_CHAR,
363363
cast[cstring](buf.addr), 4095, sz.addr))
364-
rowRes[colId-1] = $(addr buf)
364+
rowRes[colId-1] = $cast[cstring](addr buf)
365365
res = SQLFetch(db.stmt)
366366
result = rowRes
367367
properFreeResult(SQL_HANDLE_STMT, db.stmt)
@@ -389,7 +389,7 @@ proc getAllRows*(db: var DbConn, query: SqlQuery,
389389
buf[0] = '\0'
390390
db.sqlCheck(SQLGetData(db.stmt, colId.SqlUSmallInt, SQL_C_CHAR,
391391
cast[cstring](buf.addr), 4095, sz.addr))
392-
rowRes[colId-1] = $(addr buf)
392+
rowRes[colId-1] = $cast[cstring](addr buf)
393393
rows.add(rowRes)
394394
res = SQLFetch(db.stmt)
395395
result = rows

lib/posix/posix_utils.nim

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

2020
template charArrayToString(input: typed): string =
21-
$cstring(addr input)
21+
$cast[cstring](addr input)
2222

2323
proc uname*(): Uname =
2424
## 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
@@ -226,7 +226,7 @@ when defineSsl:
226226
let len = bioCtrlPending(socket.bioOut)
227227
if len > 0:
228228
var data = newString(len)
229-
let read = bioRead(socket.bioOut, addr data[0], len)
229+
let read = bioRead(socket.bioOut, cast[cstring](addr data[0]), len)
230230
assert read != 0
231231
if read < 0:
232232
raiseSSLError()
@@ -244,7 +244,7 @@ when defineSsl:
244244
var data = await recv(socket.fd.AsyncFD, BufferSize, flags)
245245
let length = len(data)
246246
if length > 0:
247-
let ret = bioWrite(socket.bioIn, addr data[0], length.cint)
247+
let ret = bioWrite(socket.bioIn, cast[cstring](addr data[0]), length.cint)
248248
if ret < 0:
249249
raiseSSLError()
250250
elif length == 0:
@@ -455,7 +455,7 @@ proc send*(socket: AsyncSocket, data: string,
455455
when defineSsl:
456456
var copy = data
457457
sslLoop(socket, flags,
458-
sslWrite(socket.sslHandle, addr copy[0], copy.len.cint))
458+
sslWrite(socket.sslHandle, cast[cstring](addr copy[0]), copy.len.cint))
459459
await sendPendingSslData(socket, flags)
460460
else:
461461
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
@@ -479,13 +479,13 @@ when not useNimNetLite:
479479
result = newString(addrLen)
480480
let addr6 = addr cast[ptr Sockaddr_in6](sockAddr).sin6_addr
481481
when not useWinVersion:
482-
if posix.inet_ntop(posix.AF_INET6, addr6, addr result[0],
482+
if posix.inet_ntop(posix.AF_INET6, addr6, cast[cstring](addr result[0]),
483483
result.len.int32) == nil:
484484
raiseOSError(osLastError())
485485
if posix.IN6_IS_ADDR_V4MAPPED(addr6) != 0:
486486
result.setSlice("::ffff:".len..<addrLen)
487487
else:
488-
if winlean.inet_ntop(winlean.AF_INET6, addr6, addr result[0],
488+
if winlean.inet_ntop(winlean.AF_INET6, addr6, cast[cstring](addr result[0]),
489489
result.len.int32) == nil:
490490
raiseOSError(osLastError())
491491
setLen(result, len(cstring(result)))
@@ -507,23 +507,23 @@ when not useNimNetLite:
507507
if sockAddr.sa_family.cint == nativeAfInet:
508508
let addr4 = addr cast[ptr Sockaddr_in](sockAddr).sin_addr
509509
when not useWinVersion:
510-
if posix.inet_ntop(posix.AF_INET, addr4, addr strAddress[0],
510+
if posix.inet_ntop(posix.AF_INET, addr4, cast[cstring](addr strAddress[0]),
511511
strAddress.len.int32) == nil:
512512
raiseOSError(osLastError())
513513
else:
514-
if winlean.inet_ntop(winlean.AF_INET, addr4, addr strAddress[0],
514+
if winlean.inet_ntop(winlean.AF_INET, addr4, cast[cstring](addr strAddress[0]),
515515
strAddress.len.int32) == nil:
516516
raiseOSError(osLastError())
517517
elif sockAddr.sa_family.cint == nativeAfInet6:
518518
let addr6 = addr cast[ptr Sockaddr_in6](sockAddr).sin6_addr
519519
when not useWinVersion:
520-
if posix.inet_ntop(posix.AF_INET6, addr6, addr strAddress[0],
520+
if posix.inet_ntop(posix.AF_INET6, addr6, cast[cstring](addr strAddress[0]),
521521
strAddress.len.int32) == nil:
522522
raiseOSError(osLastError())
523523
if posix.IN6_IS_ADDR_V4MAPPED(addr6) != 0:
524524
strAddress.setSlice("::ffff:".len..<length)
525525
else:
526-
if winlean.inet_ntop(winlean.AF_INET6, addr6, addr strAddress[0],
526+
if winlean.inet_ntop(winlean.AF_INET6, addr6, cast[cstring](addr strAddress[0]),
527527
strAddress.len.int32) == nil:
528528
raiseOSError(osLastError())
529529
else:
@@ -582,7 +582,7 @@ when not useNimNetLite:
582582
# Cannot use INET6_ADDRSTRLEN here, because it's a C define.
583583
result[0] = newString(64)
584584
if inet_ntop(name.sin6_family.cint,
585-
addr name.sin6_addr, addr result[0][0], (result[0].len+1).int32).isNil:
585+
addr name.sin6_addr, cast[cstring](addr result[0][0]), (result[0].len+1).int32).isNil:
586586
raiseOSError(osLastError())
587587
setLen(result[0], result[0].cstring.len)
588588
result[1] = Port(nativesockets.ntohs(name.sin6_port))
@@ -619,7 +619,7 @@ when not useNimNetLite:
619619
# Cannot use INET6_ADDRSTRLEN here, because it's a C define.
620620
result[0] = newString(64)
621621
if inet_ntop(name.sin6_family.cint,
622-
addr name.sin6_addr, addr result[0][0], (result[0].len+1).int32).isNil:
622+
addr name.sin6_addr, cast[cstring](addr result[0][0]), (result[0].len+1).int32).isNil:
623623
raiseOSError(osLastError())
624624
setLen(result[0], result[0].cstring.len)
625625
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
@@ -2375,11 +2375,11 @@ func formatBiggestFloat*(f: BiggestFloat, format: FloatFormatMode = ffDefault,
23752375
frmtstr[3] = '*'
23762376
frmtstr[4] = floatFormatToChar[format]
23772377
frmtstr[5] = '\0'
2378-
L = c_sprintf(addr buf, addr frmtstr, precision, f)
2378+
L = c_sprintf(cast[cstring](addr buf), cast[cstring](addr frmtstr), precision, f)
23792379
else:
23802380
frmtstr[1] = floatFormatToChar[format]
23812381
frmtstr[2] = '\0'
2382-
L = c_sprintf(addr buf, addr frmtstr, f)
2382+
L = c_sprintf(cast[cstring](addr buf), cast[cstring](addr frmtstr), f)
23832383
result = newString(L)
23842384
for i in 0 ..< L:
23852385
# Depending on the locale either dot or comma is produced,

lib/std/private/strimpl.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ func find*(s, sub: cstring, start: Natural = 0, last = 0): int =
106106
if sub.len > s.len - start: return -1
107107
if sub.len == 1: return find(s, sub[0], start, last)
108108
if last == 0 and s.len > start:
109-
let found = c_strstr(s[start].unsafeAddr, sub)
109+
let found = c_strstr(cast[cstring](s[start].unsafeAddr), sub)
110110
if not found.isNil:
111111
result = cast[ByteAddress](found) -% cast[ByteAddress](s)
112112
else:

lib/system.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2038,7 +2038,7 @@ template newException*(exceptn: typedesc, message: string;
20382038
when hostOS == "standalone" and defined(nogc):
20392039
proc nimToCStringConv(s: NimString): cstring {.compilerproc, inline.} =
20402040
if s == nil or s.len == 0: result = cstring""
2041-
else: result = cstring(addr s.data)
2041+
else: result = cast[cstring](addr s.data)
20422042

20432043
proc getTypeInfo*[T](x: T): pointer {.magic: "GetTypeInfo", benign.}
20442044
## Get type information for `x`.

lib/system/dyncalls.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ elif defined(windows) or defined(dos):
161161
dec(m)
162162
k = k div 10
163163
if k == 0: break
164-
result = getProcAddress(cast[THINSTANCE](lib), addr decorated)
164+
result = getProcAddress(cast[THINSTANCE](lib), cast[cstring](addr decorated))
165165
if result != nil: return
166166
procAddrError(name)
167167

0 commit comments

Comments
 (0)