diff options
Diffstat (limited to 'net-ftp/atftp/files/atftp-0.7.2-fewer_seeks.patch')
| -rw-r--r-- | net-ftp/atftp/files/atftp-0.7.2-fewer_seeks.patch | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/net-ftp/atftp/files/atftp-0.7.2-fewer_seeks.patch b/net-ftp/atftp/files/atftp-0.7.2-fewer_seeks.patch new file mode 100644 index 000000000000..78926b94b9f7 --- /dev/null +++ b/net-ftp/atftp/files/atftp-0.7.2-fewer_seeks.patch @@ -0,0 +1,38 @@ +<F28>diff -U8 atftp-0.7.2/tftp_io.c /var/tmp/portage/net-ftp/atftp-0.7.2-r1/work/atftp-0.7.2/tftp_io.c +--- atftp-0.7.2/tftp_io.c 2019-04-14 17:38:55.000000000 -0500 ++++ /var/tmp/portage/net-ftp/atftp-0.7.2-r1/work/atftp-0.7.2/tftp_io.c 2020-03-16 12:55:22.371820662 -0500 +@@ -439,26 +439,32 @@ + } + + /* + * Write to file and do netascii conversion if needed + */ + int tftp_file_write(FILE *fp, char *data_buffer, int data_buffer_size, long block_number, int data_size, + int convert, long *prev_block_number, int *temp) + { ++ static long filepos; + int bytes_written; + int c; + char prevchar = *temp; + + if (!convert) + { + /* Simple case, just seek and write */ +- if (fseek(fp, (block_number - 1) * data_buffer_size, SEEK_SET) != 0) +- return 0; ++ long position = (block_number - 1)*data_buffer_size; ++ if (position != filepos) ++ if (fseek(fp, position, SEEK_SET) != 0) ++ return 0; ++ else ++ filepos = position; + bytes_written = fwrite(data_buffer, 1, data_size, fp); ++ filepos += bytes_written; + } + else if (block_number != *prev_block_number) + { + /* + * Same principle than for reading, but simpler since when client + * send same block twice there is no need to rewrite it to the + * file + */ |
