remove decades-deprecated Win32 API *A function support (#21315)
This commit is contained in:
parent
9b5ae2b2eb
commit
612abda4f4
13 changed files with 173 additions and 414 deletions
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue