diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2022-11-16 17:22:51 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-16 10:22:51 +0100 |
commit | 06cd15663d6aed6cbf03a265f546043c47f250d4 (patch) | |
tree | 644bcc378c2a044655df58a91058b7c73e478d06 /lib | |
parent | 3d692d08f74e41588fa157b006e882f142bd77d4 (diff) | |
download | Nim-06cd15663d6aed6cbf03a265f546043c47f250d4.tar.gz |
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>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/impure/db_odbc.nim | 12 | ||||
-rw-r--r-- | lib/posix/posix_utils.nim | 2 | ||||
-rw-r--r-- | lib/pure/asyncnet.nim | 6 | ||||
-rw-r--r-- | lib/pure/nativesockets.nim | 16 | ||||
-rw-r--r-- | lib/pure/strutils.nim | 4 | ||||
-rw-r--r-- | lib/std/formatfloat.nim | 6 | ||||
-rw-r--r-- | lib/std/private/oscommon.nim | 2 | ||||
-rw-r--r-- | lib/std/private/osdirs.nim | 2 | ||||
-rw-r--r-- | lib/std/private/strimpl.nim | 2 | ||||
-rw-r--r-- | lib/std/private/win_setenv.nim | 4 | ||||
-rw-r--r-- | lib/std/syncio.nim | 2 | ||||
-rw-r--r-- | lib/system.nim | 2 | ||||
-rw-r--r-- | lib/system/dyncalls.nim | 2 | ||||
-rw-r--r-- | lib/system/excpt.nim | 4 | ||||
-rw-r--r-- | lib/system/repr.nim | 2 | ||||
-rw-r--r-- | lib/system/strmantle.nim | 2 | ||||
-rw-r--r-- | lib/system/strs_v2.nim | 2 | ||||
-rw-r--r-- | lib/system/sysstr.nim | 2 | ||||
-rw-r--r-- | lib/wrappers/openssl.nim | 8 |
19 files changed, 41 insertions, 41 deletions
diff --git a/lib/impure/db_odbc.nim b/lib/impure/db_odbc.nim index 2427f64fa..62f047b49 100644 --- a/lib/impure/db_odbc.nim +++ b/lib/impure/db_odbc.nim @@ -137,7 +137,7 @@ proc getErrInfo(db: var DbConn): tuple[res: int, ss, ne, msg: string] {. 511.TSqlSmallInt, retSz.addr) except: discard - return (res.int, $(addr sqlState), $(addr nativeErr), $(addr errMsg)) + return (res.int, $(cast[cstring](addr sqlState)), $cast[cstring](addr nativeErr), $cast[cstring](addr errMsg)) proc dbError*(db: var DbConn) {. tags: [ReadDbEffect, WriteDbEffect], raises: [DbError] .} = @@ -187,7 +187,7 @@ proc sqlGetDBMS(db: var DbConn): string {. db.sqlCheck(SQLGetInfo(db.hDb, SQL_DBMS_NAME, cast[SqlPointer](buf.addr), 4095.TSqlSmallInt, sz.addr)) except: discard - return $(addr buf) + return $(cast[cstring](addr buf)) proc dbQuote*(s: string): string {.noSideEffect.} = ## DB quotes the string. @@ -291,7 +291,7 @@ iterator fastRows*(db: var DbConn, query: SqlQuery, buf[0] = '\0' db.sqlCheck(SQLGetData(db.stmt, colId.SqlUSmallInt, SQL_C_CHAR, cast[cstring](buf.addr), 4095, sz.addr)) - rowRes[colId-1] = $(addr buf) + rowRes[colId-1] = $cast[cstring]((addr buf)) yield rowRes res = SQLFetch(db.stmt) properFreeResult(SQL_HANDLE_STMT, db.stmt) @@ -319,7 +319,7 @@ iterator instantRows*(db: var DbConn, query: SqlQuery, buf[0] = '\0' db.sqlCheck(SQLGetData(db.stmt, colId.SqlUSmallInt, SQL_C_CHAR, cast[cstring](buf.addr), 4095, sz.addr)) - rowRes[colId-1] = $(addr buf) + rowRes[colId-1] = $cast[cstring](addr buf) yield (row: rowRes, len: cCnt.int) res = SQLFetch(db.stmt) properFreeResult(SQL_HANDLE_STMT, db.stmt) @@ -358,7 +358,7 @@ proc getRow*(db: var DbConn, query: SqlQuery, buf[0] = '\0' db.sqlCheck(SQLGetData(db.stmt, colId.SqlUSmallInt, SQL_C_CHAR, cast[cstring](buf.addr), 4095, sz.addr)) - rowRes[colId-1] = $(addr buf) + rowRes[colId-1] = $cast[cstring](addr buf) res = SQLFetch(db.stmt) result = rowRes properFreeResult(SQL_HANDLE_STMT, db.stmt) @@ -386,7 +386,7 @@ proc getAllRows*(db: var DbConn, query: SqlQuery, buf[0] = '\0' db.sqlCheck(SQLGetData(db.stmt, colId.SqlUSmallInt, SQL_C_CHAR, cast[cstring](buf.addr), 4095, sz.addr)) - rowRes[colId-1] = $(addr buf) + rowRes[colId-1] = $cast[cstring](addr buf) rows.add(rowRes) res = SQLFetch(db.stmt) result = rows diff --git a/lib/posix/posix_utils.nim b/lib/posix/posix_utils.nim index 0bd83b27b..92fe0940d 100644 --- a/lib/posix/posix_utils.nim +++ b/lib/posix/posix_utils.nim @@ -21,7 +21,7 @@ type Uname* = object sysname*, nodename*, release*, version*, machine*: string template charArrayToString(input: typed): string = - $cstring(addr input) + $cast[cstring](addr input) proc uname*(): Uname = ## Provides system information in a `Uname` struct with sysname, nodename, diff --git a/lib/pure/asyncnet.nim b/lib/pure/asyncnet.nim index ea0ae1f69..982459af7 100644 --- a/lib/pure/asyncnet.nim +++ b/lib/pure/asyncnet.nim @@ -229,7 +229,7 @@ when defineSsl: let len = bioCtrlPending(socket.bioOut) if len > 0: var data = newString(len) - let read = bioRead(socket.bioOut, addr data[0], len) + let read = bioRead(socket.bioOut, cast[cstring](addr data[0]), len) assert read != 0 if read < 0: raiseSSLError() @@ -247,7 +247,7 @@ when defineSsl: var data = await recv(socket.fd.AsyncFD, BufferSize, flags) let length = len(data) if length > 0: - let ret = bioWrite(socket.bioIn, addr data[0], length.cint) + let ret = bioWrite(socket.bioIn, cast[cstring](addr data[0]), length.cint) if ret < 0: raiseSSLError() elif length == 0: @@ -459,7 +459,7 @@ proc send*(socket: AsyncSocket, data: string, when defineSsl: var copy = data sslLoop(socket, flags, - sslWrite(socket.sslHandle, addr copy[0], copy.len.cint)) + sslWrite(socket.sslHandle, cast[cstring](addr copy[0]), copy.len.cint)) await sendPendingSslData(socket, flags) else: await send(socket.fd.AsyncFD, data, flags) diff --git a/lib/pure/nativesockets.nim b/lib/pure/nativesockets.nim index 2599a8acc..14a318412 100644 --- a/lib/pure/nativesockets.nim +++ b/lib/pure/nativesockets.nim @@ -481,13 +481,13 @@ when not useNimNetLite: result = newString(addrLen) let addr6 = addr cast[ptr Sockaddr_in6](sockAddr).sin6_addr when not useWinVersion: - if posix.inet_ntop(posix.AF_INET6, addr6, addr result[0], + if posix.inet_ntop(posix.AF_INET6, addr6, cast[cstring](addr result[0]), result.len.int32) == nil: raiseOSError(osLastError()) if posix.IN6_IS_ADDR_V4MAPPED(addr6) != 0: result.setSlice("::ffff:".len..<addrLen) else: - if winlean.inet_ntop(winlean.AF_INET6, addr6, addr result[0], + if winlean.inet_ntop(winlean.AF_INET6, addr6, cast[cstring](addr result[0]), result.len.int32) == nil: raiseOSError(osLastError()) setLen(result, len(cstring(result))) @@ -509,23 +509,23 @@ when not useNimNetLite: if sockAddr.sa_family.cint == nativeAfInet: let addr4 = addr cast[ptr Sockaddr_in](sockAddr).sin_addr when not useWinVersion: - if posix.inet_ntop(posix.AF_INET, addr4, addr strAddress[0], + if posix.inet_ntop(posix.AF_INET, addr4, cast[cstring](addr strAddress[0]), strAddress.len.int32) == nil: raiseOSError(osLastError()) else: - if winlean.inet_ntop(winlean.AF_INET, addr4, addr strAddress[0], + if winlean.inet_ntop(winlean.AF_INET, addr4, cast[cstring](addr strAddress[0]), strAddress.len.int32) == nil: raiseOSError(osLastError()) elif sockAddr.sa_family.cint == nativeAfInet6: let addr6 = addr cast[ptr Sockaddr_in6](sockAddr).sin6_addr when not useWinVersion: - if posix.inet_ntop(posix.AF_INET6, addr6, addr strAddress[0], + if posix.inet_ntop(posix.AF_INET6, addr6, cast[cstring](addr strAddress[0]), strAddress.len.int32) == nil: raiseOSError(osLastError()) if posix.IN6_IS_ADDR_V4MAPPED(addr6) != 0: strAddress.setSlice("::ffff:".len..<length) else: - if winlean.inet_ntop(winlean.AF_INET6, addr6, addr strAddress[0], + if winlean.inet_ntop(winlean.AF_INET6, addr6, cast[cstring](addr strAddress[0]), strAddress.len.int32) == nil: raiseOSError(osLastError()) else: @@ -584,7 +584,7 @@ when not useNimNetLite: # Cannot use INET6_ADDRSTRLEN here, because it's a C define. result[0] = newString(64) if inet_ntop(name.sin6_family.cint, - addr name.sin6_addr, addr result[0][0], (result[0].len+1).int32).isNil: + addr name.sin6_addr, cast[cstring](addr result[0][0]), (result[0].len+1).int32).isNil: raiseOSError(osLastError()) setLen(result[0], result[0].cstring.len) result[1] = Port(nativesockets.ntohs(name.sin6_port)) @@ -621,7 +621,7 @@ when not useNimNetLite: # Cannot use INET6_ADDRSTRLEN here, because it's a C define. result[0] = newString(64) if inet_ntop(name.sin6_family.cint, - addr name.sin6_addr, addr result[0][0], (result[0].len+1).int32).isNil: + addr name.sin6_addr, cast[cstring](addr result[0][0]), (result[0].len+1).int32).isNil: raiseOSError(osLastError()) setLen(result[0], result[0].cstring.len) result[1] = Port(nativesockets.ntohs(name.sin6_port)) diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim index 2e408f438..8b3d36f66 100644 --- a/lib/pure/strutils.nim +++ b/lib/pure/strutils.nim @@ -2435,11 +2435,11 @@ func formatBiggestFloat*(f: BiggestFloat, format: FloatFormatMode = ffDefault, frmtstr[3] = '*' frmtstr[4] = floatFormatToChar[format] frmtstr[5] = '\0' - L = c_sprintf(addr buf, addr frmtstr, precision, f) + L = c_sprintf(cast[cstring](addr buf), cast[cstring](addr frmtstr), precision, f) else: frmtstr[1] = floatFormatToChar[format] frmtstr[2] = '\0' - L = c_sprintf(addr buf, addr frmtstr, f) + L = c_sprintf(cast[cstring](addr buf), cast[cstring](addr frmtstr), f) result = newString(L) for i in 0 ..< L: # Depending on the locale either dot or comma is produced, diff --git a/lib/std/formatfloat.nim b/lib/std/formatfloat.nim index 6f2383760..2850f7021 100644 --- a/lib/std/formatfloat.nim +++ b/lib/std/formatfloat.nim @@ -49,7 +49,7 @@ proc writeFloatToBufferSprintf*(buf: var array[65, char]; value: BiggestFloat): ## ## returns the amount of bytes written to `buf` not counting the ## terminating '\0' character. - var n: int = c_sprintf(addr buf, "%.16g", value) + var n: int = c_sprintf(cast[cstring](addr buf), "%.16g", value) var hasDot = false for i in 0..n-1: if buf[i] == ',': @@ -90,7 +90,7 @@ proc addFloatRoundtrip*(result: var string; x: float | float32) = else: var buffer {.noinit.}: array[65, char] let n = writeFloatToBufferRoundtrip(buffer, x) - result.addCstringN(cstring(buffer[0].addr), n) + result.addCstringN(cast[cstring](buffer[0].addr), n) proc addFloatSprintf*(result: var string; x: float) = when nimvm: @@ -98,7 +98,7 @@ proc addFloatSprintf*(result: var string; x: float) = else: var buffer {.noinit.}: array[65, char] let n = writeFloatToBufferSprintf(buffer, x) - result.addCstringN(cstring(buffer[0].addr), n) + result.addCstringN(cast[cstring](buffer[0].addr), n) proc nimFloatToString(a: float): cstring = ## ensures the result doesn't print like an integer, i.e. return 2.0, not 2 diff --git a/lib/std/private/oscommon.nim b/lib/std/private/oscommon.nim index 66725395f..bab4856ca 100644 --- a/lib/std/private/oscommon.nim +++ b/lib/std/private/oscommon.nim @@ -63,7 +63,7 @@ when defined(windows) and not weirdTarget: template findNextFile*(a, b: untyped): untyped = findNextFileA(a, b) template getCommandLine*(): untyped = getCommandLineA() - template getFilename*(f: untyped): untyped = $cstring(addr f.cFileName) + template getFilename*(f: untyped): untyped = $cast[cstring](addr f.cFileName) proc skipFindData*(f: WIN32_FIND_DATA): bool {.inline.} = # Note - takes advantage of null delimiter in the cstring diff --git a/lib/std/private/osdirs.nim b/lib/std/private/osdirs.nim index 4b349817c..add9ed424 100644 --- a/lib/std/private/osdirs.nim +++ b/lib/std/private/osdirs.nim @@ -231,7 +231,7 @@ iterator walkDir*(dir: string; relative = false, checkDir = false, while true: var x = readdir(d) if x == nil: break - var y = $cstring(addr x.d_name) + var y = $cast[cstring](addr x.d_name) if y != "." and y != "..": var s: Stat let path = dir / y diff --git a/lib/std/private/strimpl.nim b/lib/std/private/strimpl.nim index 7d19825f4..6a38cbfd2 100644 --- a/lib/std/private/strimpl.nim +++ b/lib/std/private/strimpl.nim @@ -106,7 +106,7 @@ func find*(s, sub: cstring, start: Natural = 0, last = 0): int = if sub.len > s.len - start: return -1 if sub.len == 1: return find(s, sub[0], start, last) if last == 0 and s.len > start: - let found = c_strstr(s[start].unsafeAddr, sub) + let found = c_strstr(cast[cstring](s[start].unsafeAddr), sub) if not found.isNil: result = cast[ByteAddress](found) -% cast[ByteAddress](s) else: diff --git a/lib/std/private/win_setenv.nim b/lib/std/private/win_setenv.nim index 9315f3e7e..303889a40 100644 --- a/lib/std/private/win_setenv.nim +++ b/lib/std/private/win_setenv.nim @@ -94,9 +94,9 @@ else: var buf = newSeq[char](requiredSize + 1) let buf2 = buf[0].addr if wcstombs(buf2, wideName, csize_t(requiredSize + 1)) != high(csize_t): - var ptrToEnv = c_getenv(buf2) + var ptrToEnv = c_getenv(cast[cstring](buf2)) ptrToEnv[0] = '\0' - ptrToEnv = c_getenv(buf2) + ptrToEnv = c_getenv(cast[cstring](buf2)) ptrToEnv[1] = '=' # And now, we have to update the outer environment to have a proper empty value. diff --git a/lib/std/syncio.nim b/lib/std/syncio.nim index d406c254f..16abc5afe 100644 --- a/lib/std/syncio.nim +++ b/lib/std/syncio.nim @@ -467,7 +467,7 @@ proc readLine*(f: File, line: var string): bool {.tags: [ReadIOEffect], while true: # fixes #9634; this pattern may need to be abstracted as a template if reused; # likely other io procs need this for correctness. - fgetsSuccess = c_fgets(addr line[pos], sp.cint, f) != nil + fgetsSuccess = c_fgets(cast[cstring](addr line[pos]), sp.cint, f) != nil if fgetsSuccess: break when not defined(nimscript): if errno == EINTR: diff --git a/lib/system.nim b/lib/system.nim index a8e5824b5..6e16b1189 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -1844,7 +1844,7 @@ proc debugEcho*(x: varargs[typed, `$`]) {.magic: "Echo", noSideEffect, when hostOS == "standalone" and defined(nogc): proc nimToCStringConv(s: NimString): cstring {.compilerproc, inline.} = if s == nil or s.len == 0: result = cstring"" - else: result = cstring(addr s.data) + else: result = cast[cstring](addr s.data) proc getTypeInfo*[T](x: T): pointer {.magic: "GetTypeInfo", benign.} ## Get type information for `x`. diff --git a/lib/system/dyncalls.nim b/lib/system/dyncalls.nim index d5ebe3c19..de22f7cbb 100644 --- a/lib/system/dyncalls.nim +++ b/lib/system/dyncalls.nim @@ -161,7 +161,7 @@ elif defined(windows) or defined(dos): dec(m) k = k div 10 if k == 0: break - result = getProcAddress(cast[THINSTANCE](lib), addr decorated) + result = getProcAddress(cast[THINSTANCE](lib), cast[cstring](addr decorated)) if result != nil: return procAddrError(name) diff --git a/lib/system/excpt.nim b/lib/system/excpt.nim index c76be554f..86cfff9cd 100644 --- a/lib/system/excpt.nim +++ b/lib/system/excpt.nim @@ -397,9 +397,9 @@ proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy, gcsafe.} = xadd(buf, e.name, e.name.len) add(buf, "]\n") if onUnhandledException != nil: - onUnhandledException($buf.addr) + onUnhandledException($cast[cstring](buf.addr)) else: - showErrorMessage(buf.addr, L) + showErrorMessage(cast[cstring](buf.addr), L) proc reportUnhandledError(e: ref Exception) {.nodestroy, gcsafe.} = if unhandledExceptionHook != nil: diff --git a/lib/system/repr.nim b/lib/system/repr.nim index e049d18fa..e47220656 100644 --- a/lib/system/repr.nim +++ b/lib/system/repr.nim @@ -17,7 +17,7 @@ proc reprFloat(x: float): string {.compilerproc.} = return $x proc reprPointer(x: pointer): string {.compilerproc.} = result = newString(60) - let n = c_sprintf(addr result[0], "%p", x) + let n = c_sprintf(cast[cstring](addr result[0]), "%p", x) setLen(result, n) proc reprStrAux(result: var string, s: cstring; len: int) = diff --git a/lib/system/strmantle.nim b/lib/system/strmantle.nim index cb67185ab..3c6ac718b 100644 --- a/lib/system/strmantle.nim +++ b/lib/system/strmantle.nim @@ -232,7 +232,7 @@ proc nimParseBiggestFloat(s: openArray[char], number: var BiggestFloat, t[ti-2] = ('0'.ord + absExponent mod 10).char absExponent = absExponent div 10 t[ti-3] = ('0'.ord + absExponent mod 10).char - number = c_strtod(addr t, nil) + number = c_strtod(cast[cstring](addr t), nil) when defined(nimHasInvariant): {.pop.} # staticBoundChecks diff --git a/lib/system/strs_v2.nim b/lib/system/strs_v2.nim index 74b9e7cd9..e5ab236d2 100644 --- a/lib/system/strs_v2.nim +++ b/lib/system/strs_v2.nim @@ -89,7 +89,7 @@ proc cstrToNimstr(str: cstring): NimStringV2 {.compilerRtl.} = proc nimToCStringConv(s: NimStringV2): cstring {.compilerproc, nonReloadable, inline.} = if s.len == 0: result = cstring"" - else: result = cstring(unsafeAddr s.p.data) + else: result = cast[cstring](unsafeAddr s.p.data) proc appendString(dest: var NimStringV2; src: NimStringV2) {.compilerproc, inline.} = if src.len > 0: diff --git a/lib/system/sysstr.nim b/lib/system/sysstr.nim index 7655d9004..be32652d8 100644 --- a/lib/system/sysstr.nim +++ b/lib/system/sysstr.nim @@ -91,7 +91,7 @@ proc copyStr(s: NimString, start: int): NimString {.compilerproc.} = proc nimToCStringConv(s: NimString): cstring {.compilerproc, nonReloadable, inline.} = if s == nil or s.len == 0: result = cstring"" - else: result = cstring(addr s.data) + else: result = cast[cstring](addr s.data) proc toNimStr(str: cstring, len: int): NimString {.compilerproc.} = result = rawNewStringNoInit(len) diff --git a/lib/wrappers/openssl.nim b/lib/wrappers/openssl.nim index edbbd9618..b3fe8a608 100644 --- a/lib/wrappers/openssl.nim +++ b/lib/wrappers/openssl.nim @@ -804,10 +804,10 @@ proc md5_File*(file: string): string {.raises: [IOError,Exception].} = while (let bytes = f.readChars(buf); bytes > 0): discard md5_Update(ctx, buf[0].addr, cast[csize_t](bytes)) - discard md5_Final(buf[0].addr, ctx) + discard md5_Final(cast[cstring](buf[0].addr), ctx) f.close - result = hexStr(addr buf) + result = hexStr(cast[cstring](addr buf)) proc md5_Str*(str: string): string = ## Generate MD5 hash for a string. Result is a 32 character @@ -824,8 +824,8 @@ proc md5_Str*(str: string): string = discard md5_Update(ctx, input[i].addr, cast[csize_t](L)) i += L - discard md5_Final(addr res, ctx) - result = hexStr(addr res) + discard md5_Final(cast[cstring](addr res), ctx) + result = hexStr(cast[cstring](addr res)) when defined(nimHasStyleChecks): {.pop.} |