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  }