Merge branch 'master' of github.com:wombatant/ox
This commit is contained in:
@@ -35,6 +35,8 @@ struct DirectoryListing {
|
|||||||
String name;
|
String name;
|
||||||
FileStat stat;
|
FileStat stat;
|
||||||
|
|
||||||
|
DirectoryListing() = default;
|
||||||
|
|
||||||
DirectoryListing(const char *name) {
|
DirectoryListing(const char *name) {
|
||||||
this->name = name;
|
this->name = name;
|
||||||
}
|
}
|
||||||
@@ -155,18 +157,18 @@ int Directory<InodeId_t, FsSize_t>::rmFile(const char *name) {
|
|||||||
template<typename InodeId_t, typename FsSize_t>
|
template<typename InodeId_t, typename FsSize_t>
|
||||||
int Directory<InodeId_t, FsSize_t>::copy(Directory<uint64_t, uint64_t> *dirOut) {
|
int Directory<InodeId_t, FsSize_t>::copy(Directory<uint64_t, uint64_t> *dirOut) {
|
||||||
auto current = files();
|
auto current = files();
|
||||||
auto dirBuff = (uint8_t*) dirOut;
|
auto dirOutBuff = (uint8_t*) dirOut;
|
||||||
dirBuff += sizeof(Directory<uint64_t, uint64_t>);
|
dirOutBuff += sizeof(Directory<uint64_t, uint64_t>);
|
||||||
dirOut->size = this->size;
|
dirOut->size = this->size;
|
||||||
dirOut->children = this->children;
|
dirOut->children = this->children;
|
||||||
if (current) {
|
if (current) {
|
||||||
for (uint64_t i = 0; i < this->children; i++) {
|
for (uint64_t i = 0; i < this->children; i++) {
|
||||||
auto entry = (DirectoryEntry<uint64_t>*) dirBuff;
|
auto entry = (DirectoryEntry<uint64_t>*) dirOutBuff;
|
||||||
entry->inode = current->inode;
|
entry->inode = current->inode;
|
||||||
entry->setName(current->getName());
|
entry->setName(current->getName());
|
||||||
|
|
||||||
current = (DirectoryEntry<InodeId_t>*) (((uint8_t*) current) + current->size());
|
current = (DirectoryEntry<InodeId_t>*) (((uint8_t*) current) + current->size());
|
||||||
dirBuff += entry->size();
|
dirOutBuff += entry->size();
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
@@ -181,7 +183,7 @@ int Directory<InodeId_t, FsSize_t>::ls(List *list) {
|
|||||||
if (current) {
|
if (current) {
|
||||||
for (uint64_t i = 0; i < this->children; i++) {
|
for (uint64_t i = 0; i < this->children; i++) {
|
||||||
list->push_back(current->getName());
|
list->push_back(current->getName());
|
||||||
list->at(i).stat.inode = current->inode;
|
(*list)[i].stat.inode = current->inode;
|
||||||
current = (DirectoryEntry<InodeId_t>*) (((uint8_t*) current) + current->size());
|
current = (DirectoryEntry<InodeId_t>*) (((uint8_t*) current) + current->size());
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -242,7 +244,7 @@ int FileSystem::ls(const char *path, List *list) {
|
|||||||
uint8_t dirBuff[s.size * 4];
|
uint8_t dirBuff[s.size * 4];
|
||||||
auto dir = (Directory<uint64_t, uint64_t>*) dirBuff;
|
auto dir = (Directory<uint64_t, uint64_t>*) dirBuff;
|
||||||
auto err = readDirectory(path, dir);
|
auto err = readDirectory(path, dir);
|
||||||
dir->ls(list);
|
err |= dir->ls(list);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,9 +277,6 @@ class FileSystemTemplate: public FileSystem {
|
|||||||
|
|
||||||
int stripDirectories() override;
|
int stripDirectories() override;
|
||||||
|
|
||||||
template<typename List>
|
|
||||||
int ls(const char *path, List *list);
|
|
||||||
|
|
||||||
int mkdir(const char *path) override;
|
int mkdir(const char *path) override;
|
||||||
|
|
||||||
int read(const char *path, void *buffer, size_t buffSize) override;
|
int read(const char *path, void *buffer, size_t buffSize) override;
|
||||||
@@ -354,30 +353,6 @@ int FileSystemTemplate<FileStore, FS_TYPE>::stripDirectories() {
|
|||||||
return m_store->removeAllType(FileType::FileType_Directory);
|
return m_store->removeAllType(FileType::FileType_Directory);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename FileStore, FsType FS_TYPE>
|
|
||||||
template<typename List>
|
|
||||||
int FileSystemTemplate<FileStore, FS_TYPE>::ls(const char *path, List *list) {
|
|
||||||
int err = 0;
|
|
||||||
auto inode = findInodeOf(path);
|
|
||||||
auto dirStat = stat(inode);
|
|
||||||
auto dirBuffLen = dirStat.size;
|
|
||||||
uint8_t dirBuff[dirBuffLen];
|
|
||||||
auto dir = (Directory<typename FileStore::InodeId_t, typename FileStore::FsSize_t>*) dirBuff;
|
|
||||||
|
|
||||||
err = read(dirStat.inode, dirBuff, dirBuffLen);
|
|
||||||
if (!err) {
|
|
||||||
dir->ls(list);
|
|
||||||
|
|
||||||
for (auto &i : *list) {
|
|
||||||
i.stat = stat(i.stat.inode);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename FileStore, FsType FS_TYPE>
|
template<typename FileStore, FsType FS_TYPE>
|
||||||
int FileSystemTemplate<FileStore, FS_TYPE>::mkdir(const char *path) {
|
int FileSystemTemplate<FileStore, FS_TYPE>::mkdir(const char *path) {
|
||||||
Directory<typename FileStore::InodeId_t, typename FileStore::FsSize_t> dir;
|
Directory<typename FileStore::InodeId_t, typename FileStore::FsSize_t> dir;
|
||||||
@@ -795,7 +770,7 @@ int FileSystemTemplate<FileStore, FS_TYPE>::readDirectory(const char *path, Dire
|
|||||||
auto dirStat = stat(inode);
|
auto dirStat = stat(inode);
|
||||||
auto dirBuffLen = dirStat.size;
|
auto dirBuffLen = dirStat.size;
|
||||||
uint8_t dirBuff[dirBuffLen];
|
uint8_t dirBuff[dirBuffLen];
|
||||||
auto dir = (Directory<uint64_t, uint64_t>*) dirBuff;
|
auto dir = (Directory<typename FileStore::InodeId_t, typename FileStore::FsSize_t>*) dirBuff;
|
||||||
|
|
||||||
err = read(dirStat.inode, dirBuff, dirBuffLen);
|
err = read(dirStat.inode, dirBuff, dirBuffLen);
|
||||||
if (!err) {
|
if (!err) {
|
||||||
|
|||||||
Reference in New Issue
Block a user