Skip to content

Commit 32262e4

Browse files
committed
Move WinAPI functions from libc to std::sys::windows::c
Also remove unused WinAPI functions Signed-off-by: Peter Atashian <[email protected]>
1 parent ef72938 commit 32262e4

File tree

10 files changed

+158
-356
lines changed

10 files changed

+158
-356
lines changed

src/liblibc/lib.rs

Lines changed: 1 addition & 223 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,6 @@ pub use funcs::bsd43::*;
134134
#[cfg(unix)] pub use funcs::posix01::unistd::*;
135135
#[cfg(unix)] pub use funcs::posix01::resource::*;
136136

137-
138-
#[cfg(windows)] pub use funcs::extra::kernel32::*;
139-
#[cfg(windows)] pub use funcs::extra::winsock::*;
140-
#[cfg(windows)] pub use funcs::extra::msvcrt::*;
141-
142137
// On NaCl, these libraries are static. Thus it would be a Bad Idea to link them
143138
// in when creating a test crate.
144139
#[cfg(not(any(windows, target_env = "musl", all(target_os = "nacl", test))))]
@@ -6165,224 +6160,7 @@ pub mod funcs {
61656160

61666161

61676162
#[cfg(target_os = "windows")]
6168-
pub mod extra {
6169-
6170-
pub mod kernel32 {
6171-
use types::os::arch::c95::{c_uint};
6172-
use types::os::arch::extra::{BOOL, DWORD, SIZE_T, HMODULE,
6173-
LPCWSTR, LPWSTR,
6174-
LPWCH, LPDWORD, LPVOID,
6175-
LPCVOID, LPOVERLAPPED,
6176-
LPSECURITY_ATTRIBUTES,
6177-
LPSTARTUPINFO,
6178-
LPPROCESS_INFORMATION,
6179-
LPMEMORY_BASIC_INFORMATION,
6180-
LPSYSTEM_INFO, HANDLE, LPHANDLE,
6181-
LARGE_INTEGER, PLARGE_INTEGER,
6182-
LPFILETIME, LPWIN32_FIND_DATAW};
6183-
6184-
extern "system" {
6185-
pub fn GetEnvironmentVariableW(n: LPCWSTR,
6186-
v: LPWSTR,
6187-
nsize: DWORD)
6188-
-> DWORD;
6189-
pub fn SetEnvironmentVariableW(n: LPCWSTR, v: LPCWSTR)
6190-
-> BOOL;
6191-
pub fn GetEnvironmentStringsW() -> LPWCH;
6192-
pub fn FreeEnvironmentStringsW(env_ptr: LPWCH) -> BOOL;
6193-
pub fn GetModuleFileNameW(hModule: HMODULE,
6194-
lpFilename: LPWSTR,
6195-
nSize: DWORD)
6196-
-> DWORD;
6197-
pub fn CreateDirectoryW(lpPathName: LPCWSTR,
6198-
lpSecurityAttributes:
6199-
LPSECURITY_ATTRIBUTES)
6200-
-> BOOL;
6201-
pub fn CopyFileW(lpExistingFileName: LPCWSTR,
6202-
lpNewFileName: LPCWSTR,
6203-
bFailIfExists: BOOL)
6204-
-> BOOL;
6205-
pub fn DeleteFileW(lpPathName: LPCWSTR) -> BOOL;
6206-
pub fn RemoveDirectoryW(lpPathName: LPCWSTR) -> BOOL;
6207-
pub fn GetCurrentDirectoryW(nBufferLength: DWORD,
6208-
lpBuffer: LPWSTR)
6209-
-> DWORD;
6210-
pub fn SetCurrentDirectoryW(lpPathName: LPCWSTR) -> BOOL;
6211-
pub fn GetLastError() -> DWORD;
6212-
pub fn FindFirstFileW(fileName: LPCWSTR, findFileData: LPWIN32_FIND_DATAW)
6213-
-> HANDLE;
6214-
pub fn FindNextFileW(findFile: HANDLE, findFileData: LPWIN32_FIND_DATAW)
6215-
-> BOOL;
6216-
pub fn FindClose(findFile: HANDLE) -> BOOL;
6217-
pub fn DuplicateHandle(hSourceProcessHandle: HANDLE,
6218-
hSourceHandle: HANDLE,
6219-
hTargetProcessHandle: HANDLE,
6220-
lpTargetHandle: LPHANDLE,
6221-
dwDesiredAccess: DWORD,
6222-
bInheritHandle: BOOL,
6223-
dwOptions: DWORD)
6224-
-> BOOL;
6225-
pub fn CloseHandle(hObject: HANDLE) -> BOOL;
6226-
pub fn OpenProcess(dwDesiredAccess: DWORD,
6227-
bInheritHandle: BOOL,
6228-
dwProcessId: DWORD)
6229-
-> HANDLE;
6230-
pub fn GetCurrentProcess() -> HANDLE;
6231-
pub fn CreateProcessW(lpApplicationName: LPCWSTR,
6232-
lpCommandLine: LPWSTR,
6233-
lpProcessAttributes:
6234-
LPSECURITY_ATTRIBUTES,
6235-
lpThreadAttributes:
6236-
LPSECURITY_ATTRIBUTES,
6237-
bInheritHandles: BOOL,
6238-
dwCreationFlags: DWORD,
6239-
lpEnvironment: LPVOID,
6240-
lpCurrentDirectory: LPCWSTR,
6241-
lpStartupInfo: LPSTARTUPINFO,
6242-
lpProcessInformation:
6243-
LPPROCESS_INFORMATION)
6244-
-> BOOL;
6245-
pub fn WaitForSingleObject(hHandle: HANDLE,
6246-
dwMilliseconds: DWORD)
6247-
-> DWORD;
6248-
pub fn TerminateProcess(hProcess: HANDLE, uExitCode: c_uint)
6249-
-> BOOL;
6250-
pub fn GetExitCodeProcess(hProcess: HANDLE,
6251-
lpExitCode: LPDWORD)
6252-
-> BOOL;
6253-
pub fn GetSystemInfo(lpSystemInfo: LPSYSTEM_INFO);
6254-
pub fn VirtualAlloc(lpAddress: LPVOID,
6255-
dwSize: SIZE_T,
6256-
flAllocationType: DWORD,
6257-
flProtect: DWORD)
6258-
-> LPVOID;
6259-
pub fn VirtualFree(lpAddress: LPVOID,
6260-
dwSize: SIZE_T,
6261-
dwFreeType: DWORD)
6262-
-> BOOL;
6263-
pub fn VirtualLock(lpAddress: LPVOID, dwSize: SIZE_T) -> BOOL;
6264-
pub fn VirtualUnlock(lpAddress: LPVOID, dwSize: SIZE_T)
6265-
-> BOOL;
6266-
pub fn VirtualProtect(lpAddress: LPVOID,
6267-
dwSize: SIZE_T,
6268-
flNewProtect: DWORD,
6269-
lpflOldProtect: LPDWORD)
6270-
-> BOOL;
6271-
pub fn VirtualQuery(lpAddress: LPCVOID,
6272-
lpBuffer: LPMEMORY_BASIC_INFORMATION,
6273-
dwLength: SIZE_T)
6274-
-> SIZE_T;
6275-
pub fn CreateFileMappingW(hFile: HANDLE,
6276-
lpAttributes: LPSECURITY_ATTRIBUTES,
6277-
flProtect: DWORD,
6278-
dwMaximumSizeHigh: DWORD,
6279-
dwMaximumSizeLow: DWORD,
6280-
lpName: LPCWSTR)
6281-
-> HANDLE;
6282-
pub fn MapViewOfFile(hFileMappingObject: HANDLE,
6283-
dwDesiredAccess: DWORD,
6284-
dwFileOffsetHigh: DWORD,
6285-
dwFileOffsetLow: DWORD,
6286-
dwNumberOfBytesToMap: SIZE_T)
6287-
-> LPVOID;
6288-
pub fn UnmapViewOfFile(lpBaseAddress: LPCVOID) -> BOOL;
6289-
pub fn MoveFileExW(lpExistingFileName: LPCWSTR,
6290-
lpNewFileName: LPCWSTR,
6291-
dwFlags: DWORD) -> BOOL;
6292-
pub fn CreateHardLinkW(lpSymlinkFileName: LPCWSTR,
6293-
lpTargetFileName: LPCWSTR,
6294-
lpSecurityAttributes: LPSECURITY_ATTRIBUTES)
6295-
-> BOOL;
6296-
pub fn FlushFileBuffers(hFile: HANDLE) -> BOOL;
6297-
pub fn CreateFileW(lpFileName: LPCWSTR,
6298-
dwDesiredAccess: DWORD,
6299-
dwShareMode: DWORD,
6300-
lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
6301-
dwCreationDisposition: DWORD,
6302-
dwFlagsAndAttributes: DWORD,
6303-
hTemplateFile: HANDLE) -> HANDLE;
6304-
pub fn ReadFile(hFile: HANDLE,
6305-
lpBuffer: LPVOID,
6306-
nNumberOfBytesToRead: DWORD,
6307-
lpNumberOfBytesRead: LPDWORD,
6308-
lpOverlapped: LPOVERLAPPED) -> BOOL;
6309-
pub fn WriteFile(hFile: HANDLE,
6310-
lpBuffer: LPVOID,
6311-
nNumberOfBytesToWrite: DWORD,
6312-
lpNumberOfBytesWritten: LPDWORD,
6313-
lpOverlapped: LPOVERLAPPED) -> BOOL;
6314-
pub fn SetFilePointerEx(hFile: HANDLE,
6315-
liDistanceToMove: LARGE_INTEGER,
6316-
lpNewFilePointer: PLARGE_INTEGER,
6317-
dwMoveMethod: DWORD) -> BOOL;
6318-
pub fn SetEndOfFile(hFile: HANDLE) -> BOOL;
6319-
6320-
pub fn GetSystemTimeAsFileTime(
6321-
lpSystemTimeAsFileTime: LPFILETIME);
6322-
6323-
pub fn QueryPerformanceFrequency(
6324-
lpFrequency: *mut LARGE_INTEGER) -> BOOL;
6325-
pub fn QueryPerformanceCounter(
6326-
lpPerformanceCount: *mut LARGE_INTEGER) -> BOOL;
6327-
6328-
pub fn GetCurrentProcessId() -> DWORD;
6329-
pub fn CreateNamedPipeW(
6330-
lpName: LPCWSTR,
6331-
dwOpenMode: DWORD,
6332-
dwPipeMode: DWORD,
6333-
nMaxInstances: DWORD,
6334-
nOutBufferSize: DWORD,
6335-
nInBufferSize: DWORD,
6336-
nDefaultTimeOut: DWORD,
6337-
lpSecurityAttributes: LPSECURITY_ATTRIBUTES
6338-
) -> HANDLE;
6339-
pub fn ConnectNamedPipe(hNamedPipe: HANDLE,
6340-
lpOverlapped: LPOVERLAPPED) -> BOOL;
6341-
pub fn WaitNamedPipeW(lpNamedPipeName: LPCWSTR,
6342-
nTimeOut: DWORD) -> BOOL;
6343-
pub fn SetNamedPipeHandleState(hNamedPipe: HANDLE,
6344-
lpMode: LPDWORD,
6345-
lpMaxCollectionCount: LPDWORD,
6346-
lpCollectDataTimeout: LPDWORD)
6347-
-> BOOL;
6348-
pub fn CreateEventW(lpEventAttributes: LPSECURITY_ATTRIBUTES,
6349-
bManualReset: BOOL,
6350-
bInitialState: BOOL,
6351-
lpName: LPCWSTR) -> HANDLE;
6352-
pub fn GetOverlappedResult(hFile: HANDLE,
6353-
lpOverlapped: LPOVERLAPPED,
6354-
lpNumberOfBytesTransferred: LPDWORD,
6355-
bWait: BOOL) -> BOOL;
6356-
pub fn DisconnectNamedPipe(hNamedPipe: HANDLE) -> BOOL;
6357-
}
6358-
}
6359-
6360-
pub mod msvcrt {
6361-
use types::os::arch::c95::{c_int, c_long};
6362-
use types::os::arch::c99::intptr_t;
6363-
6364-
extern {
6365-
#[link_name = "_commit"]
6366-
pub fn commit(fd: c_int) -> c_int;
6367-
6368-
#[link_name = "_get_osfhandle"]
6369-
pub fn get_osfhandle(fd: c_int) -> c_long;
6370-
6371-
#[link_name = "_open_osfhandle"]
6372-
pub fn open_osfhandle(osfhandle: intptr_t,
6373-
flags: c_int) -> c_int;
6374-
}
6375-
}
6376-
6377-
pub mod winsock {
6378-
use types::os::arch::c95::{c_int, c_long, c_ulong};
6379-
use types::os::common::bsd44::SOCKET;
6380-
6381-
extern "system" {
6382-
pub fn ioctlsocket(s: SOCKET, cmd: c_long, argp: *mut c_ulong) -> c_int;
6383-
}
6384-
}
6385-
}
6163+
pub mod extra {}
63866164
}
63876165

63886166
#[doc(hidden)]

src/librustdoc/flock.rs

Lines changed: 8 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,11 @@ mod imp {
165165
#[cfg(windows)]
166166
mod imp {
167167
use libc;
168+
use std::fs::File;
168169
use std::io;
169170
use std::mem;
170-
use std::ffi::OsStr;
171171
use std::os::windows::prelude::*;
172172
use std::path::Path;
173-
use std::ptr;
174173

175174
const LOCKFILE_EXCLUSIVE_LOCK: libc::DWORD = 0x00000002;
176175

@@ -190,49 +189,31 @@ mod imp {
190189
}
191190

192191
pub struct Lock {
193-
handle: libc::HANDLE,
192+
file: File,
194193
}
195194

196195
impl Lock {
197196
pub fn new(p: &Path) -> Lock {
198-
let os: &OsStr = p.as_ref();
199-
let mut p_16: Vec<_> = os.encode_wide().collect();
200-
p_16.push(0);
201-
let handle = unsafe {
202-
libc::CreateFileW(p_16.as_ptr(),
203-
libc::FILE_GENERIC_READ |
204-
libc::FILE_GENERIC_WRITE,
205-
libc::FILE_SHARE_READ |
206-
libc::FILE_SHARE_DELETE |
207-
libc::FILE_SHARE_WRITE,
208-
ptr::null_mut(),
209-
libc::CREATE_ALWAYS,
210-
libc::FILE_ATTRIBUTE_NORMAL,
211-
ptr::null_mut())
212-
};
213-
if handle == libc::INVALID_HANDLE_VALUE {
214-
panic!("create file error: {}", io::Error::last_os_error());
215-
}
197+
let file = File::create(p).unwrap();
216198
let mut overlapped: libc::OVERLAPPED = unsafe { mem::zeroed() };
217199
let ret = unsafe {
218-
LockFileEx(handle, LOCKFILE_EXCLUSIVE_LOCK, 0, 100, 0,
219-
&mut overlapped)
200+
LockFileEx(file.as_raw_handle() as libc::HANDLE, LOCKFILE_EXCLUSIVE_LOCK,
201+
0, 100, 0, &mut overlapped)
220202
};
221203
if ret == 0 {
222204
let err = io::Error::last_os_error();
223-
unsafe { libc::CloseHandle(handle); }
224205
panic!("could not lock `{}`: {}", p.display(), err);
225206
}
226-
Lock { handle: handle }
207+
Lock { file: file }
227208
}
228209
}
229210

230211
impl Drop for Lock {
231212
fn drop(&mut self) {
232213
let mut overlapped: libc::OVERLAPPED = unsafe { mem::zeroed() };
233214
unsafe {
234-
UnlockFileEx(self.handle, 0, 100, 0, &mut overlapped);
235-
libc::CloseHandle(self.handle);
215+
UnlockFileEx(self.file.as_raw_handle() as libc::HANDLE,
216+
0, 100, 0, &mut overlapped);
236217
}
237218
}
238219
}

0 commit comments

Comments
 (0)