diff --git a/src/windows.rs b/src/windows.rs index fcf02ec..ba927d4 100644 --- a/src/windows.rs +++ b/src/windows.rs @@ -22,11 +22,11 @@ pub fn enable_ansi_support() -> Result<(), u32> { const ENABLE_VIRTUAL_TERMINAL_PROCESSING: u32 = 0x0004; - unsafe { + // ref: https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew // Using `CreateFileW("CONOUT$", ...)` to retrieve the console handle works correctly even if STDOUT and/or STDERR are redirected let console_out_name: Vec = OsStr::new("CONOUT$").encode_wide().chain(once(0)).collect(); - let console_handle = CreateFileW( + let console_handle = unsafe { CreateFileW( console_out_name.as_ptr(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE, @@ -34,28 +34,28 @@ pub fn enable_ansi_support() -> Result<(), u32> { OPEN_EXISTING, 0, null_mut(), - ); + ) }; if console_handle == INVALID_HANDLE_VALUE { - return Err(GetLastError()); + return Err(unsafe { GetLastError() }); } // ref: https://docs.microsoft.com/en-us/windows/console/getconsolemode let mut console_mode: u32 = 0; - if 0 == GetConsoleMode(console_handle, &mut console_mode) + if 0 == unsafe { GetConsoleMode(console_handle, &mut console_mode) } { - return Err(GetLastError()); + return Err(unsafe { GetLastError() }); } // VT processing not already enabled? if console_mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING == 0 { // https://docs.microsoft.com/en-us/windows/console/setconsolemode - if 0 == SetConsoleMode(console_handle, console_mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING) + if 0 == unsafe { SetConsoleMode(console_handle, console_mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING) } { - return Err(GetLastError()); + return Err(unsafe { GetLastError() }); } } - } + return Ok(()); }