diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/io/fs.rs | 16 | ||||
-rw-r--r-- | ext/io/lib.rs | 19 |
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) } } |