package hostbox import ( "github.com/carlosframework/platform/internal/rootstate" "github.com/carlosframework/platform/internal/safefile" "os" ) func sameInventoryIdentity(a, b rootstate.FileIdentity) bool { if a.Boot == "" || b.Boot == "" { return false } if a.Handle == "" || b.Handle == "" { return a.Boot == b.Boot && a == b } return a.Same(b) } func VerifyInventoryFile(f *os.File, e StopInventoryEntry) error { info, err := f.Stat() if err != nil { return err } if !info.IsDir() && !info.Mode().IsRegular() { return ErrTypedInventory } now, err := rootstate.ObjectIdentity(f) if err != nil { return err } if e.Identity.Device != e.Device || e.Identity.Inode != e.Inode || e.Identity.Mode&0170000 != e.Type || !sameInventoryIdentity(e.Identity, now) { return ErrChanged } return nil } func OpenInventoryFile(path string) (*os.File, error) { f, err := safefile.OpenDir(path) if err != nil { return safefile.OpenFile(path, os.O_RDONLY, 0) } return f, nil }