summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTao Bao <tbao@google.com>2016-09-26 20:39:14 +0200
committerTao Bao <tbao@google.com>2016-09-26 23:46:12 +0200
commitf4885adc189f246ac3c651aa5cb2e74a240f3f1e (patch)
tree3a26ae4f7b0d956c3398aa7fa48fece3ecbf341d
parentMerge "Check corruption when reading uncrypt_status file" (diff)
downloadandroid_bootable_recovery-f4885adc189f246ac3c651aa5cb2e74a240f3f1e.tar
android_bootable_recovery-f4885adc189f246ac3c651aa5cb2e74a240f3f1e.tar.gz
android_bootable_recovery-f4885adc189f246ac3c651aa5cb2e74a240f3f1e.tar.bz2
android_bootable_recovery-f4885adc189f246ac3c651aa5cb2e74a240f3f1e.tar.lz
android_bootable_recovery-f4885adc189f246ac3c651aa5cb2e74a240f3f1e.tar.xz
android_bootable_recovery-f4885adc189f246ac3c651aa5cb2e74a240f3f1e.tar.zst
android_bootable_recovery-f4885adc189f246ac3c651aa5cb2e74a240f3f1e.zip
-rw-r--r--install.cpp60
-rw-r--r--recovery.cpp20
2 files changed, 42 insertions, 38 deletions
diff --git a/install.cpp b/install.cpp
index 4c697420f..01b839ff0 100644
--- a/install.cpp
+++ b/install.cpp
@@ -358,13 +358,6 @@ install_package(const char* path, bool* wipe_cache, const char* install_file,
modified_flash = true;
auto start = std::chrono::system_clock::now();
- FILE* install_log = fopen_path(install_file, "w");
- if (install_log) {
- fputs(path, install_log);
- fputc('\n', install_log);
- } else {
- PLOG(ERROR) << "failed to open last_install";
- }
int result;
std::vector<std::string> log_buffer;
if (setup_install_mounts() != 0) {
@@ -373,32 +366,39 @@ install_package(const char* path, bool* wipe_cache, const char* install_file,
} else {
result = really_install_package(path, wipe_cache, needs_mount, log_buffer, retry_count);
}
- if (install_log != nullptr) {
- fputc(result == INSTALL_SUCCESS ? '1' : '0', install_log);
- fputc('\n', install_log);
- std::chrono::duration<double> duration = std::chrono::system_clock::now() - start;
- int count = static_cast<int>(duration.count());
- // Report the time spent to apply OTA update in seconds.
- fprintf(install_log, "time_total: %d\n", count);
- fprintf(install_log, "retry: %d\n", retry_count);
-
- for (const auto& s : log_buffer) {
- fprintf(install_log, "%s\n", s.c_str());
- }
- if (ensure_path_mounted(UNCRYPT_STATUS) != 0) {
- LOG(WARNING) << "Can't mount " << UNCRYPT_STATUS;
+ // Measure the time spent to apply OTA update in seconds.
+ std::chrono::duration<double> duration = std::chrono::system_clock::now() - start;
+ int time_total = static_cast<int>(duration.count());
+
+ if (ensure_path_mounted(UNCRYPT_STATUS) != 0) {
+ LOG(WARNING) << "Can't mount " << UNCRYPT_STATUS;
+ } else {
+ std::string uncrypt_status;
+ if (!android::base::ReadFileToString(UNCRYPT_STATUS, &uncrypt_status)) {
+ PLOG(WARNING) << "failed to read uncrypt status";
+ } else if (!android::base::StartsWith(uncrypt_status, "uncrypt_time:")) {
+ PLOG(WARNING) << "corrupted uncrypt_status: " << uncrypt_status;
} else {
- std::string uncrypt_status;
- if (!android::base::ReadFileToString(UNCRYPT_STATUS, &uncrypt_status)) {
- PLOG(WARNING) << "failed to read uncrypt status";
- } else if (!android::base::StartsWith(uncrypt_status, "uncrypt_time:")) {
- PLOG(WARNING) << "corrupted uncrypt_status: " << uncrypt_status;
- } else {
- fprintf(install_log, "%s\n", android::base::Trim(uncrypt_status).c_str());
- }
+ log_buffer.push_back(android::base::Trim(uncrypt_status));
}
- fclose(install_log);
}
+
+ // The first two lines need to be the package name and install result.
+ std::vector<std::string> log_header = {
+ path,
+ result == INSTALL_SUCCESS ? "1" : "0",
+ "time_total: " + std::to_string(time_total),
+ "retry: " + std::to_string(retry_count),
+ };
+ std::string log_content = android::base::Join(log_header, "\n") + "\n" +
+ android::base::Join(log_buffer, "\n");
+ if (!android::base::WriteStringToFile(log_content, install_file)) {
+ PLOG(ERROR) << "failed to write " << install_file;
+ }
+
+ // Write a copy into last_log.
+ LOG(INFO) << log_content;
+
return result;
}
diff --git a/recovery.cpp b/recovery.cpp
index aad24644a..6f1e33ccb 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -1557,15 +1557,19 @@ int main(int argc, char **argv) {
BATTERY_OK_PERCENTAGE);
// Log the error code to last_install when installation skips due to
// low battery.
- FILE* install_log = fopen_path(LAST_INSTALL_FILE, "w");
- if (install_log != nullptr) {
- fprintf(install_log, "%s\n", update_package);
- fprintf(install_log, "0\n");
- fprintf(install_log, "error: %d\n", kLowBattery);
- fclose(install_log);
- } else {
- PLOG(ERROR) << "failed to open last_install";
+ std::vector<std::string> log_buffer = {
+ update_package,
+ "0", // install result
+ "error: " + std::to_string(kLowBattery),
+ };
+ std::string log_content = android::base::Join(log_buffer, "\n");
+ if (!android::base::WriteStringToFile(log_content, LAST_INSTALL_FILE)) {
+ PLOG(ERROR) << "failed to write " << LAST_INSTALL_FILE;
}
+
+ // Also write the info into last_log.
+ LOG(INFO) << log_content;
+
status = INSTALL_SKIPPED;
} else {
status = install_package(update_package, &should_wipe_cache,