diff options
| author | Ketut Putu Kumajaya <ketut.kumajaya@gmail.com> | 2015-05-24 13:56:05 +0700 |
|---|---|---|
| committer | Michael Bestas <mikeioannina@gmail.com> | 2017-04-28 20:47:54 +0300 |
| commit | 1876f22a1cfe8d29250f0f2664d67442f8d2d465 (patch) | |
| tree | c4830980d485ce37492a289e86277bcf494680cd | |
| parent | 078c25fbc98130347381120620ce6eddbf552ccd (diff) | |
recovery: Fix multi version baseband/TrustZone support
* Also improve the UI messages a bit
Change-Id: I4000a76c875cd063f4e5f16708fba9bf5368a073
| -rw-r--r-- | recovery/recovery_updater.cpp | 66 |
1 files changed, 42 insertions, 24 deletions
diff --git a/recovery/recovery_updater.cpp b/recovery/recovery_updater.cpp index 8a31c91..8008faa 100644 --- a/recovery/recovery_updater.cpp +++ b/recovery/recovery_updater.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2015, The CyanogenMod Project + * Copyright (C) 2017, The LineageOS Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -192,37 +193,44 @@ err_ret: /* verify_baseband("BASEBAND_VERSION", "BASEBAND_VERSION", ...) */ Value * VerifyBasebandFn(const char *name, State *state, int argc, Expr *argv[]) { char current_baseband_version[BASEBAND_VER_BUF_LEN]; - char *baseband_version; int i, ret; ret = get_baseband_version(current_baseband_version, BASEBAND_VER_BUF_LEN); if (ret) { - return ErrorAbort(state, kVendorFailure, "%s() failed to read current BASEBAND version: %d", + return ErrorAbort(state, kVendorFailure, "%s() failed to read current baseband version: %d", name, ret); } + char** baseband_version = ReadVarArgs(state, argc, argv); + if (baseband_version == NULL) { + return ErrorAbort(state, "%s() error parsing arguments", name); + } + + ret = 0; for (i = 0; i < argc; i++) { - baseband_version = Evaluate(state, argv[i]); - if (baseband_version < 0) { - return ErrorAbort(state, kArgsParsingFailure, "%s() error parsing arguments: %d", - name, baseband_version); + uiPrintf(state, "Comparing baseband version %s to %s", + baseband_version[i], current_baseband_version); + if (strncmp(baseband_version[i], current_baseband_version, strlen(baseband_version[i])) == 0) { + ret = 1; + break; } + } - uiPrintf(state, "Comparing BASEBAND version %s to %s", - baseband_version, current_baseband_version); - if (strncmp(baseband_version, current_baseband_version, strlen(baseband_version)) == 0) { - return StringValue(strdup("1")); - } + if (ret == 0) { + uiPrintf(state, "ERROR: It appears you are running an unsupported baseband."); } - uiPrintf(state, "ERROR: It appears you are running an unsupported baseband."); - return StringValue(strdup("0")); + for (i = 0; i < argc; i++) { + free(baseband_version[i]); + } + free(baseband_version); + + return StringValue(strdup(ret ? "1" : "0")); } /* verify_trustzone("TZ_VERSION", "TZ_VERSION", ...) */ Value * VerifyTrustZoneFn(const char *name, State *state, int argc, Expr *argv[]) { char current_tz_version[TZ_VER_BUF_LEN]; - char *tz_version; int i, ret; ret = get_tz_version(current_tz_version, TZ_VER_BUF_LEN); @@ -231,21 +239,31 @@ Value * VerifyTrustZoneFn(const char *name, State *state, int argc, Expr *argv[] name, ret); } - for (i = 1; i <= argc; i++) { - ret = ReadArgs(state, argv, i, &tz_version); - if (ret < 0) { - return ErrorAbort(state, "%s() error parsing arguments: %d", - name, ret); - } + char** tz_version = ReadVarArgs(state, argc, argv); + if (tz_version == NULL) { + return ErrorAbort(state, "%s() error parsing arguments", name); + } + ret = 0; + for (i = 0; i < argc; i++) { uiPrintf(state, "Comparing TZ version %s to %s", - tz_version, current_tz_version); - if (strncmp(tz_version, current_tz_version, strlen(tz_version)) == 0) { - return StringValue(strdup("1")); + tz_version[i], current_tz_version); + if (strncmp(tz_version[i], current_tz_version, strlen(tz_version[i])) == 0) { + ret = 1; + break; } } - return StringValue(strdup("0")); + if (ret == 0) { + uiPrintf(state, "ERROR: It appears you are running an unsupported TZ."); + } + + for (i = 0; i < argc; i++) { + free(tz_version[i]); + } + free(tz_version); + + return StringValue(strdup(ret ? "1" : "0")); } void Register_librecovery_updater_cm() { |
