<feed xmlns='http://www.w3.org/2005/Atom'>
<title>busybox-w32/win32, 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>ash: allow execution of busybox-w32 binary without extension</title>
<updated>2026-02-25T09:33:36+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2026-02-25T09:33:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=35e590816a844e3ccc707c841b756e83987d09eb'/>
<id>urn:sha1:35e590816a844e3ccc707c841b756e83987d09eb</id>
<content type='text'>
If the busybox-w32 binary didn't have an extension the shell was
unable to spawn itself:

   $ ls -l busybox
   -rwxrwxr-x    1 rmy      rmy         661006 Feb 25 09:37 busybox
   $ ./busybox sh
   $ ls
   sh: unable to spawn shell

This happened because the shell used spawnve() from the C runtime
to execute itself.  Microsoft insists on trying to add an extension
to the name of the binary unless it has an explicit '.' as its
last character.

Use the internal spawnveq() instead, as it handles various quirks
like the above.

Adds 16-32 bytes.

(GitHub issue #566)
</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: fix output conversion with no-op utf8 manifest</title>
<updated>2025-12-26T12:29:54+00:00</updated>
<author>
<name>Avi Halachmi (:avih)</name>
<email>avihpit@yahoo.com</email>
</author>
<published>2025-12-23T23:40:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=234a3b97d371f2b2b2296d933a84f5006e2d6ea6'/>
<id>urn:sha1:234a3b97d371f2b2b2296d933a84f5006e2d6ea6</id>
<content type='text'>
Before commit 208649d7, when unicode was enabled (utf8 manifest), the
build refused to run unless the manifest was in effect (the codepage
is UTF8, and argv, win APIs, and internal strings are UTF8 too).

That commit, however, allows such build to also run where the manifest
has no effect (prior to win10 1903), and so some of the unicode code
paths behave incorrectly in such cases when the runtime ACP is ANSI.

This commit fixes the UTF8_OUTPUT code path in such case, to also
check ACP, instead of unconditionally printing to the console as UTF8.

When ACP is not UTF8, it now behaves identically to a non-unicode
build (doing output conversion from ACP to console out-CP if needed).

Example: create a filename which is valid in the ANSI codepage with
chars above 127, and do "echo *" (glob expansion), which now prints the
name correctly, but previously it didn't when the build has unicode
enabled at buildtime but not runtime (see next why not just try "ls").

This covers the existing busybox-w32 unicode code paths, as the others
(UTF8_INPUT and unicode-aware editing) already had runtime ACP test,
so unicode _should_ be disabled correctly if the runtime ACP is ANSI.

However, there are also some new upstream unicode code paths which
can be entered now - when unicode is enabled at build time but
disabled at runtime.

One we know of is printable-chars code, which is used by applets like
"ls", and so currently, when unicode is enabled at build time but
disabled at runtime, "ls" displays valid ANSI chars above 127 as "?".

The next commit will address this.
</content>
</entry>
<entry>
<title>uname: Check for PROCESSOR_ARCHITECTURE_ARM as well</title>
<updated>2025-12-08T21:19:18+00:00</updated>
<author>
<name>Martin Storsjö</name>
<email>martin@martin.st</email>
</author>
<published>2025-12-03T21:47:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=fd4410b88751c027a1dac5316f7786055c65819c'/>
<id>urn:sha1:fd4410b88751c027a1dac5316f7786055c65819c</id>
<content type='text'>
Return "armv7" in this case.
</content>
</entry>
<entry>
<title>win32: add a config for 32-bit build with Unicode</title>
<updated>2025-12-02T09:36:14+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2025-12-02T09:36:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=208649d7b5e27e5473f72381827364e4cfc0fc17'/>
<id>urn:sha1:208649d7b5e27e5473f72381827364e4cfc0fc17</id>
<content type='text'>
Now that a binary with a UTF-8 manifest can run on Windows XP
it's possible to configure a build which supports Unicode on
Windows 10+ but which still runs on legacy systems.

- Add the config file mingw32w_defconfig.  This is a 32-bit build
  with the UTF-8 manifest which also runs on legacy systems.

- A new config option, FEATURE_FAIL_IF_UTF8_MANIFEST_UNSUPPORTED,
  allows the check for legacy systems to be skipped.

- An incompatibility with Windows XP in writeCon_utf8() has been
  fixed.

See this GitHub issue for details:

   https://github.com/skeeto/w64devkit/issues/315
</content>
</entry>
<entry>
<title>win32: update UTF-8 manifest</title>
<updated>2025-12-01T15:45:18+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2025-12-01T15:45:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=52917c47e21478c2507d1ff7b0d83a699650b310'/>
<id>urn:sha1:52917c47e21478c2507d1ff7b0d83a699650b310</id>
<content type='text'>
It seems that the UTF-8 manifest can be adjusted to avoid binaries
failing to run on Windows XP.

Make the necessary adjustment.  This doesn't affect the legacy
builds, only those with Unicode enabled.  Nor does it change the
code which prevents Unicode builds from running on platforms
that don't support the manifest.

See this GitHub issue for details:

   https://github.com/skeeto/w64devkit/issues/315
</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>
</feed>
