From d85d0b3f3133510212c4945a6dbc8cb21454f34f Mon Sep 17 00:00:00 2001
From: Garet Halliday <me@garet.holiday>
Date: Wed, 11 Oct 2023 18:17:59 -0500
Subject: [PATCH] buffer to buffer copy

---
 lib/fed/packet.go | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/lib/fed/packet.go b/lib/fed/packet.go
index f1aeae13..f521436f 100644
--- a/lib/fed/packet.go
+++ b/lib/fed/packet.go
@@ -1,5 +1,7 @@
 package fed
 
+import "io"
+
 type Packet interface {
 	Type() Type
 	Length() int
@@ -26,12 +28,19 @@ func (T PendingPacket) Length() int {
 }
 
 func (T PendingPacket) WriteTo(encoder *Encoder) error {
-	// TODO(garet) this should be better
-	b, err := T.Decoder.Remaining()
-	if err != nil {
-		return err
+	count := T.Decoder.len - T.Decoder.pos
+	limited := io.LimitedReader{
+		R: &T.Decoder.Reader,
+		N: int64(count),
+	}
+	for limited.N > 0 {
+		if _, err := encoder.Writer.ReadFrom(&limited); err != nil {
+			return err
+		}
 	}
-	return encoder.Bytes(b)
+	T.Decoder.pos += count
+	encoder.pos += count
+	return nil
 }
 
 var _ Packet = PendingPacket{}
-- 
GitLab