A fix for the itemized output to prevent superfluous 'p' flags.
authorWayne Davison <wayned@samba.org>
Thu, 28 Jul 2005 19:06:03 +0000 (19:06 +0000)
committerWayne Davison <wayned@samba.org>
Thu, 28 Jul 2005 19:06:03 +0000 (19:06 +0000)
generator.c

index f4dbb9cca5acd1d1bfeb1e50b479bbac3ff6e394..d3356826a2ad01f9fe4ec356976995c80155c661 100644 (file)
@@ -54,7 +54,6 @@ extern int delay_updates;
 extern int update_only;
 extern int opt_ignore_existing;
 extern int inplace;
-extern int append_mode;
 extern int make_backups;
 extern int csum_length;
 extern int ignore_times;
@@ -471,42 +470,35 @@ static void generate_and_send_sums(int fd, OFF_T len, int f_out, int f_copy)
        OFF_T offset = 0;
 
        sum_sizes_sqroot(&sum, len);
-       write_sum_head(f_out, &sum);
-
-       if (append_mode > 0 && f_copy < 0)
-               return;
 
        if (len > 0)
                mapbuf = map_file(fd, len, MAX_MAP_SIZE, sum.blength);
        else
                mapbuf = NULL;
 
+       write_sum_head(f_out, &sum);
+
        for (i = 0; i < sum.count; i++) {
                int32 n1 = (int32)MIN(len, (OFF_T)sum.blength);
                char *map = map_ptr(mapbuf, offset, n1);
+               uint32 sum1 = get_checksum1(map, n1);
                char sum2[SUM_LENGTH];
-               uint32 sum1;
-
-               len -= n1;
-               offset += n1;
 
-               if (f_copy >= 0) {
+               if (f_copy >= 0)
                        full_write(f_copy, map, n1);
-                       if (append_mode > 0)
-                               continue;
-               }
 
-               sum1 = get_checksum1(map, n1);
                get_checksum2(map, n1, sum2);
 
                if (verbose > 3) {
                        rprintf(FINFO,
                                "chunk[%.0f] offset=%.0f len=%ld sum1=%08lx\n",
-                               (double)i, (double)offset - n1, (long)n1,
+                               (double)i, (double)offset, (long)n1,
                                (unsigned long)sum1);
                }
                write_int(f_out, sum1);
                write_buf(f_out, sum2, sum.s2length);
+               len -= n1;
+               offset += n1;
        }
 
        if (mapbuf)
@@ -713,7 +705,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                        itemize(file, ndx, statret, &st,
                                statret ? ITEM_LOCAL_CHANGE : 0, 0, NULL);
                }
-               if (statret != 0 && do_mkdir(fname,file->mode) < 0 && errno != EEXIST) {
+               if (statret != 0 && do_mkdir(fname,file->mode) != 0 && errno != EEXIST) {
                        if (!relative_paths || errno != ENOENT
                            || create_directory_path(fname, orig_umask) < 0
                            || (do_mkdir(fname, file->mode) < 0 && errno != EEXIST)) {
@@ -807,7 +799,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                                        safe_fname(fname),
                                        (int)file->mode, (int)file->u.rdev);
                        }
-                       if (do_mknod(fname,file->mode,file->u.rdev) < 0) {
+                       if (do_mknod(fname,file->mode,file->u.rdev) != 0) {
                                rsyserr(FERROR, errno, "mknod %s failed",
                                        full_fname(fname));
                        } else {
@@ -1015,9 +1007,6 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
                return;
        }
 
-       if (append_mode && st.st_size > file->length)
-               return;
-
        if (!compare_dest && fnamecmp_type <= FNAMECMP_BASIS_DIR_HIGH)
                ;
        else if (fnamecmp_type == FNAMECMP_FUZZY)
@@ -1191,7 +1180,7 @@ void generate_files(int f_out, struct file_list *flist, char *local_name)
                do_delete_pass(flist);
        do_progress = 0;
 
-       if (append_mode || whole_file < 0)
+       if (whole_file < 0)
                whole_file = 0;
        if (verbose >= 2) {
                rprintf(FINFO, "delta-transmission %s\n",
@@ -1219,19 +1208,17 @@ void generate_files(int f_out, struct file_list *flist, char *local_name)
                /* We need to ensure that any dirs we create have writeable
                 * permissions during the time we are putting files within
                 * them.  This is then fixed after the transfer is done. */
-#ifdef HAVE_CHMOD
                if (!am_root && S_ISDIR(file->mode) && !(file->mode & S_IWUSR)
                    && !list_only) {
                        int mode = file->mode | S_IWUSR; /* user write */
                        char *fname = local_name ? local_name : fbuf;
-                       if (do_chmod(fname, mode) < 0) {
+                       if (do_chmod(fname, mode & CHMOD_BITS) < 0) {
                                rsyserr(FERROR, errno,
                                        "failed to modify permissions on %s",
                                        full_fname(fname));
                        }
                        need_retouch_dir_perms = 1;
                }
-#endif
 
                if (preserve_hard_links)
                        check_for_finished_hlinks(itemizing, code);
@@ -1250,8 +1237,6 @@ void generate_files(int f_out, struct file_list *flist, char *local_name)
        only_existing = max_size = opt_ignore_existing = 0;
        update_only = always_checksum = size_only = 0;
        ignore_times = 1;
-       if (append_mode)  /* resend w/o append mode */
-               append_mode = -1; /* ... but only longer files */
        make_backups = 0; /* avoid a duplicate backup for inplace processing */
 
        if (verbose > 2)