From 18b4914587e4338ad04e9d4996a169b639ffe506 Mon Sep 17 00:00:00 2001 From: Kent Overstreet <kent.overstreet@linux.dev> Date: Tue, 25 Mar 2025 14:09:16 -0400 Subject: [PATCH] rust binding for parse_mount_opts() Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev> --- bch_bindgen/src/opts.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) 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) +}