From ca6c93f817b453bcd8622cf66465851c15142a30 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 17 Jul 1998 14:05:57 +0000 Subject: [PATCH] check whether there is a / before a : in the rsync command line. If there is then assume that the : is from a filename, not a host:dir separator. This allows you to copy files with a : in them. (suggestion from pfeifer@wait.de) --- main.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/main.c b/main.c index 1717c538..2d1b35ed 100644 --- a/main.c +++ b/main.c @@ -432,6 +432,20 @@ int client_run(int f_in, int f_out, int pid, int argc, char *argv[]) return status | status2; } +static char *find_colon(char *s) +{ + char *p, *p2; + + p = strchr(s,':'); + if (!p) return NULL; + + /* now check to see if there is a / in the string before the : - if there is then + discard the colon on the assumption that the : is part of a filename */ + p2 = strchr(s,'/'); + if (p2 && p2 < p) return NULL; + + return p; +} static int start_client(int argc, char *argv[]) { @@ -445,7 +459,7 @@ static int start_client(int argc, char *argv[]) extern int am_sender; extern char *shell_cmd; - p = strchr(argv[0],':'); + p = find_colon(argv[0]); if (p) { if (p[1] == ':') { @@ -467,7 +481,7 @@ static int start_client(int argc, char *argv[]) } else { am_sender = 1; - p = strchr(argv[argc-1],':'); + p = find_colon(argv[argc-1]); if (!p) { local_server = 1; } else if (p[1] == ':') { -- 2.34.1