commit cff759cb543a1f59edfad29eba0d57274c35e59b
parent cb4307b7502e9bfa91daae633b6d9212bf1385eb
Author: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Date: Fri, 18 Sep 2026 16:09:29 -0400
icns: build element headers with encoding/binary
The package carried its own big-endian writer and copied the type field a
byte at a time, which the standard library and copy already do. Sharing
elementHeaderSize with the decoder keeps the encoder's idea of a header from
drifting from the parser's.
Diffstat:
2 files changed, 5 insertions(+), 21 deletions(-)
diff --git a/icns.go b/icns.go
@@ -107,15 +107,6 @@ func resizeSquare(img image.Image, size uint, interp InterpolationFunction) imag
return dst
}
-// Big-endian.
-// https://golang.org/src/image/png/writer.go
-func writeUint32(b []uint8, u uint32) {
- b[0] = uint8(u >> 24)
- b[1] = uint8(u >> 16)
- b[2] = uint8(u >> 8)
- b[3] = uint8(u >> 0)
-}
-
var sizes = []uint{
1024,
512,
diff --git a/writer.go b/writer.go
@@ -2,6 +2,7 @@ package icns
import (
"bytes"
+ "encoding/binary"
"image"
"image/png"
"io"
@@ -59,12 +60,8 @@ func encodeImage(img image.Image) ([]byte, error) {
func (i *Icon) writeHeader(wr io.Writer) (int64, error) {
if !i.headerSet {
defer func() { i.headerSet = true }()
- i.header[0] = i.Type.ID[0]
- i.header[1] = i.Type.ID[1]
- i.header[2] = i.Type.ID[2]
- i.header[3] = i.Type.ID[3]
- length := uint32(len(i.data) + 8)
- writeUint32(i.header[4:8], length)
+ copy(i.header[:4], i.Type.ID)
+ binary.BigEndian.PutUint32(i.header[4:8], uint32(len(i.data)+elementHeaderSize))
}
written, err := wr.Write(i.header[:8])
return int64(written), err
@@ -123,12 +120,8 @@ func (s *IconSet) encodeIcons() error {
func (s *IconSet) writeHeader(wr io.Writer) (int64, error) {
if !s.headerSet {
defer func() { s.headerSet = true }()
- s.header[0] = 'i'
- s.header[1] = 'c'
- s.header[2] = 'n'
- s.header[3] = 's'
- length := uint32(len(s.data) + 8)
- writeUint32(s.header[4:8], length)
+ copy(s.header[:4], "icns")
+ binary.BigEndian.PutUint32(s.header[4:8], uint32(len(s.data)+elementHeaderSize))
}
written, err := wr.Write(s.header[:8])
return int64(written), err