summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/runner/builtins/command.rs5
-rw-r--r--src/runner/builtins/mod.rs4
2 files changed, 5 insertions, 4 deletions
diff --git a/src/runner/builtins/command.rs b/src/runner/builtins/command.rs
index 7d84c8f..a2ba35d 100644
--- a/src/runner/builtins/command.rs
+++ b/src/runner/builtins/command.rs
@@ -185,17 +185,18 @@ impl Io {
}
}
- pub async fn read_line_stdin(&self) -> anyhow::Result<String> {
+ pub async fn read_line_stdin(&self) -> anyhow::Result<(String, bool)> {
let mut buf = String::new();
if let Some(fh) = self.stdin() {
if let File::In(fh) = &mut *fh.lock_arc().await {
fh.read_line(&mut buf).await?;
}
}
+ let done = buf.is_empty();
if buf.ends_with('\n') {
buf.truncate(buf.len() - 1);
}
- Ok(buf)
+ Ok((buf, done))
}
pub async fn write_stdout(&self, buf: &[u8]) -> anyhow::Result<()> {
diff --git a/src/runner/builtins/mod.rs b/src/runner/builtins/mod.rs
index 19d250a..5205856 100644
--- a/src/runner/builtins/mod.rs
+++ b/src/runner/builtins/mod.rs
@@ -213,8 +213,8 @@ fn read(
bail!(cfg, exe, "usage: read var");
};
- let (done, val) = match cfg.io().read_line_stdin().await {
- Ok(line) => (line.is_empty(), line),
+ let (val, done) = match cfg.io().read_line_stdin().await {
+ Ok((line, done)) => (line, done),
Err(e) => {
bail!(cfg, exe, e);
}