X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/3e7934a5fb06dac717722c4d680d0c063dbf8d5f..b694f8a245b19c0e2c80fbeac5b2c991cfb2ced9:/receiver.c diff --git a/receiver.c b/receiver.c index 1779d175..656f2a25 100644 --- a/receiver.c +++ b/receiver.c @@ -28,7 +28,6 @@ extern int do_progress; extern int log_before_transfer; extern int log_format_has_i; extern int daemon_log_format_has_i; -extern int delete_after; extern int csum_length; extern int read_batch; extern int batch_gen_fd; @@ -57,28 +56,6 @@ extern char *basis_dir[]; extern struct filter_list_struct server_filter_list; - -/* This deletes any files on the receiving side that are not present on the - * sending side. This is used by --delete-before and --delete-after. */ -void delete_files(struct file_list *flist) -{ - char fbuf[MAXPATHLEN]; - int j; - - for (j = 0; j < flist->count; j++) { - struct file_struct *file = flist->files[j]; - - if (!(file->flags & FLAG_DEL_HERE)) - continue; - - f_name_to(file, fbuf); - if (verbose > 1 && file->flags & FLAG_TOP_DIR) - rprintf(FINFO, "deleting in %s\n", safe_fname(fbuf)); - - delete_in_dir(flist, fbuf, file); - } -} - #define SLOT_SIZE (16*1024) /* Desired size in bytes */ #define PER_SLOT_BITS (SLOT_SIZE * 8) /* Number of bits per slot */ #define PER_SLOT_INTS (SLOT_SIZE / 4) /* Number of int32s per slot */ @@ -329,17 +306,6 @@ static int receive_data(int f_in, char *fname_r, int fd_r, OFF_T size_r, static void read_gen_name(int fd, char *dirname, char *buf) { int dlen; - int len = read_byte(fd); - - if (len & 0x80) { -#if MAXPATHLEN > 32767 - uchar lenbuf[2]; - read_buf(fd, (char *)lenbuf, 2); - len = (len & ~0x80) * 0x10000 + lenbuf[0] * 0x100 + lenbuf[1]; -#else - len = (len & ~0x80) * 0x100 + read_byte(fd); -#endif - } if (dirname) { dlen = strlcpy(buf, dirname, MAXPATHLEN); @@ -347,12 +313,7 @@ static void read_gen_name(int fd, char *dirname, char *buf) } else dlen = 0; - if (dlen + len >= MAXPATHLEN) { - rprintf(FERROR, "bogus data on generator name pipe\n"); - exit_cleanup(RERR_PROTOCOL); - } - - read_sbuf(fd, buf + dlen, len); + read_vstring(fd, buf + dlen, MAXPATHLEN - dlen); } @@ -426,6 +387,10 @@ int recv_files(int f_in, struct file_list *flist, char *local_name, } if (i < 0 || i >= flist->count) { + /* Handle the new keep-alive (no-op) packet. */ + if (i == flist->count && protocol_version >= 29 + && read_shortint(f_in) == ITEM_IS_NEW) + continue; rprintf(FERROR,"Invalid file index %d in recv_files (count=%d)\n", i, flist->count); exit_cleanup(RERR_PROTOCOL); @@ -722,9 +687,6 @@ int recv_files(int f_in, struct file_list *flist, char *local_name, } } - if (delete_after && !local_name && flist->count > 0) - delete_files(flist); - if (verbose > 2) rprintf(FINFO,"recv_files finished\n");