mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 15:48:12 +00:00
FileSystem: Port most of the code over to using custodies.
The current working directory is now stored as a custody. Likewise for a process executable file. This unbreaks /proc/PID/fd which has not been working since we made the filesystem bigger. This still needs a bunch of work, for instance when renaming or removing a file somewhere, we have to update the relevant custody links.
This commit is contained in:
parent
4cb87b1753
commit
393851418b
11 changed files with 280 additions and 220 deletions
|
@ -1,4 +1,5 @@
|
|||
#include <AK/HashTable.h>
|
||||
#include <AK/StringBuilder.h>
|
||||
#include <Kernel/FileSystem/Custody.h>
|
||||
#include <Kernel/FileSystem/Inode.h>
|
||||
#include <Kernel/Lock.h>
|
||||
|
@ -25,3 +26,16 @@ Custody::~Custody()
|
|||
LOCKER(all_custodies().lock());
|
||||
all_custodies().resource().remove(this);
|
||||
}
|
||||
|
||||
String Custody::absolute_path() const
|
||||
{
|
||||
Vector<const Custody*, 32> custody_chain;
|
||||
for (auto* custody = this; custody; custody = custody->parent())
|
||||
custody_chain.append(custody);
|
||||
StringBuilder builder;
|
||||
for (int i = custody_chain.size() - 2; i >= 0; --i) {
|
||||
builder.append('/');
|
||||
builder.append(custody_chain[i]->name().characters());
|
||||
}
|
||||
return builder.to_string();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue