Skip to content

AmiFUSE v0.6.0

Latest

Choose a tag to compare

@reinauer reinauer released this 07 Jul 19:37

The headline of this release is first-class Windows support: AmiFUSE now integrates with Explorer end-to-end — double-click an .hdf to mount every partition it contains, manage mounts from the system tray, and install everything with one script. Alongside
that, this release adds new diagnostic and inspection commands, fixes a long list of correctness issues found in a full-codebase review, and removes ~2,400 lines of dead code.

🪟 Windows shell integration

  • Double-click mounting: amifuse register adds Explorer file associations for .hdf/.adf. Double-clicking mounts read-write and opens Explorer; the context menu offers Mount & Open and Mount Read-Only.
  • Multi-partition fan-out: opening an image mounts every partition, one free drive letter each, with a single summary dialog on partial failure.
  • System tray mount manager: see active mounts, inspect images, and unmount cleanly (pip install amifuse[windows]).
  • Zero-to-ready installer: tools\install-windows.ps1 (with install.bat UAC wrapper and -Uninstall switch) handles Python, WinFSP, venv, and registration.
  • Drive letters are selected via GetLogicalDrives, so assigned-but-empty slots (e.g. an empty card reader on D:) are no longer picked by mistake; mount failures now surface as dialogs instead of silently vanishing.
  • Explorer refreshes immediately on mount/unmount via SHChangeNotify.

✨ New features

  • amifuse doctor — checks Python, amitools, machine68k, fusepy, the FUSE backend, drivers, PATH, and shell registration; --fix auto-repairs what it can, --json for scripting.
  • amifuse status — lists active AmiFUSE mounts (PID, mountpoint, image, uptime), with --json output.
  • Disk space reporting (statfs): Finder, Explorer, and df now show real volume capacity and free space.
  • ADF driver auto-resolution: floppy mounts find FastFileSystem in the driver search path automatically.
  • Handler compatibility: handlers get a minimal dos.library process at startup (fixes crashes in handlers calling GetCurrentDir/CurrentDir during init), INQUIRY reports a CD-ROM device type for ISO images (CD filesystems no longer reject the disk), and the bundled amitools gains expansion.library (FindConfigDev()).

🐛 Bug fixes

  • Fixed handler-memory lock leaks: intermediate locks are freed while walking path components, and rename/mkdir release their locks on error paths too. Leaked locks could previously block deletes with ERROR_OBJECT_IN_USE until unmount.
  • The bootstrap no longer keeps (or leaks) a second open handle on the image file for the lifetime of the mount.
  • RDB images with non-512-byte blocks are now parsed correctly by the block-device backend (block size is auto-detected instead of forced to 512).
  • Only genuine "object not found" errors are negative-cached; transient handler errors (e.g. object-in-use) no longer masquerade as ENOENT for seconds afterwards.
  • doctor --fix now actually applies fixes when combined with --json.
  • Mount discovery falls back to PowerShell CIM when wmic is missing or broken (newer Windows 11 builds), and the tray survives discovery errors instead of silently freezing.
  • Security and concurrency fixes from review: command-injection hardening in the launcher/tray Inspect actions, PID-reuse guard before killing mount processes, VBS argument-escaping and TOCTOU fixes, and consistent locking around deferred deletes.
  • Fixed a file-creation race with Explorer/WinFSP (stat pinned across create→release), SCSI WRITE(10) short-buffer validation (proper sense data), a statfs crash guard, .Trashes.<uid> filtering on macOS, capped metadata caches for large trees, and temp-file cleanup when icon installation hits a locked file.

⚠️ Behavior changes

  • Double-click mount is now read-write on Windows (was read-only); use the Mount Read-Only context menu entry for the old behavior.
  • No bundled FastFileSystem binary yet pending licensing resolution. Supply your own (e.g. from a Workbench install) in the driver directory — doctor and mount now report a missing driver gracefully instead of failing on load.

🧹 Internal

  • Removed ~2,400 lines of dead scaffolding (five unused modules, a 750-line debug scanner, dead helpers, unused imports).
  • Deduplicated the RDB inspect flow (amifuse inspect and rdb-inspect share one implementation), FUSE stat construction, the handler main-loop capture, and RDB parsing (backend now delegates to open_rdisk).
  • The version string is resolved in exactly one place.
  • CI now runs Windows integration and tools-smoke jobs, plus new mount-lifecycle and integration tests for statfs, write persistence, and unmount.

Full Changelog: v0.5.0...v0.6.0