summaryrefslogtreecommitdiff
path: root/ext/io
diff options
context:
space:
mode:
Diffstat (limited to 'ext/io')
-rw-r--r--ext/io/fs.rs16
-rw-r--r--ext/io/lib.rs19
2 files changed, 13 insertions, 22 deletions
diff --git a/ext/io/fs.rs b/ext/io/fs.rs
index 9afa192ab..1ebe0e7c1 100644
--- a/ext/io/fs.rs
+++ b/ext/io/fs.rs
@@ -12,6 +12,7 @@ use deno_core::error::AnyError;
use deno_core::BufMutView;
use deno_core::BufView;
use deno_core::OpState;
+use deno_core::ResourceHandleFd;
use deno_core::ResourceId;
use tokio::task::JoinError;
@@ -236,10 +237,7 @@ pub trait File {
// lower level functionality
fn as_stdio(self: Rc<Self>) -> FsResult<std::process::Stdio>;
- #[cfg(unix)]
- fn backing_fd(self: Rc<Self>) -> Option<std::os::unix::prelude::RawFd>;
- #[cfg(windows)]
- fn backing_fd(self: Rc<Self>) -> Option<std::os::windows::io::RawHandle>;
+ fn backing_fd(self: Rc<Self>) -> Option<ResourceHandleFd>;
fn try_clone_inner(self: Rc<Self>) -> FsResult<Rc<dyn File>>;
}
@@ -253,7 +251,7 @@ impl FileResource {
Self { name, file }
}
- pub fn with_resource<F, R>(
+ fn with_resource<F, R>(
state: &OpState,
rid: ResourceId,
f: F,
@@ -359,13 +357,7 @@ impl deno_core::Resource for FileResource {
self.file.clone().write_sync(data).map_err(|err| err.into())
}
- #[cfg(unix)]
- fn backing_fd(self: Rc<Self>) -> Option<std::os::unix::prelude::RawFd> {
- self.file.clone().backing_fd()
- }
-
- #[cfg(windows)]
- fn backing_fd(self: Rc<Self>) -> Option<std::os::windows::io::RawHandle> {
+ fn backing_fd(self: Rc<Self>) -> Option<ResourceHandleFd> {
self.file.clone().backing_fd()
}
}
diff --git a/ext/io/lib.rs b/ext/io/lib.rs
index 00509011f..090622231 100644
--- a/ext/io/lib.rs
+++ b/ext/io/lib.rs
@@ -14,6 +14,8 @@ use deno_core::Op;
use deno_core::OpState;
use deno_core::RcRef;
use deno_core::Resource;
+use deno_core::ResourceHandle;
+use deno_core::ResourceHandleFd;
use deno_core::TaskQueue;
use fs::FileResource;
use fs::FsError;
@@ -308,6 +310,7 @@ pub struct StdFileResourceInner {
// Used to keep async actions in order and only allow one
// to occur at a time
cell_async_task_queue: TaskQueue,
+ handle: ResourceHandleFd,
}
impl StdFileResourceInner {
@@ -316,8 +319,11 @@ impl StdFileResourceInner {
}
fn new(kind: StdFileResourceKind, fs_file: StdFile) -> Self {
+ // We know this will be an fd
+ let handle = ResourceHandle::from_fd_like(&fs_file).as_fd_like().unwrap();
StdFileResourceInner {
kind,
+ handle,
cell: RefCell::new(Some(fs_file)),
cell_async_task_queue: Default::default(),
}
@@ -705,6 +711,7 @@ impl crate::fs::File for StdFileResourceInner {
kind: self.kind,
cell: RefCell::new(Some(inner.try_clone()?)),
cell_async_task_queue: Default::default(),
+ handle: self.handle,
})),
None => Err(FsError::FileBusy),
}
@@ -720,16 +727,8 @@ impl crate::fs::File for StdFileResourceInner {
}
}
- #[cfg(unix)]
- fn backing_fd(self: Rc<Self>) -> Option<std::os::unix::prelude::RawFd> {
- use std::os::unix::io::AsRawFd;
- self.with_sync(|file| Ok(file.as_raw_fd())).ok()
- }
-
- #[cfg(windows)]
- fn backing_fd(self: Rc<Self>) -> Option<std::os::windows::io::RawHandle> {
- use std::os::windows::prelude::AsRawHandle;
- self.with_sync(|file| Ok(file.as_raw_handle())).ok()
+ fn backing_fd(self: Rc<Self>) -> Option<ResourceHandleFd> {
+ Some(self.handle)
}
}