diff --git a/v3/command/exif-read-tool/main.go b/v3/command/exif-read-tool/main.go index 521e64b..beac343 100644 --- a/v3/command/exif-read-tool/main.go +++ b/v3/command/exif-read-tool/main.go @@ -21,6 +21,8 @@ import ( "encoding/json" "io/ioutil" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" "github.com/jessevdk/go-flags" @@ -111,7 +113,7 @@ func main() { entries, _, err := exif.GetFlatExifDataUniversalSearch(rawExif, nil, arguments.DoUniversalTagSearch) if err != nil { if arguments.SkipBlocks > 0 { - mainLogger.Warningf(context.Todo(), "Encountered an error. This might be related to the request to skip EXIF blocks.") + mainLogger.Warningf(context.TODO(), "Encountered an error. This might be related to the request to skip EXIF blocks.") } log.Panic(err) diff --git a/v3/common/ifd.go b/v3/common/ifd.go index ce3961a..c07de4d 100644 --- a/v3/common/ifd.go +++ b/v3/common/ifd.go @@ -5,11 +5,7 @@ import ( "fmt" "strings" - "github.com/dsoprea/go-logging" -) - -var ( - ifdLogger = log.NewLogger("exifcommon.ifd") + log "github.com/dsoprea/go-logging" ) var ( @@ -84,7 +80,7 @@ func (im *IfdMapping) Get(parentPlacement []uint16) (childIfd *MappedIfd, err er ptr := im.rootNode for _, tagId := range parentPlacement { - if !descendantPtr, found := ptr.Children[tagId]; found { + if descendantPtr, found := ptr.Children[tagId]; !found { log.Panicf("ifd child with tag-ID (%04x) not registered: [%s]", tagId, ptr.PathPhrase()) } else { ptr = descendantPtr diff --git a/v3/common/parser.go b/v3/common/parser.go index 55bcb3c..daf3e0b 100644 --- a/v3/common/parser.go +++ b/v3/common/parser.go @@ -2,6 +2,7 @@ package exifcommon import ( "bytes" + "context" "errors" "math" @@ -62,14 +63,14 @@ func (p *Parser) ParseAscii(data []byte, unitCount uint32) (value string, err er if len(data) == 0 || data[count-1] != 0 { s := string(data[:count]) - parserLogger.Warningf(context.Todo(), "ASCII not terminated with NUL as expected: [%v]", s) + parserLogger.Warningf(context.TODO(), "ASCII not terminated with NUL as expected: [%v]", s) for i, c := range s { if c > 127 { // Binary t := s[:i] - parserLogger.Warningf(context.Todo(), "ASCII also had binary characters. Truncating: [%v]->[%s]", s, t) + parserLogger.Warningf(context.TODO(), "ASCII also had binary characters. Truncating: [%v]->[%s]", s, t) return t, nil } diff --git a/v3/common/testing_common.go b/v3/common/testing_common.go index f04fa22..33e8da3 100644 --- a/v3/common/testing_common.go +++ b/v3/common/testing_common.go @@ -5,16 +5,13 @@ import ( "path" "encoding/binary" - "io/ioutil" - "github.com/dsoprea/go-logging" + log "github.com/dsoprea/go-logging" ) var ( moduleRootPath = "" - testExifData []byte = nil - // EncodeDefaultByteOrder is the default byte-order for encoding operations. EncodeDefaultByteOrder = binary.BigEndian @@ -40,7 +37,7 @@ func GetModuleRootPath() string { tryStampFilepath := path.Join(currentPath, ".MODULE_ROOT") _, err := os.Stat(tryStampFilepath) - if err != nil && os.IsNotExist(err) != true { + if err != nil && !os.IsNotExist(err) { log.Panic(err) } else if err == nil { break @@ -66,23 +63,3 @@ func GetTestAssetsPath() string { return assetsPath } - -func getTestImageFilepath() string { - assetsPath := GetTestAssetsPath() - testImageFilepath := path.Join(assetsPath, "NDM_8901.jpg") - return testImageFilepath -} - -func getTestExifData() []byte { - if testExifData == nil { - assetsPath := GetTestAssetsPath() - filepath := path.Join(assetsPath, "NDM_8901.jpg.exif") - - var err error - - testExifData, err = ioutil.ReadFile(filepath) - log.PanicIf(err) - } - - return testExifData -} diff --git a/v3/common/type.go b/v3/common/type.go index c52c944..6632aca 100644 --- a/v3/common/type.go +++ b/v3/common/type.go @@ -13,10 +13,6 @@ import ( log "github.com/dsoprea/go-logging" ) -var ( - typeLogger = log.NewLogger("exif.type") -) - var ( // ErrNotEnoughData is used when there isn't enough data to accommodate what // we're trying to parse (sizeof(type) * unit_count). diff --git a/v3/common/value_encoder.go b/v3/common/value_encoder.go index 2cd26cc..b4760ec 100644 --- a/v3/common/value_encoder.go +++ b/v3/common/value_encoder.go @@ -8,11 +8,7 @@ import ( "encoding/binary" - "github.com/dsoprea/go-logging" -) - -var ( - typeEncodeLogger = log.NewLogger("exif.type_encode") + log "github.com/dsoprea/go-logging" ) // EncodedData encapsulates the compound output of an encoding operation. diff --git a/v3/exif.go b/v3/exif.go index f6665dd..7856f9f 100644 --- a/v3/exif.go +++ b/v3/exif.go @@ -12,6 +12,7 @@ import ( "encoding/binary" "io/ioutil" + exifcommon "github.com/dsoprea/go-exif/v3/common" log "github.com/dsoprea/go-logging" ) @@ -244,7 +245,7 @@ func ParseExifHeader(data []byte) (eh ExifHeader, err error) { // -> http://www.cipa.jp/std/documents/e/DC-008-Translation-2016-E.pdf if len(data) < ExifSignatureLength { - exifLogger.Warningf(context.Todo(), "Not enough data for EXIF header: (%d)", len(data)) + exifLogger.Warningf(context.TODO(), "Not enough data for EXIF header: (%d)", len(data)) return eh, ErrNoExif } diff --git a/v3/go.mod b/v3/go.mod index e5a18f0..43d94b6 100644 --- a/v3/go.mod +++ b/v3/go.mod @@ -9,10 +9,7 @@ go 1.12 require ( github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349 - github.com/go-errors/errors v1.4.2 // indirect github.com/golang/geo v0.0.0-20210211234256-740aa86cb551 github.com/jessevdk/go-flags v1.5.0 - golang.org/x/net v0.0.0-20221002022538-bcab6841153b // indirect - golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec // indirect gopkg.in/yaml.v2 v2.4.0 ) diff --git a/v3/go.sum b/v3/go.sum index f69540e..4791437 100644 --- a/v3/go.sum +++ b/v3/go.sum @@ -1,11 +1,17 @@ github.com/dsoprea/go-exif/v2 v2.0.0-20200321225314-640175a69fe4/go.mod h1:Lm2lMM2zx8p4a34ZemkaUV95AnMl4ZvLbCUbwOvLC2E= github.com/dsoprea/go-exif/v3 v3.0.0-20200717053412-08f1b6708903/go.mod h1:0nsO1ce0mh5czxGeLo4+OCZ/C6Eo6ZlMWsz7rH/Gxv8= +github.com/dsoprea/go-exif/v3 v3.0.0-20210625224831-a6301f85c82b/go.mod h1:cg5SNYKHMmzxsr9X6ZeLh/nfBRHHp5PngtEPcujONtk= +github.com/dsoprea/go-exif/v3 v3.0.0-20221003160559-cf5cd88aa559/go.mod h1:rW6DMEv25U9zCtE5ukC7ttBRllXj7g7TAHl7tQrT5No= +github.com/dsoprea/go-exif/v3 v3.0.0-20221003171958-de6cb6e380a8/go.mod h1:akyZEJZ/k5bmbC9gA612ZLQkcED8enS9vuTiuAkENr0= github.com/dsoprea/go-logging v0.0.0-20190624164917-c4f10aab7696/go.mod h1:Nm/x2ZUNRW6Fe5C3LxdY1PyZY5wmDv/s5dkPJ/VB3iA= github.com/dsoprea/go-logging v0.0.0-20200517223158-a10564966e9d/go.mod h1:7I+3Pe2o/YSU88W0hWlm9S22W7XI1JFNJ86U0zPKMf8= github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd h1:l+vLbuxptsC6VQyQsfD7NnEC8BZuFpz45PgY+pH8YTg= github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd/go.mod h1:7I+3Pe2o/YSU88W0hWlm9S22W7XI1JFNJ86U0zPKMf8= github.com/dsoprea/go-utility v0.0.0-20200711062821-fab8125e9bdf h1:/w4QxepU4AHh3AuO6/g8y/YIIHH5+aKP3Bj8sg5cqhU= github.com/dsoprea/go-utility v0.0.0-20200711062821-fab8125e9bdf/go.mod h1:95+K3z2L0mqsVYd6yveIv1lmtT3tcQQ3dVakPySffW8= +github.com/dsoprea/go-utility/v2 v2.0.0-20200717064901-2fccff4aa15e/go.mod h1:uAzdkPTub5Y9yQwXe8W4m2XuP0tK4a9Q/dantD0+uaU= +github.com/dsoprea/go-utility/v2 v2.0.0-20221003142440-7a1927d49d9d/go.mod h1:LVjRU0RNUuMDqkPTxcALio0LWPFPXxxFCvVGVAwEpFc= +github.com/dsoprea/go-utility/v2 v2.0.0-20221003160719-7bc88537c05e/go.mod h1:VZ7cB0pTjm1ADBWhJUOHESu4ZYy9JN+ZPqjfiW09EPU= github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349 h1:DilThiXje0z+3UQ5YjYiSRRzVdtamFpvBQXKwMglWqw= github.com/dsoprea/go-utility/v2 v2.0.0-20221003172846-a3e1774ef349/go.mod h1:4GC5sXji84i/p+irqghpPFZBF8tRN/Q7+700G0/DLe8= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= diff --git a/v3/gps.go b/v3/gps.go index 8db0d9b..418be99 100644 --- a/v3/gps.go +++ b/v3/gps.go @@ -5,6 +5,8 @@ import ( "fmt" "time" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" "github.com/golang/geo/s2" ) diff --git a/v3/ifd_builder.go b/v3/ifd_builder.go index 675d8e2..6753a52 100644 --- a/v3/ifd_builder.go +++ b/v3/ifd_builder.go @@ -12,11 +12,10 @@ import ( "encoding/binary" - log "github.com/dsoprea/go-logging" -) + exifcommon "github.com/dsoprea/go-exif/v3/common" + exifundefined "github.com/dsoprea/go-exif/v3/undefined" -var ( - ifdBuilderLogger = log.NewLogger("exif.ifd_builder") + log "github.com/dsoprea/go-logging" ) var ( @@ -495,7 +494,7 @@ func (ib *IfdBuilder) SetThumbnail(data []byte) (err error) { // TODO(dustin): !! Add a test for this function. - if data == nil || len(data) == 0 { + if len(data) == 0 { log.Panic("thumbnail is empty") } @@ -673,7 +672,7 @@ func (ib *IfdBuilder) dumpToStrings(thisIb *IfdBuilder, prefix string, tagId uin childPrefix := "" if prefix == "" { - childPrefix = fmt.Sprintf("%s", thisIb.IfdIdentity().UnindexedString()) + childPrefix = thisIb.IfdIdentity().UnindexedString() } else { childPrefix = fmt.Sprintf("%s->%s", prefix, thisIb.IfdIdentity().UnindexedString()) } @@ -1008,7 +1007,7 @@ func (ib *IfdBuilder) AddTagsFromExisting(ifd *Ifd, includeTagIds []uint16, excl continue } - if excludeTagIds != nil && len(excludeTagIds) > 0 { + if len(excludeTagIds) > 0 { found := false for _, excludedTagId := range excludeTagIds { if excludedTagId == ite.TagId() { @@ -1021,7 +1020,7 @@ func (ib *IfdBuilder) AddTagsFromExisting(ifd *Ifd, includeTagIds []uint16, excl } } - if includeTagIds != nil && len(includeTagIds) > 0 { + if len(includeTagIds) > 0 { // Whether or not there was a list of excludes, if there is a list // of includes than the current tag has to be in it. diff --git a/v3/ifd_builder_encode.go b/v3/ifd_builder_encode.go index f4d0fb4..845aa92 100644 --- a/v3/ifd_builder_encode.go +++ b/v3/ifd_builder_encode.go @@ -7,9 +7,9 @@ import ( "encoding/binary" - "github.com/dsoprea/go-logging" + log "github.com/dsoprea/go-logging" - "github.com/dsoprea/go-exif/v3/common" + exifcommon "github.com/dsoprea/go-exif/v3/common" ) const ( @@ -235,7 +235,7 @@ func (ibe *IfdByteEncoder) encodeTagToBytes(ib *IfdBuilder, bt *BuilderTag, bw * len_ := len(valueBytes) unitCount := uint32(len_) / typeSize - if !_, found := tagsWithoutAlignment[bt.tagId]; found { + if _, found := tagsWithoutAlignment[bt.tagId]; !found { remainder := uint32(len_) % typeSize if remainder > 0 { diff --git a/v3/ifd_builder_encode_test.go b/v3/ifd_builder_encode_test.go index 46dd66b..8030b90 100644 --- a/v3/ifd_builder_encode_test.go +++ b/v3/ifd_builder_encode_test.go @@ -6,9 +6,9 @@ import ( "strings" "testing" - "github.com/dsoprea/go-logging" + log "github.com/dsoprea/go-logging" - "github.com/dsoprea/go-exif/v3/common" + exifcommon "github.com/dsoprea/go-exif/v3/common" ) func Test_ByteWriter_writeAsBytes_uint8(t *testing.T) { @@ -293,17 +293,17 @@ func Test_IfdByteEncoder_encodeTagToBytes_bytes_allocated(t *testing.T) { if childIfdBlock != nil { t.Fatalf("no child-IFDs were expected to be allocated (2)") - } else if bytes.Compare(b.Bytes(), []byte{ + } else if !bytes.Equal(b.Bytes(), []byte{ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x12, 0x34, // Tag 1 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x12, 0x39, // Tag 2 - }) != 0 { + }) { t.Fatalf("encoded tag-entry bytes not correct (2)") } else if ida.NextOffset() != addressableOffset+uint32(10) { t.Fatalf("allocation offset not expected (2)") - } else if bytes.Compare(ida.Bytes(), []byte{ + } else if !bytes.Equal(ida.Bytes(), []byte{ 0x12, 0x34, 0x56, 0x78, 0x9A, 0xbc, 0xde, 0xf0, 0x12, 0x34, - }) != 0 { + }) { t.Fatalf("allocated data not correct (2)") } } diff --git a/v3/ifd_builder_test.go b/v3/ifd_builder_test.go index 2e10ade..b86779f 100644 --- a/v3/ifd_builder_test.go +++ b/v3/ifd_builder_test.go @@ -9,9 +9,9 @@ import ( "testing" "time" - "github.com/dsoprea/go-exif/v3/common" - "github.com/dsoprea/go-exif/v3/undefined" - "github.com/dsoprea/go-logging" + exifcommon "github.com/dsoprea/go-exif/v3/common" + exifundefined "github.com/dsoprea/go-exif/v3/undefined" + log "github.com/dsoprea/go-logging" ) func TestIfdBuilder_Add(t *testing.T) { @@ -2086,9 +2086,9 @@ func TestNewStandardBuilderTag__TwoUnits(t *testing.T) { t.Fatalf("II in BuilderTag not correct") } else if bt.tagId != 0x8833 { t.Fatalf("tag-ID not correct") - } else if bytes.Compare(bt.value.Bytes(), []byte{ + } else if !bytes.Equal(bt.value.Bytes(), []byte{ 0x0, 0x0, 0x12, 0x34, - 0x0, 0x0, 0x56, 0x78}) != 0 { + 0x0, 0x0, 0x56, 0x78}) { t.Fatalf("value not correct") } } diff --git a/v3/ifd_enumerate.go b/v3/ifd_enumerate.go index 120f5da..644f3e0 100644 --- a/v3/ifd_enumerate.go +++ b/v3/ifd_enumerate.go @@ -2,6 +2,7 @@ package exif import ( "bytes" + "context" "errors" "fmt" "io" @@ -11,10 +12,10 @@ import ( "encoding/binary" - "github.com/dsoprea/go-logging" + log "github.com/dsoprea/go-logging" - "github.com/dsoprea/go-exif/v3/common" - "github.com/dsoprea/go-exif/v3/undefined" + exifcommon "github.com/dsoprea/go-exif/v3/common" + exifundefined "github.com/dsoprea/go-exif/v3/undefined" ) var ( @@ -77,7 +78,6 @@ var ( type byteParser struct { byteOrder binary.ByteOrder rs io.ReadSeeker - ifdOffset uint32 currentOffset uint32 } @@ -235,7 +235,7 @@ func (ie *IfdEnumerate) parseTag(ii *exifcommon.IfdIdentity, tagPosition int, bp // Technically, we have the type on-file in the tags-index, but // if the type stored alongside the data disagrees with it, // which it apparently does, all bets are off. - ifdEnumerateLogger.Warningf(nil, + ifdEnumerateLogger.Warningf(context.TODO(), "Tag (0x%04x) in IFD [%s] at position (%d) has invalid type (0x%04x) and will be skipped.", tagId, ii, tagPosition, int(tagType)) @@ -253,7 +253,7 @@ func (ie *IfdEnumerate) parseTag(ii *exifcommon.IfdIdentity, tagPosition int, bp it, err := ie.tagIndex.Get(ii, tagId) if err != nil { if log.Is(err, ErrTagNotFound) { - ifdEnumerateLogger.Warningf(context.Todo(), "Tag (0x%04x) is not known and will be skipped.", tagId) + ifdEnumerateLogger.Warningf(context.TODO(), "Tag (0x%04x) is not known and will be skipped.", tagId) ite = &IfdTagEntry{ tagId: tagId, @@ -274,7 +274,7 @@ func (ie *IfdEnumerate) parseTag(ii *exifcommon.IfdIdentity, tagPosition int, bp // special-case tags (e.g. thumbnails, GPS, etc..) when those tags // suddenly have data that we no longer manipulate correctly/ // accurately. - ifdEnumerateLogger.Warningf(nil, + ifdEnumerateLogger.Warningf(context.TODO(), "Tag (0x%04x) in IFD [%s] at position (%d) has unsupported type (0x%02x) and will be skipped.", tagId, ii, tagPosition, int(tagType)) @@ -376,7 +376,7 @@ func (ie *IfdEnumerate) tagPostParse(ite *IfdTagEntry, med *MiscellaneousExifDat // they want to specifically manage these types of tags, they // can use more advanced functionality to specifically -handle // unknown tags. - utilityLogger.Warningf(nil, + utilityLogger.Warningf(context.TODO(), "Tag with ID (0x%04x) in IFD [%s] is not recognized and "+ "will be ignored.", tagId, ii.String()) @@ -385,7 +385,7 @@ func (ie *IfdEnumerate) tagPostParse(ite *IfdTagEntry, med *MiscellaneousExifDat ite.setTagName(it.Name) - utilityLogger.Warningf(nil, + utilityLogger.Warningf(context.TODO(), "Tag with ID (0x%04x) is not valid for IFD [%s], but it *is* "+ "valid as tag [%s] under IFD [%s] and has the same type "+ "[%s], so we will use that. This EXIF blob was probably "+ @@ -413,7 +413,7 @@ func (ie *IfdEnumerate) tagPostParse(ite *IfdTagEntry, med *MiscellaneousExifDat // type and caused parsing/conversion woes. So, this is a quick fix // for those scenarios. if !ie.tagIndex.UniversalSearch() && !it.DoesSupportType(tagType) { - ifdEnumerateLogger.Warningf(nil, + ifdEnumerateLogger.Warningf(context.TODO(), "Skipping tag [%s] (0x%04x) [%s] with an unexpected type: %v ∉ %v", ii.UnindexedString(), tagId, it.Name, tagType, it.SupportedTypes) @@ -446,7 +446,7 @@ func (ie *IfdEnumerate) parseIfd(ii *exifcommon.IfdIdentity, bp *byteParser, vis for i := 0; i < int(tagCount); i++ { ite, err := ie.parseTag(ii, i, bp) if err != nil { - if log.Is(err, ErrTagNotFound) == true || log.Is(err, ErrTagTypeNotValid) { + if log.Is(err, ErrTagNotFound) || log.Is(err, ErrTagTypeNotValid) { // These tags should've been fully logged in parseTag(). The // ITE returned is nil so we can't print anything about them, now. continue @@ -535,7 +535,7 @@ func (ie *IfdEnumerate) parseIfd(ii *exifcommon.IfdIdentity, bp *byteParser, vis thumbnailData, err = ie.parseThumbnail(enumeratorThumbnailOffset, enumeratorThumbnailSize) if err != nil { ifdEnumerateLogger.Errorf( - nil, err, + context.TODO(), err, "We tried to bump our furthest-offset counter but there was an issue first seeking past the thumbnail.") } else { // In this case, the value is always an offset. @@ -560,7 +560,7 @@ func (ie *IfdEnumerate) parseIfd(ii *exifcommon.IfdIdentity, bp *byteParser, vis _, alreadyVisited := ie.visitedIfdOffsets[nextIfdOffset] if alreadyVisited { - ifdEnumerateLogger.Warningf(context.Todo(), "IFD at offset (0x%08x) has been linked-to more than once. There might be a cycle in the IFD chain. Not reparsing.", nextIfdOffset) + ifdEnumerateLogger.Warningf(context.TODO(), "IFD at offset (0x%08x) has been linked-to more than once. There might be a cycle in the IFD chain. Not reparsing.", nextIfdOffset) nextIfdOffset = 0 } @@ -620,7 +620,7 @@ func (ie *IfdEnumerate) scan(iiGeneral *exifcommon.IfdIdentity, ifdOffset uint32 bp, err := ie.getByteParser(ifdOffset) if err != nil { if err == ErrOffsetInvalid { - ifdEnumerateLogger.Errorf(nil, nil, "IFD [%s] at offset (0x%04x) is unreachable. Terminating scan.", iiSibling.String(), ifdOffset) + ifdEnumerateLogger.Errorf(context.TODO(), nil, "IFD [%s] at offset (0x%04x) is unreachable. Terminating scan.", iiSibling.String(), ifdOffset) break } @@ -938,7 +938,7 @@ func (ifd *Ifd) printTagTree(populateValues bool, index, level int, nextLink boo } else { // This will just add noise to the output (byte-tags are fully // dumped). - if ite.IsThumbnailOffset() == true || ite.IsThumbnailSize() { + if ite.IsThumbnailOffset() || ite.IsThumbnailSize() { continue } @@ -956,10 +956,10 @@ func (ifd *Ifd) printTagTree(populateValues bool, index, level int, nextLink boo valuePhrase, err = ite.Format() if err != nil { if log.Is(err, exifcommon.ErrUnhandledUndefinedTypedTag) { - ifdEnumerateLogger.Warningf(context.Todo(), "Skipping non-standard undefined tag: [%s] (%04x)", ifd.ifdIdentity.UnindexedString(), ite.TagId()) + ifdEnumerateLogger.Warningf(context.TODO(), "Skipping non-standard undefined tag: [%s] (%04x)", ifd.ifdIdentity.UnindexedString(), ite.TagId()) continue } else if err == exifundefined.ErrUnparseableValue { - ifdEnumerateLogger.Warningf(context.Todo(), "Skipping unparseable undefined tag: [%s] (%04x) [%s]", ifd.ifdIdentity.UnindexedString(), ite.TagId(), it.Name) + ifdEnumerateLogger.Warningf(context.TODO(), "Skipping unparseable undefined tag: [%s] (%04x) [%s]", ifd.ifdIdentity.UnindexedString(), ite.TagId(), it.Name) continue } @@ -1112,31 +1112,31 @@ func (ifd *Ifd) GpsInfo() (gi *GpsInfo, err error) { log.Panicf("GPS can only be read on GPS IFD: [%s]", ifd.ifdIdentity.UnindexedString()) } - if !tags, found := ifd.entriesByTagId[TagGpsVersionId]; found { + if tags, found := ifd.entriesByTagId[TagGpsVersionId]; !found { // We've seen this. We'll just have to default to assuming we're in a // 2.2.0.0 format. - ifdEnumerateLogger.Warningf(context.Todo(), "No GPS version tag (0x%04x) found.", TagGpsVersionId) + ifdEnumerateLogger.Warningf(context.TODO(), "No GPS version tag (0x%04x) found.", TagGpsVersionId) } else { versionBytes, err := tags[0].GetRawBytes() log.PanicIf(err) hit := false for _, acceptedGpsVersion := range ValidGpsVersions { - if bytes.Compare(versionBytes, acceptedGpsVersion[:]) == 0 { + if bytes.Equal(versionBytes, acceptedGpsVersion[:]) { hit = true break } } - if hit != true { - ifdEnumerateLogger.Warningf(context.Todo(), "GPS version not supported: %v", versionBytes) + if !hit { + ifdEnumerateLogger.Warningf(context.TODO(), "GPS version not supported: %v", versionBytes) log.Panic(ErrNoGpsTags) } } tags, found := ifd.entriesByTagId[TagLatitudeId] if !found { - ifdEnumerateLogger.Warningf(context.Todo(), "latitude not found") + ifdEnumerateLogger.Warningf(context.TODO(), "latitude not found") log.Panic(ErrNoGpsTags) } @@ -1146,7 +1146,7 @@ func (ifd *Ifd) GpsInfo() (gi *GpsInfo, err error) { // Look for whether North or South. tags, found = ifd.entriesByTagId[TagLatitudeRefId] if !found { - ifdEnumerateLogger.Warningf(context.Todo(), "latitude-ref not found") + ifdEnumerateLogger.Warningf(context.TODO(), "latitude-ref not found") log.Panic(ErrNoGpsTags) } @@ -1155,7 +1155,7 @@ func (ifd *Ifd) GpsInfo() (gi *GpsInfo, err error) { tags, found = ifd.entriesByTagId[TagLongitudeId] if !found { - ifdEnumerateLogger.Warningf(context.Todo(), "longitude not found") + ifdEnumerateLogger.Warningf(context.TODO(), "longitude not found") log.Panic(ErrNoGpsTags) } @@ -1165,7 +1165,7 @@ func (ifd *Ifd) GpsInfo() (gi *GpsInfo, err error) { // Look for whether West or East. tags, found = ifd.entriesByTagId[TagLongitudeRefId] if !found { - ifdEnumerateLogger.Warningf(context.Todo(), "longitude-ref not found") + ifdEnumerateLogger.Warningf(context.TODO(), "longitude-ref not found") log.Panic(ErrNoGpsTags) } @@ -1189,7 +1189,7 @@ func (ifd *Ifd) GpsInfo() (gi *GpsInfo, err error) { altitudeTags, foundAltitude := ifd.entriesByTagId[TagAltitudeId] altitudeRefTags, foundAltitudeRef := ifd.entriesByTagId[TagAltitudeRefId] - if foundAltitude == true && foundAltitudeRef { + if foundAltitude && foundAltitudeRef { altitudePhrase, err := altitudeTags[0].Format() log.PanicIf(err) @@ -1223,7 +1223,7 @@ func (ifd *Ifd) GpsInfo() (gi *GpsInfo, err error) { timestampTags, foundTimestamp := ifd.entriesByTagId[TagTimestampId] datestampTags, foundDatestamp := ifd.entriesByTagId[TagDatestampId] - if foundTimestamp == true && foundDatestamp { + if foundTimestamp && foundDatestamp { datestampValue, err := datestampTags[0].Value() log.PanicIf(err) diff --git a/v3/ifd_tag_entry.go b/v3/ifd_tag_entry.go index ed6ba22..39f58fc 100644 --- a/v3/ifd_tag_entry.go +++ b/v3/ifd_tag_entry.go @@ -6,14 +6,10 @@ import ( "encoding/binary" - "github.com/dsoprea/go-logging" + log "github.com/dsoprea/go-logging" - "github.com/dsoprea/go-exif/v3/common" - "github.com/dsoprea/go-exif/v3/undefined" -) - -var ( - iteLogger = log.NewLogger("exif.ifd_tag_entry") + exifcommon "github.com/dsoprea/go-exif/v3/common" + exifundefined "github.com/dsoprea/go-exif/v3/undefined" ) // IfdTagEntry refers to a tag in the loaded EXIF block. diff --git a/v3/tags.go b/v3/tags.go index 6f746ea..7afac1f 100644 --- a/v3/tags.go +++ b/v3/tags.go @@ -5,6 +5,8 @@ import ( "fmt" "sync" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" "gopkg.in/yaml.v2" ) @@ -143,9 +145,9 @@ func (it *IndexedTag) GetEncodingType(value interface{}) exifcommon.TagTypePrimi // We specifically check for the cases that we know to expect. - if supportsLong == true && supportsShort { + if supportsLong && supportsShort { return exifcommon.TypeLong - } else if supportsRational == true && supportsSignedRational { + } else if supportsRational && supportsSignedRational { if value == nil { log.Panicf("GetEncodingType: require value to be given") } @@ -299,7 +301,7 @@ func (ti *TagIndex) Get(ii *exifcommon.IfdIdentity, id uint16) (it *IndexedTag, skipIfdPath := ii.UnindexedString() - for currentIfdPath, _ := range ti.tagsByIfd { + for currentIfdPath := range ti.tagsByIfd { if currentIfdPath == skipIfdPath { // Skip the primary IFD, which has already been checked. continue @@ -307,7 +309,7 @@ func (ti *TagIndex) Get(ii *exifcommon.IfdIdentity, id uint16) (it *IndexedTag, it, err = ti.getOne(currentIfdPath, id) if err == nil { - tagsLogger.Warningf(nil, + tagsLogger.Warningf(context.TODO(), "Found tag (0x%02x) in the wrong IFD: [%s] != [%s]", id, currentIfdPath, ifdPath) @@ -442,7 +444,7 @@ func LoadStandardTags(ti *TagIndex) (err error) { // TODO(dustin): Discard unsupported types. This helps us with non-standard types that have actually been found in real data, that we ignore for right now. e.g. SSHORT, FLOAT, DOUBLE tagTypeId, found := exifcommon.GetTypeByName(tagTypeName) if !found { - tagsLogger.Warningf(context.Todo(), "Type [%s] for tag [%s] being loaded is not valid and is being ignored.", tagTypeName, tagName) + tagsLogger.Warningf(context.TODO(), "Type [%s] for tag [%s] being loaded is not valid and is being ignored.", tagTypeName, tagName) continue } @@ -450,7 +452,7 @@ func LoadStandardTags(ti *TagIndex) (err error) { } if len(tagTypes) == 0 { - tagsLogger.Warningf(context.Todo(), "Tag [%s] (0x%04x) [%s] being loaded does not have any supported types and will not be registered.", ifdPath, tagId, tagName) + tagsLogger.Warningf(context.TODO(), "Tag [%s] (0x%04x) [%s] being loaded does not have any supported types and will not be registered.", ifdPath, tagId, tagName) continue } diff --git a/v3/testing_common.go b/v3/testing_common.go index 0612764..40e2c47 100644 --- a/v3/testing_common.go +++ b/v3/testing_common.go @@ -7,9 +7,9 @@ import ( "io/ioutil" - "github.com/dsoprea/go-logging" + log "github.com/dsoprea/go-logging" - "github.com/dsoprea/go-exif/v3/common" + exifcommon "github.com/dsoprea/go-exif/v3/common" ) var ( @@ -149,7 +149,7 @@ func validateExifSimpleTestIb(exifData []byte, t *testing.T) { value, err := ite.Value() log.PanicIf(err) - if reflect.DeepEqual(value, expected[i].value) != true { + if !reflect.DeepEqual(value, expected[i].value) { t.Fatalf("Value for entry (%d) not correct: [%v] != [%v]", i, value, expected[i].value) } } diff --git a/v3/undefined/accessor.go b/v3/undefined/accessor.go index 1552b34..4bf3f39 100644 --- a/v3/undefined/accessor.go +++ b/v3/undefined/accessor.go @@ -3,6 +3,8 @@ package exifundefined import ( "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) diff --git a/v3/undefined/exif_8828_oecf.go b/v3/undefined/exif_8828_oecf.go index c3e4a0c..0c71896 100644 --- a/v3/undefined/exif_8828_oecf.go +++ b/v3/undefined/exif_8828_oecf.go @@ -6,6 +6,8 @@ import ( "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) diff --git a/v3/undefined/exif_8828_oecf_test.go b/v3/undefined/exif_8828_oecf_test.go index 8c9af3e..573ebda 100644 --- a/v3/undefined/exif_8828_oecf_test.go +++ b/v3/undefined/exif_8828_oecf_test.go @@ -5,10 +5,10 @@ import ( "reflect" "testing" - "github.com/dsoprea/go-logging" - "github.com/dsoprea/go-utility/v2/filesystem" + log "github.com/dsoprea/go-logging" + rifs "github.com/dsoprea/go-utility/v2/filesystem" - "github.com/dsoprea/go-exif/v3/common" + exifcommon "github.com/dsoprea/go-exif/v3/common" ) func TestTag8828Oecf_String(t *testing.T) { @@ -29,7 +29,7 @@ func TestCodec8828Oecf_Encode(t *testing.T) { Columns: 2, Rows: 22, ColumnNames: []string{"aa", "bb"}, - Values: []exifcommon.SignedRational{{11, 22}}, + Values: []exifcommon.SignedRational{{Numerator: 11, Denominator: 22}}, } codec := Codec8828Oecf{} @@ -81,7 +81,7 @@ func TestCodec8828Oecf_Decode(t *testing.T) { Columns: 2, Rows: 22, ColumnNames: []string{"aa", "bb"}, - Values: []exifcommon.SignedRational{{11, 22}}, + Values: []exifcommon.SignedRational{{Numerator: 11, Denominator: 22}}, } if reflect.DeepEqual(value, expectedValue) != true { diff --git a/v3/undefined/exif_9000_exif_version.go b/v3/undefined/exif_9000_exif_version.go index 5fb724d..bfc4b8f 100644 --- a/v3/undefined/exif_9000_exif_version.go +++ b/v3/undefined/exif_9000_exif_version.go @@ -3,6 +3,8 @@ package exifundefined import ( "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) diff --git a/v3/undefined/exif_9101_components_configuration.go b/v3/undefined/exif_9101_components_configuration.go index 38a7ad2..e340ed4 100644 --- a/v3/undefined/exif_9101_components_configuration.go +++ b/v3/undefined/exif_9101_components_configuration.go @@ -6,6 +6,8 @@ import ( "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) diff --git a/v3/undefined/exif_927C_maker_note.go b/v3/undefined/exif_927C_maker_note.go index 52015eb..943d85a 100644 --- a/v3/undefined/exif_927C_maker_note.go +++ b/v3/undefined/exif_927C_maker_note.go @@ -7,6 +7,8 @@ import ( "crypto/sha1" "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) diff --git a/v3/undefined/exif_9286_user_comment.go b/v3/undefined/exif_9286_user_comment.go index dc3badb..f34ed6d 100644 --- a/v3/undefined/exif_9286_user_comment.go +++ b/v3/undefined/exif_9286_user_comment.go @@ -2,10 +2,13 @@ package exifundefined import ( "bytes" + "context" "fmt" "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) @@ -114,7 +117,7 @@ func (Codec9286UserComment) Decode(valueContext *exifcommon.ValueContext) (value encoding := valueBytes[:8] for encodingIndex, encodingBytes := range TagUndefinedType_9286_UserComment_Encodings { - if bytes.Compare(encoding, encodingBytes) == 0 { + if bytes.Equal(encoding, encodingBytes) { uc := Tag9286UserComment{ EncodingType: encodingIndex, EncodingBytes: valueBytes[8:], @@ -124,7 +127,7 @@ func (Codec9286UserComment) Decode(valueContext *exifcommon.ValueContext) (value } } - exif9286Logger.Warningf(context.Todo(), "User-comment encoding not valid. Returning 'unknown' type (the default).") + exif9286Logger.Warningf(context.TODO(), "User-comment encoding not valid. Returning 'unknown' type (the default).") return unknownUc, nil } diff --git a/v3/undefined/exif_A000_flashpix_version.go b/v3/undefined/exif_A000_flashpix_version.go index e642f27..44cbe00 100644 --- a/v3/undefined/exif_A000_flashpix_version.go +++ b/v3/undefined/exif_A000_flashpix_version.go @@ -3,6 +3,8 @@ package exifundefined import ( "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) diff --git a/v3/undefined/exif_A20C_spatial_frequency_response.go b/v3/undefined/exif_A20C_spatial_frequency_response.go index 06a7fdb..0bc813f 100644 --- a/v3/undefined/exif_A20C_spatial_frequency_response.go +++ b/v3/undefined/exif_A20C_spatial_frequency_response.go @@ -6,6 +6,8 @@ import ( "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) diff --git a/v3/undefined/exif_A20C_spatial_frequency_response_test.go b/v3/undefined/exif_A20C_spatial_frequency_response_test.go index 1644752..a8d0fda 100644 --- a/v3/undefined/exif_A20C_spatial_frequency_response_test.go +++ b/v3/undefined/exif_A20C_spatial_frequency_response_test.go @@ -5,10 +5,9 @@ import ( "reflect" "testing" - "github.com/dsoprea/go-logging" - "github.com/dsoprea/go-utility/v2/filesystem" - - "github.com/dsoprea/go-exif/v3/common" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" + rifs "github.com/dsoprea/go-utility/v2/filesystem" ) func TestTagA20CSpatialFrequencyResponse_String(t *testing.T) { @@ -17,8 +16,8 @@ func TestTagA20CSpatialFrequencyResponse_String(t *testing.T) { Rows: 9, ColumnNames: []string{"column1", "column2"}, Values: []exifcommon.Rational{ - {1, 2}, - {3, 4}, + {Numerator: 1, Denominator: 2}, + {Numerator: 3, Denominator: 4}, }, } @@ -34,8 +33,8 @@ func TestCodecA20CSpatialFrequencyResponse_Encode(t *testing.T) { Rows: 9, ColumnNames: []string{"column1", "column2"}, Values: []exifcommon.Rational{ - {1, 2}, - {3, 4}, + {Numerator: 1, Denominator: 2}, + {Numerator: 3, Denominator: 4}, }, } @@ -68,8 +67,8 @@ func TestCodecA20CSpatialFrequencyResponse_Decode(t *testing.T) { Rows: 9, ColumnNames: []string{"column1", "column2"}, Values: []exifcommon.Rational{ - {1, 2}, - {3, 4}, + {Numerator: 1, Denominator: 2}, + {Numerator: 3, Denominator: 4}, }, } diff --git a/v3/undefined/exif_A300_file_source.go b/v3/undefined/exif_A300_file_source.go index d3ee00d..0c67a1b 100644 --- a/v3/undefined/exif_A300_file_source.go +++ b/v3/undefined/exif_A300_file_source.go @@ -5,6 +5,8 @@ import ( "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) diff --git a/v3/undefined/exif_A301_scene_type.go b/v3/undefined/exif_A301_scene_type.go index b0109ff..f742279 100644 --- a/v3/undefined/exif_A301_scene_type.go +++ b/v3/undefined/exif_A301_scene_type.go @@ -5,6 +5,8 @@ import ( "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) diff --git a/v3/undefined/exif_A302_cfa_pattern.go b/v3/undefined/exif_A302_cfa_pattern.go index 73b5f9e..8a264ed 100644 --- a/v3/undefined/exif_A302_cfa_pattern.go +++ b/v3/undefined/exif_A302_cfa_pattern.go @@ -6,6 +6,8 @@ import ( "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) diff --git a/v3/undefined/exif_iop_0002_interop_version.go b/v3/undefined/exif_iop_0002_interop_version.go index 99c7d8a..6d48994 100644 --- a/v3/undefined/exif_iop_0002_interop_version.go +++ b/v3/undefined/exif_iop_0002_interop_version.go @@ -3,6 +3,8 @@ package exifundefined import ( "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) diff --git a/v3/undefined/gps_001B_gps_processing_method.go b/v3/undefined/gps_001B_gps_processing_method.go index c034aa3..15ba6df 100644 --- a/v3/undefined/gps_001B_gps_processing_method.go +++ b/v3/undefined/gps_001B_gps_processing_method.go @@ -3,6 +3,8 @@ package exifundefined import ( "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) diff --git a/v3/undefined/gps_001C_gps_area_information.go b/v3/undefined/gps_001C_gps_area_information.go index f17b084..025ac9d 100644 --- a/v3/undefined/gps_001C_gps_area_information.go +++ b/v3/undefined/gps_001C_gps_area_information.go @@ -3,6 +3,8 @@ package exifundefined import ( "encoding/binary" + exifcommon "github.com/dsoprea/go-exif/v3/common" + log "github.com/dsoprea/go-logging" ) diff --git a/v3/utility.go b/v3/utility.go index 8999b06..b94f5b1 100644 --- a/v3/utility.go +++ b/v3/utility.go @@ -1,10 +1,14 @@ package exif import ( + "context" "fmt" "io" "math" + exifcommon "github.com/dsoprea/go-exif/v3/common" + exifundefined "github.com/dsoprea/go-exif/v3/undefined" + log "github.com/dsoprea/go-logging" rifs "github.com/dsoprea/go-utility/v2/filesystem" ) @@ -173,7 +177,7 @@ func getFlatExifDataUniversalSearchWithReadSeeker(rs io.ReadSeeker, so *ScanOpti if err == exifcommon.ErrUnhandledUndefinedTypedTag { value = exifundefined.UnparseableUnknownTagValuePlaceholder } else if log.Is(err, exifcommon.ErrParseFail) { - utilityLogger.Warningf(nil, + utilityLogger.Warningf(context.TODO(), "Could not parse value for tag [%s] (%04x) [%s].", ite.IfdPath(), ite.TagId(), ite.TagName())