summaryrefslogtreecommitdiff
path: root/package/busybox/busybox-1.12.0-awk.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/busybox/busybox-1.12.0-awk.patch')
-rw-r--r--package/busybox/busybox-1.12.0-awk.patch53
1 files changed, 53 insertions, 0 deletions
diff --git a/package/busybox/busybox-1.12.0-awk.patch b/package/busybox/busybox-1.12.0-awk.patch
new file mode 100644
index 000000000..f89ae043f
--- /dev/null
+++ b/package/busybox/busybox-1.12.0-awk.patch
@@ -0,0 +1,53 @@
+--- busybox-1.12.0/editors/awk.c Wed Aug 6 00:56:11 2008
++++ busybox-1.12.0-awk/editors/awk.c Fri Aug 29 01:17:05 2008
+@@ -973,7 +973,12 @@
+
+ } else if (*p == '.' || isdigit(*p)) {
+ /* it's a number */
+- t_double = strtod(p, &p);
++#if ENABLE_DESKTOP
++ if (p[0] == '0' && (p[1] | 0x20) == 'x')
++ t_double = strtoll(p, &p, 0);
++ else
++#endif
++ t_double = strtod(p, &p);
+ if (*p == '.')
+ syntax_error(EMSG_UNEXP_TOKEN);
+ tc = TC_NUMBER;
+@@ -2034,28 +2039,30 @@
+ setvar_p(res, s);
+ break;
+
++ /* Bitwise ops must assume that operands are unsigned. GNU Awk 3.1.5:
++ * awk '{ print or(-1,1) }' gives "4.29497e+09", not "-2.xxxe+09" */
+ case B_an:
+- setvar_i(res, (long)getvar_i(av[0]) & (long)getvar_i(av[1]));
++ setvar_i(res, (unsigned long)getvar_i(av[0]) & (unsigned long)getvar_i(av[1]));
+ break;
+
+ case B_co:
+- setvar_i(res, ~(long)getvar_i(av[0]));
++ setvar_i(res, ~(unsigned long)getvar_i(av[0]));
+ break;
+
+ case B_ls:
+- setvar_i(res, (long)getvar_i(av[0]) << (long)getvar_i(av[1]));
++ setvar_i(res, (unsigned long)getvar_i(av[0]) << (unsigned long)getvar_i(av[1]));
+ break;
+
+ case B_or:
+- setvar_i(res, (long)getvar_i(av[0]) | (long)getvar_i(av[1]));
++ setvar_i(res, (unsigned long)getvar_i(av[0]) | (unsigned long)getvar_i(av[1]));
+ break;
+
+ case B_rs:
+- setvar_i(res, (long)((unsigned long)getvar_i(av[0]) >> (unsigned long)getvar_i(av[1])));
++ setvar_i(res, (unsigned long)getvar_i(av[0]) >> (unsigned long)getvar_i(av[1]));
+ break;
+
+ case B_xo:
+- setvar_i(res, (long)getvar_i(av[0]) ^ (long)getvar_i(av[1]));
++ setvar_i(res, (unsigned long)getvar_i(av[0]) ^ (unsigned long)getvar_i(av[1]));
+ break;
+
+ case B_lo: