Commit Graph

17228 Commits

Author SHA1 Message Date
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
Ron Yorston
5dbbd0a6f5 vi: stored search pattern applies to ':s'
The same stored search pattern applies to both search ('/') and
search/replace (':s') operations.

A search/replace operation with an empty "find" string (':s//abc/')
should use the last stored search pattern, if available, and issue an
error message if there is none.

If the "find" string is not empty it should replace the stored search
pattern.

function                                             old     new   delta
colon                                               3952    4024     +72
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 72/0)               Total: 72 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-27 13:36:49 +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
Ron Yorston
a84bbc5425 cp,mv: fix -t DIR option
When the '-t DIR' option is used the loop over the remaining
arguments should terminate when a NULL pointer is reached.

function                                             old     new   delta
mv_main                                              585     590      +5
cp_main                                              492     496      +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 9/0)                 Total: 9 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-25 00:23:29 +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
Ron Yorston
2dade4f18a uniq: really support -z
Commit 894466cc5 (uniq: support -z) added support for NUL delimited
output.  Unfortunately nobody told getopt32().

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-24 23:37:06 +02:00
Denys Vlasenko
3b267e9925 switch_root: code shrink - use iterate_on_dir()
function                                             old     new   delta
rmrf                                                   -      46     +46
delete_contents                                      181      99     -82
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/1 up/down: 46/-82)            Total: -36 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-24 17:54:11 +02:00
Denys Vlasenko
4a68697521 libbb: do not check closedir() in remove_file()
If it's needed, there has to be a comment why. There isn't.

function                                             old     new   delta
.rodata                                           103686  103669     -17
remove_file                                          598     571     -27
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-44)             Total: -44 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-24 17:39:57 +02:00
Denys Vlasenko
6481070eb9 nproc: code shrink
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-24 13:47:49 +02:00
Denys Vlasenko
df96a3cd08 ls: code shrink
function                                             old     new   delta
scan_and_display_dirs_recur                          576     574      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-24 13:37:53 +02:00
Denys Vlasenko
6d61eb1363 taskset: use iterate_on_dir()
function                                             old     new   delta
iter                                                   -      27     +27
process_pid_str                                      854     856      +2
taskset_main                                         181     135     -46
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/1 up/down: 29/-46)            Total: -17 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-24 12:02:17 +02:00
Denys Vlasenko
1746218bee move iterate_on_dir() from e2fsprogs to libbb
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-24 11:42:55 +02:00
Denys Vlasenko
87c40cf4de e2fsprogs: code shrink
function                                             old     new   delta
print_e2flags_long                                     -     109    +109
list_attributes                                      248     232     -16
print_e2flags                                        169      47    -122
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/2 up/down: 109/-138)          Total: -29 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-24 09:31:57 +02:00
Denys Vlasenko
9468ea06d2 lsattr,chattr: do not open e.g. device files unless asked directly; do not follow links
Add O_NOFOLLOW (and O_NOCTTY for good measure) to open calls like e2fsprogs does.

In lsattr, when recursing, operate only on regular files, symlinks, and directories.
(Otherwise, "lsattr /dev" can e.g. open a watchdog device... not good).

At this time, looks like chattr/lsattr can't operate on symlink inodes -
ioctls do not work on open(O_PATH | O_NOFOLLOW) fds.

function                                             old     new   delta
lsattr_dir_proc                                      168     203     +35
change_attributes                                    410     408      -2
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 35/-2)              Total: 33 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-24 01:07:56 +02:00
Denys Vlasenko
0e55af6c61 chattr: if IOC_FSGETXATTR fails, do not try IOC_FSSETXATTR
function                                             old     new   delta
change_attributes                                    416     410      -6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-23 19:44:15 +02:00
S Harris
5c89e5a04e vi: fix read outside of text buffer during insert
Signed-off-by: S Harris <S.E.Harris@kent.ac.uk>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-23 19:15:07 +02:00
S Harris
e03b49477a cpio: fix sscanf on unterminated buffer
Signed-off-by: S Harris <S.E.Harris@kent.ac.uk>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-23 19:06:09 +02:00
Denys Vlasenko
5709b51a75 chattr: fix "chattr =ae -R FILE"
-R is not an "unset these flags" argument, thus no conflict with "=".

function                                             old     new   delta
.rodata                                           103684  103686      +2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-23 18:57:00 +02:00
Denys Vlasenko
85a5bc9148 chattr,lsattr: share stat error message
function                                             old     new   delta
.rodata                                           103692  103684      -8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-23 15:33:22 +02:00
Denys Vlasenko
96436fb36a e2fsprogs/*: remove ioctl calling obfuscation
function                                             old     new   delta
change_attributes                                    326     416     +90
list_attributes                                      222     248     +26
close_silently                                        22       -     -22
.rodata                                           103722  103692     -30
fgetsetversion                                        74       -     -74
fgetsetprojid                                        107       -    -107
fgetsetflags                                         148       -    -148
------------------------------------------------------------------------------
(add/remove: 0/4 grow/shrink: 2/1 up/down: 116/-381)         Total: -265 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-23 12:56:40 +02:00
Denys Vlasenko
e7ff017a1a chattr: update list of attributes in --help
function                                             old     new   delta
packed_usage                                       33717   33823    +106

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-23 09:42:01 +02:00
Denys Vlasenko
56bbbfae7d cp: implement -n
function                                             old     new   delta
.rodata                                           103681  103722     +41
packed_usage                                       33698   33717     +19
copy_file                                           1678    1696     +18
cp_main                                              500     492      -8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/1 up/down: 78/-8)              Total: 70 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-22 15:28:34 +02:00
Denys Vlasenko
91b9549a8c crc32: code shrink for !CKSUM config
function                                             old     new   delta
cksum_main                                           215     203     -12

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-22 10:24:06 +02:00
Denys Vlasenko
836580a7d6 cksum: fix handling of read errors
function                                             old     new   delta
cksum_main                                           377     399     +22

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-22 09:29:22 +02:00
Denys Vlasenko
ea9b96e5aa crc32: new applet
function                                             old     new   delta
cksum_main                                           258     377    +119
.rodata                                           103672  103681      +9
applet_names                                        2745    2751      +6
applet_main                                         1588    1592      +4
packed_usage                                       33734   33698     -36
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/1 up/down: 138/-36)           Total: 102 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-22 01:07:54 +02:00
Denys Vlasenko
0ec52d438a cp: implement -t DIR
function                                             old     new   delta
packed_usage                                       33713   33734     +21
.rodata                                           103670  103672      +2
cp_main                                              506     500      -6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 23/-6)              Total: 17 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-21 19:38:39 +02:00
Denys Vlasenko
1de709fda2 cp: preparatory indenting of code block, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-21 19:38:02 +02:00
Denys Vlasenko
34d79c9aa0 ascii: new applet
function                                             old     new   delta
.rodata                                           103397  103670    +273
ascii_main                                             -     177    +177
applet_names                                        2739    2745      +6
applet_main                                         1584    1588      +4
applet_suid                                           99     100      +1
applet_install_loc                                   198     199      +1
packed_usage                                       33716   33713      -3
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 5/1 up/down: 462/-3)            Total: 459 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-21 17:52:50 +02:00
Ron Yorston
51358757c7 vi: fix backward search with GNU regex
With FEATURE_VI_REGEX_SEARCH enabled backward searches don't work.
This is problematic on distros that enable regexes, such as Tiny
Core Linux and Fedora.

When calling GNU re_search() with a negative range parameter
(indicating a backward search) the start offset must be set to
the end of the area being searched.

The return value of re_search() is the offset of the matched pattern
from the start of the area being searched.  For a successful search
(positive return value) char_search() can return the pointer to
the start of the area plus the offset.

FEATURE_VI_REGEX_SEARCH isn't enabled by default but when it is:

function                                             old     new   delta
char_search                                          256     247      -9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-9)               Total: -9 bytes

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-06-21 15:37:28 +02:00
Denys Vlasenko
ac4786ba00 qwk: make code clearer, no actual code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-20 22:52:29 +02:00
Denys Vlasenko
d82c937a31 df: support -t TYPE
function                                             old     new   delta
packed_usage                                       33656   33716     +60
df_main                                             1029    1065     +36
.rodata                                           103395  103397      +2
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 98/0)               Total: 98 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-20 15:03:21 +02:00
Denys Vlasenko
a2a9113f35 df: POSIXLY_CORRECT sets _default_ scale, -m/-h overrides it
function                                             old     new   delta
df_main                                             1034    1029      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-20 14:46:19 +02:00
Denys Vlasenko
d71c7892ac shred: with -u, unlink file even if it is zero length
function                                             old     new   delta
shred_main                                           391     387      -4

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-20 13:48:21 +02:00
Denys Vlasenko
ec3170ac95 shred: implement -s SIZE
function                                             old     new   delta
shred_main                                           337     391     +54
.rodata                                           103393  103395      +2
packed_usage                                       33666   33656     -10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 56/-10)             Total: 46 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-20 13:08:50 +02:00
Denys Vlasenko
83dff7f431 lsattr: support more ext2 flags
function                                             old     new   delta
e2attr_flags_lname                                   214     285     +71
e2attr_flags_value                                    52      80     +28
e2attr_flags_sname                                    14      21      +7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 106/0)             Total: 106 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-20 12:34:05 +02:00
Denys Vlasenko
526b834790 lsattr,chattr: support -p
function                                             old     new   delta
fgetsetprojid                                          -     107    +107
list_attributes                                      169     222     +53
change_attributes                                    277     326     +49
chattr_main                                          272     307     +35
close_silently                                         -      22     +22
.rodata                                           103378  103393     +15
packed_usage                                       33658   33666      +8
fgetsetversion                                        88      74     -14
fgetsetflags                                         162     148     -14
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 5/2 up/down: 289/-28)           Total: 261 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-20 11:02:49 +02:00
Denys Vlasenko
9c291f2cc0 taskset: fix for PID longer than 12 chars
Should we validate that PID is a number for "taskset -ap PID"?
We don't actually need it, and pathological input like
"../../DIR_WITH_LOTS_OF_PIDS" can only cause "taskset"ing
of many pids. Which is something user can do anyway.

function                                             old     new   delta
taskset_main                                         190     181      -9

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