* 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 version 2 as
- * published by the Free Software Foundation.
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
*
* 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.
*/
/* Rsync provides its own multiplexing system, which is used to send
/* Read extra file list from receiver. */
assert(iobuf_in != NULL);
assert(iobuf_f_in == fd);
+ if (verbose > 3) {
+ rprintf(FINFO, "[%s] receiving flist for dir %d\n",
+ who_am_i(), IVAL(buf,0));
+ }
flist = recv_file_list(fd);
flist->parent_ndx = IVAL(buf,0);
break;
rprintf(FERROR,
"Invalid file index: %d (%d - %d) [%s]\n",
ndx, first_flist->ndx_start,
- first_flist->prev->ndx_start + first_flist->prev->count - 1,
+ first_flist->prev->ndx_end,
who_am_i());
exit_cleanup(RERR_PROTOCOL);
}
flist = flist->prev;
}
- while (ndx >= flist->ndx_start + flist->count) {
+ while (ndx > flist->ndx_end) {
if (!(flist = flist->next))
goto invalid_ndx;
}
io_filesfrom_bp = io_filesfrom_buf;
else
io_filesfrom_bp += l;
- } else {
+ } else if (errno != EINTR) {
/* XXX should we complain? */
io_filesfrom_f_out = -1;
}
io_filesfrom_buf,
sizeof io_filesfrom_buf);
if (l <= 0) {
- /* Send end-of-file marker */
- io_filesfrom_buf[0] = '\0';
- io_filesfrom_buf[1] = '\0';
- io_filesfrom_buflen = io_filesfrom_lastchar? 2 : 1;
- io_filesfrom_f_in = -1;
+ if (l == 0 || errno != EINTR) {
+ /* Send end-of-file marker */
+ io_filesfrom_buf[0] = '\0';
+ io_filesfrom_buf[1] = '\0';
+ io_filesfrom_buflen = io_filesfrom_lastchar? 2 : 1;
+ io_filesfrom_f_in = -1;
+ }
} else {
if (!eol_nulls) {
char *s = io_filesfrom_buf + l;
if (protocol_version >= 30)
send_msg(MSG_NOOP, "", 0, 0);
else {
- write_int(sock_f_out, cur_flist->count);
+ write_int(sock_f_out, cur_flist->used);
write_shortint(sock_f_out, ITEM_IS_NEW);
}
}