Merge branch 'master' of github.com:wombatant/ox

This commit is contained in:
2017-05-19 21:05:57 -05:00
+9 -34
View File
@@ -35,6 +35,8 @@ struct DirectoryListing {
String name;
FileStat stat;
DirectoryListing() = default;
DirectoryListing(const char *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>
int Directory<InodeId_t, FsSize_t>::copy(Directory<uint64_t, uint64_t> *dirOut) {
auto current = files();
auto dirBuff = (uint8_t*) dirOut;
dirBuff += sizeof(Directory<uint64_t, uint64_t>);
auto dirOutBuff = (uint8_t*) dirOut;
dirOutBuff += sizeof(Directory<uint64_t, uint64_t>);
dirOut->size = this->size;
dirOut->children = this->children;
if (current) {
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->setName(current->getName());
current = (DirectoryEntry<InodeId_t>*) (((uint8_t*) current) + current->size());
dirBuff += entry->size();
dirOutBuff += entry->size();
}
return 0;
} else {
@@ -181,7 +183,7 @@ int Directory<InodeId_t, FsSize_t>::ls(List *list) {
if (current) {
for (uint64_t i = 0; i < this->children; i++) {
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());
}
return 0;
@@ -242,7 +244,7 @@ int FileSystem::ls(const char *path, List *list) {
uint8_t dirBuff[s.size * 4];
auto dir = (Directory<uint64_t, uint64_t>*) dirBuff;
auto err = readDirectory(path, dir);
dir->ls(list);
err |= dir->ls(list);
return err;
}
@@ -275,9 +277,6 @@ class FileSystemTemplate: public FileSystem {
int stripDirectories() override;
template<typename List>
int ls(const char *path, List *list);
int mkdir(const char *path) 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);
}
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>
int FileSystemTemplate<FileStore, FS_TYPE>::mkdir(const char *path) {
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 dirBuffLen = dirStat.size;
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);
if (!err) {