<feed xmlns='http://www.w3.org/2005/Atom'>
<title>busybox-w32/win32/mingw.c, branch long_paths</title>
<subtitle>A mirror of https://github.com/rmyorston/busybox-w32.git
</subtitle>
<id>https://git.lua4.win/busybox-w32/atom?h=long_paths</id>
<link rel='self' href='https://git.lua4.win/busybox-w32/atom?h=long_paths'/>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/'/>
<updated>2026-02-27T14:27:40+00:00</updated>
<entry>
<title>win32: add (some) long path support</title>
<updated>2026-02-27T14:27:40+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2026-02-27T13:57:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=ed525e2db10081f095d2fccc1b02830654470401'/>
<id>urn:sha1:ed525e2db10081f095d2fccc1b02830654470401</id>
<content type='text'>
Use the longPathAware manifest entry to handle path lengths above
260.  This requires the LongPathsEnabled registry key to be set
at run-time.

Modify (some) WIN32 API calls to use the wide-character variant.

These features are controlled by the build-time configuration
option FEATURE_LONG_PATHS, which is not enabled by default.
</content>
</entry>
<entry>
<title>win32: add support for /dev/std{in,out,err}</title>
<updated>2026-02-02T15:53:01+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2026-02-02T15:53:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=8e6a6312552343aec7f5cde795ef0a11ef83b8ff'/>
<id>urn:sha1:8e6a6312552343aec7f5cde795ef0a11ef83b8ff</id>
<content type='text'>
Allow applets to open the "files" /dev/stdin, /dev/stdout and
/dev/stderr.  The 'stat' and 'ls' applets pretend they exist.

Adds 48-56 bytes.
</content>
</entry>
<entry>
<title>win32: avoid failure when localtime() argument is out of range</title>
<updated>2025-11-26T12:56:11+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2025-11-26T12:56:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=3b2f7ff1e0733c8224d0c6a0632abbbb87e8db91'/>
<id>urn:sha1:3b2f7ff1e0733c8224d0c6a0632abbbb87e8db91</id>
<content type='text'>
The implementation of localtime(3) in the Microsoft Windows
runtime only accepts arguments between the Unix epoch (1970)
and either 2038 or 3000 for 32-bit or 64-bit systems respectively.
For values outside those limits it returns a NULL pointer.

Unfortunately, upstream BusyBox hardly ever bothers to check the
return value.  Thus, when a call to stat(2) returned an all-zero
FILETIME for a file, the 'stat' applet failed.  An all-zero FILETIME
represents a date in 1600, which is clearly before the Unix epoch.

Add a wrapper to localtime(3) which detects an out-of-range value
and returns a valid 'struct tm' for the Unix epoch.  This is easier
than adding checks on the return value of every call to localtime(3).

Adds 32-48 bytes.

(GitHub issue #548)
</content>
</entry>
<entry>
<title>mkdir: correctly report directory creation</title>
<updated>2025-11-22T09:22:28+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2025-11-22T09:22:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=18ad143f86ded661ae4d2bef0e3a36490e786963'/>
<id>urn:sha1:18ad143f86ded661ae4d2bef0e3a36490e786963</id>
<content type='text'>
It was found that 'mkdir -p --verbose C:/' incorrectly reported
that 'C:/' was created.

Commit 0e0b5e9ff8 (mingw.c: ignore EACCES from mkdir if directory
exists) fixed a failure to create directories but caused the
`mkdir` applet to issue the wrong diagnostic.

The underlying problem is in the Windows runtime implementation
of _mkdir(): it can return the wrong errno in some cases, EACCES
instead of EEXIST.

Having the mkdir(2) wrapper return the correct errno should fix
both the directory creation and verbose diagnostic problems.

The website referenced in the previous commit is no longer
available.  archive.org has a copy:

   https://web.archive.org/web/20150224075238/http://www.apijunkie.com/APIJunkie/blog/post/2009/12/22/_mkdir-C-runtime-library-function-might-return-unexpected-error-values.aspx

(GitHub issue #546)
</content>
</entry>
<entry>
<title>win32: allow use of /dev/tty</title>
<updated>2025-11-10T11:33:33+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2025-11-10T11:33:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=f53dbcb8edbcfdad1721d0f5c9e8a16d54e983dc'/>
<id>urn:sha1:f53dbcb8edbcfdad1721d0f5c9e8a16d54e983dc</id>
<content type='text'>
Treat /dev/tty as an alias for Windows' 'con' device.  The code
is similar to that used for /dev/null.

Adds 24-48 bytes.

(GitHub issue #538)
</content>
</entry>
<entry>
<title>win32: use RtlGenRandom for /dev/urandom</title>
<updated>2025-10-09T06:49:58+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2025-10-09T06:49:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=255e7ea4e2a0e3d28c0abf2750f42713eff711d7'/>
<id>urn:sha1:255e7ea4e2a0e3d28c0abf2750f42713eff711d7</id>
<content type='text'>
Use the (somewhat ancient) Microsoft RtlGenRandom() function to
provide random data for /dev/urandom.

Saves 176-240 bytes.

(GitHub issue #519)
</content>
</entry>
<entry>
<title>win32: use correct errno for fopen() of directory</title>
<updated>2025-09-19T12:53:35+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2025-09-19T12:53:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=352bc560459d6dd24b3e6cb72f46ee8e37ba2efd'/>
<id>urn:sha1:352bc560459d6dd24b3e6cb72f46ee8e37ba2efd</id>
<content type='text'>
We already fixed up errno when a directory was opened by open().
Do the same for fopen().  This allows grep to give a more useful
error message when it's asked to open a directory.

Adds 64 bytes.

(GitHub issue #521)
</content>
</entry>
<entry>
<title>win32: deduplicate die_if_error()</title>
<updated>2025-07-11T10:47:56+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2025-07-11T10:47:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=b3ad13290344c2f40dc5bdc6053cc3cc73acfd9c'/>
<id>urn:sha1:b3ad13290344c2f40dc5bdc6053cc3cc73acfd9c</id>
<content type='text'>
There were two copies of the static function die_if_error().
Replace these with a single external function.

Saves 16 bytes.
</content>
</entry>
<entry>
<title>win32: retry when command needs elevated privileges</title>
<updated>2025-02-03T11:55:28+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2025-02-03T11:55:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=14ccc45d548c9dfa73594f155e920c83e2882081'/>
<id>urn:sha1:14ccc45d548c9dfa73594f155e920c83e2882081</id>
<content type='text'>
Some installer programs have an entry in their manifest to indicate
that they need elevated privileges.  The shell in busybox-w32 was
unable to run such programs.

When a program fails to run with ERROR_ELEVATION_REQUIRED, try
again using ShellExecuteEx() with the 'runas' verb to give it
elevated privileges.

Adds 272-288 bytes.

(GitHub issue #481)
</content>
</entry>
<entry>
<title>ash: strip trailing slash from directory if necessary</title>
<updated>2024-12-29T10:56:48+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2024-12-29T10:56:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=c5e5da5eb1e0f6acee26bc22d2f567406a2840bc'/>
<id>urn:sha1:c5e5da5eb1e0f6acee26bc22d2f567406a2840bc</id>
<content type='text'>
The previous commit removed trailing dots and spaces from the last
component of a pathname when changing directory.  If the result has
a trailing slash remove that too.  But not if it's a drive root,
to avoid 'cd C:/' showing a current directory of 'C:'.

Adds 48 bytes.

(GitHub issue #478)
</content>
</entry>
</feed>
