Matthew Jackson
8949b81dfc
macos(drive): discover empty-tray drives via IOKit registry-id selectors
...
Empty-tray optical drives couldn't be opened because the macOS backend
resolved drives by media-child `BSD Name`, which doesn't exist without a
disc loaded. Result: `list_drives()` returned nothing for a drive with no
media, and any attempt to `open("disc://")` on that state failed.
Fix: enumerate `IOBDServices` directly. With media present, the returned
selector is the familiar `/dev/diskN` path (unchanged). With no media,
the selector is an opaque `ioreg:<registry-id>` string that resolves to
the same IOBDServices entry — Disk Arbitration and unmount are skipped
because there's no media node.
- `src/drive/macos.rs`, `src/drive/mod.rs`, `src/scsi/mod.rs`: threads
the selector through the transport so empty-tray drives are openable
without punning it as a filesystem path.
- `src/scsi/macos.rs`, `src/scsi/macos_shim.c`: the C shim now accepts
both `/dev/diskN` and `ioreg:<id>` in `shim_open_exclusive`, and
`shim_list_drives` reports the correct selector for each drive.
- `tests/macos_drive_tests.rs` (new): covers empty-tray discovery.
- `docs/drive-access.md`, `docs/scsi-macos.md`: document the two-path
selector model.
[skip-media]
2026-09-25 12:03:02 -07:00
..
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-20 20:44:28 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-07-29 18:04:51 -07:00
2026-07-30 13:21:04 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-18 13:34:50 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-07-29 18:04:51 -07:00
2026-09-25 12:03:02 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-06-26 21:42:31 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-20 20:44:28 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-20 20:44:28 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-07-29 18:04:51 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-07-29 18:04:51 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-25 12:03:02 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-05 12:35:03 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00
2026-09-02 12:40:55 -07:00