Commit Graph

17254 Commits

Author SHA1 Message Date
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
Denys Vlasenko
25128176c4 taskset: implement -a
function                                             old     new   delta
process_pid_str                                        -     854    +854
.rodata                                           103363  103378     +15
packed_usage                                       33654   33658      +4
taskset_main                                         936     190    -746
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 2/1 up/down: 873/-746)          Total: 127 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-19 17:42:35 +02:00
Denys Vlasenko
97c3b5e3ff hush: fix bkslash+newline handling and number validation in ${NN} and ${#NN}
Entering "${1a}" into interactive shell was making it exit.

function                                             old     new   delta
parse_dollar                                         824     958    +134
i_getch_and_eat_bkslash_nl                             -      44     +44
parse_expr                                           917     938     +21
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 2/0 up/down: 199/0)             Total: 199 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-19 15:45:45 +02:00
Denys Vlasenko
fd217c1cbf awk: after preinc/dec, only allow variable, field ref, array ref, or another preinc/dec
Accepting nonsense like "--4", and even "-- -4" is confusing.

function                                             old     new   delta
parse_expr                                           917     938     +21

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-18 16:35:27 +02:00
Denys Vlasenko
dc30f3dce2 free: implement -h
function                                             old     new   delta
.rodata                                           103331  103363     +32
packed_usage                                       33652   33654      +2
free_main                                            657     588     -69
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 34/-69)            Total: -35 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-18 12:08:02 +02:00
Denys Vlasenko
2c436679fb xxd: implement -i "C style output"
function                                             old     new   delta
xxd_main                                             710     888    +178
.rodata                                           103252  103331     +79
print_C_style                                          -      78     +78
packed_usage                                       33639   33652     +13
next                                                 276     278      +2
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 4/0 up/down: 350/0)             Total: 350 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-18 00:59:17 +02:00
Denys Vlasenko
25fe2d50bd xxd: do not try reading from closed stdin when non-existent file is given
Was:
	xxd: FILE: No such file or directory
	xxd: FILE: Bad file descriptor

function                                             old     new   delta
next                                                 276     278      +2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-18 00:32:29 +02:00
Denys Vlasenko
4d16161797 xxd: implement -o DISPLAYOFFSET
function                                             old     new   delta
xxd_main                                             680     710     +30
xstrtoll                                               -      30     +30
bb_dump_dump                                        1511    1531     +20
rewrite                                              941     951     +10
packed_usage                                       33629   33639     +10
.rodata                                           103250  103252      +2
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 5/0 up/down: 102/0)             Total: 102 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-17 23:53:30 +02:00
Denys Vlasenko
a0f8076d19 hexdump: fix error message
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-17 23:23:26 +02:00
Denys Vlasenko
f02b64de86 ionice: implement -t
function                                             old     new   delta
packed_usage                                       33618   33629     +11
ionice_main                                          272     282     +10
.rodata                                           103250  103251      +1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 22/0)               Total: 22 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-17 13:45:13 +02:00
Denys Vlasenko
c113796884 env: implement -0
function                                             old     new   delta
packed_usage                                       33590   33618     +28
env_main                                             187     209     +22
.rodata                                           103242  103250      +8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 58/0)               Total: 58 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-17 13:39:46 +02:00
Denys Vlasenko
91bc01c59b mv: implement -t and -T
function                                             old     new   delta
mv_main                                              496     585     +89
.rodata                                           103188  103242     +54
packed_usage                                       33549   33590     +41
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 184/0)             Total: 184 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-17 12:59:33 +02:00
Denys Vlasenko
894466cc51 uniq: support -z
function                                             old     new   delta
uniq_main                                            391     427     +36
packed_usage                                       33570   33549     -21
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 36/-21)             Total: 15 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-17 00:36:13 +02:00
Ron Yorston
038d400709 vi: reject change command when motion fails
If the motion command used to define the range of a change, yank or
delete fails the whole command should be rejected.  BusyBox vi already
handled failed searches in these circumstances.  Add some more cases:

- non-existent mark: d'x

- movement beyond end of file: c99999+ or 99999<<

This is implemented using a global variable which is set when a command
error is detected.  Unlike the case of motion within a line it's
insufficient to check that the motion command doesn't move the cursor:
this fails to process 'LyL' correctly, for example, as the second 'L'
doesn't move the cursor.

function                                             old     new   delta
indicate_error                                        75      82      +7
find_range                                           686     692      +6
do_cmd                                              4851    4852      +1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 14/0)               Total: 14 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-16 23:53:03 +02:00
Ron Yorston
ac04eb3657 vi: up/down motion beyond end of file should fail
In traditional vi and vim line motion commands ('+'/'-'/'j'/'k')
fail if the movement would exceed the bounds of the file.  BusyBox vi
allowed such commands to succeed, leaving the cursor on the first or
last character of the file.

Make BusyBox vi work like vi/vim.

For the 'G'/'H'/'L' commands traditional vi treats an out of bounds
result as an error, vim doesn't.  BusyBox vi behaves like vim, both
before and after this patch.

function                                             old     new   delta
do_cmd                                              4785    4851     +66
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 66/0)               Total: 66 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-16 23:53:03 +02:00
Ron Yorston
f1d21b7434 vi: keep autoindent if line isn't empty
When ESC is entered to leave insert mode any autoindent should only
be removed if there's no content beyond the indent.  This may be the
case if a line has been split by entering insert mode and then
entering a CR.

Add a check to ensure there's only a newline after the indent.

function                                             old     new   delta
char_insert                                          912     929     +17
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 17/0)               Total: 17 bytes

Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-16 23:53:03 +02:00
Denys Vlasenko
e7a8e8e30c du: support -b "apparent size"
function                                             old     new   delta
du                                                   434     470     +36
packed_usage                                       33542   33570     +28
print                                                 57      78     +21
du_main                                              286     302     +16
.rodata                                           103187  103188      +1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 5/0 up/down: 102/0)             Total: 102 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-16 17:45:28 +02:00
Denys Vlasenko
46d315ae44 blockdev: support --get/setra
function                                             old     new   delta
blockdev_main                                        251     263     +12
bdcmd_names                                           82      94     +12
packed_usage                                       33534   33542      +8
bdcmd_ioctl                                           44      52      +8
bdcmd_flags                                           11      13      +2
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 5/0 up/down: 42/0)               Total: 42 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-16 17:00:56 +02:00
Denys Vlasenko
609df6f22a *: more --help tweaks
function                                             old     new   delta
packed_usage                                       33522   33534     +12

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-16 14:24:27 +02:00
Denys Vlasenko
57be5daa40 lsof: print fd# too
function                                             old     new   delta
lsof_main                                            179     188      +9
.rodata                                           103194  103187      -7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-16 12:49:15 +02:00
Denys Vlasenko
1abaa6b84c telnetd: give inetd.conf example in --help
function                                             old     new   delta
packed_usage                                       33537   33522     -15

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-16 10:49:18 +02:00
Denys Vlasenko
a885ce1af0 awk: fix use-after-free in "$BIGNUM1 $BIGGERNUM2" concat op
Second reference to a field reallocs/moves Fields[] array, but first ref
still tries to use the element where it was before move.

function                                             old     new   delta
fsrealloc                                             94     106     +12

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-16 09:21:40 +02:00
Denys Vlasenko
83a4967e50 hush: fix handling of "cmd && &"
function                                             old     new   delta
done_pipe                                            213     231     +18

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-15 18:14:27 +02:00
Denys Vlasenko
1b7a9b68d0 hush: fix handling of \^C and "^C"
function                                             old     new   delta
parse_stream                                        2238    2252     +14
encode_string                                        243     256     +13
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 27/0)               Total: 27 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-15 16:46:30 +02:00
Denys Vlasenko
04f052c56d unlzma: fix a case where we could read before beginning of buffer
Testcase:

  21 01 01 00 00 00 00 00 e7 01 01 01 ef 00 df b6
  00 17 02 10 11 0f ff 00 16 00 00

Unfortunately, the bug is not reliably causing a segfault,
the behavior depends on what's in memory before the buffer.

function                                             old     new   delta
unpack_lzma_stream                                  2762    2768      +6

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