Report all socket connection errors if we fail.
[rsync.git] / main.c
diff --git a/main.c b/main.c
index 5dec1c7852b580fa961eb310c6d1278c68794c29..85e38f386613a06fa1f325e8846fcec0b8c94a99 100644 (file)
--- a/main.c
+++ b/main.c
@@ -33,7 +33,6 @@ extern int list_only;
 extern int am_root;
 extern int am_server;
 extern int am_sender;
-extern int am_generator;
 extern int am_daemon;
 extern int inc_recurse;
 extern int blocking_io;
@@ -71,7 +70,7 @@ extern struct stats stats;
 extern char *filesfrom_host;
 extern char *partial_dir;
 extern char *dest_option;
-extern char *basis_dir[];
+extern char *basis_dir[MAX_BASIS_DIRS+1];
 extern char *rsync_path;
 extern char *shell_cmd;
 extern char *batch_name;
@@ -429,7 +428,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--;
                }
        }
@@ -509,6 +512,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')))