ls 0.3.1
The -R freeze, root-caused and fixed. This page last saw 0.1, so it also carries 0.2's IoErr()-before-report fix and 0.3's empty-name recursion guard — and now the real story underneath all of them.
- The bug: ls freed its entry records with the wrong deallocator (
Dispose()onNEW'd objects). In the E-VO runtime, small NEW objects are carved from shared 5000-byte allocator chunks — and Dispose() on the first entry carved from a chunk frees the whole chunk while the rest are still live. Big listings corrupted their own heap: intermittently blank names, and with-Ra self-recursion that could hard-freeze the machine. - The fix: NEW pairs with END — one rule, three call sites. Verified against the E-VO runtime source, the compiled binary, and A/B runs over a full system drive: 0.3 crashes, 0.3.1 walks all 138 directories with every name intact and the entry set matching the host filesystem exactly.
- The 0.3 empty-name guard stays in as defense in depth.
- Binary sizes: E 11452 bytes; the asm twin still tracks 0.2 (its own allocator — it never had this bug).
Download ls-0.3.1.lha below - the auto-generated Source code links are snapshots of the whole AmigaTools repo, not just ls.