summaryrefslogtreecommitdiff
path: root/rust-src/bch_bindgen/src/rs.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust-src/bch_bindgen/src/rs.rs')
-rw-r--r--rust-src/bch_bindgen/src/rs.rs60
1 files changed, 20 insertions, 40 deletions
diff --git a/rust-src/bch_bindgen/src/rs.rs b/rust-src/bch_bindgen/src/rs.rs
index 4f5dbcc0..17610f3a 100644
--- a/rust-src/bch_bindgen/src/rs.rs
+++ b/rust-src/bch_bindgen/src/rs.rs
@@ -1,57 +1,37 @@
+use anyhow::anyhow;
use crate::bcachefs;
-use crate::{error, info};
-use colored::Colorize;
-
-pub const SUPERBLOCK_MAGIC: uuid::Uuid =
- uuid::Uuid::from_u128(0x_c68573f6_4e1a_45ca_8265_f57f48ba6d81);
-
-extern "C" {
- pub static stdout: *mut libc::FILE;
-}
-
-pub enum ReadSuperErr {
- Io(std::io::Error),
+use crate::bcachefs::*;
+use std::ffi::CStr;
+use std::fmt;
+
+impl fmt::Display for bch_errcode {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ let s = unsafe { CStr::from_ptr(bch2_err_str(*self as i32)) };
+ write!(f, "{:?}", s)
+ }
}
-type RResult<T> = std::io::Result<std::io::Result<T>>;
-
pub fn read_super_opts(
path: &std::path::Path,
- mut opts: bcachefs::bch_opts,
-) -> RResult<bcachefs::bch_sb_handle> {
+ mut opts: bch_opts,
+) -> anyhow::Result<bch_sb_handle> {
use std::os::unix::ffi::OsStrExt;
- let path = std::ffi::CString::new(path.as_os_str().as_bytes())?;
+ let path = std::ffi::CString::new(path.as_os_str().as_bytes()).unwrap();
let mut sb = std::mem::MaybeUninit::zeroed();
let ret =
unsafe { crate::bcachefs::bch2_read_super(path.as_ptr(), &mut opts, sb.as_mut_ptr()) };
- println!("{}", ret);
- info!("something");
- error!("an error");
- String::from("something").bright_black();
- match -ret {
- libc::EACCES => Err(std::io::Error::new(
- std::io::ErrorKind::PermissionDenied,
- "Access Permission Denied",
- )),
- 0 => Ok(Ok(unsafe { sb.assume_init() })),
- 22 => Ok(Err(std::io::Error::new(
- std::io::ErrorKind::InvalidData,
- "Not a BCacheFS SuperBlock",
- ))),
- code => {
- println!("BCacheFS return error code: {}", code);
- Ok(Err(std::io::Error::new(
- std::io::ErrorKind::Other,
- "Failed to Read SuperBlock",
- )))
- }
+ if ret != 0 {
+ let err: bch_errcode = unsafe { ::std::mem::transmute(ret) };
+ Err(anyhow!(err))
+ } else {
+ Ok(unsafe { sb.assume_init() })
}
}
-pub fn read_super(path: &std::path::Path) -> RResult<bcachefs::bch_sb_handle> {
- let opts = bcachefs::bch_opts::default(); //unsafe {std::mem::MaybeUninit::zeroed().assume_init()};
+pub fn read_super(path: &std::path::Path) -> anyhow::Result<bch_sb_handle> {
+ let opts = bcachefs::bch_opts::default();
read_super_opts(path, opts)
}