remove decades-deprecated Win32 API *A function support (#21315)

This commit is contained in:
tersec 2023-03-02 04:51:54 +00:00 • committed by GitHub
commit 612abda4f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 173 additions and 414 deletions

View file

@ -102,14 +102,9 @@ proc openAsync*(filename: string, mode = fmRead): AsyncFile =
let flags = FILE_FLAG_OVERLAPPED or FILE_ATTRIBUTE_NORMAL
let desiredAccess = getDesiredAccess(mode)
let creationDisposition = getCreationDisposition(mode, filename)
when useWinUnicode:
let fd = createFileW(newWideCString(filename), desiredAccess,
FILE_SHARE_READ,
nil, creationDisposition, flags, 0)
else:
let fd = createFileA(filename, desiredAccess,
FILE_SHARE_READ,
nil, creationDisposition, flags, 0)
let fd = createFileW(newWideCString(filename), desiredAccess,
FILE_SHARE_READ,
nil, creationDisposition, flags, 0)
if fd == INVALID_HANDLE_VALUE:
raiseOSError(osLastError())

View file

@ -21,7 +21,7 @@ when defined(nimPreviewSlimSystem):
when defined(windows):
import winlean
when useWinUnicode and defined(nimPreviewSlimSystem):
when defined(nimPreviewSlimSystem):
import std/widestrs
from os import absolutePath
else:

View file

@ -17,7 +17,7 @@
when defined(windows):
import winlean
when useWinUnicode and defined(nimPreviewSlimSystem):
when defined(nimPreviewSlimSystem):
import std/widestrs
elif defined(posix):
import posix
@ -199,10 +199,7 @@ proc open*(filename: string, mode: FileMode = fmRead,
else: FILE_ATTRIBUTE_NORMAL or flags,
0)
when useWinUnicode:
result.fHandle = callCreateFile(createFileW, newWideCString(filename))
else:
result.fHandle = callCreateFile(createFileA, filename)
result.fHandle = callCreateFile(createFileW, newWideCString(filename))
if result.fHandle == INVALID_HANDLE_VALUE:
fail(osLastError(), "error opening file")

View file

@ -422,32 +422,18 @@ proc expandFilename*(filename: string): string {.rtl, extern: "nos$1",
## Raises `OSError` in case of an error. Follows symlinks.
when defined(windows):
var bufsize = MAX_PATH.int32
when useWinUnicode:
var unused: WideCString = nil
var res = newWideCString("", bufsize)
while true:
var L = getFullPathNameW(newWideCString(filename), bufsize, res, unused)
if L == 0'i32:
raiseOSError(osLastError(), filename)
elif L > bufsize:
res = newWideCString("", L)
bufsize = L
else:
result = res$L
break
else:
var unused: cstring = nil
result = newString(bufsize)
while true:
var L = getFullPathNameA(filename, bufsize, result, unused)
if L == 0'i32:
raiseOSError(osLastError(), filename)
elif L > bufsize:
result = newString(L)
bufsize = L
else:
setLen(result, L)
break
var unused: WideCString = nil
var res = newWideCString("", bufsize)
while true:
var L = getFullPathNameW(newWideCString(filename), bufsize, res, unused)
if L == 0'i32:
raiseOSError(osLastError(), filename)
elif L > bufsize:
res = newWideCString("", L)
bufsize = L
else:
result = res$L
break
# getFullPathName doesn't do case corrections, so we have to use this convoluted
# way of retrieving the true filename
for x in walkFiles(result):
@ -483,14 +469,10 @@ proc createHardlink*(src, dest: string) {.noWeirdTarget.} =
## See also:
## * `createSymlink proc`_
when defined(windows):
when useWinUnicode:
var wSrc = newWideCString(src)
var wDst = newWideCString(dest)
if createHardLinkW(wDst, wSrc, nil) == 0:
raiseOSError(osLastError(), $(src, dest))
else:
if createHardLinkA(dest, src, nil) == 0:
raiseOSError(osLastError(), $(src, dest))
var wSrc = newWideCString(src)
var wDst = newWideCString(dest)
if createHardLinkW(wDst, wSrc, nil) == 0:
raiseOSError(osLastError(), $(src, dest))
else:
if link(src, dest) != 0:
raiseOSError(osLastError(), $(src, dest))
@ -655,32 +637,18 @@ proc getAppFilename*(): string {.rtl, extern: "nos$1", tags: [ReadIOEffect], noW
# /proc/<pid>/path/a.out (complete pathname)
when defined(windows):
var bufsize = int32(MAX_PATH)
when useWinUnicode:
var buf = newWideCString("", bufsize)
while true:
var L = getModuleFileNameW(0, buf, bufsize)
if L == 0'i32:
result = "" # error!
break
elif L > bufsize:
buf = newWideCString("", L)
bufsize = L
else:
result = buf$L
break
else:
result = newString(bufsize)
while true:
var L = getModuleFileNameA(0, result, bufsize)
if L == 0'i32:
result = "" # error!
break
elif L > bufsize:
result = newString(L)
bufsize = L
else:
setLen(result, L)
break
var buf = newWideCString("", bufsize)
while true:
var L = getModuleFileNameW(0, buf, bufsize)
if L == 0'i32:
result = "" # error!
break
elif L > bufsize:
buf = newWideCString("", L)
bufsize = L
else:
result = buf$L
break
elif defined(macosx):
var size = cuint32(0)
getExecPath1(nil, size)
@ -977,10 +945,7 @@ proc isHidden*(path: string): bool {.noWeirdTarget.} =
assert ".foo/".isHidden
when defined(windows):
when useWinUnicode:
wrapUnary(attributes, getFileAttributesW, path)
else:
var attributes = getFileAttributesA(path)
wrapUnary(attributes, getFileAttributesW, path)
if attributes != -1'i32:
result = (attributes and FILE_ATTRIBUTE_HIDDEN) != 0'i32
else:

View file

@ -714,22 +714,15 @@ when defined(windows) and not defined(useNimRtl):
if len(workingDir) > 0: wd = workingDir
if env != nil: e = buildEnv(env)
if poEchoCmd in options: echo($cmdl)
when useWinUnicode:
var tmp = newWideCString(cmdl)
var ee =
if e.str.isNil: newWideCString(cstring(nil))
else: newWideCString(e.str, e.len)
var wwd = newWideCString(wd)
var flags = NORMAL_PRIORITY_CLASS or CREATE_UNICODE_ENVIRONMENT
if poDaemon in options: flags = flags or CREATE_NO_WINDOW
success = winlean.createProcessW(nil, tmp, nil, nil, 1, flags,
ee, wwd, si, procInfo)
else:
var ee =
if e.str.isNil: cstring(nil)
else: cstring(e.str)
success = winlean.createProcessA(nil,
cmdl, nil, nil, 1, NORMAL_PRIORITY_CLASS, ee, wd, si, procInfo)
var tmp = newWideCString(cmdl)
var ee =
if e.str.isNil: newWideCString(cstring(nil))
else: newWideCString(e.str, e.len)
var wwd = newWideCString(wd)
var flags = NORMAL_PRIORITY_CLASS or CREATE_UNICODE_ENVIRONMENT
if poDaemon in options: flags = flags or CREATE_NO_WINDOW
success = winlean.createProcessW(nil, tmp, nil, nil, 1, flags,
ee, wwd, si, procInfo)
let lastError = osLastError()
if poParentStreams notin options:
@ -870,13 +863,9 @@ when defined(windows) and not defined(useNimRtl):
si.hStdError = getStdHandle(STD_ERROR_HANDLE)
si.hStdInput = getStdHandle(STD_INPUT_HANDLE)
si.hStdOutput = getStdHandle(STD_OUTPUT_HANDLE)
when useWinUnicode:
var c = newWideCString(command)
var res = winlean.createProcessW(nil, c, nil, nil, 0,
NORMAL_PRIORITY_CLASS, nil, nil, si, procInfo)
else:
var res = winlean.createProcessA(nil, command, nil, nil, 0,
NORMAL_PRIORITY_CLASS, nil, nil, si, procInfo)
var c = newWideCString(command)
var res = winlean.createProcessW(nil, c, nil, nil, 0,
NORMAL_PRIORITY_CLASS, nil, nil, si, procInfo)
if res == 0:
raiseOSError(osLastError())
else: