loader: tftp: Copy the first block into the cache

tftp_open reads the first block so copy it in the cached data.
If we have more than one block (i.e. we called tftp_read before
tftp_preload) simply just reset the transfer.

Reported by:	mmel
Reviewed by:	mmel, tsoome
MFC after:	2 weeks
Sponsored by:	Beckhoff Automation GmbH & Co. KG
Differential Revision:	https://reviews.freebsd.org/D33697
This commit is contained in:
Emmanuel Vadot 2021-12-30 09:47:06 +01:00
parent b6f7942cbc
commit dfc9c1d493

View File

@ -680,6 +680,13 @@ tftp_preload(struct open_file *f)
start = getsecs();
printf("Preloading %s ", tftpfile->path);
#endif
if (tftpfile->currblock == 1)
bcopy(tftpfile->tftp_hdr->th_data,
cache,
tftpfile->validsize);
else
tftpfile->currblock = 0;
while (tftpfile->islastblock == 0) {
twiddle(32);
rc = tftp_getnextblock(tftpfile);