Commit Graph
100 Commits
Author SHA1 Message Date
Denys Vlasenko 49a2e484b5 shuf: in -i RANGE, accept numbers up to width of pointers
function                                             old     new   delta
.rodata                                           108468  108474      +6
shuf_main                                            555     542     -13

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-29 14:39:01 +02:00
Denys Vlasenko 60f4843468 shuf: with -i LOW-HIGH, do not allow any argv's
function                                             old     new   delta
shuf_main                                            436     441      +5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-23 15:52:34 +02:00
Denys Vlasenko d59f539d57 shuf: tweak --help text
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-23 15:48:22 +02:00
Denys Vlasenko 1b661122a8 mount: code shrink
function                                             old     new   delta
append_mount_options                                 174     157     -17

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-23 02:31:26 +02:00
Denys Vlasenko dbdf9e0ab1 mount: with -w, do not fall back to read-only mounts
function                                             old     new   delta
mount_it_now                                         364     358      -6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-23 02:30:13 +02:00
Denys Vlasenko 1e7ca18591 Regularize "NUL terminated input" --help texts
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-22 15:43:29 +02:00
Denys Vlasenko 62d5a1e56f tar,smemcap: commonalyze checksumming code for tar header
function                                             old     new   delta
chksum_and_xwrite_tar_header                           -      99     +99
writeheader                                          280     199     -81
chksum_and_xwrite                                    102       -    -102
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 0/1 up/down: 99/-183)           Total: -84 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-20 17:58:49 +02:00
Denys Vlasenko 29b53ef03f udhcp: fix build breakage on MIPS
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-20 13:38:16 +02:00
Denys Vlasenko 9d286a0a55 Start 1.35.0 development cycle
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-19 15:06:57 +02:00
Denys Vlasenko d922947834 Bump version to 1.34.0
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-19 15:04:39 +02:00
Denys Vlasenko 540aa11661 scripts/randomtest.loop: let user know about SKIP_MOUNT_MAND_TESTS
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-16 20:03:07 +02:00
Denys Vlasenko 9ba502456f fdisk: indentation fix
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-16 11:13:30 +02:00
Denys Vlasenko 59243a86d9 busybox: fix "busybox --help busybox" not showing correct text
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-16 08:53:42 +02:00
Denys Vlasenko 8e8cea2a1b awk: fix testsuite
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-16 07:37:22 +02:00
Denys Vlasenko d6a7203042 vi: fix compile-time error if !ENABLE_FEATURE_VI_SETOPTS
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-16 01:31:32 +02:00
Denys Vlasenko 8d718686f7 tar: fix testsuite
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-16 00:48:50 +02:00
Denys Vlasenko 1ce60699c1 dd: tweak --help
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-15 23:05:30 +02:00
Denys Vlasenko b259415b51 dd: fix testsuite
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-15 23:01:33 +02:00
Denys Vlasenko d32ef3174b *: remove remains of FEATURE_TOUCH_NODEREF
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-15 20:50:13 +02:00
Denys Vlasenko 319e20b56b taskset: disallow "taskset -p 0"
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-15 20:41:18 +02:00
Denys Vlasenko ac2d4d88ce touch: fix SEGV if !ENABLE_FEATURE_TOUCH_SUSV3
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-15 20:23:40 +02:00
Denys Vlasenko eaa8ee40aa cut: fix testsuite
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-15 20:15:42 +02:00
Denys Vlasenko 21afddefd2 hush: fix "error: invalid preprocessing directive ##"
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-15 20:08:53 +02:00
Denys Vlasenko 2a1ce6b20e traceroute: fix compile error due to FreeBSD compat
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-15 20:06:52 +02:00
Denys Vlasenko 3d40dfabe1 tar: simplify addition of --exclude=GLOB to the expansion of -X EXCLFILE
function                                             old     new   delta
tar_main                                            1115    1105     -10

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-08-02 19:58:13 +02:00
Denys Vlasenko 37460f5daf hush: tweak ${var/pattern/repl} optimization
function                                             old     new   delta
expand_one_var                                      2507    2502      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-27 18:13:39 +02:00
Denys Vlasenko 49cc3cac30 hush: optimize ${var/pattern/repl} for trivial patterns
function                                             old     new   delta
expand_one_var                                      2353    2507    +154

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-27 17:53:55 +02:00
Denys Vlasenko c450437a4e shell: update psubst testcases
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-27 04:20:32 +02:00
Denys Vlasenko 8dd676c6c3 hush: add missed "undef"
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-27 04:09:45 +02:00
Denys Vlasenko b278d82c61 hush: implement $'str' bashism
function                                             old     new   delta
parse_dollar_squote                                    -     441    +441
encode_then_expand_vararg                            359     380     +21
parse_stream                                        2252    2271     +19
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 2/0 up/down: 481/0)             Total: 481 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-26 15:32:46 +02:00
Denys Vlasenko 05c5d745f7 ahell: update testsuite
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-25 22:03:16 +02:00
Denys Vlasenko 53d45c934f ash: speed up ${v//pattern/repl}
function                                             old     new   delta
subevalvar                                          1447    1457     +10

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-25 21:54:14 +02:00
Denys Vlasenko 1310d7b1d1 ash: speed up ${v//pattern/repl} if !ASH_OPTIMIZE_FOR_SIZE
function                                             old     new   delta
subevalvar                                          1353    1447     +94
.rodata                                           104179  104184      +5
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 99/0)               Total: 99 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-22 18:15:59 +02:00
Denys Vlasenko dabbeeb793 awk: whitespace and debugging tweaks
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-14 16:58:05 +02:00
Denys Vlasenko 95fffd8a7f vi: remove redundant assignment
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-14 16:32:19 +02:00
Denys Vlasenko d3480dd582 awk: disallow break/continue outside of loops
function                                             old     new   delta
.rodata                                           104139  104186     +47
chain_group                                          610     633     +23
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 70/0)               Total: 70 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-14 16:32:19 +02:00
Denys Vlasenko d62627487a awk: tighten parsing - disallow extra semicolons
'; BEGIN {...}' and 'BEGIN {...} ;; {...}' are not accepted by gawk

function                                             old     new   delta
parse_program                                        332     353     +21

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-14 16:32:19 +02:00
Denys Vlasenko 36feb26824 vi: somewhat more readable code, no logic changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-13 16:16:21 +02:00
Denys Vlasenko 95ac4a48f1 vi: allow regular expressions in ':s' commands
BusyBox vi has never supported the use of regular expressions in
search/replace (':s') commands.  Implement this using GNU regex
when VI_REGEX_SEARCH is enabled.

The implementation:

- uses basic regular expressions, to match those used in the search
  command;

- only supports substitution of back references ('\0' - '\9') in the
  replacement string.  Any other character following a backslash is
  treated as that literal character.

VI_REGEX_SEARCH isn't enabled in the default build.  In that case:

function                                             old     new   delta
colon                                               4036    4033      -3
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-3)               Total: -3 bytes

When VI_REGEX_SEARCH is enabled:

function                                             old     new   delta
colon                                               4036    4378    +342
.rodata                                           108207  108229     +22
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 364/0)             Total: 364 bytes

v2: Rebase.  Code shrink.  Ensure empty replacement string is null terminated.

Signed-off-by: Andrey Dobrovolsky <andrey.dobrovolsky.odessa@gmail.com>
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-13 14:38:20 +02:00
Denys Vlasenko ab755e3717 awk: in parsing, remove superfluous NEWLINE check; optimize builtin arg evaluation
function                                             old     new   delta
exec_builtin                                        1149    1145      -4

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-12 13:30:30 +02:00
Denys Vlasenko 8d269ef859 awk: fix printf "%-10c", 0
function                                             old     new   delta
awk_printf                                           596     626     +30

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-12 11:27:11 +02:00
Denys Vlasenko caa93ecdd3 awk: fix corner case in awk_printf
Example where it wasn't working:
    awk 'BEGIN { printf "qwe %s rty %c uio\n", "a", 0, "c" }'
- the NUL printing in %c caused premature stop of printing.

function                                             old     new   delta
awk_printf                                           593     596      +3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-11 18:16:10 +02:00
Denys Vlasenko f5f336e787 tc: fix for parsing of "dev IFACE" and printing of "class list"
First part (parsing fix) is from Steffen Nurpmeso <steffen@sdaoden.eu>

function                                             old     new   delta
.rodata                                           104120  104138     +18
print_qdisc                                          469     464      -5
tc_main                                              980     969     -11
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/2 up/down: 18/-16)              Total: 2 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-11 14:50:04 +02:00
Denys Vlasenko 39aabfe8f0 awk: unbreak "cmd" | getline
function                                             old     new   delta
evaluate                                            3337    3343      +6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-11 12:51:43 +02:00
Denys Vlasenko 4ef8841b21 awk: unbreak "printf('%c') can output NUL" testcase
function                                             old     new   delta
awk_printf                                           546     593     +47

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-11 12:25:33 +02:00
Denys Vlasenko 3d57a84907 awk: undo TI_PRINT, it introduced a bug (print with any redirect acting as printf)
function                                             old     new   delta
evaluate                                            3329    3337      +8

Patch by Ron Yorston <rmy@pobox.com>

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-11 12:00:31 +02:00
Denys Vlasenko 49c3ce64f0 awk: rollback_token() + chain_group() == chain_until_rbrace()
function                                             old     new   delta
parse_program                                        336     332      -4

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-11 11:46:21 +02:00
Denys Vlasenko e2e3802987 awk: fix printf buffer overflow
function                                             old     new   delta
awk_printf                                           468     546     +78
fmt_num                                              239     247      +8
getvar_s                                             125     111     -14
evaluate                                            3343    3329     -14
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/2 up/down: 86/-28)             Total: 58 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-04 01:25:34 +02:00
Denys Vlasenko 08ca313d7e awk: simplify tests for operation class
Usually, an operation class has only one possible value of "info" word.
In this case, just compare the entire info word, do not bother
to mask OPCLSMASK bits.

(Example where this is not the case: OC_REPLACE for "<op>=")

function                                             old     new   delta
mk_splitter                                          106     100      -6
chain_group                                          616     610      -6
nextarg                                               40      32      -8
exec_builtin                                        1157    1149      -8
as_regex                                             111     103      -8
awk_split                                            553     543     -10
parse_expr                                           948     936     -12
awk_getline                                          656     642     -14
evaluate                                            3387    3343     -44
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/9 up/down: 0/-116)           Total: -116 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-03 14:11:51 +02:00
Denys Vlasenko cb042b0582 awk: restore strdup elision optimization in assignment
function                                             old     new   delta
evaluate                                            3339    3387     +48

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-03 13:30:45 +02:00
Denys Vlasenko 90404ed2f6 awk: match(): code shrink
function                                             old     new   delta
do_match                                               -     165    +165
exec_builtin_match                                   202       -    -202
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 0/0 up/down: 165/-202)          Total: -37 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-03 12:20:36 +02:00
Denys Vlasenko 0e3ef4efb0 awk: rand(): 64-bit constants should be ULL
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-03 11:57:59 +02:00
Denys Vlasenko 2211fa70cc awk: do not use a copy of g_progname for node->l.new_progname
We never destroy g_progname's, the strings still exist, no need to copy

function                                             old     new   delta
chain_node                                           104      97      -7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-03 11:54:01 +02:00
Denys Vlasenko e1e7ad6b60 awk: support %F %a %A in printf
function                                             old     new   delta
.rodata                                           104111  104120      +9

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-03 01:59:36 +02:00
Denys Vlasenko 1f765709ed awk: open-code TS_OPTERM, no logic changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-03 01:32:03 +02:00
Denys Vlasenko 2b65e73db3 awk: tighten rules in action parsing
Disallow:
    BEGIN
	{ action }  - must start on the same line
Disallow:
    func f()
	print "hello" - must be in {...}

function                                             old     new   delta
chain_until_rbrace                                     -      41     +41
parse_program                                        307     336     +29
chain_group                                          649     616     -33
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/1 up/down: 70/-33)             Total: 37 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-03 01:16:48 +02:00
Denys Vlasenko 717200eb43 awk: rename GRPSTART/END to L/RBRACE, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-03 00:39:55 +02:00
Denys Vlasenko b705bf5539 awk: move match() code out-of-line
function                                             old     new   delta
exec_builtin_match                                     -     202    +202
exec_builtin                                        1434    1157    -277
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/1 up/down: 202/-277)          Total: -75 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02 23:48:48 +02:00
Denys Vlasenko 646429e05e awk: use smaller regmatch_t arrays, they had 2 elements for no apparent reason
function                                             old     new   delta
exec_builtin                                        1479    1434     -45

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02 23:26:09 +02:00
Denys Vlasenko a5d7b0f4f4 awk: fix detection of VAR=VAL arguments
1NAME=VAL is not it, neither is VA.R=VAL

function                                             old     new   delta
next_input_file                                      216     214      -2
is_assignment                                        115      91     -24
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-26)             Total: -26 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02 23:07:21 +02:00
Denys Vlasenko 4d902ea9de awk: fix beavior of "exit" without parameter
function                                             old     new   delta
evaluate                                            3336    3339      +3
awk_exit                                              93      94      +1
awk_main                                             829     827      -2
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 4/-2)                Total: 2 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02 22:28:51 +02:00
Denys Vlasenko 8bb03da906 awk: rand() could return 1.0, fix this - should be in [0,1)
While at it, make it finer-grained (63 bits of randomness)

function                                             old     new   delta
evaluate                                            3303    3336     +33
.rodata                                           104107  104111      +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 37/0)               Total: 37 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02 19:38:03 +02:00
Denys Vlasenko 37ae8cdc6e awk: beautify builtins table, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02 18:55:00 +02:00
Denys Vlasenko 47d9133896 awk: enforce simple builtins' argument number
function                                             old     new   delta
evaluate                                            3215    3303     +88
.rodata                                           104036  104107     +71
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 159/0)             Total: 159 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02 18:28:12 +02:00
Denys Vlasenko 786ca197ad awk: make builtin definitions more understandable, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02 17:32:08 +02:00
Denys Vlasenko 640212ae0e awk: do not special-case "delete"
Rework of the previous fix:
Can use operation attributes to disable arg evaluation instead of special-casing.

function                                             old     new   delta
.rodata                                           104032  104036      +4
evaluate                                            3223    3215      -8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 4/-8)               Total: -4 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02 15:21:36 +02:00
Denys Vlasenko ef5463cf16 awk: shuffle globals for smaller offsets
function                                             old     new   delta
awk_main                                             832     829      -3
evaluate                                            3229    3223      -6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-9)               Total: -9 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02 14:53:52 +02:00
Denys Vlasenko 966cafcc77 awk: use "static" tmpvars in main and exit
function                                             old     new   delta
awk_exit                                             103      93     -10
awk_main                                             850     832     -18
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-28)             Total: -28 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02 14:33:13 +02:00
Denys Vlasenko 1193c68fa7 awk: when parsing length(), simplify eating of LPAREN
function                                             old     new   delta
parse_expr                                           945     948      +3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02 14:29:01 +02:00
Denys Vlasenko 40573556f2 awk: shuffle functions to reduce forward declarations, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-02 14:27:40 +02:00
Denys Vlasenko 8b4c429025 awk: use static tmpvars instead of nvalloc(1)ed ones
ptest() was using this idea already.

As far as I can see, this is safe. Ttestsuite passes.

One downside is that a temporary from e.g. printf invocation
won't be freed until the next printf call.

function                                             old     new   delta
awk_printf                                           481     468     -13
as_regex                                             137     111     -26
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-39)             Total: -39 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-01 17:50:26 +02:00
Denys Vlasenko 1573487e21 awk: rename temp variables, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-07-01 16:17:33 +02:00
Denys Vlasenko d7354df169 awk: evaluate all, even superfluous function args
function                                             old     new   delta
evaluate                                            3128    3135      +7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-30 12:52:51 +02:00
Denys Vlasenko ca9278ee58 awk: rewrite "print" logic a bit to make it clearer
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-30 12:42:39 +02:00
Denys Vlasenko d150710169 awk: allow empty fuinctions with no arguments, disallow function redefinitions
function                                             old     new   delta
.rodata                                           103681  103700     +19
parse_program                                        303     307      +4
evaluate                                            3145    3141      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 23/-4)              Total: 19 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-30 12:23:51 +02:00
Denys Vlasenko 86fc2872b3 awk: replace incorrect use of union in undefined function check (no code changes)
...which reveals that it's buggy: it thinks "func f(){}" is an undefined function!

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-30 12:12:20 +02:00
Denys Vlasenko 6cf6f1eaee awk: remove custom pool allocator for temporary awk variables
It seems to be designed to reduce overhead of malloc's auxiliary data,
by allocating at least 64 variables as a block.
With "struct var" being about 20-32 bytes long (32/64 bits),
malloc overhead for one temporary indeed is high, ~33% more memory used
than needed.

function                                             old     new   delta
evaluate                                            3137    3145      +8
modprobe_main                                        798     803      +5
exec_builtin                                        1414    1419      +5
awk_printf                                           476     481      +5
as_regex                                             132     137      +5
EMSG_INTERNAL_ERROR                                   15       -     -15
nvfree                                               169     116     -53
nvalloc                                              145       -    -145
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 5/1 up/down: 28/-213)          Total: -185 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-30 08:01:29 +02:00
Denys Vlasenko f99800758e modprobe: when reading modules.builtin, use basenames of files from it
function                                             old     new   delta
modprobe_main                                        798     803      +5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-30 00:49:24 +02:00
Denys Vlasenko 3aff3b9cb8 awk: assorted optimizations
hash_find(): do not caclculate hash twice. Do not divide - can use
cheap multiply-by-8 shift.

nextword(): do not repeatedly increment in-memory value, do it in register,
then store final result.

hashwalk_init(): do not strlen() twice.

function                                             old     new   delta
hash_search3                                           -      49     +49
hash_find                                            259     281     +22
nextword                                              19      16      -3
evaluate                                            3141    3137      -4
hash_search                                           54      28     -26
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/3 up/down: 71/-33)             Total: 38 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 19:07:36 +02:00
Denys Vlasenko b3c91a127f awk: free unused parsing structures after parse is done
function                                             old     new   delta
hash_clear                                             -      90     +90
awk_main                                             827     849     +22
clear_array                                           90       -     -90
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 1/0 up/down: 112/-90)            Total: 22 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 19:06:59 +02:00
Denys Vlasenko 21fbee2e87 awk: document which hashes are used at what state (parse/execute)
We can free them after they are no longer needed.
(Currently, being a NOEXEC applet is much larger waste of memory
for the case of long-running awk script).

function                                             old     new   delta
awk_main                                             831     827      -4

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 14:33:04 +02:00
Denys Vlasenko 6872c193a9 awk: fix parsing of expressions such as "v (a)"
function                                             old     new   delta
next_token                                           812     825     +13

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 12:16:36 +02:00
Denys Vlasenko 686287b5da awk: deindent a block, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 03:47:46 +02:00
Denys Vlasenko 216d3d8ad9 awk: code shrink
function                                             old     new   delta
parse_expr                                           948     945      -3
chain_expr                                            65      62      -3
chain_group                                          655     649      -6
parse_program                                        310     303      -7
rollback_token                                        10       -     -10
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/4 up/down: 0/-29)             Total: -29 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 03:44:56 +02:00
Denys Vlasenko 4f27503a1e awk: get rid of "move name one char back" trick in next_token()
function                                             old     new   delta
next_token                                           791     812     +21
awk_main                                             886     831     -55
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 21/-55)            Total: -34 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 03:27:07 +02:00
Denys Vlasenko f414fb4411 awk: when parsing TC_FUNCTION token, eat its opening '('
...like we do for array references.

function                                             old     new   delta
parse_expr                                           938     948     +10
next_token                                           788     791      +3
parse_program                                        313     310      -3
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 13/-3)              Total: 10 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 03:02:21 +02:00
Denys Vlasenko cb6061a4e9 awk: g_buf[] does not need a separate allocation
function                                             old     new   delta
exec_builtin                                        1400    1414     +14
evaluate                                            3132    3141      +9
getvar_s                                             121     125      +4
awk_main                                             902     886     -16
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/1 up/down: 27/-16)             Total: 11 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 02:43:02 +02:00
Denys Vlasenko 926420795b awk: simplify parsing of function declaration
function                                             old     new   delta
parse_program                                        328     313     -15

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 02:37:10 +02:00
Denys Vlasenko 9782cb7774 awk: rename TC_SEQSTART/END to L/RPAREN, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 01:50:47 +02:00
Denys Vlasenko a493441ca5 awk: deindent code block, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 01:30:49 +02:00
Denys Vlasenko adcd9a6f34 awk: use TS_foo for combined token classes. No code changes
Confusion with "simple" classes was the cause of a bug fixed by previous commit

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 01:23:37 +02:00
Denys Vlasenko 832cb4fcb9 awk: make ltclass ("last token class") local to next_token()
function                                             old     new   delta
next_token                                           784     790      +6
next_input_file                                      219     216      -3
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 6/-3)                Total: 3 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 01:09:08 +02:00
Denys Vlasenko af0172369e awk: remove redundant check
function                                             old     new   delta
next_token                                           785     784      -1
parse_program                                        337     328      -9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-10)             Total: -10 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-29 01:03:42 +02:00
Denys Vlasenko 0231e34427 ls: revert last change (short name must be allocated)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-25 19:48:34 +02:00
Denys Vlasenko 78645d8371 awk: move locals deeper into scopes where they are used, no logic changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-25 19:41:05 +02:00
Denys Vlasenko 8c5da0323b awk: more efficient -f FILE, document what "some trick in next_token" is
function                                             old     new   delta
awk_main                                             890     898      +8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-25 19:38:27 +02:00
Denys Vlasenko 53a7a9cd8c ash: parser: Fix VSLENGTH parsing with trailing garbage
Let's adopt Herbert Xu's patch, not waiting for it to reach dash git:
hush already has a similar fix.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-25 02:09:41 +02:00
Denys Vlasenko ad57e4e4b2 ash: revert accidental change (should have been separate)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-25 02:08:38 +02:00
Denys Vlasenko 53e5c59821 fdisk: commonalize strings
function                                             old     new   delta
.rodata                                           103674  103667      -7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-25 01:14:43 +02:00
Denys Vlasenko 294d0c85ad xxd: compat tweak for -i
function                                             old     new   delta
xxd_main                                             888     893      +5
.rodata                                           103669  103674      +5
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 10/0)               Total: 10 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-25 00:16:04 +02:00