summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/commands/mod.rs24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/commands/mod.rs b/src/commands/mod.rs
index 07c25966..e873a46d 100644
--- a/src/commands/mod.rs
+++ b/src/commands/mod.rs
@@ -27,13 +27,27 @@ enum Subcommands {
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) => {
- unsafe {
- std::ffi::CStr::from_ptr(concat!($lit, "\0").as_ptr() as *const std::os::raw::c_char)
- .to_bytes_with_nul()
- .as_ptr() as *const std::os::raw::c_char
- }
+ ::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()
+ );
+ }
+}