Warn if 64bit value sent or received on system that doesn't
[rsync/rsync.git] / receiver.c
index dbd8bfd..d50e67a 100644 (file)
@@ -297,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;
@@ -317,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) {
@@ -355,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;
                }
@@ -394,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;
                }
@@ -423,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: %s\n",fnametmp,strerror(errno));
-                       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);
@@ -448,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 */