aboutsummaryrefslogtreecommitdiff
path: root/miscutils/bc.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* dc: Parse error & fix out of bounds read in xc_program_printStringBrian Foley2019-10-211-2/+4
| | | | | | | | function old new delta xc_program_print 712 735 +23 Signed-off-by: Brian Foley <bpfoley@google.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* dc: Fix segfault when executing strings generated using asciifyBrian Foley2019-10-211-2/+8
| | | | | | | | function old new delta zxc_vm_process 6884 6891 +7 Signed-off-by: Brian Foley <bpfoley@google.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* dc: execute shouldn't pop if stack head is not a stringBrian Foley2019-10-211-1/+2
| | | | | | | | | | | | | | This matches the behaviour of both GNU dc (as specified in its man page), and BSD dc (where stack_popstring() pops only if the head is a string.) Add a couple of tests to verify this behavior. function old new delta zxc_vm_process 6882 6884 +2 Signed-off-by: Brian Foley <bpfoley@google.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: placate compiler warningsDenys Vlasenko2019-06-081-2/+2
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: implement pass-by-reference code from upstreamDenys Vlasenko2019-01-251-86/+185
| | | | | | | | | | | | | | | | | | | | | | | | | | function old new delta zxc_program_popResultAndCopyToVar 298 493 +195 bc_vec_pushIndex - 75 +75 zxc_vm_process 859 928 +69 xc_program_dereference - 66 +66 bc_vec_npush - 65 +65 zbc_num_s 239 249 +10 zxc_program_num 1024 1032 +8 zbc_num_divmod 150 156 +6 xc_program_search 143 146 +3 zxc_program_assign 392 389 -3 zdc_program_execStr 520 517 -3 xc_program_pushVar 198 195 -3 zxc_program_exec 4101 4092 -9 zbc_program_call 318 308 -10 zbc_func_insert 120 104 -16 zbc_parse_stmt_possibly_auto 1460 1439 -21 bc_vec_push 53 12 -41 xc_parse_pushIndex 61 18 -43 ------------------------------------------------------------------------------ (add/remove: 3/0 grow/shrink: 6/9 up/down: 497/-149) Total: 348 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: code shrinkDenys Vlasenko2019-01-091-14/+14
| | | | | | | | | | | | | | | | | function old new delta xc_parse_pushInst_and_Index - 16 +16 zbc_parse_expr 1818 1816 -2 xc_parse_pushIndex 65 61 -4 zbc_parse_pushSTR 63 58 -5 zbc_parse_name 448 442 -6 xc_parse_pushNUM 74 67 -7 zdc_parse_expr 479 470 -9 bc_parse_pushJUMP_ZERO 21 12 -9 bc_parse_pushJUMP 21 12 -9 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/8 up/down: 16/-51) Total: -35 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: remove "empty expression" check/message, parsing fails in these cases anywayDenys Vlasenko2019-01-081-3/+4
| | | | | | | function old new delta zbc_parse_expr 1848 1818 -30 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: zbc_parse_expr_empty_ok() is unused except by zbc_parse_expr(), fold it inDenys Vlasenko2019-01-081-36/+25
| | | | | | | function old new delta zbc_parse_expr 1865 1848 -17 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: disallow invalid syntax like "{ print 1 print 2 }"Denys Vlasenko2019-01-081-15/+21
| | | | | | | | | | | | | | | | | statement parsing must NOT eat the terminator: caller needs to know what it was, to correctly decide whether it is a valid one. function old new delta zxc_program_read - 234 +234 zdc_program_printStream - 144 +144 zbc_parse_stmt_possibly_auto 1413 1460 +47 zxc_vm_process 869 859 -10 zxc_program_exec 4116 4101 -15 zdc_program_asciify 368 - -368 ------------------------------------------------------------------------------ (add/remove: 2/1 grow/shrink: 1/2 up/down: 425/-393) Total: 32 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* sleep: support "inf"Denys Vlasenko2019-01-071-1/+0
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: shorten "limits" outputDenys Vlasenko2019-01-041-4/+1
| | | | | | | | text data bss dec hex filename 979016 485 7296 986797 f0ead busybox_old 978959 485 7296 986740 f0e74 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: formatting changes, added a FIXME comment, no logic changesDenys Vlasenko2019-01-041-5/+8
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: support void functions (GNU compat)Denys Vlasenko2019-01-041-19/+56
| | | | | | | | | | | | | | | | function old new delta xc_program_print - 689 +689 zxc_vm_process 814 869 +55 zxc_program_exec 4098 4116 +18 zxc_program_assign 385 392 +7 bc_result_free 43 46 +3 zxc_program_binOpPrep 243 245 +2 zdc_program_execStr 518 520 +2 zxc_program_print 683 - -683 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 6/0 up/down: 776/-683) Total: 93 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* dc: fit returning of stringDenys Vlasenko2019-01-041-5/+13
| | | | | | | function old new delta zxc_program_exec 4087 4098 +11 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* dc: fix '?'Denys Vlasenko2019-01-041-9/+4
| | | | | | | | | | function old new delta zdc_parse_expr 470 479 +9 zxc_vm_process 839 814 -25 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 9/-25) Total: -16 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: eliminate struct BcInstPtr::results_len_before_call, it is redundantDenys Vlasenko2019-01-041-10/+1
| | | | | | | | | | function old new delta zbc_program_call 332 318 -14 zxc_program_exec 4147 4087 -60 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-74) Total: -74 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: add a palceholder comment for "void" returnDenys Vlasenko2019-01-041-11/+15
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: remove extra div/0 test, remove test for string function parameterDenys Vlasenko2019-01-041-8/+7
| | | | | | | | | | function old new delta zbc_program_call 354 332 -22 zxc_program_assign 426 385 -41 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-63) Total: -63 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: fix "...; return}" to work, disallow "return ()"Denys Vlasenko2019-01-031-8/+5
| | | | | | | | | | | function old new delta zbc_parse_expr 24 1865 +1841 zbc_parse_stmt_possibly_auto 1425 1413 -12 bc_parse_expr_empty_ok 1843 - -1843 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/1 up/down: 1841/-1855) Total: -14 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: make error line number also size_t, like everything elseDenys Vlasenko2019-01-021-6/+8
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: speed up string printing, fix print ""Denys Vlasenko2019-01-021-44/+22
| | | | | | | | | | | | | function old new delta static.esc - 9 +9 zxc_program_print 681 683 +2 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/0 up/down: 11/0) Total: 11 bytes text data bss dec hex filename 979144 485 7296 986925 f0f2d busybox_old 979062 485 7296 986843 f0edb busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: upstream fixesDenys Vlasenko2019-01-011-83/+94
| | | | | | | | | | | | | | | | | function old new delta bc_parse_expr_empty_ok 1764 1843 +79 bc_error_at - 62 +62 bc_parse_inst_isLeaf - 30 +30 zbc_func_insert 100 120 +20 bc_error_bad_function_definition - 10 +10 bc_error_bad_assignment - 10 +10 zxc_lex_next 1608 1614 +6 ok_in_expr 30 - -30 zxc_vm_process 874 839 -35 ------------------------------------------------------------------------------ (add/remove: 4/1 grow/shrink: 3/1 up/down: 217/-65) Total: 152 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: in xc_read_line(), check ^C on NUL input bytes tooDenys Vlasenko2019-01-011-4/+6
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: remove superfluous assigmentDenys Vlasenko2018-12-311-1/+2
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: support ibase up to 36 (GNU compat)Denys Vlasenko2018-12-311-19/+31
| | | | | | | function old new delta zxc_program_num 995 1018 +23 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: fold xc_lex_more_input() into peek_inbuf()Denys Vlasenko2018-12-311-22/+9
| | | | | | | function old new delta peek_inbuf 69 56 -13 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: tidying up, no logic changesDenys Vlasenko2018-12-301-43/+44
| | | | | | | | | | | function old new delta bc_ops_prec_and_assoc - 25 +25 xc_vm_init 665 663 -2 bc_parse_ops 25 - -25 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 0/1 up/down: 25/-27) Total: -2 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: simplify representation of 0.5 in sqrt()Denys Vlasenko2018-12-291-10/+15
| | | | | | | | | | function old new delta zxc_program_exec 4012 4149 +137 zdc_program_printStream 144 - -144 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/0 up/down: 137/-144) Total: -7 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: remove special-cased assignment to ibase, it works correctly with ↵Denys Vlasenko2018-12-291-24/+19
| | | | | | | | | | | | | | | | | | | | general rules function old new delta zxc_program_print 683 681 -2 zxc_program_prep 91 89 -2 zxc_program_copyToVar 300 298 -2 zdc_program_printStream 146 144 -2 zdc_program_execStr 520 518 -2 zdc_program_asciify 370 368 -2 zxc_program_exec 4016 4012 -4 zdc_program_modexp 694 688 -6 zxc_program_num 1020 995 -25 zxc_program_binOpPrep 306 243 -63 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/10 up/down: 0/-110) Total: -110 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: more fixes for unusual input basesDenys Vlasenko2018-12-291-6/+13
| | | | | | | | | | function old new delta zxc_program_num 990 1020 +30 zxc_lex_number 172 202 +30 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 60/0) Total: 60 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: fix handling of "digits" above 9Denys Vlasenko2018-12-291-19/+63
| | | | | | | | | | | | function old new delta zxc_lex_next 1573 1608 +35 xc_parse_pushIndex 58 56 -2 xc_program_index 71 63 -8 zxc_program_num 1022 990 -32 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/3 up/down: 35/-42) Total: -7 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: bc enables FEATURE_DC_BIG, for correct dc testsuite operationDenys Vlasenko2018-12-281-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: rename config optionsDenys Vlasenko2018-12-281-37/+26
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* config: update size informationDenys Vlasenko2018-12-281-2/+2
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: rename functions common to bc and dc as xc_FOO()Denys Vlasenko2018-12-271-408/+397
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: G.prog.zero does not need initializing num[] vectorDenys Vlasenko2018-12-271-2/+2
| | | | | | | function old new delta bc_vm_init 676 665 -11 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: use ALIGN1 where appropriateDenys Vlasenko2018-12-261-4/+4
| | | | | | | | text data bss dec hex filename 980138 485 7296 987919 f130f busybox_old 980128 485 7296 987909 f1305 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: undo debugging change, add a small optimizationDenys Vlasenko2018-12-261-2/+2
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: simple speedupsDenys Vlasenko2018-12-261-1/+28
| | | | | | | | | | | function old new delta bc_parse_pushName 20 56 +36 bc_program_index 47 71 +24 bc_parse_pushIndex 52 58 +6 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 66/0) Total: 66 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: use '\0' insteads of 0xff (BC_PARSE_STREND) as name terminatorDenys Vlasenko2018-12-261-24/+10
| | | | | | | | | | | | | | function old new delta zdc_program_printStream - 146 +146 zbc_program_exec 4003 4016 +13 zdc_parse_expr 473 470 -3 bc_parse_pushName 31 20 -11 bc_program_name 63 34 -29 zbc_program_pushArray 147 - -147 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 1/3 up/down: 159/-190) Total: -31 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: reduce indentation, no code changesDenys Vlasenko2018-12-261-824/+823
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: fix "bc only" buildDenys Vlasenko2018-12-261-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: fix "dc only" buildDenys Vlasenko2018-12-261-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: comment out code which appears to be never reachedDenys Vlasenko2018-12-261-2/+3
| | | | | | | function old new delta zbc_lex_next 1587 1568 -19 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: remove all logic for multi-line bufferingDenys Vlasenko2018-12-261-125/+19
| | | | | | | | | | | | function old new delta zbc_vm_process 865 874 +9 zbc_parse_text_init 51 38 -13 bc_read_line 394 345 -49 peek_inbuf 292 69 -223 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/3 up/down: 9/-285) Total: -276 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: prepare for char-by-char input handlingDenys Vlasenko2018-12-261-233/+210
| | | | | | | | | | | | | | | | | | | function old new delta peek_inbuf - 292 +292 parse_lex_by_checking_eq_sign - 26 +26 eat_inbuf - 22 +22 zbc_vm_execute_FILE 52 61 +9 bc_lex_lineComment 29 30 +1 zbc_lex_number 174 172 -2 bc_vm_run 104 99 -5 zbc_num_divmod 156 150 -6 bc_lex_file 24 - -24 bc_lex_assign 26 - -26 zbc_lex_next 1982 1587 -395 ------------------------------------------------------------------------------ (add/remove: 3/2 grow/shrink: 2/4 up/down: 350/-458) Total: -108 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: fix handling of comment/string interactions while buffering inputDenys Vlasenko2018-12-261-38/+74
| | | | | | | | | | | function old new delta zbc_lex_next 1965 1982 +17 zbc_num_divmod 150 156 +6 bc_read_line 411 394 -17 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 23/-17) Total: 6 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: fix interactive handling of comments in strings and quotes in commentsDenys Vlasenko2018-12-251-16/+20
| | | | | | | function old new delta zbc_lex_next 1965 1979 +14 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: simplify input pointer manipulation while lexingDenys Vlasenko2018-12-251-60/+55
| | | | | | | | | | | | | | | | function old new delta bc_lex_name 70 68 -2 zbc_lex_number 177 174 -3 bc_vm_init 679 676 -3 bc_lex_whitespace 42 39 -3 zbc_parse_text_init 55 51 -4 bc_lex_lineComment 37 29 -8 bc_lex_assign 34 26 -8 zbc_lex_next 2039 1965 -74 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/8 up/down: 0/-105) Total: -105 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* bc: fold struct BcLex into BcParseDenys Vlasenko2018-12-251-267/+262
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>