[ox/fs] More cleanup and bug fix from previous cleanup
This commit is contained in:
parent
702b166b8d
commit
2a58490521
@ -315,7 +315,7 @@ Error FileStoreTemplate<size_t>::remove(uint64_t id) {
|
|||||||
|
|
||||||
template<typename size_t>
|
template<typename size_t>
|
||||||
Error FileStoreTemplate<size_t>::read(uint64_t id, void *out, FsSize_t outSize, FsSize_t *size) const {
|
Error FileStoreTemplate<size_t>::read(uint64_t id, void *out, FsSize_t outSize, FsSize_t *size) const {
|
||||||
oxTracef("ox.fs.FileStoreTemplate.read", "Attempting to read from inode {}", id);
|
oxTracef("ox.fs.FileStoreTemplate.read", "Attempting to read inode {}", id);
|
||||||
auto src = find(static_cast<size_t>(id));
|
auto src = find(static_cast<size_t>(id));
|
||||||
// error check
|
// error check
|
||||||
if (!src.valid()) {
|
if (!src.valid()) {
|
||||||
@ -333,7 +333,7 @@ Error FileStoreTemplate<size_t>::read(uint64_t id, void *out, FsSize_t outSize,
|
|||||||
oxTracef("ox.fs.FileStoreTemplate.read.fail", "Could not read data section of item: {}", id);
|
oxTracef("ox.fs.FileStoreTemplate.read.fail", "Could not read data section of item: {}", id);
|
||||||
oxTracef("ox.fs.FileStoreTemplate.read.fail",
|
oxTracef("ox.fs.FileStoreTemplate.read.fail",
|
||||||
"Item data section size: {}, Expected size: {}", srcData.size(), outSize);
|
"Item data section size: {}, Expected size: {}", srcData.size(), outSize);
|
||||||
return OxError(1);
|
return OxError(1, "Invalid inode");
|
||||||
}
|
}
|
||||||
|
|
||||||
ox::memcpy(out, srcData, srcData.size());
|
ox::memcpy(out, srcData, srcData.size());
|
||||||
@ -341,7 +341,7 @@ Error FileStoreTemplate<size_t>::read(uint64_t id, void *out, FsSize_t outSize,
|
|||||||
*size = src.size();
|
*size = src.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
return OxError(0);
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename size_t>
|
template<typename size_t>
|
||||||
|
4
deps/ox/src/ox/fs/filesystem/directory.hpp
vendored
4
deps/ox/src/ox/fs/filesystem/directory.hpp
vendored
@ -44,6 +44,7 @@ struct OX_PACKED DirectoryEntry {
|
|||||||
constexpr DirectoryEntry() noexcept = default;
|
constexpr DirectoryEntry() noexcept = default;
|
||||||
|
|
||||||
Error init(InodeId_t inode, ox::CRStringView name, size_t bufferSize) noexcept {
|
Error init(InodeId_t inode, ox::CRStringView name, size_t bufferSize) noexcept {
|
||||||
|
oxTracef("ox.fs.DirectoryEntry.init", "inode: {}, name: {}, bufferSize: {}", inode, name, bufferSize);
|
||||||
m_bufferSize = static_cast<InodeId_t>(bufferSize);
|
m_bufferSize = static_cast<InodeId_t>(bufferSize);
|
||||||
auto d = data();
|
auto d = data();
|
||||||
if (d.valid()) {
|
if (d.valid()) {
|
||||||
@ -190,10 +191,10 @@ template<typename FileStore, typename InodeId_t>
|
|||||||
Error Directory<FileStore, InodeId_t>::write(PathIterator path, uint64_t inode64) noexcept {
|
Error Directory<FileStore, InodeId_t>::write(PathIterator path, uint64_t inode64) noexcept {
|
||||||
const auto inode = static_cast<InodeId_t>(inode64);
|
const auto inode = static_cast<InodeId_t>(inode64);
|
||||||
ox::StringView name;
|
ox::StringView name;
|
||||||
oxReturnError(path.next(name));
|
|
||||||
if (path.next().hasNext()) { // not yet at target directory, recurse to next one
|
if (path.next().hasNext()) { // not yet at target directory, recurse to next one
|
||||||
oxTracef("ox.fs.Directory.write", "Attempting to write to next sub-Directory: {} of {}",
|
oxTracef("ox.fs.Directory.write", "Attempting to write to next sub-Directory: {} of {}",
|
||||||
name, path.fullPath());
|
name, path.fullPath());
|
||||||
|
oxReturnError(path.get(name));
|
||||||
oxRequire(nextChild, findEntry(name));
|
oxRequire(nextChild, findEntry(name));
|
||||||
oxTracef("ox.fs.Directory.write", "{}: {}", name, nextChild);
|
oxTracef("ox.fs.Directory.write", "{}: {}", name, nextChild);
|
||||||
if (nextChild) {
|
if (nextChild) {
|
||||||
@ -204,6 +205,7 @@ Error Directory<FileStore, InodeId_t>::write(PathIterator path, uint64_t inode64
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
oxTrace("ox.fs.Directory.write", path.fullPath());
|
oxTrace("ox.fs.Directory.write", path.fullPath());
|
||||||
|
oxReturnError(path.next(name));
|
||||||
// insert the new entry on this directory
|
// insert the new entry on this directory
|
||||||
// get the name
|
// get the name
|
||||||
// find existing version of directory
|
// find existing version of directory
|
||||||
|
17
deps/ox/src/ox/fs/filesystem/filesystem.hpp
vendored
17
deps/ox/src/ox/fs/filesystem/filesystem.hpp
vendored
@ -323,6 +323,7 @@ Error FileSystemTemplate<FileStore, Directory>::move(CRStringView src, CRStringV
|
|||||||
|
|
||||||
template<typename FileStore, typename Directory>
|
template<typename FileStore, typename Directory>
|
||||||
Error FileSystemTemplate<FileStore, Directory>::readFilePath(CRStringView path, void *buffer, std::size_t buffSize) noexcept {
|
Error FileSystemTemplate<FileStore, Directory>::readFilePath(CRStringView path, void *buffer, std::size_t buffSize) noexcept {
|
||||||
|
oxTrace("ox.fs.FileSystemTemplate.readFilePath", path);
|
||||||
oxRequire(fd, fileSystemData());
|
oxRequire(fd, fileSystemData());
|
||||||
Directory rootDir(m_fs, fd.rootDirInode);
|
Directory rootDir(m_fs, fd.rootDirInode);
|
||||||
oxRequire(s, stat(path));
|
oxRequire(s, stat(path));
|
||||||
@ -342,6 +343,7 @@ Result<const char*> FileSystemTemplate<FileStore, Directory>::directAccessPath(C
|
|||||||
|
|
||||||
template<typename FileStore, typename Directory>
|
template<typename FileStore, typename Directory>
|
||||||
Error FileSystemTemplate<FileStore, Directory>::readFileInode(uint64_t inode, void *buffer, std::size_t buffSize) noexcept {
|
Error FileSystemTemplate<FileStore, Directory>::readFileInode(uint64_t inode, void *buffer, std::size_t buffSize) noexcept {
|
||||||
|
oxTracef("ox.fs.FileSystemTemplate.readFileInode", "{}", inode);
|
||||||
oxRequire(s, stat(inode));
|
oxRequire(s, stat(inode));
|
||||||
if (s.size > buffSize) {
|
if (s.size > buffSize) {
|
||||||
return OxError(1, "Buffer to small to load file");
|
return OxError(1, "Buffer to small to load file");
|
||||||
@ -409,24 +411,29 @@ Error FileSystemTemplate<FileStore, Directory>::resize() noexcept {
|
|||||||
template<typename FileStore, typename Directory>
|
template<typename FileStore, typename Directory>
|
||||||
Error FileSystemTemplate<FileStore, Directory>::resize(uint64_t size, void *buffer) noexcept {
|
Error FileSystemTemplate<FileStore, Directory>::resize(uint64_t size, void *buffer) noexcept {
|
||||||
oxReturnError(m_fs.resize(static_cast<size_t>(size), buffer));
|
oxReturnError(m_fs.resize(static_cast<size_t>(size), buffer));
|
||||||
return OxError(0);
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename FileStore, typename Directory>
|
template<typename FileStore, typename Directory>
|
||||||
Error FileSystemTemplate<FileStore, Directory>::writeFilePath(CRStringView path, const void *buffer, uint64_t size, FileType fileType) noexcept {
|
Error FileSystemTemplate<FileStore, Directory>::writeFilePath(
|
||||||
|
CRStringView path,
|
||||||
|
const void *buffer,
|
||||||
|
uint64_t size,
|
||||||
|
FileType fileType) noexcept {
|
||||||
|
oxTrace("ox.fs.FileSystemTemplate.writeFilePath", path);
|
||||||
auto [inode, err] = find(path);
|
auto [inode, err] = find(path);
|
||||||
if (err) {
|
if (err) {
|
||||||
oxRequire(generatedId, m_fs.generateInodeId());
|
oxReturnError(m_fs.generateInodeId().moveTo(inode));
|
||||||
inode = generatedId;
|
|
||||||
oxRequireM(rootDir, this->rootDir());
|
oxRequireM(rootDir, this->rootDir());
|
||||||
oxReturnError(rootDir.write(path, inode));
|
oxReturnError(rootDir.write(path, inode));
|
||||||
}
|
}
|
||||||
oxReturnError(writeFileInode(inode, buffer, size, fileType));
|
oxReturnError(writeFileInode(inode, buffer, size, fileType));
|
||||||
return OxError(0);
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename FileStore, typename Directory>
|
template<typename FileStore, typename Directory>
|
||||||
Error FileSystemTemplate<FileStore, Directory>::writeFileInode(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept {
|
Error FileSystemTemplate<FileStore, Directory>::writeFileInode(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept {
|
||||||
|
oxTrace("ox.fs.FileSystemTemplate.writeFileInode", ox::itoa(inode));
|
||||||
return m_fs.write(inode, buffer, static_cast<size_t>(size), static_cast<uint8_t>(fileType));
|
return m_fs.write(inode, buffer, static_cast<size_t>(size), static_cast<uint8_t>(fileType));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +100,6 @@ Result<FileStat> PassThroughFS::statPath(CRStringView path) const noexcept {
|
|||||||
FileType::Directory : FileType::NormalFile;
|
FileType::Directory : FileType::NormalFile;
|
||||||
oxTracef("ox.fs.PassThroughFS.statInode", "{} {}", ec.message(), path);
|
oxTracef("ox.fs.PassThroughFS.statInode", "{} {}", ec.message(), path);
|
||||||
const uint64_t size = type == FileType::Directory ? 0 : std::filesystem::file_size(p, ec);
|
const uint64_t size = type == FileType::Directory ? 0 : std::filesystem::file_size(p, ec);
|
||||||
oxTracef("ox.fs.PassThroughFS.statInode", "{} {}", ec.message(), path);
|
|
||||||
oxTracef("ox.fs.PassThroughFS.statInode.size", "{} {}", path, size);
|
oxTracef("ox.fs.PassThroughFS.statInode.size", "{} {}", path, size);
|
||||||
oxReturnError(OxError(static_cast<ox::ErrorCode>(ec.value()), "PassThroughFS: stat failed"));
|
oxReturnError(OxError(static_cast<ox::ErrorCode>(ec.value()), "PassThroughFS: stat failed"));
|
||||||
return FileStat{0, 0, size, type};
|
return FileStat{0, 0, size, type};
|
||||||
|
@ -29,8 +29,6 @@ class PathIterator {
|
|||||||
|
|
||||||
Error dirPath(char *pathOut, std::size_t pathOutSize);
|
Error dirPath(char *pathOut, std::size_t pathOutSize);
|
||||||
|
|
||||||
Error fileName(char *out, std::size_t outSize);
|
|
||||||
|
|
||||||
Error next(StringView &fileName);
|
Error next(StringView &fileName);
|
||||||
|
|
||||||
Error get(StringView &fileName);
|
Error get(StringView &fileName);
|
||||||
|
2
deps/ox/src/ox/fs/ptrarith/nodebuffer.hpp
vendored
2
deps/ox/src/ox/fs/ptrarith/nodebuffer.hpp
vendored
@ -174,7 +174,7 @@ template<typename size_t, typename Item>
|
|||||||
NodeBuffer<size_t, Item>::NodeBuffer(std::size_t size) noexcept {
|
NodeBuffer<size_t, Item>::NodeBuffer(std::size_t size) noexcept {
|
||||||
m_header.size = static_cast<size_t>(size);
|
m_header.size = static_cast<size_t>(size);
|
||||||
ox::memset(this + 1, 0, size - sizeof(*this));
|
ox::memset(this + 1, 0, size - sizeof(*this));
|
||||||
oxTracef("ox.NodeBuffer.constructor", "{}", m_header.firstItem.get());
|
oxTracef("ox.ptrarith.NodeBuffer.constructor", "{}", m_header.firstItem.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename size_t, typename Item>
|
template<typename size_t, typename Item>
|
||||||
|
4
deps/ox/src/ox/fs/ptrarith/ptr.hpp
vendored
4
deps/ox/src/ox/fs/ptrarith/ptr.hpp
vendored
@ -224,7 +224,7 @@ constexpr const Ptr<SubT, size_t, sizeof(T)> Ptr<T, size_t, minOffset>::subPtr(s
|
|||||||
template<typename T, typename size_t, size_t minOffset>
|
template<typename T, typename size_t, size_t minOffset>
|
||||||
template<typename SubT>
|
template<typename SubT>
|
||||||
constexpr const Ptr<SubT, size_t, sizeof(T)> Ptr<T, size_t, minOffset>::subPtr(size_t offset) const noexcept {
|
constexpr const Ptr<SubT, size_t, sizeof(T)> Ptr<T, size_t, minOffset>::subPtr(size_t offset) const noexcept {
|
||||||
oxTracef("ox.fs.Ptr.subPtr", "{} {} {} {} {}", m_itemOffset, this->size(), offset, m_itemSize, (m_itemSize - offset));
|
oxTracef("ox.ptrarith.Ptr.subPtr", "{} {} {} {} {}", m_itemOffset, this->size(), offset, m_itemSize, (m_itemSize - offset));
|
||||||
return subPtr<SubT>(offset, m_itemSize - offset);
|
return subPtr<SubT>(offset, m_itemSize - offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,7 +237,7 @@ constexpr Ptr<SubT, size_t, sizeof(T)> Ptr<T, size_t, minOffset>::subPtr(size_t
|
|||||||
template<typename T, typename size_t, size_t minOffset>
|
template<typename T, typename size_t, size_t minOffset>
|
||||||
template<typename SubT>
|
template<typename SubT>
|
||||||
constexpr Ptr<SubT, size_t, sizeof(T)> Ptr<T, size_t, minOffset>::subPtr(size_t offset) noexcept {
|
constexpr Ptr<SubT, size_t, sizeof(T)> Ptr<T, size_t, minOffset>::subPtr(size_t offset) noexcept {
|
||||||
oxTracef("ox.fs.Ptr.subPtr", "{} {} {} {} {}", m_itemOffset, this->size(), offset, m_itemSize, (m_itemSize - offset));
|
oxTracef("ox.ptrarith.Ptr.subPtr", "{} {} {} {} {}", m_itemOffset, this->size(), offset, m_itemSize, (m_itemSize - offset));
|
||||||
return subPtr<SubT>(offset, m_itemSize - offset);
|
return subPtr<SubT>(offset, m_itemSize - offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user