Started on FileSystem format.

This commit is contained in:
2016-06-26 17:54:12 -05:00
parent 8e4c52d2ab
commit def16ce43f
5 changed files with 81 additions and 4 deletions
+1
View File
@@ -13,6 +13,7 @@ if(NOT MSVC)
-fno-exceptions
-fno-rtti
-Wsign-compare
-Wunused-variable
#-Werror
#--analyze
#-Os # GCC size optimization flag
+47
View File
@@ -13,6 +13,8 @@
namespace ox {
namespace fs {
using namespace std;
struct FileStat {
uint64_t inode;
uint64_t size;
@@ -22,16 +24,42 @@ template<typename FileStore>
class FileSystem {
private:
struct DirectoryEntry {
typename FileStore::InodeId_t inode;
uint8_t nameLen;
char name;
};
struct Directory {
/**
* Number of files in this directory.
*/
typename FileStore::InodeId_t size = 0;
DirectoryEntry *files() {
return (DirectoryEntry*) (this + 1);
}
};
FileStore *store = nullptr;
public:
int mkdir(const char *path);
int read(const char *path, void *buffer);
FileStat stat(const char *path);
FileStat stat(typename FileStore::InodeId_t inode);
static uint8_t *format(uint8_t *buffer, typename FileStore::FsSize_t size);
};
template<typename FileStore>
int FileSystem<FileStore>::mkdir(const char *path) {
return 0;
}
template<typename FileStore>
FileStat FileSystem<FileStore>::stat(const char *path) {
FileStat stat;
@@ -47,6 +75,25 @@ FileStat FileSystem<FileStore>::stat(typename FileStore::InodeId_t inode) {
return stat;
}
template<typename FileStore>
uint8_t *FileSystem<FileStore>::format(uint8_t *buffer, typename FileStore::FsSize_t size) {
buffer = FileStore::format(buffer, size);
char dirBuff[sizeof(Directory) + sizeof(Directory)];
Directory &dir = *((Directory*) dirBuff);
DirectoryEntry entry;
entry.inode = 2;
entry.name = '/';
entry.nameLen = 1;
if (buffer) {
uint32_t err;
FileStore fs(buffer, buffer + size, &err);
dir.files();
}
return buffer;
}
typedef FileSystem<FileStore16> FileSystem16;
typedef FileSystem<FileStore32> FileSystem32;
typedef FileSystem<FileStore64> FileSystem64;
+11 -4
View File
@@ -1,8 +1,13 @@
cmake_minimum_required(VERSION 2.8)
add_executable(
Format
format.cpp
FileStoreFormat
filestore_format.cpp
)
add_executable(
FileSystemFormat
filesystem_format.cpp
)
add_executable(
@@ -10,8 +15,10 @@ add_executable(
filestoreio.cpp
)
target_link_libraries(Format OxFS OxStd)
target_link_libraries(FileStoreFormat OxFS OxStd)
target_link_libraries(FileSystemFormat OxFS OxStd)
target_link_libraries(FileStoreIO OxFS OxStd)
add_test("Format" Format)
add_test("FileStoreFormat" FileStoreFormat)
add_test("FileSystemFormat" FileSystemFormat)
add_test("FileStoreIO" FileStoreIO)
+22
View File
@@ -0,0 +1,22 @@
/*
* Copyright 2015 - 2016 gtalent2@gmail.com
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <ox/fs/filesystem.hpp>
using namespace ox::fs;
template<typename FileSystem>
int test() {
const auto size = 65535;
uint8_t volume[size];
FileSystem::format(volume, size);
return 0;
}
int main() {
return test<FileSystem16>() | test<FileSystem32>() | test<FileSystem64>();
}