mirror of
https://github.com/blacktop/ipsw.git
synced 2026-06-07 12:27:36 +00:00
Refactor diff jobs into task-owned renderers with persistent cache support, root-confined walkers, and quieter Mach-O/Firmware output.
64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
package diff
|
|
|
|
import (
|
|
"github.com/blacktop/ipsw/pkg/info"
|
|
)
|
|
|
|
// ipswVolumeOrderMachos is the volume order the *InIPSW walkers enumerate:
|
|
// FileSystem, SystemOS, AppOS, ExclaveOS. machos/files/plists/localizations
|
|
// share it.
|
|
var ipswVolumeOrderMachos = []string{"fs", "sys", "app", "exc"}
|
|
|
|
type ipswVolumeFileSession interface {
|
|
Root(string) (string, error)
|
|
Release(string) error
|
|
}
|
|
|
|
// volumeResolves reports whether the IPSW has the given OS volume, matching the
|
|
// exact GetXOsDmg-guarded skips in ForEachMachoInIPSW (skip on ANY getter error;
|
|
// no sys->fs fallback, unlike mount.Session.Root("sys")).
|
|
func volumeResolves(inf *info.Info, typ string) bool {
|
|
if inf == nil {
|
|
return false
|
|
}
|
|
var err error
|
|
switch typ {
|
|
case "fs":
|
|
_, err = inf.GetFileSystemOsDmg()
|
|
case "sys":
|
|
_, err = inf.GetSystemOsDmg()
|
|
case "app":
|
|
_, err = inf.GetAppOsDmg()
|
|
case "exc":
|
|
_, err = inf.GetExclaveOSDmg()
|
|
default:
|
|
return false
|
|
}
|
|
return err == nil
|
|
}
|
|
|
|
// volumeLabel is the DMG label ForEachFileInIPSW emits (note the lowercase
|
|
// "filesystem"); used by parseFiles.
|
|
func volumeLabel(typ string) string {
|
|
switch typ {
|
|
case "fs":
|
|
return "filesystem"
|
|
case "sys":
|
|
return "SystemOS"
|
|
case "app":
|
|
return "AppOS"
|
|
case "exc":
|
|
return "ExclaveOS"
|
|
}
|
|
return typ
|
|
}
|
|
|
|
// volumeListDMGLabel is the DMG label search.ListDMGs uses (capital
|
|
// "FileSystem"); used by parseLocalizations, whose keys embed this name.
|
|
func volumeListDMGLabel(typ string) string {
|
|
if typ == "fs" {
|
|
return "FileSystem"
|
|
}
|
|
return volumeLabel(typ)
|
|
}
|