diff options
-rw-r--r-- | src/devices/file.rs | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/src/devices/file.rs b/src/devices/file.rs index 236f9d1..234da7c 100644 --- a/src/devices/file.rs +++ b/src/devices/file.rs @@ -24,6 +24,7 @@ pub struct FileDevice { /// The path to which the file device is confined. Files and directories /// outside of this directory cannot be accessed. pub base_path: PathBuf, + pub default_path: PathBuf, pub open_buffer: CircularPathBuffer, pub move_buffer: CircularPathBuffer, @@ -34,13 +35,22 @@ pub struct FileDevice { pub move_success: bool, pub new_pointer: u32, pub new_length: u32, + + pub enable_create: bool, + pub enable_move: bool, + pub enable_delete: bool, + pub enable_read: bool, + pub enable_write: bool, } impl FileDevice { pub fn new() -> Self { Self { - base_path: PathBuf::from("/home/ben/Sandbox"), - + base_path: PathBuf::from("/"), + default_path: match std::env::current_dir() { + Ok(dir) => PathBuf::from(dir), + Err(_) => PathBuf::from("/"), + }, open_buffer: CircularPathBuffer::new(), move_buffer: CircularPathBuffer::new(), name_buffer: CircularPathBuffer::new(), @@ -50,6 +60,12 @@ impl FileDevice { move_success: false, new_pointer: 0, new_length: 0, + + enable_create: true, + enable_move: true, + enable_delete: false, + enable_read: true, + enable_write: true, } } @@ -74,7 +90,6 @@ impl FileDevice { self.close_entry(); if !is_blank_path(&relative_path) { if let Ok(path) = self.attach_base(&relative_path) { - println!("Attempting to open entry at: {path:?}"); let _ = self.open_entry(&path); }; } @@ -93,7 +108,11 @@ impl FileDevice { if !path.starts_with(&self.base_path) { return Err(()); } let metadata = raise_on_err!(metadata(&path)); if metadata.is_file() { - if let Ok(file) = OpenOptions::new().read(true).write(true).open(&path) { + let open_result = OpenOptions::new() + .read(self.enable_read) + .write(self.enable_write) + .open(&path); + if let Ok(file) = open_result { self.close_entry(); let file_entry = Entry::File(BufferedFile::new(file)); self.entry = Some((file_entry, path.to_owned())); @@ -117,18 +136,24 @@ impl FileDevice { if let Some(dest) = self.move_buffer.push_byte(byte) { if let Some((_, source)) = &self.entry { if is_blank_path(&dest) { - eprintln!("Attempting to delete entry at: {source:?}"); - self.move_success = delete_entry(&source); + match self.enable_delete { + true => self.move_success = delete_entry(&source), + false => self.move_success = false, + } } else if let Ok(destination) = self.attach_base(&dest) { - eprintln!("Attempting to move entry to: {destination:?}"); - self.move_success = move_entry(&source, &destination); + match self.enable_move { + true => self.move_success = move_entry(&source, &destination), + false => self.move_success = false, + } } } else { if is_blank_path(&dest) { self.move_success = false; } else if let Ok(destination) = self.attach_base(&dest) { - eprintln!("Attempting to create entry at: {destination:?}"); - self.move_success = create_file(&destination); + match self.enable_create { + true => self.move_success = create_file(&destination), + false => self.move_success = false, + } } } self.close_entry(); @@ -142,6 +167,9 @@ impl FileDevice { let path = parent_path.to_owned(); let _ = self.open_entry(&path); } + } else { + let default_path = self.default_path.to_owned(); + let _ = self.open_entry(&default_path); } } |