diff options
author | Vika <vika@fireburn.ru> | 2024-10-22 21:52:10 +0300 |
---|---|---|
committer | Vika <vika@fireburn.ru> | 2024-10-22 21:52:10 +0300 |
commit | f2f7b6ffec7bf657966353c850d25c6ab218ff7c (patch) | |
tree | d4d5cc76474453863a064eb04d75af5353579f5b /src | |
parent | 3bd499a9d696a850a493bf81c01c68aee18c9d7b (diff) | |
download | bowl-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.rs | 31 |
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() |