From 3d972489a827f5d4cb30785eb52bc7fde6b83297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BChlbacher?= <tmuehlbacher@posteo.net> Date: Fri, 21 Mar 2025 16:33:59 +0000 Subject: [PATCH] fix(key): replace c_str macro with `c""` literal According to the MSRV in Cargo.toml, we can use this now. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev> --- src/commands/mod.rs | 25 ------------------------- src/key.rs | 15 ++++++++------- 2 files changed, 8 insertions(+), 32 deletions(-) diff --git a/src/commands/mod.rs b/src/commands/mod.rs index 7f466f92..fd15bb38 100644 --- a/src/commands/mod.rs +++ b/src/commands/mod.rs @@ -25,28 +25,3 @@ enum Subcommands { #[command(visible_aliases = ["subvol"])] Subvolume(subvolume::Cli), } - -// FIXME: Can be removed after bumping MSRV >= 1.77 in favor of `c""` literals -#[macro_export] -macro_rules! c_str { - ($lit:expr) => { - ::std::ffi::CStr::from_bytes_with_nul(concat!($lit, "\0").as_bytes()) - .unwrap() - .as_ptr() - }; -} - -#[cfg(test)] -mod tests { - use std::ffi::CStr; - - #[test] - fn check_cstr_macro() { - let literal = c_str!("hello"); - - assert_eq!( - literal, - CStr::from_bytes_with_nul(b"hello\0").unwrap().as_ptr() - ); - } -} diff --git a/src/key.rs b/src/key.rs index 0043095c..8cf4f124 100644 --- a/src/key.rs +++ b/src/key.rs @@ -4,10 +4,11 @@ use std::{ io::{stdin, IsTerminal}, mem, path::Path, + process::{Command, Stdio}, ptr, thread, time::Duration, }; -use std::process::{Command, Stdio}; + use anyhow::{anyhow, ensure, Result}; use bch_bindgen::{ bcachefs::{self, bch_key, bch_sb_handle}, @@ -19,7 +20,7 @@ use rustix::termios; use uuid::Uuid; use zeroize::{ZeroizeOnDrop, Zeroizing}; -use crate::{c_str, ErrnoError}; +use crate::ErrnoError; const BCH_KEY_MAGIC: &[u8; 8] = b"bch**key"; @@ -72,13 +73,13 @@ impl KeyHandle { pub fn new(sb: &bch_sb_handle, passphrase: &Passphrase) -> Result<Self> { let key_name = Self::format_key_name(&sb.sb().uuid()); let key_name = CStr::as_ptr(&key_name); - let key_type = c_str!("user"); + let key_type = c"user"; let (passphrase_key, _sb_key) = passphrase.check(sb)?; let key_id = unsafe { keyutils::add_key( - key_type, + key_type.as_ptr(), key_name, ptr::addr_of!(passphrase_key).cast(), mem::size_of_val(&passphrase_key), @@ -99,9 +100,9 @@ impl KeyHandle { fn search_keyring(keyring: i32, key_name: &CStr) -> Result<c_long> { let key_name = CStr::as_ptr(key_name); - let key_type = c_str!("user"); + let key_type = c"user"; - let key_id = unsafe { keyctl_search(keyring, key_type, key_name, 0) }; + let key_id = unsafe { keyctl_search(keyring, key_type.as_ptr(), key_name, 0) }; if key_id > 0 { info!("Found key in keyring"); @@ -165,7 +166,7 @@ impl Passphrase { Ok(if output.status.success() { match CString::new(output.stdout) { Ok(cstr) => Ok(Self(cstr)), - Err(e) => Err(e.into()) + Err(e) => Err(e.into()), } } else { Err(anyhow!("systemd-ask-password returned an error"))