fixed a couple of bugs
[vrfileman] / src / fspath.cc
index e6677bd..eb923d6 100644 (file)
@@ -128,6 +128,8 @@ FSPath &FSPath::operator =(FSPath &&p)
 
 void FSPath::sanitize()
 {
+       printf("sanitize: \"%s\"\n", abs_path);
+
        // first pass, convert and backslashes to slashes
        char *s = abs_path;
        while(*s) {
@@ -163,8 +165,8 @@ void FSPath::sanitize()
        }
        assert(len == (int)strlen(abs_path));
 
-       // remove trailing slash
-       if(abs_path[len - 1] == '/') {
+       // remove trailing slash if abs_path is not just a slash (root)
+       if(len > 1 && abs_path[len - 1] == '/') {
                abs_path[--len] = 0;
        }
        assert(len == (int)strlen(abs_path));
@@ -192,7 +194,11 @@ void FSPath::sanitize()
                parent = 0;     // root dir has no parent
        } else {
                int plen = name - 1 - abs_path;
-               assert(plen > 0);
+               assert(plen >= 0);
+
+               if(plen == 0) {
+                       plen = 1;       // our parent is root, so we need the slash
+               }
 
                parent = new char[plen + 1];
                memcpy(parent, abs_path, plen);