mirror of
https://github.com/freemkv/freemkv-unlock.git
synced 2026-10-07 18:13:11 +00:00
v1.6.0-rc2
The first cut ran release-profile tests on all three platforms everywhere, which invented coverage no crate had ever claimed. bdemu is Linux-only — its ci.yml has no macOS or Windows job at all, and its tests call ExitStatus::signal(), which does not exist on Windows, so they do not compile there let alone run. The rest follow the policy ci.yml already set: tests execute on Linux and macOS, Windows compiles them so the cfg(windows) halves still get codegen before release time. That policy is now explicit in qa.yml as a windows-build job rather than implied by which jobs happen to exist. Recorded, not papered over: running the suites on Windows DOES find real defects — autorip has five Windows path-handling failures in mover.rs and freemkv-engine has three tests hardcoding /dev/null. freemkv ships a Windows GUI, so they matter. They are pre-existing rather than 1.6.1 regressions, and fixing them is its own piece of work. Also build the binary before cli-parity.sh. cli-integration.sh builds its own; cli-parity.sh only checks for one and exits 2 with "build it first", so both legs died before running a single case.
freemkv-unlock
The unlock layer for the freemkv toolchain.
An unlocker removes a drive-level bus-encryption barrier so the drive serves readable (de-bus'd / de-scrambled) sectors. Content-key decryption is a separate concern — the consumer's job.
This crate defines the Unlocker contract and a generic SCSI transport
contract, and holds the self-contained unlocker modules. The consumer
(libfreemkv) depends on this crate and
dispatches through all_unlockers(); it never names an individual unlocker, and
clients of libfreemkv are oblivious to unlockers entirely (as they are to the
SCSI layer).
use freemkv_unlock::UnlockError;
// Drive-prep: try each unlocker's feature unlock until one claims the drive.
// `NotApplicable` means "not this unlocker's drive" — move on; a transport
// error means a dead bus — abort. `unlock_bus` follows the same contract for
// removing per-disc bus encryption.
for u in freemkv_unlock::all_unlockers() {
match u.unlock_features(&mut scsi, &ctx) {
Ok(unlocked) => return Ok(unlocked),
Err(UnlockError::NotApplicable) => continue,
Err(e) => return Err(e),
}
}
To remove an unlocker, delete its module directory and its one line in
all_unlockers() — nothing else changes.
License: MIT.
Languages
Rust
100%