Commit Graph

1528 Commits

Author SHA1 Message Date
Brian Foley
10509a70ee dc: Parse error & fix out of bounds read in xc_program_printString
function                                             old     new   delta
xc_program_print                                     712     735     +23

Signed-off-by: Brian Foley <bpfoley@google.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-09-05 10:53:21 +02:00
Brian Foley
b64470be17 dc: Fix segfault when executing strings generated using asciify
function                                             old     new   delta
zxc_vm_process                                      6884    6891      +7

Signed-off-by: Brian Foley <bpfoley@google.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-09-05 10:50:13 +02:00
Brian Foley
7454879a1d dc: execute shouldn't pop if stack head is not a string
This matches the behaviour of both GNU dc (as specified in
its man page), and BSD dc (where stack_popstring() pops
only if the head is a string.)

Add a couple of tests to verify this behavior.

function                                             old     new   delta
zxc_vm_process                                      6882    6884      +2

Signed-off-by: Brian Foley <bpfoley@google.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-09-05 10:46:22 +02:00
James Byrne
6937487be7 libbb: reduce the overhead of single parameter bb_error_msg() calls
Back in 2007, commit 0c97c9d437 ("'simple' error message functions by
Loic Grenie") introduced bb_simple_perror_msg() to allow for a lower
overhead call to bb_perror_msg() when only a string was being printed
with no parameters. This saves space for some CPU architectures because
it avoids the overhead of a call to a variadic function. However there
has never been a simple version of bb_error_msg(), and since 2007 many
new calls to bb_perror_msg() have been added that only take a single
parameter and so could have been using bb_simple_perror_message().

This changeset introduces 'simple' versions of bb_info_msg(),
bb_error_msg(), bb_error_msg_and_die(), bb_herror_msg() and
bb_herror_msg_and_die(), and replaces all calls that only take a
single parameter, or use something like ("%s", arg), with calls to the
corresponding 'simple' version.

Since it is likely that single parameter calls to the variadic functions
may be accidentally reintroduced in the future a new debugging config
option WARN_SIMPLE_MSG has been introduced. This uses some macro magic
which will cause any such calls to generate a warning, but this is
turned off by default to avoid use of the unpleasant macros in normal
circumstances.

This is a large changeset due to the number of calls that have been
replaced. The only files that contain changes other than simple
substitution of function calls are libbb.h, libbb/herror_msg.c,
libbb/verror_msg.c and libbb/xfuncs_printf.c. In miscutils/devfsd.c,
networking/udhcp/common.h and util-linux/mdev.c additonal macros have
been added for logging so that single parameter and multiple parameter
logging variants exist.

The amount of space saved varies considerably by architecture, and was
found to be as follows (for 'defconfig' using GCC 7.4):

Arm:     -92 bytes
MIPS:    -52 bytes
PPC:   -1836 bytes
x86_64: -938 bytes

Note that for the MIPS architecture only an exception had to be made
disabling the 'simple' calls for 'udhcp' (in networking/udhcp/common.h)
because it made these files larger on MIPS.

Signed-off-by: James Byrne <james.byrne@origamienergy.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-07-02 11:35:03 +02:00
Denys Vlasenko
7a4e55422a bc: placate compiler warnings
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-06-08 12:39:30 +02:00
Denys Vlasenko
1113961dde dc: make 4 % 0 emit error messgaes and set result to 0
function                                             old     new   delta
mod                                                  105     136     +31

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-05-16 09:40:36 +02:00
Denys Vlasenko
89023b167f dc: code shrink
function                                             old     new   delta
check_under                                           20      21      +1
print_no_pop                                          32      27      -5
pop                                                   24      18      -6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/2 up/down: 1/-11)             Total: -10 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-05-09 15:58:46 +02:00
James Byrne
253c4e787a Optionally re-introduce bb_info_msg()
Between Busybox 1.24.2 and 1.25.0 the bb_info_msg() function was
eliminated and calls to it changed to be bb_error_msg(). The downside of
this is that daemons now log all messages to syslog at the LOG_ERR level
which makes it hard to filter errors from informational messages.

This change optionally re-introduces bb_info_msg(), controlled by a new
option FEATURE_SYSLOG_INFO, restores all the calls to bb_info_msg() that
were removed (only in applets that set logmode to LOGMODE_SYSLOG or
LOGMODE_BOTH), and also changes informational messages in ifplugd and
ntpd.

The code size change of this is as follows (using 'defconfig' on x86_64
with gcc 7.3.0-27ubuntu1~18.04)

function                                             old     new   delta
bb_info_msg                                            -     182    +182
bb_vinfo_msg                                           -      27     +27
static.log7                                          194     198      +4
log8                                                 190     191      +1
log5                                                 190     191      +1
crondlog                                              45       -     -45
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 3/0 up/down: 215/-45)           Total: 170 bytes

If you don't care about everything being logged at LOG_ERR level
then when FEATURE_SYSLOG_INFO is disabled Busybox actually gets smaller:

function                                             old     new   delta
static.log7                                          194     200      +6
log8                                                 190     193      +3
log5                                                 190     193      +3
syslog_level                                           1       -      -1
bb_verror_msg                                        583     581      -2
crondlog                                              45       -     -45
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 3/1 up/down: 12/-48)            Total: -36 bytes

Signed-off-by: James Byrne <james.byrne@origamienergy.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-04-30 10:51:27 +02:00
Denys Vlasenko
0f5a7f3520 man: add "/usr/share/man" as another default MANPATH, fix col override
function                                             old     new   delta
static.mpl                                             -      12     +12
packed_usage                                       33307   33316      +9
man_main                                             857     851      -6
add_MANPATH                                          148     138     -10
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/2 up/down: 21/-16)              Total: 5 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-03-30 17:27:09 +01:00
Ron Yorston
3c6f3336e1 man: don't skip default path which appears in config file
If the MANPATH environment variable isn't set a provisional default
path of /usr/man is placed in man_path_list.  This is only used if a
configuration file doesn't contain an alternative path.

If a configuration file lists the default path first:

   MANPATH /usr/man:/usr/share/man

add_MANPATH() sees that the default entry is already present and skips
it.  As a result man_path_list only contains the second and subsequent
components of the configured MANPATH.

In such cases the path should not be skipped.

function                                             old     new   delta
add_MANPATH                                          170     183     +13
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 13/0)               Total: 13 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-03-26 17:46:21 +01:00
Denys Vlasenko
fe78c9a8b7 ts: do call localtime() when neither -s nor -i specified
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-03-26 11:51:21 +01:00
Denys Vlasenko
973698d7b1 ts: use gettimeofday - we don't use nanoseconds here
function                                             old     new   delta
ts_main                                              398     376     -22

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-03-26 11:44:48 +01:00
Denys Vlasenko
3395e2a8ef ts: replace overlapping strcpy with shorter code
function                                             old     new   delta
ts_main                                              401     398      -3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-03-26 11:41:35 +01:00
Denys Vlasenko
f370a66b26 ts: fix incorrect (copy-pasted) copyright attribution
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-03-26 11:12:53 +01:00
Denys Vlasenko
16df5e8e6d ts: new applet
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-03-26 11:02:31 +01:00
Denys Vlasenko
5059653882 do not duplicate CONFIG_PID_FILE_PATH and ".pid" strings
text	   data	    bss	    dec	    hex	filename
 981737	    485	   7296	 989518	  f194e	busybox_old
 981704	    485	   7296	 989485	  f192d	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-03-17 19:48:39 +01:00
Nikolaus Voss
f81e0120f4 i2c_tools.c: i2ctransfer
Call i2c_set_slave_addr() unconditionally as busy checking
is skipped depending on force argument.
Clarify usage texts for -f and -a flags.

Signed-off-by: Nikolaus Voss <nv@vosn.de>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-02-11 12:34:13 +01:00
Nikolaus Voss
dac8f5ea38 i2ctransfer: new applet
i2ctransfer sends and receives user defined i2c messages

v2: apply Xabier's comments: add -a option, don't decrement argc,
    use bb_show_usage() and xzalloc()
v3: fix possible out of bound access to msgs[nmsgs]

Reviewed-by: Xabier Oneca -- xOneca <xoneca@gmail.com>
Signed-off-by: Nikolaus Voss <nikolaus.voss@loewensteinmedical.de>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-02-10 19:59:07 +01:00
Denys Vlasenko
53799506ac bc: implement pass-by-reference code from upstream
function                                             old     new   delta
zxc_program_popResultAndCopyToVar                    298     493    +195
bc_vec_pushIndex                                       -      75     +75
zxc_vm_process                                       859     928     +69
xc_program_dereference                                 -      66     +66
bc_vec_npush                                           -      65     +65
zbc_num_s                                            239     249     +10
zxc_program_num                                     1024    1032      +8
zbc_num_divmod                                       150     156      +6
xc_program_search                                    143     146      +3
zxc_program_assign                                   392     389      -3
zdc_program_execStr                                  520     517      -3
xc_program_pushVar                                   198     195      -3
zxc_program_exec                                    4101    4092      -9
zbc_program_call                                     318     308     -10
zbc_func_insert                                      120     104     -16
zbc_parse_stmt_possibly_auto                        1460    1439     -21
bc_vec_push                                           53      12     -41
xc_parse_pushIndex                                    61      18     -43
------------------------------------------------------------------------------
(add/remove: 3/0 grow/shrink: 6/9 up/down: 497/-149)          Total: 348 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-25 16:22:15 +01:00
Denys Vlasenko
cfc2546ea4 bc: code shrink
function                                             old     new   delta
xc_parse_pushInst_and_Index                            -      16     +16
zbc_parse_expr                                      1818    1816      -2
xc_parse_pushIndex                                    65      61      -4
zbc_parse_pushSTR                                     63      58      -5
zbc_parse_name                                       448     442      -6
xc_parse_pushNUM                                      74      67      -7
zdc_parse_expr                                       479     470      -9
bc_parse_pushJUMP_ZERO                                21      12      -9
bc_parse_pushJUMP                                     21      12      -9
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/8 up/down: 16/-51)            Total: -35 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-09 11:17:19 +01:00
Denys Vlasenko
a1698a15dc bc: remove "empty expression" check/message, parsing fails in these cases anyway
function                                             old     new   delta
zbc_parse_expr                                      1848    1818     -30

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-08 19:32:38 +01:00
Denys Vlasenko
132d7c098b bc: zbc_parse_expr_empty_ok() is unused except by zbc_parse_expr(), fold it in
function                                             old     new   delta
zbc_parse_expr                                      1865    1848     -17

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-08 19:29:35 +01:00
Denys Vlasenko
fc7aa7a296 bc: disallow invalid syntax like "{ print 1 print 2 }"
statement parsing must NOT eat the terminator: caller needs to know
what it was, to correctly decide whether it is a valid one.

function                                             old     new   delta
zxc_program_read                                       -     234    +234
zdc_program_printStream                                -     144    +144
zbc_parse_stmt_possibly_auto                        1413    1460     +47
zxc_vm_process                                       869     859     -10
zxc_program_exec                                    4116    4101     -15
zdc_program_asciify                                  368       -    -368
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 1/2 up/down: 425/-393)           Total: 32 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-08 18:10:00 +01:00
Denys Vlasenko
edca770d11 sleep: support "inf"
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-07 15:20:56 +01:00
Denys Vlasenko
e05ec6ed3e bc: shorten "limits" output
text	   data	    bss	    dec	    hex	filename
 979016	    485	   7296	 986797	  f0ead	busybox_old
 978959	    485	   7296	 986740	  f0e74	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-04 16:26:19 +01:00
Denys Vlasenko
f11b5b9864 bc: formatting changes, added a FIXME comment, no logic changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-04 15:54:40 +01:00
Denys Vlasenko
54f5c1d600 bc: support void functions (GNU compat)
function                                             old     new   delta
xc_program_print                                       -     689    +689
zxc_vm_process                                       814     869     +55
zxc_program_exec                                    4098    4116     +18
zxc_program_assign                                   385     392      +7
bc_result_free                                        43      46      +3
zxc_program_binOpPrep                                243     245      +2
zdc_program_execStr                                  518     520      +2
zxc_program_print                                    683       -    -683
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 6/0 up/down: 776/-683)           Total: 93 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-04 13:58:46 +01:00
Denys Vlasenko
1db367a8e6 dc: fit returning of string
function                                             old     new   delta
zxc_program_exec                                    4087    4098     +11

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-04 06:18:00 +01:00
Denys Vlasenko
6842c6062a dc: fix '?'
function                                             old     new   delta
zdc_parse_expr                                       470     479      +9
zxc_vm_process                                       839     814     -25
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 9/-25)             Total: -16 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-04 05:41:47 +01:00
Denys Vlasenko
377cc97b19 bc: eliminate struct BcInstPtr::results_len_before_call, it is redundant
function                                             old     new   delta
zbc_program_call                                     332     318     -14
zxc_program_exec                                    4147    4087     -60
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-74)             Total: -74 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-04 00:35:31 +01:00
Denys Vlasenko
02c3d7a1c9 bc: add a palceholder comment for "void" return
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-04 00:21:29 +01:00
Denys Vlasenko
19c3eb0b04 bc: remove extra div/0 test, remove test for string function parameter
function                                             old     new   delta
zbc_program_call                                     354     332     -22
zxc_program_assign                                   426     385     -41
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-63)             Total: -63 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-04 00:05:07 +01:00
Denys Vlasenko
96b5ec10fb bc: fix "...; return}" to work, disallow "return ()"
function                                             old     new   delta
zbc_parse_expr                                        24    1865   +1841
zbc_parse_stmt_possibly_auto                        1425    1413     -12
bc_parse_expr_empty_ok                              1843       -   -1843
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/1 up/down: 1841/-1855)        Total: -14 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-03 23:34:36 +01:00
Denys Vlasenko
ae6c44ea15 bc: make error line number also size_t, like everything else
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-02 16:30:24 +01:00
Denys Vlasenko
266bec8ba7 bc: speed up string printing, fix print ""
function                                             old     new   delta
static.esc                                             -       9      +9
zxc_program_print                                    681     683      +2
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/0 up/down: 11/0)               Total: 11 bytes
   text	   data	    bss	    dec	    hex	filename
 979144	    485	   7296	 986925	  f0f2d	busybox_old
 979062	    485	   7296	 986843	  f0edb	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-02 05:03:53 +01:00
Denys Vlasenko
2231468a2f bc: upstream fixes
function                                             old     new   delta
bc_parse_expr_empty_ok                              1764    1843     +79
bc_error_at                                            -      62     +62
bc_parse_inst_isLeaf                                   -      30     +30
zbc_func_insert                                      100     120     +20
bc_error_bad_function_definition                       -      10     +10
bc_error_bad_assignment                                -      10     +10
zxc_lex_next                                        1608    1614      +6
ok_in_expr                                            30       -     -30
zxc_vm_process                                       874     839     -35
------------------------------------------------------------------------------
(add/remove: 4/1 grow/shrink: 3/1 up/down: 217/-65)           Total: 152 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-01 21:50:14 +01:00
Denys Vlasenko
51b510a480 bc: in xc_read_line(), check ^C on NUL input bytes too
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2019-01-01 02:19:02 +01:00
Denys Vlasenko
8797adc1c6 bc: remove superfluous assigment
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-31 19:50:06 +01:00
Denys Vlasenko
680ccd3573 bc: support ibase up to 36 (GNU compat)
function                                             old     new   delta
zxc_program_num                                      995    1018     +23

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-31 19:42:13 +01:00
Denys Vlasenko
2747f6195b bc: fold xc_lex_more_input() into peek_inbuf()
function                                             old     new   delta
peek_inbuf                                            69      56     -13

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-31 18:48:59 +01:00
Denys Vlasenko
2cd8c04632 bc: tidying up, no logic changes
function                                             old     new   delta
bc_ops_prec_and_assoc                                  -      25     +25
xc_vm_init                                           665     663      -2
bc_parse_ops                                          25       -     -25
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 0/1 up/down: 25/-27)             Total: -2 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-30 15:56:36 +01:00
Denys Vlasenko
8ab209f00e bc: simplify representation of 0.5 in sqrt()
function                                             old     new   delta
zxc_program_exec                                    4012    4149    +137
zdc_program_printStream                              144       -    -144
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/0 up/down: 137/-144)           Total: -7 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-29 16:23:34 +01:00
Denys Vlasenko
374d2c47ec bc: remove special-cased assignment to ibase, it works correctly with general rules
function                                             old     new   delta
zxc_program_print                                    683     681      -2
zxc_program_prep                                      91      89      -2
zxc_program_copyToVar                                300     298      -2
zdc_program_printStream                              146     144      -2
zdc_program_execStr                                  520     518      -2
zdc_program_asciify                                  370     368      -2
zxc_program_exec                                    4016    4012      -4
zdc_program_modexp                                   694     688      -6
zxc_program_num                                     1020     995     -25
zxc_program_binOpPrep                                306     243     -63
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/10 up/down: 0/-110)          Total: -110 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-29 14:52:30 +01:00
Denys Vlasenko
d5b0fa6abf bc: more fixes for unusual input bases
function                                             old     new   delta
zxc_program_num                                      990    1020     +30
zxc_lex_number                                       172     202     +30
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 60/0)               Total: 60 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-29 03:08:12 +01:00
Denys Vlasenko
e16a5223d2 bc: fix handling of "digits" above 9
function                                             old     new   delta
zxc_lex_next                                        1573    1608     +35
xc_parse_pushIndex                                    58      56      -2
xc_program_index                                      71      63      -8
zxc_program_num                                     1022     990     -32
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 35/-42)             Total: -7 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-29 02:24:19 +01:00
Denys Vlasenko
b86b39bfda config: more tweaks
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-28 17:52:43 +01:00
Denys Vlasenko
cdadad58a1 bc: bc enables FEATURE_DC_BIG, for correct dc testsuite operation
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-28 15:13:23 +01:00
Denys Vlasenko
1476760600 bc: rename config options
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-28 13:32:04 +01:00
Denys Vlasenko
b097a84d62 config: update size information
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-28 03:20:17 +01:00
Denys Vlasenko
10bde14292 bc: rename functions common to bc and dc as xc_FOO()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-27 18:23:58 +01:00
Denys Vlasenko
db8d607514 bc: G.prog.zero does not need initializing num[] vector
function                                             old     new   delta
bc_vm_init                                           676     665     -11

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-27 18:08:49 +01:00
Denys Vlasenko
3d27d435db randomconfig fixes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-27 18:03:20 +01:00
Denys Vlasenko
2beb1f6faf bc: use ALIGN1 where appropriate
text	   data	    bss	    dec	    hex	filename
 980138	    485	   7296	 987919	  f130f	busybox_old
 980128	    485	   7296	 987909	  f1305	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 21:17:12 +01:00
Denys Vlasenko
8af11087b2 bc: undo debugging change, add a small optimization
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 21:01:41 +01:00
Denys Vlasenko
ab9a98602f bc: simple speedups
function                                             old     new   delta
bc_parse_pushName                                     20      56     +36
bc_program_index                                      47      71     +24
bc_parse_pushIndex                                    52      58      +6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 66/0)               Total: 66 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 20:30:47 +01:00
Denys Vlasenko
f706a18f33 bc: use '\0' insteads of 0xff (BC_PARSE_STREND) as name terminator
function                                             old     new   delta
zdc_program_printStream                                -     146    +146
zbc_program_exec                                    4003    4016     +13
zdc_parse_expr                                       473     470      -3
bc_parse_pushName                                     31      20     -11
bc_program_name                                       63      34     -29
zbc_program_pushArray                                147       -    -147
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 1/3 up/down: 159/-190)          Total: -31 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 20:02:27 +01:00
Denys Vlasenko
1c69ec1597 bc: reduce indentation, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 19:24:15 +01:00
Denys Vlasenko
8a56e3643f bc: fix "bc only" build
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 19:09:23 +01:00
Denys Vlasenko
1e87b97da6 bc: fix "dc only" build
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 19:06:05 +01:00
Denys Vlasenko
2f7352b4f5 bc: comment out code which appears to be never reached
function                                             old     new   delta
zbc_lex_next                                        1587    1568     -19

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 18:59:42 +01:00
Denys Vlasenko
b1b7996a2a bc: remove all logic for multi-line buffering
function                                             old     new   delta
zbc_vm_process                                       865     874      +9
zbc_parse_text_init                                   51      38     -13
bc_read_line                                         394     345     -49
peek_inbuf                                           292      69    -223
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 9/-285)           Total: -276 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 18:46:03 +01:00
Denys Vlasenko
7d32e25bf3 bc: prepare for char-by-char input handling
function                                             old     new   delta
peek_inbuf                                             -     292    +292
parse_lex_by_checking_eq_sign                          -      26     +26
eat_inbuf                                              -      22     +22
zbc_vm_execute_FILE                                   52      61      +9
bc_lex_lineComment                                    29      30      +1
zbc_lex_number                                       174     172      -2
bc_vm_run                                            104      99      -5
zbc_num_divmod                                       156     150      -6
bc_lex_file                                           24       -     -24
bc_lex_assign                                         26       -     -26
zbc_lex_next                                        1982    1587    -395
------------------------------------------------------------------------------
(add/remove: 3/2 grow/shrink: 2/4 up/down: 350/-458)         Total: -108 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 18:32:43 +01:00
Denys Vlasenko
63ad799384 bc: fix handling of comment/string interactions while buffering input
function                                             old     new   delta
zbc_lex_next                                        1965    1982     +17
zbc_num_divmod                                       150     156      +6
bc_read_line                                         411     394     -17
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 23/-17)              Total: 6 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 12:23:05 +01:00
Denys Vlasenko
94576d2b97 bc: fix interactive handling of comments in strings and quotes in comments
function                                             old     new   delta
zbc_lex_next                                        1965    1979     +14

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 23:45:57 +01:00
Denys Vlasenko
c192b0442b bc: simplify input pointer manipulation while lexing
function                                             old     new   delta
bc_lex_name                                           70      68      -2
zbc_lex_number                                       177     174      -3
bc_vm_init                                           679     676      -3
bc_lex_whitespace                                     42      39      -3
zbc_parse_text_init                                   55      51      -4
bc_lex_lineComment                                    37      29      -8
bc_lex_assign                                         34      26      -8
zbc_lex_next                                        2039    1965     -74
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/8 up/down: 0/-105)           Total: -105 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 23:15:59 +01:00
Denys Vlasenko
ecb62edd47 bc: fold struct BcLex into BcParse
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 22:32:41 +01:00
Denys Vlasenko
6e6182342e bc: move BcLex::lex member to be the first in struct globals
function                                             old     new   delta
zbc_program_exec                                    3967    4003     +36
zdc_program_execStr                                  501     520     +19
zbc_posix_error_fmt                                   58      62      +4
bc_vm_init                                           675     679      +4
bc_read_line                                         407     411      +4
bc_error_fmt                                          36      40      +4
zdc_parse_register                                    45      44      -1
zdc_parse_exprs_until_eof                             28      27      -1
zbc_parse_text_init                                   56      55      -1
zbc_parse_stmt_allow_NLINE_before                     55      54      -1
zbc_lex_skip_if_at_NLINE                              19      18      -1
zbc_lex_number                                       178     177      -1
bc_parse_create                                       97      96      -1
bc_lex_whitespace                                     43      42      -1
bc_lex_name                                           71      70      -1
bc_lex_lineComment                                    38      37      -1
bc_lex_assign                                         35      34      -1
zdc_parse_expr                                       476     473      -3
bc_verror_msg                                         93      90      -3
bc_lex_file                                           27      24      -3
zbc_parse_name                                       453     448      -5
bc_parse_expr_empty_ok                              1776    1764     -12
zbc_vm_process                                       878     865     -13
zbc_parse_stmt_possibly_auto                        1451    1425     -26
zbc_lex_next                                        2075    2039     -36
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 6/19 up/down: 71/-112)          Total: -41 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 22:20:14 +01:00
Denys Vlasenko
0b0e8d0509 bc: rename some members and macros, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 21:44:10 +01:00
Denys Vlasenko
3f8752c33f bc: shorten error messages
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 21:28:25 +01:00
Gavin Howard
fa495ce498 bc: make it clear that the code is adapted
Signed-off-by: Gavin Howard <yzena.tech@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 20:53:15 +01:00
Denys Vlasenko
a2e62e3e50 bc: stop passing a pointer to G.prs down the call chain
function                                             old     new   delta
rewrite_label_to_current                              19      26      +7
bc_lex_assign                                         28      35      +7
zbc_lex_skip_if_at_NLINE                              14      19      +5
bc_parse_push                                         11      16      +5
bc_parse_operator                                    147     152      +5
bc_parse_create                                       92      97      +5
bc_lex_whitespace                                     38      43      +5
bc_lex_name                                           66      71      +5
bc_lex_lineComment                                    33      38      +5
zbc_lex_number                                       174     178      +4
zbc_parse_text_init                                   53      56      +3
zdc_parse_register                                    43      45      +2
zdc_parse_exprs_until_eof                             26      28      +2
bc_parse_free                                         38      40      +2
bc_lex_file                                           28      27      -1
zbc_parse_pushSTR                                     65      63      -2
bc_parse_expr_empty_ok                              1778    1776      -2
zbc_vm_execute_FILE                                   55      52      -3
bc_vm_init                                           678     675      -3
zbc_parse_stmt_allow_NLINE_before                     59      55      -4
bc_parse_pushNUM                                      80      74      -6
bc_parse_pushJUMP_ZERO                                27      21      -6
bc_parse_pushJUMP                                     27      21      -6
bc_vm_run                                            112     104      -8
bc_parse_pushName                                     39      31      -8
bc_parse_pushIndex                                    60      52      -8
zbc_parse_name                                       468     453     -15
zdc_program_execStr                                  524     501     -23
zdc_parse_mem                                         93      70     -23
zbc_program_exec                                    4003    3967     -36
zdc_parse_expr                                       518     476     -42
zbc_vm_process                                       923     878     -45
zbc_lex_next                                        2158    2070     -88
zbc_parse_stmt_possibly_auto                        1560    1451    -109
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 14/20 up/down: 62/-438)        Total: -376 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 20:40:55 +01:00
Denys Vlasenko
1fbe35a7d8 bc: make zbc_program_read() and zdc_program_execStr() use G.prs
function                                             old     new   delta
zbc_program_print                                    656     683     +27
zbc_program_exec                                    3976    4003     +27
zdc_program_execStr                                  512     524     +12
bc_num_printNewline                                   45      54      +9
bc_num_printHex                                       61      67      +6
bc_num_printDigits                                   131     137      +6
dc_num_printChar                                      21      24      +3
bc_vm_init                                           675     678      +3
zbc_program_assign                                   424     426      +2
bc_read_line                                         410     407      -3
bc_verror_msg                                         99      93      -6
zbc_lex_next                                        2167    2158      -9
zbc_vm_execute_FILE                                   67      55     -12
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 9/4 up/down: 95/-30)             Total: 65 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 19:38:13 +01:00
Denys Vlasenko
53e569c06b bc: fix interactive read()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 19:37:23 +01:00
Denys Vlasenko
2638454464 bc: add code to detect errors like "print 1 print 2"
function                                             old     new   delta
zbc_vm_process                                       831     925     +94
zbc_program_exec                                    3964    3976     +12
zdc_program_execStr                                  506     512      +6
zbc_lex_next                                        2161    2167      +6
zbc_program_assign                                   419     424      +5
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 5/0 up/down: 123/0)             Total: 123 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 18:37:52 +01:00
Denys Vlasenko
5fa74b9efc bc: allow {break} and {continue} (allow RBRACE to terminate them)
function                                             old     new   delta
zbc_parse_stmt_possibly_auto                        1599    1560     -39

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 17:07:51 +01:00
Denys Vlasenko
d4b721cc8b bc: shrink parsing code a bit more, disallow "auto a b c" (without commas)
function                                             old     new   delta
bc_parse_expr_empty_ok                              1791    1785      -6
zbc_parse_stmt_possibly_auto                        1675    1599     -76
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-82)             Total: -82 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 16:39:01 +01:00
Denys Vlasenko
73b3ebc0e1 bc: simplify bc_parse_expr_empty_ok()
function                                             old     new   delta
bc_parse_expr_empty_ok                              1810    1791     -19

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 01:43:52 +01:00
Denys Vlasenko
d0238d83f0 bc: simplify bc_parse_expr_empty_ok()
function                                             old     new   delta
bc_parse_expr_empty_ok                              1819    1810      -9

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 01:21:16 +01:00
Denys Vlasenko
bb116031a0 bc: simplify bc_parse_expr_empty_ok()
function                                             old     new   delta
bc_parse_expr_empty_ok                              1846    1819     -27

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 01:16:37 +01:00
Denys Vlasenko
d897c9aca6 bc: BC_RESULT_ONE is bc-specific
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 23:41:31 +01:00
Denys Vlasenko
0c45bb22a0 bc: partially deinline BC_PARSE_LEAF() macro
function                                             old     new   delta
ok_in_expr                                             -      30     +30
bc_parse_expr_empty_ok                              1972    1846    -126
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/1 up/down: 30/-126)           Total: -96 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 23:22:40 +01:00
Denys Vlasenko
a17d95d0d0 bc: rename lexer variables, use smallints where appropriate
function                                             old     new   delta
bc_parse_expr_empty_ok                              1966    1972      +6
zdc_parse_expr                                       514     518      +4
zbc_lex_number                                       177     174      -3
dc_num_printChar                                      24      21      -3
bc_lex_whitespace                                     41      38      -3
bc_lex_name                                           69      66      -3
bc_lex_lineComment                                    36      33      -3
bc_lex_assign                                         31      28      -3
zbc_parse_name                                       472     468      -4
zbc_vm_process                                       836     831      -5
zdc_program_execStr                                  512     506      -6
zbc_parse_text_init                                   59      53      -6
bc_num_printNewline                                   51      45      -6
bc_num_printHex                                       67      61      -6
bc_num_printDigits                                   137     131      -6
zbc_program_assign                                   426     419      -7
zbc_parse_stmt_possibly_auto                        1682    1675      -7
zbc_program_exec                                    3977    3964     -13
zbc_program_print                                    683     656     -27
zbc_lex_next                                        2233    2161     -72
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/18 up/down: 10/-183)         Total: -173 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 22:55:54 +01:00
Denys Vlasenko
d279d809ac bc: fix "bc -s" only warning on "define f()<newline>", not exiting
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 18:28:56 +01:00
Denys Vlasenko
79587cb442 bc: POSIX error/warn functions can be 'z' functions too
In non-interactive config, they either return 'success', or do not return.

function                                             old     new   delta
zbc_posix_error_fmt                                   41      39      -2
bc_parse_expr_empty_ok                              1751    1744      -7
zbc_parse_stmt_possibly_auto                        1322    1314      -8
------------------------------------------------------------------------------
(add/remove: 5/5 grow/shrink: 0/2 up/down: 118/-135)          Total: -17 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 18:11:41 +01:00
Denys Vlasenko
65b6fe09c4 bc: remove unnecessary NULL initializers
function                                             old     new   delta
zbc_program_assign                                   442     426     -16
zbc_program_exec                                    4043    3977     -66
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-82)             Total: -82 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 17:21:31 +01:00
Denys Vlasenko
a5bf53e4bb bc: move relational LEXs before math LEXs - shorten dc_LEX_to_INST[]
function                                             old     new   delta
dc_LEX_to_INST                                        48      42      -6
zdc_parse_expr                                       523     514      -9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-15)             Total: -15 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 17:07:20 +01:00
Denys Vlasenko
4accb6bba8 bc: offset dc_LEX_to_INST[] start
function                                             old     new   delta
zdc_parse_expr                                       516     523      +7
dc_LEX_to_INST                                        56      48      -8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 7/-8)               Total: -1 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 15:29:33 +01:00
Denys Vlasenko
23ea0734e1 bc: rename BC_LEX_NLINE/WHITESPACE/STR/NAME/NUMBER to XC_LEX_
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 15:05:49 +01:00
Denys Vlasenko
9d9c97efbd bc: separate many bc and dc LEX constants
function                                             old     new   delta
zdc_parse_expr                                       510     516      +6
bc_parse_expr_empty_ok                              1963    1966      +3
dc_LEX_to_INST                                        83      56     -27
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 9/-27)             Total: -18 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 15:00:56 +01:00
Denys Vlasenko
69560f42da bc: rename several BC_LEX_OPs to XC_LEX_OPs.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 14:14:23 +01:00
Denys Vlasenko
abf6cf6765 bc: move BC_LEX_OP_INC/DEC to the end of operation LEX constants
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 13:20:57 +01:00
Denys Vlasenko
7d9be0bc6d bc: rename BC_LEXs to XC_LEXs for common constants, and to DC_LEXs for dc-specific
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 12:25:20 +01:00
Denys Vlasenko
2097ac8d9e bc: move functions/macros around, no code changes
Order now is:
enums/structures/defines,
utility/common functions,
parsing,
execution,
main loop,
main()

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 05:00:36 +01:00
Denys Vlasenko
a7732d1120 bc: rename common INST constants to XC_, dc-specific ones to DC_
This will assist in disentangling dc and bc LEX constants

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 04:26:07 +01:00
Denys Vlasenko
81293c8af0 dc: without -x, do not parse extended regs: 's p' means: store to ' ' reg, print
function                                             old     new   delta
zbc_lex_next                                        2240    2233      -7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-7)               Total: -7 bytes
   text	   data	    bss	    dec	    hex	filename
 981437	    485	   7296	 989218	  f1822	busybox_old
 981412	    485	   7296	 989193	  f1809	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 02:01:32 +01:00
Denys Vlasenko
73b2c60825 bc: fix incorrect bit in BC_PARSE_EXPRS_BITS: 'limits' is not allowed
Alsl, move and rename dc_lex_tokens[] to dc_char_to_LEX[]

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 01:04:21 +01:00
Denys Vlasenko
ad0bd381e9 bc: for "dc only" remove handling of LAST, move OBASE enums up to IBASE
function                                             old     new   delta
dc_LEX_to_INST                                         -      82     +82
bc_parse_pushNUM                                       -      62     +62
zbc_program_num                                      981     978      -3
bc_result_free                                        46      43      -3
zbc_program_binOpPrep                                305     300      -5
static.msg                                            24      12     -12
zbc_program_exec                                    4013    3994     -19
zdc_parse_expr                                       583     507     -76
dc_parse_insts                                        83       -     -83
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 0/6 up/down: 144/-201)          Total: -57 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 00:50:32 +01:00
Denys Vlasenko
9471bd4660 bc: fix empty lines in dc generating "bad token" message
function                                             old     new   delta
zdc_program_asciify                                    -     370    +370
zbc_program_pushArray                                  -     147    +147
zbc_vm_process                                       824     828      +4
zbc_program_exec                                    4182    4046    -136
zdc_program_printStream                              146       -    -146
zbc_program_read                                     268       -    -268
------------------------------------------------------------------------------
(add/remove: 2/2 grow/shrink: 1/1 up/down: 521/-550)          Total: -29 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-23 00:13:15 +01:00
Denys Vlasenko
01eb5e9da1 bc: shrink modular exponentiation code
function                                             old     new   delta
zdc_program_modexp                                   721     694     -27

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 23:59:21 +01:00
Denys Vlasenko
1acac7f9c5 bc: do not yet allow 2^2.1
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 23:14:48 +01:00