First numbered release of this fork, based on upstream mheyer32/dopus5allamigas v5.93.0. Adds a round of bug fixes (memory leaks, enforcer hits, disk-reporting), fixes a GCC 6.5.0b miscompile that crashed clock_proc, and replaces the build/release pipeline with one that attaches artifacts to tagged releases.
Only an OS3 build is attached to this release — OS4 and MorphOS builds are fixed in 5.94.
Bug fixes
- Enforcer hits on stale lister pointers —
function_lock_pathsandfunction_unlock_pathsdereferencednode->listerafter the lister window had been closed, triggering reads of freed memory atlister+0x1503andlister+0x5E2. Both paths now validate againstGUI->lister_listunder the shared lock before touching the lister. - Disk percentage > 100% on floppies and misbehaving drives — used wrong intermediate divisions; rewritten as
(used * 100) / totalwith a defensive 100% cap. Fixes upstream issue #7. - Title-bar and device-list hardening for large/bogus drives — cap Full% at 100% when
id_NumBlocksUsed > id_NumBlocks, show "?" for Free/In Use in that case instead of tens-of-terabytes wrap-around, add a TB tier toBytesToString64(legitimate multi-TB volumes show "23.5T" instead of "HUGE"), widen block counts throughULONGbefore promoting toUQUADto avoid sign-extension on drives with more than 2³¹ blocks. - xadopus hangs on archive drag/copy — added a 30 s
LaunchCommandtimeout and fixed NULL-pointer bugs in_doubleclick,_viewcommand,_copy. Module bumped to 93. - GCC 6.5.0b miscompile of inline library headers —
SysInfo.h,newicon.h,multiuser.hused the((fn*)(base - LVO))(base)idiom withregister __asm("a6"); GCC 6.5.0b (amigadev/crosstools) emittedjsr +LVO(a6)instead ofjsr -LVO(a6), jumping into garbage and crashing with 80000004 on the first SysInfo.library call fromclock_proc. Rewritten withLP0/LP1/… macros from<inline/macros.h>, whose inline asm hardcodes the minus sign and is immune to the miscompile.NO_INLINE_STDARGvarargs helpers preserved.
Memory / resource leaks
Leaks ported from Hagbard-Celin/galileo:
launcher.c—DeleteMsgPort(reply_port)onlauncher_procexitrexx_handler.c—ClearRexxMsgbeforeDeleteRexxMsg; reply port leak on sync pathcallback_main.c— freerm_Result2argstring inHookRexxCommandfileclass_editor.c— free result argstring +ClearRexxMsginclassed_send_rexxdesktop_drop.c—UnLock(CurrentDir(old))indesktop_drop_on_objectevent_loop.c— remove straybreakthat skippedReplyAppMessagefunction_launch.c— free partial allocations on failure infunction_new_handlethemes.c— unified cleanup path insave_theme, handlesCreateMsgPortfailure
Additional leaks found by audit:
config_open.c—L_OpenButtonBankbailed viareturn NULLonconvert_button_windowfailure, leaking the IFF handle and buttons-drawer Lock and leavingCurrentDirpointing at a freed lock. Now uses a unified cleanup path.filetype.c—creator_guicreateddata->app_portbut never calledDeleteMsgPortbeforeFreeVec(data); leaked one port per invocation.ftp_main.c— ifrexport CreateMsgPortsucceeded butnfyportfailed,AddPort(rexport)was skipped yet cleanup unconditionally calledRemPort(rexport)on the un-Added port (undefined behaviour). Split soAddPortpairs with the always-run cleanup.function_filechange.c—alloc_filechangeleaked theAllocMemH'dFileChangeblock ifAllocDosObject(DOS_FIB)failed.
Other fixes ported from Hagbard-Celin/galileo:
launcher.c—DupLock/UnLockaroundCurrentDirswap so a Project-icon launch does not clobber the WBArg lock when the default tool has no path.backdrop.c— replaceBOOL only_iconwithULONG mode(BTRM_WINDOW|BTRM_NOBORDER|BTRM_ICON) inbackdrop_test_rmbso the group-window popup uses theWhichLayerresult instead of a naive bounds check, preventing popups firing through overlapping windows.filetypes_proc.c— skipGetFileVersionfor directories.
Build / CI
- OS3 build switched to
sacredbanana/amiga-compiler(NDK 3.2 headers; still GCC 6.5.0b). Matrix-builds debug and release from one job, concurrency group cancels superseded runs,workflow_dispatchtrigger added, upload step now fails if no archive is produced instead of silently succeeding. - Automated tagged releases via
ncipollo/release-action. Release job accepts numeric tags like5.93in addition tov*, and matches the version-suffixed archive produced by the makefile (the hardcodedDopus5_os3.zipnever existed, so earlier tags attached no artifact). - Pack releases with
lhainstead ofzip— AmigaOSunzipdoes not restore theeprotection flag, so binaries extracted from the CI zip were not executable.lhais already in the compiler image; executables arechmod +x'd before packing so Amiga LHA maps the permission back toeon extract. - Stub
creal/cimaginmath_replace.h— release build (-Os -flto) pulledlibm020/libm.a(cexp.o)via LTO during the diskinfo.module link; sacredbanana's libm is missing these symbols. Diskinfo never callscexp; minimal implementations via GCC__real__/__imag__satisfy the linker without affecting behaviour. - Bump CI actions off Node 20:
checkoutv4 → v6,upload-artifactv4 → v7.
Other
- Copyright year updated to 2026.
- Non-ASCII character fix.
- Internal docs mapping module discovery/identification, module entry points and execution protocol, and the
EXTCMD_*callback system (not user-visible; for future maintainers).
PROG_REVISION bumped to 93. LIB/CMD ABI versions unchanged.
Full Changelog: https://github.com/midwan/dopus5allamigas/commits/5.93