summaryrefslogtreecommitdiff
path: root/runtime/ops/fs.rs
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/ops/fs.rs')
-rw-r--r--runtime/ops/fs.rs126
1 files changed, 28 insertions, 98 deletions
diff --git a/runtime/ops/fs.rs b/runtime/ops/fs.rs
index fdfdff6b4..5c9c5c99b 100644
--- a/runtime/ops/fs.rs
+++ b/runtime/ops/fs.rs
@@ -322,10 +322,9 @@ fn seek_helper(args: SeekArgs) -> Result<(u32, SeekFrom), AnyError> {
#[op]
fn op_seek_sync(state: &mut OpState, args: SeekArgs) -> Result<u64, AnyError> {
let (rid, seek_from) = seek_helper(args)?;
- let pos = StdFileResource::with_file(state, rid, |std_file| {
+ StdFileResource::with_file(state, rid, |std_file| {
std_file.seek(seek_from).map_err(AnyError::from)
- })?;
- Ok(pos)
+ })
}
#[op]
@@ -335,19 +334,10 @@ async fn op_seek_async(
) -> Result<u64, AnyError> {
let (rid, seek_from) = seek_helper(args)?;
- let resource = state
- .borrow_mut()
- .resource_table
- .get::<StdFileResource>(rid)?;
-
- let std_file = resource.std_file();
-
- tokio::task::spawn_blocking(move || {
- let mut std_file = std_file.lock();
- std_file.seek(seek_from)
+ StdFileResource::with_file_blocking_task(state, rid, move |std_file| {
+ std_file.seek(seek_from).map_err(AnyError::from)
})
- .await?
- .map_err(AnyError::from)
+ .await
}
#[op]
@@ -357,8 +347,7 @@ fn op_fdatasync_sync(
) -> Result<(), AnyError> {
StdFileResource::with_file(state, rid, |std_file| {
std_file.sync_data().map_err(AnyError::from)
- })?;
- Ok(())
+ })
}
#[op]
@@ -366,27 +355,17 @@ async fn op_fdatasync_async(
state: Rc<RefCell<OpState>>,
rid: ResourceId,
) -> Result<(), AnyError> {
- let resource = state
- .borrow_mut()
- .resource_table
- .get::<StdFileResource>(rid)?;
-
- let std_file = resource.std_file();
-
- tokio::task::spawn_blocking(move || {
- let std_file = std_file.lock();
- std_file.sync_data()
+ StdFileResource::with_file_blocking_task(state, rid, move |std_file| {
+ std_file.sync_data().map_err(AnyError::from)
})
- .await?
- .map_err(AnyError::from)
+ .await
}
#[op]
fn op_fsync_sync(state: &mut OpState, rid: ResourceId) -> Result<(), AnyError> {
StdFileResource::with_file(state, rid, |std_file| {
std_file.sync_all().map_err(AnyError::from)
- })?;
- Ok(())
+ })
}
#[op]
@@ -394,19 +373,10 @@ async fn op_fsync_async(
state: Rc<RefCell<OpState>>,
rid: ResourceId,
) -> Result<(), AnyError> {
- let resource = state
- .borrow_mut()
- .resource_table
- .get::<StdFileResource>(rid)?;
-
- let std_file = resource.std_file();
-
- tokio::task::spawn_blocking(move || {
- let std_file = std_file.lock();
- std_file.sync_all()
+ StdFileResource::with_file_blocking_task(state, rid, move |std_file| {
+ std_file.sync_all().map_err(AnyError::from)
})
- .await?
- .map_err(AnyError::from)
+ .await
}
#[op]
@@ -425,19 +395,11 @@ async fn op_fstat_async(
state: Rc<RefCell<OpState>>,
rid: ResourceId,
) -> Result<FsStat, AnyError> {
- let resource = state
- .borrow_mut()
- .resource_table
- .get::<StdFileResource>(rid)?;
-
- let std_file = resource.std_file();
-
- let metadata = tokio::task::spawn_blocking(move || {
- let std_file = std_file.lock();
- std_file.metadata()
- })
- .await?
- .map_err(AnyError::from)?;
+ let metadata =
+ StdFileResource::with_file_blocking_task(state, rid, move |std_file| {
+ std_file.metadata().map_err(AnyError::from)
+ })
+ .await?;
Ok(get_stat(metadata))
}
@@ -469,15 +431,7 @@ async fn op_flock_async(
use fs3::FileExt;
super::check_unstable2(&state, "Deno.flock");
- let resource = state
- .borrow_mut()
- .resource_table
- .get::<StdFileResource>(rid)?;
-
- let std_file = resource.std_file();
-
- tokio::task::spawn_blocking(move || -> Result<(), AnyError> {
- let std_file = std_file.lock();
+ StdFileResource::with_file_blocking_task(state, rid, move |std_file| {
if exclusive {
std_file.lock_exclusive()?;
} else {
@@ -485,7 +439,7 @@ async fn op_flock_async(
}
Ok(())
})
- .await?
+ .await
}
#[op]
@@ -510,19 +464,11 @@ async fn op_funlock_async(
use fs3::FileExt;
super::check_unstable2(&state, "Deno.funlock");
- let resource = state
- .borrow_mut()
- .resource_table
- .get::<StdFileResource>(rid)?;
-
- let std_file = resource.std_file();
-
- tokio::task::spawn_blocking(move || -> Result<(), AnyError> {
- let std_file = std_file.lock();
+ StdFileResource::with_file_blocking_task(state, rid, move |std_file| {
std_file.unlock()?;
Ok(())
})
- .await?
+ .await
}
#[op]
@@ -1592,19 +1538,11 @@ async fn op_ftruncate_async(
let rid = args.rid;
let len = args.len as u64;
- let resource = state
- .borrow_mut()
- .resource_table
- .get::<StdFileResource>(rid)?;
-
- let std_file = resource.std_file();
-
- tokio::task::spawn_blocking(move || {
- let std_file = std_file.lock();
- std_file.set_len(len)
+ StdFileResource::with_file_blocking_task(state, rid, move |std_file| {
+ std_file.set_len(len)?;
+ Ok(())
})
- .await?
- .map_err(AnyError::from)
+ .await
}
#[derive(Deserialize)]
@@ -1884,19 +1822,11 @@ async fn op_futime_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);
- let resource = state
- .borrow_mut()
- .resource_table
- .get::<StdFileResource>(rid)?;
-
- let std_file = resource.std_file();
- tokio::task::spawn_blocking(move || {
- let std_file = std_file.lock();
- filetime::set_file_handle_times(&std_file, Some(atime), Some(mtime))?;
+ StdFileResource::with_file_blocking_task(state, rid, move |std_file| {
+ filetime::set_file_handle_times(std_file, Some(atime), Some(mtime))?;
Ok(())
})
.await
- .unwrap()
}
#[derive(Deserialize)]