summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
| * bc: select parse_init() and parse_expr() using IS_BC, not function pointersDenys Vlasenko2018-12-051-25/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | function old new delta common_parse_expr - 62 +62 common_parse_init - 29 +29 dc_parse_parse 53 52 -1 dc_parse_expr 723 719 -4 bc_program_execStr 606 594 -12 dc_parse_init 33 18 -15 bc_parse_init 33 18 -15 bc_parse_expression 39 - -39 bc_vm_run 1923 1872 -51 ------------------------------------------------------------------------------ (add/remove: 2/1 grow/shrink: 0/6 up/down: 91/-137) Total: -46 bytes text data bss dec hex filename 988774 485 7296 996555 f34cb busybox_old 988728 485 7296 996509 f349d busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * bc: propagate fixed arguments into calleesDenys Vlasenko2018-12-051-111/+125
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Looks like there is only one "BcProgram" object, &G.prog. function old new delta bc_program_exec 4401 4523 +122 bc_program_execStr 579 606 +27 bc_program_read 323 342 +19 bc_args 83 97 +14 bc_vm_process 327 323 -4 bc_num_ulong 95 85 -10 dc_main 62 48 -14 bc_main 62 48 -14 bc_vm_run 2317 1923 -394 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/5 up/down: 182/-436) Total: -254 bytes text data bss dec hex filename 989028 485 7296 996809 f35c9 busybox_old 988774 485 7296 996555 f34cb busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * bc: simplify ^C handlingDenys Vlasenko2018-12-051-80/+59
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It's still buggy: if SIGINT would interrupt e.g. output write(), the result would not be as intended: >>> while ( 1 ) print 1 ... 11111111111111111111111111111111111111111111111111111111111111111111\ 11111111111111111111111111111111111111111111111111111111111111111111\ ^Cready for more input interrupt (type "quit" to exit) >>> bc: output error function old new delta dc_parse_parse 58 53 -5 bc_parse_parse 476 471 -5 bc_num_d 609 604 -5 bc_num_cmp 299 294 -5 bc_num_compare 90 84 -6 bc_parse_expr 2222 2215 -7 bc_num_subArrays 82 74 -8 dc_main 72 62 -10 bc_main 72 62 -10 bc_program_exec 4413 4401 -12 bc_num_a 491 474 -17 bc_read_line 364 344 -20 bc_num_p 540 518 -22 bc_program_reset 192 168 -24 bc_num_k 1031 1005 -26 bc_vm_run 2382 2317 -65 bc_vm_sig 97 - -97 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 0/16 up/down: 0/-344) Total: -344 bytes text data bss dec hex filename 989372 485 7296 997153 f3721 busybox_old 989028 485 7296 996809 f35c9 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * bc: convert to "G trick" - this returns bc to zero bss increaseDenys Vlasenko2018-12-051-159/+133
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | function old new delta bc_num_p 518 540 +22 bc_num_k 1010 1031 +21 bc_vm_process 312 327 +15 bc_program_exec 4401 4413 +12 bc_vm_posixError 194 205 +11 bc_num_a 480 491 +11 bc_program_reset 182 192 +10 bc_vm_sig 88 97 +9 bc_vm_error 148 156 +8 bc_parse_expr 2215 2222 +7 bc_num_compare 84 90 +6 dc_parse_parse 53 58 +5 dc_lex_token 670 675 +5 bc_read_line 359 364 +5 bc_parse_parse 471 476 +5 bc_num_cmp 294 299 +5 bc_num_subArrays 84 82 -2 bc_num_d 614 609 -5 dc_main 80 72 -8 bc_main 80 72 -8 bcg 40 - -40 bc_vm_run 2569 2382 -187 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 16/5 up/down: 157/-250) Total: -93 bytes text data bss dec hex filename 989425 485 7336 997246 f377e busybox_old 989372 485 7296 997153 f3721 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * bc: simplify, and restore ^C, fix ^D handlingDenys Vlasenko2018-12-051-71/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ^D used to enter infinite loop function old new delta bc_read_line 342 359 +17 bc_args_opt 8 - -8 dc_sig_msg 31 - -31 bc_sig_msg 34 - -34 bc_vm_run 2608 2569 -39 bc_args 123 83 -40 bc_args_lopt 81 - -81 ------------------------------------------------------------------------------ (add/remove: 0/4 grow/shrink: 1/2 up/down: 17/-233) Total: -216 bytes text data bss dec hex filename 989491 485 7336 997312 f37c0 busybox_old 989425 485 7336 997246 f377e busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * bc: simplify, stop testing for IO errors on every outputDenys Vlasenko2018-12-051-122/+81
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | function old new delta bc_read_line 297 342 +45 bc_vm_run 2601 2608 +7 bc_program_reset 178 182 +4 bc_args 125 123 -2 dc_name 3 - -3 bc_name 3 - -3 bc_program_printStream 176 172 -4 bcg 48 40 -8 dc_main 97 80 -17 bc_main 97 80 -17 bc_vm_fflush 21 - -21 bc_vm_puts 23 - -23 bc_vm_printf 36 - -36 bc_vm_putchar 46 - -46 bc_vm_exit 46 - -46 bc_vm_process 361 312 -49 bc_vm_info 76 19 -57 bc_copyright 155 - -155 ------------------------------------------------------------------------------ (add/remove: 0/8 grow/shrink: 3/7 up/down: 56/-487) Total: -431 bytes text data bss dec hex filename 989722 485 7344 997551 f38af busybox_old 989491 485 7336 997312 f37c0 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * bc: fix warnings, initial cleanupsDenys Vlasenko2018-12-051-129/+124
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | function old new delta bc_program_exec - 4401 +4401 bc_vm_run - 2601 +2601 bc_parse_expr - 2215 +2215 bc_parse_stmt - 2197 +2197 bc_lib - 1878 +1878 bc_lex_token - 1333 +1333 bc_program_num - 1134 +1134 bc_num_k - 1010 +1010 bc_program_modexp - 793 +793 bc_program_print - 762 +762 dc_parse_expr - 723 +723 dc_lex_token - 670 +670 bc_num_d - 614 +614 bc_parse_name - 590 +590 bc_program_execStr - 579 +579 bc_num_printNum - 572 +572 bc_num_p - 518 +518 bc_num_a - 480 +480 bc_parse_parse - 471 +471 bc_program_assign - 450 +450 bc_parse_endBody - 423 +423 bc_program_call - 371 +371 dc_lex_tokens - 364 +364 bc_vm_process - 361 +361 bc_program_copyToVar - 355 +355 dc_parse_insts - 332 +332 bc_program_read - 323 +323 bc_program_binOpPrep - 301 +301 bc_lex_number - 301 +301 bc_read_line - 297 +297 bc_num_cmp - 294 +294 bc_num_m - 287 +287 bc_parse_auto - 275 +275 bc_num_s - 258 +258 bc_program_pushVar - 236 +236 bc_num_r - 231 +231 bc_program_addFunc - 220 +220 bc_lex_kws - 220 +220 bc_err_msgs - 216 +216 bc_parse_create - 198 +198 bc_vm_posixError - 194 +194 bc_parse_reset - 194 +194 bc_parse_operator - 181 +181 bc_program_reset - 178 +178 bc_program_printStream - 176 +176 bc_num_divmod - 168 +168 bc_copyright - 155 +155 bc_program_search - 154 +154 bc_num_binary - 150 +150 bc_vm_error - 148 +148 bc_program_pushArray - 143 +143 bc_parse_text - 142 +142 bc_num_printDigits - 142 +142 bc_map_insert - 142 +142 bc_parse_else - 139 +139 bc_program_assignStr - 131 +131 bc_args - 125 +125 dc_parse_mem - 116 +116 bc_parse_body - 116 +116 bc_num_split - 113 +113 bc_num_sub - 112 +112 bc_num_add - 112 +112 packed_usage 32958 33066 +108 bc_num_rem - 104 +104 bc_parse_string - 103 +103 bc_main - 97 +97 bc_num_ulong - 95 +95 bc_func_insert - 89 +89 bc_vm_sig - 88 +88 bc_program_prep - 88 +88 bc_parse_number - 88 +88 bc_array_expand - 88 +88 bc_num_subArrays - 84 +84 bc_num_compare - 84 +84 bc_lex_name - 83 +83 bc_args_lopt - 81 +81 bc_parse_pushIndex - 80 +80 bc_num_mul - 80 +80 bc_num_mod - 80 +80 bc_num_div - 80 +80 bc_vm_info - 76 +76 bc_program_name - 75 +75 bc_map_find - 71 +71 bc_lex_next - 71 +71 bc_num_printHex - 70 +70 bc_vec_concat - 68 +68 bc_num_shift - 68 +68 bc_num_extend - 68 +68 bc_program_index - 66 +66 bc_num_ulong2num - 66 +66 bc_num_retireMul - 66 +66 bc_parse_noElse - 65 +65 bc_vec_string - 64 +64 bc_parse_pushName - 63 +63 bc_parse_exprs - 60 +60 bc_err_ids - 58 +58 bc_result_free - 57 +57 bc_vec_npop - 55 +55 dc_parse_parse - 53 +53 bc_vec_push - 53 +53 bc_parse_free - 53 +53 bc_num_inv - 53 +53 dc_parse_register - 52 +52 dc_lex_regs - 52 +52 bc_lex_whitespace - 52 +52 bc_num_copy - 51 +51 bc_program_binOpRetire - 50 +50 bc_parse_ops - 50 +50 bc_map_index - 50 +50 bcg - 48 +48 bc_num_init - 48 +48 bc_parse_startBody - 47 +47 bc_num_pow - 47 +47 bc_vm_putchar - 46 +46 bc_vm_exit - 46 +46 bc_num_clean - 45 +45 bc_parse_addFunc - 44 +44 bc_vec_grow - 42 +42 bc_program_len - 42 +42 bc_num_truncate - 42 +42 bc_array_init - 42 +42 bc_parse_expression - 39 +39 bc_lex_lineComment - 39 +39 bc_num_expand - 38 +38 bc_vec_init - 37 +37 bc_vm_printf - 36 +36 bc_num_printNewline - 36 +36 bc_func_free - 35 +35 bc_sig_msg - 34 +34 bc_program_retire - 34 +34 bc_lex_assign - 34 +34 dc_parse_init - 33 +33 bc_parse_init - 33 +33 dc_sig_msg - 31 +31 bc_vec_expand - 30 +30 bc_num_ten - 30 +30 bc_num_one - 28 +28 bc_errs - 28 +28 bc_vec_free - 27 +27 bc_program_ops - 24 +24 bc_vm_puts - 23 +23 bc_num_printChar - 23 +23 bc_program_ready_msg - 22 +22 bc_vm_fflush - 21 +21 dc_main 77 97 +20 bc_parse_next_rel - 20 +20 bc_parse_next_read - 20 +20 bc_parse_next_print - 20 +20 bc_parse_next_param - 20 +20 bc_parse_next_for - 20 +20 bc_parse_next_expr - 20 +20 bc_parse_next_elem - 20 +20 bc_warn_fmt - 17 +17 bc_vec_pushByte - 15 +15 bc_string_free - 15 +15 bc_num_setToZero - 15 +15 bc_num_free - 15 +15 bc_lex_file - 15 +15 bc_id_free - 15 +15 bc_err_fmt - 15 +15 bc_vec_item_rev - 14 +14 bc_id_cmp - 12 +12 bc_num_zero - 11 +11 bc_vec_item - 9 +9 bc_program_stdin_name - 8 +8 bc_program_scale - 8 +8 bc_args_opt - 8 +8 bc_func_read - 7 +7 bc_func_main - 7 +7 bc_err_line - 7 +7 bc_lib_name - 4 +4 bc_args_env_name - 4 +4 applet_main 1604 1608 +4 dc_name - 3 +3 bc_name - 3 +3 applet_names 2781 2784 +3 static.bases 5 - -5 check_under 20 - -20 pop 24 - -24 print_no_pop 32 - -32 sub 34 - -34 divide 34 - -34 mul 37 - -37 add 37 - -37 push 38 - -38 print_stack_no_pop 40 - -40 not 72 - -72 set_output_base 95 - -95 or 103 - -103 eor 103 - -103 and 103 - -103 mod 105 - -105 stack_machine 116 - -116 operators 144 - -144 print_base 230 - -230 ------------------------------------------------------------------------------ (add/remove: 173/20 grow/shrink: 4/0 up/down: 38089/-1372) Total: 36717 bytes text data bss dec hex filename 950181 485 7296 957962 e9e0a busybox_old 989722 485 7344 997551 f38af busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * bc: new applet, throws warningGavin Howard2018-12-052-41/+7492
| | | | | | | | | | Signed-off-by: Gavin Howard <yzena.tech@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* | diff: omit unreliable test for same fileRon Yorston2019-01-091-1/+1
| | | | | | | | | | | | | | | | diff tries to detect if it's been asked to compare a file with itself. Because much of the information returned by stat(2) is fake (in particular, the inode number) this results in false positives. Simply omit the unreliable test.
* | ps: fix long output when desktop compatibility is disabledRon Yorston2019-01-081-0/+3
| | | | | | | | | | | | | | | | In desktop mode the state column is disabled and doesn't affect output. When desktop mode is disabled the state column is displayed in long output. Put some fake data in the column to improve the display.
* | ps: display interpreted script name in comm columnRon Yorston2019-01-082-2/+19
| | | | | | | | | | | | | | | | | | | | | | When an interpreted script is being run the comm column in ps should display the name of the script not the name of the interpreter. Use a fake applet pathname to indicate which argument contains the script. This also allows pidof to obtain the pid of a script.
* | ps: add support for the args columnRon Yorston2019-01-086-37/+55
| | | | | | | | | | | | | | | | | | Implement read_cmdline() for WIN32 by storing the command line in the same way as the applet name. The applet name is actually used for the comm column which is truncated to COMM_LEN. Using this as the size of the bb_comm array avoids the need to calculate MAX_APPLET_NAME_LEN.
* | ps: add user and group columnsRon Yorston2019-01-082-6/+11
| |
* | win32: add a fake root user and groupRon Yorston2019-01-081-13/+26
| |
* | win32: implement vsnprintf(2)Ron Yorston2019-01-082-0/+25
| | | | | | | | | | The Microsoft C runtime may include a defective version of vsnprintf. Implement a standards-compliant replacement.
* | win32: implement umask(2)Ron Yorston2019-01-074-0/+31
| | | | | | | | | | | | | | | | | | umask() in the Microsoft C runtime takes different arguments to umask(2). Implement a fake umask(2) that remembers the mask and calls the Microsoft umask() with an appropriate value. Since the mask won't be inherited by children use an environment variable to pass any value set by the shell built-in umask.
* | iconv: import from win-iconvRon Yorston2019-01-064-1/+1849
| | | | | | | | | | Source imported from https://github.com/win-iconv/win-iconv and modified to build in busybox-w32.
* | xargs: fix 'xargs -sNUM' testsRon Yorston2019-01-061-0/+4
| | | | | | | | | | The tests for 'xargs -sNUM' fail due to a missing newline unless it's output using fprintf rather than bb_putchar_stderr.
* | tar: return correct exit code for empty tar fileRon Yorston2019-01-062-5/+4
| | | | | | | | | | The WIN32 implementation of check_errors_in_children shouldn't have reset bb_got_signal as it's used to signal an error.
* | busybox: add --uninstall optionRon Yorston2019-01-053-2/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add an option to allow hard links to be removed. busybox --uninstall file removes all hard links to the given file (including the file itself.) Since Microsoft Windows refuses to delete a running executable a BusyBox binary is unable to remove links to itself. busybox --uninstall -n file displays the names of all hard links to the given file. Although this feature is couched in terms of uninstalling BusyBox it's actually quite general: it can be used to delete or display hard links to any file.
* | busybox: identify scripts in output of 'busybox --list-full'Ron Yorston2019-01-051-0/+4
| |
* | lineedit: allow non-ASCII characters when tab-completing filenamesRon Yorston2019-01-051-0/+4
| |
* | win32: reduce static storage needed for lazy loadingRon Yorston2019-01-042-21/+15
| | | | | | | | | | | | Only the generic function pointer and initialisation flag need to be in static storage. The DLL and function names and the specialised function pointer can be local.
* | win32: add support for %T to strftimeRon Yorston2018-12-161-21/+30
| | | | | | | | | | | | | | | | Add the %T format specifier (same as %H:%M:%S) to our emulation of strftime. Rewrite so that common code to replace a format specifier with a string is shared.
* | ash: fix local PATH assignmentsRon Yorston2018-12-151-7/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous commit included code to use PATH values assigned to local variables: PATH=/new/path:$PATH new_binary It didn't work in the case when no fork was needed, for example: (PATH=/new/path:$PATH new_binary) because the call to listsetvar() freed the PATH value that was passed to shellexec(). The forking case only worked because the spawn_forkshell() mechanism in busybox-w32 didn't allow the PATH value to be freed. Rewrite the code so it works whether or not a fork is needed. The code would also work on POSIX systems. A cleaner solution could be extracted from dash commit cbb71a8 'eval: Add assignment built-in support again' but neither that nor the current patch are suitable for submission to upstream BusyBox. This one is preferred because it requires fewer changes from upstream.
* | win32: special treatment for PATHRon Yorston2018-12-147-82/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The PATH shell variable is a special case. It can be exported to the environment where it might be interpreted by native applications which assume the separator is ';'. Hence: - require that the separator used in PATH is ';' - enforce this by intercepting calls to setvareq() that set PATH and adjusting its value if necessary. As a result of this the code to parse PATH can be simplified by replacing the hardcoded Unix ':' path separator by the platform- dependent macro PATH_SEP. The MANPATH variable is also required to use ';' as its separator but since it's less likely to be used this isn't enforced.
* | ash: move code from setup_environment()Ron Yorston2018-12-143-15/+7
| | | | | | | | | | | | | | ash calls setup_environment() but only uses a small amount of its functionality. Moving the code into ash itself means we don't need to customise setup_environment() for WIN32 and can remove it from the build.
* | ash: prevent ctrl-c from killing background processesRon Yorston2018-12-131-0/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | spawn_forkshell() was missing some code that would normally have been run from forkchild when a background process was started: - the ctrl-c handler wasn't disabled; - standard input wasn't connected to /dev/null. Using ctrl-c to kill a foreground process also killed background processes. Fixing this requires passing the forkshell mode and the number of processes associated with the forkshell job to the child process.
* | ash: fix ctrl-c handling for pipelinesRon Yorston2018-12-131-43/+57
| | | | | | | | | | | | | | | | | | | | | | There were two flaws in the implementation of ctrl-c handling in waitpid_child(): - processes associated with all jobs were killed; - all processes in a pipeline were killed but only the status of one was updated. As a result of the latter ctrl-c didn't reliably stop a pipeline.
* | win32: emulate SIGPIPERon Yorston2018-12-117-14/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The code to check whether a write error is due to a broken pipe can now either: - return with error EPIPE; - cause the process to exit with code 128+SIGPIPE. The default is the latter but the behaviour can be changed by issuing signal(SIGPIPE, SIG_IGN) and signal(SIGPIPE, SIG_DFL) calls. No actual signal is involved so kill can't send SIGPIPE and handlers other than SIG_IGN and SIG_DFL aren't supported. This does, however, avoid unsightly 'broken pipe' errors from commands like the example in GitHub issue #99: dd if=/dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;
* | win32: special treatment for files with the '.sh' extensionRon Yorston2018-12-092-36/+46
| | | | | | | | | | | | | | | | | | | | | | | | Files with the extension '.sh' are considered to be executable. Those that start with a '#!' line will be run using the specified interpreter. If no '#!' is present the script will be run by the shell. When searching for an executable the '.sh' extension will be tested in the same way as the standard extensions understood by spawnve(). '.sh' takes precedence over the standard extensions.
* | win32: add a case-insensitive version of is_suffixed_with()Ron Yorston2018-12-093-2/+30
| |
* | ash: use auto_win32_extension() in tryexec()Ron Yorston2018-12-091-6/+3
| |
* | win32: use open_read_close() where possibleRon Yorston2018-12-092-12/+4
| |
* | lineedit: more case-insensitive comparisons in tab completionRon Yorston2018-12-083-0/+27
| |
* | lineedit: improvements to tab completionRon Yorston2018-12-085-12/+26
| | | | | | | | | | | | | | | | | | | | Since getpwent isn't implemented for WIN32 there's no point in enabling FEATURE_USERNAME_COMPLETION. Use case-insensitive comparisons when matching filenames. The code to exclude non-executables when tab completing executables is WIN32-specific and shouldn't omit directories.
* | win32: allow execution of empty batch file to succeedRon Yorston2018-12-081-0/+8
| | | | | | | | | | | | | | Microsoft Windows' spawnve returns ERROR_BAD_EXE_FORMAT when passed an empty batch file. Work around this by skipping spawnve and returning success.
* | win32: (another) fix to file extension testRon Yorston2018-12-071-1/+1
| | | | | | | | | | | | | | It turns out '.bat' is a valid batch file name. Reduce the permitted length for filenames to allow for this. Also, actually *use* the file basename in the test this time.
* | win32: fix to file extension testRon Yorston2018-12-071-2/+3
| | | | | | | | | | | | | | When looking for the special WIN32 file extensions only consider the file's basename, not the full path. Otherwise a file called '.bat', for example, is considered executable by 'ls -a' and the shell tries to run './.bat'.
* | win32: improve execution of batch filesRon Yorston2018-12-071-26/+8
| | | | | | | | | | | | | | | | | | It appears that when a batch file is executed the first argument must contain backslashes if it's a relative path. Absolute paths work either way. In both cases the extension is optional. This allows for a considerable simplification of the special case in spawnveq.
* | win32: rework adding of extensions to filenamesRon Yorston2018-12-066-98/+64
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously there was one function to handle adding extensions to executable filenames, add_win32_extension(). Refactor this into three functions: add_win32_extension() appends the suffix to the argument string in-place. The argument must be long enough to cope with this, as is the case in ash where path_advance() adds 4 bytes to each filename for just this reason. alloc_win32_extension() is equivalent to the old add_win32_extension(). It allocates a string to hold the new filename then calls the new add_win32_extension() function. The caller is responsible for managing the returned string. auto_win32_extension() calls alloc_win32_extension() and saves the resulting string using auto_string(). It's used where the new filename is consumed immediately or the actual value isn't needed. Rewrite code to use the most appropriate function. Also reorder some code in find_executable() and find_command().
* | ash: fix 'type' and 'command -v'Ron Yorston2018-12-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The 'type' and 'command -v' builtins could return incorrect information when their argument included a file separator. For example: $ command -v cmd C:/Windows/system32/cmd.exe $ command -v C:/Windows/system32/cmd.exe $ echo $? 127 Fix the faulty logic causing this.
* | Merge branch 'busybox' into mergeRon Yorston2018-12-057-30/+58
|\|
| * vi: correctly detect when a deletion empties the bufferRon Yorston2018-12-031-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Michał Berger has reported two issues: - Repeatedly deleting and undoing the deletion of the last line results in characters being lost from the end of the line. - Deleting the bottom line twice then attempting to undo each of these deletions results in a segfault. The problem seems to be an incorrect test for whether the text buffer is empty. Reported-by: Michał Berger <michallinuxstuff@gmail.com> Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: code shrinkDenys Vlasenko2018-11-291-13/+17
| | | | | | | | | | | | | | | | | | | | | | | | function old new delta char_search 241 247 +6 get_one_address 275 272 -3 colon 2878 2875 -3 do_cmd 4726 4720 -6 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/3 up/down: 6/-12) Total: -6 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * vi: fix FEATURE_VI_REGEX_SEARCH to respect LIMITED (one-line) searchDenys Vlasenko2018-11-291-5/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If busybox is compiled with FEATURE_VI_REGEX_SEARCH enabled, command ":s/x/y/" searches not only in the current line, but continues search after it. This makes range searches (":1,3s/x/y/") work incorrect. For example file "./test": 1 2 3 $ vi ./test :1,2s/3/e/ gives us: 1 2 e function old new delta char_search 213 241 +28 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * libbb: do not misinterpret 0x10-0x19 chars in "\xNNN" tooDenys Vlasenko2018-11-291-6/+4
| | | | | | | | | | | | | | function old new delta bb_process_escape_sequence 141 151 +10 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * libbb: @ in "\x3@" is not a valid hex digitDenys Vlasenko2018-11-291-2/+10
| | | | | | | | | | | | | | function old new delta bb_process_escape_sequence 134 141 +7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * cat,nl: fix handling of open errorsDenys Vlasenko2018-11-294-7/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | $ cat -n does_not_exist; echo $? cat: does_not_exist: No such file or directory 1 function old new delta print_numbered_lines 118 129 +11 nl_main 196 201 +5 cat_main 421 425 +4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 20/0) Total: 20 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| * awk: abort if NF set to negative valueDenys Vlasenko2018-11-281-0/+2
| | | | | | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>