mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-07-09 06:19:19 +00:00
Update kernel
This commit is contained in:
@ -282,24 +282,21 @@ namespace vfs
|
||||
}
|
||||
}
|
||||
|
||||
if (GetChild(SegmentName, CurrentParent) == nullptr)
|
||||
{
|
||||
Node *NewNode = new Node(CurrentParent,
|
||||
SegmentName,
|
||||
NodeType::DIRECTORY);
|
||||
|
||||
CurrentParent = NewNode;
|
||||
CurrentParent->Type = Type;
|
||||
CurrentParent->FullPath = CleanPath;
|
||||
}
|
||||
if (GetChild(SegmentName, CurrentParent) != nullptr)
|
||||
CurrentParent = GetChild(SegmentName, CurrentParent);
|
||||
else
|
||||
{
|
||||
CurrentParent = GetChild(SegmentName, CurrentParent);
|
||||
CurrentParent = new Node(CurrentParent,
|
||||
SegmentName,
|
||||
NodeType::DIRECTORY);
|
||||
}
|
||||
|
||||
delete[] SegmentName;
|
||||
} while (cwk_path_get_next_segment(&segment));
|
||||
|
||||
CurrentParent->Type = Type;
|
||||
// CurrentParent->FullPath = CleanPath;
|
||||
|
||||
vfsdbg("Virtual::Create()->\"%s\"", CurrentParent->Name);
|
||||
#ifdef DEBUG
|
||||
VirtualLock.Unlock();
|
||||
@ -315,6 +312,25 @@ namespace vfs
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Node *Virtual::CreateLink(const char *Path, const char *Target, Node *Parent)
|
||||
{
|
||||
Node *node = this->Create(Path, NodeType::SYMLINK, Parent);
|
||||
if (node)
|
||||
{
|
||||
node->Symlink = new char[strlen(Target) + 1];
|
||||
strncpy((char *)node->Symlink,
|
||||
Target,
|
||||
strlen(Target));
|
||||
|
||||
node->SymlinkTarget = node->vFS->GetNodeFromPath(node->Symlink);
|
||||
return node;
|
||||
}
|
||||
|
||||
error("Failed to create link \"%s\" -> \"%s\"",
|
||||
Path, Target);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int Virtual::Delete(const char *Path, bool Recursive, Node *Parent)
|
||||
{
|
||||
vfsdbg("Virtual::Delete( Path: \"%s\" Parent: \"%s\" )",
|
||||
@ -337,8 +353,14 @@ namespace vfs
|
||||
}
|
||||
|
||||
Node *NodeToDelete = GetNodeFromPath(CleanPath, Parent);
|
||||
|
||||
if (!NodeToDelete->References.empty())
|
||||
fixme("Path \"%s\" is referenced by %d objects.",
|
||||
CleanPath, NodeToDelete->References.size());
|
||||
|
||||
delete[] CleanPath;
|
||||
return NodeToDelete->Delete(Recursive);
|
||||
delete NodeToDelete;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Virtual::Delete(Node *Path, bool Recursive, Node *Parent)
|
||||
@ -385,6 +407,14 @@ namespace vfs
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Node *Virtual::CreateIfNotExists(const char *Path, NodeType Type, Node *Parent)
|
||||
{
|
||||
Node *node = GetNodeFromPath(Path, Parent);
|
||||
if (node)
|
||||
return node;
|
||||
return Create(Path, Type, Parent);
|
||||
}
|
||||
|
||||
Virtual::Virtual()
|
||||
{
|
||||
SmartLock(VirtualLock);
|
||||
|
Reference in New Issue
Block a user