In clean_flist(), if a duplicate is found for a dir and a non-dir,
[rsync/rsync.git] / sender.c
index 10ea2fa..d88d245 100644 (file)
--- a/sender.c
+++ b/sender.c
@@ -47,7 +47,7 @@ extern struct stats stats;
 static struct sum_struct *receive_sums(int f)
 {
        struct sum_struct *s;
-       int i;
+       size_t i;
        OFF_T offset = 0;
 
        if (!(s = new(struct sum_struct)))
@@ -68,14 +68,14 @@ static struct sum_struct *receive_sums(int f)
        if (!(s->sums = new_array(struct sum_buf, s->count)))
                out_of_memory("receive_sums");
 
-       for (i = 0; i < (int)s->count; i++) {
+       for (i = 0; i < s->count; i++) {
                s->sums[i].sum1 = read_int(f);
                read_buf(f, s->sums[i].sum2, s->s2length);
 
                s->sums[i].offset = offset;
                s->sums[i].flags = 0;
 
-               if (i == (int)s->count-1 && s->remainder != 0)
+               if (i == s->count-1 && s->remainder != 0)
                        s->sums[i].len = s->remainder;
                else
                        s->sums[i].len = s->blength;
@@ -145,14 +145,19 @@ void send_files(struct file_list *flist, int f_out, int f_in)
                        updating_basis_file = inplace && !make_backups;
 
                file = flist->files[i];
+               if (S_ISDIR(file->mode)) {
+                       rprintf(FERROR, "[%s] got index of directory: %d\n",
+                               who_am_i(), i);
+                       exit_cleanup(RERR_PROTOCOL);
+               }
 
                stats.current_file_index = i;
                stats.num_transferred_files++;
                stats.total_transferred_size += file->length;
 
-               if (file->basedir) {
+               if (file->dir.root) {
                        /* N.B. We're sure that this fits, so offset is OK. */
-                       offset = strlcpy(fname, file->basedir, sizeof fname);
+                       offset = strlcpy(fname, file->dir.root, sizeof fname);
                        if (!offset || fname[offset-1] != '/')
                                fname[offset++] = '/';
                } else