54 lines
1.6 KiB
Diff
54 lines
1.6 KiB
Diff
--- 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:
|