Skip to content

Commit ab89afa

Browse files
committed
Switch from the winapi crate to windows-sys
fixes #114
1 parent 7eb4569 commit ab89afa

File tree

2 files changed

+27
-17
lines changed

2 files changed

+27
-17
lines changed

Cargo.toml

+10-1
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,17 @@ appveyor = { repository = "Stebalien/term" }
2323
home = "0.5.4"
2424

2525
[target.'cfg(windows)'.dependencies]
26-
winapi = { version = "0.3", features = ["consoleapi", "wincon", "handleapi", "fileapi"] }
2726
rustversion = "1"
2827

28+
29+
[target.'cfg(windows)'.dependencies.windows-sys]
30+
version = "0.52.0"
31+
features = [
32+
"Win32_Storage",
33+
"Win32_System_Console",
34+
"Win32_Storage_FileSystem",
35+
"Win32_Security",
36+
]
37+
2938
[features]
3039
default=[]

src/win.rs

+17-16
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,23 @@ use crate::Attr;
1717
use crate::Error;
1818
use crate::Result;
1919
use crate::Terminal;
20+
2021
use std::io;
2122
use std::io::prelude::*;
2223
use std::ops::Deref;
2324
use std::ptr;
2425

25-
use winapi::shared::minwindef::{DWORD, WORD};
26-
use winapi::um::consoleapi::{GetConsoleMode, SetConsoleMode};
27-
use winapi::um::fileapi::{CreateFileA, OPEN_EXISTING};
28-
use winapi::um::handleapi::{CloseHandle, INVALID_HANDLE_VALUE};
29-
use winapi::um::wincon::FillConsoleOutputAttribute;
30-
use winapi::um::wincon::{
31-
FillConsoleOutputCharacterW, GetConsoleScreenBufferInfo, CONSOLE_SCREEN_BUFFER_INFO, COORD,
26+
use windows_sys::core::PCSTR;
27+
use windows_sys::Win32::Foundation::{
28+
CloseHandle, GENERIC_READ, GENERIC_WRITE, HANDLE, INVALID_HANDLE_VALUE,
29+
};
30+
use windows_sys::Win32::Storage::FileSystem::{CreateFileA, FILE_SHARE_WRITE, OPEN_EXISTING};
31+
use windows_sys::Win32::System::Console::{
32+
FillConsoleOutputAttribute, FillConsoleOutputCharacterW, GetConsoleMode,
33+
GetConsoleScreenBufferInfo, SetConsoleCursorPosition, SetConsoleMode, SetConsoleTextAttribute,
34+
BACKGROUND_INTENSITY, CONSOLE_CHARACTER_ATTRIBUTES, CONSOLE_MODE, CONSOLE_SCREEN_BUFFER_INFO,
35+
COORD, ENABLE_VIRTUAL_TERMINAL_PROCESSING,
3236
};
33-
use winapi::um::wincon::{SetConsoleCursorPosition, SetConsoleTextAttribute};
34-
use winapi::um::wincon::{BACKGROUND_INTENSITY, ENABLE_VIRTUAL_TERMINAL_PROCESSING};
35-
use winapi::um::winnt::{FILE_SHARE_WRITE, GENERIC_READ, GENERIC_WRITE, HANDLE};
3637

3738
/// Console info which can be used by a Terminal implementation
3839
/// which uses the Win32 Console API.
@@ -122,13 +123,13 @@ fn conout() -> io::Result<HandleWrapper> {
122123
let name = b"CONOUT$\0";
123124
let handle = unsafe {
124125
CreateFileA(
125-
name.as_ptr() as *const i8,
126+
name.as_ptr() as PCSTR,
126127
GENERIC_READ | GENERIC_WRITE,
127128
FILE_SHARE_WRITE,
128129
ptr::null_mut(),
129130
OPEN_EXISTING,
130131
0,
131-
ptr::null_mut(),
132+
0,
132133
)
133134
};
134135
if handle == INVALID_HANDLE_VALUE {
@@ -138,8 +139,8 @@ fn conout() -> io::Result<HandleWrapper> {
138139
}
139140
}
140141

141-
unsafe fn set_flag(handle: HANDLE, flag: DWORD) -> io::Result<()> {
142-
let mut curr_mode: DWORD = 0;
142+
unsafe fn set_flag(handle: HANDLE, flag: CONSOLE_MODE) -> io::Result<()> {
143+
let mut curr_mode: CONSOLE_MODE = 0;
143144
if GetConsoleMode(handle, &mut curr_mode) == 0 {
144145
return Err(io::Error::last_os_error());
145146
}
@@ -231,7 +232,7 @@ impl<T: Write + Send> WinConsole<T> {
231232
fg = bg;
232233
}
233234

234-
let mut accum: WORD = 0;
235+
let mut accum: CONSOLE_CHARACTER_ATTRIBUTES = 0;
235236

236237
accum |= color_to_bits(fg);
237238
accum |= color_to_bits(bg) << 4;
@@ -382,7 +383,7 @@ impl<T: Write + Send> Terminal for WinConsole<T> {
382383
let buffer_info = get_console_screen_buffer_info(*handle)?;
383384
let pos = buffer_info.dwCursorPosition;
384385
let size = buffer_info.dwSize;
385-
let num = (size.X - pos.X) as DWORD;
386+
let num = (size.X - pos.X) as u32;
386387
let mut written = 0;
387388
// 0x0020u16 is ' ' (space) in UTF-16 (same as ascii)
388389
if FillConsoleOutputCharacterW(*handle, 0x0020, num, pos, &mut written) == 0 {

0 commit comments

Comments
 (0)