[ox/fs] Add new version of ls and make direct read return const
This commit is contained in:
parent
fef0ff58c3
commit
772cc7d954
2
deps/ox/src/ox/fs/filesystem/filesystem.cpp
vendored
2
deps/ox/src/ox/fs/filesystem/filesystem.cpp
vendored
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
namespace ox {
|
namespace ox {
|
||||||
|
|
||||||
Result<uint8_t*> FileSystem::read(FileAddress addr) noexcept {
|
Result<const uint8_t*> FileSystem::read(FileAddress addr) noexcept {
|
||||||
switch (addr.type()) {
|
switch (addr.type()) {
|
||||||
case FileAddressType::Inode:
|
case FileAddressType::Inode:
|
||||||
return read(addr.getInode().value);
|
return read(addr.getInode().value);
|
||||||
|
28
deps/ox/src/ox/fs/filesystem/filesystem.hpp
vendored
28
deps/ox/src/ox/fs/filesystem/filesystem.hpp
vendored
@ -32,19 +32,21 @@ class FileSystem {
|
|||||||
|
|
||||||
virtual Error read(const char *path, void *buffer, std::size_t buffSize) noexcept = 0;
|
virtual Error read(const char *path, void *buffer, std::size_t buffSize) noexcept = 0;
|
||||||
|
|
||||||
virtual Result<uint8_t*> read(const char *path) noexcept = 0;
|
virtual Result<const uint8_t*> read(const char *path) noexcept = 0;
|
||||||
|
|
||||||
virtual Error read(uint64_t inode, void *buffer, std::size_t size) noexcept = 0;
|
virtual Error read(uint64_t inode, void *buffer, std::size_t size) noexcept = 0;
|
||||||
|
|
||||||
virtual Error read(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept = 0;
|
virtual Error read(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept = 0;
|
||||||
|
|
||||||
virtual Result<uint8_t*> read(uint64_t inode) noexcept = 0;
|
virtual Result<const uint8_t*> read(uint64_t inode) noexcept = 0;
|
||||||
|
|
||||||
Error read(FileAddress addr, void *buffer, std::size_t size) noexcept;
|
Error read(FileAddress addr, void *buffer, std::size_t size) noexcept;
|
||||||
|
|
||||||
Error read(FileAddress addr, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept;
|
Error read(FileAddress addr, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept;
|
||||||
|
|
||||||
Result<uint8_t*> read(FileAddress addr) noexcept;
|
Result<const uint8_t*> read(FileAddress addr) noexcept;
|
||||||
|
|
||||||
|
virtual Result<Vector<String>> ls(const char *dir) noexcept = 0;
|
||||||
|
|
||||||
virtual Error remove(const char *path, bool recursive = false) noexcept = 0;
|
virtual Error remove(const char *path, bool recursive = false) noexcept = 0;
|
||||||
|
|
||||||
@ -118,13 +120,15 @@ class FileSystemTemplate: public FileSystem {
|
|||||||
|
|
||||||
Error read(const char *path, void *buffer, std::size_t buffSize) noexcept override;
|
Error read(const char *path, void *buffer, std::size_t buffSize) noexcept override;
|
||||||
|
|
||||||
Result<uint8_t*> read(const char*) noexcept override;
|
Result<const uint8_t*> read(const char*) noexcept override;
|
||||||
|
|
||||||
Error read(uint64_t inode, void *buffer, std::size_t size) noexcept override;
|
Error read(uint64_t inode, void *buffer, std::size_t size) noexcept override;
|
||||||
|
|
||||||
Error read(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept override;
|
Error read(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept override;
|
||||||
|
|
||||||
Result<uint8_t*> read(uint64_t) noexcept override;
|
Result<const uint8_t*> read(uint64_t) noexcept override;
|
||||||
|
|
||||||
|
Result<Vector<String>> ls(const char *dir) noexcept override;
|
||||||
|
|
||||||
template<typename F>
|
template<typename F>
|
||||||
Error ls(const char *dir, F cb);
|
Error ls(const char *dir, F cb);
|
||||||
@ -241,7 +245,7 @@ Error FileSystemTemplate<FileStore, Directory>::read(const char *path, void *buf
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename FileStore, typename Directory>
|
template<typename FileStore, typename Directory>
|
||||||
Result<uint8_t*> FileSystemTemplate<FileStore, Directory>::read(const char *path) noexcept {
|
Result<const uint8_t*> FileSystemTemplate<FileStore, Directory>::read(const char *path) noexcept {
|
||||||
auto fd = fileSystemData();
|
auto fd = fileSystemData();
|
||||||
oxReturnError(fd.error);
|
oxReturnError(fd.error);
|
||||||
Directory rootDir(m_fs, fd.value.rootDirInode);
|
Directory rootDir(m_fs, fd.value.rootDirInode);
|
||||||
@ -261,7 +265,7 @@ Error FileSystemTemplate<FileStore, Directory>::read(uint64_t inode, std::size_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename FileStore, typename Directory>
|
template<typename FileStore, typename Directory>
|
||||||
Result<uint8_t*> FileSystemTemplate<FileStore, Directory>::read(uint64_t inode) noexcept {
|
Result<const uint8_t*> FileSystemTemplate<FileStore, Directory>::read(uint64_t inode) noexcept {
|
||||||
auto data = m_fs.read(inode);
|
auto data = m_fs.read(inode);
|
||||||
if (!data.valid()) {
|
if (!data.valid()) {
|
||||||
return OxError(1);
|
return OxError(1);
|
||||||
@ -269,6 +273,16 @@ Result<uint8_t*> FileSystemTemplate<FileStore, Directory>::read(uint64_t inode)
|
|||||||
return data.get();
|
return data.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename FileStore, typename Directory>
|
||||||
|
Result<Vector<String>> FileSystemTemplate<FileStore, Directory>::ls(const char *path) noexcept {
|
||||||
|
Vector<String> out;
|
||||||
|
oxReturnError(ls(path, [&out](const char *name, typename FileStore::InodeId_t) {
|
||||||
|
out.emplace_back(name);
|
||||||
|
return OxError(0);
|
||||||
|
}));
|
||||||
|
return ox::move(out);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename FileStore, typename Directory>
|
template<typename FileStore, typename Directory>
|
||||||
template<typename F>
|
template<typename F>
|
||||||
Error FileSystemTemplate<FileStore, Directory>::ls(const char *path, F cb) {
|
Error FileSystemTemplate<FileStore, Directory>::ls(const char *path, F cb) {
|
||||||
|
16
deps/ox/src/ox/fs/filesystem/passthroughfs.cpp
vendored
16
deps/ox/src/ox/fs/filesystem/passthroughfs.cpp
vendored
@ -74,7 +74,7 @@ Error PassThroughFS::read(const char *path, void *buffer, std::size_t buffSize)
|
|||||||
return OxError(0);
|
return OxError(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<uint8_t*> PassThroughFS::read(const char*) noexcept {
|
Result<const uint8_t*> PassThroughFS::read(const char*) noexcept {
|
||||||
return OxError(1);
|
return OxError(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,10 +88,22 @@ Error PassThroughFS::read(uint64_t, std::size_t, std::size_t, void*, std::size_t
|
|||||||
return OxError(1);
|
return OxError(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<uint8_t*> PassThroughFS::read(uint64_t) noexcept {
|
Result<const uint8_t*> PassThroughFS::read(uint64_t) noexcept {
|
||||||
return OxError(1);
|
return OxError(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result<Vector<String>> PassThroughFS::ls(const char *dir) noexcept {
|
||||||
|
Vector<String> out;
|
||||||
|
std::error_code ec;
|
||||||
|
const auto di = std::filesystem::directory_iterator(m_path / stripSlash(dir), ec);
|
||||||
|
oxReturnError(OxError(ec.value(), "PassThroughFS: ls failed"));
|
||||||
|
for (auto &p : di) {
|
||||||
|
auto u8p = p.path().filename().u8string();
|
||||||
|
out.emplace_back(ox::bit_cast<const char*>(u8p.c_str()));
|
||||||
|
}
|
||||||
|
return ox::move(out);
|
||||||
|
}
|
||||||
|
|
||||||
Error PassThroughFS::remove(const char *path, bool recursive) noexcept {
|
Error PassThroughFS::remove(const char *path, bool recursive) noexcept {
|
||||||
if (recursive) {
|
if (recursive) {
|
||||||
return OxError(std::filesystem::remove_all(m_path / stripSlash(path)) != 0);
|
return OxError(std::filesystem::remove_all(m_path / stripSlash(path)) != 0);
|
||||||
|
@ -43,13 +43,15 @@ class PassThroughFS: public FileSystem {
|
|||||||
|
|
||||||
Error read(const char *path, void *buffer, std::size_t buffSize) noexcept override;
|
Error read(const char *path, void *buffer, std::size_t buffSize) noexcept override;
|
||||||
|
|
||||||
Result<uint8_t*> read(const char*) noexcept override;
|
Result<const uint8_t*> read(const char*) noexcept override;
|
||||||
|
|
||||||
Error read(uint64_t inode, void *buffer, std::size_t size) noexcept override;
|
Error read(uint64_t inode, void *buffer, std::size_t size) noexcept override;
|
||||||
|
|
||||||
Error read(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept override;
|
Error read(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept override;
|
||||||
|
|
||||||
Result<uint8_t*> read(uint64_t) noexcept override;
|
Result<const uint8_t*> read(uint64_t) noexcept override;
|
||||||
|
|
||||||
|
Result<Vector<String>> ls(const char *dir) noexcept override;
|
||||||
|
|
||||||
template<typename F>
|
template<typename F>
|
||||||
Error ls(const char *dir, F cb) noexcept;
|
Error ls(const char *dir, F cb) noexcept;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user