summaryrefslogtreecommitdiff
path: root/vendor/github.com/dsoprea/go-exif/v3/data_layer.go
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2024-08-02 11:46:41 +0000
committerLibravatar GitHub <noreply@github.com>2024-08-02 12:46:41 +0100
commit94e87610c4ce9bbb1c614a61bab29c1422fed11b (patch)
tree2e06b8ce64212140e796f6077ba841b6cc678501 /vendor/github.com/dsoprea/go-exif/v3/data_layer.go
parent[feature] Allow import of following and blocks via CSV (#3150) (diff)
downloadgotosocial-94e87610c4ce9bbb1c614a61bab29c1422fed11b.tar.xz
[chore] add back exif-terminator and use only for jpeg,png,webp (#3161)
* add back exif-terminator and use only for jpeg,png,webp * fix arguments passed to terminateExif() * pull in latest exif-terminator * fix test * update processed img --------- Co-authored-by: tobi <tobi.smethurst@protonmail.com>
Diffstat (limited to 'vendor/github.com/dsoprea/go-exif/v3/data_layer.go')
-rw-r--r--vendor/github.com/dsoprea/go-exif/v3/data_layer.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/vendor/github.com/dsoprea/go-exif/v3/data_layer.go b/vendor/github.com/dsoprea/go-exif/v3/data_layer.go
new file mode 100644
index 000000000..7883752cc
--- /dev/null
+++ b/vendor/github.com/dsoprea/go-exif/v3/data_layer.go
@@ -0,0 +1,50 @@
+package exif
+
+import (
+ "io"
+
+ "github.com/dsoprea/go-logging"
+ "github.com/dsoprea/go-utility/v2/filesystem"
+)
+
+type ExifBlobSeeker interface {
+ GetReadSeeker(initialOffset int64) (rs io.ReadSeeker, err error)
+}
+
+// ExifReadSeeker knows how to retrieve data from the EXIF blob relative to the
+// beginning of the blob (so, absolute position (0) is the first byte of the
+// EXIF data).
+type ExifReadSeeker struct {
+ rs io.ReadSeeker
+}
+
+func NewExifReadSeeker(rs io.ReadSeeker) *ExifReadSeeker {
+ return &ExifReadSeeker{
+ rs: rs,
+ }
+}
+
+func NewExifReadSeekerWithBytes(exifData []byte) *ExifReadSeeker {
+ sb := rifs.NewSeekableBufferWithBytes(exifData)
+ edbs := NewExifReadSeeker(sb)
+
+ return edbs
+}
+
+// Fork creates a new ReadSeeker instead that wraps a BouncebackReader to
+// maintain its own position in the stream.
+func (edbs *ExifReadSeeker) GetReadSeeker(initialOffset int64) (rs io.ReadSeeker, err error) {
+ defer func() {
+ if state := recover(); state != nil {
+ err = log.Wrap(state.(error))
+ }
+ }()
+
+ br, err := rifs.NewBouncebackReader(edbs.rs)
+ log.PanicIf(err)
+
+ _, err = br.Seek(initialOffset, io.SeekStart)
+ log.PanicIf(err)
+
+ return br, nil
+}