std::string* parentPath,
std::string* name) throw (DmException)
{
+ std::vector<std::string> components;
bool absPath;
if (path.empty())
vfsThrow(EINVAL, "empty path");
- std::vector<std::string> components = Url::splitPath(path);
+ components = Url::splitPath(path);
*name = components.back();
components.pop_back();
// /
// 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: