summaryrefslogtreecommitdiffstats
path: root/src/core/loader/loader.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/loader/loader.h')
-rw-r--r--src/core/loader/loader.h121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h
new file mode 100644
index 000000000..95f16fcb1
--- /dev/null
+++ b/src/core/loader/loader.h
@@ -0,0 +1,121 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <vector>
+
+#include "common/common.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Loader namespace
+
+namespace Loader {
+
+/// File types supported by CTR
+enum class FileType {
+ Error,
+ Unknown,
+ CCI,
+ CXI,
+ CIA,
+ ELF,
+};
+
+/// Return type for functions in Loader namespace
+enum class ResultStatus {
+ Success,
+ Error,
+ ErrorInvalidFormat,
+ ErrorNotImplemented,
+ ErrorNotLoaded,
+ ErrorNotUsed,
+ ErrorAlreadyLoaded,
+};
+
+/// Interface for loading an application
+class AppLoader : NonCopyable {
+public:
+ AppLoader() { }
+ virtual ~AppLoader() { }
+
+ /**
+ * Load the application
+ * @return ResultStatus result of function
+ */
+ virtual ResultStatus Load() = 0;
+
+ /**
+ * Get the code (typically .code section) of the application
+ * @param error ResultStatus result of function
+ * @return Reference to code buffer
+ */
+ virtual const std::vector<u8>& ReadCode(ResultStatus& error) const {
+ error = ResultStatus::ErrorNotImplemented;
+ return code;
+ }
+
+ /**
+ * Get the icon (typically icon section) of the application
+ * @param error ResultStatus result of function
+ * @return Reference to icon buffer
+ */
+ virtual const std::vector<u8>& ReadIcon(ResultStatus& error) const {
+ error = ResultStatus::ErrorNotImplemented;
+ return icon;
+ }
+
+ /**
+ * Get the banner (typically banner section) of the application
+ * @param error ResultStatus result of function
+ * @return Reference to banner buffer
+ */
+ virtual const std::vector<u8>& ReadBanner(ResultStatus& error) const {
+ error = ResultStatus::ErrorNotImplemented;
+ return banner;
+ }
+
+ /**
+ * Get the logo (typically logo section) of the application
+ * @param error ResultStatus result of function
+ * @return Reference to logo buffer
+ */
+ virtual const std::vector<u8>& ReadLogo(ResultStatus& error) const {
+ error = ResultStatus::ErrorNotImplemented;
+ return logo;
+ }
+
+ /**
+ * Get the RomFs archive of the application
+ * @param error ResultStatus result of function
+ * @return Reference to RomFs archive buffer
+ */
+ virtual const std::vector<u8>& ReadRomFS(ResultStatus& error) const {
+ error = ResultStatus::ErrorNotImplemented;
+ return romfs;
+ }
+
+protected:
+ std::vector<u8> code; ///< ExeFS .code section
+ std::vector<u8> icon; ///< ExeFS .icon section
+ std::vector<u8> banner; ///< ExeFS .banner section
+ std::vector<u8> logo; ///< ExeFS .logo section
+ std::vector<u8> romfs; ///< RomFs archive
+};
+
+/**
+ * Identifies the type of a bootable file
+ * @param filename String filename of bootable file
+ * @return FileType of file
+ */
+FileType IdentifyFile(const std::string &filename);
+
+/**
+ * Identifies and loads a bootable file
+ * @param filename String filename of bootable file
+ * @return ResultStatus result of function
+ */
+ResultStatus LoadFile(const std::string& filename);
+
+} // namespace