From 3077a184078ebcd057cd6ac75cf7f0d4ecf6913c Mon Sep 17 00:00:00 2001 From: Xavier Chapron Date: Mon, 29 Jan 2024 11:19:37 +0100 Subject: [PATCH] Improve SDK_API_LEVEL handling --- src/emulate.c | 19 +++++-------------- src/launcher.c | 42 +++++++++++------------------------------- src/sdk.h | 6 +++++- 3 files changed, 21 insertions(+), 46 deletions(-) diff --git a/src/emulate.c b/src/emulate.c index 0fb60ae0..d5d64638 100644 --- a/src/emulate.c +++ b/src/emulate.c @@ -38,21 +38,12 @@ int emulate(unsigned long syscall, unsigned long *parameters, case SDK_BLUE_2_2_5: retid = emulate_blue_2_2_5(syscall, parameters, ret, verbose); break; - case SDK_API_LEVEL_1: - case SDK_API_LEVEL_3: - case SDK_API_LEVEL_5: - case SDK_API_LEVEL_7: - case SDK_API_LEVEL_8: - case SDK_API_LEVEL_9: - case SDK_API_LEVEL_10: - case SDK_API_LEVEL_11: - case SDK_API_LEVEL_12: - case SDK_API_LEVEL_13: - case SDK_API_LEVEL_14: - retid = - emulate_unified_sdk(syscall, parameters, ret, verbose, version, model); - break; default: + if ((version >= SDK_API_LEVEL_1) && (version < SDK_COUNT)) { + retid = emulate_unified_sdk(syscall, parameters, ret, verbose, version, + model); + break; + } errx(1, "Unsupported SDK version %u", version); break; } diff --git a/src/launcher.c b/src/launcher.c index 3ccd6b42..4c831f8d 100644 --- a/src/launcher.c +++ b/src/launcher.c @@ -633,31 +633,15 @@ static int load_apps(int argc, char *argv[]) static sdk_version_t apilevelstr2sdkver(const char *api_level_arg) { - if (strcmp("1", api_level_arg) == 0) { - return SDK_API_LEVEL_1; - } else if (strcmp("3", api_level_arg) == 0) { - return SDK_API_LEVEL_3; - } else if (strcmp("5", api_level_arg) == 0) { - return SDK_API_LEVEL_5; - } else if (strcmp("7", api_level_arg) == 0) { - return SDK_API_LEVEL_7; - } else if (strcmp("8", api_level_arg) == 0) { - return SDK_API_LEVEL_8; - } else if (strcmp("9", api_level_arg) == 0) { - return SDK_API_LEVEL_9; - } else if (strcmp("10", api_level_arg) == 0) { - return SDK_API_LEVEL_10; - } else if (strcmp("11", api_level_arg) == 0) { - return SDK_API_LEVEL_11; - } else if (strcmp("12", api_level_arg) == 0) { - return SDK_API_LEVEL_12; - } else if (strcmp("13", api_level_arg) == 0) { - return SDK_API_LEVEL_13; - } else if (strcmp("14", api_level_arg) == 0) { - return SDK_API_LEVEL_14; - } else { + int api_level = atoi(api_level_arg); + int _sdk_version = api_level - 1 + SDK_API_LEVEL_1; + + if ((api_level <= 0) || (_sdk_version >= SDK_COUNT)) { + warnx("Invalid api level (\"%s\")", api_level_arg); return SDK_COUNT; } + + return _sdk_version; } static sdk_version_t sdkstr2sdkver(const char *sdk_arg) @@ -765,15 +749,16 @@ int main(int argc, char *argv[]) if (sdk_version == SDK_COUNT) { errx(1, "invalid SDK api_level: %s", api_level); } + fprintf(stderr, "[*] using API_LEVEL version %s on %s\n", api_level, + model_str); } else { sdk_version = sdkstr2sdkver(sdk); if (sdk_version == SDK_COUNT) { errx(1, "invalid SDK version: %s", sdk); } + fprintf(stderr, "[*] using SDK version %s on %s\n", sdk, model_str); } - fprintf(stderr, "[*] using SDK version %u on %s\n", sdk_version, model_str); - switch (hw_model) { case MODEL_NANO_S: if (sdk_version != SDK_NANO_S_1_5 && sdk_version != SDK_NANO_S_1_6 && @@ -825,12 +810,7 @@ int main(int argc, char *argv[]) if (sdk_version == SDK_NANO_S_2_0 || sdk_version == SDK_NANO_S_2_1 || sdk_version == SDK_NANO_X_2_0 || sdk_version == SDK_NANO_X_2_0_2 || sdk_version == SDK_NANO_SP_1_0 || sdk_version == SDK_NANO_SP_1_0_3 || - sdk_version == SDK_API_LEVEL_1 || sdk_version == SDK_API_LEVEL_3 || - sdk_version == SDK_API_LEVEL_5 || sdk_version == SDK_API_LEVEL_7 || - sdk_version == SDK_API_LEVEL_8 || sdk_version == SDK_API_LEVEL_9 || - sdk_version == SDK_API_LEVEL_10 || sdk_version == SDK_API_LEVEL_11 || - sdk_version == SDK_API_LEVEL_12 || sdk_version == SDK_API_LEVEL_13 || - sdk_version == SDK_API_LEVEL_14) { + ((sdk_version >= SDK_API_LEVEL_1) && (sdk_version < SDK_COUNT))) { if (load_cxlib(cxlib_path) != 0) { return 1; } diff --git a/src/sdk.h b/src/sdk.h index 263c828c..dd409b91 100644 --- a/src/sdk.h +++ b/src/sdk.h @@ -12,11 +12,15 @@ typedef enum { SDK_BLUE_2_2_5, SDK_NANO_SP_1_0, SDK_NANO_SP_1_0_3, - // Unified SDK versions only below, do not add unrelated versions + // Unified SDK versions only below, do not add unrelated versions. + // Make sure to add all API_LEVEL as apilevelstr2sdkver() relies on it // SDK_API_LEVEL_START SDK_API_LEVEL_1, + SDK_API_LEVEL_2, SDK_API_LEVEL_3, + SDK_API_LEVEL_4, SDK_API_LEVEL_5, + SDK_API_LEVEL_6, SDK_API_LEVEL_7, SDK_API_LEVEL_8, SDK_API_LEVEL_9,