Optimize finding the sum that matches our --inplace position.
[rsync/rsync.git] / main.c
diff --git a/main.c b/main.c
index 4f3729e..649aa90 100644 (file)
--- a/main.c
+++ b/main.c
@@ -130,7 +130,7 @@ static void show_malloc_stats(void);
 pid_t wait_process(pid_t pid, int *status_ptr, int flags)
 {
        pid_t waited_pid;
-       
+
        do {
                waited_pid = waitpid(pid, status_ptr, flags);
        } while (waited_pid == -1 && errno == EINTR);
@@ -493,7 +493,11 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char **remote_argv, in
                                rprintf(FERROR, "internal: args[] overflowed in do_cmd()\n");
                                exit_cleanup(RERR_SYNTAX);
                        }
-                       args[argc++] = *remote_argv++;
+                       if (**remote_argv == '-') {
+                               if (asprintf(args + argc++, "./%s", *remote_argv++) < 0)
+                                       out_of_memory("do_cmd");
+                       } else
+                               args[argc++] = *remote_argv++;
                        remote_argc--;
                }
        }
@@ -576,6 +580,10 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
        if (!dest_path || list_only)
                return NULL;
 
+       /* Treat an empty string as a copy into the current directory. */
+       if (!*dest_path)
+           dest_path = ".";
+
        if (daemon_filter_list.head) {
                char *slash = strrchr(dest_path, '/');
                if (slash && (slash[1] == '\0' || (slash[1] == '.' && slash[2] == '\0')))
@@ -639,7 +647,7 @@ static char *get_local_name(struct file_list *flist, char *dest_path)
                        exit_cleanup(RERR_SYNTAX);
                }
 
-               if (mkdir_defmode(dest_path) != 0) {
+               if (do_mkdir(dest_path, ACCESSPERMS) != 0) {
                        rsyserr(FERROR, errno, "mkdir %s failed",
                                full_fname(dest_path));
                        exit_cleanup(RERR_FILEIO);
@@ -1521,9 +1529,10 @@ int main(int argc,char *argv[])
                exit_cleanup(RERR_SYNTAX);
        }
 
-       /* we set a 0 umask so that correct file permissions can be
-        * carried across */
-       orig_umask = umask(0);
+       /* Get the umask for use in permission calculations.  We no longer set
+        * it to zero; that is ugly and pointless now that all the callers that
+        * relied on it have been reeducated to work with default ACLs. */
+       umask(orig_umask = umask(0));
 
 #if defined CONFIG_LOCALE && defined HAVE_SETLOCALE
        setlocale(LC_CTYPE, "");