From: Wayne Davison Date: Sat, 17 Apr 2004 17:06:03 +0000 (+0000) Subject: Fixed alloc_sanitize_path()'s handling of a rootdir == "/" (the old X-Git-Tag: v2.6.1pre2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b05b3c9b4846b705b15b98b2c29d5d4364de5139;p=thirdparty%2Frsync.git Fixed alloc_sanitize_path()'s handling of a rootdir == "/" (the old code would generate a string that started with "//" instead of "/"). --- diff --git a/util.c b/util.c index 5c55ce41c..5c3f26cd2 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; }