diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2019-08-16 11:05:24 -0400 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-08-16 14:41:08 -0400 |
commit | 81f809f2a675ff4ff7f93231ca87a18cb5b4628e (patch) | |
tree | 09a8bd8eedc5b03a4399cdfac896b2d445ed8037 /cli/ops/files.rs | |
parent | 52a66c2796f97f5a08d679389172c39c0652cb16 (diff) |
Revert "Remove dead code: legacy read/write ops"
This is causing a segfault for unknown reasons - see #2787.
This reverts commit 498f6ad431478f655b136782093e19e29248b24d.
Diffstat (limited to 'cli/ops/files.rs')
-rw-r--r-- | cli/ops/files.rs | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/cli/ops/files.rs b/cli/ops/files.rs index e311db425..ce3285623 100644 --- a/cli/ops/files.rs +++ b/cli/ops/files.rs @@ -8,6 +8,7 @@ use crate::ops::serialize_response; use crate::ops::CliOpResult; use crate::resources; use crate::state::ThreadSafeState; +use crate::tokio_write; use deno::*; use flatbuffers::FlatBufferBuilder; use futures::Future; @@ -118,6 +119,91 @@ pub fn op_close( } } +pub fn op_read( + _state: &ThreadSafeState, + base: &msg::Base<'_>, + data: Option<PinnedBuf>, +) -> CliOpResult { + let cmd_id = base.cmd_id(); + let inner = base.inner_as_read().unwrap(); + let rid = inner.rid(); + + match resources::lookup(rid) { + None => Err(deno_error::bad_resource()), + Some(resource) => { + let op = tokio::io::read(resource, data.unwrap()) + .map_err(ErrBox::from) + .and_then(move |(_resource, _buf, nread)| { + let builder = &mut FlatBufferBuilder::new(); + let inner = msg::ReadRes::create( + builder, + &msg::ReadResArgs { + nread: nread as u32, + eof: nread == 0, + }, + ); + Ok(serialize_response( + cmd_id, + builder, + msg::BaseArgs { + inner: Some(inner.as_union_value()), + inner_type: msg::Any::ReadRes, + ..Default::default() + }, + )) + }); + if base.sync() { + let buf = op.wait()?; + Ok(Op::Sync(buf)) + } else { + Ok(Op::Async(Box::new(op))) + } + } + } +} + +pub fn op_write( + _state: &ThreadSafeState, + base: &msg::Base<'_>, + data: Option<PinnedBuf>, +) -> CliOpResult { + let cmd_id = base.cmd_id(); + let inner = base.inner_as_write().unwrap(); + let rid = inner.rid(); + + match resources::lookup(rid) { + None => Err(deno_error::bad_resource()), + Some(resource) => { + let op = tokio_write::write(resource, data.unwrap()) + .map_err(ErrBox::from) + .and_then(move |(_resource, _buf, nwritten)| { + let builder = &mut FlatBufferBuilder::new(); + let inner = msg::WriteRes::create( + builder, + &msg::WriteResArgs { + nbyte: nwritten as u32, + }, + ); + Ok(serialize_response( + cmd_id, + builder, + msg::BaseArgs { + inner: Some(inner.as_union_value()), + inner_type: msg::Any::WriteRes, + ..Default::default() + }, + )) + }); + if base.sync() { + let buf = op.wait()?; + Ok(Op::Sync(buf)) + } else { + Ok(Op::Async(Box::new(op))) + } + } + } +} + pub fn op_seek( _state: &ThreadSafeState, base: &msg::Base<'_>, |