+mod wrappers;
mod commands;
mod key;
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;
impl std::error::Error for ErrnoError {}
+fn to_mut<T>(p: *const T) -> *mut T {
+ p as *mut T
+}
+
fn handle_c_command(args: Vec<String>, symlink_cmd: Option<&str>) -> i32 {
let mut argv: Vec<_> = args.clone();
.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 {
"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),
"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),
};