When we run `echo foo > file` and `file` is a device file or FIFO,
writing to `file` can cause an error like Invalid Argument or Broken
Pipe and set an error flag of stdout. The error flag in stdout persists
in subsequent builtin commands and they always print error message
`${COMMAND_NAME}: write`.
This commit adds `clearerr(stdout)` after the execution of sh builtin
command.
---
 toys/pending/sh.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/toys/pending/sh.c b/toys/pending/sh.c
index d9abb61a..4128ee1a 100644
--- a/toys/pending/sh.c
+++ b/toys/pending/sh.c
@@ -2863,6 +2863,7 @@ static struct sh_process *run_command(void)
       }
       toys.rebound = 0;
       pp->exit = toys.exitval;
+      clearerr(stdout);
       if (toys.optargs != toys.argv+1) free(toys.optargs);
       if (toys.old_umask) umask(toys.old_umask);
       memcpy(&toys, &temp, jj);
-- 
2.39.0.314.g84b9a713c41-goog

_______________________________________________
Toybox mailing list
[email protected]
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to