From c332d48e9dbaeacdf7c855db9771db76e1a2b132 Mon Sep 17 00:00:00 2001
From: Sally Coolatta <tehrealsalt@gmail.com>
Date: Mon, 19 Dec 2022 09:55:52 -0500
Subject: [PATCH] Only reseek if we have to

Makes it act similarly to before if only 1 node needs the file.
---
 src/d_netfil.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/d_netfil.c b/src/d_netfil.c
index 78e44a149..881b7b5b2 100644
--- a/src/d_netfil.c
+++ b/src/d_netfil.c
@@ -103,6 +103,7 @@ typedef struct fileused_s
 {
 	FILE *file;
 	UINT8 count;
+	UINT32 position;
 } fileused_t;
 
 static fileused_t transferFiles[UINT8_MAX + 1];
@@ -895,7 +896,7 @@ void SV_FileSendTicker(void)
 				if (filesize == -1)
 					I_Error("Error getting filesize of %s", f->id.filename);
 
-				f->size = (UINT32)filesize;
+				f->size = transferFiles[f->fileid].position = (UINT32)filesize;
 			}
 
 			transfer[i].position = 0;
@@ -904,7 +905,11 @@ void SV_FileSendTicker(void)
 
 		if (!ram)
 		{
-			fseek(transferFiles[f->fileid].file, transfer[i].position, SEEK_SET);
+			// Seek to the right position if we aren't already there.
+			if (transferFiles[f->fileid].position != transfer[i].position)
+			{
+				fseek(transferFiles[f->fileid].file, transfer[i].position, SEEK_SET);
+			}
 		}
 
 		// Build a packet containing a file fragment
@@ -924,6 +929,8 @@ void SV_FileSendTicker(void)
 		{
 			I_Error("SV_FileSendTicker: can't read %s byte on %s at %d because %s",
 				sizeu1(size), f->id.filename, transfer[i].position, M_FileError(transferFiles[f->fileid].file));
+
+			transferFiles[f->fileid].position = (UINT32)(transferFiles[f->fileid].position + size);
 		}
 
 		p->position = LONG(transfer[i].position);
-- 
GitLab