From 03ffa4b36c17f2b2d7942a02f7c6f4f789622b60 Mon Sep 17 00:00:00 2001 From: Kevin Mehall Date: Sat, 15 Feb 2025 14:47:30 -0700 Subject: [PATCH] Update windows-sys Co-authored-by: Erkki Silvola --- Cargo.toml | 2 +- src/platform/windows_winusb/device.rs | 12 ++++++++---- src/platform/windows_winusb/events.rs | 6 +++--- src/platform/windows_winusb/hotplug.rs | 4 ++-- src/platform/windows_winusb/util.rs | 4 ++-- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 202f35e..72f3d90 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,7 +26,7 @@ rustix = { version = "0.38.17", features = ["fs", "event", "net"] } libc = "0.2.155" [target.'cfg(target_os="windows")'.dependencies] -windows-sys = { version = "0.48.0", features = ["Win32_Devices_Usb", "Win32_Devices_DeviceAndDriverInstallation", "Win32_Foundation", "Win32_Devices_Properties", "Win32_Storage_FileSystem", "Win32_Security", "Win32_System_IO", "Win32_System_Registry", "Win32_System_Com"] } +windows-sys = { version = "0.59.0", features = ["Win32_Devices_Usb", "Win32_Devices_DeviceAndDriverInstallation", "Win32_Foundation", "Win32_Devices_Properties", "Win32_Storage_FileSystem", "Win32_Security", "Win32_System_IO", "Win32_System_Registry", "Win32_System_Com"] } [target.'cfg(target_os="macos")'.dependencies] core-foundation = "0.9.3" diff --git a/src/platform/windows_winusb/device.rs b/src/platform/windows_winusb/device.rs index 5549ee0..976e82e 100644 --- a/src/platform/windows_winusb/device.rs +++ b/src/platform/windows_winusb/device.rs @@ -7,7 +7,7 @@ use std::{ io::{AsRawHandle, RawHandle}, prelude::OwnedHandle, }, - ptr::null_mut, + ptr, sync::{Arc, Mutex}, time::Duration, }; @@ -244,13 +244,17 @@ pub(crate) struct WinusbFileHandle { claimed_interfaces: BitSet256, } +// SAFETY: WinUSB methods on the interface handle are thread-safe +unsafe impl Send for WinusbFileHandle {} +unsafe impl Sync for WinusbFileHandle {} + impl WinusbFileHandle { fn new(path: &WCStr, first_interface: u8) -> Result { let handle = create_file(&path)?; super::events::register(&handle)?; let winusb_handle = unsafe { - let mut h = 0; + let mut h = ptr::null_mut(); if WinUsb_Initialize(raw_handle(&handle), &mut h) == FALSE { error!("WinUsb_Initialize failed: {:?}", io::Error::last_os_error()); return Err(io::Error::last_os_error()); @@ -286,7 +290,7 @@ impl WinusbFileHandle { self.winusb_handle } else { unsafe { - let mut out_handle = 0; + let mut out_handle = ptr::null_mut(); let idx = interface_number - self.first_interface - 1; if WinUsb_GetAssociatedInterface(self.winusb_handle, idx, &mut out_handle) == FALSE { @@ -435,7 +439,7 @@ impl WindowsInterface { data, len.try_into().expect("request size too large"), &mut actual_len, - null_mut(), + ptr::null_mut(), ); if r == TRUE { diff --git a/src/platform/windows_winusb/events.rs b/src/platform/windows_winusb/events.rs index 2dee170..c7d66f6 100644 --- a/src/platform/windows_winusb/events.rs +++ b/src/platform/windows_winusb/events.rs @@ -5,7 +5,7 @@ use std::{ io::HandleOrNull, prelude::{OwnedHandle, RawHandle}, }, - thread, + ptr, thread, }; use windows_sys::Win32::{ Foundation::{GetLastError, FALSE, INVALID_HANDLE_VALUE}, @@ -21,7 +21,7 @@ struct IoCompletionPort(OwnedHandle); impl IoCompletionPort { fn new() -> Result { unsafe { - let port = CreateIoCompletionPort(INVALID_HANDLE_VALUE, 0, 0, 0); + let port = CreateIoCompletionPort(INVALID_HANDLE_VALUE, ptr::null_mut(), 0, 0); match HandleOrNull::from_raw_handle(port as RawHandle).try_into() { Ok(handle) => Ok(IoCompletionPort(handle)), Err(_) => { @@ -36,7 +36,7 @@ impl IoCompletionPort { fn register(&self, handle: &OwnedHandle) -> Result<(), Error> { unsafe { let r = CreateIoCompletionPort(raw_handle(handle), raw_handle(&self.0), 0, 0); - if r == 0 { + if r == ptr::null_mut() { let err = std::io::Error::last_os_error(); error!("CreateIoCompletionPort (register) failed: {err:?}"); Err(err) diff --git a/src/platform/windows_winusb/hotplug.rs b/src/platform/windows_winusb/hotplug.rs index a151c13..3a52843 100644 --- a/src/platform/windows_winusb/hotplug.rs +++ b/src/platform/windows_winusb/hotplug.rs @@ -3,7 +3,7 @@ use std::{ ffi::c_void, io::ErrorKind, mem::size_of, - ptr::addr_of, + ptr::{self, addr_of}, sync::Mutex, task::{Context, Poll}, }; @@ -57,7 +57,7 @@ impl WindowsHotplugWatch { waker: AtomicWaker::new(), })); - let mut registration = 0; + let mut registration = ptr::null_mut(); let filter = CM_NOTIFY_FILTER { cbSize: size_of::() as u32, Flags: 0, diff --git a/src/platform/windows_winusb/util.rs b/src/platform/windows_winusb/util.rs index f4b62d4..364c210 100644 --- a/src/platform/windows_winusb/util.rs +++ b/src/platform/windows_winusb/util.rs @@ -7,7 +7,7 @@ use std::{ os::windows::prelude::{ AsHandle, AsRawHandle, HandleOrInvalid, OsStrExt, OsStringExt, OwnedHandle, RawHandle, }, - ptr::null, + ptr::{self, null}, slice, }; @@ -28,7 +28,7 @@ pub fn create_file(path: &WCStr) -> Result { null(), OPEN_EXISTING, FILE_FLAG_OVERLAPPED, - 0, + ptr::null_mut(), ); HandleOrInvalid::from_raw_handle(r as RawHandle) .try_into()