diff options
| -rw-r--r-- | src/core/loader/loader.cpp | 26 | ||||
| -rw-r--r-- | src/core/loader/loader.h | 28 | 
2 files changed, 41 insertions, 13 deletions
| diff --git a/src/core/loader/loader.cpp b/src/core/loader/loader.cpp index 74eb6e871..b1902dcca 100644 --- a/src/core/loader/loader.cpp +++ b/src/core/loader/loader.cpp @@ -26,12 +26,7 @@ const std::initializer_list<Kernel::AddressMapping> default_address_mappings = {      { 0x1F000000, 0x600000, false }, // entire VRAM  }; -/** - * Identifies the type of a bootable file - * @param file open file - * @return FileType of file - */ -static FileType IdentifyFile(FileUtil::IOFile& file) { +FileType IdentifyFile(FileUtil::IOFile& file) {      FileType type;  #define CHECK_TYPE(loader) \ @@ -48,12 +43,17 @@ static FileType IdentifyFile(FileUtil::IOFile& file) {      return FileType::Unknown;  } -/** - * Guess the type of a bootable file from its extension - * @param extension_ String extension of bootable file - * @return FileType of file - */ -static FileType GuessFromExtension(const std::string& extension_) { +FileType IdentifyFile(const std::string& file_name) { +    FileUtil::IOFile file(file_name, "rb"); +    if (!file.IsOpen()) { +        LOG_ERROR(Loader, "Failed to load file %s", file_name.c_str()); +        return FileType::Unknown; +    } + +    return IdentifyFile(file); +} + +FileType GuessFromExtension(const std::string& extension_) {      std::string extension = Common::ToLower(extension_);      if (extension == ".elf" || extension == ".axf") @@ -71,7 +71,7 @@ static FileType GuessFromExtension(const std::string& extension_) {      return FileType::Unknown;  } -static const char* GetFileTypeString(FileType type) { +const char* GetFileTypeString(FileType type) {      switch (type) {      case FileType::CCI:          return "NCSD"; diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h index a37d3348c..8de95dacf 100644 --- a/src/core/loader/loader.h +++ b/src/core/loader/loader.h @@ -33,6 +33,34 @@ enum class FileType {      THREEDSX, //3DSX  }; +/** + * Identifies the type of a bootable file based on the magic value in its header. + * @param file open file + * @return FileType of file + */ +FileType IdentifyFile(FileUtil::IOFile& file); + +/** + * Identifies the type of a bootable file based on the magic value in its header. + * @param file_name path to file + * @return FileType of file. Note: this will return FileType::Unknown if it is unable to determine + * a filetype, and will never return FileType::Error. + */ +FileType IdentifyFile(const std::string& file_name); + +/** + * Guess the type of a bootable file from its extension + * @param extension String extension of bootable file + * @return FileType of file. Note: this will return FileType::Unknown if it is unable to determine + * a filetype, and will never return FileType::Error. + */ +FileType GuessFromExtension(const std::string& extension_); + +/** + * Convert a FileType into a string which can be displayed to the user. + */ +const char* GetFileTypeString(FileType type); +  /// Return type for functions in Loader namespace  enum class ResultStatus {      Success, | 
