There was a data corruption possibility in the file.c:copy_file_file()
for a years. If mc_write() fails to write n_read bytes at once for some reason then n_read is fixed, but buf is not, so there are some pieces from beginning of buf instead of trailing part.
Possible scenario: copy/move file to some partition without enough space, remove some files to provide enough space and press "Retry".
Path commited.
-- Regards, Andrew V. Samoilov
--- file.c~ Sun Dec 29 09:30:11 2002 +++ file.c Wed Mar 26 11:11:23 2003 @@ -715,6 +715,7 @@ copy_file_file (FileOpContext *ctx, char gettimeofday (&tv_current, NULL); if (n_read > 0) { + char *t = buf; n_read_total += n_read; /* Windows NT ftp servers report that files have no @@ -729,18 +730,18 @@ copy_file_file (FileOpContext *ctx, char /* dst_write */ while ((n_written = - mc_write (dest_desc, buf, n_read)) < n_read) { + mc_write (dest_desc, t, n_read)) < n_read) { if (n_written > 0) { n_read -= n_written; + t += n_written; continue; } return_status = file_error (_ (" Cannot write target file \"%s\" \n %s "), dst_path); - if (return_status == FILE_RETRY) - continue; - goto ret; + if (return_status != FILE_RETRY) + goto ret; } }