save uncrypt status to last_install
am: e16e799dfd
Change-Id: I0cac4258690c9ab6a6122a9e67c8453050aabcfc
This commit is contained in:
13
install.cpp
13
install.cpp
@@ -30,6 +30,8 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include <android-base/file.h>
|
||||||
|
#include <android-base/logging.h>
|
||||||
#include <android-base/parseint.h>
|
#include <android-base/parseint.h>
|
||||||
#include <android-base/stringprintf.h>
|
#include <android-base/stringprintf.h>
|
||||||
#include <android-base/strings.h>
|
#include <android-base/strings.h>
|
||||||
@@ -54,6 +56,7 @@ static constexpr const char* AB_OTA_PAYLOAD_PROPERTIES = "payload_properties.txt
|
|||||||
static constexpr const char* AB_OTA_PAYLOAD = "payload.bin";
|
static constexpr const char* AB_OTA_PAYLOAD = "payload.bin";
|
||||||
#define PUBLIC_KEYS_FILE "/res/keys"
|
#define PUBLIC_KEYS_FILE "/res/keys"
|
||||||
static constexpr const char* METADATA_PATH = "META-INF/com/android/metadata";
|
static constexpr const char* METADATA_PATH = "META-INF/com/android/metadata";
|
||||||
|
static constexpr const char* UNCRYPT_STATUS = "/cache/recovery/uncrypt_status";
|
||||||
|
|
||||||
// Default allocation of progress bar segments to operations
|
// Default allocation of progress bar segments to operations
|
||||||
static const int VERIFICATION_PROGRESS_TIME = 60;
|
static const int VERIFICATION_PROGRESS_TIME = 60;
|
||||||
@@ -539,6 +542,16 @@ install_package(const char* path, bool* wipe_cache, const char* install_file,
|
|||||||
fprintf(install_log, "%s\n", s.c_str());
|
fprintf(install_log, "%s\n", s.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 {
|
||||||
|
fprintf(install_log, "%s\n", android::base::Trim(uncrypt_status).c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
fclose(install_log);
|
fclose(install_log);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -134,6 +134,7 @@
|
|||||||
// devices, on which /cache partitions always exist.
|
// devices, on which /cache partitions always exist.
|
||||||
static const std::string CACHE_BLOCK_MAP = "/cache/recovery/block.map";
|
static const std::string CACHE_BLOCK_MAP = "/cache/recovery/block.map";
|
||||||
static const std::string UNCRYPT_PATH_FILE = "/cache/recovery/uncrypt_file";
|
static const std::string UNCRYPT_PATH_FILE = "/cache/recovery/uncrypt_file";
|
||||||
|
static const std::string UNCRYPT_STATUS = "/cache/recovery/uncrypt_status";
|
||||||
static const std::string UNCRYPT_SOCKET = "uncrypt";
|
static const std::string UNCRYPT_SOCKET = "uncrypt";
|
||||||
|
|
||||||
static struct fstab* fstab = nullptr;
|
static struct fstab* fstab = nullptr;
|
||||||
@@ -466,12 +467,32 @@ static bool uncrypt_wrapper(const char* input_path, const char* map_file, const
|
|||||||
input_path = package.c_str();
|
input_path = package.c_str();
|
||||||
}
|
}
|
||||||
CHECK(map_file != nullptr);
|
CHECK(map_file != nullptr);
|
||||||
|
|
||||||
|
#define UNCRYPT_TIME_HOLDER 0x7FFFFFFF
|
||||||
|
// Intialize the uncrypt time cost to a huge number so that we can tell from
|
||||||
|
// the statistics if an uncrypt fails to finish.
|
||||||
|
if (!android::base::WriteStringToFile(android::base::StringPrintf(
|
||||||
|
"uncrypt_time: %d\n", UNCRYPT_TIME_HOLDER), UNCRYPT_STATUS)) {
|
||||||
|
PLOG(WARNING) << "failed to write to " << UNCRYPT_STATUS;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto start = std::chrono::system_clock::now();
|
||||||
int status = uncrypt(input_path, map_file, socket);
|
int status = uncrypt(input_path, map_file, socket);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
write_status_to_socket(-1, socket);
|
write_status_to_socket(-1, socket);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::chrono::duration<double> duration = std::chrono::system_clock::now() - start;
|
||||||
|
int count = static_cast<int>(duration.count());
|
||||||
|
// Overwrite the uncrypt_time if uncrypt finishes successfully.
|
||||||
|
if (!android::base::WriteStringToFile(
|
||||||
|
android::base::StringPrintf("uncrypt_time: %d\n", count), UNCRYPT_STATUS)) {
|
||||||
|
PLOG(WARNING) << "failed to write to " << UNCRYPT_STATUS;
|
||||||
|
}
|
||||||
|
|
||||||
write_status_to_socket(100, socket);
|
write_status_to_socket(100, socket);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user