win: remove the remaining dynamic kernel32 imports
They were only there to aid Windows XP support, which libuv no longer does. PR-URL: https://github.com/libuv/libuv/pull/1858 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Bartosz Sosnowski <bartosz@janeasystems.com>
This commit is contained in:
parent
fd8d212a80
commit
a7493d8a1d
19
src/win/fs.c
19
src/win/fs.c
@ -1829,17 +1829,13 @@ static void fs__symlink(uv_fs_t* req) {
|
||||
fs__create_junction(req, pathw, new_pathw);
|
||||
return;
|
||||
}
|
||||
if (!pCreateSymbolicLinkW) {
|
||||
SET_REQ_UV_ERROR(req, UV_ENOSYS, ERROR_NOT_SUPPORTED);
|
||||
return;
|
||||
}
|
||||
|
||||
if (req->fs.info.file_flags & UV_FS_SYMLINK_DIR)
|
||||
flags = SYMBOLIC_LINK_FLAG_DIRECTORY | uv__file_symlink_usermode_flag;
|
||||
else
|
||||
flags = uv__file_symlink_usermode_flag;
|
||||
|
||||
if (pCreateSymbolicLinkW(new_pathw, pathw, flags)) {
|
||||
if (CreateSymbolicLinkW(new_pathw, pathw, flags)) {
|
||||
SET_REQ_RESULT(req, 0);
|
||||
return;
|
||||
}
|
||||
@ -1896,7 +1892,7 @@ static size_t fs__realpath_handle(HANDLE handle, char** realpath_ptr) {
|
||||
WCHAR* w_realpath_ptr = NULL;
|
||||
WCHAR* w_realpath_buf;
|
||||
|
||||
w_realpath_len = pGetFinalPathNameByHandleW(handle, NULL, 0, VOLUME_NAME_DOS);
|
||||
w_realpath_len = GetFinalPathNameByHandleW(handle, NULL, 0, VOLUME_NAME_DOS);
|
||||
if (w_realpath_len == 0) {
|
||||
return -1;
|
||||
}
|
||||
@ -1908,10 +1904,8 @@ static size_t fs__realpath_handle(HANDLE handle, char** realpath_ptr) {
|
||||
}
|
||||
w_realpath_ptr = w_realpath_buf;
|
||||
|
||||
if (pGetFinalPathNameByHandleW(handle,
|
||||
w_realpath_ptr,
|
||||
w_realpath_len,
|
||||
VOLUME_NAME_DOS) == 0) {
|
||||
if (GetFinalPathNameByHandleW(
|
||||
handle, w_realpath_ptr, w_realpath_len, VOLUME_NAME_DOS) == 0) {
|
||||
uv__free(w_realpath_buf);
|
||||
SetLastError(ERROR_INVALID_HANDLE);
|
||||
return -1;
|
||||
@ -1943,11 +1937,6 @@ static size_t fs__realpath_handle(HANDLE handle, char** realpath_ptr) {
|
||||
static void fs__realpath(uv_fs_t* req) {
|
||||
HANDLE handle;
|
||||
|
||||
if (!pGetFinalPathNameByHandleW) {
|
||||
SET_REQ_UV_ERROR(req, UV_ENOSYS, ERROR_NOT_SUPPORTED);
|
||||
return;
|
||||
}
|
||||
|
||||
handle = CreateFileW(req->file.pathw,
|
||||
0,
|
||||
0,
|
||||
|
||||
@ -118,15 +118,12 @@ static int uv_tcp_set_socket(uv_loop_t* loop,
|
||||
non_ifs_lsp = uv_tcp_non_ifs_lsp_ipv4;
|
||||
}
|
||||
|
||||
if (pSetFileCompletionNotificationModes &&
|
||||
!(handle->flags & UV_HANDLE_EMULATE_IOCP) && !non_ifs_lsp) {
|
||||
if (pSetFileCompletionNotificationModes((HANDLE) socket,
|
||||
FILE_SKIP_SET_EVENT_ON_HANDLE |
|
||||
FILE_SKIP_COMPLETION_PORT_ON_SUCCESS)) {
|
||||
handle->flags |= UV_HANDLE_SYNC_BYPASS_IOCP;
|
||||
} else if (GetLastError() != ERROR_INVALID_FUNCTION) {
|
||||
if (!(handle->flags & UV_HANDLE_EMULATE_IOCP) && !non_ifs_lsp) {
|
||||
UCHAR sfcnm_flags =
|
||||
FILE_SKIP_SET_EVENT_ON_HANDLE | FILE_SKIP_COMPLETION_PORT_ON_SUCCESS;
|
||||
if (!SetFileCompletionNotificationModes((HANDLE) socket, sfcnm_flags))
|
||||
return GetLastError();
|
||||
}
|
||||
handle->flags |= UV_HANDLE_SYNC_BYPASS_IOCP;
|
||||
}
|
||||
|
||||
if (handle->flags & UV_HANDLE_TCP_NODELAY) {
|
||||
|
||||
@ -83,31 +83,28 @@ static int uv_udp_set_socket(uv_loop_t* loop, uv_udp_t* handle, SOCKET socket,
|
||||
return GetLastError();
|
||||
}
|
||||
|
||||
if (pSetFileCompletionNotificationModes) {
|
||||
/* All known Windows that support SetFileCompletionNotificationModes have a
|
||||
* bug that makes it impossible to use this function in conjunction with
|
||||
* datagram sockets. We can work around that but only if the user is using
|
||||
* the default UDP driver (AFD) and has no other. LSPs stacked on top. Here
|
||||
* we check whether that is the case. */
|
||||
opt_len = (int) sizeof info;
|
||||
if (getsockopt(socket,
|
||||
SOL_SOCKET,
|
||||
SO_PROTOCOL_INFOW,
|
||||
(char*) &info,
|
||||
&opt_len) == SOCKET_ERROR) {
|
||||
return GetLastError();
|
||||
}
|
||||
/* All known Windows that support SetFileCompletionNotificationModes have a
|
||||
* bug that makes it impossible to use this function in conjunction with
|
||||
* datagram sockets. We can work around that but only if the user is using
|
||||
* the default UDP driver (AFD) and has no other. LSPs stacked on top. Here
|
||||
* we check whether that is the case. */
|
||||
opt_len = (int) sizeof info;
|
||||
if (getsockopt(
|
||||
socket, SOL_SOCKET, SO_PROTOCOL_INFOW, (char*) &info, &opt_len) ==
|
||||
SOCKET_ERROR) {
|
||||
return GetLastError();
|
||||
}
|
||||
|
||||
if (info.ProtocolChain.ChainLen == 1) {
|
||||
if (pSetFileCompletionNotificationModes((HANDLE)socket,
|
||||
FILE_SKIP_SET_EVENT_ON_HANDLE |
|
||||
FILE_SKIP_COMPLETION_PORT_ON_SUCCESS)) {
|
||||
handle->flags |= UV_HANDLE_SYNC_BYPASS_IOCP;
|
||||
handle->func_wsarecv = uv_wsarecv_workaround;
|
||||
handle->func_wsarecvfrom = uv_wsarecvfrom_workaround;
|
||||
} else if (GetLastError() != ERROR_INVALID_FUNCTION) {
|
||||
return GetLastError();
|
||||
}
|
||||
if (info.ProtocolChain.ChainLen == 1) {
|
||||
if (SetFileCompletionNotificationModes(
|
||||
(HANDLE) socket,
|
||||
FILE_SKIP_SET_EVENT_ON_HANDLE |
|
||||
FILE_SKIP_COMPLETION_PORT_ON_SUCCESS)) {
|
||||
handle->flags |= UV_HANDLE_SYNC_BYPASS_IOCP;
|
||||
handle->func_wsarecv = uv_wsarecv_workaround;
|
||||
handle->func_wsarecvfrom = uv_wsarecvfrom_workaround;
|
||||
} else if (GetLastError() != ERROR_INVALID_FUNCTION) {
|
||||
return GetLastError();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -34,13 +34,6 @@ sNtQueryVolumeInformationFile pNtQueryVolumeInformationFile;
|
||||
sNtQueryDirectoryFile pNtQueryDirectoryFile;
|
||||
sNtQuerySystemInformation pNtQuerySystemInformation;
|
||||
|
||||
|
||||
/* Kernel32 function pointers */
|
||||
sSetFileCompletionNotificationModes pSetFileCompletionNotificationModes;
|
||||
sCreateSymbolicLinkW pCreateSymbolicLinkW;
|
||||
sGetFinalPathNameByHandleW pGetFinalPathNameByHandleW;
|
||||
|
||||
|
||||
/* Powrprof.dll function pointer */
|
||||
sPowerRegisterSuspendResumeNotification pPowerRegisterSuspendResumeNotification;
|
||||
|
||||
@ -50,7 +43,6 @@ sSetWinEventHook pSetWinEventHook;
|
||||
|
||||
void uv_winapi_init(void) {
|
||||
HMODULE ntdll_module;
|
||||
HMODULE kernel32_module;
|
||||
HMODULE powrprof_module;
|
||||
HMODULE user32_module;
|
||||
|
||||
@ -106,22 +98,6 @@ void uv_winapi_init(void) {
|
||||
uv_fatal_error(GetLastError(), "GetProcAddress");
|
||||
}
|
||||
|
||||
kernel32_module = GetModuleHandleA("kernel32.dll");
|
||||
if (kernel32_module == NULL) {
|
||||
uv_fatal_error(GetLastError(), "GetModuleHandleA");
|
||||
}
|
||||
|
||||
pSetFileCompletionNotificationModes = (sSetFileCompletionNotificationModes)
|
||||
GetProcAddress(kernel32_module, "SetFileCompletionNotificationModes");
|
||||
|
||||
pCreateSymbolicLinkW = (sCreateSymbolicLinkW)
|
||||
GetProcAddress(kernel32_module, "CreateSymbolicLinkW");
|
||||
|
||||
|
||||
pGetFinalPathNameByHandleW = (sGetFinalPathNameByHandleW)
|
||||
GetProcAddress(kernel32_module, "GetFinalPathNameByHandleW");
|
||||
|
||||
|
||||
powrprof_module = LoadLibraryA("powrprof.dll");
|
||||
if (powrprof_module != NULL) {
|
||||
pPowerRegisterSuspendResumeNotification = (sPowerRegisterSuspendResumeNotification)
|
||||
|
||||
@ -4642,22 +4642,6 @@ typedef NTSTATUS (NTAPI *sNtQueryDirectoryFile)
|
||||
# define ERROR_MUI_FILE_NOT_LOADED 15105
|
||||
#endif
|
||||
|
||||
typedef BOOL (WINAPI* sSetFileCompletionNotificationModes)
|
||||
(HANDLE FileHandle,
|
||||
UCHAR Flags);
|
||||
|
||||
typedef BOOLEAN (WINAPI* sCreateSymbolicLinkW)
|
||||
(LPCWSTR lpSymlinkFileName,
|
||||
LPCWSTR lpTargetFileName,
|
||||
DWORD dwFlags);
|
||||
|
||||
|
||||
typedef DWORD (WINAPI* sGetFinalPathNameByHandleW)
|
||||
(HANDLE hFile,
|
||||
LPWSTR lpszFilePath,
|
||||
DWORD cchFilePath,
|
||||
DWORD dwFlags);
|
||||
|
||||
/* from powerbase.h */
|
||||
#ifndef DEVICE_NOTIFY_CALLBACK
|
||||
# define DEVICE_NOTIFY_CALLBACK 2
|
||||
@ -4720,14 +4704,6 @@ extern sNtQueryVolumeInformationFile pNtQueryVolumeInformationFile;
|
||||
extern sNtQueryDirectoryFile pNtQueryDirectoryFile;
|
||||
extern sNtQuerySystemInformation pNtQuerySystemInformation;
|
||||
|
||||
|
||||
/* Kernel32 function pointers */
|
||||
extern sGetQueuedCompletionStatusEx pGetQueuedCompletionStatusEx;
|
||||
extern sSetFileCompletionNotificationModes pSetFileCompletionNotificationModes;
|
||||
extern sCreateSymbolicLinkW pCreateSymbolicLinkW;
|
||||
extern sGetFinalPathNameByHandleW pGetFinalPathNameByHandleW;
|
||||
|
||||
|
||||
/* Powrprof.dll function pointer */
|
||||
extern sPowerRegisterSuspendResumeNotification pPowerRegisterSuspendResumeNotification;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user