Re: [OpenWrt-Devel] [PATCH] busybox: replace hotfix with upstream commit de5edadee2dca2896492f97ab3a56e389305e74d

2015-07-07 Thread John Crispin
when applying the patch i get

patching file
package/utils/busybox/patches/290-ash-fix-a-regression-in-handling-local-variables.patch
patching file
package/utils/busybox/patches/290-ash-fix-handling-of-duplicate-local.patch
patch:  malformed patch at line 301: --





On 23/04/2015 13:22, Bastian Bittorf wrote:
 with this patch the hotfix from r45471 is replaced.
 
 compile and runtested with ar71xx / r45568
 
 the file 'shell/ash_test/ash-heredoc/heredoc1.right' is
 not included, because it does not apply on our busybox.
 when upgrading to next busybox-release, this patch can be dropped.
 
 Signed-off-by: Bastian Bittorf bitt...@bluebottle.com
 ---
  ...-a-regression-in-handling-local-variables.patch |   75 ---
  .../290-ash-fix-handling-of-duplicate-local.patch  |  204 
 
  2 files changed, 204 insertions(+), 75 deletions(-)
  delete mode 100644 
 package/utils/busybox/patches/290-ash-fix-a-regression-in-handling-local-variables.patch
  create mode 100644 
 package/utils/busybox/patches/290-ash-fix-handling-of-duplicate-local.patch
 
 diff --git 
 a/package/utils/busybox/patches/290-ash-fix-a-regression-in-handling-local-variables.patch
  
 b/package/utils/busybox/patches/290-ash-fix-a-regression-in-handling-local-variables.patch
 deleted file mode 100644
 index 0ac1925..000
 --- 
 a/package/utils/busybox/patches/290-ash-fix-a-regression-in-handling-local-variables.patch
 +++ /dev/null
 @@ -1,75 +0,0 @@
 -From: Felix Fietkau n...@openwrt.org
 -Date: Fri, 17 Apr 2015 01:54:51 +0200
 -Subject: [PATCH] ash: fix a regression in handling local variables
 -
 -commit 109ee5d33694a03cda3424b4846584250832ba8e
 -ash: make locak VAR unset VAR (bash does that)
 -
 -This commit introduced a regression where calling local on an already
 -local variable unsets it. This does not match bash behavior.
 -
 -Update test case to check for this behavior
 -
 -Signed-off-by: Felix Fietkau n...@openwrt.org
 
 -
  a/shell/ash.c
 -+++ b/shell/ash.c
 -@@ -8961,6 +8961,21 @@ parse_command_args(char **argv, const ch
 - }
 - #endif
 - 
 -+static bool
 -+findlocal(struct var *vp)
 -+{
 -+struct localvar *lvp = localvars;
 -+
 -+while (lvp) {
 -+if (lvp-vp == vp)
 -+return true;
 -+
 -+lvp = lvp-next;
 -+}
 -+
 -+return false;
 -+}
 -+
 - /*
 -  * Make a variable a local variable.  When a variable is made local, it's
 -  * value and flags are saved in a localvar structure.  The saved values
 -@@ -9000,7 +9015,7 @@ mklocal(char *name)
 - vp-flags |= VSTRFIXED|VTEXTFIXED;
 - if (eq)
 - setvareq(name, 0);
 --else
 -+else if (!findlocal(vp))
 - /* local VAR unsets VAR: */
 - setvar(name, NULL, 0);
 - }
  a/shell/ash_test/ash-misc/local1.right
 -+++ b/shell/ash_test/ash-misc/local1.right
 -@@ -1,4 +1,5 @@
 - A1:'A'
 - A2:''
 --A3:''
 --A4:'A'
 -+A3:'B'
 -+A4:''
 -+A5:'A'
  a/shell/ash_test/ash-misc/local1.tests
 -+++ b/shell/ash_test/ash-misc/local1.tests
 -@@ -3,9 +3,12 @@ f() {
 - local a
 - # the above line unsets $a
 - echo A2:'$a'
 --unset a
 -+a=B
 -+local a
 - echo A3:'$a'
 -+unset a
 -+echo A4:'$a'
 - }
 - echo A1:'$a'
 - f
 --echo A4:'$a'
 -+echo A5:'$a'
 diff --git 
 a/package/utils/busybox/patches/290-ash-fix-handling-of-duplicate-local.patch 
 b/package/utils/busybox/patches/290-ash-fix-handling-of-duplicate-local.patch
 new file mode 100644
 index 000..71c2162
 --- /dev/null
 +++ 
 b/package/utils/busybox/patches/290-ash-fix-handling-of-duplicate-local.patch
 @@ -0,0 +1,204 @@
 +From 0a0acb55db8d7c4dec445573f1b0528d126b9e1f Mon Sep 17 00:00:00 2001
 +From: Denys Vlasenko vda.li...@googlemail.com
 +Date: Sat, 18 Apr 2015 19:36:38 +0200
 +Subject: [PATCH] ash: fix handling of duplicate local
 +
 +Signed-off-by: Denys Vlasenko vda.li...@googlemail.com
 +---
 + shell/ash.c   | 51 
 +--
 + shell/ash_test/ash-vars/var3.right|  5 +++
 + shell/ash_test/ash-vars/var3.tests|  1 +
 + 4 files changed, 42 insertions(+), 17 deletions(-)
 + create mode 100644 shell/ash_test/ash-vars/var3.right
 + create mode 100755 shell/ash_test/ash-vars/var3.tests
 +
 +diff --git a/shell/ash.c b/shell/ash.c
 +index b568013..697a64f 100644
 +--- a/shell/ash.c
  b/shell/ash.c
 +@@ -2030,7 +2030,7 @@ varcmp(const char *p, const char *q)
 + int c, d;
 + 
 + while ((c = *p) == (d = *q)) {
 +-if (!c || c == '=')
 ++if (c == '\0' || c == '=')
 + goto out;
 + p++;
 + q++;
 +@@ -2247,7 +2247,7 @@ setvar(const char *name, const char *val, int flags)
 + }
 + 
 + static void FAST_FUNC
 +-setvar2(const char *name, const char *val)
 ++setvar0(const char *name, const char *val)
 + {
 + setvar(name, 

[OpenWrt-Devel] [PATCH] busybox: replace hotfix with upstream commit de5edadee2dca2896492f97ab3a56e389305e74d

2015-04-23 Thread Bastian Bittorf
with this patch the hotfix from r45471 is replaced.

compile and runtested with ar71xx / r45568

the file 'shell/ash_test/ash-heredoc/heredoc1.right' is
not included, because it does not apply on our busybox.
when upgrading to next busybox-release, this patch can be dropped.

Signed-off-by: Bastian Bittorf bitt...@bluebottle.com
---
 ...-a-regression-in-handling-local-variables.patch |   75 ---
 .../290-ash-fix-handling-of-duplicate-local.patch  |  204 
 2 files changed, 204 insertions(+), 75 deletions(-)
 delete mode 100644 
package/utils/busybox/patches/290-ash-fix-a-regression-in-handling-local-variables.patch
 create mode 100644 
package/utils/busybox/patches/290-ash-fix-handling-of-duplicate-local.patch

diff --git 
a/package/utils/busybox/patches/290-ash-fix-a-regression-in-handling-local-variables.patch
 
b/package/utils/busybox/patches/290-ash-fix-a-regression-in-handling-local-variables.patch
deleted file mode 100644
index 0ac1925..000
--- 
a/package/utils/busybox/patches/290-ash-fix-a-regression-in-handling-local-variables.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From: Felix Fietkau n...@openwrt.org
-Date: Fri, 17 Apr 2015 01:54:51 +0200
-Subject: [PATCH] ash: fix a regression in handling local variables
-
-commit 109ee5d33694a03cda3424b4846584250832ba8e
-ash: make locak VAR unset VAR (bash does that)
-
-This commit introduced a regression where calling local on an already
-local variable unsets it. This does not match bash behavior.
-
-Update test case to check for this behavior
-
-Signed-off-by: Felix Fietkau n...@openwrt.org

-
 a/shell/ash.c
-+++ b/shell/ash.c
-@@ -8961,6 +8961,21 @@ parse_command_args(char **argv, const ch
- }
- #endif
- 
-+static bool
-+findlocal(struct var *vp)
-+{
-+  struct localvar *lvp = localvars;
-+
-+  while (lvp) {
-+  if (lvp-vp == vp)
-+  return true;
-+
-+  lvp = lvp-next;
-+  }
-+
-+  return false;
-+}
-+
- /*
-  * Make a variable a local variable.  When a variable is made local, it's
-  * value and flags are saved in a localvar structure.  The saved values
-@@ -9000,7 +9015,7 @@ mklocal(char *name)
-   vp-flags |= VSTRFIXED|VTEXTFIXED;
-   if (eq)
-   setvareq(name, 0);
--  else
-+  else if (!findlocal(vp))
-   /* local VAR unsets VAR: */
-   setvar(name, NULL, 0);
-   }
 a/shell/ash_test/ash-misc/local1.right
-+++ b/shell/ash_test/ash-misc/local1.right
-@@ -1,4 +1,5 @@
- A1:'A'
- A2:''
--A3:''
--A4:'A'
-+A3:'B'
-+A4:''
-+A5:'A'
 a/shell/ash_test/ash-misc/local1.tests
-+++ b/shell/ash_test/ash-misc/local1.tests
-@@ -3,9 +3,12 @@ f() {
-   local a
-   # the above line unsets $a
-   echo A2:'$a'
--  unset a
-+  a=B
-+  local a
-   echo A3:'$a'
-+  unset a
-+  echo A4:'$a'
- }
- echo A1:'$a'
- f
--echo A4:'$a'
-+echo A5:'$a'
diff --git 
a/package/utils/busybox/patches/290-ash-fix-handling-of-duplicate-local.patch 
b/package/utils/busybox/patches/290-ash-fix-handling-of-duplicate-local.patch
new file mode 100644
index 000..71c2162
--- /dev/null
+++ 
b/package/utils/busybox/patches/290-ash-fix-handling-of-duplicate-local.patch
@@ -0,0 +1,204 @@
+From 0a0acb55db8d7c4dec445573f1b0528d126b9e1f Mon Sep 17 00:00:00 2001
+From: Denys Vlasenko vda.li...@googlemail.com
+Date: Sat, 18 Apr 2015 19:36:38 +0200
+Subject: [PATCH] ash: fix handling of duplicate local
+
+Signed-off-by: Denys Vlasenko vda.li...@googlemail.com
+---
+ shell/ash.c   | 51 +--
+ shell/ash_test/ash-vars/var3.right|  5 +++
+ shell/ash_test/ash-vars/var3.tests|  1 +
+ 4 files changed, 42 insertions(+), 17 deletions(-)
+ create mode 100644 shell/ash_test/ash-vars/var3.right
+ create mode 100755 shell/ash_test/ash-vars/var3.tests
+
+diff --git a/shell/ash.c b/shell/ash.c
+index b568013..697a64f 100644
+--- a/shell/ash.c
 b/shell/ash.c
+@@ -2030,7 +2030,7 @@ varcmp(const char *p, const char *q)
+   int c, d;
+ 
+   while ((c = *p) == (d = *q)) {
+-  if (!c || c == '=')
++  if (c == '\0' || c == '=')
+   goto out;
+   p++;
+   q++;
+@@ -2247,7 +2247,7 @@ setvar(const char *name, const char *val, int flags)
+ }
+ 
+ static void FAST_FUNC
+-setvar2(const char *name, const char *val)
++setvar0(const char *name, const char *val)
+ {
+   setvar(name, val, 0);
+ }
+@@ -2310,7 +2310,7 @@ unsetvar(const char *s)
+   free(vp);
+   INT_ON;
+   } else {
+-  setvar2(s, 0);
++  setvar0(s, NULL);
+   vp-flags = ~VEXPORT;
+   }
+  ok:
+@@ -5505,7 +5505,7 @@ ash_arith(const char *s)
+   arith_t result;
+ 
+   math_state.lookupvar