summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2004-04-17 17:06:03 +0000
committerWayne Davison <wayned@samba.org>2004-04-17 17:06:03 +0000
commitb05b3c9b4846b705b15b98b2c29d5d4364de5139 (patch)
treec950df4b5713ef4ac32a6d767008025a8885df23 /util.c
parenta03a9f4efe1ae11f0f26cb94f988c13a2043f24a (diff)
downloadrsync-b05b3c9b4846b705b15b98b2c29d5d4364de5139.tar.gz
Fixed alloc_sanitize_path()'s handling of a rootdir == "/" (the old
code would generate a string that started with "//" instead of "/").
Diffstat (limited to 'util.c')
-rw-r--r--util.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/util.c b/util.c
index 5c55ce41..5c3f26cd 100644
--- a/util.c
+++ b/util.c
@@ -786,9 +786,11 @@ char *alloc_sanitize_path(const char *path, const char *rootdir)
char *buf;
int rlen, plen = strlen(path);
- if (*path == '/' && rootdir)
+ if (*path == '/' && rootdir) {
rlen = strlen(rootdir);
- else
+ if (rlen == 1)
+ path++;
+ } else
rlen = 0;
if (!(buf = new_array(char, rlen + plen + 1)))
out_of_memory("alloc_sanitize_path");
@@ -796,11 +798,15 @@ char *alloc_sanitize_path(const char *path, const char *rootdir)
memcpy(buf, rootdir, rlen);
memcpy(buf + rlen, path, plen + 1);
- if (rlen)
+ if (rlen > 1)
rlen++;
sanitize_path(buf + rlen, NULL);
- if (rlen && buf[rlen] == '.' && buf[rlen+1] == '\0')
- buf[rlen-1] = '\0';
+ if (rlen && buf[rlen] == '.' && buf[rlen+1] == '\0') {
+ if (rlen > 1)
+ rlen--;
+ buf[rlen] = '\0';
+ }
+ fprintf(stderr, "p:`%s'\n", buf);
return buf;
}