diff --git a/src/d_netfil.c b/src/d_netfil.c index 78e44a14..881b7b5b 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);