summaryrefslogtreecommitdiff
path: root/cli/ops/files.rs
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2019-08-16 11:05:24 -0400
committerRyan Dahl <ry@tinyclouds.org>2019-08-16 14:41:08 -0400
commit81f809f2a675ff4ff7f93231ca87a18cb5b4628e (patch)
tree09a8bd8eedc5b03a4399cdfac896b2d445ed8037 /cli/ops/files.rs
parent52a66c2796f97f5a08d679389172c39c0652cb16 (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.rs86
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<'_>,