diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2013-07-20 21:23:01 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2013-07-20 21:23:01 +0200 |
commit | 1390a010b60cbb5adad4e4c56a3613122b4298c6 (patch) | |
tree | 96affea1bd133da45e4654bb6743a588e1043ec1 | |
parent | 5e87e8aebb60bc87d3dd6e07814c7c3b0e8dbbb2 (diff) | |
download | busybox-w32-1390a010b60cbb5adad4e4c56a3613122b4298c6.tar.gz busybox-w32-1390a010b60cbb5adad4e4c56a3613122b4298c6.tar.bz2 busybox-w32-1390a010b60cbb5adad4e4c56a3613122b4298c6.zip |
awk: use "long long" as integer type, not "int"
Testcase:
awk "BEGIN{n=(2^31)-1; print n, int(n), n%1, ++n, int(n), n%1}"
2147483647 2147483647 0 2147483648 2147483648 0
(last three values weren't showing right)
function old new delta
evaluate 3444 3458 +14
fmt_num 221 230 +9
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | editors/awk.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/editors/awk.c b/editors/awk.c index 0b573a065..a2e20215b 100644 --- a/editors/awk.c +++ b/editors/awk.c | |||
@@ -190,7 +190,7 @@ typedef struct tsplitter_s { | |||
190 | 190 | ||
191 | /* combined token classes */ | 191 | /* combined token classes */ |
192 | #define TC_BINOP (TC_BINOPX | TC_COMMA | TC_PIPE | TC_IN) | 192 | #define TC_BINOP (TC_BINOPX | TC_COMMA | TC_PIPE | TC_IN) |
193 | #define TC_UNARYOP (TC_UOPPRE | TC_UOPPOST) | 193 | //#define TC_UNARYOP (TC_UOPPRE | TC_UOPPOST) |
194 | #define TC_OPERAND (TC_VARIABLE | TC_ARRAY | TC_FUNCTION \ | 194 | #define TC_OPERAND (TC_VARIABLE | TC_ARRAY | TC_FUNCTION \ |
195 | | TC_BUILTIN | TC_GETLINE | TC_SEQSTART | TC_STRING | TC_NUMBER) | 195 | | TC_BUILTIN | TC_GETLINE | TC_SEQSTART | TC_STRING | TC_NUMBER) |
196 | 196 | ||
@@ -2015,8 +2015,8 @@ static int fmt_num(char *b, int size, const char *format, double n, int int_as_i | |||
2015 | char c; | 2015 | char c; |
2016 | const char *s = format; | 2016 | const char *s = format; |
2017 | 2017 | ||
2018 | if (int_as_int && n == (int)n) { | 2018 | if (int_as_int && n == (long long)n) { |
2019 | r = snprintf(b, size, "%d", (int)n); | 2019 | r = snprintf(b, size, "%lld", (long long)n); |
2020 | } else { | 2020 | } else { |
2021 | do { c = *s; } while (c && *++s); | 2021 | do { c = *s; } while (c && *++s); |
2022 | if (strchr("diouxX", c)) { | 2022 | if (strchr("diouxX", c)) { |
@@ -2733,7 +2733,7 @@ static var *evaluate(node *op, var *res) | |||
2733 | 2733 | ||
2734 | switch (opn) { | 2734 | switch (opn) { |
2735 | case F_in: | 2735 | case F_in: |
2736 | R_d = (int)L_d; | 2736 | R_d = (long long)L_d; |
2737 | break; | 2737 | break; |
2738 | 2738 | ||
2739 | case F_rn: | 2739 | case F_rn: |
@@ -2931,7 +2931,7 @@ static var *evaluate(node *op, var *res) | |||
2931 | case '%': | 2931 | case '%': |
2932 | if (R_d == 0) | 2932 | if (R_d == 0) |
2933 | syntax_error(EMSG_DIV_BY_ZERO); | 2933 | syntax_error(EMSG_DIV_BY_ZERO); |
2934 | L_d -= (int)(L_d / R_d) * R_d; | 2934 | L_d -= (long long)(L_d / R_d) * R_d; |
2935 | break; | 2935 | break; |
2936 | } | 2936 | } |
2937 | debug_printf_eval("BINARY/REPLACE result:%f\n", L_d); | 2937 | debug_printf_eval("BINARY/REPLACE result:%f\n", L_d); |