From e0ac35dc28c5834baa5e9f7944439ae2ae2f31f5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Franti=C5=A1ek=20Dvo=C5=99=C3=A1k?= Date: Sat, 19 Oct 2013 21:17:29 +0200 Subject: [PATCH] Care specially for the parent of the root (owned by root and 0755 permissions). --- src/VfsNs.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/VfsNs.cpp b/src/VfsNs.cpp index 7685650..fd25f64 100644 --- a/src/VfsNs.cpp +++ b/src/VfsNs.cpp @@ -921,12 +921,13 @@ ExtendedStat VfsCatalog::getParent(const std::string& path, std::string* parentPath, std::string* name) throw (DmException) { + std::vector components; bool absPath; if (path.empty()) vfsThrow(EINVAL, "empty path"); - std::vector components = Url::splitPath(path); + components = Url::splitPath(path); *name = components.back(); components.pop_back(); @@ -938,10 +939,23 @@ ExtendedStat VfsCatalog::getParent(const std::string& path, // / // name // - // We can't check parent of root. + + // Root directory is special case. + if (absPath) { + ExtendedStat xStat; + + memset(&xStat.stat, 0, sizeof xStat.stat); + xStat.stat.st_mode = S_IFDIR | 0755; + xStat.name = "/.."; + + *parentPath = xStat.name; + + debug("parent of root directory, owner %u, group %u, permissions %06o", xStat.stat.st_uid, xStat.stat.st_gid, xStat.stat.st_mode); + return xStat; + } + // Single name is relative path with parent ".". - // - *parentPath = absPath ? "/" : this->getWorkingDir(); + *parentPath = this->getWorkingDir(); } else { // // At least one directory: -- 1.8.2.3