Add sideEffect pragma to importC procs in posix, winlean and time module (#13370)
* Add sideEffect pragma to procs in winlean * Add sideEffect pragma to procs in posix * Add test for #13306 * Add sideEffect pragma to procs in times * Fixes #13306
This commit is contained in:
parent
e4415422fe
commit
2a4aa24620
4 changed files with 144 additions and 132 deletions
|
|
@ -129,34 +129,36 @@ const
|
|||
CREATE_NO_WINDOW* = 0x08000000'i32
|
||||
|
||||
when useWinUnicode:
|
||||
proc getVersionExW*(lpVersionInfo: ptr OSVERSIONINFO): WINBOOL {.stdcall, dynlib: "kernel32", importc: "GetVersionExW".}
|
||||
proc getVersionExW*(lpVersionInfo: ptr OSVERSIONINFO): WINBOOL {.
|
||||
stdcall, dynlib: "kernel32", importc: "GetVersionExW", sideEffect.}
|
||||
else:
|
||||
proc getVersionExA*(lpVersionInfo: ptr OSVERSIONINFO): WINBOOL {.stdcall, dynlib: "kernel32", importc: "GetVersionExA".}
|
||||
proc getVersionExA*(lpVersionInfo: ptr OSVERSIONINFO): WINBOOL {.
|
||||
stdcall, dynlib: "kernel32", importc: "GetVersionExA", sideEffect.}
|
||||
|
||||
proc getVersion*(): DWORD {.stdcall, dynlib: "kernel32", importc: "GetVersion".}
|
||||
proc getVersion*(): DWORD {.stdcall, dynlib: "kernel32", importc: "GetVersion", sideEffect.}
|
||||
|
||||
proc closeHandle*(hObject: Handle): WINBOOL {.stdcall, dynlib: "kernel32",
|
||||
importc: "CloseHandle".}
|
||||
|
||||
proc readFile*(hFile: Handle, buffer: pointer, nNumberOfBytesToRead: int32,
|
||||
lpNumberOfBytesRead: ptr int32, lpOverlapped: pointer): WINBOOL{.
|
||||
stdcall, dynlib: "kernel32", importc: "ReadFile".}
|
||||
stdcall, dynlib: "kernel32", importc: "ReadFile", sideEffect.}
|
||||
|
||||
proc writeFile*(hFile: Handle, buffer: pointer, nNumberOfBytesToWrite: int32,
|
||||
lpNumberOfBytesWritten: ptr int32,
|
||||
lpOverlapped: pointer): WINBOOL{.
|
||||
stdcall, dynlib: "kernel32", importc: "WriteFile".}
|
||||
stdcall, dynlib: "kernel32", importc: "WriteFile", sideEffect.}
|
||||
|
||||
proc createPipe*(hReadPipe, hWritePipe: var Handle,
|
||||
lpPipeAttributes: var SECURITY_ATTRIBUTES,
|
||||
nSize: int32): WINBOOL{.
|
||||
stdcall, dynlib: "kernel32", importc: "CreatePipe".}
|
||||
stdcall, dynlib: "kernel32", importc: "CreatePipe", sideEffect.}
|
||||
|
||||
proc createNamedPipe*(lpName: WideCString,
|
||||
dwOpenMode, dwPipeMode, nMaxInstances, nOutBufferSize,
|
||||
nInBufferSize, nDefaultTimeOut: int32,
|
||||
lpSecurityAttributes: ptr SECURITY_ATTRIBUTES): Handle {.
|
||||
stdcall, dynlib: "kernel32", importc: "CreateNamedPipeW".}
|
||||
stdcall, dynlib: "kernel32", importc: "CreateNamedPipeW", sideEffect.}
|
||||
|
||||
proc peekNamedPipe*(hNamedPipe: Handle, lpBuffer: pointer=nil,
|
||||
nBufferSize: int32 = 0,
|
||||
|
|
@ -173,7 +175,7 @@ when useWinUnicode:
|
|||
lpEnvironment, lpCurrentDirectory: WideCString,
|
||||
lpStartupInfo: var STARTUPINFO,
|
||||
lpProcessInformation: var PROCESS_INFORMATION): WINBOOL{.
|
||||
stdcall, dynlib: "kernel32", importc: "CreateProcessW".}
|
||||
stdcall, dynlib: "kernel32", importc: "CreateProcessW", sideEffect.}
|
||||
|
||||
else:
|
||||
proc createProcessA*(lpApplicationName, lpCommandLine: cstring,
|
||||
|
|
@ -183,19 +185,19 @@ else:
|
|||
lpEnvironment: pointer, lpCurrentDirectory: cstring,
|
||||
lpStartupInfo: var STARTUPINFO,
|
||||
lpProcessInformation: var PROCESS_INFORMATION): WINBOOL{.
|
||||
stdcall, dynlib: "kernel32", importc: "CreateProcessA".}
|
||||
stdcall, dynlib: "kernel32", importc: "CreateProcessA", sideEffect.}
|
||||
|
||||
|
||||
proc suspendThread*(hThread: Handle): int32 {.stdcall, dynlib: "kernel32",
|
||||
importc: "SuspendThread".}
|
||||
importc: "SuspendThread", sideEffect.}
|
||||
proc resumeThread*(hThread: Handle): int32 {.stdcall, dynlib: "kernel32",
|
||||
importc: "ResumeThread".}
|
||||
importc: "ResumeThread", sideEffect.}
|
||||
|
||||
proc waitForSingleObject*(hHandle: Handle, dwMilliseconds: int32): int32 {.
|
||||
stdcall, dynlib: "kernel32", importc: "WaitForSingleObject".}
|
||||
stdcall, dynlib: "kernel32", importc: "WaitForSingleObject", sideEffect.}
|
||||
|
||||
proc terminateProcess*(hProcess: Handle, uExitCode: int): WINBOOL {.stdcall,
|
||||
dynlib: "kernel32", importc: "TerminateProcess".}
|
||||
dynlib: "kernel32", importc: "TerminateProcess", sideEffect.}
|
||||
|
||||
proc getExitCodeProcess*(hProcess: Handle, lpExitCode: var int32): WINBOOL {.
|
||||
stdcall, dynlib: "kernel32", importc: "GetExitCodeProcess".}
|
||||
|
|
@ -203,15 +205,15 @@ proc getExitCodeProcess*(hProcess: Handle, lpExitCode: var int32): WINBOOL {.
|
|||
proc getStdHandle*(nStdHandle: int32): Handle {.stdcall, dynlib: "kernel32",
|
||||
importc: "GetStdHandle".}
|
||||
proc setStdHandle*(nStdHandle: int32, hHandle: Handle): WINBOOL {.stdcall,
|
||||
dynlib: "kernel32", importc: "SetStdHandle".}
|
||||
dynlib: "kernel32", importc: "SetStdHandle", sideEffect.}
|
||||
proc flushFileBuffers*(hFile: Handle): WINBOOL {.stdcall, dynlib: "kernel32",
|
||||
importc: "FlushFileBuffers".}
|
||||
importc: "FlushFileBuffers", sideEffect.}
|
||||
|
||||
proc getLastError*(): int32 {.importc: "GetLastError",
|
||||
stdcall, dynlib: "kernel32".}
|
||||
stdcall, dynlib: "kernel32", sideEffect.}
|
||||
|
||||
proc setLastError*(error: int32) {.importc: "SetLastError",
|
||||
stdcall, dynlib: "kernel32".}
|
||||
stdcall, dynlib: "kernel32", sideEffect.}
|
||||
|
||||
when useWinUnicode:
|
||||
proc formatMessageW*(dwFlags: int32, lpSource: pointer,
|
||||
|
|
@ -232,30 +234,30 @@ proc localFree*(p: pointer) {.
|
|||
when useWinUnicode:
|
||||
proc getCurrentDirectoryW*(nBufferLength: int32,
|
||||
lpBuffer: WideCString): int32 {.
|
||||
importc: "GetCurrentDirectoryW", dynlib: "kernel32", stdcall.}
|
||||
importc: "GetCurrentDirectoryW", dynlib: "kernel32", stdcall, sideEffect.}
|
||||
proc setCurrentDirectoryW*(lpPathName: WideCString): int32 {.
|
||||
importc: "SetCurrentDirectoryW", dynlib: "kernel32", stdcall.}
|
||||
importc: "SetCurrentDirectoryW", dynlib: "kernel32", stdcall, sideEffect.}
|
||||
proc createDirectoryW*(pathName: WideCString, security: pointer=nil): int32 {.
|
||||
importc: "CreateDirectoryW", dynlib: "kernel32", stdcall.}
|
||||
importc: "CreateDirectoryW", dynlib: "kernel32", stdcall, sideEffect.}
|
||||
proc removeDirectoryW*(lpPathName: WideCString): int32 {.
|
||||
importc: "RemoveDirectoryW", dynlib: "kernel32", stdcall.}
|
||||
importc: "RemoveDirectoryW", dynlib: "kernel32", stdcall, sideEffect.}
|
||||
proc setEnvironmentVariableW*(lpName, lpValue: WideCString): int32 {.
|
||||
stdcall, dynlib: "kernel32", importc: "SetEnvironmentVariableW".}
|
||||
stdcall, dynlib: "kernel32", importc: "SetEnvironmentVariableW", sideEffect.}
|
||||
|
||||
proc getModuleFileNameW*(handle: Handle, buf: WideCString,
|
||||
size: int32): int32 {.importc: "GetModuleFileNameW",
|
||||
dynlib: "kernel32", stdcall.}
|
||||
else:
|
||||
proc getCurrentDirectoryA*(nBufferLength: int32, lpBuffer: cstring): int32 {.
|
||||
importc: "GetCurrentDirectoryA", dynlib: "kernel32", stdcall.}
|
||||
importc: "GetCurrentDirectoryA", dynlib: "kernel32", stdcall, sideEffect.}
|
||||
proc setCurrentDirectoryA*(lpPathName: cstring): int32 {.
|
||||
importc: "SetCurrentDirectoryA", dynlib: "kernel32", stdcall.}
|
||||
importc: "SetCurrentDirectoryA", dynlib: "kernel32", stdcall, sideEffect.}
|
||||
proc createDirectoryA*(pathName: cstring, security: pointer=nil): int32 {.
|
||||
importc: "CreateDirectoryA", dynlib: "kernel32", stdcall.}
|
||||
importc: "CreateDirectoryA", dynlib: "kernel32", stdcall, sideEffect.}
|
||||
proc removeDirectoryA*(lpPathName: cstring): int32 {.
|
||||
importc: "RemoveDirectoryA", dynlib: "kernel32", stdcall.}
|
||||
importc: "RemoveDirectoryA", dynlib: "kernel32", stdcall, sideEffect.}
|
||||
proc setEnvironmentVariableA*(lpName, lpValue: cstring): int32 {.
|
||||
stdcall, dynlib: "kernel32", importc: "SetEnvironmentVariableA".}
|
||||
stdcall, dynlib: "kernel32", importc: "SetEnvironmentVariableA", sideEffect.}
|
||||
|
||||
proc getModuleFileNameA*(handle: Handle, buf: cstring, size: int32): int32 {.
|
||||
importc: "GetModuleFileNameA", dynlib: "kernel32", stdcall.}
|
||||
|
|
@ -263,17 +265,17 @@ else:
|
|||
when useWinUnicode:
|
||||
proc createSymbolicLinkW*(lpSymlinkFileName, lpTargetFileName: WideCString,
|
||||
flags: DWORD): int32 {.
|
||||
importc:"CreateSymbolicLinkW", dynlib: "kernel32", stdcall.}
|
||||
importc:"CreateSymbolicLinkW", dynlib: "kernel32", stdcall, sideEffect.}
|
||||
proc createHardLinkW*(lpFileName, lpExistingFileName: WideCString,
|
||||
security: pointer=nil): int32 {.
|
||||
importc:"CreateHardLinkW", dynlib: "kernel32", stdcall.}
|
||||
importc:"CreateHardLinkW", dynlib: "kernel32", stdcall, sideEffect.}
|
||||
else:
|
||||
proc createSymbolicLinkA*(lpSymlinkFileName, lpTargetFileName: cstring,
|
||||
flags: DWORD): int32 {.
|
||||
importc:"CreateSymbolicLinkA", dynlib: "kernel32", stdcall.}
|
||||
importc:"CreateSymbolicLinkA", dynlib: "kernel32", stdcall, sideEffect.}
|
||||
proc createHardLinkA*(lpFileName, lpExistingFileName: cstring,
|
||||
security: pointer=nil): int32 {.
|
||||
importc:"CreateHardLinkA", dynlib: "kernel32", stdcall.}
|
||||
importc:"CreateHardLinkA", dynlib: "kernel32", stdcall, sideEffect.}
|
||||
|
||||
const
|
||||
FILE_ATTRIBUTE_READONLY* = 0x00000001'i32
|
||||
|
|
@ -327,17 +329,17 @@ type
|
|||
when useWinUnicode:
|
||||
proc findFirstFileW*(lpFileName: WideCString,
|
||||
lpFindFileData: var WIN32_FIND_DATA): Handle {.
|
||||
stdcall, dynlib: "kernel32", importc: "FindFirstFileW".}
|
||||
stdcall, dynlib: "kernel32", importc: "FindFirstFileW", sideEffect.}
|
||||
proc findNextFileW*(hFindFile: Handle,
|
||||
lpFindFileData: var WIN32_FIND_DATA): int32 {.
|
||||
stdcall, dynlib: "kernel32", importc: "FindNextFileW".}
|
||||
stdcall, dynlib: "kernel32", importc: "FindNextFileW", sideEffect.}
|
||||
else:
|
||||
proc findFirstFileA*(lpFileName: cstring,
|
||||
lpFindFileData: var WIN32_FIND_DATA): Handle {.
|
||||
stdcall, dynlib: "kernel32", importc: "FindFirstFileA".}
|
||||
stdcall, dynlib: "kernel32", importc: "FindFirstFileA", sideEffect.}
|
||||
proc findNextFileA*(hFindFile: Handle,
|
||||
lpFindFileData: var WIN32_FIND_DATA): int32 {.
|
||||
stdcall, dynlib: "kernel32", importc: "FindNextFileA".}
|
||||
stdcall, dynlib: "kernel32", importc: "FindNextFileA", sideEffect.}
|
||||
|
||||
proc findClose*(hFindFile: Handle) {.stdcall, dynlib: "kernel32",
|
||||
importc: "FindClose".}
|
||||
|
|
@ -347,61 +349,61 @@ when useWinUnicode:
|
|||
lpBuffer: WideCString,
|
||||
lpFilePart: var WideCString): int32 {.
|
||||
stdcall, dynlib: "kernel32",
|
||||
importc: "GetFullPathNameW".}
|
||||
importc: "GetFullPathNameW", sideEffect.}
|
||||
proc getFileAttributesW*(lpFileName: WideCString): int32 {.
|
||||
stdcall, dynlib: "kernel32",
|
||||
importc: "GetFileAttributesW".}
|
||||
importc: "GetFileAttributesW", sideEffect.}
|
||||
proc setFileAttributesW*(lpFileName: WideCString,
|
||||
dwFileAttributes: int32): WINBOOL {.
|
||||
stdcall, dynlib: "kernel32", importc: "SetFileAttributesW".}
|
||||
stdcall, dynlib: "kernel32", importc: "SetFileAttributesW", sideEffect.}
|
||||
|
||||
proc copyFileW*(lpExistingFileName, lpNewFileName: WideCString,
|
||||
bFailIfExists: WINBOOL): WINBOOL {.
|
||||
importc: "CopyFileW", stdcall, dynlib: "kernel32".}
|
||||
importc: "CopyFileW", stdcall, dynlib: "kernel32", sideEffect.}
|
||||
|
||||
proc moveFileW*(lpExistingFileName, lpNewFileName: WideCString): WINBOOL {.
|
||||
importc: "MoveFileW", stdcall, dynlib: "kernel32".}
|
||||
importc: "MoveFileW", stdcall, dynlib: "kernel32", sideEffect.}
|
||||
proc moveFileExW*(lpExistingFileName, lpNewFileName: WideCString,
|
||||
flags: DWORD): WINBOOL {.
|
||||
importc: "MoveFileExW", stdcall, dynlib: "kernel32".}
|
||||
importc: "MoveFileExW", stdcall, dynlib: "kernel32", sideEffect.}
|
||||
|
||||
proc getEnvironmentStringsW*(): WideCString {.
|
||||
stdcall, dynlib: "kernel32", importc: "GetEnvironmentStringsW".}
|
||||
stdcall, dynlib: "kernel32", importc: "GetEnvironmentStringsW", sideEffect.}
|
||||
proc freeEnvironmentStringsW*(para1: WideCString): int32 {.
|
||||
stdcall, dynlib: "kernel32", importc: "FreeEnvironmentStringsW".}
|
||||
stdcall, dynlib: "kernel32", importc: "FreeEnvironmentStringsW", sideEffect.}
|
||||
|
||||
proc getCommandLineW*(): WideCString {.importc: "GetCommandLineW",
|
||||
stdcall, dynlib: "kernel32".}
|
||||
stdcall, dynlib: "kernel32", sideEffect.}
|
||||
|
||||
else:
|
||||
proc getFullPathNameA*(lpFileName: cstring, nBufferLength: int32,
|
||||
lpBuffer: cstring, lpFilePart: var cstring): int32 {.
|
||||
stdcall, dynlib: "kernel32",
|
||||
importc: "GetFullPathNameA".}
|
||||
importc: "GetFullPathNameA", sideEffect.}
|
||||
proc getFileAttributesA*(lpFileName: cstring): int32 {.
|
||||
stdcall, dynlib: "kernel32",
|
||||
importc: "GetFileAttributesA".}
|
||||
importc: "GetFileAttributesA", sideEffect.}
|
||||
proc setFileAttributesA*(lpFileName: cstring,
|
||||
dwFileAttributes: int32): WINBOOL {.
|
||||
stdcall, dynlib: "kernel32", importc: "SetFileAttributesA".}
|
||||
stdcall, dynlib: "kernel32", importc: "SetFileAttributesA", sideEffect.}
|
||||
|
||||
proc copyFileA*(lpExistingFileName, lpNewFileName: cstring,
|
||||
bFailIfExists: cint): cint {.
|
||||
importc: "CopyFileA", stdcall, dynlib: "kernel32".}
|
||||
importc: "CopyFileA", stdcall, dynlib: "kernel32", sideEffect.}
|
||||
|
||||
proc moveFileA*(lpExistingFileName, lpNewFileName: cstring): WINBOOL {.
|
||||
importc: "MoveFileA", stdcall, dynlib: "kernel32".}
|
||||
importc: "MoveFileA", stdcall, dynlib: "kernel32", sideEffect.}
|
||||
proc moveFileExA*(lpExistingFileName, lpNewFileName: cstring,
|
||||
flags: DWORD): WINBOOL {.
|
||||
importc: "MoveFileExA", stdcall, dynlib: "kernel32".}
|
||||
importc: "MoveFileExA", stdcall, dynlib: "kernel32", sideEffect.}
|
||||
|
||||
proc getEnvironmentStringsA*(): cstring {.
|
||||
stdcall, dynlib: "kernel32", importc: "GetEnvironmentStringsA".}
|
||||
stdcall, dynlib: "kernel32", importc: "GetEnvironmentStringsA", sideEffect.}
|
||||
proc freeEnvironmentStringsA*(para1: cstring): int32 {.
|
||||
stdcall, dynlib: "kernel32", importc: "FreeEnvironmentStringsA".}
|
||||
stdcall, dynlib: "kernel32", importc: "FreeEnvironmentStringsA", sideEffect.}
|
||||
|
||||
proc getCommandLineA*(): cstring {.
|
||||
importc: "GetCommandLineA", stdcall, dynlib: "kernel32".}
|
||||
importc: "GetCommandLineA", stdcall, dynlib: "kernel32", sideEffect.}
|
||||
|
||||
proc rdFileTime*(f: FILETIME): int64 =
|
||||
result = ze64(f.dwLowDateTime) or (ze64(f.dwHighDateTime) shl 32)
|
||||
|
|
@ -410,26 +412,26 @@ proc rdFileSize*(f: WIN32_FIND_DATA): int64 =
|
|||
result = ze64(f.nFileSizeLow) or (ze64(f.nFileSizeHigh) shl 32)
|
||||
|
||||
proc getSystemTimeAsFileTime*(lpSystemTimeAsFileTime: var FILETIME) {.
|
||||
importc: "GetSystemTimeAsFileTime", dynlib: "kernel32", stdcall.}
|
||||
importc: "GetSystemTimeAsFileTime", dynlib: "kernel32", stdcall, sideEffect.}
|
||||
|
||||
proc sleep*(dwMilliseconds: int32){.stdcall, dynlib: "kernel32",
|
||||
importc: "Sleep".}
|
||||
importc: "Sleep", sideEffect.}
|
||||
|
||||
when useWinUnicode:
|
||||
proc shellExecuteW*(hwnd: Handle, lpOperation, lpFile,
|
||||
lpParameters, lpDirectory: WideCString,
|
||||
nShowCmd: int32): Handle{.
|
||||
stdcall, dynlib: "shell32.dll", importc: "ShellExecuteW".}
|
||||
stdcall, dynlib: "shell32.dll", importc: "ShellExecuteW", sideEffect.}
|
||||
|
||||
else:
|
||||
proc shellExecuteA*(hwnd: Handle, lpOperation, lpFile,
|
||||
lpParameters, lpDirectory: cstring,
|
||||
nShowCmd: int32): Handle{.
|
||||
stdcall, dynlib: "shell32.dll", importc: "ShellExecuteA".}
|
||||
stdcall, dynlib: "shell32.dll", importc: "ShellExecuteA", sideEffect.}
|
||||
|
||||
proc getFileInformationByHandle*(hFile: Handle,
|
||||
lpFileInformation: ptr BY_HANDLE_FILE_INFORMATION): WINBOOL{.
|
||||
stdcall, dynlib: "kernel32", importc: "GetFileInformationByHandle".}
|
||||
stdcall, dynlib: "kernel32", importc: "GetFileInformationByHandle", sideEffect.}
|
||||
|
||||
const
|
||||
WSADESCRIPTION_LEN* = 256
|
||||
|
|
@ -444,7 +446,7 @@ const
|
|||
|
||||
ws2dll = "Ws2_32.dll"
|
||||
|
||||
proc wsaGetLastError*(): cint {.importc: "WSAGetLastError", dynlib: ws2dll.}
|
||||
proc wsaGetLastError*(): cint {.importc: "WSAGetLastError", dynlib: ws2dll, sideEffect.}
|
||||
|
||||
type
|
||||
SocketHandle* = distinct int
|
||||
|
|
@ -557,19 +559,19 @@ var
|
|||
proc `==`*(x, y: SocketHandle): bool {.borrow.}
|
||||
|
||||
proc getservbyname*(name, proto: cstring): ptr Servent {.
|
||||
stdcall, importc: "getservbyname", dynlib: ws2dll.}
|
||||
stdcall, importc: "getservbyname", dynlib: ws2dll, sideEffect.}
|
||||
|
||||
proc getservbyport*(port: cint, proto: cstring): ptr Servent {.
|
||||
stdcall, importc: "getservbyport", dynlib: ws2dll.}
|
||||
stdcall, importc: "getservbyport", dynlib: ws2dll, sideEffect.}
|
||||
|
||||
proc gethostbyaddr*(ip: ptr InAddr, len: cuint, theType: cint): ptr Hostent {.
|
||||
stdcall, importc: "gethostbyaddr", dynlib: ws2dll.}
|
||||
stdcall, importc: "gethostbyaddr", dynlib: ws2dll, sideEffect.}
|
||||
|
||||
proc gethostbyname*(name: cstring): ptr Hostent {.
|
||||
stdcall, importc: "gethostbyname", dynlib: ws2dll.}
|
||||
stdcall, importc: "gethostbyname", dynlib: ws2dll, sideEffect.}
|
||||
|
||||
proc gethostname*(hostname: cstring, len: cint): cint {.
|
||||
stdcall, importc: "gethostname", dynlib: ws2dll.}
|
||||
stdcall, importc: "gethostname", dynlib: ws2dll, sideEffect.}
|
||||
|
||||
proc socket*(af, typ, protocol: cint): SocketHandle {.
|
||||
stdcall, importc: "socket", dynlib: ws2dll.}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue