<feed xmlns='http://www.w3.org/2005/Atom'>
<title>busybox-w32/win32, branch cron_changes</title>
<subtitle>A mirror of https://github.com/rmyorston/busybox-w32.git
</subtitle>
<id>https://git.lua4.win/busybox-w32/atom?h=cron_changes</id>
<link rel='self' href='https://git.lua4.win/busybox-w32/atom?h=cron_changes'/>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/'/>
<updated>2026-05-11T12:54:20+00:00</updated>
<entry>
<title>reset: add support for stty and Windows Terminal</title>
<updated>2026-05-11T12:54:20+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2026-05-11T12:54:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=fd61ea6032ce732db6f66c335e7bfc44aa2290ff'/>
<id>urn:sha1:fd61ea6032ce732db6f66c335e7bfc44aa2290ff</id>
<content type='text'>
The 'reset' applet hasn't kept pace with developments elsewhere.

We now have support for 'stty sane', so the code in 'reset' which
calls that can be enabled.

Windows 10 and 11 have updated Terminal and Console programs, with
varying features and behaviours.  Add ANSI emulation code to handle
clearing the scrollback buffer and use ANSI sequences in 'reset'
to do that.  It was also necessary to retain the explicit call to
reset_screen(), or 'reset' didn't work properly in the Terminal I'd
installed in Windows 10.

Adds 92-128 bytes.

(GitHub issue #161)
</content>
</entry>
<entry>
<title>win32: silence warning in ioctl(2)</title>
<updated>2026-05-05T07:10:56+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2026-05-05T07:10:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=245541c0b57fdbeb096f556cefb44419478565ca'/>
<id>urn:sha1:245541c0b57fdbeb096f556cefb44419478565ca</id>
<content type='text'>
Silence a compiler warning that 'arg' is an unused variable if
neither stty nor ttysize is defined.
</content>
</entry>
<entry>
<title>win32: add FAST_FUNC annotations</title>
<updated>2026-05-04T10:51:00+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2026-05-04T10:51:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=f26b970e4d22e1b2e3ca6209c3412fa0f683d953'/>
<id>urn:sha1:f26b970e4d22e1b2e3ca6209c3412fa0f683d953</id>
<content type='text'>
I've been far too lax in applying FAST_FUNC annotations.  These
can make function calls smaller and faster, but only on 32-bit
systems and for non-static, non-variadic functions with non-void
arguments.

Saves 4680 bytes in the 32-bit build; 64-bit builds are unaffected.
</content>
</entry>
<entry>
<title>Add crond and crontab (#561)</title>
<updated>2026-05-03T08:53:07+00:00</updated>
<author>
<name>mbartlett21</name>
<email>29034492+mbartlett21@users.noreply.github.com</email>
</author>
<published>2026-05-03T08:53:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=c23112c3a0bbf1d07f03b3c07fe96b5b4c5271f1'/>
<id>urn:sha1:c23112c3a0bbf1d07f03b3c07fe96b5b4c5271f1</id>
<content type='text'>
* Enable crontab

* Enable crond

* Allow sendmail to be used in crond

This also adds another option to the mingw_popen_fd function to capture
stderr as well. And also added the options to support WNOHANG as well
as an unused status in mingw_wait3

* Check current uid when running crond

* Only show tail for mailto jobs

* Use system drive for cron

* crond: add missing feature check

* crond: use spawn_detach for background operation</content>
</entry>
<entry>
<title>win32: disable urandom/zero devices if dd is disabled</title>
<updated>2026-04-27T07:40:06+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2026-04-27T07:40:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=750a5e863cc04584ba50722d8b003e279cd67d24'/>
<id>urn:sha1:750a5e863cc04584ba50722d8b003e279cd67d24</id>
<content type='text'>
Support for /dev/urandom and /dev/zero relies on having a working
dd.  If the dd applet is disabled attempts to access them should
fail.

Theoretically a third-party dd utility could also work, but let's
not encourage that sort of heresy.
</content>
</entry>
<entry>
<title>win32: improve urandom/zero device handling</title>
<updated>2026-04-26T19:49:26+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2026-04-26T19:49:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=164015bc98835934ed6437107d874e6987ad9418'/>
<id>urn:sha1:164015bc98835934ed6437107d874e6987ad9418</id>
<content type='text'>
Rearrange the code to avoid a superfluous process creation.

Saves 16 bytes in the 64-bit build, adds 24 in the 32-bit.
</content>
</entry>
<entry>
<title>win32: expose /dev/urandom and /dev/zero</title>
<updated>2026-04-26T09:59:27+00:00</updated>
<author>
<name>Ron Yorston</name>
<email>rmy@pobox.com</email>
</author>
<published>2026-04-26T09:59:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=354d8e9e6b7367f081cfa57130fea4abf23f9bb3'/>
<id>urn:sha1:354d8e9e6b7367f081cfa57130fea4abf23f9bb3</id>
<content type='text'>
Previously the special devices /dev/urandom and /dev/zero could
only be used via the 'dd' applet.  They were also used internally
by some applets.

Expose /dev/urandom and /dev/zero so they can be used as file
arguments to applets and a source of redirections in the shell.
They're also now visible to 'stat' and 'ls', but only if given
as an explicit argument.

Adds 122-144 bytes.

(GitHub issues #98, #282)
</content>
</entry>
<entry>
<title>Win32: trivial refinements (#577)</title>
<updated>2026-04-18T09:27:47+00:00</updated>
<author>
<name>avih</name>
<email>2164962+avih@users.noreply.github.com</email>
</author>
<published>2026-04-18T09:27:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=0495eb5c75d62fc574a8c5477f9196f0917f723d'/>
<id>urn:sha1:0495eb5c75d62fc574a8c5477f9196f0917f723d</id>
<content type='text'>
* win32: fnmatch2 minor refinements (no-op)

With beacket, add '\' to the switch/case, and at fnmatch, pre-calc
the two most used flags (CASEFOLD and PATHNAME) once on init.

Negligible perf impact, and happens to save few bytes in x64.

* win32: actype: trivial refinments (no-op)

NULL was used in actype.h but requires stddef.h - which we don't
include, so use (int*)0 which also expresses it more clearly.

Remove "#include &lt;string.h&gt;" at actype.c, which we don't need anymore.

* scripts/patbench.sh: make executable (chmod +x)</content>
</entry>
<entry>
<title>win32: fnmatch2: replace if-else-... with switch/case</title>
<updated>2026-04-16T09:42:13+00:00</updated>
<author>
<name>Avi Halachmi (:avih)</name>
<email>avihpit@yahoo.com</email>
</author>
<published>2026-04-15T16:58:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=98e09f1c6221a88fb42fd37019a9e5e8482d2654'/>
<id>urn:sha1:98e09f1c6221a88fb42fd37019a9e5e8482d2654</id>
<content type='text'>
This was done to be more concise, but it also happens to speed up
the two slowest test patterns by about ~ 30%, and without measurable
impact on any of the other test patterns (nor the correctness).
Maybe the stars aligned for compiler optimizations. We'll take it.

Here are results of scripts/patbench.sh with recent iterations of
fnmatch, from most recent to the original old fnmatch:

CURRENT results:

[ 1]    107 ms  OK      (M:-----)  ''
[ 2]    105 ms  OK      (M:12345)  '*'
[ 3]    106 ms  OK      (M:-----)  '@'
[ 4]    111 ms  OK      (M:1----)  'Lorem*'
[ 5]    122 ms  OK      (M:-2---)  '*quis'
[ 6]    133 ms  OK      (M:--3--)  '*nisi*'
[ 7]    229 ms  OK      (M:--3--)  '*[fobar]xyz*'
[ 8]    451 ms  OK      (M:--3--)  '*[foobarfoobarfoobarfoobar]xyz*'
[ 9]    463 ms  OK      (M:-2---)  '*[!foobarfoobarfoobarfoobar]xyz*'
[10]    136 ms  OK      (M:12345)  '*[hello world, this is a test]*'
[11]    126 ms  OK      (M:12345)  '*[!hello world, this is a test]*'
[12]    169 ms  OK      (M:1-3--)  '*[*'
[13]    175 ms  OK      (M:1----)  '*[]*'
[14]    171 ms  OK      (M:--3--)  '*[!]*'
[15]    162 ms  OK      (M:-23-5)  '*[!]].*'
[16]    243 ms  OK      (M:1----)  '*[![:print:]]*'
[17]    135 ms  OK      (M:-23--)  '*z*'
[18]    131 ms  OK      (M:---4-)  '*-*'
[19]    157 ms  OK      (M:---4-)  '*[-]*'
[20]    165 ms  OK      (M:-234-)  '*[-z]*'
[21]    176 ms  OK      (M:-234-)  '*[z-]*'
[22]    182 ms  OK      (M:-234-)  '*[-z-]*'
[23]    130 ms  OK      (M:1-3--)  '*]*'
[24]    153 ms  OK      (M:1-3--)  '*[]]*'
[25]    164 ms  OK      (M:1-34-)  '*[]-]*'
[26]    167 ms  OK      (M:123--)  '*[]-_]*'
[27]    168 ms  OK      (M:1234-)  '*[]-_-]*'
[28]    122 ms  OK      (M:12-45)  '*[0-9A-Za-z][0-9A-Za-z]'
[29]    126 ms  OK      (M:12-45)  '*[[:alnum:]][[:alnum:]]'
[30]    118 ms  OK      (M:12-45)  '*[a-z][a-z]'
[31]    127 ms  OK      (M:12-45)  '*[a-bc-de-z][a-bc-de-z]'
[32]    131 ms  OK      (M:12-45)  '*[[:lower:]][[:lower:]]'
[33]    136 ms  OK      (M:-----)  '*[0-9A-Fa-ef][0-9A-Fa-ef]'
[34]    124 ms  OK      (M:-----)  '*[[:xdigit:]][[:xdigit:]]'
[35]    128 ms  OK      (M:12-45)  '*[0-9A-Za-z]*[0-9A-Za-z]'
[36]    129 ms  OK      (M:12-45)  '*[[:alnum:]]*[[:alnum:]]'
[37]    127 ms  OK      (M:12-45)  '*[a-z]*[a-z]'
[38]    123 ms  OK      (M:12-45)  '*[a-bc-de-z]*[a-bc-de-z]'
[39]    124 ms  OK      (M:12-45)  '*[[:lower:]]*[[:lower:]]'
[40]    136 ms  OK      (M:---4-)  '*[0-9A-Fa-ef]*[0-9A-Fa-ef]'
[41]    134 ms  OK      (M:---4-)  '*[[:xdigit:]]*[[:xdigit:]]'
[42]    136 ms  OK      (M:12-45)  '*[0-9A-Za-z]*[0-9A-Za-z]*[0-9A-Za-z]'
[43]    131 ms  OK      (M:12-45)  '*[[:alnum:]]*[[:alnum:]]*[[:alnum:]]'
[44]    124 ms  OK      (M:12-45)  '*[a-z]*[a-z]*[a-z]'
[45]    137 ms  OK      (M:12-45)  '*[a-bc-de-z]*[a-bc-de-z]*[a-bc-de-z]'
[46]    129 ms  OK      (M:12-45)  '*[[:lower:]]*[[:lower:]]*[[:lower:]]'
[47]    160 ms  OK      (M:---4-)  '*[0-9A-Fa-ef]*[0-9A-Fa-ef]*[0-9A-Fa-ef]'
[48]    164 ms  OK      (M:---4-)  '*[[:xdigit:]]*[[:xdigit:]]*[[:xdigit:]]'
[49]    152 ms  OK      (M:12-45)  '*[0-9A-Za-z]*[0-9A-Za-z]*[0-9A-Za-z]*[0-9A-Za-z]'
[50]    152 ms  OK      (M:12-45)  '*[[:alnum:]]*[[:alnum:]]*[[:alnum:]]*[[:alnum:]]'
[51]    130 ms  OK      (M:12-45)  '*[a-z]*[a-z]*[a-z]*[a-z]'
[52]    165 ms  OK      (M:12-45)  '*[a-bc-de-z]*[a-bc-de-z]*[a-bc-de-z]*[a-bc-de-z]'
[53]    146 ms  OK      (M:12-45)  '*[[:lower:]]*[[:lower:]]*[[:lower:]]*[[:lower:]]'
[54]    180 ms  OK      (M:---4-)  '*[0-9A-Fa-ef]*[0-9A-Fa-ef]*[0-9A-Fa-ef]*[0-9A-Fa-ef]'
[55]    189 ms  OK      (M:---4-)  '*[[:xdigit:]]*[[:xdigit:]]*[[:xdigit:]]*[[:xdigit:]]'

Previous commit (if-else-...) is mainly slower in patterns 8 and 9:

[ 6]    143 ms  OK      (M:--3--)  '*nisi*'
[ 7]    251 ms  OK      (M:--3--)  '*[fobar]xyz*'
[ 8]    638 ms  OK      (M:--3--)  '*[foobarfoobarfoobarfoobar]xyz*'
[ 9]    651 ms  OK      (M:-2---)  '*[!foobarfoobarfoobarfoobar]xyz*'
[10]    138 ms  OK      (M:12345)  '*[hello world, this is a test]*'
[11]    137 ms  OK      (M:12345)  '*[!hello world, this is a test]*'

Initial fnmatch2 commit (without any optimizations):

[ 1]    101 ms  OK      (M:-----)  ''
[ 2]    123 ms  OK      (M:12345)  '*'
[ 3]    105 ms  OK      (M:-----)  '@'
[ 4]    115 ms  OK      (M:1----)  'Lorem*'
[ 5]    134 ms  OK      (M:-2---)  '*quis'
[ 6]    131 ms  OK      (M:--3--)  '*nisi*'
[ 7]    235 ms  OK      (M:--3--)  '*[fobar]xyz*'
[ 8]    586 ms  OK      (M:--3--)  '*[foobarfoobarfoobarfoobar]xyz*'
[ 9]    613 ms  OK      (M:-2---)  '*[!foobarfoobarfoobarfoobar]xyz*'
[10]    153 ms  OK      (M:12345)  '*[hello world, this is a test]*'
[11]    160 ms  OK      (M:12345)  '*[!hello world, this is a test]*'
[12]    164 ms  OK      (M:1-3--)  '*[*'
[13]    165 ms  OK      (M:1----)  '*[]*'
[14]    157 ms  OK      (M:--3--)  '*[!]*'
[15]    157 ms  OK      (M:-23-5)  '*[!]].*'
[16]    244 ms  OK      (M:1----)  '*[![:print:]]*'
[17]    132 ms  OK      (M:-23--)  '*z*'
[18]    134 ms  OK      (M:---4-)  '*-*'
[19]    160 ms  OK      (M:---4-)  '*[-]*'
[20]    157 ms  OK      (M:-234-)  '*[-z]*'
[21]    168 ms  OK      (M:-234-)  '*[z-]*'
[22]    166 ms  OK      (M:-234-)  '*[-z-]*'
[23]    130 ms  OK      (M:1-3--)  '*]*'
[24]    150 ms  OK      (M:1-3--)  '*[]]*'
[25]    151 ms  OK      (M:1-34-)  '*[]-]*'
[26]    157 ms  OK      (M:123--)  '*[]-_]*'
[27]    156 ms  OK      (M:1234-)  '*[]-_-]*'
[28]    402 ms  OK      (M:12-45)  '*[0-9A-Za-z][0-9A-Za-z]'
[29]    416 ms  OK      (M:12-45)  '*[[:alnum:]][[:alnum:]]'
[30]    265 ms  OK      (M:12-45)  '*[a-z][a-z]'
[31]    410 ms  OK      (M:12-45)  '*[a-bc-de-z][a-bc-de-z]'
[32]    426 ms  OK      (M:12-45)  '*[[:lower:]][[:lower:]]'
[33]    347 ms  OK      (M:-----)  '*[0-9A-Fa-ef][0-9A-Fa-ef]'
[34]    370 ms  OK      (M:-----)  '*[[:xdigit:]][[:xdigit:]]'
[35]    294 ms  OK      (M:12-45)  '*[0-9A-Za-z]*[0-9A-Za-z]'
[36]    301 ms  OK      (M:12-45)  '*[[:alnum:]]*[[:alnum:]]'
[37]    214 ms  OK      (M:12-45)  '*[a-z]*[a-z]'
[38]    304 ms  OK      (M:12-45)  '*[a-bc-de-z]*[a-bc-de-z]'
[39]    302 ms  OK      (M:12-45)  '*[[:lower:]]*[[:lower:]]'
[40]    306 ms  OK      (M:---4-)  '*[0-9A-Fa-ef]*[0-9A-Fa-ef]'
[41]    291 ms  OK      (M:---4-)  '*[[:xdigit:]]*[[:xdigit:]]'
[42]    291 ms  OK      (M:12-45)  '*[0-9A-Za-z]*[0-9A-Za-z]*[0-9A-Za-z]'
[43]    302 ms  OK      (M:12-45)  '*[[:alnum:]]*[[:alnum:]]*[[:alnum:]]'
[44]    208 ms  OK      (M:12-45)  '*[a-z]*[a-z]*[a-z]'
[45]    314 ms  OK      (M:12-45)  '*[a-bc-de-z]*[a-bc-de-z]*[a-bc-de-z]'
[46]    288 ms  OK      (M:12-45)  '*[[:lower:]]*[[:lower:]]*[[:lower:]]'
[47]    315 ms  OK      (M:---4-)  '*[0-9A-Fa-ef]*[0-9A-Fa-ef]*[0-9A-Fa-ef]'
[48]    340 ms  OK      (M:---4-)  '*[[:xdigit:]]*[[:xdigit:]]*[[:xdigit:]]'
[49]    309 ms  OK      (M:12-45)  '*[0-9A-Za-z]*[0-9A-Za-z]*[0-9A-Za-z]*[0-9A-Za-z]'
[50]    304 ms  OK      (M:12-45)  '*[[:alnum:]]*[[:alnum:]]*[[:alnum:]]*[[:alnum:]]'
[51]    217 ms  OK      (M:12-45)  '*[a-z]*[a-z]*[a-z]*[a-z]'
[52]    317 ms  OK      (M:12-45)  '*[a-bc-de-z]*[a-bc-de-z]*[a-bc-de-z]*[a-bc-de-z]'
[53]    322 ms  OK      (M:12-45)  '*[[:lower:]]*[[:lower:]]*[[:lower:]]*[[:lower:]]'
[54]    315 ms  OK      (M:---4-)  '*[0-9A-Fa-ef]*[0-9A-Fa-ef]*[0-9A-Fa-ef]*[0-9A-Fa-ef]'
[55]    348 ms  OK      (M:---4-)  '*[[:xdigit:]]*[[:xdigit:]]*[[:xdigit:]]*[[:xdigit:]]'

Old fnmatch with actype/isactype in O(1):

[ 1]    103 ms  OK      (M:-----)  ''
[ 2]    116 ms  OK      (M:12345)  '*'
[ 3]    108 ms  OK      (M:-----)  '@'
[ 4]    112 ms  OK      (M:1----)  'Lorem*'
[ 5]    122 ms  OK      (M:-2---)  '*quis'
[ 6]    123 ms  OK      (M:--3--)  '*nisi*'
[ 7]    270 ms  OK      (M:--3--)  '*[fobar]xyz*'
[ 8]    650 ms  OK      (M:--3--)  '*[foobarfoobarfoobarfoobar]xyz*'
[ 9]    681 ms  OK      (M:-2---)  '*[!foobarfoobarfoobarfoobar]xyz*'
[10]    133 ms  OK      (M:12345)  '*[hello world, this is a test]*'
[11]    135 ms  OK      (M:12345)  '*[!hello world, this is a test]*'
[12]    191 ms  E:1-3-- (M:-----)  '*[*'
[13]    213 ms  E:1---- (M:-----)  '*[]*'
[14]    215 ms  E:--3-- (M:-----)  '*[!]*'
[15]    182 ms  OK      (M:-23-5)  '*[!]].*'
[16]    296 ms  OK      (M:1----)  '*[![:print:]]*'
[17]    121 ms  OK      (M:-23--)  '*z*'
[18]    115 ms  OK      (M:---4-)  '*-*'
[19]    167 ms  OK      (M:---4-)  '*[-]*'
[20]    189 ms  OK      (M:-234-)  '*[-z]*'
[21]    194 ms  OK      (M:-234-)  '*[z-]*'
[22]    203 ms  OK      (M:-234-)  '*[-z-]*'
[23]    122 ms  OK      (M:1-3--)  '*]*'
[24]    166 ms  OK      (M:1-3--)  '*[]]*'
[25]    185 ms  OK      (M:1-34-)  '*[]-]*'
[26]    163 ms  OK      (M:123--)  '*[]-_]*'
[27]    176 ms  OK      (M:1234-)  '*[]-_-]*'
[28]    381 ms  OK      (M:12-45)  '*[0-9A-Za-z][0-9A-Za-z]'
[29]    510 ms  OK      (M:12-45)  '*[[:alnum:]][[:alnum:]]'
[30]    274 ms  OK      (M:12-45)  '*[a-z][a-z]'
[31]    379 ms  OK      (M:12-45)  '*[a-bc-de-z][a-bc-de-z]'
[32]    488 ms  OK      (M:12-45)  '*[[:lower:]][[:lower:]]'
[33]    340 ms  OK      (M:-----)  '*[0-9A-Fa-ef][0-9A-Fa-ef]'
[34]    398 ms  OK      (M:-----)  '*[[:xdigit:]][[:xdigit:]]'
[35]   1402 ms  OK      (M:12-45)  '*[0-9A-Za-z]*[0-9A-Za-z]'
[36]   1962 ms  OK      (M:12-45)  '*[[:alnum:]]*[[:alnum:]]'
[37]    939 ms  OK      (M:12-45)  '*[a-z]*[a-z]'
[38]   1453 ms  OK      (M:12-45)  '*[a-bc-de-z]*[a-bc-de-z]'
[39]   1965 ms  OK      (M:12-45)  '*[[:lower:]]*[[:lower:]]'
[40]   1683 ms  OK      (M:---4-)  '*[0-9A-Fa-ef]*[0-9A-Fa-ef]'
[41]   2117 ms  OK      (M:---4-)  '*[[:xdigit:]]*[[:xdigit:]]'
(aborted manually due to exponential slowness)

Old fnmatch (before actype/isactype):

[ 1]    107 ms  OK      (M:-----)  ''
[ 2]    108 ms  OK      (M:12345)  '*'
[ 3]    104 ms  OK      (M:-----)  '@'
[ 4]    112 ms  OK      (M:1----)  'Lorem*'
[ 5]    120 ms  OK      (M:-2---)  '*quis'
[ 6]    127 ms  OK      (M:--3--)  '*nisi*'
[ 7]    244 ms  OK      (M:--3--)  '*[fobar]xyz*'
[ 8]    544 ms  OK      (M:--3--)  '*[foobarfoobarfoobarfoobar]xyz*'
[ 9]    588 ms  OK      (M:-2---)  '*[!foobarfoobarfoobarfoobar]xyz*'
[10]    129 ms  OK      (M:12345)  '*[hello world, this is a test]*'
[11]    136 ms  OK      (M:12345)  '*[!hello world, this is a test]*'
[12]    192 ms  E:1-3-- (M:-----)  '*[*'
[13]    201 ms  E:1---- (M:-----)  '*[]*'
[14]    203 ms  E:--3-- (M:-----)  '*[!]*'
[15]    182 ms  OK      (M:-23-5)  '*[!]].*'
[16]    454 ms  OK      (M:1----)  '*[![:print:]]*'
[17]    124 ms  OK      (M:-23--)  '*z*'
[18]    123 ms  OK      (M:---4-)  '*-*'
[19]    160 ms  OK      (M:---4-)  '*[-]*'
[20]    175 ms  OK      (M:-234-)  '*[-z]*'
[21]    177 ms  OK      (M:-234-)  '*[z-]*'
[22]    197 ms  OK      (M:-234-)  '*[-z-]*'
[23]    126 ms  OK      (M:1-3--)  '*]*'
[24]    168 ms  OK      (M:1-3--)  '*[]]*'
[25]    173 ms  OK      (M:1-34-)  '*[]-]*'
[26]    168 ms  OK      (M:123--)  '*[]-_]*'
[27]    170 ms  OK      (M:1234-)  '*[]-_-]*'
[28]    365 ms  OK      (M:12-45)  '*[0-9A-Za-z][0-9A-Za-z]'
[29]    513 ms  OK      (M:12-45)  '*[[:alnum:]][[:alnum:]]'
[30]    263 ms  OK      (M:12-45)  '*[a-z][a-z]'
[31]    376 ms  OK      (M:12-45)  '*[a-bc-de-z][a-bc-de-z]'
[32]    815 ms  OK      (M:12-45)  '*[[:lower:]][[:lower:]]'
[33]    311 ms  OK      (M:-----)  '*[0-9A-Fa-ef][0-9A-Fa-ef]'
[34]    756 ms  OK      (M:-----)  '*[[:xdigit:]][[:xdigit:]]'
[35]   1305 ms  OK      (M:12-45)  '*[0-9A-Za-z]*[0-9A-Za-z]'
[36]   1928 ms  OK      (M:12-45)  '*[[:alnum:]]*[[:alnum:]]'
[37]    919 ms  OK      (M:12-45)  '*[a-z]*[a-z]'
[38]   1446 ms  OK      (M:12-45)  '*[a-bc-de-z]*[a-bc-de-z]'
[39]   3192 ms  OK      (M:12-45)  '*[[:lower:]]*[[:lower:]]'
[40]   1586 ms  OK      (M:---4-)  '*[0-9A-Fa-ef]*[0-9A-Fa-ef]'
[41]   4601 ms  OK      (M:---4-)  '*[[:xdigit:]]*[[:xdigit:]]'
[42]  22491 ms  OK      (M:12-45)  '*[0-9A-Za-z]*[0-9A-Za-z]*[0-9A-Za-z]'
(aborted manually due to exponential slowness)
</content>
</entry>
<entry>
<title>win32: fnmatch2.c: optimize last '*'</title>
<updated>2026-04-16T09:42:13+00:00</updated>
<author>
<name>Avi Halachmi (:avih)</name>
<email>avihpit@yahoo.com</email>
</author>
<published>2026-04-14T08:05:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.lua4.win/busybox-w32/commit/?id=85f8fb5f2841e732e01cb32340822cc124f63fb7'/>
<id>urn:sha1:85f8fb5f2841e732e01cb32340822cc124f63fb7</id>
<content type='text'>
This adds two fairly cheap and effective optimizations at the tail
of the pattern (after the last '*'). Speeds up many cases by ~ x2+.
Details at the comment inside.

Adds 192 bytes in x64.
</content>
</entry>
</feed>
