std: win: Disable stack overflow handling on UWP

The required functions are not available, so hope for the best
This commit is contained in:
Hugo Beauzée-Luyssen
2019-05-27 17:16:20 +02:00
parent 668f0d3495
commit e88a4cee52
3 changed files with 45 additions and 29 deletions

View File

@@ -256,10 +256,6 @@ pub const WAIT_OBJECT_0: DWORD = 0x00000000;
pub const WAIT_TIMEOUT: DWORD = 258; pub const WAIT_TIMEOUT: DWORD = 258;
pub const WAIT_FAILED: DWORD = 0xFFFFFFFF; pub const WAIT_FAILED: DWORD = 0xFFFFFFFF;
pub const EXCEPTION_CONTINUE_SEARCH: LONG = 0;
pub const EXCEPTION_STACK_OVERFLOW: DWORD = 0xc00000fd;
pub const EXCEPTION_MAXIMUM_PARAMETERS: usize = 15;
pub const PIPE_ACCESS_INBOUND: DWORD = 0x00000001; pub const PIPE_ACCESS_INBOUND: DWORD = 0x00000001;
pub const PIPE_ACCESS_OUTBOUND: DWORD = 0x00000002; pub const PIPE_ACCESS_OUTBOUND: DWORD = 0x00000002;
pub const FILE_FLAG_FIRST_PIPE_INSTANCE: DWORD = 0x00080000; pub const FILE_FLAG_FIRST_PIPE_INSTANCE: DWORD = 0x00080000;
@@ -444,25 +440,6 @@ pub struct REPARSE_MOUNTPOINT_DATA_BUFFER {
pub ReparseTarget: WCHAR, pub ReparseTarget: WCHAR,
} }
#[repr(C)]
pub struct EXCEPTION_RECORD {
pub ExceptionCode: DWORD,
pub ExceptionFlags: DWORD,
pub ExceptionRecord: *mut EXCEPTION_RECORD,
pub ExceptionAddress: LPVOID,
pub NumberParameters: DWORD,
pub ExceptionInformation: [LPVOID; EXCEPTION_MAXIMUM_PARAMETERS]
}
#[repr(C)]
pub struct EXCEPTION_POINTERS {
pub ExceptionRecord: *mut EXCEPTION_RECORD,
pub ContextRecord: *mut CONTEXT,
}
pub type PVECTORED_EXCEPTION_HANDLER = extern "system"
fn(ExceptionInfo: *mut EXCEPTION_POINTERS) -> LONG;
#[repr(C)] #[repr(C)]
pub struct GUID { pub struct GUID {
pub Data1: DWORD, pub Data1: DWORD,
@@ -545,8 +522,6 @@ pub enum ADDRESS_MODE {
AddrModeFlat, AddrModeFlat,
} }
pub enum CONTEXT {}
#[repr(C)] #[repr(C)]
pub struct SOCKADDR_STORAGE_LH { pub struct SOCKADDR_STORAGE_LH {
pub ss_family: ADDRESS_FAMILY, pub ss_family: ADDRESS_FAMILY,
@@ -631,6 +606,31 @@ pub struct timeval {
// Functions forbidden when targeting UWP // Functions forbidden when targeting UWP
cfg_if::cfg_if! { cfg_if::cfg_if! {
if #[cfg(not(target_vendor = "uwp"))] { if #[cfg(not(target_vendor = "uwp"))] {
pub const EXCEPTION_CONTINUE_SEARCH: LONG = 0;
pub const EXCEPTION_STACK_OVERFLOW: DWORD = 0xc00000fd;
pub const EXCEPTION_MAXIMUM_PARAMETERS: usize = 15;
#[repr(C)]
pub struct EXCEPTION_RECORD {
pub ExceptionCode: DWORD,
pub ExceptionFlags: DWORD,
pub ExceptionRecord: *mut EXCEPTION_RECORD,
pub ExceptionAddress: LPVOID,
pub NumberParameters: DWORD,
pub ExceptionInformation: [LPVOID; EXCEPTION_MAXIMUM_PARAMETERS]
}
pub enum CONTEXT {}
#[repr(C)]
pub struct EXCEPTION_POINTERS {
pub ExceptionRecord: *mut EXCEPTION_RECORD,
pub ContextRecord: *mut CONTEXT,
}
pub type PVECTORED_EXCEPTION_HANDLER = extern "system"
fn(ExceptionInfo: *mut EXCEPTION_POINTERS) -> LONG;
#[repr(C)] #[repr(C)]
#[derive(Copy, Clone)] #[derive(Copy, Clone)]
pub struct CONSOLE_READCONSOLE_CONTROL { pub struct CONSOLE_READCONSOLE_CONTROL {
@@ -694,6 +694,9 @@ if #[cfg(not(target_vendor = "uwp"))] {
pub fn SetHandleInformation(hObject: HANDLE, pub fn SetHandleInformation(hObject: HANDLE,
dwMask: DWORD, dwMask: DWORD,
dwFlags: DWORD) -> BOOL; dwFlags: DWORD) -> BOOL;
pub fn AddVectoredExceptionHandler(FirstHandler: ULONG,
VectoredHandler: PVECTORED_EXCEPTION_HANDLER)
-> LPVOID;
pub fn CreateHardLinkW(lpSymlinkFileName: LPCWSTR, pub fn CreateHardLinkW(lpSymlinkFileName: LPCWSTR,
lpTargetFileName: LPCWSTR, lpTargetFileName: LPCWSTR,
lpSecurityAttributes: LPSECURITY_ATTRIBUTES) lpSecurityAttributes: LPSECURITY_ATTRIBUTES)
@@ -804,9 +807,6 @@ extern "system" {
lpData: LPVOID, lpData: LPVOID,
pbCancel: LPBOOL, pbCancel: LPBOOL,
dwCopyFlags: DWORD) -> BOOL; dwCopyFlags: DWORD) -> BOOL;
pub fn AddVectoredExceptionHandler(FirstHandler: ULONG,
VectoredHandler: PVECTORED_EXCEPTION_HANDLER)
-> LPVOID;
pub fn FormatMessageW(flags: DWORD, pub fn FormatMessageW(flags: DWORD,
lpSrc: LPVOID, lpSrc: LPVOID,
msgId: DWORD, msgId: DWORD,
@@ -1015,6 +1015,7 @@ compat_fn! {
_dwFlags: DWORD) -> DWORD { _dwFlags: DWORD) -> DWORD {
SetLastError(ERROR_CALL_NOT_IMPLEMENTED as DWORD); 0 SetLastError(ERROR_CALL_NOT_IMPLEMENTED as DWORD); 0
} }
#[cfg(not(target_vendor = "uwp"))]
pub fn SetThreadStackGuarantee(_size: *mut c_ulong) -> BOOL { pub fn SetThreadStackGuarantee(_size: *mut c_ulong) -> BOOL {
SetLastError(ERROR_CALL_NOT_IMPLEMENTED as DWORD); 0 SetLastError(ERROR_CALL_NOT_IMPLEMENTED as DWORD); 0
} }

View File

@@ -33,16 +33,18 @@ pub mod pipe;
pub mod process; pub mod process;
pub mod rand; pub mod rand;
pub mod rwlock; pub mod rwlock;
pub mod stack_overflow;
pub mod thread; pub mod thread;
pub mod thread_local; pub mod thread_local;
pub mod time; pub mod time;
cfg_if::cfg_if! { cfg_if::cfg_if! {
if #[cfg(not(target_vendor = "uwp"))] { if #[cfg(not(target_vendor = "uwp"))] {
pub mod stdio; pub mod stdio;
pub mod stack_overflow;
} else { } else {
pub mod stdio_uwp; pub mod stdio_uwp;
pub mod stack_overflow_uwp;
pub use self::stdio_uwp as stdio; pub use self::stdio_uwp as stdio;
pub use self::stack_overflow_uwp as stack_overflow;
} }
} }

View File

@@ -0,0 +1,13 @@
#![cfg_attr(test, allow(dead_code))]
pub struct Handler;
impl Handler {
pub fn new() -> Handler {
Handler
}
}
pub unsafe fn init() {}
pub unsafe fn cleanup() {}