oweals/busybox.git
5 years agobc: fix EOF handling in bc_program_read()
Denys Vlasenko [Tue, 11 Dec 2018 21:26:38 +0000 (22:26 +0100)]
bc: fix EOF handling in bc_program_read()

$ bc -q
read()
2^D^D2
     ^ prints the result of read()'ed expression

function                                             old     new   delta
zbc_program_print                                    629     642     +13
bc_program_read                                      322     312     -10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 13/-10)              Total: 3 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: tweak comment
Denys Vlasenko [Tue, 11 Dec 2018 20:21:14 +0000 (21:21 +0100)]
bc: tweak comment

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: convert bc_program_asciify to "z" function
Denys Vlasenko [Tue, 11 Dec 2018 19:57:53 +0000 (20:57 +0100)]
bc: convert bc_program_asciify to "z" function

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

function                                             old     new   delta
zbc_program_print                                    665     642     -23

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: convert zbc_program_op to "z" function, fix a thinko in prev commits
Denys Vlasenko [Tue, 11 Dec 2018 18:42:05 +0000 (19:42 +0100)]
bc: convert zbc_program_op to "z" function, fix a thinko in prev commits

function                                             old     new   delta
zbc_program_assign                                   448     447      -1

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: convert bc_program_logical to "z" function
Denys Vlasenko [Tue, 11 Dec 2018 18:37:00 +0000 (19:37 +0100)]
bc: convert bc_program_logical to "z" function

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: do not use "(cond ? f1 : f2)(params)" idiom, it messes up static function optimiz...
Denys Vlasenko [Tue, 11 Dec 2018 18:29:35 +0000 (19:29 +0100)]
bc: do not use "(cond ? f1 : f2)(params)" idiom, it messes up static function optimizations

With direct calls, GCC no longer thinks that we take addresses of the functions,
and can use "more optimal" internal ABI for _all_ calls to these functions,
not only at this callsite. On i486, regparm is used, and:

function                                             old     new   delta
zbc_num_inv                                           56      57      +1
zbc_num_k                                            852     851      -1
zbc_program_modexp                                   558     556      -2
zbc_num_d                                            541     539      -2
bc_num_ulong2num                                      59      57      -2
zbc_program_num                                      840     836      -4
bc_num_zero                                           11       7      -4
bc_num_one                                            28      24      -4
bc_program_exec                                     3928    3918     -10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/8 up/down: 1/-29)             Total: -28 bytes
   text    data     bss     dec     hex filename
 982237     485    7296  990018   f1b42 busybox_old
 982209     485    7296  989990   f1b26 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: convert arithmetic calc functions to "z" logic
Denys Vlasenko [Tue, 11 Dec 2018 18:04:44 +0000 (19:04 +0100)]
bc: convert arithmetic calc functions to "z" logic

In order for magic macros to work, a bit of reordering was necessary.

function                                             old     new   delta
zbc_program_modexp                                     -     558    +558
zbc_program_assign                                     -     448    +448
zbc_program_pushArray                                  -     111    +111
zbc_num_s                                            239     237      -2
zbc_num_d                                            543     541      -2
zbc_num_binary                                       145     143      -2
zbc_num_a                                            443     441      -2
zbc_num_rem                                           95      91      -4
zbc_num_divmod                                       150     146      -4
zbc_num_m                                            269     257     -12
zbc_num_r                                            230     208     -22
zbc_num_printNum                                     447     417     -30
bc_program_exec                                     3960    3928     -32
zbc_num_p                                            434     399     -35
zbc_program_num                                      880     840     -40
zbc_num_k                                            913     852     -61
zbc_program_printStream                              141       -    -141
bc_program_assign                                    455       -    -455
bc_program_modexp                                    668       -    -668
------------------------------------------------------------------------------
(add/remove: 3/3 grow/shrink: 0/13 up/down: 1117/-1512)      Total: -395 bytes
   text    data     bss     dec     hex filename
 982632     485    7296  990413   f1ccd busybox_old
 982237     485    7296  990018   f1b42 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: rename arithmetic calc functions to "z" functions, no code changes
Denys Vlasenko [Tue, 11 Dec 2018 18:12:13 +0000 (19:12 +0100)]
bc: rename arithmetic calc functions to "z" functions, no code changes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: move declarations around, no code changes
Denys Vlasenko [Tue, 11 Dec 2018 16:56:09 +0000 (17:56 +0100)]
bc: move declarations around, no code changes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: code shrink in zbc_lex_number()
Denys Vlasenko [Tue, 11 Dec 2018 16:36:21 +0000 (17:36 +0100)]
bc: code shrink in zbc_lex_number()

function                                             old     new   delta
zbc_lex_number                                       279     190     -89

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