oweals/busybox.git
5 years agobc: do not pass line width in parameters, it's in globals
Denys Vlasenko [Sat, 8 Dec 2018 20:56:37 +0000 (21:56 +0100)]
bc: do not pass line width in parameters, it's in globals

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

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

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

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

function                                             old     new   delta
GMULT                                                168     159      -9

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

function                                             old     new   delta
bc_num_ulong                                         103      95      -8

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

function                                             old     new   delta
dc_lex_token                                         701     697      -4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Pure block moves of text

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

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

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

function                                             old     new   delta
bc_parse_stmt                                       2276    2271      -5

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

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

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

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

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

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

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

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

function                                             old     new   delta
bc_num_k                                             990     988      -2

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

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

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

This might help compiler

function                                             old     new   delta
bc_num_k                                             957     971     +14

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

function                                             old     new   delta
bc_lex_token                                        1285    1299     +14

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

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

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

FILE:
print 1
print "

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

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

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

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

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

Examples:

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

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

Line number printing to be added later...

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

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

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

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

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

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

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

function                                             old     new   delta
bc_lib                                              1877    1674    -203

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

Also, use ARRAY_SIZE() where appropriate

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

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

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

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

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

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

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

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

G.flags == option_mask32

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

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

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

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

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

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

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

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

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

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

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

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

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

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

function                                             old     new   delta
bc_lex_token                                        1369    1344     -25

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

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

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

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

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

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

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

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: eliminate BC_STATUS_INPUT_EOF
Denys Vlasenko [Mon, 3 Dec 2018 13:28:51 +0000 (14:28 +0100)]
bc: eliminate BC_STATUS_INPUT_EOF

function                                             old     new   delta
fflush_and_check                                       -      36     +36
bc_num_a                                             445     456     +11
bc_num_ulong                                          85      95     +10
bc_vm_run                                           1978    1984      +6
bc_num_s                                             246     252      +6
bc_err_msgs                                          192     188      -4
quit                                                  38      32      -6
bc_vm_process                                        139     132      -7
bc_program_reset                                     172     159     -13
bc_parse_create                                      192     175     -17
bc_read_line                                         349     311     -38
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 4/6 up/down: 69/-85)            Total: -16 bytes
   text    data     bss     dec     hex filename
 987844     485    7296  995625   f3129 busybox_old
 987828     485    7296  995609   f3119 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: handle "limits" and "quit" immediately at parse time
Denys Vlasenko [Mon, 3 Dec 2018 13:02:35 +0000 (14:02 +0100)]
bc: handle "limits" and "quit" immediately at parse time

No need to propagate a special exit code.

function                                             old     new   delta
bc_parse_stmt                                       2197    2301    +104
quit                                                   -      38     +38
bc_read_line                                         344     349      +5
bc_program_reset                                     174     172      -2
bc_num_s                                             252     246      -6
bc_num_a                                             454     445      -9
bc_parse_parse                                       471     461     -10
bc_num_ulong                                          95      85     -10
bc_program_exec                                     4500    4478     -22
bc_vm_run                                           2006    1978     -28
bc_vm_process                                        291     139    -152
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 2/8 up/down: 147/-239)          Total: -92 bytes
   text    data     bss     dec     hex filename
 987936     485    7296  995717   f3185 busybox_old
 987844     485    7296  995625   f3129 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc": drop unused error codes and strings
Denys Vlasenko [Sun, 2 Dec 2018 23:51:25 +0000 (00:51 +0100)]
bc": drop unused error codes and strings

function                                             old     new   delta
bc_err_msgs                                          216     192     -24
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-24)             Total: -24 bytes
   text    data     bss     dec     hex filename
 988122     485    7296  995903   f323f busybox_old
 987936     485    7296  995717   f3185 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: remove "error ids": serve no useful purpose, error message should be explanatory...
Denys Vlasenko [Sun, 2 Dec 2018 23:26:12 +0000 (00:26 +0100)]
bc: remove "error ids": serve no useful purpose, error message should be explanatory enough

function                                             old     new   delta
bc_warn_fmt                                           17      14      -3
bc_err_fmt                                            15      12      -3
bc_vm_posixError                                     205     189     -16
bc_vm_error                                          156     138     -18
bc_errs                                               28       -     -28
bc_err_ids                                            58       -     -58
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 0/4 up/down: 0/-126)           Total: -126 bytes
   text    data     bss     dec     hex filename
 988288     485    7296  996069   f32e5 busybox_old
 988122     485    7296  995903   f323f busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: reduce forward declarations
Denys Vlasenko [Sun, 2 Dec 2018 23:08:59 +0000 (00:08 +0100)]
bc: reduce forward declarations

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: use smaller datatypes for limits, match GNU bc 'limits' output
Denys Vlasenko [Sun, 2 Dec 2018 20:02:54 +0000 (21:02 +0100)]
bc: use smaller datatypes for limits, match GNU bc 'limits' output

function                                             old     new   delta
bc_vm_process                                        315     291     -24
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-24)             Total: -24 bytes
   text    data     bss     dec     hex filename
 988303     485    7296  996084   f32f4 busybox_old
 988273     485    7296  996054   f32d6 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: better handle optional args of bc_program_pushVar()
Denys Vlasenko [Sun, 2 Dec 2018 19:57:17 +0000 (20:57 +0100)]
bc: better handle optional args of bc_program_pushVar()

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: tweak help text
Denys Vlasenko [Sun, 2 Dec 2018 19:34:03 +0000 (20:34 +0100)]
bc: tweak help text

-v is supported but not shown

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify bc_vm_stdin()
Denys Vlasenko [Sun, 2 Dec 2018 19:16:52 +0000 (20:16 +0100)]
bc: simplify bc_vm_stdin()

function                                             old     new   delta
bc_vm_run                                           2020    2006     -14

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: only check for ^C in bc_program_exec() main loop
Denys Vlasenko [Sun, 2 Dec 2018 18:43:34 +0000 (19:43 +0100)]
bc: only check for ^C in bc_program_exec() main loop

Checking it in individual operations such as SQRT is not necessary
since they usually do not take very long to complete. We repeatedly return
to main loop.

TODO: re-add more fine-grained ^C checks - but only with examples where it is
actually needed. E.g. I suspect simplest ops like addition or compare won't need it.

function                                             old     new   delta
bc_program_index                                      66      64      -2
bc_num_s                                             258     246     -12
bc_num_cmp                                           294     275     -19
bc_num_compare                                        84      59     -25
bc_num_subArrays                                      74      47     -27
bc_num_a                                             474     445     -29
bc_program_exec                                     4530    4500     -30
bc_num_p                                             518     472     -46
bc_num_d                                             604     558     -46
bc_num_k                                            1005     957     -48
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/10 up/down: 0/-284)          Total: -284 bytes
   text    data     bss     dec     hex filename
 988601     485    7296  996382   f341e busybox_old
 988317     485    7296  996098   f3302 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simpler calling convention for bc_read_file(), bc_program_search()
Denys Vlasenko [Sun, 2 Dec 2018 18:27:48 +0000 (19:27 +0100)]
bc: simpler calling convention for bc_read_file(), bc_program_search()

function                                             old     new   delta
bc_vm_run                                           1854    2020    +166
bc_program_assign                                    482     476      -6
bc_program_pushVar                                   225     215     -10
bc_program_call                                      366     356     -10
bc_program_num                                      1126    1115     -11
bc_program_copyToVar                                 354     343     -11
bc_program_search                                    164     152     -12
bc_program_execStr                                   573     559     -14
bc_program_exec                                     4544    4530     -14
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/8 up/down: 166/-88)            Total: 78 bytes
   text    data     bss     dec     hex filename
 988523     485    7296  996304   f33d0 busybox_old
 988601     485    7296  996382   f341e busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: bc_num_ulong2num(), bc_program_pushGlobal(), bc_program_stackLen() never fail
Denys Vlasenko [Sun, 2 Dec 2018 17:44:40 +0000 (18:44 +0100)]
bc: bc_num_ulong2num(), bc_program_pushGlobal(), bc_program_stackLen() never fail

function                                             old     new   delta
bc_num_ulong2num                                      66      62      -4
bc_num_printNum                                      572     563      -9
bc_program_exec                                     4562    4544     -18
bc_program_num                                      1147    1126     -21
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-52)             Total: -52 bytes
   text    data     bss     dec     hex filename
 988575     485    7296  996356   f3404 busybox_old
 988523     485    7296  996304   f33d0 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: stop passing around pointers to G.prog, they are all constant
Denys Vlasenko [Sun, 2 Dec 2018 17:26:38 +0000 (18:26 +0100)]
bc: stop passing around pointers to G.prog, they are all constant

function                                             old     new   delta
bc_program_exec                                     4523    4562     +39
bc_program_assign                                    450     482     +32
bc_program_assignStr                                 131     159     +28
bc_program_print                                     762     775     +13
bc_program_num                                      1134    1147     +13
bc_program_search                                    154     164     +10
bc_num_ulong                                          85      95     +10
dc_parse_expr                                        719     727      +8
bc_program_retire                                     34      40      +6
bc_program_reset                                     168     174      +6
bc_program_binOpRetire                                50      56      +6
bc_program_addFunc                                   220     226      +6
bc_program_prep                                       88      89      +1
dc_parse_init                                         18      17      -1
bc_program_copyToVar                                 355     354      -1
bc_parse_text                                        142     141      -1
bc_parse_number                                       88      87      -1
bc_parse_init                                         18      17      -1
bc_parse_endBody                                     423     422      -1
common_parse_init                                     29      26      -3
bc_parse_string                                      103     100      -3
bc_parse_addFunc                                      44      41      -3
bc_program_call                                      371     366      -5
bc_program_binOpPrep                                 301     296      -5
bc_program_read                                      342     336      -6
bc_parse_create                                      198     192      -6
bc_program_pushArray                                 143     136      -7
bc_parse_reset                                       194     187      -7
bc_vm_process                                        323     315      -8
bc_program_pushVar                                   236     225     -11
bc_vm_run                                           1872    1854     -18
bc_parse_name                                        590     570     -20
bc_program_execStr                                   594     573     -21
bc_program_modexp                                    793     763     -30
bc_program_printStream                               172       -    -172
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 13/21 up/down: 178/-331)       Total: -153 bytes
   text    data     bss     dec     hex filename
 988728     485    7296  996509   f349d busybox_old
 988575     485    7296  996356   f3404 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: select parse_init() and parse_expr() using IS_BC, not function pointers
Denys Vlasenko [Sun, 2 Dec 2018 16:36:00 +0000 (17:36 +0100)]
bc: select parse_init() and parse_expr() using IS_BC, not function pointers

function                                             old     new   delta
common_parse_expr                                      -      62     +62
common_parse_init                                      -      29     +29
dc_parse_parse                                        53      52      -1
dc_parse_expr                                        723     719      -4
bc_program_execStr                                   606     594     -12
dc_parse_init                                         33      18     -15
bc_parse_init                                         33      18     -15
bc_parse_expression                                   39       -     -39
bc_vm_run                                           1923    1872     -51
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 0/6 up/down: 91/-137)           Total: -46 bytes
   text    data     bss     dec     hex filename
 988774     485    7296  996555   f34cb busybox_old
 988728     485    7296  996509   f349d busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: propagate fixed arguments into callees
Denys Vlasenko [Sun, 2 Dec 2018 16:18:52 +0000 (17:18 +0100)]
bc: propagate fixed arguments into callees

Looks like there is only one "BcProgram" object, &G.prog.

function                                             old     new   delta
bc_program_exec                                     4401    4523    +122
bc_program_execStr                                   579     606     +27
bc_program_read                                      323     342     +19
bc_args                                               83      97     +14
bc_vm_process                                        327     323      -4
bc_num_ulong                                          95      85     -10
dc_main                                               62      48     -14
bc_main                                               62      48     -14
bc_vm_run                                           2317    1923    -394
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/5 up/down: 182/-436)         Total: -254 bytes
   text    data     bss     dec     hex filename
 989028     485    7296  996809   f35c9 busybox_old
 988774     485    7296  996555   f34cb busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify ^C handling
Denys Vlasenko [Sun, 2 Dec 2018 15:32:36 +0000 (16:32 +0100)]
bc: simplify ^C handling

It's still buggy: if SIGINT would interrupt e.g. output write(),
the result would not be as intended:

>>> while ( 1 ) print 1
...
11111111111111111111111111111111111111111111111111111111111111111111\
11111111111111111111111111111111111111111111111111111111111111111111\
^Cready for more input

interrupt (type "quit" to exit)
>>> bc: output error

function                                             old     new   delta
dc_parse_parse                                        58      53      -5
bc_parse_parse                                       476     471      -5
bc_num_d                                             609     604      -5
bc_num_cmp                                           299     294      -5
bc_num_compare                                        90      84      -6
bc_parse_expr                                       2222    2215      -7
bc_num_subArrays                                      82      74      -8
dc_main                                               72      62     -10
bc_main                                               72      62     -10
bc_program_exec                                     4413    4401     -12
bc_num_a                                             491     474     -17
bc_read_line                                         364     344     -20
bc_num_p                                             540     518     -22
bc_program_reset                                     192     168     -24
bc_num_k                                            1031    1005     -26
bc_vm_run                                           2382    2317     -65
bc_vm_sig                                             97       -     -97
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/16 up/down: 0/-344)          Total: -344 bytes
   text    data     bss     dec     hex filename
 989372     485    7296  997153   f3721 busybox_old
 989028     485    7296  996809   f35c9 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: convert to "G trick" - this returns bc to zero bss increase
Denys Vlasenko [Sun, 2 Dec 2018 14:48:37 +0000 (15:48 +0100)]
bc: convert to "G trick" - this returns bc to zero bss increase

function                                             old     new   delta
bc_num_p                                             518     540     +22
bc_num_k                                            1010    1031     +21
bc_vm_process                                        312     327     +15
bc_program_exec                                     4401    4413     +12
bc_vm_posixError                                     194     205     +11
bc_num_a                                             480     491     +11
bc_program_reset                                     182     192     +10
bc_vm_sig                                             88      97      +9
bc_vm_error                                          148     156      +8
bc_parse_expr                                       2215    2222      +7
bc_num_compare                                        84      90      +6
dc_parse_parse                                        53      58      +5
dc_lex_token                                         670     675      +5
bc_read_line                                         359     364      +5
bc_parse_parse                                       471     476      +5
bc_num_cmp                                           294     299      +5
bc_num_subArrays                                      84      82      -2
bc_num_d                                             614     609      -5
dc_main                                               80      72      -8
bc_main                                               80      72      -8
bcg                                                   40       -     -40
bc_vm_run                                           2569    2382    -187
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 16/5 up/down: 157/-250)         Total: -93 bytes
   text    data     bss     dec     hex filename
 989425     485    7336  997246   f377e busybox_old
 989372     485    7296  997153   f3721 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify, and restore ^C, fix ^D handling
Denys Vlasenko [Sun, 2 Dec 2018 13:35:32 +0000 (14:35 +0100)]
bc: simplify, and restore ^C, fix ^D handling

^D used to enter infinite loop

function                                             old     new   delta
bc_read_line                                         342     359     +17
bc_args_opt                                            8       -      -8
dc_sig_msg                                            31       -     -31
bc_sig_msg                                            34       -     -34
bc_vm_run                                           2608    2569     -39
bc_args                                              123      83     -40
bc_args_lopt                                          81       -     -81
------------------------------------------------------------------------------
(add/remove: 0/4 grow/shrink: 1/2 up/down: 17/-233)          Total: -216 bytes
   text    data     bss     dec     hex filename
 989491     485    7336  997312   f37c0 busybox_old
 989425     485    7336  997246   f377e busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify, stop testing for IO errors on every output
Denys Vlasenko [Fri, 30 Nov 2018 22:13:42 +0000 (23:13 +0100)]
bc: simplify, stop testing for IO errors on every output

function                                             old     new   delta
bc_read_line                                         297     342     +45
bc_vm_run                                           2601    2608      +7
bc_program_reset                                     178     182      +4
bc_args                                              125     123      -2
dc_name                                                3       -      -3
bc_name                                                3       -      -3
bc_program_printStream                               176     172      -4
bcg                                                   48      40      -8
dc_main                                               97      80     -17
bc_main                                               97      80     -17
bc_vm_fflush                                          21       -     -21
bc_vm_puts                                            23       -     -23
bc_vm_printf                                          36       -     -36
bc_vm_putchar                                         46       -     -46
bc_vm_exit                                            46       -     -46
bc_vm_process                                        361     312     -49
bc_vm_info                                            76      19     -57
bc_copyright                                         155       -    -155
------------------------------------------------------------------------------
(add/remove: 0/8 grow/shrink: 3/7 up/down: 56/-487)          Total: -431 bytes
   text    data     bss     dec     hex filename
 989722     485    7344  997551   f38af busybox_old
 989491     485    7336  997312   f37c0 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix warnings, initial cleanups
Denys Vlasenko [Sun, 2 Dec 2018 17:49:16 +0000 (18:49 +0100)]
bc: fix warnings, initial cleanups

function                                             old     new   delta
bc_program_exec                                        -    4401   +4401
bc_vm_run                                              -    2601   +2601
bc_parse_expr                                          -    2215   +2215
bc_parse_stmt                                          -    2197   +2197
bc_lib                                                 -    1878   +1878
bc_lex_token                                           -    1333   +1333
bc_program_num                                         -    1134   +1134
bc_num_k                                               -    1010   +1010
bc_program_modexp                                      -     793    +793
bc_program_print                                       -     762    +762
dc_parse_expr                                          -     723    +723
dc_lex_token                                           -     670    +670
bc_num_d                                               -     614    +614
bc_parse_name                                          -     590    +590
bc_program_execStr                                     -     579    +579
bc_num_printNum                                        -     572    +572
bc_num_p                                               -     518    +518
bc_num_a                                               -     480    +480
bc_parse_parse                                         -     471    +471
bc_program_assign                                      -     450    +450
bc_parse_endBody                                       -     423    +423
bc_program_call                                        -     371    +371
dc_lex_tokens                                          -     364    +364
bc_vm_process                                          -     361    +361
bc_program_copyToVar                                   -     355    +355
dc_parse_insts                                         -     332    +332
bc_program_read                                        -     323    +323
bc_program_binOpPrep                                   -     301    +301
bc_lex_number                                          -     301    +301
bc_read_line                                           -     297    +297
bc_num_cmp                                             -     294    +294
bc_num_m                                               -     287    +287
bc_parse_auto                                          -     275    +275
bc_num_s                                               -     258    +258
bc_program_pushVar                                     -     236    +236
bc_num_r                                               -     231    +231
bc_program_addFunc                                     -     220    +220
bc_lex_kws                                             -     220    +220
bc_err_msgs                                            -     216    +216
bc_parse_create                                        -     198    +198
bc_vm_posixError                                       -     194    +194
bc_parse_reset                                         -     194    +194
bc_parse_operator                                      -     181    +181
bc_program_reset                                       -     178    +178
bc_program_printStream                                 -     176    +176
bc_num_divmod                                          -     168    +168
bc_copyright                                           -     155    +155
bc_program_search                                      -     154    +154
bc_num_binary                                          -     150    +150
bc_vm_error                                            -     148    +148
bc_program_pushArray                                   -     143    +143
bc_parse_text                                          -     142    +142
bc_num_printDigits                                     -     142    +142
bc_map_insert                                          -     142    +142
bc_parse_else                                          -     139    +139
bc_program_assignStr                                   -     131    +131
bc_args                                                -     125    +125
dc_parse_mem                                           -     116    +116
bc_parse_body                                          -     116    +116
bc_num_split                                           -     113    +113
bc_num_sub                                             -     112    +112
bc_num_add                                             -     112    +112
packed_usage                                       32958   33066    +108
bc_num_rem                                             -     104    +104
bc_parse_string                                        -     103    +103
bc_main                                                -      97     +97
bc_num_ulong                                           -      95     +95
bc_func_insert                                         -      89     +89
bc_vm_sig                                              -      88     +88
bc_program_prep                                        -      88     +88
bc_parse_number                                        -      88     +88
bc_array_expand                                        -      88     +88
bc_num_subArrays                                       -      84     +84
bc_num_compare                                         -      84     +84
bc_lex_name                                            -      83     +83
bc_args_lopt                                           -      81     +81
bc_parse_pushIndex                                     -      80     +80
bc_num_mul                                             -      80     +80
bc_num_mod                                             -      80     +80
bc_num_div                                             -      80     +80
bc_vm_info                                             -      76     +76
bc_program_name                                        -      75     +75
bc_map_find                                            -      71     +71
bc_lex_next                                            -      71     +71
bc_num_printHex                                        -      70     +70
bc_vec_concat                                          -      68     +68
bc_num_shift                                           -      68     +68
bc_num_extend                                          -      68     +68
bc_program_index                                       -      66     +66
bc_num_ulong2num                                       -      66     +66
bc_num_retireMul                                       -      66     +66
bc_parse_noElse                                        -      65     +65
bc_vec_string                                          -      64     +64
bc_parse_pushName                                      -      63     +63
bc_parse_exprs                                         -      60     +60
bc_err_ids                                             -      58     +58
bc_result_free                                         -      57     +57
bc_vec_npop                                            -      55     +55
dc_parse_parse                                         -      53     +53
bc_vec_push                                            -      53     +53
bc_parse_free                                          -      53     +53
bc_num_inv                                             -      53     +53
dc_parse_register                                      -      52     +52
dc_lex_regs                                            -      52     +52
bc_lex_whitespace                                      -      52     +52
bc_num_copy                                            -      51     +51
bc_program_binOpRetire                                 -      50     +50
bc_parse_ops                                           -      50     +50
bc_map_index                                           -      50     +50
bcg                                                    -      48     +48
bc_num_init                                            -      48     +48
bc_parse_startBody                                     -      47     +47
bc_num_pow                                             -      47     +47
bc_vm_putchar                                          -      46     +46
bc_vm_exit                                             -      46     +46
bc_num_clean                                           -      45     +45
bc_parse_addFunc                                       -      44     +44
bc_vec_grow                                            -      42     +42
bc_program_len                                         -      42     +42
bc_num_truncate                                        -      42     +42
bc_array_init                                          -      42     +42
bc_parse_expression                                    -      39     +39
bc_lex_lineComment                                     -      39     +39
bc_num_expand                                          -      38     +38
bc_vec_init                                            -      37     +37
bc_vm_printf                                           -      36     +36
bc_num_printNewline                                    -      36     +36
bc_func_free                                           -      35     +35
bc_sig_msg                                             -      34     +34
bc_program_retire                                      -      34     +34
bc_lex_assign                                          -      34     +34
dc_parse_init                                          -      33     +33
bc_parse_init                                          -      33     +33
dc_sig_msg                                             -      31     +31
bc_vec_expand                                          -      30     +30
bc_num_ten                                             -      30     +30
bc_num_one                                             -      28     +28
bc_errs                                                -      28     +28
bc_vec_free                                            -      27     +27
bc_program_ops                                         -      24     +24
bc_vm_puts                                             -      23     +23
bc_num_printChar                                       -      23     +23
bc_program_ready_msg                                   -      22     +22
bc_vm_fflush                                           -      21     +21
dc_main                                               77      97     +20
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
bc_warn_fmt                                            -      17     +17
bc_vec_pushByte                                        -      15     +15
bc_string_free                                         -      15     +15
bc_num_setToZero                                       -      15     +15
bc_num_free                                            -      15     +15
bc_lex_file                                            -      15     +15
bc_id_free                                             -      15     +15
bc_err_fmt                                             -      15     +15
bc_vec_item_rev                                        -      14     +14
bc_id_cmp                                              -      12     +12
bc_num_zero                                            -      11     +11
bc_vec_item                                            -       9      +9
bc_program_stdin_name                                  -       8      +8
bc_program_scale                                       -       8      +8
bc_args_opt                                            -       8      +8
bc_func_read                                           -       7      +7
bc_func_main                                           -       7      +7
bc_err_line                                            -       7      +7
bc_lib_name                                            -       4      +4
bc_args_env_name                                       -       4      +4
applet_main                                         1604    1608      +4
dc_name                                                -       3      +3
bc_name                                                -       3      +3
applet_names                                        2781    2784      +3
static.bases                                           5       -      -5
check_under                                           20       -     -20
pop                                                   24       -     -24
print_no_pop                                          32       -     -32
sub                                                   34       -     -34
divide                                                34       -     -34
mul                                                   37       -     -37
add                                                   37       -     -37
push                                                  38       -     -38
print_stack_no_pop                                    40       -     -40
not                                                   72       -     -72
set_output_base                                       95       -     -95
or                                                   103       -    -103
eor                                                  103       -    -103
and                                                  103       -    -103
mod                                                  105       -    -105
stack_machine                                        116       -    -116
operators                                            144       -    -144
print_base                                           230       -    -230
------------------------------------------------------------------------------
(add/remove: 173/20 grow/shrink: 4/0 up/down: 38089/-1372)  Total: 36717 bytes
   text    data     bss     dec     hex filename
 950181     485    7296  957962   e9e0a busybox_old
 989722     485    7344  997551   f38af busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: new applet, throws warning
Gavin Howard [Sat, 3 Nov 2018 17:00:21 +0000 (11:00 -0600)]
bc: new applet, throws warning

Signed-off-by: Gavin Howard <yzena.tech@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agovi: correctly detect when a deletion empties the buffer
Ron Yorston [Mon, 3 Dec 2018 09:07:58 +0000 (10:07 +0100)]
vi: correctly detect when a deletion empties the buffer

Michał Berger has reported two issues:

- Repeatedly deleting and undoing the deletion of the last line
  results in characters being lost from the end of the line.

- Deleting the bottom line twice then attempting to undo each of
  these deletions results in a segfault.

The problem seems to be an incorrect test for whether the text buffer
is empty.

Reported-by: Michał Berger <michallinuxstuff@gmail.com>
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agovi: code shrink
Denys Vlasenko [Thu, 29 Nov 2018 13:39:52 +0000 (14:39 +0100)]
vi: code shrink

function                                             old     new   delta
char_search                                          241     247      +6
get_one_address                                      275     272      -3
colon                                               2878    2875      -3
do_cmd                                              4726    4720      -6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 6/-12)              Total: -6 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agovi: fix FEATURE_VI_REGEX_SEARCH to respect LIMITED (one-line) search
Denys Vlasenko [Thu, 29 Nov 2018 13:19:57 +0000 (14:19 +0100)]
vi: fix FEATURE_VI_REGEX_SEARCH to respect LIMITED (one-line) search

If busybox is compiled with FEATURE_VI_REGEX_SEARCH enabled, command
":s/x/y/" searches not only in the current line, but continues search
after it. This makes range searches (":1,3s/x/y/") work incorrect. For
example file "./test":
1
2
3

$ vi ./test
:1,2s/3/e/
gives us:
1
2
e

function                                             old     new   delta
char_search                                          213     241     +28

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agolibbb: do not misinterpret 0x10-0x19 chars in "\xNNN" too
Denys Vlasenko [Thu, 29 Nov 2018 12:15:57 +0000 (13:15 +0100)]
libbb: do not misinterpret 0x10-0x19 chars in "\xNNN" too

function                                             old     new   delta
bb_process_escape_sequence                           141     151     +10

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agolibbb: @ in "\x3@" is not a valid hex digit
Denys Vlasenko [Thu, 29 Nov 2018 11:34:50 +0000 (12:34 +0100)]
libbb: @ in "\x3@" is not a valid hex digit

function                                             old     new   delta
bb_process_escape_sequence                           134     141      +7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agocat,nl: fix handling of open errors
Denys Vlasenko [Thu, 29 Nov 2018 10:44:10 +0000 (11:44 +0100)]
cat,nl: fix handling of open errors

$ cat -n does_not_exist; echo $?
cat: does_not_exist: No such file or directory
1

function                                             old     new   delta
print_numbered_lines                                 118     129     +11
nl_main                                              196     201      +5
cat_main                                             421     425      +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 20/0)               Total: 20 bytes

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