From ac96ddaecb400778a55305e98d8ef34000fcac60 Mon Sep 17 00:00:00 2001 From: fufesou Date: Thu, 18 May 2023 21:57:18 +0800 Subject: [PATCH] windows, fix display name comparation Signed-off-by: fufesou --- src/platform/windows.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/platform/windows.rs b/src/platform/windows.rs index dd91a5c25..46f92d511 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1890,6 +1890,17 @@ pub fn current_resolution(name: &str) -> ResultType { } } +#[inline] +fn is_device_name(device_name: &str, name: &str) -> bool { + if name.len() == device_name.len() { + name == device_name + } else if name.len() > device_name.len() { + false + } else { + &device_name[..name.len()] == name && device_name.as_bytes()[name.len() as usize] == 0 + } +} + pub fn is_virtual_display(name: &str) -> ResultType { let mut dd: DISPLAY_DEVICEW = unsafe { std::mem::zeroed() }; dd.cb = std::mem::size_of::() as DWORD; @@ -1900,7 +1911,7 @@ pub fn is_virtual_display(name: &str) -> ResultType { break; } if let Ok(device_name) = String::from_utf16(&dd.DeviceName) { - if device_name == name { + if is_device_name(&device_name, name) { return match std::string::String::from_utf16(&dd.DeviceString) { Ok(s) => Ok(&s[..IDD_DEVICE_STRING.len()] == IDD_DEVICE_STRING), Err(e) => bail!("convert the device string of '{}' to string: {}", name, e),