From fcc850084407f17c08b8162139e8dcca18800836 Mon Sep 17 00:00:00 2001 From: Mark Karpeles Date: Sat, 11 Apr 2020 14:47:06 +0900 Subject: [PATCH] fix el-torito boot image checksum/etc --- bootcatalog.go | 8 +++++--- image_writer.go | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/bootcatalog.go b/bootcatalog.go index fd8a04d..d1296a1 100644 --- a/bootcatalog.go +++ b/bootcatalog.go @@ -66,7 +66,7 @@ func encodeBootCatalogs(e []*BootCatalogEntry) ([]byte, error) { } // load_rba - binary.Write(buf, binary.LittleEndian, b.file.meta().targetSector) // 4 bytes + binary.Write(buf, binary.LittleEndian, uint32(b.file.meta().targetSector)) // 4 bytes buf.Write(make([]byte, 20)) // "Vendor unique selection criteria." @@ -81,10 +81,12 @@ func doBootCatalogChecksum(b []byte) []byte { var v uint16 for i := 0; i < len(b); i += 2 { - v += uint16((b[i] << 8) | b[i+1]) + v -= binary.LittleEndian.Uint16(b[i : i+2]) } - return []byte{byte(v >> 8), byte(v & 0xff)} + res := make([]byte, 2) + binary.LittleEndian.PutUint16(res, v) + return res } func doElToritoTableChecksum(in []byte) (r uint32) { diff --git a/image_writer.go b/image_writer.go index 54a2030..1ec0027 100644 --- a/image_writer.go +++ b/image_writer.go @@ -132,6 +132,9 @@ func (iw *ImageWriter) getDir(directoryPath string) (*itemDir, error) { dp := strings.Split(directoryPath, "/") pos := iw.root for _, seg := range dp { + if seg == "" { + continue + } if v, ok := pos.children[seg]; ok { if rV, ok := v.(*itemDir); ok { pos = rV