X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fbcachefs.rs;h=ef38a66be729f78e3dd749251d3dc4f8b82f112a;hb=HEAD;hp=95f5e1f0552dfcc1d0477a239ac65455ac129c7b;hpb=f5baaf48e3e82b1caf9f5cd1207d4d6feba3a2e5;p=bcachefs-tools-debian diff --git a/src/bcachefs.rs b/src/bcachefs.rs index 95f5e1f..ef38a66 100644 --- a/src/bcachefs.rs +++ b/src/bcachefs.rs @@ -1,3 +1,4 @@ +mod wrappers; mod commands; mod key; @@ -6,6 +7,7 @@ use std::ffi::CString; use commands::cmd_completions::cmd_completions; use commands::cmd_list::cmd_list; use commands::cmd_mount::cmd_mount; +use commands::cmd_subvolume::cmd_subvolumes; use commands::logger::SimpleLogger; use bch_bindgen::c; @@ -19,6 +21,10 @@ impl std::fmt::Display for ErrnoError { impl std::error::Error for ErrnoError {} +fn to_mut(p: *const T) -> *mut T { + p as *mut T +} + fn handle_c_command(args: Vec, symlink_cmd: Option<&str>) -> i32 { let mut argv: Vec<_> = args.clone(); @@ -33,8 +39,8 @@ fn handle_c_command(args: Vec, symlink_cmd: Option<&str>) -> i32 { .iter() .map(|s| CString::new(s.as_str()).unwrap()) .collect(); - let argv: Vec<_> = argv.iter().map(|s| s.as_ptr()).collect(); - let argv = argv.as_ptr() as *mut *mut i8; + let mut argv: Vec<_> = argv.iter().map(|s| to_mut(s.as_ptr())).collect(); + let argv = argv.as_mut_ptr(); // The C functions will mutate argv. It shouldn't be used after this block. unsafe { @@ -60,7 +66,6 @@ fn handle_c_command(args: Vec, symlink_cmd: Option<&str>) -> i32 { "set-passphrase" => c::cmd_set_passphrase(argc, argv), "setattr" => c::cmd_setattr(argc, argv), "show-super" => c::cmd_show_super(argc, argv), - "subvolume" => c::subvolume_cmds(argc, argv), "unlock" => c::cmd_unlock(argc, argv), "version" => c::cmd_version(argc, argv), @@ -111,6 +116,7 @@ fn main() { "completions" => cmd_completions(args[1..].to_vec()), "list" => cmd_list(args[1..].to_vec()), "mount" => cmd_mount(args, symlink_cmd), + "subvolume" => cmd_subvolumes(args[1..].to_vec()), _ => handle_c_command(args, symlink_cmd), };