- Moved the err_list* stuff here from log.c and renamed them msg_list*.
[rsync/rsync.git] / cleanup.c
index 2a85083..3e85d4e 100644 (file)
--- a/cleanup.c
+++ b/cleanup.c
@@ -26,7 +26,7 @@
  * shutdown() of socket connections.  This eliminates the abortive
  * TCP RST sent by a Winsock-based system when the close() occurs.
  **/
-void close_all()
+void close_all(void)
 {
 #ifdef SHUTDOWN_ALL_SOCKETS
        int max_fd;
@@ -118,7 +118,7 @@ void _exit_cleanup(int code, const char *file, int line)
                if (cleanup_fd2 != -1) close(cleanup_fd2);
                finish_transfer(cleanup_new_fname, fname, cleanup_file);
        }
-       io_flush();
+       io_flush(FULL_FLUSH);
        if (cleanup_fname)
                do_unlink(cleanup_fname);
        if (code) {
@@ -131,8 +131,11 @@ void _exit_cleanup(int code, const char *file, int line)
                }
        }
 
-       if (code == 0 && (io_error || log_got_error)) {
-               code = RERR_PARTIAL;
+       if (code == 0) {
+               if ((io_error & ~IOERR_VANISHED) || log_got_error)
+                       code = RERR_PARTIAL;
+               else if (io_error)
+                       code = RERR_VANISHED;
        }
 
        if (code) log_exit(code, file, line);