Warn if 64bit value sent or received on system that doesn't
[rsync/rsync.git] / receiver.c
index 2f679b1..d50e67a 100644 (file)
@@ -38,8 +38,8 @@ extern int make_backups;
 extern char *backup_suffix;
 
 static struct delete_list {
-       dev_t dev;
-       INO_T inode;
+       DEV64_T dev;
+       INO64_T inode;
 } *delete_list;
 static int dlist_len, dlist_alloc_len;
 
@@ -206,7 +206,8 @@ static int get_tmpname(char *fnametmp, char *fname)
 static int receive_data(int f_in,struct map_struct *buf,int fd,char *fname,
                        OFF_T total_size)
 {
-       int i,n,remainder,len,count;
+       int i;
+       unsigned int n,remainder,len,count;
        OFF_T offset = 0;
        OFF_T offset2;
        char *data;
@@ -248,7 +249,7 @@ static int receive_data(int f_in,struct map_struct *buf,int fd,char *fname,
                i = -(i+1);
                offset2 = i*(OFF_T)n;
                len = n;
-               if (i == count-1 && remainder != 0)
+               if (i == (int) count-1 && remainder != 0)
                        len = remainder;
                
                stats.matched_data += len;
@@ -264,7 +265,7 @@ static int receive_data(int f_in,struct map_struct *buf,int fd,char *fname,
                        sum_update(map,len);
                }
                
-               if (fd != -1 && write_file(fd,map,len) != len) {
+               if (fd != -1 && write_file(fd,map,len) != (int) len) {
                        rprintf(FERROR,"write failed on %s : %s\n",
                                fname,strerror(errno));
                        exit_cleanup(RERR_FILEIO);
@@ -296,9 +297,10 @@ static int receive_data(int f_in,struct map_struct *buf,int fd,char *fname,
 }
 
 
-/* main routine for receiver process. Receiver process runs on the
-       same host as the generator process. */
-
+/**
+ * main routine for receiver process.
+ *
+ * Receiver process runs on the same host as the generator process. */
 int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
 {  
        int fd1,fd2;
@@ -316,6 +318,7 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
        extern struct stats stats;              
        extern int preserve_perms;
        extern int delete_after;
+       extern int orig_umask;
        struct stats initial_stats;
 
        if (verbose > 2) {
@@ -354,8 +357,8 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
                        fname = local_name;
 
                if (dry_run) {
-                       if (!am_server) {
-                               log_transfer(file, fname);
+                       if (!am_server && verbose) {    /* log transfer */
+                               rprintf(FINFO, "%s\n", fname);
                        }
                        continue;
                }
@@ -393,8 +396,8 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
                }
 
                if (fd1 != -1 && !preserve_perms) {
-                       /* if the file exists already and we aren't perserving
-                          presmissions then act as though the remote end sent
+                       /* if the file exists already and we aren't preserving
+                          permissions then act as though the remote end sent
                           us the file permissions we already have */
                        file->mode = st.st_mode;
                }
@@ -422,23 +425,17 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
                   this out.  We also set it initially without group
                   access because of a similar race condition. */
                fd2 = do_mkstemp(fnametmp, file->mode & INITACCESSPERMS);
-               if (fd2 == -1) {
-                       rprintf(FERROR,"mkstemp %s failed\n",fnametmp);
-                       receive_data(f_in,buf,-1,NULL,file->length);
-                       if (buf) unmap_file(buf);
-                       continue;
-               }
 
                /* in most cases parent directories will already exist
                   because their information should have been previously
                   transferred, but that may not be the case with -R */
                if (fd2 == -1 && relative_paths && errno == ENOENT && 
-                   create_directory_path(fnametmp) == 0) {
+                   create_directory_path(fnametmp, orig_umask) == 0) {
                        strlcpy(fnametmp, template, sizeof(fnametmp));
                        fd2 = do_mkstemp(fnametmp, file->mode & INITACCESSPERMS);
                }
                if (fd2 == -1) {
-                       rprintf(FERROR,"cannot create %s : %s\n",fnametmp,strerror(errno));
+                       rprintf(FERROR,"mkstemp %s failed: %s\n",fnametmp,strerror(errno));
                        receive_data(f_in,buf,-1,NULL,file->length);
                        if (buf) unmap_file(buf);
                        if (fd1 != -1) close(fd1);
@@ -447,8 +444,8 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
       
                cleanup_set(fnametmp, fname, file, buf, fd1, fd2);
 
-               if (!am_server) {
-                       log_transfer(file, fname);
+               if (!am_server && verbose) {    /* log transfer */
+                       rprintf(FINFO, "%s\n", fname);
                }
 
                /* recv file data */
@@ -488,7 +485,7 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen)
        }
 
        if (preserve_hard_links)
-               do_hard_links(flist);
+               do_hard_links();
 
        /* now we need to fix any directory permissions that were 
           modified during the transfer */