oweals/busybox.git
5 years agobc: it's not clear bc_vm_file() always exits on errors, remove ERRORS_ARE_FATAL
Denys Vlasenko [Mon, 10 Dec 2018 19:56:08 +0000 (20:56 +0100)]
bc: it's not clear bc_vm_file() always exits on errors, remove ERRORS_ARE_FATAL

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: more ERRORS_ARE_FATAL annotations
Denys Vlasenko [Mon, 10 Dec 2018 19:41:05 +0000 (20:41 +0100)]
bc: more ERRORS_ARE_FATAL annotations

function                                             old     new   delta
bc_program_exec                                     3920    3969     +49
bc_program_call                                      329     325      -4
bc_vm_run                                            622     616      -6
bc_program_modexp                                    677     668      -9
bc_program_assign                                    471     455     -16
bc_program_pushArray                                 113       -    -113
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/4 up/down: 49/-148)           Total: -99 bytes
   text    data     bss     dec     hex filename
 982872     485    7296  990653   f1dbd busybox_old
 982773     485    7296  990554   f1d5a busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: stop checking for name length in bc_lex_name()
Denys Vlasenko [Mon, 10 Dec 2018 19:26:04 +0000 (20:26 +0100)]
bc: stop checking for name length in bc_lex_name()

Gigabyte-long names are not a practical concern.

function                                             old     new   delta
bc_lex_name                                           73      69      -4
bc_lex_token                                        1266    1259      -7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-11)             Total: -11 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: optimize non-interactive config: we know that many functions always succeed
Denys Vlasenko [Mon, 10 Dec 2018 19:17:24 +0000 (20:17 +0100)]
bc: optimize non-interactive config: we know that many functions always succeed

function                                             old     new   delta
bc_program_assign                                    475     471      -4
bc_program_prep                                       87      81      -6
bc_parse_parse                                       423     417      -6
bc_num_p                                             440     434      -6
bc_program_printStream                               153     143     -10
bc_program_execStr                                   478     468     -10
bc_parse_auto                                        275     265     -10
bc_num_k                                             925     913     -12
bc_program_copyToVar                                 307     289     -18
bc_program_binOpPrep                                 289     271     -18
bc_num_printNum                                      489     471     -18
bc_num_m                                             287     269     -18
bc_program_pushArray                                 139     113     -26
bc_program_modexp                                    707     677     -30
bc_program_print                                     704     667     -37
bc_program_exec                                     4010    3920     -90
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/16 up/down: 0/-319)          Total: -319 bytes
   text    data     bss     dec     hex filename
 983202     485    7296  990983   f1f07 busybox_old
 982883     485    7296  990664   f1dc8 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: in non-interactive config, let compiler know that error funcs do not return
Denys Vlasenko [Mon, 10 Dec 2018 18:46:53 +0000 (19:46 +0100)]
bc: in non-interactive config, let compiler know that error funcs do not return

function                                             old     new   delta
bc_num_s                                             235     239      +4
bc_lex_next                                           92      91      -1
dc_parse_register                                     53      51      -2
dc_parse_parse                                        46      44      -2
bc_vm_run                                            624     622      -2
bc_program_assignStr                                 146     144      -2
bc_parse_else                                        135     133      -2
bc_parse_body                                        116     114      -2
bc_num_a                                             445     443      -2
bc_func_insert                                        97      95      -2
bc_program_pushVar                                   203     200      -3
bc_parse_text                                        133     130      -3
bc_error_bad_character                                17      14      -3
bc_error                                              14      11      -3
bc_program_printStream                               157     153      -4
bc_program_prep                                       91      87      -4
bc_program_copyToVar                                 311     307      -4
bc_num_ulong                                          95      90      -5
bc_num_p                                             445     440      -5
bc_program_print                                     711     704      -7
bc_parse_endBody                                     365     358      -7
bc_num_r                                             237     230      -7
bc_num_d                                             550     543      -7
dc_lex_token                                         682     674      -8
bc_program_pushArray                                 147     139      -8
bc_program_assign                                    485     475     -10
bc_program_read                                      333     322     -11
bc_lex_token                                        1278    1266     -12
bc_parse_stmt                                       1780    1767     -13
bc_program_modexp                                    723     707     -16
dc_parse_expr                                        762     744     -18
bc_program_execStr                                   496     478     -18
bc_program_call                                      347     329     -18
bc_vm_file                                           219     197     -22
bc_program_binOpPrep                                 311     289     -22
bc_parse_name                                        539     513     -26
bc_parse_parse                                       451     423     -28
bc_program_num                                       912     880     -32
bc_read_line                                         172     139     -33
bc_program_exec                                     4048    4010     -38
bc_parse_auto                                        313     275     -38
bc_parse_expr_empty_ok                              2095    2036     -59
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/41 up/down: 4/-509)          Total: -505 bytes
   text    data     bss     dec     hex filename
 983707     485    7296  991488   f2100 busybox_old
 983202     485    7296  990983   f1f07 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: prepare for ECDH_anon ciphers
Denys Vlasenko [Mon, 10 Dec 2018 18:19:38 +0000 (19:19 +0100)]
tls: prepare for ECDH_anon ciphers

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: fix a potential (currently "disabled" by a macro) SHA1-related bug
Denys Vlasenko [Mon, 10 Dec 2018 17:49:29 +0000 (18:49 +0100)]
tls: fix a potential (currently "disabled" by a macro) SHA1-related bug

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: if !ENABLE_FEATURE_TLS_SHA1, tls->MAC_size is always SHA256_OUTSIZE for AES-CBC
Denys Vlasenko [Mon, 10 Dec 2018 15:43:53 +0000 (16:43 +0100)]
tls: if !ENABLE_FEATURE_TLS_SHA1, tls->MAC_size is always SHA256_OUTSIZE for AES-CBC

function                                             old     new   delta
tls_xread_record                                     634     636      +2
xwrite_encrypted                                     579     580      +1
tls_handshake                                       2095    2085     -10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 3/-10)              Total: -7 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: introduce FEATURE_TLS_SHA1 to make SHA1 code optional
Denys Vlasenko [Mon, 10 Dec 2018 15:14:58 +0000 (16:14 +0100)]
tls: introduce FEATURE_TLS_SHA1 to make SHA1 code optional

When disabled:

function                                             old     new   delta
xwrite_encrypted                                     580     579      -1
prf_hmac_sha256                                      222     217      -5
hmac_begin                                           158     149      -9
static.ciphers                                        32      20     -12
tls_handshake                                       2115    2095     -20
hmac                                                  87      61     -26
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/6 up/down: 0/-73)             Total: -73 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify bc_num_parseDecimal() further
Denys Vlasenko [Mon, 10 Dec 2018 14:38:52 +0000 (15:38 +0100)]
bc: simplify bc_num_parseDecimal() further

function                                             old     new   delta
bc_program_num                                       925     912     -13

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: make all function pointers FAST_FUNC, on i486 this saves ~400 bytes
Denys Vlasenko [Mon, 10 Dec 2018 14:37:14 +0000 (15:37 +0100)]
bc: make all function pointers FAST_FUNC, on i486 this saves ~400 bytes

function                                             old     new   delta
bc_num_rem                                            91      95      +4
bc_num_inv                                            53      56      +3
bc_num_d                                             569     572      +3
bc_num_printDigits                                   136     137      +1
bc_program_assign                                    486     485      -1
dc_lex_token                                         684     682      -2
bc_vec_pop                                            27      25      -2
bc_vec_npop                                           55      53      -2
bc_program_read                                      335     333      -2
bc_program_print                                     713     711      -2
bc_parse_parse                                       462     460      -2
bc_lex_token                                        1280    1278      -2
bc_num_printChar                                      27      24      -3
bc_num_binary                                        150     147      -3
dc_parse_parse                                        59      55      -4
bc_vm_run                                            630     626      -4
bc_num_printHex                                       71      67      -4
bc_num_divmod                                        155     150      -5
bc_vec_free                                           24      18      -6
bc_string_free                                        15       9      -6
bc_num_free                                           15       9      -6
bc_id_free                                            15       9      -6
bc_parse_free                                         53      46      -7
bc_program_scale                                       8       -      -8
bc_num_r                                             245     237      -8
bc_func_free                                          35      27      -8
bc_result_free                                        57      46     -11
bc_num_a                                             454     443     -11
bc_num_sub                                            77      65     -12
bc_num_add                                            77      65     -12
bc_program_modexp                                    736     723     -13
bc_num_s                                             252     239     -13
bc_num_mul                                            62      49     -13
bc_num_mod                                            62      49     -13
bc_num_div                                            62      49     -13
bc_num_pow                                            47      31     -16
bc_program_exec                                     4081    4059     -22
bc_num_printNum                                      514     489     -25
bc_num_p                                             478     445     -33
bc_program_len                                        34       -     -34
bc_program_num                                       963     925     -38
bc_num_k                                             988     944     -44
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 4/36 up/down: 11/-416)         Total: -405 bytes
   text    data     bss     dec     hex filename
 984536     485    7296  992317   f243d busybox_old
 984131     485    7296  991912   f22a8 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: 0xffffffffffffffff may be larger than unsigned long
Denys Vlasenko [Mon, 10 Dec 2018 14:15:42 +0000 (15:15 +0100)]
bc: 0xffffffffffffffff may be larger than unsigned long

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: optimize bc_vec_concat()
Denys Vlasenko [Mon, 10 Dec 2018 14:12:58 +0000 (15:12 +0100)]
bc: optimize bc_vec_concat()

function                                             old     new   delta
bc_vec_concat                                         71      66      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify bc_program_len()
Denys Vlasenko [Mon, 10 Dec 2018 11:57:01 +0000 (12:57 +0100)]
bc: simplify bc_program_len()

function                                             old     new   delta
bc_program_len                                        42      34      -8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify bc_program_print()
Denys Vlasenko [Mon, 10 Dec 2018 11:33:40 +0000 (12:33 +0100)]
bc: simplify bc_program_print()

function                                             old     new   delta
bc_program_print                                     730     713     -17

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify bc_num_ulong2num()
Denys Vlasenko [Mon, 10 Dec 2018 11:22:15 +0000 (12:22 +0100)]
bc: simplify bc_num_ulong2num()

function                                             old     new   delta
bc_num_ulong2num                                      64      59      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: move str-to-num conversion functions to their only caller, bc_num_parse()
Denys Vlasenko [Mon, 10 Dec 2018 10:54:18 +0000 (11:54 +0100)]
bc: move str-to-num conversion functions to their only caller, bc_num_parse()

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: further simplify string-to-number conversion code
Denys Vlasenko [Sun, 9 Dec 2018 12:33:52 +0000 (13:33 +0100)]
bc: further simplify string-to-number conversion code

function                                             old     new   delta
bc_program_index                                      66      64      -2
bc_program_num                                       983     963     -20
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-22)             Total: -22 bytes
   text    data     bss     dec     hex filename
 985706     477    7296  993479   f28c7 busybox_old
 985684     477    7296  993457   f28b1 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify string-tonumber conversion code
Denys Vlasenko [Sun, 9 Dec 2018 12:21:54 +0000 (13:21 +0100)]
bc: simplify string-tonumber conversion code

function                                             old     new   delta
bc_program_num                                      1108     983    -125
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-125)           Total: -125 bytes
   text    data     bss     dec     hex filename
 985831     477    7296  993604   f2944 busybox_old
 985706     477    7296  993479   f28c7 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: no need to "set to zero" BcNum after bc_num_init(), it already is
Denys Vlasenko [Sun, 9 Dec 2018 11:04:44 +0000 (12:04 +0100)]
bc: no need to "set to zero" BcNum after bc_num_init(), it already is

function                                             old     new   delta
bc_num_init                                           48      49      +1
bc_program_num                                      1115    1108      -7
bc_program_exec                                     4098    4081     -17
bc_vm_init                                           786     768     -18
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 1/-42)             Total: -41 bytes
   text    data     bss     dec     hex filename
 985872     477    7296  993645   f296d busybox_old
 985831     477    7296  993604   f2944 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: add and use bc_num_init_DEF_SIZE()
Denys Vlasenko [Sun, 9 Dec 2018 10:44:20 +0000 (11:44 +0100)]
bc: add and use bc_num_init_DEF_SIZE()

function                                             old     new   delta
bc_num_init_DEF_SIZE                                   -      10     +10
bc_num_binary                                        150     148      -2
bc_program_pushVar                                   208     203      -5
bc_program_modexp                                    741     736      -5
bc_program_copyToVar                                 316     311      -5
bc_program_call                                      352     347      -5
bc_array_expand                                       88      83      -5
bc_program_num                                      1125    1115     -10
bc_vm_init                                           821     786     -35
bc_program_exec                                     4152    4098     -54
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/9 up/down: 10/-126)          Total: -116 bytes
   text    data     bss     dec     hex filename
 985988     477    7296  993761   f29e1 busybox_old
 985872     477    7296  993645   f296d busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: in bc_program_execStr(), push two variables into inner scope
Denys Vlasenko [Sun, 9 Dec 2018 01:54:06 +0000 (02:54 +0100)]
bc: in bc_program_execStr(), push two variables into inner scope

function                                             old     new   delta
bc_program_execStr                                   502     496      -6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: in bc_program_exec(), push two variables into inner scope
Denys Vlasenko [Sun, 9 Dec 2018 01:24:14 +0000 (02:24 +0100)]
bc: in bc_program_exec(), push two variables into inner scope

While at it, delete empty lines.

function                                             old     new   delta
bc_program_exec                                     4179    4152     -27

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: add accessors for G.prog.strs[idx], G.prog.fns[idx]
Denys Vlasenko [Sat, 8 Dec 2018 23:03:57 +0000 (00:03 +0100)]
bc: add accessors for G.prog.strs[idx], G.prog.fns[idx]

function                                             old     new   delta
bc_program_str                                         -      17     +17
bc_program_func                                        -      17     +17
bc_program_addFunc                                   209     204      -5
bc_program_reset                                      70      64      -6
bc_program_printStream                               163     157      -6
bc_program_print                                     736     730      -6
bc_vm_file                                           226     219      -7
bc_parse_text                                        143     133     -10
bc_parse_reset                                       163     153     -10
bc_parse_endBody                                     375     365     -10
bc_parse_create                                      168     158     -10
bc_parse_addFunc                                      41      31     -10
bc_program_call                                      364     352     -12
bc_program_read                                      350     335     -15
bc_program_execStr                                   528     502     -26
bc_program_exec                                     4219    4179     -40
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 0/14 up/down: 34/-173)         Total: -139 bytes
   text    data     bss     dec     hex filename
 985043     485    7296  992824   f2638 busybox_old
 984904     485    7296  992685   f25ad busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: eliminate always the same params to bc_num_printBase()
Denys Vlasenko [Sat, 8 Dec 2018 22:48:53 +0000 (23:48 +0100)]
bc: eliminate always the same params to bc_num_printBase()

function                                             old     new   delta
bc_program_print                                     739     736      -3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: remove redundant error checks in bc_parse_print()
Denys Vlasenko [Sat, 8 Dec 2018 22:36:28 +0000 (23:36 +0100)]
bc: remove redundant error checks in bc_parse_print()

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: stop propagating pointer to G.prog.nchars deep into printing functions
Denys Vlasenko [Sat, 8 Dec 2018 22:18:06 +0000 (23:18 +0100)]
bc: stop propagating pointer to G.prog.nchars deep into printing functions

function                                             old     new   delta
bc_num_printHex                                       62      71      +9
bc_num_printNewline                                   47      54      +7
bc_num_printDigits                                   132     136      +4
bc_num_printChar                                      23      27      +4
bc_program_printStream                               173     163     -10
bc_program_print                                     754     739     -15
bc_num_printNum                                      538     514     -24
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/3 up/down: 24/-49)            Total: -25 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: do not pass line width in parameters, it's in globals
Denys Vlasenko [Sat, 8 Dec 2018 20:56:37 +0000 (21:56 +0100)]
bc: do not pass line width in parameters, it's in globals

function                                             old     new   delta
bc_num_printNewline                                   36      47     +11
bc_num_printHex                                       70      62      -8
bc_num_printDigits                                   142     132     -10
bc_program_printStream                               185     173     -12
bc_program_print                                     773     754     -19
bc_num_printNum                                      563     538     -25
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/5 up/down: 11/-74)            Total: -63 bytes
   text    data     bss     dec     hex filename
 985122     485    7296  992903   f2687 busybox_old
 985059     485    7296  992840   f2648 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: remove "ready for more input" message, GNU bc does not print that
Denys Vlasenko [Sat, 8 Dec 2018 20:39:10 +0000 (21:39 +0100)]
bc: remove "ready for more input" message, GNU bc does not print that

function                                             old     new   delta
bc_read_line                                         285     268     -17
bc_vm_run                                            684     630     -54
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-71)             Total: -71 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: AES-GCM: in GMULT, avoid memcpy, use one less variable in bit loop
Denys Vlasenko [Sat, 8 Dec 2018 20:24:38 +0000 (21:24 +0100)]
tls: AES-GCM: in GMULT, avoid memcpy, use one less variable in bit loop

function                                             old     new   delta
GMULT                                                168     159      -9

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: trim banner, use empty interactive prompts (GNU bc compat)
Denys Vlasenko [Sat, 8 Dec 2018 18:34:35 +0000 (19:34 +0100)]
bc: trim banner, use empty interactive prompts (GNU bc compat)

function                                             old     new   delta
bc_vm_run                                            689     684      -5
bc_program_read                                      355     350      -5
bc_read_line                                         307     285     -22
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-32)             Total: -32 bytes
   text    data     bss     dec     hex filename
 985409     485    7296  993190   f27a6 busybox_old
 985265     485    7296  993046   f2716 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agodc: fix "small dc" to have standard command line API
Denys Vlasenko [Sat, 8 Dec 2018 17:59:07 +0000 (18:59 +0100)]
dc: fix "small dc" to have standard command line API

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agolineedit: fix "defined but not used" sigaction2 warning
Denys Vlasenko [Sat, 8 Dec 2018 14:45:46 +0000 (15:45 +0100)]
lineedit: fix "defined but not used" sigaction2 warning

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agomdev: suppress aliasing warning
Denys Vlasenko [Sat, 8 Dec 2018 14:41:17 +0000 (15:41 +0100)]
mdev: suppress aliasing warning

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agoinetd: suppress aliasing warning
Denys Vlasenko [Sat, 8 Dec 2018 14:35:24 +0000 (15:35 +0100)]
inetd: suppress aliasing warning

function                                             old     new   delta
sigprocmask2                                           -       8      +8
wait_for_child_or_signal                             213     218      +5
dowait                                               424     429      +5
block_CHLD_HUP_ALRM                                   62      59      -3
sigprocmask_SIG_SETMASK                               16       -     -16
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 2/1 up/down: 18/-19)             Total: -1 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agosuppress gcc 8 aliasing warnings
Denys Vlasenko [Sat, 8 Dec 2018 12:49:15 +0000 (13:49 +0100)]
suppress gcc 8 aliasing warnings

function                                             old     new   delta
sigprocmask_SIG_SETMASK                                -      16     +16
wait_for_child_or_signal                             221     213      -8
dowait                                               432     424      -8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agotls: make RIGHTSHIFTX() in AES-GCM faster
Denys Vlasenko [Sat, 8 Dec 2018 12:34:43 +0000 (13:34 +0100)]
tls: make RIGHTSHIFTX() in AES-GCM faster

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: replace G.eof with a special exit code of bc_vm_stdin()
Denys Vlasenko [Fri, 7 Dec 2018 15:35:43 +0000 (16:35 +0100)]
bc: replace G.eof with a special exit code of bc_vm_stdin()

function                                             old     new   delta
bc_read_line                                         305     307      +2
bc_vm_run                                            701     689     -12
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 2/-12)             Total: -10 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: convert two macros to functions, unwing one complex max(a,min(b,c))
Denys Vlasenko [Fri, 7 Dec 2018 15:22:45 +0000 (16:22 +0100)]
bc: convert two macros to functions, unwing one complex max(a,min(b,c))

function                                             old     new   delta
BC_NUM_AREQ                                            -      45     +45
BC_NUM_MREQ                                            -      33     +33
bc_num_rem                                           104      91     -13
bc_num_divmod                                        168     155     -13
bc_num_d                                             584     569     -15
bc_num_mul                                            80      62     -18
bc_num_mod                                            80      62     -18
bc_num_div                                            80      62     -18
bc_num_sub                                           112      77     -35
bc_num_add                                           112      77     -35
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 0/8 up/down: 78/-165)           Total: -87 bytes
   text    data     bss     dec     hex filename
 985526     485    7296  993307   f281b busybox_old
 985439     485    7296  993220   f27c4 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: do not perform domr limit checks when they can't work (e.g. on 32-bit arches)
Denys Vlasenko [Fri, 7 Dec 2018 14:50:14 +0000 (15:50 +0100)]
bc: do not perform domr limit checks when they can't work (e.g. on 32-bit arches)

Also, optimize printing of messages with fixed limit strings
by including limits as strings.

function                                             old     new   delta
bc_num_ulong                                         103      95      -8
bc_lex_number                                        296     281     -15
dc_lex_token                                         701     684     -17
bc_lex_name                                           90      73     -17
bc_num_shift                                          72      54     -18
bc_lex_token                                        1299    1280     -19
bc_parse_stmt                                       1868    1768    -100
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/7 up/down: 0/-194)           Total: -194 bytes
   text    data     bss     dec     hex filename
 985814     485    7296  993595   f293b busybox_old
 985526     485    7296  993307   f281b busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: pull temporary into a register
Denys Vlasenko [Fri, 7 Dec 2018 14:10:05 +0000 (15:10 +0100)]
bc: pull temporary into a register

function                                             old     new   delta
bc_num_ulong                                         103      95      -8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: use more compact parsing data structures
Denys Vlasenko [Fri, 7 Dec 2018 11:57:32 +0000 (12:57 +0100)]
bc: use more compact parsing data structures

function                                             old     new   delta
dc_lex_token                                         697     701      +4
bc_parse_next_rel                                     20       -     -20
bc_parse_next_read                                    20       -     -20
bc_parse_next_print                                   20       -     -20
bc_parse_next_param                                   20       -     -20
bc_parse_next_for                                     20       -     -20
bc_parse_next_expr                                    20       -     -20
bc_parse_next_elem                                    20       -     -20
common_parse_expr                                     62      40     -22
bc_parse_expr                                         49      24     -25
dc_lex_regs                                           52      13     -39
bc_parse_name                                        581     539     -42
bc_parse_expr_empty_ok                              2157    2108     -49
dc_parse_insts                                       332      83    -249
dc_lex_tokens                                        364      91    -273
bc_parse_stmt                                       2261    1868    -393
------------------------------------------------------------------------------
(add/remove: 0/7 grow/shrink: 1/8 up/down: 4/-1232)         Total: -1228 bytes
   text    data     bss     dec     hex filename
 987037     485    7296  994818   f2e02 busybox_old
 985814     485    7296  993595   f293b busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: use only G_interrupt as interrupt flag
Denys Vlasenko [Fri, 7 Dec 2018 11:41:42 +0000 (12:41 +0100)]
bc: use only G_interrupt as interrupt flag

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix exit codes for FEATURE_CLEAN_UP=y
Denys Vlasenko [Thu, 6 Dec 2018 22:06:57 +0000 (23:06 +0100)]
bc: fix exit codes for FEATURE_CLEAN_UP=y

$ echo 0/0 | ./busybox bc; echo $?
bc: divide by zero
1
$ echo halt | ./busybox bc; echo $?
0   <------- was 1

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agodc: fix testsuite
Denys Vlasenko [Thu, 6 Dec 2018 17:46:42 +0000 (18:46 +0100)]
dc: fix testsuite

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: correctly parse dc options
Denys Vlasenko [Thu, 6 Dec 2018 17:41:59 +0000 (18:41 +0100)]
bc: correctly parse dc options

function                                             old     new   delta
bc_vm_init                                             -     821    +821
bc_vm_file                                             -     226    +226
dc_main                                               41     187    +146
bc_main                                               41      73     +32
packed_usage                                       33076   33059     -17
bc_vm_run                                           1903     701   -1202
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 2/2 up/down: 1225/-1219)          Total: 6 bytes
   text    data     bss     dec     hex filename
 987046     485    7296  994827   f2e0b busybox_old
 987037     485    7296  994818   f2e02 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agodc: fix "dc does_not_exist" SEGVing
Denys Vlasenko [Thu, 6 Dec 2018 14:21:39 +0000 (15:21 +0100)]
dc: fix "dc does_not_exist" SEGVing

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agofix make_single_applets.sh
Denys Vlasenko [Thu, 6 Dec 2018 13:10:10 +0000 (14:10 +0100)]
fix make_single_applets.sh

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: code shrink - convert two macros to functions
Denys Vlasenko [Thu, 6 Dec 2018 12:10:56 +0000 (13:10 +0100)]
bc: code shrink - convert two macros to functions

function                                             old     new   delta
bc_program_printStream                                 -     185    +185
bc_program_pushArray                                   -     147    +147
bc_program_exec                                     4132    4219     +87
bc_vec_pop                                             -      27     +27
bc_vec_top                                             -      13     +13
bc_num_ulong                                          92     103     +11
bc_vm_run                                           1905    1903      -2
bc_vm_process                                         94      92      -2
bc_program_reset                                      72      70      -2
bc_program_prep                                       93      91      -2
bc_program_call                                      366     364      -2
bc_parse_startBody                                    47      45      -2
bc_parse_parse                                       464     462      -2
bc_parse_else                                        137     135      -2
bc_parse_body                                        118     116      -2
bc_program_num                                      1129    1125      -4
bc_parse_text                                        147     143      -4
bc_program_retire                                     40      35      -5
bc_program_print                                     778     773      -5
bc_program_modexp                                    746     741      -5
bc_program_pushVar                                   215     208      -7
bc_program_copyToVar                                 323     316      -7
bc_parse_operator                                    184     177      -7
bc_parse_noElse                                       65      56      -9
bc_program_binOpRetire                                56      46     -10
bc_parse_stmt                                       2271    2261     -10
bc_program_execStr                                   543     528     -15
bc_program_assignStr                                 161     146     -15
bc_parse_expr_empty_ok                              2178    2157     -21
bc_parse_endBody                                     420     375     -45
bc_program_asciify                                   464       -    -464
------------------------------------------------------------------------------
(add/remove: 4/1 grow/shrink: 2/24 up/down: 470/-651)        Total: -181 bytes
   text    data     bss     dec     hex filename
 987227     485    7296  995008   f2ec0 busybox_old
 987046     485    7296  994827   f2e0b busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: make keyword POSIXness check more readable
Denys Vlasenko [Thu, 6 Dec 2018 11:59:40 +0000 (12:59 +0100)]
bc: make keyword POSIXness check more readable

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: move a function to reduce forward declarations
Denys Vlasenko [Thu, 6 Dec 2018 11:54:26 +0000 (12:54 +0100)]
bc: move a function to reduce forward declarations

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: small simplification in dc_lex_token()
Denys Vlasenko [Thu, 6 Dec 2018 11:47:17 +0000 (12:47 +0100)]
bc: small simplification in dc_lex_token()

Pulling array element into a temporary, taking address of this temporary
and copying it? That's much unnecessary work.

function                                             old     new   delta
dc_lex_token                                         701     697      -4

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: add comment about BC_NUM_DEF_SIZE
Denys Vlasenko [Thu, 6 Dec 2018 11:34:39 +0000 (12:34 +0100)]
bc: add comment about BC_NUM_DEF_SIZE

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix for prev commit
Denys Vlasenko [Thu, 6 Dec 2018 11:06:16 +0000 (12:06 +0100)]
bc: fix for prev commit

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: do not needlessly use strcat
Denys Vlasenko [Thu, 6 Dec 2018 11:01:17 +0000 (12:01 +0100)]
bc: do not needlessly use strcat

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: unbreak "BC only" and "DC only" configs
Denys Vlasenko [Thu, 6 Dec 2018 10:43:17 +0000 (11:43 +0100)]
bc: unbreak "BC only" and "DC only" configs

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agodc: re-enable "tiny dc" implementation
Denys Vlasenko [Thu, 6 Dec 2018 10:31:14 +0000 (11:31 +0100)]
dc: re-enable "tiny dc" implementation

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: unbreak FEATURE_CLEAN_UP build
Denys Vlasenko [Thu, 6 Dec 2018 10:12:38 +0000 (11:12 +0100)]
bc: unbreak FEATURE_CLEAN_UP build

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: reuse common string
Denys Vlasenko [Thu, 6 Dec 2018 10:10:11 +0000 (11:10 +0100)]
bc: reuse common string

   text    data     bss     dec     hex filename
 987232     485    7296  995013   f2ec5 busybox_old
 987205     485    7296  994986   f2eaa busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: hook up line editing with history buffer
Denys Vlasenko [Thu, 6 Dec 2018 09:29:12 +0000 (10:29 +0100)]
bc: hook up line editing with history buffer

function                                             old     new   delta
push_input_byte                                        -      65     +65
bc_vm_run                                           1875    1905     +30
bc_read_line                                         303     305      +2
bc_num_binary                                        148     150      +2
bc_num_ulong                                         103      92     -11
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 3/1 up/down: 99/-11)             Total: 88 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: add preparatory indent block, no code changes
Denys Vlasenko [Thu, 6 Dec 2018 09:26:13 +0000 (10:26 +0100)]
bc: add preparatory indent block, no code changes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: if ^C handling is not selected, there is no interactive mode
Denys Vlasenko [Thu, 6 Dec 2018 08:20:32 +0000 (09:20 +0100)]
bc: if ^C handling is not selected, there is no interactive mode

function                                             old     new   delta
packed_usage                                       33023   33076     +53
bc_num_s                                             252     246      -6
bc_vm_run                                           1859    1850      -9
bc_error_fmt                                          36      20     -16
bc_posix_error_fmt                                    58      41     -17
bc_read_line                                         202     168     -34
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/5 up/down: 53/-82)            Total: -29 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix "bc -v" printing version info twice, and not exiting
Denys Vlasenko [Thu, 6 Dec 2018 08:07:06 +0000 (09:07 +0100)]
bc: fix "bc -v" printing version info twice, and not exiting

function                                             old     new   delta
bc_args                                              123     130      +7
bc_num_binary                                        150     148      -2
static.nullptr                                         4       -      -4
bc_vm_run                                           1883    1874      -9
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/2 up/down: 7/-15)              Total: -8 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: make bc_vm_envArgs() NULL-terminate its argv, simplify bc_vm_envLen()
Denys Vlasenko [Wed, 5 Dec 2018 23:46:09 +0000 (00:46 +0100)]
bc: make bc_vm_envArgs() NULL-terminate its argv, simplify bc_vm_envLen()

function                                             old     new   delta
bc_num_ulong                                          92     103     +11
static.nullptr                                         -       4      +4
bc_args                                              120     123      +3
static.bc_args_env_name                                4       -      -4
dc_main                                               49      41      -8
bc_main                                               49      41      -8
bc_vm_run                                           1917    1883     -34
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 2/3 up/down: 18/-54)            Total: -36 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: if FEATURE_CLEAN_UP, clean up allocations on exits
Denys Vlasenko [Wed, 5 Dec 2018 23:29:22 +0000 (00:29 +0100)]
bc: if FEATURE_CLEAN_UP, clean up allocations on exits

Will have exitcode 1 even on "quit" and "halt", is it a problem?

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: do not allow "()" as a valid expression
Denys Vlasenko [Wed, 5 Dec 2018 21:40:44 +0000 (22:40 +0100)]
bc: do not allow "()" as a valid expression

function                                             old     new   delta
bc_parse_expr_empty_ok                                 -    2178   +2178
bc_parse_expr                                       2178      49   -2129
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/1 up/down: 2178/-2129)         Total: 49 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: reorder functions, delete forward declarations, no code changes - part 2
Denys Vlasenko [Wed, 5 Dec 2018 20:15:46 +0000 (21:15 +0100)]
bc: reorder functions, delete forward declarations, no code changes - part 2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: reorder functions, delete forward declarations, no code changes
Denys Vlasenko [Wed, 5 Dec 2018 20:03:16 +0000 (21:03 +0100)]
bc: reorder functions, delete forward declarations, no code changes

Pure block moves of text

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: remove unused strings
Denys Vlasenko [Wed, 5 Dec 2018 19:33:23 +0000 (20:33 +0100)]
bc: remove unused strings

   text    data     bss     dec     hex filename
 987088     485    7296  994869   f2e35 busybox_old
 987079     485    7296  994860   f2e2c busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: trivial simplification in bc_parse_return()
Denys Vlasenko [Wed, 5 Dec 2018 19:28:26 +0000 (20:28 +0100)]
bc: trivial simplification in bc_parse_return()

function                                             old     new   delta
bc_parse_stmt                                       2276    2271      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix "warning: 's' may be used uninitialized in this function"
Denys Vlasenko [Wed, 5 Dec 2018 19:25:03 +0000 (20:25 +0100)]
bc: fix "warning: 's' may be used uninitialized in this function"

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: code shrink
Denys Vlasenko [Wed, 5 Dec 2018 19:17:48 +0000 (20:17 +0100)]
bc: code shrink

function                                             old     new   delta
bc_parse_expr                                       2151    2178     +27
bc_parse_exprs                                        60       -     -60
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 2/0 up/down: 27/-60)            Total: -33 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: code shrink
Denys Vlasenko [Wed, 5 Dec 2018 18:37:19 +0000 (19:37 +0100)]
bc: code shrink

function                                             old     new   delta
bc_parse_operator                                    181     184      +3
bc_parse_ops                                          50      25     -25
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 3/-25)             Total: -22 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: make division operation interruptible
Denys Vlasenko [Wed, 5 Dec 2018 18:21:34 +0000 (19:21 +0100)]
bc: make division operation interruptible

function                                             old     new   delta
bc_num_d                                             564     584     +20
bc_num_r                                             230     245     +15
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 35/0)               Total: 35 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: use unsigned division by 10 instead of signed
Denys Vlasenko [Wed, 5 Dec 2018 18:05:32 +0000 (19:05 +0100)]
bc: use unsigned division by 10 instead of signed

function                                             old     new   delta
bc_num_k                                             990     988      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: move ^C check fro power calculation to multiplication
Denys Vlasenko [Wed, 5 Dec 2018 18:00:58 +0000 (19:00 +0100)]
bc: move ^C check fro power calculation to multiplication

function                                             old     new   delta
bc_num_k                                             971     990     +19
bc_num_p                                             507     478     -29
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 19/-29)            Total: -10 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: bc_num_k(): move carry,i,j,len to inner scope
Denys Vlasenko [Wed, 5 Dec 2018 17:56:14 +0000 (18:56 +0100)]
bc: bc_num_k(): move carry,i,j,len to inner scope

This might help compiler

function                                             old     new   delta
bc_num_k                                             957     971     +14

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: tweak error messages
Denys Vlasenko [Wed, 5 Dec 2018 17:31:19 +0000 (18:31 +0100)]
bc: tweak error messages

function                                             old     new   delta
bc_lex_token                                        1285    1299     +14

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix inverted POSIXness test, improve messages, commonalize message strings
Denys Vlasenko [Wed, 5 Dec 2018 17:12:27 +0000 (18:12 +0100)]
bc: fix inverted POSIXness test, improve messages, commonalize message strings

function                                             old     new   delta
bc_lex_token                                        1251    1285     +34
bc_POSIX_does_not_allow_bool_ops_this_is_bad           -      25     +25
bc_POSIX_does_not_allow_empty_X_expression_in_for      -      20     +20
bc_POSIX_does_not_allow                                -      20     +20
bc_parse_expr                                       2146    2151      +5
bc_num_ulong                                         103      92     -11
------------------------------------------------------------------------------
(add/remove: 3/0 grow/shrink: 2/1 up/down: 104/-11)            Total: 93 bytes
   text    data     bss     dec     hex filename
 987210     485    7296  994991   f2eaf busybox_old
 987084     485    7296  994865   f2e31 busybox_unstripped
^^^^^^^

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: print error line numbers
Denys Vlasenko [Wed, 5 Dec 2018 16:48:01 +0000 (17:48 +0100)]
bc: print error line numbers

FILE:
print 1
print "

$ busybox bc -q FILE
bc: FILE:2: string end could not be found
ready for more input
>>> _

function                                             old     new   delta
bc_verror_msg                                          -      99     +99
bc_lex_file                                           12      28     +16
bc_lex_next                                           77      92     +15
dc_lex_token                                         687     701     +14
bc_lex_token                                        1237    1251     +14
bc_posix_error_fmt                                    90      58     -32
bc_error_fmt                                          70      36     -34
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 4/2 up/down: 158/-66)            Total: 92 bytes
   text    data     bss     dec     hex filename
 987108     485    7296  994889   f2e49 busybox_old
 987210     485    7296  994991   f2eaf busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: optimize pushing zero bytes to vectors
Denys Vlasenko [Wed, 5 Dec 2018 15:55:08 +0000 (16:55 +0100)]
bc: optimize pushing zero bytes to vectors

function                                             old     new   delta
bc_vec_pushZeroByte                                    -      10     +10
bc_vm_run                                           1919    1917      -2
bc_vec_string                                         61      59      -2
bc_vec_concat                                         68      66      -2
bc_parse_create                                      170     168      -2
bc_lex_number                                        298     296      -2
dc_lex_token                                         691     687      -4
bc_read_line                                         314     303     -11
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/7 up/down: 10/-25)            Total: -15 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: restore printing of script name on errors
Denys Vlasenko [Wed, 5 Dec 2018 15:39:22 +0000 (16:39 +0100)]
bc: restore printing of script name on errors

Examples:

On stdin, no file name is available:
$ echo 'print "' | busybox bc
bc: string end could not be found

When the same error is in file:
$ busybox bc FILE
bc 1.30.0.git
Copyright (c) 2018 Gavin D. Howard and contributors
Report bugs at: https://github.com/gavinhoward/bc
This is free software with ABSOLUTELY NO WARRANTY
FILE: string end could not be found
ready for more input
>>>

Line number printing to be added later...

function                                             old     new   delta
bc_error_fmt                                          38      70     +32
bc_posix_error_fmt                                    60      90     +30
bc_vm_run                                           1900    1919     +19
bc_program_read                                      338     355     +17
bc_lex_file                                           15      12      -3
bc_program_stdin_name                                  8       -      -8
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 4/1 up/down: 98/-11)             Total: 87 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: do not check for errors when parsing/running internal library
Denys Vlasenko [Wed, 5 Dec 2018 15:21:43 +0000 (16:21 +0100)]
bc: do not check for errors when parsing/running internal library

function                                             old     new   delta
bc_lib_name                                            4       -      -4
bc_vm_run                                           1921    1900     -21
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/1 up/down: 0/-25)             Total: -25 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: shrink error handling code by enabling tail-call optimization
Denys Vlasenko [Wed, 5 Dec 2018 15:03:46 +0000 (16:03 +0100)]
bc: shrink error handling code by enabling tail-call optimization

function                                             old     new   delta
bc_posix_error_fmt                                     -      60     +60
bc_error_fmt                                           -      38     +38
bc_error_bad_character                                 -      17     +17
bc_parse_auto                                        302     313     +11
bc_num_ulong                                          93     103     +10
bc_error_variable_is_wrong_type                        -      10     +10
bc_error_stack_has_too_few_elements                    -      10     +10
bc_error_nested_read_call                              -      10     +10
bc_error_bad_token                                     -      10     +10
bc_error_bad_expression                                -      10     +10
bc_num_d                                             561     564      +3
bc_program_assign                                    484     486      +2
dc_parse_parse                                        60      59      -1
bc_program_num                                      1130    1129      -1
bc_program_call                                      367     366      -1
bc_parse_stmt                                       2277    2276      -1
bc_lex_number                                        299     298      -1
bc_lex_name                                           91      90      -1
bc_func_insert                                        98      97      -1
bc_num_shift                                          74      72      -2
bc_vm_run                                           1924    1921      -3
bc_parse_endBody                                     424     420      -4
bc_lex_next                                           81      77      -4
bc_program_read                                      343     338      -5
bc_program_asciify                                   469     464      -5
bc_program_pushVar                                   221     215      -6
bc_program_print                                     784     778      -6
bc_program_prep                                       99      93      -6
bc_program_assignStr                                 167     161      -6
bc_parse_else                                        143     137      -6
bc_parse_body                                        124     118      -6
dc_parse_register                                     61      53      -8
dc_lex_token                                         699     691      -8
bc_program_modexp                                    756     746     -10
bc_parse_name                                        593     581     -12
dc_parse_expr                                        775     762     -13
bc_program_copyToVar                                 336     323     -13
bc_program_binOpPrep                                 324     311     -13
bc_program_execStr                                   561     543     -18
bc_program_exec                                     4150    4132     -18
bc_parse_parse                                       483     464     -19
bc_error                                              38      14     -24
bc_lex_token                                        1266    1237     -29
bc_posix_error                                        60      14     -46
bc_parse_expr                                       2194    2146     -48
------------------------------------------------------------------------------
(add/remove: 8/0 grow/shrink: 4/33 up/down: 191/-345)        Total: -154 bytes
   text    data     bss     dec     hex filename
 987226     485    7296  995007   f2ebf busybox_old
 987072     485    7296  994853   f2e25 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: make 2^1000000 interruptible faster
Denys Vlasenko [Wed, 5 Dec 2018 00:21:59 +0000 (01:21 +0100)]
bc: make 2^1000000 interruptible faster

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: remove tabs from internal library
Denys Vlasenko [Tue, 4 Dec 2018 23:35:49 +0000 (00:35 +0100)]
bc: remove tabs from internal library

function                                             old     new   delta
bc_lib                                              1877    1674    -203

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: store library in ASCII, shrink keyword parsing code
Denys Vlasenko [Tue, 4 Dec 2018 23:22:34 +0000 (00:22 +0100)]
bc: store library in ASCII, shrink keyword parsing code

Also, use ARRAY_SIZE() where appropriate

function                                             old     new   delta
bc_lib                                              1878    1877      -1
bc_program_index                                      66      64      -2
bc_lex_token                                        1282    1266     -16
bc_lex_kws                                           220     160     -60
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-79)             Total: -79 bytes
   text    data     bss     dec     hex filename
 987518     485    7296  995299   f2fe3 busybox_old
 987440     485    7296  995221   f2f95 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: drop bc_map_init() macro
Denys Vlasenko [Tue, 4 Dec 2018 20:54:33 +0000 (21:54 +0100)]
bc: drop bc_map_init() macro

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: create a few common functions
Denys Vlasenko [Tue, 4 Dec 2018 20:46:47 +0000 (21:46 +0100)]
bc: create a few common functions

function                                             old     new   delta
bc_char_vec_init                                       -      12     +12
bc_vec_pop_all                                         -       8      +8
bc_program_index                                      64      66      +2
bc_vec_string                                         64      61      -3
bc_vec_free                                           27      24      -3
bc_read_line                                         317     314      -3
bc_program_execStr                                   564     561      -3
bc_program_exec                                     4153    4150      -3
bc_program_copyToVar                                 340     336      -4
bc_parse_create                                      175     170      -5
dc_lex_token                                         705     699      -6
bc_program_reset                                      78      72      -6
bc_lex_number                                        305     299      -6
bc_program_read                                      353     343     -10
bc_program_addFunc                                   225     209     -16
bc_vm_run                                           1942    1924     -18
bc_parse_reset                                       181     163     -18
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 1/14 up/down: 22/-104)          Total: -82 bytes
   text    data     bss     dec     hex filename
 987600     485    7296  995381   f3035 busybox_old
 987518     485    7296  995299   f2fe3 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: rewrite "BOOL * EXPR" idiom as if() statement
Denys Vlasenko [Tue, 4 Dec 2018 20:37:56 +0000 (21:37 +0100)]
bc: rewrite "BOOL * EXPR" idiom as if() statement

function                                             old     new   delta
bc_program_index                                      66      64      -2
bc_program_num                                      1147    1130     -17
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-19)             Total: -19 bytes
   text    data     bss     dec     hex filename
 987619     485    7296  995400   f3048 busybox_old
 987600     485    7296  995381   f3035 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: switch to SA_RESTART signal handling
Denys Vlasenko [Tue, 4 Dec 2018 20:21:32 +0000 (21:21 +0100)]
bc: switch to SA_RESTART signal handling

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: get rid of G.tty and G.flags
Denys Vlasenko [Tue, 4 Dec 2018 19:58:40 +0000 (20:58 +0100)]
bc: get rid of G.tty and G.flags

G.flags == option_mask32

function                                             old     new   delta
bc_args                                               97     120     +23
dc_main                                               48      49      +1
bc_main                                               48      49      +1
bc_error                                              42      38      -4
bc_posix_error                                        65      60      -5
bc_read_line                                         325     317      -8
dc_lex_token                                         714     705      -9
bc_vm_run                                           2039    1942     -97
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/5 up/down: 25/-123)           Total: -98 bytes
   text    data     bss     dec     hex filename
 987717     485    7296  995498   f30aa busybox_old
 987619     485    7296  995400   f3048 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: convert all status codes, remove bc_err_msgs[], bc_vm_error(), bc_vm_posixError()
Denys Vlasenko [Tue, 4 Dec 2018 19:51:40 +0000 (20:51 +0100)]
bc: convert all status codes, remove bc_err_msgs[], bc_vm_error(), bc_vm_posixError()

function                                             old     new   delta
bc_posix_error                                         -      65     +65
bc_vm_run                                           1995    2039     +44
bc_err_line                                            7       -      -7
bc_num_ulong                                         103      93     -10
bc_parse_parse                                       495     483     -12
bc_err_fmt                                            12       -     -12
bc_warn_fmt                                           14       -     -14
bc_parse_expr                                       2210    2194     -16
bc_program_reset                                     105      78     -27
bc_vm_process                                        130      94     -36
bc_parse_stmt                                       2313    2277     -36
bc_err_msgs                                           60       -     -60
bc_lex_token                                        1367    1282     -85
bc_vm_error                                          143       -    -143
bc_vm_posixError                                     189       -    -189
------------------------------------------------------------------------------
(add/remove: 1/6 grow/shrink: 1/7 up/down: 109/-647)         Total: -538 bytes
   text    data     bss     dec     hex filename
 988258     485    7296  996039   f32c7 busybox_old
 987717     485    7296  995498   f30aa busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: convert all non-POSIX BC_STATUS_foo codes
Denys Vlasenko [Tue, 4 Dec 2018 19:05:28 +0000 (20:05 +0100)]
bc: convert all non-POSIX BC_STATUS_foo codes

function                                             old     new   delta
bc_program_asciify                                     -     469    +469
bc_parse_parse                                       432     495     +63
dc_parse_expr                                        727     775     +48
bc_vm_run                                           1955    1995     +40
bc_program_num                                      1115    1147     +32
bc_program_binOpPrep                                 296     324     +28
static.msg                                             -      24     +24
bc_parse_name                                        570     593     +23
bc_lex_token                                        1344    1367     +23
dc_lex_token                                         695     714     +19
bc_num_ulong                                          85     103     +18
bc_program_read                                      336     353     +17
dc_parse_parse                                        47      60     +13
bc_parse_stmt                                       2301    2313     +12
bc_parse_auto                                        291     302     +11
bc_program_prep                                       89      99     +10
bc_lex_next                                           71      81     +10
dc_parse_register                                     52      61      +9
bc_program_print                                     775     784      +9
bc_func_insert                                        89      98      +9
bc_program_assignStr                                 159     167      +8
bc_program_assign                                    476     484      +8
bc_parse_body                                        116     124      +8
bc_lex_name                                           83      91      +8
bc_program_pushVar                                   215     221      +6
bc_parse_text                                        141     147      +6
bc_num_shift                                          68      74      +6
bc_num_p                                             472     478      +6
bc_program_execStr                                   559     564      +5
bc_parse_else                                        139     143      +4
bc_lex_number                                        301     305      +4
bc_num_d                                             558     561      +3
bc_parse_endBody                                     422     424      +2
bc_num_r                                             231     230      -1
bc_program_copyToVar                                 343     340      -3
bc_program_call                                      372     367      -5
bc_parse_expr                                       2215    2210      -5
bc_program_modexp                                    763     756      -7
bc_err_msgs                                          164      60    -104
bc_program_pushArray                                 136       -    -136
bc_program_exec                                     4453    4153    -300
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 31/7 up/down: 961/-561)         Total: 400 bytes
   text    data     bss     dec     hex filename
 987766     485    7296  995547   f30db busybox_old
 988258     485    7296  996039   f32c7 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: convert BC_STATUS_EXEC_SIGNAL - its message string was never used
Denys Vlasenko [Tue, 4 Dec 2018 18:11:02 +0000 (19:11 +0100)]
bc: convert BC_STATUS_EXEC_SIGNAL - its message string was never used

function                                             old     new   delta
bc_vm_process                                        132     130      -2
bc_err_msgs                                          168     164      -4
dc_parse_parse                                        52      47      -5
bc_parse_reset                                       187     181      -6
bc_program_ready_msg                                  22       -     -22
bc_program_exec                                     4478    4453     -25
bc_parse_parse                                       461     432     -29
bc_program_reset                                     159     105     -54
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/7 up/down: 0/-147)           Total: -147 bytes
   text    data     bss     dec     hex filename
 987923     485    7296  995704   f3178 busybox_old
 987766     485    7296  995547   f30db busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: convert BC_STATUS_PARSE_NO_AUTO
Denys Vlasenko [Mon, 3 Dec 2018 20:46:41 +0000 (21:46 +0100)]
bc: convert BC_STATUS_PARSE_NO_AUTO

function                                             old     new   delta
bc_parse_auto                                        275     291     +16
bc_err_msgs                                          172     168      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 16/-4)              Total: 12 bytes
   text    data     bss     dec     hex filename
 987911     485    7296  995692   f316c busybox_old
 987923     485    7296  995704   f3178 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: convert BC_STATUS_EXEC_MISMATCHED_PARAMS and BC_STATUS_EXEC_UNDEFINED_FUNC
Denys Vlasenko [Mon, 3 Dec 2018 20:10:57 +0000 (21:10 +0100)]
bc: convert BC_STATUS_EXEC_MISMATCHED_PARAMS and BC_STATUS_EXEC_UNDEFINED_FUNC

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: BC_STATUS_VEC_ITEM_EXISTS is not a real error code, its message was never used
Denys Vlasenko [Mon, 3 Dec 2018 19:35:16 +0000 (20:35 +0100)]
bc: BC_STATUS_VEC_ITEM_EXISTS is not a real error code, its message was never used

It was only used to indicate rusult of bc_map_insert() - did we insert, or
did we find that this key is already in the map?

function                                             old     new   delta
bc_map_insert                                        142     145      +3
bc_program_addFunc                                   226     225      -1
bc_err_msgs                                          184     180      -4
bc_program_search                                    152     143      -9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 3/-14)             Total: -11 bytes
   text    data     bss     dec     hex filename
 987904     485    7296  995685   f3165 busybox_old
 987873     485    7296  995654   f3146 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify bc_lex_comment()
Denys Vlasenko [Mon, 3 Dec 2018 18:12:29 +0000 (19:12 +0100)]
bc: simplify bc_lex_comment()

function                                             old     new   delta
bc_lex_token                                        1369    1344     -25

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: handle BIN_FILE and LEX_BAD_CHAR errors at the site of detection
Denys Vlasenko [Mon, 3 Dec 2018 15:06:02 +0000 (16:06 +0100)]
bc: handle BIN_FILE and LEX_BAD_CHAR errors at the site of detection

The most informative message can be generated at the location
where error is detected. The "error codes" are stupid:
print error meesage immediately, then just return "there was an error"
indicator.

All error codes will be converted. For now, converting these two.

For now, this and following changes will degrade error messages
quality. For example, file name and line number printouts may be lost.
This will be re-added later.

This change anlso fixes handling of invalid stdin input:
this used to cause interactive bc to exit:

....
>>> ς
bc: illegal character 0xcf
bc: illegal character 0x82
>>> _

function                                             old     new   delta
bc_error                                               -      42     +42
bc_lex_token                                        1333    1369     +36
dc_lex_token                                         675     695     +20
bc_read_line                                         311     325     +14
bc_num_a                                             456     454      -2
bc_err_msgs                                          188     184      -4
bc_num_ulong                                          95      85     -10
bc_vm_run                                           1984    1955     -29
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 3/4 up/down: 112/-45)            Total: 67 bytes
   text    data     bss     dec     hex filename
 987828     485    7296  995609   f3119 busybox_old
 987929     485    7296  995710   f317e busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>