X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/0f78b81511be65d8fe21af1e6ac674f9e80ac29d..edb977215ba3ac0d64dc7208f67791afe11bb55d:/compat.c diff --git a/compat.c b/compat.c index c8066bda..16a02648 100644 --- a/compat.c +++ b/compat.c @@ -15,28 +15,42 @@ * 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 file_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; extern int protocol_version; +extern int preserve_uid; +extern int preserve_gid; extern char *dest_option; void setup_protocol(int f_out,int f_in) { + if (am_sender) + file_extra_cnt += PTR_EXTRA_LEN; + else + file_extra_cnt++; + if (preserve_uid) + preserve_uid = ++file_extra_cnt; + if (preserve_gid) + preserve_gid = ++file_extra_cnt; + if (remote_protocol == 0) { if (!read_batch) write_int(f_out, protocol_version); @@ -75,6 +89,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,