diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-03-25 14:09:16 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-03-25 16:37:26 -0400 |
commit | 18b4914587e4338ad04e9d4996a169b639ffe506 (patch) | |
tree | 14ef63561f6bf59eea8886a6fa0146ff6f98136d | |
parent | 8af5c93e488481d58f85364278e6037ce354eccc (diff) |
rust binding for parse_mount_opts()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | bch_bindgen/src/opts.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/bch_bindgen/src/opts.rs b/bch_bindgen/src/opts.rs index d38d469c..1ea927ff 100644 --- a/bch_bindgen/src/opts.rs +++ b/bch_bindgen/src/opts.rs @@ -1,3 +1,7 @@ +use crate::c; +use crate::fs::Fs; +use std::ffi::{CString, c_char}; + #[macro_export] macro_rules! opt_set { ($opts:ident, $n:ident, $v:expr) => { @@ -33,3 +37,29 @@ macro_rules! opt_get { } }; } + +pub fn parse_mount_opts(fs: Option<&mut Fs>, optstr: Option<&str>, ignore_unknown: bool) + -> Result<c::bch_opts, c::bch_errcode> { + let mut opts: c::bch_opts = Default::default(); + + if let Some(optstr) = optstr { + let optstr = CString::new(optstr).unwrap(); + let optstr_ptr = optstr.as_ptr(); + + let ret = unsafe { + c::bch2_parse_mount_opts(fs.map_or(std::ptr::null_mut(), |f| f.raw), + &mut opts as *mut c::bch_opts, + std::ptr::null_mut(), + optstr_ptr as *mut c_char, + ignore_unknown) + }; + + drop(optstr); + + if ret != 0 { + let err: c::bch_errcode = unsafe { std::mem::transmute(-ret) }; + return Err(err); + } + } + Ok(opts) +} |