From d2c53b77afcfcab0fbe9e09537f31b26f613735d Mon Sep 17 00:00:00 2001 From: Maschell Date: Fri, 4 Feb 2022 15:19:43 +0100 Subject: [PATCH] Format the code via clang-format --- .clang-format | 67 +++++++++++++++++++++ .github/workflows/ci.yml | 10 +++- .github/workflows/pr.yml | 8 +++ README.md | 6 ++ src/FileWrapper.cpp | 14 ++--- src/FileWrapper.h | 8 +-- src/fileinfos.cpp | 10 ++-- src/fileinfos.h | 4 +- src/fs/CFile.cpp | 24 ++++---- src/fs/CFile.hpp | 6 +- src/fs/DirList.cpp | 16 ++--- src/fs/DirList.h | 7 ++- src/fs/FSUtils.cpp | 17 +++--- src/main.cpp | 119 +++++++++++++++++++------------------- src/utils/StringTools.cpp | 41 +++++++------ src/utils/StringTools.h | 3 +- src/utils/ini.c | 62 ++++++++++++++------ src/utils/ini.h | 37 ++++++++++-- src/utils/logger.c | 8 +-- src/utils/logger.h | 21 +++---- src/utils/utils.c | 8 +-- src/utils/utils.h | 29 +++++----- 22 files changed, 332 insertions(+), 193 deletions(-) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..56cc685 --- /dev/null +++ b/.clang-format @@ -0,0 +1,67 @@ +# Generated from CLion C/C++ Code Style settings +BasedOnStyle: LLVM +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: Consecutive +AlignConsecutiveMacros: AcrossEmptyLinesAndComments +AlignOperands: Align +AllowAllArgumentsOnNextLine: false +AllowAllConstructorInitializersOnNextLine: false +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: Always +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Always +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: true +AlwaysBreakAfterReturnType: None +AlwaysBreakTemplateDeclarations: Yes +BreakBeforeBraces: Custom +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: true +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeColon +BreakInheritanceList: BeforeColon +ColumnLimit: 0 +CompactNamespaces: false +ContinuationIndentWidth: 8 +IndentCaseLabels: true +IndentPPDirectives: None +IndentWidth: 4 +KeepEmptyLinesAtTheStartOfBlocks: true +MaxEmptyLinesToKeep: 2 +NamespaceIndentation: All +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PointerAlignment: Right +ReflowComments: false +SpaceAfterCStyleCast: true +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInCStyleCastParentheses: false +SpacesInContainerLiterals: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +TabWidth: 4 +UseTab: Never diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f9d79fb..6e677fc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,8 +6,16 @@ on: - master jobs: + clang-format: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: clang-format + run: | + docker run --rm -v ${PWD}:/src wiiuenv/clang-format:13.0.0-2 -r ./src build-binary: runs-on: ubuntu-18.04 + needs: clang-format steps: - uses: actions/checkout@v2 - name: build binary @@ -26,7 +34,7 @@ jobs: id: get_repository_name run: | echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_ENV - echo DATETIME=$(echo $(date '+%Y%m%d-%H%M%S')) >> $GITHUB_ENV + echo DATETIME=$(echo $(date '+%Y%m%d-%H%M%S')) >> $GITHUB_ENV - uses: actions/download-artifact@master with: name: binary diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index f21e109..423702f 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -3,8 +3,16 @@ name: CI-PR on: [pull_request] jobs: + clang-format: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: clang-format + run: | + docker run --rm -v ${PWD}:/src wiiuenv/clang-format:13.0.0-2 -r ./src build-binary: runs-on: ubuntu-18.04 + needs: clang-format steps: - uses: actions/checkout@v2 - name: build binary diff --git a/README.md b/README.md index 8b91e3f..1ef7748 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![CI-Release](https://github.com/wiiu-env/homebrew_on_menu_plugin/actions/workflows/ci.yml/badge.svg)](https://github.com/wiiu-env/homebrew_on_menu_plugin/actions/workflows/ci.yml) + ## Usage (`[ENVIRONMENT]` is a placeholder for the actual environment name.) @@ -19,3 +21,7 @@ docker run -it --rm -v ${PWD}:/project homebrew_on_menu_plugin-builder make # make clean docker run -it --rm -v ${PWD}:/project homebrew_on_menu_plugin-builder make clean ``` + +## Format the code via docker + +`docker run --rm -v ${PWD}:/src wiiuenv/clang-format:13.0.0-2 -r ./include ./libraries ./plugins/example_plugin/src -i` \ No newline at end of file diff --git a/src/FileWrapper.cpp b/src/FileWrapper.cpp index 279e580..4df2a35 100644 --- a/src/FileWrapper.cpp +++ b/src/FileWrapper.cpp @@ -1,11 +1,11 @@ #include "FileWrapper.h" -#include #include "fileinfos.h" -#include -#include -#include #include "utils/logger.h" #include +#include +#include +#include +#include FileHandleWrapper gFileHandleWrapper[FILE_WRAPPER_SIZE] __attribute__((section(".data"))); @@ -28,8 +28,8 @@ int OpenFileForID(int id, const char *filepath, int *handle) { snprintf(romName, 10, "%08X", id); char *dyn_path = (char *) malloc(strlen(filepath) + 1); - char last = 0; - int j = 0; + char last = 0; + int j = 0; for (int i = 0; filepath[i] != 0; i++) { if (filepath[i] == '/') { if (filepath[i] != last) { @@ -56,7 +56,7 @@ int OpenFileForID(int id, const char *filepath, int *handle) { return -2; } gFileHandleWrapper[handle_wrapper_slot].handle = out_handle; - *handle = 0xFF000000 | (id << 12) | (handle_wrapper_slot & 0x00000FFF); + *handle = 0xFF000000 | (id << 12) | (handle_wrapper_slot & 0x00000FFF); gFileInfos[id].openedFiles++; return 0; } else { diff --git a/src/FileWrapper.h b/src/FileWrapper.h index 9ed59d3..e2ed8ae 100644 --- a/src/FileWrapper.h +++ b/src/FileWrapper.h @@ -2,11 +2,11 @@ #include typedef struct FileHandleWrapper_t { - uint32_t handle; - bool inUse; + uint32_t handle; + bool inUse; } FileHandleWrapper; -#define FILE_WRAPPER_SIZE 64 +#define FILE_WRAPPER_SIZE 64 extern FileHandleWrapper gFileHandleWrapper[FILE_WRAPPER_SIZE]; -int OpenFileForID(int id, const char * path, int32_t * handle); \ No newline at end of file +int OpenFileForID(int id, const char *path, int32_t *handle); \ No newline at end of file diff --git a/src/fileinfos.cpp b/src/fileinfos.cpp index e2545d5..a5e59af 100644 --- a/src/fileinfos.cpp +++ b/src/fileinfos.cpp @@ -1,8 +1,8 @@ -#include -#include -#include -#include "utils/logger.h" #include "fileinfos.h" +#include "utils/logger.h" +#include +#include +#include FileInfos gFileInfos[FILE_INFO_SIZE] __attribute__((section(".data"))); @@ -46,7 +46,7 @@ bool mountRomfs(uint32_t id) { char romName[10]; snprintf(romName, 10, "%08X", id); DEBUG_FUNCTION_LINE("Mount %s as %s", buffer, romName); - int32_t res = 0; + int32_t res = 0; if ((res = RL_MountBundle(romName, buffer, BundleSource_FileDescriptor_CafeOS)) == 0) { DEBUG_FUNCTION_LINE("Mounted successfully "); gFileInfos[id].romfsMounted = true; diff --git a/src/fileinfos.h b/src/fileinfos.h index 8f32555..9d0ca18 100644 --- a/src/fileinfos.h +++ b/src/fileinfos.h @@ -1,7 +1,7 @@ #pragma once -#include #include +#include typedef struct WUT_PACKED FileInfos_ { char path[256]; @@ -16,7 +16,7 @@ typedef struct WUT_PACKED FileInfos_ { MCPTitleListType titleInfo; } FileInfos; -#define FILE_INFO_SIZE 300 +#define FILE_INFO_SIZE 300 extern FileInfos gFileInfos[FILE_INFO_SIZE]; int32_t getIDByLowerTitleID(uint32_t lowerTitleID); diff --git a/src/fs/CFile.cpp b/src/fs/CFile.cpp index c3d7700..d747dfc 100644 --- a/src/fs/CFile.cpp +++ b/src/fs/CFile.cpp @@ -1,15 +1,15 @@ -#include -#include -#include -#include #include +#include +#include +#include +#include CFile::CFile() { - iFd = -1; + iFd = -1; mem_file = nullptr; filesize = 0; - pos = 0; + pos = 0; } CFile::CFile(const std::string &filepath, eOpenTypes mode) { @@ -35,7 +35,7 @@ int32_t CFile::open(const std::string &filepath, eOpenTypes mode) { switch (mode) { default: - case ReadOnly: // file must exist + case ReadOnly: // file must exist openMode = O_RDONLY; break; case WriteOnly: // file will be created / zerod @@ -77,10 +77,10 @@ void CFile::close() { if (iFd >= 0) ::close(iFd); - iFd = -1; + iFd = -1; mem_file = NULL; filesize = 0; - pos = 0; + pos = 0; } int32_t CFile::read(uint8_t *ptr, size_t size) { @@ -127,7 +127,7 @@ int32_t CFile::write(const uint8_t *ptr, size_t size) { } int32_t CFile::seek(long int offset, int32_t origin) { - int32_t ret = 0; + int32_t ret = 0; int64_t newPos = pos; if (origin == SEEK_SET) { @@ -158,7 +158,7 @@ int32_t CFile::seek(long int offset, int32_t origin) { int32_t CFile::fwrite(const char *format, ...) { char tmp[512]; - tmp[0] = 0; + tmp[0] = 0; int32_t result = -1; va_list va; @@ -171,5 +171,3 @@ int32_t CFile::fwrite(const char *format, ...) { return result; } - - diff --git a/src/fs/CFile.hpp b/src/fs/CFile.hpp index 756d4f6..27c0265 100644 --- a/src/fs/CFile.hpp +++ b/src/fs/CFile.hpp @@ -1,10 +1,10 @@ #ifndef CFILE_HPP_ #define CFILE_HPP_ -#include -#include -#include #include +#include +#include +#include #include #include diff --git a/src/fs/DirList.cpp b/src/fs/DirList.cpp index ab2fea4..3198efb 100644 --- a/src/fs/DirList.cpp +++ b/src/fs/DirList.cpp @@ -24,22 +24,22 @@ * DirList Class * for WiiXplorer 2010 ***************************************************************************/ +#include #include #include #include #include #include -#include -#include #include +#include #include #include DirList::DirList() { - Flags = 0; + Flags = 0; Filter = 0; - Depth = 0; + Depth = 0; } DirList::DirList(const std::string &path, const char *filter, uint32_t flags, uint32_t maxDepth) { @@ -55,9 +55,9 @@ BOOL DirList::LoadPath(const std::string &folder, const char *filter, uint32_t f if (folder.empty()) return false; - Flags = flags; + Flags = flags; Filter = filter; - Depth = maxDepth; + Depth = maxDepth; std::string folderpath(folder); uint32_t length = folderpath.size(); @@ -82,14 +82,14 @@ BOOL DirList::InternalLoadPath(std::string &folderpath) { return false; struct dirent *dirent = NULL; - DIR *dir = NULL; + DIR *dir = NULL; dir = opendir(folderpath.c_str()); if (dir == NULL) return false; while ((dirent = readdir(dir)) != 0) { - BOOL isDir = dirent->d_type & DT_DIR; + BOOL isDir = dirent->d_type & DT_DIR; const char *filename = dirent->d_name; if (isDir) { diff --git a/src/fs/DirList.h b/src/fs/DirList.h index 08b3fbc..bd1cd90 100644 --- a/src/fs/DirList.h +++ b/src/fs/DirList.h @@ -27,8 +27,8 @@ #ifndef ___DIRLIST_H_ #define ___DIRLIST_H_ -#include #include +#include #include typedef struct { @@ -93,10 +93,11 @@ public: //! Enum for search/filter flags enum { - Files = 0x01, - Dirs = 0x02, + Files = 0x01, + Dirs = 0x02, CheckSubfolders = 0x08, }; + protected: // Internal parser BOOL InternalLoadPath(std::string &path); diff --git a/src/fs/FSUtils.cpp b/src/fs/FSUtils.cpp index 16c7315..740e369 100644 --- a/src/fs/FSUtils.cpp +++ b/src/fs/FSUtils.cpp @@ -1,11 +1,11 @@ -#include -#include -#include -#include -#include #include "fs/FSUtils.h" #include "fs/CFile.hpp" #include "utils/logger.h" +#include +#include +#include +#include +#include int32_t FSUtils::LoadFileToMem(const char *filepath, uint8_t **inbuffer, uint32_t *size) { //! always initialze input @@ -27,8 +27,8 @@ int32_t FSUtils::LoadFileToMem(const char *filepath, uint8_t **inbuffer, uint32_ } uint32_t blocksize = 0x100000; - uint32_t done = 0; - int32_t readBytes = 0; + uint32_t done = 0; + int32_t readBytes = 0; while (done < filesize) { if (done + blocksize > filesize) { @@ -62,7 +62,7 @@ int32_t FSUtils::CheckFile(const char *filepath) { if (!filepath) return 0; - struct stat filestat{}; + struct stat filestat {}; char dirnoslash[strlen(filepath) + 2]; snprintf(dirnoslash, sizeof(dirnoslash), "%s", filepath); @@ -139,4 +139,3 @@ int32_t FSUtils::saveBufferToFile(const char *path, void *buffer, uint32_t size) file.close(); return written; } - diff --git a/src/main.cpp b/src/main.cpp index 2880a04..8358729 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,22 +1,22 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "utils/StringTools.h" -#include -#include "fileinfos.h" -#include -#include "fs/FSUtils.h" -#include "filelist.h" -#include "utils/ini.h" #include "FileWrapper.h" +#include "fileinfos.h" +#include "filelist.h" +#include "fs/FSUtils.h" +#include "utils/StringTools.h" +#include "utils/ini.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include typedef struct ACPMetaData { char bootmovie[80696]; @@ -31,14 +31,14 @@ WUPS_PLUGIN_LICENSE("GPL"); #define UPPER_TITLE_ID_HOMEBREW 0x0005000F -#define TITLE_ID_HOMEBREW_MASK (((uint64_t) UPPER_TITLE_ID_HOMEBREW) << 32) +#define TITLE_ID_HOMEBREW_MASK (((uint64_t) UPPER_TITLE_ID_HOMEBREW) << 32) ACPMetaXml gLaunchXML __attribute__((section(".data"))); MCPTitleListType current_launched_title_info __attribute__((section(".data"))); BOOL gHomebrewLaunched __attribute__((section(".data"))); bool doReboot = false; -bool lastResult = false; +bool lastResult = false; uint32_t sd_check_cooldown = 0; extern FSClient *__wut_devoptab_fs_client; @@ -89,21 +89,21 @@ void fillXmlForTitleID(uint32_t titleid_upper, uint32_t titleid_lower, ACPMetaXm strncpy(out_buf->longname_en, gFileInfos[id].longname, 64); strncpy(out_buf->shortname_en, gFileInfos[id].shortname, 64); strncpy(out_buf->publisher_en, gFileInfos[id].author, 64); - out_buf->e_manual = 1; - out_buf->e_manual_version = 0; - out_buf->title_version = 1; - out_buf->network_use = 1; - out_buf->launching_flag = 4; + out_buf->e_manual = 1; + out_buf->e_manual_version = 0; + out_buf->title_version = 1; + out_buf->network_use = 1; + out_buf->launching_flag = 4; out_buf->online_account_use = 1; - out_buf->os_version = 0x000500101000400A; - out_buf->region = 0xFFFFFFFF; - out_buf->common_save_size = 0x0000000001790000; - out_buf->group_id = 0x400; - out_buf->drc_use = 1; - out_buf->version = 1; - out_buf->reserved_flag0 = 0x00010001; - out_buf->reserved_flag6 = 0x00000003; - out_buf->pc_usk = 128; + out_buf->os_version = 0x000500101000400A; + out_buf->region = 0xFFFFFFFF; + out_buf->common_save_size = 0x0000000001790000; + out_buf->group_id = 0x400; + out_buf->drc_use = 1; + out_buf->version = 1; + out_buf->reserved_flag0 = 0x00010001; + out_buf->reserved_flag6 = 0x00000003; + out_buf->pc_usk = 128; strncpy(out_buf->product_code, "WUP-P-HBLD", strlen("WUP-P-HBLD") + 1); strncpy(out_buf->content_platform, "WUP", strlen("WUP") + 1); strncpy(out_buf->company_code, "0001", strlen("0001") + 1); @@ -134,7 +134,7 @@ static int handler(void *user, const char *section, const char *name, } else if (MATCH("menu", "author")) { strncpy(fInfo->author, value, 64 - 1); } else { - return 0; /* unknown section/name, error */ + return 0; /* unknown section/name, error */ } return 1; @@ -175,8 +175,8 @@ void readCustomTitlesFromSD() { continue; } - char *repl = (char *) "fs:/vol/external01/"; - char *with = (char *) ""; + char *repl = (char *) "fs:/vol/external01/"; + char *with = (char *) ""; char *input = (char *) dirList.GetFilepath(i); char *path = StringTools::str_replace(input, repl, with); @@ -250,20 +250,20 @@ void readCustomTitlesFromSD() { } } - cur_title_info->titleId = TITLE_ID_HOMEBREW_MASK | gFileInfos[j].lowerTitleID; + cur_title_info->titleId = TITLE_ID_HOMEBREW_MASK | gFileInfos[j].lowerTitleID; cur_title_info->titleVersion = 1; - cur_title_info->groupId = 0x400; + cur_title_info->groupId = 0x400; - cur_title_info->osVersion = OSGetOSID(); + cur_title_info->osVersion = OSGetOSID(); cur_title_info->sdkVersion = __OSGetProcessSDKVersion(); - cur_title_info->unk0x60 = 0; + cur_title_info->unk0x60 = 0; j++; } } DECL_FUNCTION(int32_t, MCP_TitleList, uint32_t handle, uint32_t *outTitleCount, MCPTitleListType *titleList, uint32_t size) { - int32_t result = real_MCP_TitleList(handle, outTitleCount, titleList, size); + int32_t result = real_MCP_TitleList(handle, outTitleCount, titleList, size); uint32_t titlecount = *outTitleCount; for (auto &gFileInfo : gFileInfos) { @@ -300,14 +300,13 @@ DECL_FUNCTION(int32_t, ACPCheckTitleLaunchByTitleListTypeEx, MCPTitleListType *t int result = real_ACPCheckTitleLaunchByTitleListTypeEx(title, u2); return result; - } DECL_FUNCTION(int, FSOpenFile, FSClient *client, FSCmdBlock *block, char *path, const char *mode, int *handle, int error) { - const char *start = "/vol/storage_mlc01/sys/title/0005000F"; - const char *icon = ".tga"; + const char *start = "/vol/storage_mlc01/sys/title/0005000F"; + const char *icon = ".tga"; const char *iconTex = "iconTex.tga"; - const char *sound = ".btsnd"; + const char *sound = ".btsnd"; if (StringTools::EndsWith(path, icon) || StringTools::EndsWith(path, sound)) { if (strncmp(path, start, strlen(start)) == 0) { @@ -316,12 +315,12 @@ DECL_FUNCTION(int, FSOpenFile, FSClient *client, FSCmdBlock *block, char *path, if (StringTools::EndsWith(path, iconTex)) { // fallback to dummy icon if loaded homebrew is no .wbf *handle = 0x13371338; - res = FS_STATUS_OK; + res = FS_STATUS_OK; } uint32_t lowerTitleID; - char *id = path + 1 + strlen(start); - id[8] = 0; + char *id = path + 1 + strlen(start); + id[8] = 0; char *ending = id + 9; sscanf(id, "%08X", &lowerTitleID); int32_t idVal = getIDByLowerTitleID(lowerTitleID); @@ -344,8 +343,8 @@ DECL_FUNCTION(FSStatus, FSCloseFile, FSClient *client, FSCmdBlock *block, FSFile if (handle == 0x13371338) { return FS_STATUS_OK; } else if ((handle & 0xFF000000) == 0xFF000000) { - int32_t fd = (handle & 0x00000FFF); - int32_t romid = (handle & 0x00FFF000) >> 12; + int32_t fd = (handle & 0x00000FFF); + int32_t romid = (handle & 0x00FFF000) >> 12; uint32_t rl_handle = gFileHandleWrapper[fd].handle; RL_FileClose(rl_handle); if (gFileInfos[romid].openedFiles--) { @@ -369,7 +368,7 @@ DECL_FUNCTION(FSStatus, FSReadFile, FSClient *client, FSCmdBlock *block, uint8_t memcpy(buffer, iconTex_tga, cpySize); return (FSStatus) (cpySize / size); } else if ((handle & 0xFF000000) == 0xFF000000) { - int32_t fd = (handle & 0x00000FFF); + int32_t fd = (handle & 0x00000FFF); int32_t romid = (handle & 0x00FFF000) >> 12; uint32_t rl_handle = gFileHandleWrapper[fd].handle; @@ -426,8 +425,8 @@ DECL_FUNCTION(int32_t, ACPGetLaunchMetaXml, ACPMetaXml *metaxml) { DECL_FUNCTION(uint32_t, ACPGetApplicationBox, uint32_t *u1, uint32_t *u2, uint32_t u3, uint32_t u4) { if (u3 == UPPER_TITLE_ID_HOMEBREW) { uint64_t titleID = _SYSGetSystemApplicationTitleId(SYSTEM_APP_ID_HEALTH_AND_SAFETY); - u3 = (uint32_t) (titleID >> 32); - u4 = (uint32_t) (0x00000000FFFFFFFF & titleID); + u3 = (uint32_t) (titleID >> 32); + u4 = (uint32_t) (0x00000000FFFFFFFF & titleID); } uint32_t result = real_ACPGetApplicationBox(u1, u2, u3, u4); return result; @@ -439,8 +438,8 @@ DECL_FUNCTION(uint32_t, ACPGetApplicationBox, uint32_t *u1, uint32_t *u2, uint32 DECL_FUNCTION(uint32_t, PatchChkStart__3RplFRCQ3_2nn6drmapp8StartArg, uint32_t *param) { if (param[2] == UPPER_TITLE_ID_HOMEBREW) { uint64_t titleID = _SYSGetSystemApplicationTitleId(SYSTEM_APP_ID_HEALTH_AND_SAFETY); - param[2] = (uint32_t) (titleID >> 32); - param[3] = (uint32_t) (0x00000000FFFFFFFF & titleID); + param[2] = (uint32_t) (titleID >> 32); + param[3] = (uint32_t) (0x00000000FFFFFFFF & titleID); } uint32_t result = real_PatchChkStart__3RplFRCQ3_2nn6drmapp8StartArg(param); return result; @@ -452,8 +451,8 @@ DECL_FUNCTION(uint32_t, PatchChkStart__3RplFRCQ3_2nn6drmapp8StartArg, uint32_t * DECL_FUNCTION(uint32_t, MCP_RightCheckLaunchable, uint32_t *u1, uint32_t *u2, uint32_t u3, uint32_t u4, uint32_t u5) { if (u3 == UPPER_TITLE_ID_HOMEBREW) { uint64_t titleID = _SYSGetSystemApplicationTitleId(SYSTEM_APP_ID_HEALTH_AND_SAFETY); - u3 = (uint32_t) (titleID >> 32); - u4 = (uint32_t) (0x00000000FFFFFFFF & titleID); + u3 = (uint32_t) (titleID >> 32); + u4 = (uint32_t) (0x00000000FFFFFFFF & titleID); } uint32_t result = real_MCP_RightCheckLaunchable(u1, u2, u3, u4, u5); return result; @@ -500,8 +499,8 @@ DECL_FUNCTION(uint32_t, GetTitleVersionInfo__Q2_2nn4vctlFPQ3_2nn4vctl16TitleVers if (expected_u3 == u3 && expected_u4 == u4) { if (titleVersionInfo != nullptr) { titleVersionInfo->currentVersion = 129; - titleVersionInfo->neededVersion = 129; - titleVersionInfo->needsUpdate = 0; + titleVersionInfo->neededVersion = 129; + titleVersionInfo->needsUpdate = 0; } return 0; } diff --git a/src/utils/StringTools.cpp b/src/utils/StringTools.cpp index d5c366f..7ffed91 100644 --- a/src/utils/StringTools.cpp +++ b/src/utils/StringTools.cpp @@ -23,17 +23,16 @@ * * for WiiXplorer 2010 ***************************************************************************/ -#include -#include -#include #include +#include #include -#include -#include +#include +#include #include -#include -#include #include +#include +#include +#include BOOL StringTools::EndsWith(const std::string &a, const std::string &b) { @@ -85,7 +84,7 @@ const wchar_t *StringTools::wfmt(const char *format, ...) { static char tmp[512]; static wchar_t strWChar[512]; strWChar[0] = 0; - tmp[0] = 0; + tmp[0] = 0; if (!format) return (const wchar_t *) strWChar; @@ -98,7 +97,7 @@ const wchar_t *StringTools::wfmt(const char *format, ...) { if ((vsprintf(tmp, format, va) >= 0)) { int bt; int32_t strlength = strlen(tmp); - bt = mbstowcs(strWChar, tmp, (strlength < 512) ? strlength : 512); + bt = mbstowcs(strWChar, tmp, (strlength < 512) ? strlength : 512); if (bt > 0) { strWChar[bt] = 0; @@ -112,13 +111,13 @@ const wchar_t *StringTools::wfmt(const char *format, ...) { int32_t StringTools::strprintf(std::string &str, const char *format, ...) { static char tmp[512]; - tmp[0] = 0; + tmp[0] = 0; int32_t result = 0; va_list va; va_start(va, format); if ((vsprintf(tmp, format, va) >= 0)) { - str = tmp; + str = tmp; result = str.size(); } va_end(va); @@ -215,7 +214,7 @@ const char *StringTools::FullpathToFilename(const char *path) { if (!path) return path; - const char *ptr = path; + const char *ptr = path; const char *Filename = ptr; while (*ptr != '\0') { @@ -244,13 +243,13 @@ void StringTools::RemoveDoubleSlashs(std::string &str) { // You must free the result if result is non-NULL. char *StringTools::str_replace(char *orig, char *rep, char *with) { - char *result; // the return string - char *ins; // the next insert point - char *tmp; // varies - int len_rep; // length of rep (the string to remove) - int len_with; // length of with (the string to replace rep with) + char *result; // the return string + char *ins; // the next insert point + char *tmp; // varies + int len_rep; // length of rep (the string to remove) + int len_with; // length of with (the string to replace rep with) int len_front; // distance between rep and end of last rep - int count; // number of replacements + int count; // number of replacements // sanity checks and initialization if (!orig || !rep) @@ -279,10 +278,10 @@ char *StringTools::str_replace(char *orig, char *rep, char *with) { // ins points to the next occurrence of rep in orig // orig points to the remainder of orig after "end of rep" while (count--) { - ins = strstr(orig, rep); + ins = strstr(orig, rep); len_front = ins - orig; - tmp = strncpy(tmp, orig, len_front) + len_front; - tmp = strcpy(tmp, with) + len_with; + tmp = strncpy(tmp, orig, len_front) + len_front; + tmp = strcpy(tmp, with) + len_with; orig += len_front + len_rep; // move to next "end of rep" } strcpy(tmp, orig); diff --git a/src/utils/StringTools.h b/src/utils/StringTools.h index 851aa73..d1a1570 100644 --- a/src/utils/StringTools.h +++ b/src/utils/StringTools.h @@ -26,8 +26,8 @@ #ifndef __STRING_TOOLS_H #define __STRING_TOOLS_H -#include #include +#include #include class StringTools { @@ -62,4 +62,3 @@ public: }; #endif /* __STRING_TOOLS_H */ - diff --git a/src/utils/ini.c b/src/utils/ini.c index ccf4640..b33c2b0 100644 --- a/src/utils/ini.c +++ b/src/utils/ini.c @@ -1,12 +1,16 @@ /* inih -- simple .INI file parser +SPDX-License-Identifier: BSD-3-Clause + +Copyright (C) 2009-2020, Ben Hoyt + inih is released under the New BSD license (see LICENSE.txt). Go to the project home page for more info: https://github.com/benhoyt/inih */ - +// clang-format off #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) #define _CRT_SECURE_NO_WARNINGS #endif @@ -18,7 +22,17 @@ https://github.com/benhoyt/inih #include "ini.h" #if !INI_USE_STACK +#if INI_CUSTOM_ALLOCATOR +#include +void* ini_malloc(size_t size); +void ini_free(void* ptr); +void* ini_realloc(void* ptr, size_t size); +#else #include +#define ini_malloc malloc +#define ini_free free +#define ini_realloc realloc +#endif #endif #define MAX_SECTION 50 @@ -48,7 +62,7 @@ static char* lskip(const char* s) } /* Return pointer to first char (of chars) or inline comment in given string, - or pointer to null at end of string if neither found. Inline comment must + or pointer to NUL at end of string if neither found. Inline comment must be prefixed by a whitespace character to register as a comment. */ static char* find_chars_or_comment(const char* s, const char* chars) { @@ -67,14 +81,15 @@ static char* find_chars_or_comment(const char* s, const char* chars) return (char*)s; } -/* Version of strncpy that ensures dest (size bytes) is null-terminated. */ +/* Similar to strncpy, but ensures dest (size bytes) is + NUL-terminated, and doesn't pad with NULs. */ static char* strncpy0(char* dest, const char* src, size_t size) { -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wstringop-truncation" - strncpy(dest, src, size - 1); -#pragma GCC diagnostic pop - dest[size - 1] = '\0'; + /* Could use strncpy internally, but it causes gcc warnings (see issue #91) */ + size_t i; + for (i = 0; i < size - 1 && src[i]; i++) + dest[i] = src[i]; + dest[i] = '\0'; return dest; } @@ -88,11 +103,11 @@ int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, int max_line = INI_MAX_LINE; #else char* line; - int max_line = INI_INITIAL_ALLOC; + size_t max_line = INI_INITIAL_ALLOC; #endif -#if INI_ALLOW_REALLOC +#if INI_ALLOW_REALLOC && !INI_USE_STACK char* new_line; - int offset; + size_t offset; #endif char section[MAX_SECTION] = ""; char prev_name[MAX_NAME] = ""; @@ -105,7 +120,7 @@ int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, int error = 0; #if !INI_USE_STACK - line = (char*)malloc(INI_INITIAL_ALLOC); + line = (char*)ini_malloc(INI_INITIAL_ALLOC); if (!line) { return -2; } @@ -118,20 +133,20 @@ int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, #endif /* Scan through stream line by line */ - while (reader(line, max_line, stream) != NULL) { -#if INI_ALLOW_REALLOC + while (reader(line, (int)max_line, stream) != NULL) { +#if INI_ALLOW_REALLOC && !INI_USE_STACK offset = strlen(line); while (offset == max_line - 1 && line[offset - 1] != '\n') { max_line *= 2; if (max_line > INI_MAX_LINE) max_line = INI_MAX_LINE; - new_line = realloc(line, max_line); + new_line = ini_realloc(line, max_line); if (!new_line) { - free(line); + ini_free(line); return -2; } line = new_line; - if (reader(line + offset, max_line - offset, stream) == NULL) + if (reader(line + offset, (int)(max_line - offset), stream) == NULL) break; if (max_line >= INI_MAX_LINE) break; @@ -169,6 +184,10 @@ int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, *end = '\0'; strncpy0(section, start + 1, sizeof(section)); *prev_name = '\0'; +#if INI_CALL_HANDLER_ON_NEW_SECTION + if (!HANDLER(user, section, NULL, NULL) && !error) + error = lineno; +#endif } else if (!error) { /* No ']' found on section line */ @@ -197,7 +216,14 @@ int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, } else if (!error) { /* No '=' or ':' found on name[=:]value line */ +#if INI_ALLOW_NO_VALUE + *end = '\0'; + name = rstrip(start); + if (!HANDLER(user, section, name, NULL) && !error) + error = lineno; +#else error = lineno; +#endif } } @@ -208,7 +234,7 @@ int ini_parse_stream(ini_reader reader, void* stream, ini_handler handler, } #if !INI_USE_STACK - free(line); + ini_free(line); #endif return error; diff --git a/src/utils/ini.h b/src/utils/ini.h index 7b1f03b..5568f63 100644 --- a/src/utils/ini.h +++ b/src/utils/ini.h @@ -1,14 +1,18 @@ /* inih -- simple .INI file parser +SPDX-License-Identifier: BSD-3-Clause + +Copyright (C) 2009-2020, Ben Hoyt + inih is released under the New BSD license (see LICENSE.txt). Go to the project home page for more info: https://github.com/benhoyt/inih */ - -#ifndef __INI_H__ -#define __INI_H__ +// clang-format off +#ifndef INI_H +#define INI_H /* Make this header file easier to include in C++ code */ #ifdef __cplusplus @@ -73,7 +77,7 @@ int ini_parse_string(const char* string, ini_handler handler, void* user); #endif /* Nonzero to allow a UTF-8 BOM sequence (0xEF 0xBB 0xBF) at the start of - the file. See http://code.google.com/p/inih/issues/detail?id=21 */ + the file. See https://github.com/benhoyt/inih/issues/21 */ #ifndef INI_ALLOW_BOM #define INI_ALLOW_BOM 1 #endif @@ -123,8 +127,31 @@ int ini_parse_string(const char* string, ini_handler handler, void* user); #define INI_STOP_ON_FIRST_ERROR 0 #endif +/* Nonzero to call the handler at the start of each new section (with + name and value NULL). Default is to only call the handler on + each name=value pair. */ +#ifndef INI_CALL_HANDLER_ON_NEW_SECTION +#define INI_CALL_HANDLER_ON_NEW_SECTION 0 +#endif + +/* Nonzero to allow a name without a value (no '=' or ':' on the line) and + call the handler with value NULL in this case. Default is to treat + no-value lines as an error. */ +#ifndef INI_ALLOW_NO_VALUE +#define INI_ALLOW_NO_VALUE 0 +#endif + +/* Nonzero to use custom ini_malloc, ini_free, and ini_realloc memory + allocation functions (INI_USE_STACK must also be 0). These functions must + have the same signatures as malloc/free/realloc and behave in a similar + way. ini_realloc is only needed if INI_ALLOW_REALLOC is set. */ +#ifndef INI_CUSTOM_ALLOCATOR +#define INI_CUSTOM_ALLOCATOR 0 +#endif + + #ifdef __cplusplus } #endif -#endif /* __INI_H__ */ \ No newline at end of file +#endif /* INI_H */ diff --git a/src/utils/logger.c b/src/utils/logger.c index 0411db7..f700806 100644 --- a/src/utils/logger.c +++ b/src/utils/logger.c @@ -1,19 +1,19 @@ #ifdef DEBUG #include -#include #include #include +#include uint32_t moduleLogInit = false; -uint32_t cafeLogInit = false; -uint32_t udpLogInit = false; +uint32_t cafeLogInit = false; +uint32_t udpLogInit = false; #endif // DEBUG void initLogging() { #ifdef DEBUG if (!(moduleLogInit = WHBLogModuleInit())) { cafeLogInit = WHBLogCafeInit(); - udpLogInit = WHBLogUdpInit(); + udpLogInit = WHBLogUdpInit(); } #endif // DEBUG } diff --git a/src/utils/logger.h b/src/utils/logger.h index 6ff5ae2..061d52e 100644 --- a/src/utils/logger.h +++ b/src/utils/logger.h @@ -1,7 +1,7 @@ #pragma once -#include #include +#include #ifdef __cplusplus extern "C" { @@ -9,26 +9,28 @@ extern "C" { #ifdef DEBUG -#define __FILENAME_X__ (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__) -#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILENAME_X__) +#define __FILENAME_X__ (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__) +#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILENAME_X__) #define DEBUG_FUNCTION_LINE_VERBOSE(FMT, ARGS...) while (0) -#define DEBUG_FUNCTION_LINE(FMT, ARGS...)do { \ - WHBLogPrintf("[%23s]%30s@L%04d: " FMT "",__FILENAME__,__FUNCTION__, __LINE__, ## ARGS); \ +#define DEBUG_FUNCTION_LINE(FMT, ARGS...) \ + do { \ + WHBLogPrintf("[%23s]%30s@L%04d: " FMT "", __FILENAME__, __FUNCTION__, __LINE__, ##ARGS); \ } while (0) -#define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...)do { \ - WHBLogWritef("[%23s]%30s@L%04d: " FMT "",__FILENAME__,__FUNCTION__, __LINE__, ## ARGS); \ +#define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...) \ + do { \ + WHBLogWritef("[%23s]%30s@L%04d: " FMT "", __FILENAME__, __FUNCTION__, __LINE__, ##ARGS); \ } while (0) #else #define DEBUG_FUNCTION_LINE_VERBOSE(FMT, ARGS...) while (0) -#define DEBUG_FUNCTION_LINE(FMT, ARGS...) while (0) +#define DEBUG_FUNCTION_LINE(FMT, ARGS...) while (0) -#define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...) while (0) +#define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...) while (0) #endif @@ -39,4 +41,3 @@ void deinitLogging(); #ifdef __cplusplus } #endif - diff --git a/src/utils/utils.c b/src/utils/utils.c index 4f5fcd4..90e39fa 100644 --- a/src/utils/utils.c +++ b/src/utils/utils.c @@ -1,8 +1,8 @@ -#include -#include -#include -#include #include "utils/logger.h" +#include +#include +#include +#include // https://gist.github.com/ccbrown/9722406 void dumpHex(const void *data, size_t size) { diff --git a/src/utils/utils.h b/src/utils/utils.h index 1d00f98..a65f134 100644 --- a/src/utils/utils.h +++ b/src/utils/utils.h @@ -7,23 +7,24 @@ extern "C" { #endif -#define LIMIT(x, min, max) \ - ({ \ - typeof( x ) _x = x; \ - typeof( min ) _min = min; \ - typeof( max ) _max = max; \ - ( ( ( _x ) < ( _min ) ) ? ( _min ) : ( ( _x ) > ( _max ) ) ? ( _max) : ( _x ) ); \ -}) +#define LIMIT(x, min, max) \ + ({ \ + typeof(x) _x = x; \ + typeof(min) _min = min; \ + typeof(max) _max = max; \ + (((_x) < (_min)) ? (_min) : ((_x) > (_max)) ? (_max) \ + : (_x)); \ + }) -#define DegToRad(a) ( (a) * 0.01745329252f ) -#define RadToDeg(a) ( (a) * 57.29577951f ) +#define DegToRad(a) ((a) *0.01745329252f) +#define RadToDeg(a) ((a) *57.29577951f) -#define ALIGN4(x) (((x) + 3) & ~3) -#define ALIGN32(x) (((x) + 31) & ~31) +#define ALIGN4(x) (((x) + 3) & ~3) +#define ALIGN32(x) (((x) + 31) & ~31) -#define le16(i) ((((uint16_t) ((i) & 0xFF)) << 8) | ((uint16_t) (((i) & 0xFF00) >> 8))) -#define le32(i) ((((uint32_t)le16((i) & 0xFFFF)) << 16) | ((uint32_t)le16(((i) & 0xFFFF0000) >> 16))) -#define le64(i) ((((uint64_t)le32((i) & 0xFFFFFFFFLL)) << 32) | ((uint64_t)le32(((i) & 0xFFFFFFFF00000000LL) >> 32))) +#define le16(i) ((((uint16_t) ((i) &0xFF)) << 8) | ((uint16_t) (((i) &0xFF00) >> 8))) +#define le32(i) ((((uint32_t) le16((i) &0xFFFF)) << 16) | ((uint32_t) le16(((i) &0xFFFF0000) >> 16))) +#define le64(i) ((((uint64_t) le32((i) &0xFFFFFFFFLL)) << 32) | ((uint64_t) le32(((i) &0xFFFFFFFF00000000LL) >> 32))) //Needs to have log_init() called beforehand. void dumpHex(const void *data, size_t size);