mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-10-23 06:14:18 -04:00
fixed the problem where you couldn't specify multiple remote
filenames. The fix will need some testing.
This commit is contained in:
1 parent
f92ef572b9
commit
76076c4bbd
2 files changed
+34
-41
No files matched your search
@@ -36,6 +36,7 @@ extern int checksum_seed;
|
||||
|
||||
|
||||
extern int remote_version;
|
||||
extern int verbose;
|
||||
|
||||
void setup_protocol(int f_out,int f_in)
|
||||
{
|
||||
@@ -55,6 +56,10 @@ void setup_protocol(int f_out,int f_in)
|
||||
exit_cleanup(1);
|
||||
}
|
||||
|
||||
if (verbose > 2)
|
||||
fprintf(FINFO, "local_version=%d remote_version=%d\n",
|
||||
PROTOCOL_VERSION, remote_version);
|
||||
|
||||
if (remote_version >= 12) {
|
||||
if (am_server) {
|
||||
checksum_seed = time(NULL);
|
||||
|
||||
@@ -227,23 +227,10 @@ static int do_cmd(char *cmd,char *machine,char *user,char *path,int *f_in,int *f
|
||||
|
||||
server_options(args,&argc);
|
||||
|
||||
if (path && *path) {
|
||||
dir = strdup(path);
|
||||
p = strrchr(dir,'/');
|
||||
if (p && !relative_paths) {
|
||||
*p = 0;
|
||||
if (!dir[0])
|
||||
args[argc++] = "/";
|
||||
else
|
||||
args[argc++] = dir;
|
||||
p++;
|
||||
} else {
|
||||
args[argc++] = ".";
|
||||
p = dir;
|
||||
}
|
||||
if (p[0])
|
||||
args[argc++] = path;
|
||||
}
|
||||
args[argc++] = ".";
|
||||
|
||||
if (path && *path)
|
||||
args[argc++] = path;
|
||||
|
||||
args[argc] = NULL;
|
||||
|
||||
@@ -313,31 +300,31 @@ static char *get_local_name(struct file_list *flist,char *name)
|
||||
void do_server_sender(int argc,char *argv[])
|
||||
{
|
||||
int i;
|
||||
char *dir = argv[0];
|
||||
struct file_list *flist;
|
||||
char *dir = argv[0];
|
||||
|
||||
if (verbose > 2)
|
||||
fprintf(FERROR,"server_sender starting pid=%d\n",(int)getpid());
|
||||
|
||||
if (!relative_paths && chdir(dir) != 0) {
|
||||
fprintf(FERROR,"chdir %s: %s (3)\n",dir,strerror(errno));
|
||||
exit_cleanup(1);
|
||||
fprintf(FERROR,"chdir %s: %s (3)\n",dir,strerror(errno));
|
||||
exit_cleanup(1);
|
||||
}
|
||||
argc--;
|
||||
argv++;
|
||||
|
||||
if (strcmp(dir,".")) {
|
||||
int l = strlen(dir);
|
||||
if (strcmp(dir,"/") == 0)
|
||||
l = 0;
|
||||
for (i=0;i<argc;i++)
|
||||
argv[i] += l+1;
|
||||
int l = strlen(dir);
|
||||
if (strcmp(dir,"/") == 0)
|
||||
l = 0;
|
||||
for (i=0;i<argc;i++)
|
||||
argv[i] += l+1;
|
||||
}
|
||||
|
||||
if (argc == 0 && recurse) {
|
||||
argc=1;
|
||||
argv--;
|
||||
argv[0] = ".";
|
||||
argc=1;
|
||||
argv--;
|
||||
argv[0] = ".";
|
||||
}
|
||||
|
||||
|
||||
@@ -381,21 +368,22 @@ static int do_recv(int f_in,int f_out,struct file_list *flist,char *local_name)
|
||||
void do_server_recv(int argc,char *argv[])
|
||||
{
|
||||
int status;
|
||||
char *dir = NULL;
|
||||
struct file_list *flist;
|
||||
char *local_name=NULL;
|
||||
char *dir = NULL;
|
||||
|
||||
if (verbose > 2)
|
||||
fprintf(FERROR,"server_recv(%d) starting pid=%d\n",argc,(int)getpid());
|
||||
|
||||
if (argc > 0) {
|
||||
dir = argv[0];
|
||||
argc--;
|
||||
argv++;
|
||||
if (chdir(dir) != 0) {
|
||||
fprintf(FERROR,"chdir %s : %s (4)\n",dir,strerror(errno));
|
||||
exit_cleanup(1);
|
||||
}
|
||||
dir = argv[0];
|
||||
argc--;
|
||||
argv++;
|
||||
if (chdir(dir) != 0) {
|
||||
fprintf(FERROR,"chdir %s : %s (4)\n",
|
||||
dir,strerror(errno));
|
||||
exit_cleanup(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (delete_mode)
|
||||
@@ -408,11 +396,11 @@ void do_server_recv(int argc,char *argv[])
|
||||
}
|
||||
|
||||
if (argc > 0) {
|
||||
if (strcmp(dir,".")) {
|
||||
argv[0] += strlen(dir);
|
||||
if (argv[0][0] == '/') argv[0]++;
|
||||
}
|
||||
local_name = get_local_name(flist,argv[0]);
|
||||
if (strcmp(dir,".")) {
|
||||
argv[0] += strlen(dir);
|
||||
if (argv[0][0] == '/') argv[0]++;
|
||||
}
|
||||
local_name = get_local_name(flist,argv[0]);
|
||||
}
|
||||
|
||||
status = do_recv(STDIN_FILENO,STDOUT_FILENO,flist,local_name);
|
||||
|
||||
Reference in new issue
Block a user