summary refs log tree commit diff
path: root/gnu/packages/patches
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches')
-rw-r--r--gnu/packages/patches/rust-trash-2-update-windows.patch132
1 files changed, 132 insertions, 0 deletions
diff --git a/gnu/packages/patches/rust-trash-2-update-windows.patch b/gnu/packages/patches/rust-trash-2-update-windows.patch
new file mode 100644
index 0000000000..f6b13a4658
--- /dev/null
+++ b/gnu/packages/patches/rust-trash-2-update-windows.patch
@@ -0,0 +1,132 @@
+This patch is taken from upstream so we can use an already packaged
+version of the windows crate.
+
+diff --git a/Cargo.toml b/Cargo.toml
+index 2c28dfe..6b61771 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -87,9 +87,8 @@ version = "0.2.7"
+ version = "1.0.0"
+ 
+ [target."cfg(windows)".dependencies.windows]
+-version = "0.37.0"
++version = "0.44.0"
+ features = [
+-    "alloc",
+     "Win32_Foundation",
+     "Win32_System_Com_StructuredStorage",
+     "Win32_UI_Shell_PropertiesSystem",
+diff --git a/Cargo.toml.orig b/Cargo.toml.orig
+index 894a78c..c17fc02 100644
+--- a/Cargo.toml.orig
++++ b/Cargo.toml.orig
+@@ -44,7 +44,7 @@ once_cell = "1.7.2"
+ once_cell = "1.7.2"
+ 
+ [target.'cfg(windows)'.dependencies]
+-windows = { version = "0.37.0", features = [ "alloc",
++windows = { version = "0.44.0", features = [
+     "Win32_Foundation",
+     "Win32_System_Com_StructuredStorage",
+     "Win32_UI_Shell_PropertiesSystem",
+diff --git a/src/windows.rs b/src/windows.rs
+index c1379d3..3f4426b 100644
+--- a/src/windows.rs
++++ b/src/windows.rs
+@@ -1,7 +1,6 @@
+ use crate::{Error, TrashContext, TrashItem};
+ use std::{
+-    ffi::{OsStr, OsString},
+-    mem::MaybeUninit,
++    ffi::{c_void, OsStr, OsString},
+     os::windows::{ffi::OsStrExt, prelude::*},
+     path::PathBuf,
+ };
+@@ -66,7 +65,7 @@ impl TrashContext {
+                 let shi: IShellItem =
+                     SHCreateItemFromParsingName(PCWSTR(wide_path_slice.as_ptr()), None)?;
+ 
+-                pfo.DeleteItem(shi, None)?;
++                pfo.DeleteItem(&shi, None)?;
+             }
+             pfo.PerformOperations()?;
+             Ok(())
+@@ -78,28 +77,18 @@ pub fn list() -> Result<Vec<TrashItem>, Error> {
+     ensure_com_initialized();
+     unsafe {
+         let mut item_vec = Vec::new();
+-        let mut recycle_bin = MaybeUninit::<Option<IShellItem>>::uninit();
+ 
+-        SHGetKnownFolderItem(
+-            &FOLDERID_RecycleBinFolder,
+-            KF_FLAG_DEFAULT,
+-            HANDLE::default(),
+-            &IShellItem::IID,
+-            recycle_bin.as_mut_ptr() as _,
+-        )?;
+-
+-        let recycle_bin = recycle_bin.assume_init().ok_or(Error::Unknown {
+-            description: "SHGetKnownFolderItem gave NULL for FOLDERID_RecycleBinFolder".into(),
+-        })?;
++        let recycle_bin: IShellItem =
++            SHGetKnownFolderItem(&FOLDERID_RecycleBinFolder, KF_FLAG_DEFAULT, HANDLE::default())?;
+ 
+         let pesi: IEnumShellItems = recycle_bin.BindToHandler(None, &BHID_EnumItems)?;
+-        let mut fetched: u32 = 0;
+ 
+         loop {
++            let mut fetched_count: u32 = 0;
+             let mut arr = [None];
+-            pesi.Next(&mut arr, &mut fetched)?;
++            pesi.Next(&mut arr, Some(&mut fetched_count as *mut u32))?;
+ 
+-            if fetched == 0 {
++            if fetched_count == 0 {
+                 break;
+             }
+ 
+@@ -145,7 +134,7 @@ where
+             at_least_one = true;
+             let id_as_wide: Vec<u16> = item.id.encode_wide().chain(std::iter::once(0)).collect();
+             let parsing_name = PCWSTR(id_as_wide.as_ptr());
+-            let trash_item: IShellItem = SHCreateItemFromParsingName(&parsing_name, None)?;
++            let trash_item: IShellItem = SHCreateItemFromParsingName(parsing_name, None)?;
+             pfo.DeleteItem(&trash_item, None)?;
+         }
+         if at_least_one {
+@@ -181,7 +170,7 @@ where
+         for item in items.iter() {
+             let id_as_wide: Vec<u16> = item.id.encode_wide().chain(std::iter::once(0)).collect();
+             let parsing_name = PCWSTR(id_as_wide.as_ptr());
+-            let trash_item: IShellItem = SHCreateItemFromParsingName(&parsing_name, None)?;
++            let trash_item: IShellItem = SHCreateItemFromParsingName(parsing_name, None)?;
+             let parent_path_wide: Vec<_> =
+                 item.original_parent.as_os_str().encode_wide().chain(std::iter::once(0)).collect();
+             let orig_folder_shi: IShellItem =
+@@ -191,7 +180,7 @@ where
+                 .chain(std::iter::once(0))
+                 .collect();
+ 
+-            pfo.MoveItem(trash_item, orig_folder_shi, PCWSTR(name_wstr.as_ptr()), None)?;
++            pfo.MoveItem(&trash_item, &orig_folder_shi, PCWSTR(name_wstr.as_ptr()), None)?;
+         }
+         if !items.is_empty() {
+             pfo.PerformOperations()?;
+@@ -203,7 +192,7 @@ where
+ unsafe fn get_display_name(psi: &IShellItem, sigdnname: SIGDN) -> Result<OsString, Error> {
+     let name = psi.GetDisplayName(sigdnname)?;
+     let result = wstr_to_os_string(name);
+-    CoTaskMemFree(name.0 as _);
++    CoTaskMemFree(Some(name.0 as *const c_void));
+     Ok(result)
+ }
+ 
+@@ -257,7 +246,7 @@ impl CoInitializer {
+         if cfg!(feature = "coinit_speed_over_memory") {
+             init_mode |= COINIT_SPEED_OVER_MEMORY;
+         }
+-        let hr = unsafe { CoInitializeEx(std::ptr::null_mut(), init_mode) };
++        let hr = unsafe { CoInitializeEx(None, init_mode) };
+         if hr.is_err() {
+             panic!("Call to CoInitializeEx failed. HRESULT: {:?}. Consider using `trash` with the feature `coinit_multithreaded`", hr);
+         }