| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The 'make' applet follows POSIX requirements when setting the MAKE
variable. However, it doesn't allow for the case where argv[0] is
of a form like '/bin/make' but no corresponding executable exists.
This can happen in busybox-w32 when '/bin/make' is interpreted as
a reference to the 'make' applet.
In this case set the MAKE variable to argv[0] and avoid issuing a
warning.
Setting MAKE to something that isn't a real executable is fine so
long as it's only used by busybox-w32 applets. If it's used by
external applications they may get confused.
Adds 16-32 bytes.
(GitHub issue #354)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Commit 548ec7045b (win32: interpret absolute paths as relative to
%SYSTEMDRIVE%) introduced the function xabsolute_path() to make
relative paths absolute. This is used in 'dkpg' and 'man' to
avoid having to tinker with absolute paths from upstream.
Unfortunately, it's too eager to use the relative path. This
results in dpkg failing to install deb files with a relative path.
Saves 32-48 bytes.
(GitHub issue #371)
|
|
|
|
|
|
|
|
|
|
|
| |
Add an implementation of strverscmp from musl so that the 'sort -V'
option works.
Add '-V' to the trivial usage message.
Costs 248-256 bytes.
(GitHub issue #370)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add shell options:
- 'nohiddenglob' excludes files with the hidden attribute from
globbing
- 'nohidsysglob' excludes files with the hidden and system attributes
from globbing
If both options are enabled 'nohiddenglob' takes precedence.
These options also affect tab completion.
Files that are hidden because they start with a period aren't
affected (unless they also have the hidden attribute).
Costs 160-208 bytes.
(GitHub issue #367)
|
|
|
|
|
|
|
|
|
|
| |
Commit 603af9bb9 (win32: support "app exec link" reparse points)
added support for IO_REPARSE_TAG_APPEXECLINK reparse points by
pretending they're symbolic links.
One change was missed, in the implementation of dirent.
Costs 16 bytes.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The default configurations now include the provided standard or
UTF-8 manifest.
This works best if the build toolchain doesn't provide a default
manifest (which Fedora and w64devkit don't, by default).
If the toolchain does have a default manifest some bloat will
result.
(GitHub issue #366)
|
|
|
|
|
|
|
|
|
|
| |
The UTF-8 manifest has been updated to include features from the
standard application manifest.
Include a copy of the standard application manifest for toolchains
that don't provide one.
(GitHub issue #366)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add two utility functions to convert Windows process exit codes.
- exit_code_to_wait_status() converts to a POSIX wait status.
This is used in ash and the implementations of system(3) and
mingw_wait3().
- exit_code_to_posix() converts to a POSIX exit code. (Not that
POSIX has much to say about them.)
As a result it's possible for more applets to report when child
processes are killed as if by a signal. 'time', 'drop' and 'su -W',
for example.
Adds 64-80 bytes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Commit 89aa9d783 (win32: changes to signal handling) caused a
regression: 'httpd -f' could no longer be interrupted by Ctrl-C.
The specific issue is the use of exit(2) to replace raise(3) in
raise_interrupt(). This change was made so the shell would return
the expected exit code of 130 rather than the default code of 3
which Windows uses when a signal with SIG_DFL disposition is caught.
The problem can be avoided by calling _exit(2) instead. A call to
fflush_all() has also been added, as _exit(2) doesn't do that.
(GitHub issue #365)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When a build command returned a non-zero exit status 'make'
reported a warning and returned an exit code of zero.
This was due to the misuse of the status returned by system(3).
As the man page says:
the return value is a "wait status" that can be examined using
the macros described in waitpid(2). (i.e., WIFEXITED(),
WEXITSTATUS(), and so on).
Use the error() function to correctly report the problem on stderr
and return an exit status of 2.
Some additional changes in the same area:
- When a target is removed report the diagnostic on stderr, as
required by POSIX.
- When a build command receives a signal GNU make removes the target.
bmake doesn't and it isn't required by POSIX. Implement this as an
extension.
- Expand the error message when a build command fails so it includes
the exit status or signal number, as obtained from the value
returned by system(3).
- Alter the WIN32 implementation of system(3) to handle exit codes
which represent termination as if by a signal.
Adds 200-240 bytes.
(GitHub issue #354)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The tracking of progress introduced in commit fb4be267c (make: fixes
to warning messages) failed to account for runs with the '-t' or '-n'
options. Without this the following makefile:
dummy_target: dummy_rule
dummy_rule:
@:
issues the warning 'make: nothing to be done for dummy_target' when
run with '-t' or '-n' and no 'dummy_rule' file present.
(GitHub issue #354)
|
|
|
|
|
|
|
|
|
| |
The construction of a codepoint from a surrogates pair was incorrect
when the result should have had the 0x10000 bit unset, due to logical
"|" instead of arithmetic "+" of 0x10000 (so the 0x10000 bit was set
incorrectly when the result should have been U+[1]{0,2,4...C,E}XXXX).
For instance: typing or pasting U+20000 𠀀
|
|
|
|
|
|
| |
Upstream commit ed4a24dfd (ash: initialize basepf.buf in ash)
zeroes out the memory allocated for basepf.buf. busybox-w32 has
a copy of this code early in ash_main(). Do the same there.
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When the input data contained a cycle it was possible for tsort to
attempt to access freed nodes. This sometimes resulted in the
test case 'echo a b b a | tsort' crashing.
Don't free nodes when they're removed from the graph.
function old new delta
tsort_main 621 596 -25
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-25) Total: -25 bytes
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When I planned to print the command in read_line_input, I found that after
the system started, the command printed for the first time was always
garbled.
After analysis, it is found that in the init() function of ash, the
variable basepf.buf is not initialized after applying for memory, resulting
in garbled initial data. Then assign it to the global variable
g_parsefile->buf in ash.c, and then pass g_parsefile->buf to the parameter
command of the function read_line_input in the function preadfd(), and
finally cause it to be garbled when the command is printed by
read_line_input.
The call stack is as follows:
#0 read_line_input (st=0xb6fff220, prompt=0xb6ffc910 "\\[\\033[32m\\]\\h \\w\\[\\033[m\\] \\$ ", command=command@entry=0xb6ffc230 "P\325\377\266P\325\377\266", maxsize=maxsize@entry=1024) at libbb/lineedit.c:2461
#1 0x0043ef8c in preadfd () at shell/ash.c:10812
#2 preadbuffer () at shell/ash.c:10914
#3 pgetc () at shell/ash.c:10997
#4 0x00440c20 in pgetc_eatbnl () at shell/ash.c:11039
#5 0x00440cbc in xxreadtoken () at shell/ash.c:13157
#6 0x00440f40 in readtoken () at shell/ash.c:13268
#7 0x00441234 in list (nlflag=nlflag@entry=1) at shell/ash.c:11782
#8 0x004420e8 in parsecmd (interact=<optimized out>) at shell/ash.c:13344
#9 0x00442c34 in cmdloop (top=top@entry=1) at shell/ash.c:13549
#10 0x00444e4c in ash_main (argc=<optimized out>, argv=0x444e4c <ash_main+1328>) at shell/ash.c:14747
#11 0x00407954 in run_applet_no_and_exit (applet_no=9, name=<optimized out>, argv=0xbefffd34) at libbb/appletlib.c:1024
#12 0x00407b68 in run_applet_and_exit (name=0xbefffe56 "ash", argv=0x9) at libbb/appletlib.c:1047
#13 0x00407f88 in main (argc=<optimized out>, argv=0xbefffd34) at libbb/appletlib.c:1181
Fixes: 82dd14a510ca ("ash: use CONFIG_FEATURE_EDITING_MAX_LEN")
Signed-off-by: zhuyan <zhuyan34@huawei.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Upstream BusyBox supports the usual Unix functionality where the
login process adds a '-' prefix to the shell's argv[0]. Since
busybox-w32 doesn't have a login process this serves no purpose
and can be removed.
Instead it would be useful to have a way to invoke a login shell
without requiring any arguments. Advantages would be:
- easier to configure busybox-w32 'ash' as the SSH login shell;
- double clicking on a shell binary could start a login shell.
Add 'lash' as an alias for 'ash' which starts a login shell without
requiring the '-l' option.
Saves 16 bytes.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In Linux the command name associated with a process (as can be
obtained from '/proc/<PID>/comm') is truncated to 16 characters.
Thus upstream BusyBox only allows 16 characters for the 'comm'
field in 'ps'.
There's no need for such a constraint in busybox-w32. Moreover,
the command name is used for the full command line ('args' field)
in most cases. This field is allowed to be rather long in 'ps'
so it's not expected to be truncated.
Still, to avoid diverging too much from upstream it's best to have
some measure of truncation. Increase the allowed length of the
command name to 32 characters.
Adds 16 bytes.
(GitHub issue #358)
|
| |
| |
| |
| |
| |
| |
| |
| | |
Builds without warnings on:
mingw-msvcrt gcc 13.2 i686/x86-64 (w64devkit).
mingw-ucrt gcc 13.1/13.2 i686/x86-64 (winlibs).
Where previously both the ucrt builds warned about I64.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Commit 3476fb9f4c (ps: display interpreted script name in comm
column) required the applet start up code to detect the index
of the script in a shebang command line.
When a script starts with '#!/bin/busybox' the argument list is
shifted in busybox_main() but the script index wasn't adjusted
to match. This caused the command to fail.
Make the proper adjustment.
Add 16 bytes.
(GitHub issue #357)
|
|\ \
| | |
| | | |
win32: UTF8_OUTPUT: speedup for big outputs
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
With the native Windows console, writeCon_utf8 which converts
a stream of UTF8 into console output is about 1.4x slower for big
unicode writes than the native fwrite (e.g. when the console codepage
is UTF8), which is not too bad.
However, newer versions of conhost are quicker, e.g. OpenConsole.exe
(which is conhost) which ships with the Windows terminal is about 4x
faster than the native conhost in processing (unicode?) input.
And when conhost can process inputs much quicker, it turned out that
fwrite throughput was nearly 3x better than writeCon_utf8.
Luckily, this turned out to be mainly due to the internal 256 wide
chars buffer which writeCon_utf8 uses, and that with 4096 buffer
it becomes only ~ 10% slower than fwrite, which is much better.
However, making the console window very small such that it needs to
spend very little time on rendering, makes it apparent that there's
still a difference - writeCon_utf8 is about 30% slower than fwrite,
but that's still not bad, and that's also an uncommon use case.
So this commit increases the buffer, and also allocates it dynamically
(once) to avoid abusing the stck with additional 8K in one call.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
According to POSIX only fatal diagnostic messages should be written
to stderr. Arrange for warning() to write to stdout.
pdpmake was rather too prolific in generating 'nothing to be done
for XXX' messages. GNU make only issues the equivalent message
for top-level targets and only if nothing at all was (or would have
been) done. bmake doesn't seem to have such a message.
Follow the practice of GNU make. This requires more intensive
tracking of the actions taken while the make is in progress.
Costs 16 bytes.
(GitHub issue #354)
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Commit 4b65e7d9 (Fixes to inference rules) set the N_TARGET flag
for prerequisites being built recursively. That wasn't necessary
for the issue at hand and it lead to other problems.
Undo that part of commit 4b65e7d9.
(GitHub issue #354)
|
| | |
| | |
| | |
| | | |
Add a test for the problem reported in -w32 GitHub issue #354.
|
|/ /
| |
| |
| |
| |
| |
| |
| | |
If upstream BusyBox had a 'make' applet a native build with it
enabled should match the corresponding build from the busybox-w32
source.
Make it so.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Parsing of target rules was too simplistic to allow targets of
the form c:/path.
Allow such targets as a non-POSIX extension. Also add a 'windows'
pragma to allow such targets in POSIX mode. This additionally
requires the use of the 'target_name' pragma to permit slashes in
target names.
This change *doesn't* allow targets of the form c:path, but it's
probably not wise to use them anyway.
Costs 40-80 bytes.
(GitHub issue #353)
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The Windows implementation of readlink(2) has caused problems in
the past. As, for example, with commit c29dc205d2 (win32: fix
implementation of readlink(2)).
Most uses of readlink(2) in BusyBox are actually calls to the
(considerably more convenient) library function xmalloc_readlink().
Implement a Windows version of that and used it instead of readlink(2).
This improves the handling of symbolic links (and similar reparse
points) in CJK and UTF-8 code pages.
Saves 48-80 bytes.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Set 'noconsole' to match the actual state of the console (normal/
iconified) when the shell is started. Thus ShowWindow() will only
be called if the actual state differs from the default or user
defined state.
Costs 20-24 bytes.
(GitHub issue #325)
|
| |
| |
| |
| |
| | |
The testsuite includes some Windows-specific tests. Exclude these
when running a test on a native build to avoid upsetting the results.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The shell detected a native Windows environment by checking for a
mixed-case 'Path' environment variable. This has always worked on
Windows but recent versions of Wine have a 'PATH' environment
variable.
Check also for 'ComSpec'.
Costs 24-48 bytes.
|
| |
| |
| |
| |
| | |
When the UTF-8 manifest is included in the binary but the ANSI
code page isn't UTF-8 report "UTF8 manifest not supported".
|
| |
| |
| |
| |
| |
| |
| | |
Make it possible to use the 'trap' built-in with command substitution,
process substitution and in pipelines.
Costs 200-256 bytes.
|
| |
| |
| |
| |
| |
| |
| | |
Move the code to handle the case nprocs == 1 from jobtab_size()
to procstat_size().
Saves 16 bytes.
|
| | |
|
| | |
|
|\| |
|
| |
| |
| |
| | |
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
function old new delta
strings_main 422 420 -2
setfattr_main 175 173 -2
brctl_main 1548 1546 -2
makedevs_main 979 975 -4
rev_main 337 332 -5
getfattr_main 307 302 -5
cut_main 1201 1196 -5
cksum_main 398 393 -5
umount_main 573 565 -8
ln_main 516 508 -8
expand_main 660 652 -8
df_main 1068 1060 -8
renice_main 346 332 -14
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/13 up/down: 0/-76) Total: -76 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
function old new delta
getfattr_main 309 307 -2
.rodata 105395 105391 -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-6) Total: -6 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
function old new delta
getfattr_main - 309 +309
print_attr - 115 +115
packed_usage 34576 34631 +55
.rodata 105349 105395 +46
lgetxattr - 41 +41
getxattr - 41 +41
llistxattr - 35 +35
listxattr - 35 +35
applet_names 2806 2815 +9
applet_main 1620 1624 +4
------------------------------------------------------------------------------
(add/remove: 7/0 grow/shrink: 4/0 up/down: 690/0) Total: 690 bytes
Signed-off-by: YU Jincheng <shana@zju.edu.cn>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
function old new delta
hwclock_main 576 579 +3
.rodata 105404 105349 -55
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 3/-55) Total: -52 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Pass job data to child shells. This makes it possible to use
the 'jobs' built-in with command substitution, process substitution
and in pipelines.
Costs 576-672 bytes
(GitHub issue #350)
|
| |
| |
| |
| | |
Allow nproc to build without error when LONG_OPTS is disabled.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The changes introduced to support the --binary option gave incorrect
results when comparing files with CRLF line endings *without* the
--binary option present.
The code needs to keep track of the position within the file and is
confused by text mode.
As an alternative solution, always use binary mode but skip the CR
of a CRLF pair when the --binary option isn't used. This gives
results matching GNU diff when comparing files with matching line
endings, with or without --binary. When line endings differ the
results aren't always the same.
Costs 32 bytes in the 32-bit build, saves 16 in 64-bit.
(GitHub issue #348)
|
| | |
|
|\ \
| | |
| | | |
Win32: make unicode print correctly regardless of console CP
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Previously, when writing to the console, the non-unicode build always
assumed the source data is in the ANSI codepage, and used charToCon
to convert it unconditionally to the console CP.
Similarly, the unicode build made the same assumption (where ANSI CP
is UTF8), and always tried to convert it so that it's printed
correctly (at least when FEATURE_UTF8_OUTPUT is enabled - which it is
by default at the unicode build).
However, there could be cases where this assumption is incorrect, for
instance if the data comes from a file encoded for some codepage X,
and after the user also changed the console CP to X does 'cat file.X'
This commit allows disabling this conversion, using the same env vars
which can be used to disable the locale/unicode elsewhere, (LANG,
LC_CTYPE, LC_ALL as "C") e.g. 'LC_ALL=C cat file.X' now doesn't
convert, and the console renders it according to its own codepage.
|