diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2017-07-22 01:14:08 +0200 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-07-22 01:14:08 +0200 |
commit | 9187f1cc51cc04155754d0ed34a5fc875acb9af4 (patch) | |
tree | 94a0a75ffeb5b94c55369a976ae0959484723eaa | |
parent | Merge "Fix a case when brotli writer fails to write last few blocks of data" (diff) | |
parent | Avoid crashing recovery with unwritable /cache. (diff) | |
download | android_bootable_recovery-9187f1cc51cc04155754d0ed34a5fc875acb9af4.tar android_bootable_recovery-9187f1cc51cc04155754d0ed34a5fc875acb9af4.tar.gz android_bootable_recovery-9187f1cc51cc04155754d0ed34a5fc875acb9af4.tar.bz2 android_bootable_recovery-9187f1cc51cc04155754d0ed34a5fc875acb9af4.tar.lz android_bootable_recovery-9187f1cc51cc04155754d0ed34a5fc875acb9af4.tar.xz android_bootable_recovery-9187f1cc51cc04155754d0ed34a5fc875acb9af4.tar.zst android_bootable_recovery-9187f1cc51cc04155754d0ed34a5fc875acb9af4.zip |
-rw-r--r-- | recovery.cpp | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/recovery.cpp b/recovery.cpp index e2d993e23..55b12d5dd 100644 --- a/recovery.cpp +++ b/recovery.cpp @@ -477,40 +477,38 @@ static void copy_logs() { sync(); } -// clear the recovery command and prepare to boot a (hopefully working) system, +// Clear the recovery command and prepare to boot a (hopefully working) system, // copy our log file to cache as well (for the system to read). This function is // idempotent: call it as many times as you like. static void finish_recovery() { - // Save the locale to cache, so if recovery is next started up - // without a --locale argument (eg, directly from the bootloader) - // it will use the last-known locale. - if (!locale.empty() && has_cache) { - LOG(INFO) << "Saving locale \"" << locale << "\""; - - FILE* fp = fopen_path(LOCALE_FILE, "we"); - if (!android::base::WriteStringToFd(locale, fileno(fp))) { - PLOG(ERROR) << "Failed to save locale to " << LOCALE_FILE; - } - check_and_fclose(fp, LOCALE_FILE); + // Save the locale to cache, so if recovery is next started up without a '--locale' argument + // (e.g., directly from the bootloader) it will use the last-known locale. + if (!locale.empty() && has_cache) { + LOG(INFO) << "Saving locale \"" << locale << "\""; + if (ensure_path_mounted(LOCALE_FILE) != 0) { + LOG(ERROR) << "Failed to mount " << LOCALE_FILE; + } else if (!android::base::WriteStringToFile(locale, LOCALE_FILE)) { + PLOG(ERROR) << "Failed to save locale to " << LOCALE_FILE; } + } - copy_logs(); + copy_logs(); - // Reset to normal system boot so recovery won't cycle indefinitely. - std::string err; - if (!clear_bootloader_message(&err)) { - LOG(ERROR) << "Failed to clear BCB message: " << err; - } + // Reset to normal system boot so recovery won't cycle indefinitely. + std::string err; + if (!clear_bootloader_message(&err)) { + LOG(ERROR) << "Failed to clear BCB message: " << err; + } - // Remove the command file, so recovery won't repeat indefinitely. - if (has_cache) { - if (ensure_path_mounted(COMMAND_FILE) != 0 || (unlink(COMMAND_FILE) && errno != ENOENT)) { - LOG(WARNING) << "Can't unlink " << COMMAND_FILE; - } - ensure_path_unmounted(CACHE_ROOT); + // Remove the command file, so recovery won't repeat indefinitely. + if (has_cache) { + if (ensure_path_mounted(COMMAND_FILE) != 0 || (unlink(COMMAND_FILE) && errno != ENOENT)) { + LOG(WARNING) << "Can't unlink " << COMMAND_FILE; } + ensure_path_unmounted(CACHE_ROOT); + } - sync(); // For good measure. + sync(); // For good measure. } struct saved_log_file { |