From 4692087c1a8840c3d1593b3df89a19ea2c8d31c4 Mon Sep 17 00:00:00 2001 From: Dustin Oprea Date: Wed, 8 Jul 2020 02:16:45 -0400 Subject: [PATCH] ifd_enumerate.go: Eliminate unnecessary buffering A simplification prior to some upcoming data-access changes. --- v2/ifd_enumerate.go | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/v2/ifd_enumerate.go b/v2/ifd_enumerate.go index ed8b805..1359333 100644 --- a/v2/ifd_enumerate.go +++ b/v2/ifd_enumerate.go @@ -77,7 +77,6 @@ type byteParser struct { byteOrder binary.ByteOrder addressableData []byte ifdOffset uint32 - buffer *bytes.Buffer currentOffset uint32 } @@ -91,7 +90,6 @@ func newByteParser(addressableData []byte, byteOrder binary.ByteOrder, ifdOffset bp = &byteParser{ addressableData: addressableData, byteOrder: byteOrder, - buffer: bytes.NewBuffer(addressableData[ifdOffset:]), currentOffset: ifdOffset, } @@ -111,16 +109,12 @@ func (bp *byteParser) getUint16() (value uint16, raw []byte, err error) { // TODO(dustin): Add test needBytes := 2 - offset := 0 - raw = make([]byte, needBytes) - for offset < needBytes { - n, err := bp.buffer.Read(raw[offset:]) - log.PanicIf(err) - - offset += n + if bp.currentOffset+needBytes >= len(bp.addressableData) { + return 0, nil, io.EOF } + raw = addressableData[bp.currentOffset : bp.currentOffset+needBytes] value = bp.byteOrder.Uint16(raw) bp.currentOffset += uint32(needBytes) @@ -141,17 +135,13 @@ func (bp *byteParser) getUint32() (value uint32, raw []byte, err error) { // TODO(dustin): Add test needBytes := 4 - offset := 0 - raw = make([]byte, needBytes) - for offset < needBytes { - n, err := bp.buffer.Read(raw[offset:]) - log.PanicIf(err) - - offset += n + if bp.currentOffset+needBytes >= len(bp.addressableData) { + return 0, nil, io.EOF } - value = bp.byteOrder.Uint32(raw) + raw = addressableData[bp.currentOffset : bp.currentOffset+needBytes] + value = bp.byteOrder.Uint16(raw) bp.currentOffset += uint32(needBytes) @@ -168,7 +158,6 @@ func (bp *byteParser) CurrentOffset() uint32 { // containers in the EXIF blob. type IfdEnumerate struct { exifData []byte - buffer *bytes.Buffer byteOrder binary.ByteOrder tagIndex *TagIndex ifdMapping *exifcommon.IfdMapping @@ -179,7 +168,6 @@ type IfdEnumerate struct { func NewIfdEnumerate(ifdMapping *exifcommon.IfdMapping, tagIndex *TagIndex, exifData []byte, byteOrder binary.ByteOrder) *IfdEnumerate { return &IfdEnumerate{ exifData: exifData, - buffer: bytes.NewBuffer(exifData), byteOrder: byteOrder, ifdMapping: ifdMapping, tagIndex: tagIndex,