aboutsummaryrefslogtreecommitdiffstats
path: root/recovery.cpp
diff options
context:
space:
mode:
authorDoug Zongker <dougz@android.com>2013-05-14 11:03:02 -0700
committerDoug Zongker <dougz@android.com>2013-05-21 11:18:38 -0700
commit7c3ae45ef9306d2ff4b491e0488c8849bf15ce90 (patch)
tree1fe30d8091a86909ed9705ea6983a1b051a07620 /recovery.cpp
parent4e21482d979f6f81b34f92e664adf137555d4504 (diff)
downloadbootable_recovery-7c3ae45ef9306d2ff4b491e0488c8849bf15ce90.zip
bootable_recovery-7c3ae45ef9306d2ff4b491e0488c8849bf15ce90.tar.gz
bootable_recovery-7c3ae45ef9306d2ff4b491e0488c8849bf15ce90.tar.bz2
recovery: turn on text display for install errors in debug builds
Hopefully this will reduce the number of OTA "bugs" reported that are really just someone having changed their system partition, invalidating future incremental OTAs. Also fixes a longstanding TODO about putting LOGE() output in the on-screen display. Change-Id: I44e5be65b2dee7ebce2cce28ccd920dc3d6e522e
Diffstat (limited to 'recovery.cpp')
-rw-r--r--recovery.cpp35
1 files changed, 33 insertions, 2 deletions
diff --git a/recovery.cpp b/recovery.cpp
index 7002cb8..a84d833 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -15,11 +15,13 @@
*/
#include <ctype.h>
+#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
#include <getopt.h>
#include <limits.h>
#include <linux/input.h>
+#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -27,7 +29,6 @@
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
-#include <dirent.h>
#include "bootloader.h"
#include "common.h"
@@ -801,6 +802,24 @@ load_locale_from_cache() {
}
}
+static RecoveryUI* gCurrentUI = NULL;
+
+void
+ui_print(const char* format, ...) {
+ char buffer[256];
+
+ va_list ap;
+ va_start(ap, format);
+ vsnprintf(buffer, sizeof(buffer), format, ap);
+ va_end(ap);
+
+ if (gCurrentUI != NULL) {
+ gCurrentUI->Print("%s", buffer);
+ } else {
+ fputs(buffer, stdout);
+ }
+}
+
int
main(int argc, char **argv) {
time_t start = time(NULL);
@@ -856,6 +875,7 @@ main(int argc, char **argv) {
Device* device = make_device();
ui = device->GetUI();
+ gCurrentUI = ui;
ui->Init();
ui->SetLocale(locale);
@@ -909,7 +929,18 @@ main(int argc, char **argv) {
LOGE("Cache wipe (requested by package) failed.");
}
}
- if (status != INSTALL_SUCCESS) ui->Print("Installation aborted.\n");
+ if (status != INSTALL_SUCCESS) {
+ ui->Print("Installation aborted.\n");
+
+ // If this is an eng or userdebug build, then automatically
+ // turn the text display on if the script fails so the error
+ // message is visible.
+ char buffer[PROPERTY_VALUE_MAX+1];
+ property_get("ro.build.fingerprint", buffer, "");
+ if (strstr(buffer, ":userdebug/") || strstr(buffer, ":eng/")) {
+ ui->ShowText(true);
+ }
+ }
} else if (wipe_data) {
if (device->WipeData()) status = INSTALL_ERROR;
if (erase_volume("/data")) status = INSTALL_ERROR;