aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKetut Putu Kumajaya <ketut.kumajaya@gmail.com>2015-05-24 13:56:05 +0700
committerMichael Bestas <mikeioannina@gmail.com>2017-04-28 20:47:54 +0300
commit1876f22a1cfe8d29250f0f2664d67442f8d2d465 (patch)
treec4830980d485ce37492a289e86277bcf494680cd
parent078c25fbc98130347381120620ce6eddbf552ccd (diff)
recovery: Fix multi version baseband/TrustZone support
* Also improve the UI messages a bit Change-Id: I4000a76c875cd063f4e5f16708fba9bf5368a073
-rw-r--r--recovery/recovery_updater.cpp66
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() {