1.6.0: version sync + fix stale docs

Bump to 1.6.0 (workspace sync, no functional change). Fix the README
example that called the removed matches()/unlock() API — rewrite to the
real unlock_features()/unlock_bus() contract (+ ld/README).
This commit is contained in:
Matthew Jackson
2026-07-28 15:35:19 -07:00
parent 3c5cfd02d9
commit 28a6e50ede
4 changed files with 17 additions and 5 deletions
+4
View File
@@ -1,5 +1,9 @@
# Changelog
## [1.6.0] — UNRELEASED
Version sync with the workspace. No functional change in this crate.
## [1.5.2] — 2026-07-22
### Changed
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "freemkv-unlock"
version = "1.5.2"
version = "1.6.0"
edition = "2024"
rust-version = "1.86"
license = "MIT"
+10 -2
View File
@@ -14,9 +14,17 @@ clients of libfreemkv are oblivious to unlockers entirely (as they are to the
SCSI layer).
```rust
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() {
if u.matches(&ctx) {
return u.unlock(&mut scsi, &ctx);
match u.unlock_features(&mut scsi, &ctx) {
Ok(unlocked) => return Ok(unlocked),
Err(UnlockError::NotApplicable) => continue,
Err(e) => return Err(e),
}
}
```
+2 -2
View File
@@ -10,8 +10,8 @@ decryption is a separate concern, handled by the consumer.
Clients never name this module directly —
[libfreemkv](https://github.com/freemkv/libfreemkv) dispatches through
`freemkv_unlock::all_unlockers()`, and this module answers `matches()` /
`unlock()` when the drive identity is one it supports.
`freemkv_unlock::all_unlockers()`, and this module answers `unlock_features()` /
`unlock_bus()` when the drive identity is one it supports.
## Scope: non-persistent unlock only