vfs: Implement GetName() & GetPath() in FileNode class

This commit is contained in:
EnderIce2 2024-10-13 02:25:29 +03:00
parent 74faef2623
commit 3ca2463834
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
3 changed files with 37 additions and 5 deletions

View File

@ -48,6 +48,9 @@ public:
Inode *Node;
FileSystemInfo *fsi;
std::string GetName();
std::string GetPath();
bool IsDirectory() { return S_ISDIR(Node->Mode); }
bool IsCharacterDevice() { return S_ISCHR(Node->Mode); }
bool IsBlockDevice() { return S_ISBLK(Node->Mode); }

View File

@ -287,3 +287,27 @@ namespace vfs
return 0;
}
}
std::string FileNode::GetName()
{
return this->Name;
}
std::string FileNode::GetPath()
{
const char *path = this->Path.c_str();
if (strncmp(path, "\x06root-", 6) == 0) /* FIXME: deduce the index */
{
path += 6;
while (*path != '\0' && *path != '\x06')
path++;
if (*path == '\x06')
path++;
}
else
return this->Path;
if (path[0] == '\0')
return std::string(this->fsi->RootName);
return std::string(path);
}

View File

@ -1897,14 +1897,19 @@ static long linux_getcwd(SysFrm *, char *buf, size_t size)
if (pBuf == nullptr)
return -EFAULT;
const char *cwd = pcb->CWD->Path.c_str();
size_t len = strlen(cwd);
if (len >= size)
std::string cwd = pcb->CWD->GetPath();
if (cwd.length() >= size)
{
warn("Buffer too small (%ld < %ld)", len, size);
return -ERANGE;
warn("Buffer too small (%ld < %ld)", cwd.length(), size);
return -linux_ERANGE;
}
strncpy(pBuf, cwd.c_str(), cwd.length());
pBuf[cwd.length()] = '\0';
debug("cwd: \"%s\" with %ld bytes", cwd.c_str(), cwd.length());
return cwd.length();
}
static int linux_chdir(SysFrm *, const char *path)
{
PCB *pcb = thisProcess;