When retrieving a file dont open file until we have to to prevent files of size 0 being created when retrieval fails, bug found by Jeff Angielski

This commit is contained in:
Glenn L McGrath 2002-12-18 02:47:40 +00:00
parent 688cf014af
commit 1643f41986

View File

@ -174,16 +174,9 @@ static int ftp_recieve(FILE *control_stream, const char *host, const char *local
filesize = atol(buf + 4); filesize = atol(buf + 4);
} }
/* only make a local file if we know that one exists on the remote server */
if (do_continue) {
fd_local = xopen(local_file, O_APPEND | O_WRONLY);
} else {
fd_local = xopen(local_file, O_CREAT | O_TRUNC | O_WRONLY);
}
if (do_continue) { if (do_continue) {
struct stat sbuf; struct stat sbuf;
if (fstat(fd_local, &sbuf) < 0) { if (lstat(local_file, &sbuf) < 0) {
perror_msg_and_die("fstat()"); perror_msg_and_die("fstat()");
} }
if (sbuf.st_size > 0) { if (sbuf.st_size > 0) {
@ -206,6 +199,13 @@ static int ftp_recieve(FILE *control_stream, const char *host, const char *local
error_msg_and_die("RETR error: %s", buf + 4); error_msg_and_die("RETR error: %s", buf + 4);
} }
/* only make a local file if we know that one exists on the remote server */
if (do_continue) {
fd_local = xopen(local_file, O_APPEND | O_WRONLY);
} else {
fd_local = xopen(local_file, O_CREAT | O_TRUNC | O_WRONLY);
}
/* Copy the file */ /* Copy the file */
if (copyfd(fd_data, fd_local, filesize) == -1) { if (copyfd(fd_data, fd_local, filesize) == -1) {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);