summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorVika <vika@fireburn.ru>2024-10-22 21:52:10 +0300
committerVika <vika@fireburn.ru>2024-10-22 21:52:10 +0300
commitf2f7b6ffec7bf657966353c850d25c6ab218ff7c (patch)
treed4d5cc76474453863a064eb04d75af5353579f5b /src
parent3bd499a9d696a850a493bf81c01c68aee18c9d7b (diff)
downloadbowl-f2f7b6ffec7bf657966353c850d25c6ab218ff7c.tar.zst
vendor libsecret
The libsecret-rs crate is unmaintained, so I'm vendoring it for
now. Bumping the glib version turned out to be enough.

The exact process I used was:
1. Cloning the repository
2. Making changes
3. `cargo build` to ensure it works
4. `cargo package --no-verify` (b/c it tries to build all crates
separately instead of the entire workspace as a whole)
5. `mkdir libsecret/sys -p`
6. `tar --strip-components 1 -C libsecret -xvf ../libsecret-rs/target/package/libsecret-0.6.0.crate`
7. `tar --strip-components 1 -C libsecret/sys -xvf ../libsecret-rs/target/package/libsecret-sys-0.6.0.crate`

Then `Cargo.toml` is modified to ensure the libsecret and its `-sys`
crate build out of my vendored sources.

In the future, if I gain maintainership of the `libsecret` crate, I
could just revert this commit to make it point back to the upstream.
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs31
1 files changed, 2 insertions, 29 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 37b54a5..a644411 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -55,24 +55,7 @@ impl App {
             let mut attrs = std::collections::HashMap::default();
             attrs.insert(crate::secrets::TOKEN_KIND, crate::secrets::ACCESS_TOKEN);
             attrs
-        }, libsecret::SearchFlags::ALL).await
-            // SAFETY: the representation of `glib::Error` is the same, since we're
-            // building against the same C library, so while this is a safety crime, it's
-            // probably a minor one.
-            //
-            // Additionally I'm ensuring the original wrapper is forgotten in case it has
-            // a drop handler that decrements a reference counter or something.
-            //
-            // This is only a workaround for libsecret not being updated in time.
-            .map_err(|e| unsafe {
-                let ptr = e.as_ptr();
-                std::mem::forget(e);
-                glib::translate::from_glib_full::<_, glib::Error>(
-                    // We can't name the original type here.
-                    #[allow(clippy::missing_transmute_annotations)]
-                    std::mem::transmute::<_, *mut glib::ffi::GError>(ptr)
-                )
-            })?;
+        }, libsecret::SearchFlags::ALL).await?;
 
         if retrievables.is_empty() {
             Ok(None)
@@ -100,17 +83,7 @@ impl App {
                 let micropub = crate::micropub::Client::new(
                     http.clone(),
                     micropub_uri,
-                    retrievable.retrieve_secret_future().await
-                        // SAFETY: see above
-                        .map_err(|e| unsafe {
-                            let ptr = e.as_ptr();
-                            std::mem::forget(e);
-                            glib::translate::from_glib_full::<_, glib::Error>(
-                                // We can't name the original type here.
-                                #[allow(clippy::missing_transmute_annotations)]
-                                std::mem::transmute::<_, *mut glib::ffi::GError>(ptr)
-                            )
-                        })?
+                    retrievable.retrieve_secret_future().await?
                         .unwrap()
                         .text()
                         .unwrap()