summaryrefslogtreecommitdiff
path: root/win32 (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* win32: canonicalize path in chdir(2)Ron Yorston2019-03-061-0/+13
| | | | | | | | | | | | Provide an implementation of chdir(2) which canonicalizes the path to resolve symlinks. Otherwise changing to a symlinked directory confuses 'ls -l' because it thinks '.' is a link rather than a directory. OTOH, using 'cd' in the shell to change to a symlinked directory now results in a mismatch between the shell's idea of where we are and what's displayed in the prompt. But upstream BusyBox does that too so it must be OK.
* win32: implement readlink(2)Ron Yorston2019-03-061-0/+65
| | | | | | | | | | Provide an implementation of readlink(2) based on code from Git for Windows. This version only supports symbolic links, not mount points, as the latter seem to work well enough as-is. With this change the ls and stat applets can display the targets of symbolic links. The readlink applet has been enabled in the default configuration.
* win32: let realpath(3) succeed on WinXP/ReactOSRon Yorston2019-03-061-8/+14
| | | | | | Allow realpath(3) to return successfully on platforms that don't support GetFinalPathNameByHandleA(). It may still have done some useful work.
* win32: drop argument from err_win_to_posix()Ron Yorston2019-03-063-9/+9
|
* win32: improved results for symlinks from stat(2)Ron Yorston2019-03-051-36/+56
| | | | | | | | The file size and times reported when Windows follows a symlink are incorrect. To get the correct values canonicalize the path and try again. Also fetch the correct device id and inode for symlinks.
* win32: change handling of trailing slashes in stat(2)Ron Yorston2019-03-041-40/+11
| | | | | | | | | | The code to implement stat(2) works around the fact that getting the attributes of a file fails if its name ends with a path separator. Directory names with a trailing path separator work fine. Why bother with this workaround? Linux doesn't. Instead try to return a meaningful error code.
* win32: simplify utimes(2) implementationRon Yorston2019-03-041-31/+6
| | | | | | | | | | | SetFileTime only needs FILE_WRITE_ATTRIBUTES access, not full read/write access. Therefore it isn't necessary to change the permissions of read-only files. The flag FILE_FLAG_BACKUP_SEMANTICS is required to access directories but does no harm if used on a file. As a result there's no need to get file attributes.
* win32: let stat(2) report numeric uids for local usersRon Yorston2019-03-021-8/+47
| | | | | | | | | | | Further extend file identification so stat(2) returns the relative identifier as a numeric uid for files with owner SIDs that look like a local or domain user. See: https://blogs.technet.microsoft.com/markrussinovich/2009/11/03/the-machine-sid-duplication-myth-and-why-sysprep-matters/ https://cygwin.com/cygwin-ug-net/ntsec.html
* win32: make stat(2) try to identify the owner of filesRon Yorston2019-03-011-7/+64
| | | | | Extend stat(2) so it tries to determine whether a file belongs to the current user or not. If not it's said to belong to root.
* win32: make more use of common lazy loading codeRon Yorston2019-02-272-27/+10
|
* win32: fake permissions/ownership for inaccessible filesRon Yorston2019-02-251-0/+5
| | | | | If stat(2) knows a file exists but can't obtain additional metadata for it give it root ownership and no permissions for other.
* uname: drop support for ia64Ron Yorston2019-02-211-4/+3
|
* win32: use manifest provided by MinGW-w64Ron Yorston2019-02-213-33/+0
| | | | | | | | | The manifest included here wasn't effective in telling Windows about version compatibility. Use the default manifest provided by MinGW-w64 instead. On Fedora this requires installing the mingw32-windows-default-manifest and/or mingw64-windows-default-manifest packages.
* win32: remove unused include filesRon Yorston2019-02-202-0/+0
| | | | | | Upstream commit d9aabfe578 (make busybox more portable) moved a couple of include files into platform-dependent code so we no longer need dummy versions.
* win32: stat(2) succeeds if fetching extra metadata failsRon Yorston2019-02-191-11/+3
| | | | | | | | | Some files can't be opened to fetch additional metadata. When that happens allow stat(2) to successfully return what data it has. In a few cases where the inode number is used to determine if files are identical ignore invalid inode numbers.
* win32: tidy up stat(2) implementationRon Yorston2019-02-181-21/+22
| | | | | | | Since st_nlink now depends on st_mode it should be set after st_mode is initialised. Rearrange the code to fetch extra metadata.
* win32: avoid use of uninitialised metadata in stat(2)Ron Yorston2019-02-181-2/+8
| | | | | | When additional metadata was being fetched the code for non-disk files used uninitialised data from the BY_HANDLE_FILE_INFORMATION structure.
* ash: updated support for hiding consoleRon Yorston2019-02-171-0/+16
| | | | | | | | Move the code to hide the console to a separate function in win32/mingw.c. Use lazy loading to avoid problems on platforms where the require APIs aren't supported (PR #70). Enable console hiding in the default 64-bit configuration.
* win32: make stat(2) fetch additional metadataRon Yorston2019-02-161-4/+35
| | | | | | | | | | | | | | | Modify the WIN32 implementation of stat(2) to fetch inode number, device id and number of hardlinks. This requires opening a handle to the target file so it will be slower. A number of features can be enabled or start to work: - tar can detect if an archive is being stored in itself; - find can support the -inum and -links options; - ls can display inode numbers; - diff can detect attempts to compare a file with itself; - du has better support for hardlinked files; - cp can detect attempts to copy a file over itself.
* win32: add a function to remove CRs from a text bufferRon Yorston2019-02-141-0/+11
|
* win32: don't try to run non-existent scriptRon Yorston2019-02-071-1/+1
| | | | | | In parse_interpreter return an error when the file doesn't exist. The current code tries to run non-existent scripts with a .sh suffix, thus breaking the test ash-misc/exec.tests.
* win32: add support for the euro currency symbolRon Yorston2019-02-022-0/+89
| | | | | | | | | | | | | | | | | | | | | | The euro currency symbol was added to some OEM code pages. See: https://www.aivosto.com/articles/charsets-codepages-dos.html Add a configuration option (enabled by default) to support this. When enabled: - The read_key() function requests wide character key events. This allows the euro symbol to be entered regardless of the console OEM code page, though it needs to be available in the ANSI code page. - Conversions between OEM and ANSI code pages in winansi.c are modified to work around a bug in the Microsoft routines. - If the OEM code page is 850 when BusyBox starts it's changed to 858. This is the only currently supported OEM code page. Also, the shell read builtin is modified to use read_key() whenever input is being taken from the console.
* win32: allow characters to be entered as ALTNNNRon Yorston2019-01-261-3/+34
| | | | | | | | | | | | It wasn't possible to enter characters using Alt and the decimal character code. This was because the character is generated when the Alt key is released but the WIN32 implementation of read_key() ignored all key up events. Modify read_key() to ignore numbers entered on the numeric keypad with Alt pressed and to detect when Alt is released. Fixes GitHub issue #136.
* 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-081-1/+2
| | | | | | | | | | | 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-081-11/+29
| | | | | | | | | 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-081-1/+10
|
* win32: add a fake root user and groupRon Yorston2019-01-081-13/+26
|
* win32: implement vsnprintf(2)Ron Yorston2019-01-081-0/+21
| | | | | The Microsoft C runtime may include a defective version of vsnprintf. Implement a standards-compliant replacement.
* win32: implement umask(2)Ron Yorston2019-01-071-0/+14
| | | | | | | | | 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.
* busybox: add --uninstall optionRon Yorston2019-01-051-0/+39
| | | | | | | | | | | | | | | | | | 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.
* 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.
* win32: special treatment for PATHRon Yorston2018-12-141-20/+0
| | | | | | | | | | | | | | | | | 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.
* win32: emulate SIGPIPERon Yorston2018-12-111-3/+23
| | | | | | | | | | | | | | | | | | | 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-091-2/+1
|
* win32: use open_read_close() where possibleRon Yorston2018-12-092-12/+4
|
* 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-062-22/+34
| | | | | | | | | | | | | | | | | | | | | | | 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().
* win32: fix implementation of access(2)Ron Yorston2018-12-041-2/+5
| | | | | | | | | The WIN32 implementation of access(2) didn't return: - the correct value when a directory was tested for X_OK; - the correct error code when the target existed but execute permission wasn't available.
* ash: fix a couple of test casesRon Yorston2018-12-041-3/+1
| | | | | | | | | | | | | | The ash tests exitcode_EACCES and exitcode_ENOENT both failed. In commit 92dbd3c09 a test was added to tryexec to check that the file being run existed and was executable. The error codes returned by this test were incorrect. The slightly later commit f5783ef14 added a similar test in spawnveq which got the error codes right. Remove the test from tryexec and some superfluous error messages from spawnveq.
* win32: save a few bytes in process scanningRon Yorston2018-11-271-14/+7
| | | | | | Recalculate the system boot time on every pass through the process scanning loop. It's less efficient than storing the value in a static variable but not noticeably so and it saves a few bytes.
* win32: save a few bytes in fake times(2) implementationRon Yorston2018-11-271-5/+1
|
* Allow build objects to go to a separate directoryRon Yorston2018-11-212-3/+4
| | | | | | | | Fix the build system so the KBUILD_OUTPUT environment variable can be used as intended: to specify that object files are placed in a separate directory from the source. Also ensure that busybox-w32.manifest is deleted by 'make mrproper'.
* win32: use string_array_len to obtain size of argv arrayRon Yorston2018-10-261-8/+4
| | | | Saves 16 bytes.
* win32: rename resource filesRon Yorston2018-07-248-6/+6
| | | | | Since more than just icon resources are now provided give various files more appropriate names.