* Copyright (C) 1996-2001 Andrew Tridgell <tridge@samba.org>
* Copyright (C) 1996 Paul Mackerras
* Copyright (C) 2001, 2002 Martin Pool <mbp@samba.org>
- * Copyright (C) 2003, 2004, 2005, 2006 Wayne Davison
+ * Copyright (C) 2003-2007 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
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* 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.,
- * 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ * with this program; if not, visit the http://fsf.org website.
*/
#include "rsync.h"
+#include "io.h"
#if defined CONFIG_LOCALE && defined HAVE_LOCALE_H
#include <locale.h>
#endif
extern int am_sender;
extern int am_generator;
extern int am_daemon;
-extern int incremental;
+extern int inc_recurse;
extern int blocking_io;
extern int remove_source_files;
extern int daemon_over_rsh;
if (am_server) {
if (am_sender) {
- write_longint(f, total_read);
- write_longint(f, total_written);
- write_longint(f, stats.total_size);
+ write_varlong30(f, total_read, 3);
+ write_varlong30(f, total_written, 3);
+ write_varlong30(f, stats.total_size, 3);
if (protocol_version >= 29) {
- write_longint(f, stats.flist_buildtime);
- write_longint(f, stats.flist_xfertime);
+ write_varlong30(f, stats.flist_buildtime, 3);
+ write_varlong30(f, stats.flist_xfertime, 3);
}
}
return;
else if (!am_sender) {
/* Read the first two in opposite order because the meaning of
* read/write swaps when switching from sender to receiver. */
- total_written = read_longint(f);
- total_read = read_longint(f);
- stats.total_size = read_longint(f);
+ total_written = read_varlong30(f, 3);
+ total_read = read_varlong30(f, 3);
+ stats.total_size = read_varlong30(f, 3);
if (protocol_version >= 29) {
- stats.flist_buildtime = read_longint(f);
- stats.flist_xfertime = read_longint(f);
+ stats.flist_buildtime = read_varlong30(f, 3);
+ stats.flist_xfertime = read_varlong30(f, 3);
}
} else if (write_batch) {
/* The --read-batch process is going to be a client
* receiver, so we need to give it the stats. */
- write_longint(batch_fd, total_read);
- write_longint(batch_fd, total_written);
- write_longint(batch_fd, stats.total_size);
+ write_varlong30(batch_fd, total_read, 3);
+ write_varlong30(batch_fd, total_written, 3);
+ write_varlong30(batch_fd, stats.total_size, 3);
if (protocol_version >= 29) {
- write_longint(batch_fd, stats.flist_buildtime);
- write_longint(batch_fd, stats.flist_xfertime);
+ write_varlong30(batch_fd, stats.flist_buildtime, 3);
+ write_varlong30(batch_fd, stats.flist_xfertime, 3);
}
}
}
}
/* This is only called by the sender. */
-static void read_final_goodbye(int f_in, int f_out)
+static void read_final_goodbye(int f_in)
{
int i, iflags, xlen;
uchar fnamecmp_type;
if (protocol_version < 29)
i = read_int(f_in);
else {
- i = read_ndx_and_attrs(f_in, f_out, &iflags,
- &fnamecmp_type, xname, &xlen);
+ i = read_ndx_and_attrs(f_in, &iflags, &fnamecmp_type,
+ xname, &xlen);
}
if (i != NDX_DONE) {
}
flist = send_file_list(f_out,argc,argv);
- if (!flist || flist->count == 0)
+ if (!flist || flist->used == 0)
exit_cleanup(0);
io_start_buffering_in(f_in);
io_flush(FULL_FLUSH);
handle_stats(f_out);
if (protocol_version >= 24)
- read_final_goodbye(f_in, f_out);
+ read_final_goodbye(f_in);
io_flush(FULL_FLUSH);
exit_cleanup(0);
}
io_flush(FULL_FLUSH);
handle_stats(f_in);
- send_msg(MSG_DONE, "", 0);
+ send_msg(MSG_DONE, "", 1, 0);
+ write_varlong(error_pipe[1], stats.total_read, 3);
io_flush(FULL_FLUSH);
/* Handle any keep-alive packets from the post-processing work
kluge_around_eof = -1;
/* This should only get stopped via a USR2 signal. */
- read_ndx_and_attrs(f_in, -1, &iflags, &fnamecmp_type,
+ read_ndx_and_attrs(f_in, &iflags, &fnamecmp_type,
xname, &xlen);
rprintf(FERROR, "Invalid packet at end of run [%s]\n",
rprintf(FERROR,"server_recv: recv_file_list error\n");
exit_cleanup(RERR_FILESELECT);
}
- if (incremental && file_total == 1)
+ if (inc_recurse && file_total == 1)
recv_additional_file_list(f_in);
verbose = save_verbose;
io_set_sock_fds(f_in, f_out);
setup_protocol(f_out, f_in);
-#if defined HAVE_ICONV_OPEN && defined HAVE_ICONV_H
+#ifdef ICONV_CONST
setup_iconv();
#endif
io_set_sock_fds(f_in, f_out);
setup_protocol(f_out,f_in);
-#if defined HAVE_ICONV_OPEN && defined HAVE_ICONV_H
+#ifdef ICONV_CONST
setup_iconv();
#endif
io_flush(FULL_FLUSH);
handle_stats(-1);
if (protocol_version >= 24)
- read_final_goodbye(f_in, f_out);
+ read_final_goodbye(f_in);
if (pid != -1) {
if (verbose > 3)
rprintf(FINFO,"client_run waiting on %d\n", (int) pid);
if (write_batch && !am_server)
start_write_batch(f_in);
flist = recv_file_list(f_in);
- if (incremental && file_total == 1)
+ if (inc_recurse && file_total == 1)
recv_additional_file_list(f_in);
- if (flist && flist->count > 0) {
+ if (flist && flist->used > 0) {
local_name = get_local_name(flist, argv[0]);
fix_basis_dirs();