2#include "namespace-file.h"
3#include "pedigree/kernel/syscallError.h"
6#include "modules/system/vfs/VFS.h"
9class NamespaceFilesystem final :
public RamFs {
11 NamespaceFilesystem() {
12 setProcessOwnership(
false);
15NamespaceFilesystem filesystem;
17class NamespaceFile final :
public File {
19 explicit NamespaceFile(
const UtsRef& space)
20 :
File(
String(
"uts"), 0, 0, 0, static_cast<uintptr_t>(space->
identity()), &filesystem, 0,
23 Attributes attributes;
24 attributes.uid = attributes.gid = 0;
25 attributes.permissions = FILE_UR | FILE_GR | FILE_OR;
26 updateAttributes(attributes, Owner |
Group | Permissions);
28 const UtsRef& space()
const {
35 SYSCALL_ERROR(NoSuchDevice);
40 bool allowResize(
size_t,
size_t)
override {
41 SYSCALL_ERROR(InvalidArgument);
47 uint64_t
readBytewise(uint64_t, uint64_t, uintptr_t,
bool)
override {
48 SYSCALL_ERROR(InvalidArgument);
51 uint64_t
writeBytewise(uint64_t, uint64_t, uintptr_t,
bool)
override {
52 SYSCALL_ERROR(InvalidArgument);
63 return UtsStatus::Missing;
64 auto* file =
new NamespaceFile(space);
66 return UtsStatus::NoMemory;
69 return UtsStatus::NoMemory;
72 return UtsStatus::Success;
75bool posix_uts_file_namespace(
File* file,
UtsRef& result) {
76 if (!file || file->getFilesystem() != &filesystem)
78 result =
static_cast<NamespaceFile*
>(file)->space();
virtual uint64_t readBytewise(uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true)
virtual bool isSeekable() const
virtual bool isBytewise() const
virtual bool allowMapping(bool shared, bool writeRequested, bool &mayWrite)
virtual uint64_t writeBytewise(uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true)