[ox/fs] Add new FileStore write

This commit is contained in:
2018-04-26 21:11:48 -05:00
parent 59cc34b4e8
commit 24fbb8ba86
9 changed files with 81 additions and 35 deletions

View File

@@ -39,6 +39,8 @@ class FileStore {
virtual Error read(InodeId_t id, FsSize_t readStart, FsSize_t readSize, void *data, FsSize_t *size) = 0;
virtual ValErr<const uint8_t*> read(InodeId_t id) = 0;
virtual StatInfo stat(InodeId_t id) = 0;
virtual InodeId_t spaceNeeded(FsSize_t size) = 0;

View File

@@ -22,7 +22,10 @@ struct __attribute__((packed)) FileStoreItem: public ptrarith::Item<size_t> {
ox::LittleEndian<size_t> left = 0;
ox::LittleEndian<size_t> right = 0;
explicit FileStoreItem(size_t size): ptrarith::Item<size_t>(size) {
FileStoreItem() = default;
explicit FileStoreItem(size_t size) {
this->setSize(size);
}
/**
@@ -35,6 +38,7 @@ struct __attribute__((packed)) FileStoreItem: public ptrarith::Item<size_t> {
ptrarith::Ptr<uint8_t, size_t> data() {
return ptrarith::Ptr<uint8_t, size_t>(this, this->size(), sizeof(*this), this->size() - sizeof(*this));
}
};
@@ -42,6 +46,7 @@ template<typename size_t>
class FileStoreTemplate: public FileStore {
private:
using Item = FileStoreItem<size_t>;
using ItemPtr = typename ptrarith::NodeBuffer<size_t, FileStoreItem<size_t>>::ItemPtr;
using Buffer = ptrarith::NodeBuffer<size_t, FileStoreItem<size_t>>;
@@ -69,6 +74,8 @@ class FileStoreTemplate: public FileStore {
Error read(InodeId_t id, FsSize_t readStart, FsSize_t readSize, void *data, FsSize_t *size);
ValErr<const uint8_t*> read(InodeId_t id);
/**
* Reads the "file" at the given id. You are responsible for freeing
* the data when done with it.
@@ -304,6 +311,11 @@ int FileStoreTemplate<size_t>::read(InodeId_t id, FsSize_t readStart,
return 1;
}
template<typename size_t>
ValErr<const uint8_t*> FileStoreTemplate<size_t>::read(InodeId_t id) {
return reinterpret_cast<uint8_t*>(find(id).get());
}
template<typename size_t>
typename FileStoreTemplate<size_t>::StatInfo FileStoreTemplate<size_t>::stat(InodeId_t id) {
auto inode = find(id);