diff options
Diffstat (limited to 'ext/io/lib.rs')
-rw-r--r-- | ext/io/lib.rs | 19 |
1 files changed, 9 insertions, 10 deletions
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) } } |