summaryrefslogtreecommitdiff
path: root/package/busybox/busybox-1.18.2/busybox-1.18.2-hush.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/busybox/busybox-1.18.2/busybox-1.18.2-hush.patch')
-rw-r--r--package/busybox/busybox-1.18.2/busybox-1.18.2-hush.patch34
1 files changed, 34 insertions, 0 deletions
diff --git a/package/busybox/busybox-1.18.2/busybox-1.18.2-hush.patch b/package/busybox/busybox-1.18.2/busybox-1.18.2-hush.patch
new file mode 100644
index 000000000..d08e5194d
--- /dev/null
+++ b/package/busybox/busybox-1.18.2/busybox-1.18.2-hush.patch
@@ -0,0 +1,34 @@
+--- busybox-1.18.2/shell/hush.c
++++ busybox-1.18.2-hush/shell/hush.c
+@@ -4123,15 +4123,26 @@ static struct pipe *parse_stream(char **
+ && dest.length == 0 && !dest.has_quoted_part
+ ) {
+ /* This newline can be ignored. But...
+- * without the below check, interactive shell
+- * will ignore even lines with bare <newline>,
+- * and show the continuation prompt:
++ * Without check #1, interactive shell
++ * ignores even bare <newline>,
++ * and shows the continuation prompt:
+ * ps1_prompt$ <enter>
+- * ps2> _ <=== wrong prompt, should be ps1
++ * ps2> _ <=== wrong, should be ps1
++ * Without check #2, "cmd & <newline>"
++ * is similarly mistreated.
++ * (BTW, this makes "cmd & cmd"
++ * and "cmd && cmd" non-orthogonal.
++ * Really, ask yourself, why
++ * "cmd && <newline>" doesn't start
++ * cmd but waits for more input?
++ * No reason...)
+ */
+ struct pipe *pi = ctx.list_head;
+- if (pi->num_cmds != 0)
++ if (pi->num_cmds != 0 /* check #1 */
++ && pi->followup != PIPE_BG /* check #2 */
++ ) {
+ continue;
++ }
+ }
+ /* Treat newline as a command separator. */
+ done_pipe(&ctx, PIPE_SEQ);