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);          }      }  | 
