This commit is contained in:
2016-09-08 20:27:57 -05:00
parent ad90007bdc
commit c66533fc70
8 changed files with 68 additions and 71 deletions
+23 -26
View File
@@ -16,13 +16,13 @@ template<typename FsT>
class FileStore { class FileStore {
public: public:
typedef ox::std::uint16_t InodeId_t; typedef uint16_t InodeId_t;
typedef FsT FsSize_t; typedef FsT FsSize_t;
struct StatInfo { struct StatInfo {
InodeId_t inodeId; InodeId_t inodeId;
FsSize_t size; FsSize_t size;
ox::std::uint8_t fileType; uint8_t fileType;
}; };
private: private:
@@ -31,20 +31,17 @@ class FileStore {
FsSize_t prev, next; FsSize_t prev, next;
FsSize_t dataLen; FsSize_t dataLen;
InodeId_t id; InodeId_t id;
ox::std::uint8_t refs; uint8_t refs;
ox::std::uint8_t fileType; uint8_t fileType;
FsSize_t left, right; FsSize_t left, right;
FsSize_t size(); FsSize_t size();
void setId(InodeId_t); void setId(InodeId_t);
void setData(void *data, FsSize_t size); void setData(void *data, FsSize_t size);
void *data(); void *data();
private:
Inode() = default;
}; };
ox::std::uint32_t m_fsType; uint32_t m_fsType;
FsSize_t m_size; FsSize_t m_size;
FsSize_t m_rootInode; FsSize_t m_rootInode;
@@ -55,7 +52,7 @@ class FileStore {
* @param data the contents of the file * @param data the contents of the file
* @param dataLen the number of bytes data points to * @param dataLen the number of bytes data points to
*/ */
int write(void *data, FsSize_t dataLen, ox::std::uint8_t fileType = 0); int write(void *data, FsSize_t dataLen, uint8_t fileType = 0);
/** /**
* Writes the given data to a "file" with the given id. * Writes the given data to a "file" with the given id.
@@ -63,7 +60,7 @@ class FileStore {
* @param data the contents of the file * @param data the contents of the file
* @param dataLen the number of bytes data points to * @param dataLen the number of bytes data points to
*/ */
int write(InodeId_t id, void *data, FsSize_t dataLen, ox::std::uint8_t fileType = 0); int write(InodeId_t id, void *data, FsSize_t dataLen, uint8_t fileType = 0);
/** /**
* Removes the inode of the given ID. * Removes the inode of the given ID.
@@ -95,9 +92,9 @@ class FileStore {
*/ */
FsSize_t size(); FsSize_t size();
static ox::std::uint8_t version(); static uint8_t version();
static ox::std::uint8_t *format(ox::std::uint8_t *buffer, FsSize_t size, ox::std::uint32_t fsType = 0); static uint8_t *format(uint8_t *buffer, FsSize_t size, uint32_t fsType = 0);
private: private:
/** /**
@@ -169,11 +166,11 @@ class FileStore {
*/ */
void updateInodeAddress(InodeId_t id, FsSize_t addr); void updateInodeAddress(InodeId_t id, FsSize_t addr);
ox::std::uint8_t *begin() { uint8_t *begin() {
return (ox::std::uint8_t*) this; return (uint8_t*) this;
} }
ox::std::uint8_t *end() { uint8_t *end() {
return begin() + this->m_size; return begin() + this->m_size;
} }
@@ -218,12 +215,12 @@ void *FileStore<FsSize_t>::Inode::data() {
// FileStore // FileStore
template<typename FsSize_t> template<typename FsSize_t>
int FileStore<FsSize_t>::write(void *data, FsSize_t dataLen, ox::std::uint8_t fileType) { int FileStore<FsSize_t>::write(void *data, FsSize_t dataLen, uint8_t fileType) {
return 1; return 1;
} }
template<typename FsSize_t> template<typename FsSize_t>
int FileStore<FsSize_t>::write(InodeId_t id, void *data, FsSize_t dataLen, ox::std::uint8_t fileType) { int FileStore<FsSize_t>::write(InodeId_t id, void *data, FsSize_t dataLen, uint8_t fileType) {
auto retval = 1; auto retval = 1;
const FsSize_t size = sizeof(Inode) + dataLen; const FsSize_t size = sizeof(Inode) + dataLen;
auto inode = (Inode*) alloc(size); auto inode = (Inode*) alloc(size);
@@ -414,10 +411,10 @@ FsSize_t FileStore<FsSize_t>::nextInodeAddr() {
template<typename FsSize_t> template<typename FsSize_t>
void *FileStore<FsSize_t>::alloc(FsSize_t size) { void *FileStore<FsSize_t>::alloc(FsSize_t size) {
FsSize_t next = nextInodeAddr(); FsSize_t next = nextInodeAddr();
if ((next + size) > (ox::std::uint64_t) end()) { if ((next + size) > (uint64_t) end()) {
compress(firstInode()); compress(firstInode());
next = nextInodeAddr(); next = nextInodeAddr();
if ((next + size) > (ox::std::uint64_t) end()) { if ((next + size) > (uint64_t) end()) {
return nullptr; return nullptr;
} }
} }
@@ -483,7 +480,7 @@ FsSize_t FileStore<FsSize_t>::ptr(void *ptr) {
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(disable:4244) #pragma warning(disable:4244)
#endif #endif
return ((ox::std::uint8_t*) ptr) - begin(); return ((uint8_t*) ptr) - begin();
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(default:4244) #pragma warning(default:4244)
#endif #endif
@@ -500,12 +497,12 @@ typename FileStore<FsSize_t>::Inode *FileStore<FsSize_t>::lastInode() {
} }
template<typename FsSize_t> template<typename FsSize_t>
ox::std::uint8_t FileStore<FsSize_t>::version() { uint8_t FileStore<FsSize_t>::version() {
return 1; return 1;
}; };
template<typename FsSize_t> template<typename FsSize_t>
ox::std::uint8_t *FileStore<FsSize_t>::format(ox::std::uint8_t *buffer, FsSize_t size, ox::std::uint32_t fsType) { uint8_t *FileStore<FsSize_t>::format(uint8_t *buffer, FsSize_t size, uint32_t fsType) {
ox_memset(buffer, 0, size); ox_memset(buffer, 0, size);
auto *fs = (FileStore*) buffer; auto *fs = (FileStore*) buffer;
@@ -515,12 +512,12 @@ ox::std::uint8_t *FileStore<FsSize_t>::format(ox::std::uint8_t *buffer, FsSize_t
((Inode*) (fs + 1))->prev = fs->firstInode(); ((Inode*) (fs + 1))->prev = fs->firstInode();
fs->lastInode()->next = sizeof(FileStore<FsSize_t>); fs->lastInode()->next = sizeof(FileStore<FsSize_t>);
return (ox::std::uint8_t*) buffer; return (uint8_t*) buffer;
} }
typedef FileStore<ox::std::uint16_t> FileStore16; typedef FileStore<uint16_t> FileStore16;
typedef FileStore<ox::std::uint32_t> FileStore32; typedef FileStore<uint32_t> FileStore32;
typedef FileStore<ox::std::uint64_t> FileStore64; typedef FileStore<uint64_t> FileStore64;
} }
} }
+1 -1
View File
@@ -11,7 +11,7 @@ namespace ox {
namespace fs { namespace fs {
FileSystem *createFileSystem(void *buff) { FileSystem *createFileSystem(void *buff) {
auto type = *((ox::std::uint32_t*) buff); auto type = *((uint32_t*) buff);
FileSystem *fs = nullptr; FileSystem *fs = nullptr;
switch (type) { switch (type) {
+23 -23
View File
@@ -27,24 +27,24 @@ enum FileType {
}; };
struct FileStat { struct FileStat {
ox::std::uint64_t inode; uint64_t inode;
ox::std::uint64_t size; uint64_t size;
ox::std::uint8_t fileType; uint8_t fileType;
}; };
class FileSystem { class FileSystem {
public: public:
virtual ~FileSystem() {}; virtual ~FileSystem() {};
virtual int read(ox::std::uint64_t inode, void *buffer, ox::std::uint64_t size) = 0; virtual int read(uint64_t inode, void *buffer, uint64_t size) = 0;
virtual ox::std::uint8_t *read(ox::std::uint64_t inode, ox::std::uint64_t *size) = 0; virtual uint8_t *read(uint64_t inode, uint64_t *size) = 0;
virtual int remove(ox::std::uint64_t inode) = 0; virtual int remove(uint64_t inode) = 0;
virtual int write(ox::std::uint64_t inode, void *buffer, ox::std::uint64_t size, ox::std::uint8_t fileType = NormalFile) = 0; virtual int write(uint64_t inode, void *buffer, uint64_t size, uint8_t fileType = NormalFile) = 0;
virtual FileStat stat(ox::std::uint64_t inode) = 0; virtual FileStat stat(uint64_t inode) = 0;
}; };
FileSystem *createFileSystem(void *buff); FileSystem *createFileSystem(void *buff);
@@ -93,19 +93,19 @@ class FileSystemTemplate: public FileSystem {
int read(const char *path, void *buffer); int read(const char *path, void *buffer);
ox::std::uint8_t *read(ox::std::uint64_t inode, ox::std::uint64_t *size) override; uint8_t *read(uint64_t inode, uint64_t *size) override;
int read(ox::std::uint64_t inode, void *buffer, ox::std::uint64_t size) override; int read(uint64_t inode, void *buffer, uint64_t size) override;
int remove(ox::std::uint64_t inode) override; int remove(uint64_t inode) override;
int write(ox::std::uint64_t inode, void *buffer, ox::std::uint64_t size, ox::std::uint8_t fileType) override; int write(uint64_t inode, void *buffer, uint64_t size, uint8_t fileType) override;
FileStat stat(const char *path); FileStat stat(const char *path);
FileStat stat(ox::std::uint64_t inode) override; FileStat stat(uint64_t inode) override;
static ox::std::uint8_t *format(void *buffer, typename FileStore::FsSize_t size, bool useDirectories); static uint8_t *format(void *buffer, typename FileStore::FsSize_t size, bool useDirectories);
}; };
template<typename FileStore> template<typename FileStore>
@@ -131,7 +131,7 @@ FileStat FileSystemTemplate<FileStore>::stat(const char *path) {
#pragma warning(disable:4244) #pragma warning(disable:4244)
#endif #endif
template<typename FileStore> template<typename FileStore>
FileStat FileSystemTemplate<FileStore>::stat(ox::std::uint64_t inode) { FileStat FileSystemTemplate<FileStore>::stat(uint64_t inode) {
FileStat stat; FileStat stat;
auto s = store->stat(inode); auto s = store->stat(inode);
stat.size = s.size; stat.size = s.size;
@@ -147,7 +147,7 @@ FileStat FileSystemTemplate<FileStore>::stat(ox::std::uint64_t inode) {
#pragma warning(disable:4244) #pragma warning(disable:4244)
#endif #endif
template<typename FileStore> template<typename FileStore>
int FileSystemTemplate<FileStore>::read(ox::std::uint64_t inode, void *buffer, ox::std::uint64_t size) { int FileSystemTemplate<FileStore>::read(uint64_t inode, void *buffer, uint64_t size) {
auto err = 1; auto err = 1;
auto s = store->stat(inode); auto s = store->stat(inode);
if (size == s.size) { if (size == s.size) {
@@ -163,9 +163,9 @@ int FileSystemTemplate<FileStore>::read(ox::std::uint64_t inode, void *buffer, o
#pragma warning(disable:4244) #pragma warning(disable:4244)
#endif #endif
template<typename FileStore> template<typename FileStore>
ox::std::uint8_t *FileSystemTemplate<FileStore>::read(ox::std::uint64_t inode, ox::std::uint64_t *size) { uint8_t *FileSystemTemplate<FileStore>::read(uint64_t inode, uint64_t *size) {
auto s = store->stat(inode); auto s = store->stat(inode);
auto buff = new ox::std::uint8_t[s.size]; auto buff = new uint8_t[s.size];
if (size) { if (size) {
*size = s.size; *size = s.size;
} }
@@ -183,7 +183,7 @@ ox::std::uint8_t *FileSystemTemplate<FileStore>::read(ox::std::uint64_t inode, o
#pragma warning(disable:4244) #pragma warning(disable:4244)
#endif #endif
template<typename FileStore> template<typename FileStore>
int FileSystemTemplate<FileStore>::remove(ox::std::uint64_t inode) { int FileSystemTemplate<FileStore>::remove(uint64_t inode) {
return store->remove(inode); return store->remove(inode);
} }
#ifdef _MSC_VER #ifdef _MSC_VER
@@ -194,7 +194,7 @@ int FileSystemTemplate<FileStore>::remove(ox::std::uint64_t inode) {
#pragma warning(disable:4244) #pragma warning(disable:4244)
#endif #endif
template<typename FileStore> template<typename FileStore>
int FileSystemTemplate<FileStore>::write(ox::std::uint64_t inode, void *buffer, ox::std::uint64_t size, ox::std::uint8_t fileType) { int FileSystemTemplate<FileStore>::write(uint64_t inode, void *buffer, uint64_t size, uint8_t fileType) {
return store->write(inode, buffer, size, fileType); return store->write(inode, buffer, size, fileType);
} }
#ifdef _MSC_VER #ifdef _MSC_VER
@@ -205,8 +205,8 @@ int FileSystemTemplate<FileStore>::write(ox::std::uint64_t inode, void *buffer,
#pragma warning(disable:4244) #pragma warning(disable:4244)
#endif #endif
template<typename FileStore> template<typename FileStore>
ox::std::uint8_t *FileSystemTemplate<FileStore>::format(void *buffer, typename FileStore::FsSize_t size, bool useDirectories) { uint8_t *FileSystemTemplate<FileStore>::format(void *buffer, typename FileStore::FsSize_t size, bool useDirectories) {
buffer = FileStore::format((ox::std::uint8_t*) buffer, size, FS_TYPE); buffer = FileStore::format((uint8_t*) buffer, size, FS_TYPE);
auto fs = createFileSystem(buffer); auto fs = createFileSystem(buffer);
if (buffer && useDirectories) { if (buffer && useDirectories) {
@@ -216,7 +216,7 @@ ox::std::uint8_t *FileSystemTemplate<FileStore>::format(void *buffer, typename F
fs->write(INODE_ROOT_DIR, dirBuff, useDirectories); fs->write(INODE_ROOT_DIR, dirBuff, useDirectories);
} }
return (ox::std::uint8_t*) buffer; return (uint8_t*) buffer;
} }
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(default:4244) #pragma warning(default:4244)
+10 -10
View File
@@ -27,7 +27,7 @@ const static auto usage = "usage:\n"
"\toxfs write <FS file> <inode> <insertion file>"; "\toxfs write <FS file> <inode> <insertion file>";
char *loadFileBuff(const char *path, ::size_t *sizeOut = nullptr) { char *loadFileBuff(const char *path, ::size_t *sizeOut = nullptr) {
FILE *file = fopen(path, "rb"); auto file = fopen(path, "rb");
if (file) { if (file) {
fseek(file, 0, SEEK_END); fseek(file, 0, SEEK_END);
const auto size = ftell(file); const auto size = ftell(file);
@@ -44,7 +44,7 @@ char *loadFileBuff(const char *path, ::size_t *sizeOut = nullptr) {
} }
} }
ox::std::uint64_t bytes(const char *str) { uint64_t bytes(const char *str) {
auto size = ::ox_strlen(str); auto size = ::ox_strlen(str);
const auto lastChar = str[size-1]; const auto lastChar = str[size-1];
auto multiplier = 1; auto multiplier = 1;
@@ -69,7 +69,7 @@ ox::std::uint64_t bytes(const char *str) {
multiplier = -1; multiplier = -1;
} }
} }
const auto retval = ((ox::std::uint64_t) ::ox_atoi(copy)) * multiplier; const auto retval = ((uint64_t) ::ox_atoi(copy)) * multiplier;
delete copy; delete copy;
return retval; return retval;
} }
@@ -81,14 +81,14 @@ int format(int argc, char **args) {
auto type = ox_atoi(args[2]); auto type = ox_atoi(args[2]);
auto size = bytes(args[3]); auto size = bytes(args[3]);
auto path = args[4]; auto path = args[4];
auto buff = (ox::std::uint8_t*) malloc(size); auto buff = (uint8_t*) malloc(size);
printf("Size: %llu bytes\n", size); printf("Size: %llu bytes\n", size);
printf("Type: %d\n", type); printf("Type: %d\n", type);
if (size < sizeof(FileStore64)) { if (size < sizeof(FileStore64)) {
err = 1; err = 1;
fprintf(stderr, "File system size %llu too small, must be at least %llu\n", (ox::std::uint64_t) size, (ox::std::uint64_t) sizeof(FileStore64)); fprintf(stderr, "File system size %llu too small, must be at least %llu\n", (uint64_t) size, (uint64_t) sizeof(FileStore64));
} }
if (!err) { if (!err) {
@@ -137,7 +137,7 @@ int read(int argc, char **args) {
auto fsPath = args[2]; auto fsPath = args[2];
auto inode = ox_atoi(args[3]); auto inode = ox_atoi(args[3]);
::size_t fsSize; ::size_t fsSize;
ox::std::uint64_t fileSize; uint64_t fileSize;
auto fsBuff = loadFileBuff(fsPath, &fsSize); auto fsBuff = loadFileBuff(fsPath, &fsSize);
@@ -155,7 +155,7 @@ int read(int argc, char **args) {
delete fs; delete fs;
free(fsBuff); free(fsBuff);
} else { } else {
fprintf(stderr, "Invalid file system type: %d.\n", *(ox::std::uint32_t*) fsBuff); fprintf(stderr, "Invalid file system type: %d.\n", *(uint32_t*) fsBuff);
} }
} else { } else {
fprintf(stderr, "Could not open file: %s\n", fsPath); fprintf(stderr, "Could not open file: %s\n", fsPath);
@@ -170,7 +170,7 @@ int write(int argc, char **args) {
auto fsPath = args[2]; auto fsPath = args[2];
auto inode = ox_atoi(args[3]); auto inode = ox_atoi(args[3]);
auto srcPath = args[4]; auto srcPath = args[4];
::size_t srcSize; size_t srcSize;
auto fsFile = fopen(fsPath, "rb"); auto fsFile = fopen(fsPath, "rb");
if (fsFile) { if (fsFile) {
@@ -191,7 +191,7 @@ int write(int argc, char **args) {
fprintf(stderr, "Could not write to file system.\n"); fprintf(stderr, "Could not write to file system.\n");
} }
} else { } else {
fprintf(stderr, "Invalid file system type: %d.\n", *(ox::std::uint32_t*) fsBuff); fprintf(stderr, "Invalid file system type: %d.\n", *(uint32_t*) fsBuff);
err = 1; err = 1;
} }
@@ -227,7 +227,7 @@ int remove(int argc, char **args) {
if (argc >= 4) { if (argc >= 4) {
auto fsPath = args[2]; auto fsPath = args[2];
auto inode = ox_atoi(args[3]); auto inode = ox_atoi(args[3]);
::size_t fsSize; size_t fsSize;
auto fsBuff = loadFileBuff(fsPath, &fsSize); auto fsBuff = loadFileBuff(fsPath, &fsSize);
if (fsBuff) { if (fsBuff) {
+2 -2
View File
@@ -11,8 +11,8 @@ using namespace ox::fs;
int main() { int main() {
const auto size = 65535; const auto size = 65535;
ox::std::uint8_t volume[size]; uint8_t volume[size];
ox::std::uint32_t err = 0; uint32_t err = 0;
FileStore32::format(volume, size); FileStore32::format(volume, size);
return err; return err;
} }
+2 -2
View File
@@ -14,8 +14,8 @@ using namespace ox::std;
template<typename FileStore> template<typename FileStore>
int test() { int test() {
const ox::std::uint16_t size = ~0; const uint16_t size = ~0;
ox::std::uint8_t volume[size]; uint8_t volume[size];
char out[6]; char out[6];
typename FileStore::FsSize_t outSize; typename FileStore::FsSize_t outSize;
FileStore::format(volume, size); FileStore::format(volume, size);
+2 -2
View File
@@ -13,8 +13,8 @@ using namespace ox::std;
template<typename FileSystem> template<typename FileSystem>
int test() { int test() {
const ox::std::uint16_t size = ~0; const uint16_t size = ~0;
ox::std::uint8_t volume[size]; uint8_t volume[size];
FileSystem::format(volume, size, true); FileSystem::format(volume, size, true);
return 0; return 0;
} }
+5 -5
View File
@@ -7,9 +7,6 @@
*/ */
#pragma once #pragma once
namespace ox {
namespace std {
typedef char int8_t; typedef char int8_t;
typedef unsigned char uint8_t; typedef unsigned char uint8_t;
typedef short int16_t; typedef short int16_t;
@@ -20,6 +17,9 @@ typedef unsigned uint_t;
typedef long long int64_t; typedef long long int64_t;
typedef unsigned long long uint64_t; typedef unsigned long long uint64_t;
namespace ox {
namespace std {
typedef uint32_t Error; typedef uint32_t Error;
} }
@@ -28,9 +28,9 @@ typedef uint32_t Error;
#if defined(_LP64) || defined(__ppc64__) || defined(__aarch64__) #if defined(_LP64) || defined(__ppc64__) || defined(__aarch64__)
typedef unsigned long size_t; typedef unsigned long size_t;
#elif defined(_WIN64) #elif defined(_WIN64)
typedef ox::std::uint64_t size_t; typedef uint64_t size_t;
#elif defined(_LP32) || defined(__ppc__) || defined(_WIN32) || defined(__arm__) #elif defined(_LP32) || defined(__ppc__) || defined(_WIN32) || defined(__arm__)
typedef ox::std::uint32_t size_t; typedef uint32_t size_t;
#else #else
#error size_t undefined #error size_t undefined
#endif #endif