summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1998-07-17 14:05:57 +0000
committerAndrew Tridgell <tridge@samba.org>1998-07-17 14:05:57 +0000
commitca6c93f817b453bcd8622cf66465851c15142a30 (patch)
tree74d15f75e6640203bc27bcf0253f8147dc1dc1ae /main.c
parent72914a606ec66f61678c6d077e515f08908e76a3 (diff)
downloadrsync-ca6c93f817b453bcd8622cf66465851c15142a30.tar.gz
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)
Diffstat (limited to 'main.c')
-rw-r--r--main.c18
1 files 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] == ':') {