| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package loader
- import (
- "encoding/binary"
- "fmt"
- "io"
- )
- // HeaderSize is the byte size of the MAK v2 header
- const HeaderSize = 32
- // ReadHeader reads a MAK v2 header from a reader
- func ReadHeader(r io.Reader) (*Header, error) {
- var h Header
-
- if _, err := io.ReadFull(r, h.Magic[:]); err != nil {
- return nil, fmt.Errorf("reading magic: %w", err)
- }
-
- // Check magic
- if string(h.Magic[:]) != Magic {
- return nil, fmt.Errorf("invalid magic: %s", string(h.Magic[:]))
- }
-
- if err := binary.Read(r, binary.LittleEndian, &h.Version); err != nil {
- return nil, fmt.Errorf("reading version: %w", err)
- }
- if err := binary.Read(r, binary.LittleEndian, &h.Flags); err != nil {
- return nil, fmt.Errorf("reading flags: %w", err)
- }
- if err := binary.Read(r, binary.LittleEndian, &h.SectionCount); err != nil {
- return nil, fmt.Errorf("reading section count: %w", err)
- }
- if err := binary.Read(r, binary.LittleEndian, &h.Alignment); err != nil {
- return nil, fmt.Errorf("reading alignment: %w", err)
- }
- if _, err := io.ReadFull(r, h.Reserved[:]); err != nil {
- return nil, fmt.Errorf("reading reserved: %w", err)
- }
-
- return &h, nil
- }
- // WriteHeader writes a MAK v2 header to a writer
- func WriteHeader(w io.Writer, h *Header) error {
- if _, err := w.Write(h.Magic[:]); err != nil {
- return err
- }
- if err := binary.Write(w, binary.LittleEndian, h.Version); err != nil {
- return err
- }
- if err := binary.Write(w, binary.LittleEndian, h.Flags); err != nil {
- return err
- }
- if err := binary.Write(w, binary.LittleEndian, h.SectionCount); err != nil {
- return err
- }
- if err := binary.Write(w, binary.LittleEndian, h.Alignment); err != nil {
- return err
- }
- if _, err := w.Write(h.Reserved[:]); err != nil {
- return err
- }
- return nil
- }
|