summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2022-01-17 01:33:04 -0500
committerJesse Luehrs <doy@tozt.net>2022-01-17 01:33:04 -0500
commitde7236e3ac7596dfdcd4b705861189ee9af9942c (patch)
tree3191b8695a00fcb66c20717ef576935aab693458
parent9b1595b795121d233cd0cf32537661839e318914 (diff)
downloadnbsh-de7236e3ac7596dfdcd4b705861189ee9af9942c.tar.gz
nbsh-de7236e3ac7596dfdcd4b705861189ee9af9942c.zip
fix reading empty lines
-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);
}