nostalgia/deps/ox/src/ox/fs/filesystem.cpp

74 lines
1.4 KiB
C++

/*
* Copyright 2015 - 2017 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 "filesystem.hpp"
namespace ox {
FileSystem *createFileSystem(uint8_t *buff, size_t buffSize, bool ownsBuff) {
auto version = ((FileStore16*) buff)->version();
auto type = ((FileStore16*) buff)->fsType();
FileSystem *fs = nullptr;
switch (version) {
case 5:
switch (type) {
case ox::OxFS_16:
fs = new FileSystem16(buff, ownsBuff);
break;
case ox::OxFS_32:
fs = new FileSystem32(buff, ownsBuff);
break;
case ox::OxFS_64:
fs = new FileSystem64(buff, ownsBuff);
break;
}
break;
default:
break;
}
if (fs && fs->size() > buffSize) {
delete fs;
fs = nullptr;
}
return fs;
}
FileSystem *expandCopy(FileSystem *fs, size_t size) {
auto fsBuff = fs->buff();
FileSystem *retval = nullptr;
if (fs->size() <= size) {
auto cloneBuff = new uint8_t[size];
ox_memcpy(cloneBuff, fsBuff, fs->size());
fsBuff = cloneBuff;
retval = createFileSystem(fsBuff, size);
retval->resize(size);
}
return retval;
}
FileSystem *expandCopyCleanup(FileSystem *fs, size_t size) {
auto out = expandCopy(fs, size);
if (out) {
delete[] fs->buff();
delete fs;
} else {
out = fs;
}
return out;
}
}