diff options
author | Wayne Davison <wayned@samba.org> | 2004-04-17 17:06:03 +0000 |
---|---|---|
committer | Wayne Davison <wayned@samba.org> | 2004-04-17 17:06:03 +0000 |
commit | b05b3c9b4846b705b15b98b2c29d5d4364de5139 (patch) | |
tree | c950df4b5713ef4ac32a6d767008025a8885df23 /util.c | |
parent | a03a9f4efe1ae11f0f26cb94f988c13a2043f24a (diff) | |
download | rsync-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.c | 16 |
1 files changed, 11 insertions, 5 deletions
@@ -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; } |