Some demon_log_* variables changed into logfile_* variables that are
[rsync/rsync.git] / io.c
diff --git a/io.c b/io.c
index 1513ae9..5b87be6 100644 (file)
--- a/io.c
+++ b/io.c
@@ -1,8 +1,10 @@
-/* -*- c-file-style: "linux" -*-
+/*
+ * Socket and pipe I/O utilities used in rsync.
  *
- * Copyright (C) 1996-2001 by Andrew Tridgell
- * Copyright (C) Paul Mackerras 1996
- * Copyright (C) 2001, 2002 by Martin Pool <mbp@samba.org>
+ * Copyright (C) 1996-2001 Andrew Tridgell
+ * Copyright (C) 1996 Paul Mackerras
+ * Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
+ * Copyright (C) 2003, 2004, 2005, 2006 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
-/**
- * @file io.c
- *
- * Socket and pipe I/O utilities used in rsync.
- *
- * rsync provides its own multiplexing system, which is used to send
- * stderr and stdout over a single socket.  We need this because
- * stdout normally carries the binary data stream, and stderr all our
- * error messages.
+/* Rsync provides its own multiplexing system, which is used to send
+ * stderr and stdout over a single socket.
  *
  * For historical reasons this is off during the start of the
  * connection, but it's switched on quite early using
- * io_start_multiplex_out() and io_start_multiplex_in().
- **/
+ * io_start_multiplex_out() and io_start_multiplex_in(). */
 
 #include "rsync.h"
 
@@ -273,10 +267,7 @@ static void read_msg_fd(void)
                        exit_cleanup(RERR_STREAMIO);
                }
                read_loop(fd, buf, len);
-               if (defer_forwarding_messages)
-                       msg_list_add(&msg2sndr, MSG_DELETED, buf, len);
-               else
-                       io_multiplex_write(MSG_DELETED, buf, len);
+               send_msg(MSG_DELETED, buf, len);
                break;
        case MSG_SUCCESS:
                if (len != 4 || !am_generator) {
@@ -286,10 +277,7 @@ static void read_msg_fd(void)
                read_loop(fd, buf, len);
                if (remove_sent_files) {
                        decrement_active_files(IVAL(buf,0));
-                       if (defer_forwarding_messages)
-                               msg_list_add(&msg2sndr, MSG_SUCCESS, buf, len);
-                       else
-                               io_multiplex_write(MSG_SUCCESS, buf, len);
+                       send_msg(MSG_SUCCESS, buf, len);
                }
                if (preserve_hard_links)
                        flist_ndx_push(&hlink_list, IVAL(buf,0));
@@ -309,10 +297,7 @@ static void read_msg_fd(void)
                        if (n >= sizeof buf)
                                n = sizeof buf - 1;
                        read_loop(fd, buf, n);
-                       if (am_generator && am_server && defer_forwarding_messages)
-                               msg_list_add(&msg2sndr, tag, buf, n);
-                       else
-                               rwrite((enum logcode)tag, buf, n);
+                       rwrite(tag, buf, n);
                        len -= n;
                }
                break;
@@ -386,14 +371,19 @@ static int msg2genr_flush(int flush_it_all)
        return 1;
 }
 
-void send_msg(enum msgcode code, char *buf, int len)
+int send_msg(enum msgcode code, char *buf, int len)
 {
        if (msg_fd_out < 0) {
-               io_multiplex_write(code, buf, len);
-               return;
+               if (!defer_forwarding_messages)
+                       return io_multiplex_write(code, buf, len);
+               if (!io_multiplexing_out)
+                       return 0;
+               msg_list_add(&msg2sndr, code, buf, len);
+               return 1;
        }
        msg_list_add(&msg2genr, code, buf, len);
        msg2genr_flush(NORMAL_FLUSH);
+       return 1;
 }
 
 int get_redo_num(int itemizing, enum logcode code)
@@ -1001,7 +991,7 @@ void write_sum_head(int f, struct sum_struct *sum)
 static void sleep_for_bwlimit(int bytes_written)
 {
        static struct timeval prior_tv;
-       static long total_written = 0; 
+       static long total_written = 0;
        struct timeval tv, start_tv;
        long elapsed_usec, sleep_usec;
 
@@ -1010,7 +1000,7 @@ static void sleep_for_bwlimit(int bytes_written)
        if (!bwlimit_writemax)
                return;
 
-       total_written += bytes_written; 
+       total_written += bytes_written;
 
        gettimeofday(&start_tv, NULL);
        if (prior_tv.tv_sec) {