oweals/busybox.git
5 years agobc: make bc_program_pushVar "z-function"
Denys Vlasenko [Tue, 11 Dec 2018 14:45:15 +0000 (15:45 +0100)]
bc: make bc_program_pushVar "z-function"

function                                             old     new   delta
bc_program_pushVar                                   200     198      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: improve "noninteractive" macro machinery so that even "return zero" code is not...
Denys Vlasenko [Tue, 11 Dec 2018 14:29:32 +0000 (15:29 +0100)]
bc: improve "noninteractive" macro machinery so that even "return zero" code is not generated

Most affected functions shrink by 2 bytes on x86.

function                                             old     new   delta
zbc_program_num                                        -     880    +880
zbc_program_print                                      -     665    +665
zbc_num_printNum                                       -     447    +447
zbc_program_call                                       -     323    +323
zbc_program_copyToVar                                  -     287    +287
zbc_lex_number                                         -     279    +279
zbc_program_binOpPrep                                  -     269    +269
zbc_program_assignStr                                  -     142    +142
zbc_program_printStream                                -     141    +141
zbc_func_insert                                        -      93     +93
zbc_num_ulong                                          -      88     +88
zbc_program_prep                                       -      79     +79
zbc_num_shift                                          -      53     +53
bc_num_shift                                          54       -     -54
bc_program_prep                                       81       -     -81
bc_num_ulong                                          90       -     -90
bc_func_insert                                        95       -     -95
bc_program_printStream                               143       -    -143
bc_program_assignStr                                 144       -    -144
bc_program_binOpPrep                                 271       -    -271
bc_lex_number                                        281       -    -281
bc_program_copyToVar                                 289       -    -289
bc_program_call                                      325       -    -325
bc_num_printNum                                      471       -    -471
bc_program_print                                     667       -    -667
bc_program_num                                       880       -    -880
------------------------------------------------------------------------------
(add/remove: 13/13 grow/shrink: 0/0 up/down: 3746/-3791)      Total: -45 bytes
   text    data     bss     dec     hex filename
 982779     485    7296  990560   f1d60 busybox_old
 982734     485    7296  990515   f1d33 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
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>