github.com/linuxboot/fiano@v1.2.0/pkg/cbfs/master.go (about) 1 // Copyright 2018-2021 the LinuxBoot Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package cbfs 6 7 import ( 8 "bytes" 9 "io" 10 "log" 11 ) 12 13 func init() { 14 if err := RegisterFileReader(&SegReader{Type: 2, Name: "CBFSMaster", New: NewMaster}); err != nil { 15 log.Fatal(err) 16 } 17 } 18 19 func NewMaster(f *File) (ReadWriter, error) { 20 Debug("NewMaster: %+v, %x", f, f) 21 r := &MasterRecord{File: *f} 22 return r, nil 23 } 24 25 func (r *MasterRecord) Read(in io.ReadSeeker) error { 26 dump := &bytes.Buffer{} 27 n, err := io.Copy(dump, in) 28 if err != nil { 29 return err 30 } 31 Debug("MasterRecord (%d bytes)\n %+v\n %x", n, r, dump) 32 Debug("MasterRecord Header %v at %v", r.MasterHeader, r.Offset) 33 if err := Read(in, &r.MasterHeader); err != nil { 34 Debug("MasterRecord read from %v: %v", r.Offset, err) 35 if err != io.EOF { 36 return err 37 } 38 } 39 Debug("Got header %s offset %#x", r.String(), r.Offset) 40 return nil 41 } 42 43 func (r *MasterRecord) String() string { 44 return recString(r.File.Name, r.RecordStart, r.Type.String(), r.Size, "none") 45 } 46 47 func (r *MasterRecord) Write(w io.Writer) error { 48 return Write(w, r.MasterHeader) 49 } 50 51 func (r *MasterRecord) GetFile() *File { 52 return &r.File 53 }