[nostalgia/tools/pack] Add Bullock integration and cleanup FS access
This commit is contained in:
		@@ -3,6 +3,7 @@ add_executable(nost-pack pack.cpp)
 | 
				
			|||||||
target_link_libraries(
 | 
					target_link_libraries(
 | 
				
			||||||
	nost-pack
 | 
						nost-pack
 | 
				
			||||||
		OxClArgs
 | 
							OxClArgs
 | 
				
			||||||
 | 
							OxLogConn
 | 
				
			||||||
		NostalgiaPack
 | 
							NostalgiaPack
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include <ox/clargs/clargs.hpp>
 | 
					#include <ox/clargs/clargs.hpp>
 | 
				
			||||||
#include <ox/fs/fs.hpp>
 | 
					#include <ox/fs/fs.hpp>
 | 
				
			||||||
 | 
					#include <ox/logconn/logconn.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <nostalgia/core/typestore.hpp>
 | 
					#include <nostalgia/core/typestore.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -42,7 +43,6 @@ static ox::Result<ox::Buffer> readFileBuff(ox::CRStringView path) noexcept {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static ox::Error run(const ox::ClArgs &args) noexcept {
 | 
					static ox::Error run(const ox::ClArgs &args) noexcept {
 | 
				
			||||||
	ox::trace::init();
 | 
					 | 
				
			||||||
	const auto argSrc = args.getString("src", "");
 | 
						const auto argSrc = args.getString("src", "");
 | 
				
			||||||
	const auto argRomBin = args.getString("rom-bin", "");
 | 
						const auto argRomBin = args.getString("rom-bin", "");
 | 
				
			||||||
	if (argSrc == "") {
 | 
						if (argSrc == "") {
 | 
				
			||||||
@@ -78,6 +78,16 @@ static ox::Error run(const ox::ClArgs &args) noexcept {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, const char **args) {
 | 
					int main(int argc, const char **args) {
 | 
				
			||||||
 | 
						ox::trace::init();
 | 
				
			||||||
 | 
					#ifdef DEBUG
 | 
				
			||||||
 | 
						ox::LoggerConn loggerConn;
 | 
				
			||||||
 | 
						const auto loggerErr = loggerConn.initConn("nost-pack");
 | 
				
			||||||
 | 
						if (loggerErr) {
 | 
				
			||||||
 | 
							oxErrf("Could not connect to logger: {} ({}:{})\n", toStr(loggerErr), loggerErr.file, loggerErr.line);
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							ox::trace::setLogger(&loggerConn);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	const auto err = run(ox::ClArgs(argc, args));
 | 
						const auto err = run(ox::ClArgs(argc, args));
 | 
				
			||||||
	oxAssert(err, "pack failed");
 | 
						oxAssert(err, "pack failed");
 | 
				
			||||||
	return static_cast<int>(err);
 | 
						return static_cast<int>(err);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,7 @@ static ox::Error pathToInode(ox::FileSystem *dest, ox::ModelObject *obj) noexcep
 | 
				
			|||||||
		case ox::FileAddressType::None:
 | 
							case ox::FileAddressType::None:
 | 
				
			||||||
			return {};
 | 
								return {};
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	oxRequire(s, dest->stat(ox::StringView(path)));
 | 
						oxRequire(s, dest->stat(path));
 | 
				
			||||||
	oxReturnError(o["type"].set(static_cast<int8_t>(ox::FileAddressType::Inode)));
 | 
						oxReturnError(o["type"].set(static_cast<int8_t>(ox::FileAddressType::Inode)));
 | 
				
			||||||
	return data.set(2, s.inode);
 | 
						return data.set(2, s.inode);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -121,7 +121,7 @@ static ox::Error copy(ox::FileSystem *src, ox::FileSystem *dest, ox::CRStringVie
 | 
				
			|||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		oxOutf("reading {}\n", currentFile);
 | 
							oxOutf("reading {}\n", currentFile);
 | 
				
			||||||
		oxRequire(stat, src->stat(ox::StringView(currentFile)));
 | 
							oxRequire(stat, src->stat(currentFile));
 | 
				
			||||||
		if (stat.fileType == ox::FileType::Directory) {
 | 
							if (stat.fileType == ox::FileType::Directory) {
 | 
				
			||||||
			oxReturnError(dest->mkdir(currentFile, true));
 | 
								oxReturnError(dest->mkdir(currentFile, true));
 | 
				
			||||||
			oxReturnError(copy(src, dest, currentFile + '/'));
 | 
								oxReturnError(copy(src, dest, currentFile + '/'));
 | 
				
			||||||
@@ -171,7 +171,7 @@ static ox::Error preloadDir(core::TypeStore *ts, ox::FileSystem *romFs, GbaPrelo
 | 
				
			|||||||
	oxRequire(fileList, romFs->ls(path));
 | 
						oxRequire(fileList, romFs->ls(path));
 | 
				
			||||||
	for (const auto &name : fileList) {
 | 
						for (const auto &name : fileList) {
 | 
				
			||||||
		const auto filePath = ox::sfmt("{}{}", path, name);
 | 
							const auto filePath = ox::sfmt("{}{}", path, name);
 | 
				
			||||||
		oxRequire(stat, romFs->stat(ox::StringView(filePath)));
 | 
							oxRequire(stat, romFs->stat(filePath));
 | 
				
			||||||
		if (stat.fileType == ox::FileType::Directory) {
 | 
							if (stat.fileType == ox::FileType::Directory) {
 | 
				
			||||||
			const auto dir = ox::sfmt("{}{}/", path, name);
 | 
								const auto dir = ox::sfmt("{}{}/", path, name);
 | 
				
			||||||
			oxReturnError(preloadDir(ts, romFs, pl, dir));
 | 
								oxReturnError(preloadDir(ts, romFs, pl, dir));
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user