From: Jo-Philipp Wich Date: Wed, 23 Aug 2017 08:56:53 +0000 (+0200) Subject: Revert "busybox: ash/hush fix for read-builtin command" X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=0168ba2e07e02f75eb3e48b678027aa893f26e9f;p=openwrt%2Fstaging%2Fblogic.git Revert "busybox: ash/hush fix for read-builtin command" Revert this commit as it introduces a patchfile at a wrong location. Since the patch was never effective, we can assume that this particular commit was not properly tested. This reverts commit dde9da46c1586c0bda54e7fa6de05f0fc76e557a. Signed-off-by: Jo-Philipp Wich --- diff --git a/package/utils/busybox/501-ash-hush-fix-SIGCHLD-interrupting-read-builtin.patch b/package/utils/busybox/501-ash-hush-fix-SIGCHLD-interrupting-read-builtin.patch deleted file mode 100644 index 1386dad28269..000000000000 --- a/package/utils/busybox/501-ash-hush-fix-SIGCHLD-interrupting-read-builtin.patch +++ /dev/null @@ -1,147 +0,0 @@ -From f5470419404d643070db99d058405b714695b817 Mon Sep 17 00:00:00 2001 -From: Denys Vlasenko -Date: Mon, 22 May 2017 19:34:45 +0200 -Subject: [PATCH] ash,hush: fix SIGCHLD interrupting read builtin - -function old new delta -readcmd 169 217 +48 -shell_builtin_read 1087 1097 +10 -localcmd 366 364 -2 -builtin_read 197 193 -4 ------------------------------------------------------------------------------- -(add/remove: 0/0 grow/shrink: 2/2 up/down: 58/-6) Total: 52 bytes - -Signed-off-by: Denys Vlasenko -Signed-off-by: Bastian Bittorf ---- - shell/ash.c | 7 +++++++ - shell/ash_test/ash-read/read_SIGCHLD.right | 2 ++ - shell/ash_test/ash-read/read_SIGCHLD.tests | 4 ++++ - shell/hush.c | 5 ++++- - shell/hush_test/hush-read/read_SIGCHLD.right | 2 ++ - shell/hush_test/hush-read/read_SIGCHLD.tests | 4 ++++ - shell/shell_common.c | 20 +++++++++++--------- - 7 files changed, 34 insertions(+), 10 deletions(-) - create mode 100644 shell/ash_test/ash-read/read_SIGCHLD.right - create mode 100755 shell/ash_test/ash-read/read_SIGCHLD.tests - create mode 100644 shell/hush_test/hush-read/read_SIGCHLD.right - create mode 100755 shell/hush_test/hush-read/read_SIGCHLD.tests - -diff --git a/shell/ash.c b/shell/ash.c -index 70ee15e..60c8ffe 100644 ---- a/shell/ash.c -+++ b/shell/ash.c -@@ -13268,6 +13268,7 @@ readcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) - /* "read -s" needs to save/restore termios, can't allow ^C - * to jump out of it. - */ -+ again: - INT_OFF; - r = shell_builtin_read(setvar0, - argptr, -@@ -13280,6 +13281,12 @@ readcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM) - ); - INT_ON; - -+ if ((uintptr_t)r == 1 && errno == EINTR) { -+ /* to get SIGCHLD: sleep 1 & read x; echo $x */ -+ if (pending_sig == 0) -+ goto again; -+ } -+ - if ((uintptr_t)r > 1) - ash_msg_and_raise_error(r); - -diff --git a/shell/ash_test/ash-read/read_SIGCHLD.right b/shell/ash_test/ash-read/read_SIGCHLD.right -new file mode 100644 -index 0000000..b3dc7ab ---- /dev/null -+++ b/shell/ash_test/ash-read/read_SIGCHLD.right -@@ -0,0 +1,2 @@ -+x='Ok' -+exitcode:0 -diff --git a/shell/ash_test/ash-read/read_SIGCHLD.tests b/shell/ash_test/ash-read/read_SIGCHLD.tests -new file mode 100755 -index 0000000..c5f673a ---- /dev/null -+++ b/shell/ash_test/ash-read/read_SIGCHLD.tests -@@ -0,0 +1,4 @@ -+x=BAD -+{ sleep 0.4; echo Ok; } | { sleep 0.2 & read x; echo "x='$x'"; } -+echo "exitcode:$?" -+ -diff --git a/shell/hush.c b/shell/hush.c -index e18920f..125463a 100644 ---- a/shell/hush.c -+++ b/shell/hush.c -@@ -9038,6 +9038,9 @@ static int FAST_FUNC builtin_type(char **argv) - * - terminates shell (regardless of interactivity); - * if it has non-empty trap: - * - executes trap and returns to read; -+ * SIGCHLD from children: -+ * - does not interrupt read regardless of interactivity: -+ * try: sleep 1 & read x; echo $x - */ - static int FAST_FUNC builtin_read(char **argv) - { -@@ -9071,7 +9074,7 @@ static int FAST_FUNC builtin_read(char **argv) - - if ((uintptr_t)r == 1 && errno == EINTR) { - unsigned sig = check_and_run_traps(); -- if (sig && sig != SIGINT) -+ if (sig != SIGINT) - goto again; - } - -diff --git a/shell/hush_test/hush-read/read_SIGCHLD.right b/shell/hush_test/hush-read/read_SIGCHLD.right -new file mode 100644 -index 0000000..b3dc7ab ---- /dev/null -+++ b/shell/hush_test/hush-read/read_SIGCHLD.right -@@ -0,0 +1,2 @@ -+x='Ok' -+exitcode:0 -diff --git a/shell/hush_test/hush-read/read_SIGCHLD.tests b/shell/hush_test/hush-read/read_SIGCHLD.tests -new file mode 100755 -index 0000000..c5f673a ---- /dev/null -+++ b/shell/hush_test/hush-read/read_SIGCHLD.tests -@@ -0,0 +1,4 @@ -+x=BAD -+{ sleep 0.4; echo Ok; } | { sleep 0.2 & read x; echo "x='$x'"; } -+echo "exitcode:$?" -+ -diff --git a/shell/shell_common.c b/shell/shell_common.c -index fb86e68..03b7d0b 100644 ---- a/shell/shell_common.c -+++ b/shell/shell_common.c -@@ -204,15 +204,17 @@ shell_builtin_read(void FAST_FUNC (*setvar)(const char *name, const char *val), - c = buffer[bufpos]; - if (c == '\0') - continue; -- if (backslash) { -- backslash = 0; -- if (c != '\n') -- goto put; -- continue; -- } -- if (!(read_flags & BUILTIN_READ_RAW) && c == '\\') { -- backslash = 1; -- continue; -+ if (!(read_flags & BUILTIN_READ_RAW)) { -+ if (backslash) { -+ backslash = 0; -+ if (c != '\n') -+ goto put; -+ continue; -+ } -+ if (c == '\\') { -+ backslash = 1; -+ continue; -+ } - } - if (c == '\n') - break; --- -1.9.1 -