diff options
Diffstat (limited to 'runtime/ops/fs.rs')
-rw-r--r-- | runtime/ops/fs.rs | 104 |
1 files changed, 54 insertions, 50 deletions
diff --git a/runtime/ops/fs.rs b/runtime/ops/fs.rs index a084fdb15..0753ea0fb 100644 --- a/runtime/ops/fs.rs +++ b/runtime/ops/fs.rs @@ -149,7 +149,7 @@ fn open_helper( let _ = mode; // avoid unused warning } - let permissions = state.borrow::<Permissions>(); + let permissions = state.borrow_mut::<Permissions>(); let options = args.options; if options.read { @@ -409,7 +409,7 @@ fn op_chdir( _zero_copy: Option<ZeroCopyBuf>, ) -> Result<(), AnyError> { let d = PathBuf::from(&directory); - state.borrow::<Permissions>().read.check(&d)?; + state.borrow_mut::<Permissions>().read.check(&d)?; set_current_dir(&d)?; Ok(()) } @@ -429,7 +429,7 @@ fn op_mkdir_sync( ) -> Result<(), AnyError> { let path = Path::new(&args.path).to_path_buf(); let mode = args.mode.unwrap_or(0o777) & 0o777; - state.borrow::<Permissions>().write.check(&path)?; + state.borrow_mut::<Permissions>().write.check(&path)?; debug!("op_mkdir {} {:o} {}", path.display(), mode, args.recursive); let mut builder = std::fs::DirBuilder::new(); builder.recursive(args.recursive); @@ -451,8 +451,8 @@ async fn op_mkdir_async( let mode = args.mode.unwrap_or(0o777) & 0o777; { - let state = state.borrow(); - state.borrow::<Permissions>().write.check(&path)?; + let mut state = state.borrow_mut(); + state.borrow_mut::<Permissions>().write.check(&path)?; } tokio::task::spawn_blocking(move || { @@ -486,7 +486,7 @@ fn op_chmod_sync( let path = Path::new(&args.path).to_path_buf(); let mode = args.mode & 0o777; - state.borrow::<Permissions>().write.check(&path)?; + state.borrow_mut::<Permissions>().write.check(&path)?; debug!("op_chmod_sync {} {:o}", path.display(), mode); #[cfg(unix)] { @@ -513,8 +513,8 @@ async fn op_chmod_async( let mode = args.mode & 0o777; { - let state = state.borrow(); - state.borrow::<Permissions>().write.check(&path)?; + let mut state = state.borrow_mut(); + state.borrow_mut::<Permissions>().write.check(&path)?; } tokio::task::spawn_blocking(move || { @@ -552,7 +552,7 @@ fn op_chown_sync( _zero_copy: Option<ZeroCopyBuf>, ) -> Result<(), AnyError> { let path = Path::new(&args.path).to_path_buf(); - state.borrow::<Permissions>().write.check(&path)?; + state.borrow_mut::<Permissions>().write.check(&path)?; debug!( "op_chown_sync {} {:?} {:?}", path.display(), @@ -582,8 +582,8 @@ async fn op_chown_async( let path = Path::new(&args.path).to_path_buf(); { - let state = state.borrow(); - state.borrow::<Permissions>().write.check(&path)?; + let mut state = state.borrow_mut(); + state.borrow_mut::<Permissions>().write.check(&path)?; } tokio::task::spawn_blocking(move || { @@ -624,7 +624,7 @@ fn op_remove_sync( let path = PathBuf::from(&args.path); let recursive = args.recursive; - state.borrow::<Permissions>().write.check(&path)?; + state.borrow_mut::<Permissions>().write.check(&path)?; #[cfg(not(unix))] use std::os::windows::prelude::MetadataExt; @@ -667,8 +667,8 @@ async fn op_remove_async( let recursive = args.recursive; { - let state = state.borrow(); - state.borrow::<Permissions>().write.check(&path)?; + let mut state = state.borrow_mut(); + state.borrow_mut::<Permissions>().write.check(&path)?; } tokio::task::spawn_blocking(move || { @@ -722,7 +722,7 @@ fn op_copy_file_sync( let from = PathBuf::from(&args.from); let to = PathBuf::from(&args.to); - let permissions = state.borrow::<Permissions>(); + let permissions = state.borrow_mut::<Permissions>(); permissions.read.check(&from)?; permissions.write.check(&to)?; @@ -748,8 +748,8 @@ async fn op_copy_file_async( let to = PathBuf::from(&args.to); { - let state = state.borrow(); - let permissions = state.borrow::<Permissions>(); + let mut state = state.borrow_mut(); + let permissions = state.borrow_mut::<Permissions>(); permissions.read.check(&from)?; permissions.write.check(&to)?; } @@ -861,7 +861,7 @@ fn op_stat_sync( ) -> Result<FsStat, AnyError> { let path = PathBuf::from(&args.path); let lstat = args.lstat; - state.borrow::<Permissions>().read.check(&path)?; + state.borrow_mut::<Permissions>().read.check(&path)?; debug!("op_stat_sync {} {}", path.display(), lstat); let metadata = if lstat { std::fs::symlink_metadata(&path)? @@ -880,8 +880,8 @@ async fn op_stat_async( let lstat = args.lstat; { - let state = state.borrow(); - state.borrow::<Permissions>().read.check(&path)?; + let mut state = state.borrow_mut(); + state.borrow_mut::<Permissions>().read.check(&path)?; } tokio::task::spawn_blocking(move || { @@ -904,7 +904,7 @@ fn op_realpath_sync( ) -> Result<String, AnyError> { let path = PathBuf::from(&path); - let permissions = state.borrow::<Permissions>(); + let permissions = state.borrow_mut::<Permissions>(); permissions.read.check(&path)?; if path.is_relative() { permissions.read.check_blind(¤t_dir()?, "CWD")?; @@ -926,8 +926,8 @@ async fn op_realpath_async( let path = PathBuf::from(&path); { - let state = state.borrow(); - let permissions = state.borrow::<Permissions>(); + let mut state = state.borrow_mut(); + let permissions = state.borrow_mut::<Permissions>(); permissions.read.check(&path)?; if path.is_relative() { permissions.read.check_blind(¤t_dir()?, "CWD")?; @@ -962,7 +962,7 @@ fn op_read_dir_sync( ) -> Result<Vec<DirEntry>, AnyError> { let path = PathBuf::from(&path); - state.borrow::<Permissions>().read.check(&path)?; + state.borrow_mut::<Permissions>().read.check(&path)?; debug!("op_read_dir_sync {}", path.display()); let entries: Vec<_> = std::fs::read_dir(path)? @@ -998,8 +998,8 @@ async fn op_read_dir_async( ) -> Result<Vec<DirEntry>, AnyError> { let path = PathBuf::from(&path); { - let state = state.borrow(); - state.borrow::<Permissions>().read.check(&path)?; + let mut state = state.borrow_mut(); + state.borrow_mut::<Permissions>().read.check(&path)?; } tokio::task::spawn_blocking(move || { debug!("op_read_dir_async {}", path.display()); @@ -1047,7 +1047,7 @@ fn op_rename_sync( let oldpath = PathBuf::from(&args.oldpath); let newpath = PathBuf::from(&args.newpath); - let permissions = state.borrow::<Permissions>(); + let permissions = state.borrow_mut::<Permissions>(); permissions.read.check(&oldpath)?; permissions.write.check(&oldpath)?; permissions.write.check(&newpath)?; @@ -1064,8 +1064,8 @@ async fn op_rename_async( let oldpath = PathBuf::from(&args.oldpath); let newpath = PathBuf::from(&args.newpath); { - let state = state.borrow(); - let permissions = state.borrow::<Permissions>(); + let mut state = state.borrow_mut(); + let permissions = state.borrow_mut::<Permissions>(); permissions.read.check(&oldpath)?; permissions.write.check(&oldpath)?; permissions.write.check(&newpath)?; @@ -1098,7 +1098,7 @@ fn op_link_sync( let oldpath = PathBuf::from(&args.oldpath); let newpath = PathBuf::from(&args.newpath); - let permissions = state.borrow::<Permissions>(); + let permissions = state.borrow_mut::<Permissions>(); permissions.read.check(&oldpath)?; permissions.write.check(&oldpath)?; permissions.read.check(&newpath)?; @@ -1118,8 +1118,8 @@ async fn op_link_async( let newpath = PathBuf::from(&args.newpath); { - let state = state.borrow(); - let permissions = state.borrow::<Permissions>(); + let mut state = state.borrow_mut(); + let permissions = state.borrow_mut::<Permissions>(); permissions.read.check(&oldpath)?; permissions.write.check(&oldpath)?; permissions.read.check(&newpath)?; @@ -1159,7 +1159,7 @@ fn op_symlink_sync( let oldpath = PathBuf::from(&args.oldpath); let newpath = PathBuf::from(&args.newpath); - state.borrow::<Permissions>().write.check(&newpath)?; + state.borrow_mut::<Permissions>().write.check(&newpath)?; debug!( "op_symlink_sync {} {}", @@ -1209,8 +1209,8 @@ async fn op_symlink_async( let newpath = PathBuf::from(&args.newpath); { - let state = state.borrow(); - state.borrow::<Permissions>().write.check(&newpath)?; + let mut state = state.borrow_mut(); + state.borrow_mut::<Permissions>().write.check(&newpath)?; } tokio::task::spawn_blocking(move || { @@ -1259,7 +1259,7 @@ fn op_read_link_sync( ) -> Result<String, AnyError> { let path = PathBuf::from(&path); - state.borrow::<Permissions>().read.check(&path)?; + state.borrow_mut::<Permissions>().read.check(&path)?; debug!("op_read_link_value {}", path.display()); let target = std::fs::read_link(&path)?.into_os_string(); @@ -1274,8 +1274,8 @@ async fn op_read_link_async( ) -> Result<String, AnyError> { let path = PathBuf::from(&path); { - let state = state.borrow(); - state.borrow::<Permissions>().read.check(&path)?; + let mut state = state.borrow_mut(); + state.borrow_mut::<Permissions>().read.check(&path)?; } tokio::task::spawn_blocking(move || { debug!("op_read_link_async {}", path.display()); @@ -1349,7 +1349,7 @@ fn op_truncate_sync( let path = PathBuf::from(&args.path); let len = args.len; - state.borrow::<Permissions>().write.check(&path)?; + state.borrow_mut::<Permissions>().write.check(&path)?; debug!("op_truncate_sync {} {}", path.display(), len); let f = std::fs::OpenOptions::new().write(true).open(&path)?; @@ -1365,8 +1365,8 @@ async fn op_truncate_async( let path = PathBuf::from(&args.path); let len = args.len; { - let state = state.borrow(); - state.borrow::<Permissions>().write.check(&path)?; + let mut state = state.borrow_mut(); + state.borrow_mut::<Permissions>().write.check(&path)?; } tokio::task::spawn_blocking(move || { debug!("op_truncate_async {} {}", path.display(), len); @@ -1441,7 +1441,7 @@ fn op_make_temp_dir_sync( let suffix = args.suffix.map(String::from); state - .borrow::<Permissions>() + .borrow_mut::<Permissions>() .write .check(dir.clone().unwrap_or_else(temp_dir).as_path())?; @@ -1469,9 +1469,9 @@ async fn op_make_temp_dir_async( let prefix = args.prefix.map(String::from); let suffix = args.suffix.map(String::from); { - let state = state.borrow(); + let mut state = state.borrow_mut(); state - .borrow::<Permissions>() + .borrow_mut::<Permissions>() .write .check(dir.clone().unwrap_or_else(temp_dir).as_path())?; } @@ -1504,7 +1504,7 @@ fn op_make_temp_file_sync( let suffix = args.suffix.map(String::from); state - .borrow::<Permissions>() + .borrow_mut::<Permissions>() .write .check(dir.clone().unwrap_or_else(temp_dir).as_path())?; @@ -1532,9 +1532,9 @@ async fn op_make_temp_file_async( let prefix = args.prefix.map(String::from); let suffix = args.suffix.map(String::from); { - let state = state.borrow(); + let mut state = state.borrow_mut(); state - .borrow::<Permissions>() + .borrow_mut::<Permissions>() .write .check(dir.clone().unwrap_or_else(temp_dir).as_path())?; } @@ -1648,7 +1648,7 @@ fn op_utime_sync( let atime = filetime::FileTime::from_unix_time(args.atime.0, args.atime.1); let mtime = filetime::FileTime::from_unix_time(args.mtime.0, args.mtime.1); - state.borrow::<Permissions>().write.check(&path)?; + state.borrow_mut::<Permissions>().write.check(&path)?; filetime::set_file_times(path, atime, mtime)?; Ok(()) } @@ -1664,7 +1664,11 @@ async fn op_utime_async( let atime = filetime::FileTime::from_unix_time(args.atime.0, args.atime.1); let mtime = filetime::FileTime::from_unix_time(args.mtime.0, args.mtime.1); - state.borrow().borrow::<Permissions>().write.check(&path)?; + state + .borrow_mut() + .borrow_mut::<Permissions>() + .write + .check(&path)?; tokio::task::spawn_blocking(move || { filetime::set_file_times(path, atime, mtime)?; @@ -1681,7 +1685,7 @@ fn op_cwd( ) -> Result<String, AnyError> { let path = current_dir()?; state - .borrow::<Permissions>() + .borrow_mut::<Permissions>() .read .check_blind(&path, "CWD")?; let path_str = into_string(path.into_os_string())?; |