X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/0f78b81511be65d8fe21af1e6ac674f9e80ac29d..6eee13cf580ef3270539098eead19259192aa497:/compat.c diff --git a/compat.c b/compat.c index c8066bda..b090c2ad 100644 --- a/compat.c +++ b/compat.c @@ -15,20 +15,23 @@ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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. */ #include "rsync.h" int remote_protocol = 0; +int flist_extra_cnt = 0; /* count of file-list extras that everyone gets */ extern int verbose; extern int am_server; +extern int am_sender; extern int inplace; extern int fuzzy_basis; extern int read_batch; +extern int max_delete; extern int checksum_seed; extern int basis_dir_cnt; extern int prune_empty_dirs; @@ -37,6 +40,15 @@ extern char *dest_option; void setup_protocol(int f_out,int f_in) { + if (am_sender) + flist_extra_cnt += PTR_EXTRA_LEN; + else + flist_extra_cnt++; + if (preserve_uid) + preserve_uid = ++flist_extra_cnt; + if (preserve_gid) + preserve_gid = ++flist_extra_cnt; + if (remote_protocol == 0) { if (!read_batch) write_int(f_out, protocol_version); @@ -75,6 +87,16 @@ void setup_protocol(int f_out,int f_in) exit_cleanup(RERR_PROTOCOL); } + if (protocol_version < 30) { + if (max_delete == 0 && am_sender) { + rprintf(FERROR, + "--max-delete=0 requires protocol 30 or higher" + " (negotiated %d).\n", + protocol_version); + exit_cleanup(RERR_PROTOCOL); + } + } + if (protocol_version < 29) { if (fuzzy_basis) { rprintf(FERROR,