From e9fb3aed26df97fc8485c1b47c396e1a127dace5 Mon Sep 17 00:00:00 2001
From: Travis Ralston <travpc@gmail.com>
Date: Sat, 26 Aug 2023 12:45:40 -0600
Subject: [PATCH] Use built-in MultiReader

---
 thumbnailing/i/01-factories.go      |  2 +-
 thumbnailing/thumbnail.go           |  2 +-
 util/readers/buffer_reads_reader.go |  8 +++----
 util/readers/prefixed_reader.go     | 36 -----------------------------
 4 files changed, 6 insertions(+), 42 deletions(-)
 delete mode 100644 util/readers/prefixed_reader.go

diff --git a/thumbnailing/i/01-factories.go b/thumbnailing/i/01-factories.go
index 4e2fc6e0..4ad58e3f 100644
--- a/thumbnailing/i/01-factories.go
+++ b/thumbnailing/i/01-factories.go
@@ -23,7 +23,7 @@ type AudioGenerator interface {
 
 var generators = make([]Generator, 0)
 
-func GetGenerator(img io.Reader, contentType string, needsAnimation bool) (Generator, *readers.PrefixedReader) {
+func GetGenerator(img io.Reader, contentType string, needsAnimation bool) (Generator, io.Reader) {
 	br := readers.NewBufferReadsReader(img)
 	for _, g := range generators {
 		if needsAnimation && !g.supportsAnimation() {
diff --git a/thumbnailing/thumbnail.go b/thumbnailing/thumbnail.go
index 6759ce27..e1fc5df8 100644
--- a/thumbnailing/thumbnail.go
+++ b/thumbnailing/thumbnail.go
@@ -54,7 +54,7 @@ func GenerateThumbnail(imgStream io.ReadCloser, contentType string, width int, h
 	return generator.GenerateThumbnail(buffered.GetRewoundReader(), contentType, width, height, method, animated, ctx)
 }
 
-func GetGenerator(imgStream io.Reader, contentType string, animated bool) (i.Generator, *readers.PrefixedReader, error) {
+func GetGenerator(imgStream io.Reader, contentType string, animated bool) (i.Generator, io.Reader, error) {
 	generator, reconstructed := i.GetGenerator(imgStream, contentType, animated)
 	if generator == nil {
 		return nil, reconstructed, ErrUnsupported
diff --git a/util/readers/buffer_reads_reader.go b/util/readers/buffer_reads_reader.go
index 84918f39..8382029c 100644
--- a/util/readers/buffer_reads_reader.go
+++ b/util/readers/buffer_reads_reader.go
@@ -11,7 +11,7 @@ type BufferReadsReader struct {
 	r        io.Reader
 	original io.Reader
 	b        *bytes.Buffer
-	pr       *PrefixedReader
+	pr       io.Reader
 }
 
 func NewBufferReadsReader(r io.Reader) *BufferReadsReader {
@@ -32,15 +32,15 @@ func (r *BufferReadsReader) Read(p []byte) (int, error) {
 	return r.r.Read(p)
 }
 
-func (r *BufferReadsReader) MakeRewoundReader() (*PrefixedReader, error) {
+func (r *BufferReadsReader) MakeRewoundReader() (io.Reader, error) {
 	if r.pr != nil {
 		return r.pr, errors.New("prefixed reader already created from this reader")
 	}
-	r.pr = NewPrefixedReader(r.b, r.original)
+	r.pr = io.MultiReader(r.b, r.original)
 	return r.pr, nil
 }
 
-func (r *BufferReadsReader) GetRewoundReader() *PrefixedReader {
+func (r *BufferReadsReader) GetRewoundReader() io.Reader {
 	pr, _ := r.MakeRewoundReader()
 	return pr
 }
diff --git a/util/readers/prefixed_reader.go b/util/readers/prefixed_reader.go
deleted file mode 100644
index 6079da31..00000000
--- a/util/readers/prefixed_reader.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package readers
-
-import (
-	"bytes"
-	"io"
-)
-
-type PrefixedReader struct {
-	io.Reader
-	b        *bytes.Buffer
-	r        io.Reader
-	inBuffer bool
-}
-
-func NewPrefixedReader(prefix *bytes.Buffer, r io.Reader) *PrefixedReader {
-	return &PrefixedReader{
-		b:        prefix,
-		r:        r,
-		inBuffer: prefix.Len() > 0,
-	}
-}
-
-func (r *PrefixedReader) Read(p []byte) (int, error) {
-	if r.inBuffer {
-		read, err := r.b.Read(p)
-		if err == io.EOF {
-			r.inBuffer = false
-			return read, nil
-		}
-		if r.b.Len() <= 0 {
-			r.inBuffer = false
-		}
-		return read, err
-	}
-	return r.r.Read(p)
-}
-- 
GitLab