Merge "Check an edge case when read(2) returns 0" am: 3202b8faf4 am: 852ae8d0fb am: 0ae9d80082
am: 28f6c43db5
Change-Id: I8fb1470e0f7e675c205bffe95c4fb9d0f202e4ed
diff --git a/Android.mk b/Android.mk
index 6aa29c1..74910a1 100644
--- a/Android.mk
+++ b/Android.mk
@@ -149,7 +149,7 @@
asn1_decoder.cpp \
verifier.cpp \
ui.cpp
-LOCAL_STATIC_LIBRARIES := libcrypto_utils libcrypto
+LOCAL_STATIC_LIBRARIES := libcrypto_utils libcrypto libbase
include $(BUILD_STATIC_LIBRARY)
include \
diff --git a/applypatch/Android.mk b/applypatch/Android.mk
index 604787e..0fc6e36 100644
--- a/applypatch/Android.mk
+++ b/applypatch/Android.mk
@@ -80,7 +80,7 @@
libminzip \
libcrypto \
libbz
-LOCAL_SHARED_LIBRARIES += libz libcutils libc
+LOCAL_SHARED_LIBRARIES += libbase libz libcutils libc
include $(BUILD_EXECUTABLE)
# imgdiff (host static executable)
diff --git a/common.h b/common.h
index de8b409..a948fb1 100644
--- a/common.h
+++ b/common.h
@@ -21,18 +21,6 @@
#include <stdio.h>
#include <stdarg.h>
-#define LOGE(...) ui_print("E:" __VA_ARGS__)
-#define LOGW(...) fprintf(stdout, "W:" __VA_ARGS__)
-#define LOGI(...) fprintf(stdout, "I:" __VA_ARGS__)
-
-#if 0
-#define LOGV(...) fprintf(stdout, "V:" __VA_ARGS__)
-#define LOGD(...) fprintf(stdout, "D:" __VA_ARGS__)
-#else
-#define LOGV(...) do {} while (0)
-#define LOGD(...) do {} while (0)
-#endif
-
#define STRINGIFY(x) #x
#define EXPAND(x) STRINGIFY(x)
diff --git a/install.cpp b/install.cpp
index afc3c92..4afa15c 100644
--- a/install.cpp
+++ b/install.cpp
@@ -34,6 +34,7 @@
#include <android-base/stringprintf.h>
#include <android-base/strings.h>
#include <cutils/properties.h>
+#include <android-base/logging.h>
#include "common.h"
#include "error_code.h"
@@ -70,20 +71,20 @@
}
}
- LOGE("Failed to parse build number in %s.\n", str.c_str());
+ LOG(ERROR) << "Failed to parse build number in " << str;
return -1;
}
bool read_metadata_from_package(ZipArchive* zip, std::string* meta_data) {
const ZipEntry* meta_entry = mzFindZipEntry(zip, METADATA_PATH);
if (meta_entry == nullptr) {
- LOGE("Failed to find %s in update package.\n", METADATA_PATH);
+ LOG(ERROR) << "Failed to find " << METADATA_PATH << " in update package";
return false;
}
meta_data->resize(meta_entry->uncompLen, '\0');
if (!mzReadZipEntry(zip, meta_entry, &(*meta_data)[0], meta_entry->uncompLen)) {
- LOGE("Failed to read metadata in update package.\n");
+ LOG(ERROR) << "Failed to read metadata in update package";
return false;
}
return true;
@@ -148,8 +149,7 @@
property_get("ro.product.device", value, "");
const std::string& pkg_device = metadata["pre-device"];
if (pkg_device != value || pkg_device.empty()) {
- LOGE("Package is for product %s but expected %s\n",
- pkg_device.c_str(), value);
+ LOG(ERROR) << "Package is for product " << pkg_device << " but expected " << value;
return INSTALL_ERROR;
}
@@ -158,12 +158,12 @@
property_get("ro.serialno", value, "");
const std::string& pkg_serial_no = metadata["serialno"];
if (!pkg_serial_no.empty() && pkg_serial_no != value) {
- LOGE("Package is for serial %s\n", pkg_serial_no.c_str());
+ LOG(ERROR) << "Package is for serial " << pkg_serial_no;
return INSTALL_ERROR;
}
if (metadata["ota-type"] != "AB") {
- LOGE("Package is not A/B\n");
+ LOG(ERROR) << "Package is not A/B";
return INSTALL_ERROR;
}
@@ -171,16 +171,15 @@
property_get("ro.build.version.incremental", value, "");
const std::string& pkg_pre_build = metadata["pre-build-incremental"];
if (!pkg_pre_build.empty() && pkg_pre_build != value) {
- LOGE("Package is for source build %s but expected %s\n",
- pkg_pre_build.c_str(), value);
+ LOG(ERROR) << "Package is for source build " << pkg_pre_build << " but expected " << value;
return INSTALL_ERROR;
}
property_get("ro.build.fingerprint", value, "");
const std::string& pkg_pre_build_fingerprint = metadata["pre-build"];
if (!pkg_pre_build_fingerprint.empty() &&
pkg_pre_build_fingerprint != value) {
- LOGE("Package is for source build %s but expected %s\n",
- pkg_pre_build_fingerprint.c_str(), value);
+ LOG(ERROR) << "Package is for source build " << pkg_pre_build_fingerprint
+ << " but expected " << value;
return INSTALL_ERROR;
}
@@ -195,15 +194,13 @@
&pkg_post_timespampt) ||
pkg_post_timespampt < build_timestampt) {
if (metadata["ota-downgrade"] != "yes") {
- LOGE("Update package is older than the current build, expected a "
- "build newer than timestamp %" PRIu64 " but package has "
- "timestamp %" PRIu64 " and downgrade not allowed.\n",
- build_timestampt, pkg_post_timespampt);
+ LOG(ERROR) << "Update package is older than the current build, expected a build "
+ "newer than timestamp " << build_timestampt << " but package has "
+ "timestamp " << pkg_post_timespampt << " and downgrade not allowed.";
return INSTALL_ERROR;
}
if (pkg_pre_build_fingerprint.empty()) {
- LOGE("Downgrade package must have a pre-build version set, not "
- "allowed.\n");
+ LOG(ERROR) << "Downgrade package must have a pre-build version set, not allowed.";
return INSTALL_ERROR;
}
}
@@ -225,20 +222,20 @@
const ZipEntry* properties_entry =
mzFindZipEntry(zip, AB_OTA_PAYLOAD_PROPERTIES);
if (!properties_entry) {
- LOGE("Can't find %s\n", AB_OTA_PAYLOAD_PROPERTIES);
+ LOG(ERROR) << "Can't find " << AB_OTA_PAYLOAD_PROPERTIES;
return INSTALL_CORRUPT;
}
std::vector<unsigned char> payload_properties(
mzGetZipEntryUncompLen(properties_entry));
if (!mzExtractZipEntryToBuffer(zip, properties_entry,
payload_properties.data())) {
- LOGE("Can't extract %s\n", AB_OTA_PAYLOAD_PROPERTIES);
+ LOG(ERROR) << "Can't extract " << AB_OTA_PAYLOAD_PROPERTIES;
return INSTALL_CORRUPT;
}
const ZipEntry* payload_entry = mzFindZipEntry(zip, AB_OTA_PAYLOAD);
if (!payload_entry) {
- LOGE("Can't find %s\n", AB_OTA_PAYLOAD);
+ LOG(ERROR) << "Can't find " << AB_OTA_PAYLOAD;
return INSTALL_CORRUPT;
}
long payload_offset = mzGetZipEntryOffset(payload_entry);
@@ -270,14 +267,14 @@
unlink(binary);
int fd = creat(binary, 0755);
if (fd < 0) {
- LOGE("Can't make %s\n", binary);
+ PLOG(ERROR) << "Can't make " << binary;
return INSTALL_ERROR;
}
bool ok = mzExtractZipEntryToFile(zip, binary_entry, fd);
close(fd);
if (!ok) {
- LOGE("Can't copy %s\n", ASSUMED_UPDATE_BINARY_NAME);
+ LOG(ERROR) << "Can't copy " << ASSUMED_UPDATE_BINARY_NAME;
return INSTALL_ERROR;
}
@@ -423,7 +420,7 @@
// last_install later.
log_buffer.push_back(std::string(strtok(NULL, "\n")));
} else {
- LOGE("unknown command [%s]\n", command);
+ LOG(ERROR) << "unknown command [" << command << "]";
}
}
fclose(from_child);
@@ -434,7 +431,7 @@
return INSTALL_RETRY;
}
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
- LOGE("Error in %s\n(Status %d)\n", path, WEXITSTATUS(status));
+ LOG(ERROR) << "Error in " << path << " (Status " << WEXITSTATUS(status) << ")";
return INSTALL_ERROR;
}
@@ -450,7 +447,7 @@
// Give verification half the progress bar...
ui->SetProgressType(RecoveryUI::DETERMINATE);
ui->ShowProgress(VERIFICATION_PROGRESS_FRACTION, VERIFICATION_PROGRESS_TIME);
- LOGI("Update location: %s\n", path);
+ LOG(INFO) << "Update location: " << path;
// Map the update package into memory.
ui->Print("Opening update package...\n");
@@ -465,7 +462,7 @@
MemMapping map;
if (sysMapFile(path, &map) != 0) {
- LOGE("failed to map file\n");
+ LOG(ERROR) << "failed to map file";
return INSTALL_CORRUPT;
}
@@ -480,7 +477,7 @@
ZipArchive zip;
int err = mzOpenZipArchive(map.addr, map.length, &zip);
if (err != 0) {
- LOGE("Can't open %s\n(%s)\n", path, err != -1 ? strerror(err) : "bad");
+ LOG(ERROR) << "Can't open " << path;
log_buffer.push_back(android::base::StringPrintf("error: %d", kZipOpenFailure));
sysReleaseMap(&map);
@@ -514,12 +511,12 @@
fputs(path, install_log);
fputc('\n', install_log);
} else {
- LOGE("failed to open last_install: %s\n", strerror(errno));
+ PLOG(ERROR) << "failed to open last_install";
}
int result;
std::vector<std::string> log_buffer;
if (setup_install_mounts() != 0) {
- LOGE("failed to set up expected mounts for install; aborting\n");
+ LOG(ERROR) << "failed to set up expected mounts for install; aborting";
result = INSTALL_ERROR;
} else {
result = really_install_package(path, wipe_cache, needs_mount, log_buffer, retry_count);
@@ -545,10 +542,10 @@
bool verify_package(const unsigned char* package_data, size_t package_size) {
std::vector<Certificate> loadedKeys;
if (!load_keys(PUBLIC_KEYS_FILE, loadedKeys)) {
- LOGE("Failed to load keys\n");
+ LOG(ERROR) << "Failed to load keys";
return false;
}
- LOGI("%zu key(s) loaded from %s\n", loadedKeys.size(), PUBLIC_KEYS_FILE);
+ LOG(INFO) << loadedKeys.size() << " key(s) loaded from " << PUBLIC_KEYS_FILE;
// Verify package.
ui->Print("Verifying update package...\n");
@@ -557,8 +554,8 @@
std::chrono::duration<double> duration = std::chrono::system_clock::now() - t0;
ui->Print("Update package verification took %.1f s (result %d).\n", duration.count(), err);
if (err != VERIFY_SUCCESS) {
- LOGE("Signature verification failed\n");
- LOGE("error: %d\n", kZipVerificationFailure);
+ LOG(ERROR) << "Signature verification failed";
+ LOG(ERROR) << "error: " << kZipVerificationFailure;
return false;
}
return true;
diff --git a/minzip/Android.mk b/minzip/Android.mk
index 3d36fd6..6dbfee9 100644
--- a/minzip/Android.mk
+++ b/minzip/Android.mk
@@ -2,17 +2,17 @@
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
- Hash.c \
- SysUtil.c \
+ Hash.cpp \
+ SysUtil.cpp \
DirUtil.cpp \
Inlines.c \
- Zip.c
+ Zip.cpp
LOCAL_C_INCLUDES := \
external/zlib \
external/safe-iop/include
-LOCAL_STATIC_LIBRARIES := libselinux
+LOCAL_STATIC_LIBRARIES := libselinux libbase
LOCAL_MODULE := libminzip
diff --git a/minzip/Hash.c b/minzip/Hash.cpp
similarity index 96%
rename from minzip/Hash.c
rename to minzip/Hash.cpp
index 49bcb31..ac08935 100644
--- a/minzip/Hash.c
+++ b/minzip/Hash.cpp
@@ -8,8 +8,8 @@
#include <stdlib.h>
#include <assert.h>
-#define LOG_TAG "minzip"
-#include "Log.h"
+#include <android-base/logging.h>
+
#include "Hash.h"
/* table load factor, i.e. how full can it get before we resize */
@@ -220,8 +220,7 @@
{
if (!resizeHash(pHashTable, pHashTable->tableSize * 2)) {
/* don't really have a way to indicate failure */
- LOGE("Dalvik hash resize failure\n");
- abort();
+ LOG(FATAL) << "Hash resize failure";
}
/* note "pEntry" is now invalid */
}
@@ -373,7 +372,7 @@
totalProbe += count;
}
- LOGV("Probe: min=%d max=%d, total=%d in %d (%d), avg=%.3f\n",
- minProbe, maxProbe, totalProbe, numEntries, pHashTable->tableSize,
- (float) totalProbe / (float) numEntries);
+ LOG(VERBOSE) << "Probe: min=" << minProbe << ", max=" << maxProbe << ", total="
+ << totalProbe <<" in " << numEntries << " (" << pHashTable->tableSize
+ << "), avg=" << (float) totalProbe / (float) numEntries;
}
diff --git a/minzip/Log.h b/minzip/Log.h
deleted file mode 100644
index 36e62f5..0000000
--- a/minzip/Log.h
+++ /dev/null
@@ -1,207 +0,0 @@
-//
-// Copyright 2005 The Android Open Source Project
-//
-// C/C++ logging functions. See the logging documentation for API details.
-//
-// We'd like these to be available from C code (in case we import some from
-// somewhere), so this has a C interface.
-//
-// The output will be correct when the log file is shared between multiple
-// threads and/or multiple processes so long as the operating system
-// supports O_APPEND. These calls have mutex-protected data structures
-// and so are NOT reentrant. Do not use LOG in a signal handler.
-//
-#ifndef _MINZIP_LOG_H
-#define _MINZIP_LOG_H
-
-#include <stdio.h>
-
-// ---------------------------------------------------------------------
-
-/*
- * Normally we strip LOGV (VERBOSE messages) from release builds.
- * You can modify this (for example with "#define LOG_NDEBUG 0"
- * at the top of your source file) to change that behavior.
- */
-#ifndef LOG_NDEBUG
-#ifdef NDEBUG
-#define LOG_NDEBUG 1
-#else
-#define LOG_NDEBUG 0
-#endif
-#endif
-
-/*
- * This is the local tag used for the following simplified
- * logging macros. You can change this preprocessor definition
- * before using the other macros to change the tag.
- */
-#ifndef LOG_TAG
-#define LOG_TAG NULL
-#endif
-
-// ---------------------------------------------------------------------
-
-/*
- * Simplified macro to send a verbose log message using the current LOG_TAG.
- */
-#ifndef LOGV
-#if LOG_NDEBUG
-#define LOGV(...) ((void)0)
-#else
-#define LOGV(...) ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
-#endif
-#endif
-
-#define CONDITION(cond) (__builtin_expect((cond)!=0, 0))
-
-#ifndef LOGV_IF
-#if LOG_NDEBUG
-#define LOGV_IF(cond, ...) ((void)0)
-#else
-#define LOGV_IF(cond, ...) \
- ( (CONDITION(cond)) \
- ? ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) \
- : (void)0 )
-#endif
-#endif
-
-#define LOGVV LOGV
-#define LOGVV_IF LOGV_IF
-
-/*
- * Simplified macro to send a debug log message using the current LOG_TAG.
- */
-#ifndef LOGD
-#define LOGD(...) ((void)LOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__))
-#endif
-
-#ifndef LOGD_IF
-#define LOGD_IF(cond, ...) \
- ( (CONDITION(cond)) \
- ? ((void)LOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) \
- : (void)0 )
-#endif
-
-/*
- * Simplified macro to send an info log message using the current LOG_TAG.
- */
-#ifndef LOGI
-#define LOGI(...) ((void)LOG(LOG_INFO, LOG_TAG, __VA_ARGS__))
-#endif
-
-#ifndef LOGI_IF
-#define LOGI_IF(cond, ...) \
- ( (CONDITION(cond)) \
- ? ((void)LOG(LOG_INFO, LOG_TAG, __VA_ARGS__)) \
- : (void)0 )
-#endif
-
-/*
- * Simplified macro to send a warning log message using the current LOG_TAG.
- */
-#ifndef LOGW
-#define LOGW(...) ((void)LOG(LOG_WARN, LOG_TAG, __VA_ARGS__))
-#endif
-
-#ifndef LOGW_IF
-#define LOGW_IF(cond, ...) \
- ( (CONDITION(cond)) \
- ? ((void)LOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) \
- : (void)0 )
-#endif
-
-/*
- * Simplified macro to send an error log message using the current LOG_TAG.
- */
-#ifndef LOGE
-#define LOGE(...) ((void)LOG(LOG_ERROR, LOG_TAG, __VA_ARGS__))
-#endif
-
-#ifndef LOGE_IF
-#define LOGE_IF(cond, ...) \
- ( (CONDITION(cond)) \
- ? ((void)LOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) \
- : (void)0 )
-#endif
-
-
-/*
- * Conditional based on whether the current LOG_TAG is enabled at
- * verbose priority.
- */
-#ifndef IF_LOGV
-#if LOG_NDEBUG
-#define IF_LOGV() if (false)
-#else
-#define IF_LOGV() IF_LOG(LOG_VERBOSE, LOG_TAG)
-#endif
-#endif
-
-/*
- * Conditional based on whether the current LOG_TAG is enabled at
- * debug priority.
- */
-#ifndef IF_LOGD
-#define IF_LOGD() IF_LOG(LOG_DEBUG, LOG_TAG)
-#endif
-
-/*
- * Conditional based on whether the current LOG_TAG is enabled at
- * info priority.
- */
-#ifndef IF_LOGI
-#define IF_LOGI() IF_LOG(LOG_INFO, LOG_TAG)
-#endif
-
-/*
- * Conditional based on whether the current LOG_TAG is enabled at
- * warn priority.
- */
-#ifndef IF_LOGW
-#define IF_LOGW() IF_LOG(LOG_WARN, LOG_TAG)
-#endif
-
-/*
- * Conditional based on whether the current LOG_TAG is enabled at
- * error priority.
- */
-#ifndef IF_LOGE
-#define IF_LOGE() IF_LOG(LOG_ERROR, LOG_TAG)
-#endif
-
-// ---------------------------------------------------------------------
-
-/*
- * Basic log message macro.
- *
- * Example:
- * LOG(LOG_WARN, NULL, "Failed with error %d", errno);
- *
- * The second argument may be NULL or "" to indicate the "global" tag.
- *
- * Non-gcc probably won't have __FUNCTION__. It's not vital. gcc also
- * offers __PRETTY_FUNCTION__, which is rather more than we need.
- */
-#ifndef LOG
-#define LOG(priority, tag, ...) \
- LOG_PRI(ANDROID_##priority, tag, __VA_ARGS__)
-#endif
-
-/*
- * Log macro that allows you to specify a number for the priority.
- */
-#ifndef LOG_PRI
-#define LOG_PRI(priority, tag, ...) \
- printf(tag ": " __VA_ARGS__)
-#endif
-
-/*
- * Conditional given a desired logging priority and tag.
- */
-#ifndef IF_LOG
-#define IF_LOG(priority, tag) \
- if (1)
-#endif
-
-#endif // _MINZIP_LOG_H
diff --git a/minzip/SysUtil.c b/minzip/SysUtil.cpp
similarity index 63%
rename from minzip/SysUtil.c
rename to minzip/SysUtil.cpp
index e7dd17b..efeb91c 100644
--- a/minzip/SysUtil.c
+++ b/minzip/SysUtil.cpp
@@ -8,6 +8,7 @@
#include <fcntl.h>
#include <limits.h>
#include <stdbool.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -16,8 +17,8 @@
#include <sys/types.h>
#include <unistd.h>
-#define LOG_TAG "sysutil"
-#include "Log.h"
+#include <android-base/logging.h>
+
#include "SysUtil.h"
static bool sysMapFD(int fd, MemMapping* pMap) {
@@ -25,22 +26,22 @@
struct stat sb;
if (fstat(fd, &sb) == -1) {
- LOGE("fstat(%d) failed: %s\n", fd, strerror(errno));
+ PLOG(ERROR) << "fstat(" << fd << ") failed";
return false;
}
void* memPtr = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
if (memPtr == MAP_FAILED) {
- LOGE("mmap(%d, R, PRIVATE, %d, 0) failed: %s\n", (int) sb.st_size, fd, strerror(errno));
+ PLOG(ERROR) << "mmap(" << sb.st_size << ", R, PRIVATE, " << fd << ", 0) failed";
return false;
}
- pMap->addr = memPtr;
+ pMap->addr = reinterpret_cast<unsigned char*>(memPtr);
pMap->length = sb.st_size;
pMap->range_count = 1;
- pMap->ranges = malloc(sizeof(MappedRange));
+ pMap->ranges = reinterpret_cast<MappedRange*>(malloc(sizeof(MappedRange)));
if (pMap->ranges == NULL) {
- LOGE("malloc failed: %s\n", strerror(errno));
+ PLOG(ERROR) << "malloc failed";
munmap(memPtr, sb.st_size);
return false;
}
@@ -60,7 +61,7 @@
unsigned int i;
if (fgets(block_dev, sizeof(block_dev), mapf) == NULL) {
- LOGE("failed to read block device from header\n");
+ PLOG(ERROR) << "failed to read block device from header";
return -1;
}
for (i = 0; i < sizeof(block_dev); ++i) {
@@ -71,37 +72,37 @@
}
if (fscanf(mapf, "%zu %u\n%u\n", &size, &blksize, &range_count) != 3) {
- LOGE("failed to parse block map header\n");
+ LOG(ERROR) << "failed to parse block map header";
return -1;
}
if (blksize != 0) {
blocks = ((size-1) / blksize) + 1;
}
if (size == 0 || blksize == 0 || blocks > SIZE_MAX / blksize || range_count == 0) {
- LOGE("invalid data in block map file: size %zu, blksize %u, range_count %u\n",
- size, blksize, range_count);
+ LOG(ERROR) << "invalid data in block map file: size " << size << ", blksize " << blksize
+ << ", range_count " << range_count;
return -1;
}
pMap->range_count = range_count;
- pMap->ranges = calloc(range_count, sizeof(MappedRange));
+ pMap->ranges = reinterpret_cast<MappedRange*>(calloc(range_count, sizeof(MappedRange)));
if (pMap->ranges == NULL) {
- LOGE("calloc(%u, %zu) failed: %s\n", range_count, sizeof(MappedRange), strerror(errno));
+ PLOG(ERROR) << "calloc(" << range_count << ", " << sizeof(MappedRange) << ") failed";
return -1;
}
// Reserve enough contiguous address space for the whole file.
- unsigned char* reserve;
- reserve = mmap64(NULL, blocks * blksize, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0);
+ unsigned char* reserve = reinterpret_cast<unsigned char*>(mmap64(NULL, blocks * blksize,
+ PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0));
if (reserve == MAP_FAILED) {
- LOGE("failed to reserve address space: %s\n", strerror(errno));
+ PLOG(ERROR) << "failed to reserve address space";
free(pMap->ranges);
return -1;
}
int fd = open(block_dev, O_RDONLY);
if (fd < 0) {
- LOGE("failed to open block device %s: %s\n", block_dev, strerror(errno));
+ PLOG(ERROR) << "failed to open block device " << block_dev;
munmap(reserve, blocks * blksize);
free(pMap->ranges);
return -1;
@@ -113,20 +114,20 @@
for (i = 0; i < range_count; ++i) {
size_t start, end;
if (fscanf(mapf, "%zu %zu\n", &start, &end) != 2) {
- LOGE("failed to parse range %d in block map\n", i);
+ LOG(ERROR) << "failed to parse range " << i << " in block map";
success = false;
break;
}
size_t length = (end - start) * blksize;
- if (end <= start || (end - start) > SIZE_MAX / blksize || length > remaining_size) {
- LOGE("unexpected range in block map: %zu %zu\n", start, end);
- success = false;
- break;
+ if (end <= start || ((end - start) > SIZE_MAX / blksize) || length > remaining_size) {
+ LOG(ERROR) << "unexpected range in block map: " << start << " " << end;
+ success = false;
+ break;
}
- void* addr = mmap64(next, length, PROT_READ, MAP_PRIVATE | MAP_FIXED, fd, ((off64_t)start)*blksize);
+ void* addr = mmap64(next, length, PROT_READ, MAP_PRIVATE | MAP_FIXED, fd, ((off64_t)(start*blksize)));
if (addr == MAP_FAILED) {
- LOGE("failed to map block %d: %s\n", i, strerror(errno));
+ PLOG(ERROR) << "failed to map block " << i;
success = false;
break;
}
@@ -137,21 +138,21 @@
remaining_size -= length;
}
if (success && remaining_size != 0) {
- LOGE("ranges in block map are invalid: remaining_size = %zu\n", remaining_size);
- success = false;
+ LOG(ERROR) << "ranges in block map are invalid: remaining_size = " << remaining_size;
+ success = false;
}
if (!success) {
- close(fd);
- munmap(reserve, blocks * blksize);
- free(pMap->ranges);
- return -1;
+ close(fd);
+ munmap(reserve, blocks * blksize);
+ free(pMap->ranges);
+ return -1;
}
close(fd);
pMap->addr = reserve;
pMap->length = size;
- LOGI("mmapped %d ranges\n", range_count);
+ LOG(INFO) << "mmapped " << range_count << " ranges";
return 0;
}
@@ -164,12 +165,12 @@
// A map of blocks
FILE* mapf = fopen(fn+1, "r");
if (mapf == NULL) {
- LOGE("Unable to open '%s': %s\n", fn+1, strerror(errno));
+ PLOG(ERROR) << "Unable to open '" << (fn+1) << "'";
return -1;
}
if (sysMapBlockFile(mapf, pMap) != 0) {
- LOGE("Map of '%s' failed\n", fn);
+ LOG(ERROR) << "Map of '" << fn << "' failed";
fclose(mapf);
return -1;
}
@@ -179,12 +180,12 @@
// This is a regular file.
int fd = open(fn, O_RDONLY);
if (fd == -1) {
- LOGE("Unable to open '%s': %s\n", fn, strerror(errno));
+ PLOG(ERROR) << "Unable to open '" << fn << "'";
return -1;
}
if (!sysMapFD(fd, pMap)) {
- LOGE("Map of '%s' failed\n", fn);
+ LOG(ERROR) << "Map of '" << fn << "' failed";
close(fd);
return -1;
}
@@ -202,8 +203,8 @@
int i;
for (i = 0; i < pMap->range_count; ++i) {
if (munmap(pMap->ranges[i].addr, pMap->ranges[i].length) < 0) {
- LOGE("munmap(%p, %d) failed: %s\n",
- pMap->ranges[i].addr, (int)pMap->ranges[i].length, strerror(errno));
+ PLOG(ERROR) << "munmap(" << pMap->ranges[i].addr << ", " << pMap->ranges[i].length
+ << ") failed";
}
}
free(pMap->ranges);
diff --git a/minzip/Zip.c b/minzip/Zip.cpp
similarity index 86%
rename from minzip/Zip.c
rename to minzip/Zip.cpp
index d557daa..b887b84 100644
--- a/minzip/Zip.c
+++ b/minzip/Zip.cpp
@@ -14,18 +14,18 @@
#include <sys/stat.h> // for S_ISLNK()
#include <unistd.h>
-#define LOG_TAG "minzip"
-#include "Zip.h"
-#include "Bits.h"
-#include "Log.h"
-#include "DirUtil.h"
+#include <string>
-#undef NDEBUG // do this after including Log.h
+#include <android-base/logging.h>
+#include <android-base/stringprintf.h>
#include <assert.h>
-
#include <selinux/label.h>
#include <selinux/selinux.h>
+#include "Zip.h"
+#include "Bits.h"
+#include "DirUtil.h"
+
#define SORT_ENTRIES 1
/*
@@ -154,8 +154,9 @@
found = (const ZipEntry*)mzHashTableLookup(pHash,
itemHash, pEntry, hashcmpZipEntry, true);
if (found != pEntry) {
- LOGW("WARNING: duplicate entry '%.*s' in Zip\n",
- found->fileNameLen, found->fileName);
+ LOG(WARNING) << "WARNING: duplicate entry '" << std::string(found->fileName,
+ found->fileNameLen) << "' in Zip";
+
/* keep going */
}
}
@@ -164,7 +165,7 @@
{
// Forbid super long filenames.
if (fileNameLen >= PATH_MAX) {
- LOGW("Filename too long (%d chatacters)\n", fileNameLen);
+ LOG(WARNING) << "Filename too long (" << fileNameLen << " chatacters)";
return 0;
}
@@ -172,7 +173,8 @@
unsigned int i;
for (i = 0; i < fileNameLen; ++i) {
if (fileName[i] < 32 || fileName[i] >= 127) {
- LOGW("Filename contains invalid character '\%03o'\n", fileName[i]);
+ LOG(WARNING) << android::base::StringPrintf(
+ "Filename contains invalid character '\%02x'\n", fileName[i]);
return 0;
}
}
@@ -201,10 +203,10 @@
*/
val = get4LE(pArchive->addr);
if (val == ENDSIG) {
- LOGW("Found Zip archive, but it looks empty\n");
+ LOG(WARNING) << "Found Zip archive, but it looks empty";
goto bail;
} else if (val != LOCSIG) {
- LOGW("Not a Zip archive (found 0x%08x)\n", val);
+ LOG(WARNING) << android::base::StringPrintf("Not a Zip archive (found 0x%08x)\n", val);
goto bail;
}
@@ -220,7 +222,7 @@
ptr--;
}
if (ptr < (const unsigned char*) pArchive->addr) {
- LOGW("Could not find end-of-central-directory in Zip\n");
+ LOG(WARNING) << "Could not find end-of-central-directory in Zip";
goto bail;
}
@@ -232,10 +234,10 @@
numEntries = get2LE(ptr + ENDSUB);
cdOffset = get4LE(ptr + ENDOFF);
- LOGVV("numEntries=%d cdOffset=%d\n", numEntries, cdOffset);
+ LOG(VERBOSE) << "numEntries=" << numEntries << " cdOffset=" << cdOffset;
if (numEntries == 0 || cdOffset >= pArchive->length) {
- LOGW("Invalid entries=%d offset=%d (len=%zd)\n",
- numEntries, cdOffset, pArchive->length);
+ LOG(WARNING) << "Invalid entries=" << numEntries << " offset=" << cdOffset
+ << " (len=" << pArchive->length << ")";
goto bail;
}
@@ -256,11 +258,11 @@
const char *fileName;
if (ptr + CENHDR > (const unsigned char*)pArchive->addr + pArchive->length) {
- LOGW("Ran off the end (at %d)\n", i);
+ LOG(WARNING) << "Ran off the end (at " << i << ")";
goto bail;
}
if (get4LE(ptr) != CENSIG) {
- LOGW("Missed a central dir sig (at %d)\n", i);
+ LOG(WARNING) << "Missed a central dir sig (at " << i << ")";
goto bail;
}
@@ -270,11 +272,11 @@
commentLen = get2LE(ptr + CENCOM);
fileName = (const char*)ptr + CENHDR;
if (fileName + fileNameLen > (const char*)pArchive->addr + pArchive->length) {
- LOGW("Filename ran off the end (at %d)\n", i);
+ LOG(WARNING) << "Filename ran off the end (at " << i << ")";
goto bail;
}
if (!validFilename(fileName, fileNameLen)) {
- LOGW("Invalid filename (at %d)\n", i);
+ LOG(WARNING) << "Invalid filename (at " << i << ")";
goto bail;
}
@@ -345,7 +347,8 @@
if ((pEntry->versionMadeBy & 0xff00) != 0 &&
(pEntry->versionMadeBy & 0xff00) != CENVEM_UNIX)
{
- LOGW("Incompatible \"version made by\": 0x%02x (at %d)\n",
+ LOG(WARNING) << android::base::StringPrintf(
+ "Incompatible \"version made by\": 0x%02x (at %d)\n",
pEntry->versionMadeBy >> 8, i);
goto bail;
}
@@ -355,26 +358,27 @@
// overflow. This is needed because localHdrOffset is untrusted.
if (!safe_add((uintptr_t *)&localHdr, (uintptr_t)pArchive->addr,
(uintptr_t)localHdrOffset)) {
- LOGW("Integer overflow adding in parseZipArchive\n");
+ LOG(WARNING) << "Integer overflow adding in parseZipArchive";
goto bail;
}
if ((uintptr_t)localHdr + LOCHDR >
(uintptr_t)pArchive->addr + pArchive->length) {
- LOGW("Bad offset to local header: %d (at %d)\n", localHdrOffset, i);
+ LOG(WARNING) << "Bad offset to local header: " << localHdrOffset
+ << " (at " << i << ")";
goto bail;
}
if (get4LE(localHdr) != LOCSIG) {
- LOGW("Missed a local header sig (at %d)\n", i);
+ LOG(WARNING) << "Missed a local header sig (at " << i << ")";
goto bail;
}
pEntry->offset = localHdrOffset + LOCHDR
+ get2LE(localHdr + LOCNAM) + get2LE(localHdr + LOCEXT);
if (!safe_add(NULL, pEntry->offset, pEntry->compLen)) {
- LOGW("Integer overflow adding in parseZipArchive\n");
+ LOG(WARNING) << "Integer overflow adding in parseZipArchive";
goto bail;
}
if ((size_t)pEntry->offset + pEntry->compLen > pArchive->length) {
- LOGW("Data ran off the end (at %d)\n", i);
+ LOG(WARNING) << "Data ran off the end (at " << i << ")";
goto bail;
}
@@ -432,7 +436,8 @@
if (length < ENDHDR) {
err = -1;
- LOGW("Archive %p is too small to be zip (%zd)\n", pArchive, length);
+ LOG(WARNING) << "Archive " << pArchive << " is too small to be zip ("
+ << length << ")";
goto bail;
}
@@ -441,7 +446,7 @@
if (!parseZipArchive(pArchive)) {
err = -1;
- LOGW("Parsing archive %p failed\n", pArchive);
+ LOG(WARNING) << "Parsing archive " << pArchive << " failed";
goto bail;
}
@@ -460,7 +465,7 @@
*/
void mzCloseZipArchive(ZipArchive* pArchive)
{
- LOGV("Closing archive %p\n", pArchive);
+ LOG(VERBOSE) << "Closing archive " << pArchive;
free(pArchive->pEntries);
@@ -534,10 +539,10 @@
zerr = inflateInit2(&zstream, -MAX_WBITS);
if (zerr != Z_OK) {
if (zerr == Z_VERSION_ERROR) {
- LOGE("Installed zlib is not compatible with linked version (%s)\n",
- ZLIB_VERSION);
+ LOG(ERROR) << "Installed zlib is not compatible with linked version ("
+ << ZLIB_VERSION << ")";
} else {
- LOGE("Call to inflateInit2 failed (zerr=%d)\n", zerr);
+ LOG(ERROR) << "Call to inflateInit2 failed (zerr=" << zerr << ")";
}
goto bail;
}
@@ -549,7 +554,7 @@
/* uncompress the data */
zerr = inflate(&zstream, Z_NO_FLUSH);
if (zerr != Z_OK && zerr != Z_STREAM_END) {
- LOGW("zlib inflate call failed (zerr=%d)\n", zerr);
+ LOG(WARNING) << "zlib inflate call failed (zerr=" << zerr << ")";
goto z_bail;
}
@@ -558,10 +563,10 @@
(zerr == Z_STREAM_END && zstream.avail_out != sizeof(procBuf)))
{
long procSize = zstream.next_out - procBuf;
- LOGVV("+++ processing %d bytes\n", (int) procSize);
+ LOG(VERBOSE) << "+++ processing " << procSize << " bytes";
bool ret = processFunction(procBuf, procSize, cookie);
if (!ret) {
- LOGW("Process function elected to fail (in inflate)\n");
+ LOG(WARNING) << "Process function elected to fail (in inflate)";
goto z_bail;
}
@@ -582,7 +587,8 @@
bail:
if (totalOut != pEntry->uncompLen) {
if (success) { // error already shown?
- LOGW("Size mismatch on inflated file (%lu vs %u)\n", totalOut, pEntry->uncompLen);
+ LOG(WARNING) << "Size mismatch on inflated file (" << totalOut << " vs "
+ << pEntry->uncompLen << ")";
}
return false;
}
@@ -613,8 +619,8 @@
ret = processDeflatedEntry(pArchive, pEntry, processFunction, cookie);
break;
default:
- LOGE("Unsupported compression type %d for entry '%s'\n",
- pEntry->compression, pEntry->fileName);
+ LOG(ERROR) << "Unsupported compression type " << pEntry->compression
+ << " for entry '" << pEntry->fileName << "'";
break;
}
@@ -653,7 +659,7 @@
ret = mzProcessZipEntryContents(pArchive, pEntry, copyProcessFunction,
(void *)&args);
if (!ret) {
- LOGE("Can't extract entry to buffer.\n");
+ LOG(ERROR) << "Can't extract entry to buffer";
return false;
}
return true;
@@ -670,15 +676,15 @@
while (true) {
ssize_t n = TEMP_FAILURE_RETRY(write(fd, data+soFar, dataLen-soFar));
if (n <= 0) {
- LOGE("Error writing %zd bytes from zip file from %p: %s\n",
- dataLen-soFar, data+soFar, strerror(errno));
+ PLOG(ERROR) << "Error writing " << dataLen-soFar << " bytes from zip file from "
+ << data+soFar;
return false;
} else if (n > 0) {
soFar += n;
if (soFar == dataLen) return true;
if (soFar > dataLen) {
- LOGE("write overrun? (%zd bytes instead of %d)\n",
- soFar, dataLen);
+ LOG(ERROR) << "write overrun? (" << soFar << " bytes instead of "
+ << dataLen << ")";
return false;
}
}
@@ -694,7 +700,7 @@
bool ret = mzProcessZipEntryContents(pArchive, pEntry, writeProcessFunction,
(void*)(intptr_t)fd);
if (!ret) {
- LOGE("Can't extract entry to file.\n");
+ LOG(ERROR) << "Can't extract entry to file.";
return false;
}
return true;
@@ -730,7 +736,7 @@
bool ret = mzProcessZipEntryContents(pArchive, pEntry,
bufferProcessFunction, (void*)&bec);
if (!ret || bec.len != 0) {
- LOGE("Can't extract entry to memory buffer.\n");
+ LOG(ERROR) << "Can't extract entry to memory buffer.";
return false;
}
return true;
@@ -824,11 +830,11 @@
struct selabel_handle *sehnd)
{
if (zipDir[0] == '/') {
- LOGE("mzExtractRecursive(): zipDir must be a relative path.\n");
+ LOG(ERROR) << "mzExtractRecursive(): zipDir must be a relative path.";
return false;
}
if (targetDir[0] != '/') {
- LOGE("mzExtractRecursive(): targetDir must be an absolute path.\n");
+ LOG(ERROR) << "mzExtractRecursive(): targetDir must be an absolute path.\n";
return false;
}
@@ -838,7 +844,7 @@
zipDirLen = strlen(zipDir);
zpath = (char *)malloc(zipDirLen + 2);
if (zpath == NULL) {
- LOGE("Can't allocate %d bytes for zip path\n", zipDirLen + 2);
+ LOG(ERROR) << "Can't allocate " << (zipDirLen + 2) << " bytes for zip path";
return false;
}
/* If zipDir is empty, we'll extract the entire zip file.
@@ -917,8 +923,8 @@
*/
const char *targetFile = targetEntryPath(&helper, pEntry);
if (targetFile == NULL) {
- LOGE("Can't assemble target path for \"%.*s\"\n",
- pEntry->fileNameLen, pEntry->fileName);
+ LOG(ERROR) << "Can't assemble target path for \"" << std::string(pEntry->fileName,
+ pEntry->fileNameLen) << "\"";
ok = false;
break;
}
@@ -942,8 +948,7 @@
int ret = dirCreateHierarchy(
targetFile, UNZIP_DIRMODE, timestamp, true, sehnd);
if (ret != 0) {
- LOGE("Can't create containing directory for \"%s\": %s\n",
- targetFile, strerror(errno));
+ PLOG(ERROR) << "Can't create containing directory for \"" << targetFile << "\"";
ok = false;
break;
}
@@ -957,8 +962,8 @@
* warn about this for now and preserve older behavior.
*/
if (mzIsZipEntrySymlink(pEntry)) {
- LOGE("Symlink entry \"%.*s\" will be output as a regular file.",
- pEntry->fileNameLen, pEntry->fileName);
+ LOG(ERROR) << "Symlink entry \"" << std::string(pEntry->fileName,
+ pEntry->fileNameLen) << "\" will be output as a regular file.";
}
char *secontext = NULL;
@@ -977,8 +982,7 @@
}
if (fd < 0) {
- LOGE("Can't create target file \"%s\": %s\n",
- targetFile, strerror(errno));
+ PLOG(ERROR) << "Can't create target file \"" << targetFile << "\"";
ok = false;
break;
}
@@ -991,25 +995,25 @@
ok = false;
}
if (!ok) {
- LOGE("Error extracting \"%s\"\n", targetFile);
+ LOG(ERROR) << "Error extracting \"" << targetFile << "\"";
ok = false;
break;
}
if (timestamp != NULL && utime(targetFile, timestamp)) {
- LOGE("Error touching \"%s\"\n", targetFile);
+ LOG(ERROR) << "Error touching \"" << targetFile << "\"";
ok = false;
break;
}
- LOGV("Extracted file \"%s\"\n", targetFile);
+ LOG(VERBOSE) <<"Extracted file \"" << targetFile << "\"";
++extractCount;
}
if (callback != NULL) callback(targetFile, cookie);
}
- LOGV("Extracted %d file(s)\n", extractCount);
+ LOG(VERBOSE) << "Extracted " << extractCount << " file(s)";
free(helper.buf);
free(zpath);
diff --git a/otafault/Android.mk b/otafault/Android.mk
index d0b1174..47c0405 100644
--- a/otafault/Android.mk
+++ b/otafault/Android.mk
@@ -17,10 +17,11 @@
include $(CLEAR_VARS)
otafault_static_libs := \
- libbase \
libminzip \
libz \
- libselinux
+ libselinux \
+ libbase \
+ liblog
LOCAL_SRC_FILES := config.cpp ota_io.cpp
LOCAL_MODULE_TAGS := eng
diff --git a/recovery-persist.cpp b/recovery-persist.cpp
index 25df03f..b0ec141 100644
--- a/recovery-persist.cpp
+++ b/recovery-persist.cpp
@@ -14,8 +14,6 @@
* limitations under the License.
*/
-#define LOG_TAG "recovery-persist"
-
//
// Strictly to deal with reboot into system after OTA after /data
// mounts to pull the last pmsg file data and place it
@@ -40,10 +38,9 @@
#include <string>
-#include <android/log.h> /* Android Log Priority Tags */
#include <android-base/file.h>
-#include <log/log.h>
-#include <log/logger.h> /* Android Log packet format */
+#include <android-base/logging.h>
+
#include <private/android_logger.h> /* private pmsg functions */
static const char *LAST_LOG_FILE = "/data/misc/recovery/last_log";
@@ -57,14 +54,16 @@
// close a file, log an error if the error indicator is set
static void check_and_fclose(FILE *fp, const char *name) {
fflush(fp);
- if (ferror(fp)) SLOGE("%s %s", name, strerror(errno));
+ if (ferror(fp)) {
+ PLOG(ERROR) << "Error in " << name;
+ }
fclose(fp);
}
static void copy_file(const char* source, const char* destination) {
FILE* dest_fp = fopen(destination, "w");
if (dest_fp == nullptr) {
- SLOGE("%s %s", destination, strerror(errno));
+ PLOG(ERROR) << "Can't open " << destination;
} else {
FILE* source_fp = fopen(source, "r");
if (source_fp != nullptr) {
@@ -157,7 +156,7 @@
static const char mounts_file[] = "/proc/mounts";
FILE *fp = fopen(mounts_file, "r");
if (!fp) {
- SLOGV("%s %s", mounts_file, strerror(errno));
+ PLOG(ERROR) << "failed to open " << mounts_file;
} else {
char *line = NULL;
size_t len = 0;
diff --git a/recovery.cpp b/recovery.cpp
index eabae68..d3f9c47 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -41,6 +41,7 @@
#include <adb.h>
#include <android/log.h> /* Android Log Priority Tags */
#include <android-base/file.h>
+#include <android-base/logging.h>
#include <android-base/parseint.h>
#include <android-base/stringprintf.h>
#include <android-base/strings.h>
@@ -49,7 +50,6 @@
#include <cutils/android_reboot.h>
#include <cutils/properties.h>
#include <healthd/BatteryMonitor.h>
-#include <log/logger.h> /* Android Log packet format */
#include <private/android_logger.h> /* private pmsg functions */
#include <selinux/label.h>
#include <selinux/selinux.h>
@@ -191,7 +191,7 @@
// open a given path, mounting partitions as necessary
FILE* fopen_path(const char *path, const char *mode) {
if (ensure_path_mounted(path) != 0) {
- LOGE("Can't mount %s\n", path);
+ LOG(ERROR) << "Can't mount " << path;
return NULL;
}
@@ -206,7 +206,9 @@
// close a file, log an error if the error indicator is set
static void check_and_fclose(FILE *fp, const char *name) {
fflush(fp);
- if (ferror(fp)) LOGE("Error in %s\n(%s)\n", name, strerror(errno));
+ if (ferror(fp)) {
+ PLOG(ERROR) << "Error in " << name;
+ }
fclose(fp);
}
@@ -218,7 +220,7 @@
static void redirect_stdio(const char* filename) {
int pipefd[2];
if (pipe(pipefd) == -1) {
- LOGE("pipe failed: %s\n", strerror(errno));
+ PLOG(ERROR) << "pipe failed";
// Fall back to traditional logging mode without timestamps.
// If these fail, there's not really anywhere to complain...
@@ -230,7 +232,7 @@
pid_t pid = fork();
if (pid == -1) {
- LOGE("fork failed: %s\n", strerror(errno));
+ PLOG(ERROR) << "fork failed";
// Fall back to traditional logging mode without timestamps.
// If these fail, there's not really anywhere to complain...
@@ -249,14 +251,14 @@
// Child logger to actually write to the log file.
FILE* log_fp = fopen(filename, "a");
if (log_fp == nullptr) {
- LOGE("fopen \"%s\" failed: %s\n", filename, strerror(errno));
+ PLOG(ERROR) << "fopen \"" << filename << "\" failed";
close(pipefd[0]);
_exit(1);
}
FILE* pipe_fp = fdopen(pipefd[0], "r");
if (pipe_fp == nullptr) {
- LOGE("fdopen failed: %s\n", strerror(errno));
+ PLOG(ERROR) << "fdopen failed";
check_and_fclose(log_fp, filename);
close(pipefd[0]);
_exit(1);
@@ -276,7 +278,7 @@
fflush(log_fp);
}
- LOGE("getline failed: %s\n", strerror(errno));
+ PLOG(ERROR) << "getline failed";
free(line);
check_and_fclose(log_fp, filename);
@@ -291,10 +293,10 @@
setbuf(stderr, nullptr);
if (dup2(pipefd[1], STDOUT_FILENO) == -1) {
- LOGE("dup2 stdout failed: %s\n", strerror(errno));
+ PLOG(ERROR) << "dup2 stdout failed";
}
if (dup2(pipefd[1], STDERR_FILENO) == -1) {
- LOGE("dup2 stderr failed: %s\n", strerror(errno));
+ PLOG(ERROR) << "dup2 stderr failed";
}
close(pipefd[1]);
@@ -310,18 +312,20 @@
bootloader_message boot = {};
std::string err;
if (!read_bootloader_message(&boot, &err)) {
- LOGE("%s\n", err.c_str());
+ LOG(ERROR) << err;
// If fails, leave a zeroed bootloader_message.
memset(&boot, 0, sizeof(boot));
}
stage = strndup(boot.stage, sizeof(boot.stage));
if (boot.command[0] != 0 && boot.command[0] != 255) {
- LOGI("Boot command: %.*s\n", (int)sizeof(boot.command), boot.command);
+ std::string boot_command = std::string(boot.command, sizeof(boot.command));
+ LOG(INFO) << "Boot command: " << boot_command;
}
if (boot.status[0] != 0 && boot.status[0] != 255) {
- LOGI("Boot status: %.*s\n", (int)sizeof(boot.status), boot.status);
+ std::string boot_status = std::string(boot.status, sizeof(boot.status));
+ LOG(INFO) << "Boot status: " << boot_status;
}
// --- if arguments weren't supplied, look in the bootloader control block
@@ -335,9 +339,10 @@
if ((arg = strtok(NULL, "\n")) == NULL) break;
(*argv)[*argc] = strdup(arg);
}
- LOGI("Got arguments from boot message\n");
+ LOG(INFO) << "Got arguments from boot message";
} else if (boot.recovery[0] != 0 && boot.recovery[0] != 255) {
- LOGE("Bad boot message\n\"%.20s\"\n", boot.recovery);
+ std::string boot_recovery = std::string(boot.recovery, 20);
+ LOG(ERROR) << "Bad boot message\n" << "\"" <<boot_recovery << "\"";
}
}
@@ -362,7 +367,7 @@
}
check_and_fclose(fp, COMMAND_FILE);
- LOGI("Got arguments from %s\n", COMMAND_FILE);
+ LOG(INFO) << "Got arguments from " << COMMAND_FILE;
}
}
@@ -376,7 +381,7 @@
strlcat(boot.recovery, "\n", sizeof(boot.recovery));
}
if (!write_bootloader_message(boot, &err)) {
- LOGE("%s\n", err.c_str());
+ LOG(ERROR) << err;
}
}
@@ -387,7 +392,7 @@
strlcpy(boot.recovery, "recovery\n", sizeof(boot.recovery));
std::string err;
if (!write_bootloader_message(boot, &err)) {
- LOGE("%s\n", err.c_str());
+ LOG(ERROR) << err;
}
}
@@ -395,14 +400,14 @@
static void save_kernel_log(const char* destination) {
int klog_buf_len = klogctl(KLOG_SIZE_BUFFER, 0, 0);
if (klog_buf_len <= 0) {
- LOGE("Error getting klog size: %s\n", strerror(errno));
+ PLOG(ERROR) << "Error getting klog size";
return;
}
std::string buffer(klog_buf_len, 0);
int n = klogctl(KLOG_READ_ALL, &buffer[0], klog_buf_len);
if (n == -1) {
- LOGE("Error in reading klog: %s\n", strerror(errno));
+ PLOG(ERROR) << "Error in reading klog";
return;
}
buffer.resize(n);
@@ -427,7 +432,7 @@
static void copy_log_file(const char* source, const char* destination, bool append) {
FILE* dest_fp = fopen_path(destination, append ? "a" : "w");
if (dest_fp == nullptr) {
- LOGE("Can't open %s\n", destination);
+ PLOG(ERROR) << "Can't open " << destination;
} else {
FILE* source_fp = fopen(source, "r");
if (source_fp != nullptr) {
@@ -525,7 +530,7 @@
size_t len = strlen(locale);
__pmsg_write(LOCALE_FILE, locale, len);
if (has_cache) {
- LOGI("Saving locale \"%s\"\n", locale);
+ LOG(INFO) << "Saving locale \"" << locale << "\"";
FILE* fp = fopen_path(LOCALE_FILE, "w");
if (fp != NULL) {
fwrite(locale, 1, len, fp);
@@ -542,13 +547,13 @@
bootloader_message boot = {};
std::string err;
if (!write_bootloader_message(boot, &err)) {
- LOGE("%s\n", err.c_str());
+ LOG(ERROR) << 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)) {
- LOGW("Can't unlink %s\n", COMMAND_FILE);
+ LOG(WARNING) << "Can't unlink " << COMMAND_FILE;
}
ensure_path_unmounted(CACHE_ROOT);
}
@@ -688,7 +693,7 @@
if (ui->WasTextEverVisible()) {
continue;
} else {
- LOGI("timed out waiting for key input; rebooting.\n");
+ LOG(INFO) << "timed out waiting for key input; rebooting.";
ui->EndMenu();
return 0; // XXX fixme
}
@@ -729,7 +734,7 @@
DIR* d = opendir(path);
if (d == NULL) {
- LOGE("error opening %s: %s\n", path, strerror(errno));
+ PLOG(ERROR) << "error opening " << path;
return NULL;
}
@@ -874,13 +879,13 @@
static bool secure_wipe_partition(const std::string& partition) {
android::base::unique_fd fd(TEMP_FAILURE_RETRY(open(partition.c_str(), O_WRONLY)));
if (fd == -1) {
- LOGE("failed to open \"%s\": %s\n", partition.c_str(), strerror(errno));
+ PLOG(ERROR) << "failed to open \"" << partition << "\"";
return false;
}
uint64_t range[2] = {0, 0};
if (ioctl(fd, BLKGETSIZE64, &range[1]) == -1 || range[1] == 0) {
- LOGE("failed to get partition size: %s\n", strerror(errno));
+ PLOG(ERROR) << "failed to get partition size";
return false;
}
printf("Secure-wiping \"%s\" from %" PRIu64 " to %" PRIu64 ".\n",
@@ -916,18 +921,18 @@
// 2. check metadata (ota-type, pre-device and serial number if having one).
static bool check_wipe_package(size_t wipe_package_size) {
if (wipe_package_size == 0) {
- LOGE("wipe_package_size is zero.\n");
+ LOG(ERROR) << "wipe_package_size is zero";
return false;
}
std::string wipe_package;
std::string err_str;
if (!read_wipe_package(&wipe_package, wipe_package_size, &err_str)) {
- LOGE("Failed to read wipe package: %s\n", err_str.c_str());
+ PLOG(ERROR) << "Failed to read wipe package";
return false;
}
if (!verify_package(reinterpret_cast<const unsigned char*>(wipe_package.data()),
wipe_package.size())) {
- LOGE("Failed to verify package.\n");
+ LOG(ERROR) << "Failed to verify package";
return false;
}
@@ -936,7 +941,7 @@
int err = mzOpenZipArchive(reinterpret_cast<unsigned char*>(&wipe_package[0]),
wipe_package.size(), &zip);
if (err != 0) {
- LOGE("Can't open wipe package: %s\n", err != -1 ? strerror(err) : "bad");
+ LOG(ERROR) << "Can't open wipe package";
return false;
}
std::string metadata;
@@ -978,12 +983,12 @@
ui->SetProgressType(RecoveryUI::INDETERMINATE);
if (!check_wipe_package(wipe_package_size)) {
- LOGE("Failed to verify wipe package\n");
+ LOG(ERROR) << "Failed to verify wipe package";
return false;
}
std::string partition_list;
if (!android::base::ReadFileToString(RECOVERY_WIPE, &partition_list)) {
- LOGE("failed to read \"%s\".\n", RECOVERY_WIPE);
+ LOG(ERROR) << "failed to read \"" << RECOVERY_WIPE << "\"";
return false;
}
@@ -1146,7 +1151,7 @@
sleep(1);
continue;
} else {
- LOGE("Timed out waiting for the fuse-provided package.\n");
+ LOG(ERROR) << "Timed out waiting for the fuse-provided package.";
result = INSTALL_ERROR;
kill(child, SIGKILL);
break;
@@ -1168,7 +1173,7 @@
}
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
- LOGE("Error exit from the fuse process: %d\n", WEXITSTATUS(status));
+ LOG(ERROR) << "Error exit from the fuse process: " << WEXITSTATUS(status);
}
ensure_path_unmounted(SDCARD_ROOT);
@@ -1324,6 +1329,18 @@
}
}
+static constexpr char log_characters[] = "VDIWEF";
+
+void UiLogger(android::base::LogId id, android::base::LogSeverity severity,
+ const char* tag, const char* file, unsigned int line,
+ const char* message) {
+ if (severity >= android::base::ERROR && gCurrentUI != NULL) {
+ gCurrentUI->Print("E:%s\n", message);
+ } else {
+ fprintf(stdout, "%c:%s\n", log_characters[severity], message);
+ }
+}
+
static bool is_battery_ok() {
struct healthd_config healthd_config = {
.batteryStatusPath = android::String8(android::String8::kEmptyString),
@@ -1400,7 +1417,7 @@
}
std::string err;
if (!write_bootloader_message(boot, &err)) {
- LOGE("%s\n", err.c_str());
+ LOG(ERROR) << err;
}
}
@@ -1424,7 +1441,7 @@
fprintf(install_log, "error: %d\n", code);
fclose(install_log);
} else {
- LOGE("failed to open last_install: %s\n", strerror(errno));
+ PLOG(ERROR) << "failed to open last_install";
}
}
@@ -1479,6 +1496,10 @@
}
int main(int argc, char **argv) {
+ // We don't have logcat yet under recovery; so we'll print error on screen and
+ // log to stdout (which is redirected to recovery.log) as we used to do.
+ android::base::InitLogging(argv, &UiLogger);
+
// Take last pmsg contents and rewrite it to the current pmsg session.
static const char filter[] = "recovery/";
// Do we need to rotate?
@@ -1564,7 +1585,7 @@
break;
}
case '?':
- LOGE("Invalid command argument\n");
+ LOG(ERROR) << "Invalid command argument";
continue;
}
}
diff --git a/roots.cpp b/roots.cpp
index 4936947..fe49f2b 100644
--- a/roots.cpp
+++ b/roots.cpp
@@ -26,6 +26,8 @@
#include <ctype.h>
#include <fcntl.h>
+#include <android-base/logging.h>
+
#include <fs_mgr.h>
#include "common.h"
#include "make_ext4fs.h"
@@ -44,13 +46,13 @@
fstab = fs_mgr_read_fstab("/etc/recovery.fstab");
if (!fstab) {
- LOGE("failed to read /etc/recovery.fstab\n");
+ LOG(ERROR) << "failed to read /etc/recovery.fstab";
return;
}
ret = fs_mgr_add_entry(fstab, "/tmp", "ramdisk", "ramdisk");
if (ret < 0 ) {
- LOGE("failed to add /tmp entry to fstab\n");
+ LOG(ERROR) << "failed to add /tmp entry to fstab";
fs_mgr_free_fstab(fstab);
fstab = NULL;
return;
@@ -74,7 +76,7 @@
int ensure_path_mounted_at(const char* path, const char* mount_point) {
Volume* v = volume_for_path(path);
if (v == NULL) {
- LOGE("unknown volume for path [%s]\n", path);
+ LOG(ERROR) << "unknown volume for path [" << path << "]";
return -1;
}
if (strcmp(v->fs_type, "ramdisk") == 0) {
@@ -83,7 +85,7 @@
}
if (!scan_mounted_volumes()) {
- LOGE("failed to scan mounted volumes\n");
+ LOG(ERROR) << "failed to scan mounted volumes";
return -1;
}
@@ -104,25 +106,25 @@
strcmp(v->fs_type, "vfat") == 0) {
int result = mount(v->blk_device, mount_point, v->fs_type, v->flags, v->fs_options);
if (result == -1 && fs_mgr_is_formattable(v)) {
- LOGE("failed to mount %s (%s), formatting ...\n",
- mount_point, strerror(errno));
+ LOG(ERROR) << "failed to mount " << mount_point << " (" << strerror(errno)
+ << ") , formatting.....";
bool crypt_footer = fs_mgr_is_encryptable(v) && !strcmp(v->key_loc, "footer");
if (fs_mgr_do_format(v, crypt_footer) == 0) {
result = mount(v->blk_device, mount_point, v->fs_type, v->flags, v->fs_options);
} else {
- LOGE("failed to format %s (%s)\n", mount_point, strerror(errno));
+ PLOG(ERROR) << "failed to format " << mount_point;
return -1;
}
}
if (result == -1) {
- LOGE("failed to mount %s (%s)\n", mount_point, strerror(errno));
+ PLOG(ERROR) << "failed to mount " << mount_point;
return -1;
}
return 0;
}
- LOGE("unknown fs_type \"%s\" for %s\n", v->fs_type, mount_point);
+ LOG(ERROR) << "unknown fs_type \"" << v->fs_type << "\" for " << mount_point;
return -1;
}
@@ -134,7 +136,7 @@
int ensure_path_unmounted(const char* path) {
Volume* v = volume_for_path(path);
if (v == NULL) {
- LOGE("unknown volume for path [%s]\n", path);
+ LOG(ERROR) << "unknown volume for path [" << path << "]";
return -1;
}
if (strcmp(v->fs_type, "ramdisk") == 0) {
@@ -143,7 +145,7 @@
}
if (!scan_mounted_volumes()) {
- LOGE("failed to scan mounted volumes\n");
+ LOG(ERROR) << "failed to scan mounted volumes";
return -1;
}
@@ -165,7 +167,7 @@
}
waitpid(child, &status, 0);
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
- LOGE("%s failed with status %d\n", path, WEXITSTATUS(status));
+ LOG(ERROR) << path << " failed with status " << WEXITSTATUS(status);
}
return WEXITSTATUS(status);
}
@@ -173,21 +175,21 @@
int format_volume(const char* volume, const char* directory) {
Volume* v = volume_for_path(volume);
if (v == NULL) {
- LOGE("unknown volume \"%s\"\n", volume);
+ LOG(ERROR) << "unknown volume \"" << volume << "\"";
return -1;
}
if (strcmp(v->fs_type, "ramdisk") == 0) {
// you can't format the ramdisk.
- LOGE("can't format_volume \"%s\"", volume);
+ LOG(ERROR) << "can't format_volume \"" << volume << "\"";
return -1;
}
if (strcmp(v->mount_point, volume) != 0) {
- LOGE("can't give path \"%s\" to format_volume\n", volume);
+ LOG(ERROR) << "can't give path \"" << volume << "\" to format_volume";
return -1;
}
if (ensure_path_unmounted(volume) != 0) {
- LOGE("format_volume failed to unmount \"%s\"\n", v->mount_point);
+ LOG(ERROR) << "format_volume failed to unmount \"" << v->mount_point << "\"";
return -1;
}
@@ -195,10 +197,10 @@
// if there's a key_loc that looks like a path, it should be a
// block device for storing encryption metadata. wipe it too.
if (v->key_loc != NULL && v->key_loc[0] == '/') {
- LOGI("wiping %s\n", v->key_loc);
+ LOG(INFO) << "wiping " << v->key_loc;
int fd = open(v->key_loc, O_WRONLY | O_CREAT, 0644);
if (fd < 0) {
- LOGE("format_volume: failed to open %s\n", v->key_loc);
+ LOG(ERROR) << "format_volume: failed to open " << v->key_loc;
return -1;
}
wipe_block_device(fd, get_file_size(fd));
@@ -216,16 +218,19 @@
result = make_ext4fs_directory(v->blk_device, length, volume, sehandle, directory);
} else { /* Has to be f2fs because we checked earlier. */
if (v->key_loc != NULL && strcmp(v->key_loc, "footer") == 0 && length < 0) {
- LOGE("format_volume: crypt footer + negative length (%zd) not supported on %s\n", length, v->fs_type);
+ LOG(ERROR) << "format_volume: crypt footer + negative length (" << length
+ << ") not supported on " << v->fs_type;
return -1;
}
if (length < 0) {
- LOGE("format_volume: negative length (%zd) not supported on %s\n", length, v->fs_type);
+ LOG(ERROR) << "format_volume: negative length (" << length
+ << ") not supported on " << v->fs_type;
return -1;
}
char *num_sectors;
if (asprintf(&num_sectors, "%zd", length / 512) <= 0) {
- LOGE("format_volume: failed to create %s command for %s\n", v->fs_type, v->blk_device);
+ LOG(ERROR) << "format_volume: failed to create " << v->fs_type
+ << " command for " << v->blk_device;
return -1;
}
const char *f2fs_path = "/sbin/mkfs.f2fs";
@@ -235,13 +240,13 @@
free(num_sectors);
}
if (result != 0) {
- LOGE("format_volume: make %s failed on %s with %d(%s)\n", v->fs_type, v->blk_device, result, strerror(errno));
+ PLOG(ERROR) << "format_volume: make " << v->fs_type << " failed on " << v->blk_device;
return -1;
}
return 0;
}
- LOGE("format_volume: fs_type \"%s\" unsupported\n", v->fs_type);
+ LOG(ERROR) << "format_volume: fs_type \"" << v->fs_type << "\" unsupported";
return -1;
}
@@ -251,7 +256,7 @@
int setup_install_mounts() {
if (fstab == NULL) {
- LOGE("can't set up install mounts: no fstab loaded\n");
+ LOG(ERROR) << "can't set up install mounts: no fstab loaded";
return -1;
}
for (int i = 0; i < fstab->num_entries; ++i) {
@@ -260,13 +265,13 @@
if (strcmp(v->mount_point, "/tmp") == 0 ||
strcmp(v->mount_point, "/cache") == 0) {
if (ensure_path_mounted(v->mount_point) != 0) {
- LOGE("failed to mount %s\n", v->mount_point);
+ LOG(ERROR) << "failed to mount " << v->mount_point;
return -1;
}
} else {
if (ensure_path_unmounted(v->mount_point) != 0) {
- LOGE("failed to unmount %s\n", v->mount_point);
+ LOG(ERROR) << "failed to unmount " << v->mount_point;
return -1;
}
}
diff --git a/screen_ui.cpp b/screen_ui.cpp
index 4866873..cfaecd9 100644
--- a/screen_ui.cpp
+++ b/screen_ui.cpp
@@ -31,6 +31,7 @@
#include <vector>
+#include <android-base/logging.h>
#include <android-base/strings.h>
#include <android-base/stringprintf.h>
#include <cutils/properties.h>
@@ -417,14 +418,14 @@
void ScreenRecoveryUI::LoadBitmap(const char* filename, GRSurface** surface) {
int result = res_create_display_surface(filename, surface);
if (result < 0) {
- LOGE("couldn't load bitmap %s (error %d)\n", filename, result);
+ LOG(ERROR) << "couldn't load bitmap " << filename << " (error " << result << ")";
}
}
void ScreenRecoveryUI::LoadLocalizedBitmap(const char* filename, GRSurface** surface) {
int result = res_create_localized_alpha_surface(filename, locale, surface);
if (result < 0) {
- LOGE("couldn't load bitmap %s (error %d)\n", filename, result);
+ LOG(ERROR) << "couldn't load bitmap " << filename << " (error " << result << ")";
}
}
diff --git a/tests/Android.mk b/tests/Android.mk
index 971e5d0..633b3c4 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -46,7 +46,6 @@
LOCAL_STATIC_LIBRARIES := \
libapplypatch \
libotafault \
- libbase \
libverifier \
libcrypto_utils \
libcrypto \
@@ -55,7 +54,9 @@
libcutils \
libbz \
libz \
- libc
+ libc \
+ libbase \
+ liblog
testdata_out_path := $(TARGET_OUT_DATA_NATIVE_TESTS)/recovery
testdata_files := $(call find-subdir-files, testdata/*)
diff --git a/tools/recovery_l10n/res/values-af/strings.xml b/tools/recovery_l10n/res/values-af/strings.xml
index d526418..b1974da 100644
--- a/tools/recovery_l10n/res/values-af/strings.xml
+++ b/tools/recovery_l10n/res/values-af/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Installeer tans stelselopdatering..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Vee tans uit..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Geen bevel."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Fout!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Installeer tans stelselopdatering"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Vee tans uit"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Geen opdrag nie"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Fout!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Installeer tans sekuriteitopdatering"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-am/strings.xml b/tools/recovery_l10n/res/values-am/strings.xml
index cddb099..75c17fb 100644
--- a/tools/recovery_l10n/res/values-am/strings.xml
+++ b/tools/recovery_l10n/res/values-am/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"የስርዓት ዝማኔ በመጫን ላይ…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"በመደምሰስ ላይ…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"ምንም ትዕዛዝ የለም።"</string>
- <string name="recovery_error" msgid="4550265746256727080">"ስህተት!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"የሥርዓት ዝማኔን በመጫን ላይ…"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"በመደምሰስ ላይ"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"ምንም ትዕዛዝ የለም"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"ስህተት!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"የደህንነት ዝማኔ በመጫን ላይ"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-ar/strings.xml b/tools/recovery_l10n/res/values-ar/strings.xml
index d06b966..601b583 100644
--- a/tools/recovery_l10n/res/values-ar/strings.xml
+++ b/tools/recovery_l10n/res/values-ar/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"جارٍ تثبيت تحديث النظام…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"جارٍ المسح…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"ليس هناك أي أمر."</string>
- <string name="recovery_error" msgid="4550265746256727080">"خطأ!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"جارٍ تثبيت تحديث النظام"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"جارٍ محو البيانات"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"ليس هناك أي أمر"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"خطأ!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"جارٍ تثبيت تحديث الأمان"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-az-rAZ/strings.xml b/tools/recovery_l10n/res/values-az-rAZ/strings.xml
index 3435573..c6765a9 100644
--- a/tools/recovery_l10n/res/values-az-rAZ/strings.xml
+++ b/tools/recovery_l10n/res/values-az-rAZ/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Sistem güncəlləməsi quraşdırılır..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Silinir..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Əmr yoxdur."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Xəta!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Sistem güncəlləməsi quraşdırılır..."</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Silinir"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Əmr yoxdur"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Xəta!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Təhlükəsizlik güncəlləməsi yüklənir"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-b+sr+Latn/strings.xml b/tools/recovery_l10n/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..c2d8f22
--- /dev/null
+++ b/tools/recovery_l10n/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="recovery_installing" msgid="2013591905463558223">"Ažuriranje sistema se instalira"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Briše se"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Nema komande"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Greška!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Instalira se bezbednosno ažuriranje"</string>
+</resources>
diff --git a/tools/recovery_l10n/res/values-be-rBY/strings.xml b/tools/recovery_l10n/res/values-be-rBY/strings.xml
new file mode 100644
index 0000000..7c0954d
--- /dev/null
+++ b/tools/recovery_l10n/res/values-be-rBY/strings.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="recovery_installing" msgid="2013591905463558223">"Усталёўка абнаўлення сістэмы"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Сціранне"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Няма каманды"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Памылка"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Усталёўка абнаўлення сістэмы бяспекі"</string>
+</resources>
diff --git a/tools/recovery_l10n/res/values-bg/strings.xml b/tools/recovery_l10n/res/values-bg/strings.xml
index 004f3b9..9e628a2 100644
--- a/tools/recovery_l10n/res/values-bg/strings.xml
+++ b/tools/recovery_l10n/res/values-bg/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Системната актуализация се инсталира…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Изтрива се…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Без команда."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Грешка!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Системната актуализация се инсталира"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Изтрива се"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Без команда"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Грешка!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Актуализацията на сигурносттa се инсталира"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-bn-rBD/strings.xml b/tools/recovery_l10n/res/values-bn-rBD/strings.xml
index 4d2e590..0a481fa 100644
--- a/tools/recovery_l10n/res/values-bn-rBD/strings.xml
+++ b/tools/recovery_l10n/res/values-bn-rBD/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"সিস্টেম আপডেট ইনস্টল করা হচ্ছে…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"মোছা হচ্ছে…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"কোনো নির্দেশ নেই।"</string>
- <string name="recovery_error" msgid="4550265746256727080">"ত্রুটি!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"সিস্টেম আপডেট ইনস্টল করা হচ্ছে"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"মোছা হচ্ছে"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"কোনো আদেশ নেই"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"ত্রুটি!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"নিরাপত্তার আপডেট ইনস্টল করা হচ্ছে"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-bs-rBA/strings.xml b/tools/recovery_l10n/res/values-bs-rBA/strings.xml
new file mode 100644
index 0000000..412cf02
--- /dev/null
+++ b/tools/recovery_l10n/res/values-bs-rBA/strings.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="recovery_installing" msgid="2013591905463558223">"Ažuriranje sistema…"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Brisanje u toku"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Nema komande"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Greška!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Instaliranje sigurnosnog ažuriranja…"</string>
+</resources>
diff --git a/tools/recovery_l10n/res/values-ca/strings.xml b/tools/recovery_l10n/res/values-ca/strings.xml
index 5d7b652..3f266d2 100644
--- a/tools/recovery_l10n/res/values-ca/strings.xml
+++ b/tools/recovery_l10n/res/values-ca/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"S\'està instal·lant l\'actualització del sistema..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"S\'està esborrant..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Cap ordre."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Error!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"S\'està instal·lant una actualització del sistema"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"S\'està esborrant"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"No hi ha cap ordre"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"S\'ha produït un error"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"S\'està instal·lant una actualització de seguretat"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-cs/strings.xml b/tools/recovery_l10n/res/values-cs/strings.xml
index 771235d..eb436a8 100644
--- a/tools/recovery_l10n/res/values-cs/strings.xml
+++ b/tools/recovery_l10n/res/values-cs/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Instalace aktualizace systému..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Mazání…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Žádný příkaz."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Chyba!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Instalace aktualizace systému"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Mazání"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Žádný příkaz"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Chyba!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Instalace aktualizace zabezpečení"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-da/strings.xml b/tools/recovery_l10n/res/values-da/strings.xml
index c28a76f..c6e64a2 100644
--- a/tools/recovery_l10n/res/values-da/strings.xml
+++ b/tools/recovery_l10n/res/values-da/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Systemopdateringen installeres…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Sletter…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Ingen kommando."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Fejl!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Installerer systemopdateringen"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Sletter"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Ingen kommando"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Fejl!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Installerer sikkerhedsopdateringen"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-de/strings.xml b/tools/recovery_l10n/res/values-de/strings.xml
index 02d2590..6b6726a 100644
--- a/tools/recovery_l10n/res/values-de/strings.xml
+++ b/tools/recovery_l10n/res/values-de/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Systemupdate wird installiert…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Wird gelöscht…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Kein Befehl"</string>
- <string name="recovery_error" msgid="4550265746256727080">"Fehler"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Systemupdate wird installiert"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Wird gelöscht"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Kein Befehl"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Fehler"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Sicherheitsupdate wird installiert"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-el/strings.xml b/tools/recovery_l10n/res/values-el/strings.xml
index aa2626b..4cb2da5 100644
--- a/tools/recovery_l10n/res/values-el/strings.xml
+++ b/tools/recovery_l10n/res/values-el/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Εγκατάσταση ενημέρωσης συστήματος…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Διαγραφή…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Καμία εντολή."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Σφάλμα!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Εγκατάσταση ενημέρωσης συστήματος"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Διαγραφή"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Καμία εντολή"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Σφάλμα!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Εγκατάσταση ενημέρωσης ασφαλείας"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-en-rAU/strings.xml b/tools/recovery_l10n/res/values-en-rAU/strings.xml
index b70d678..dc75c23 100644
--- a/tools/recovery_l10n/res/values-en-rAU/strings.xml
+++ b/tools/recovery_l10n/res/values-en-rAU/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Installing system update…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Erasing…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"No command."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Error!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Installing system update"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Erasing"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"No command"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Error!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Installing security update"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-en-rGB/strings.xml b/tools/recovery_l10n/res/values-en-rGB/strings.xml
index b70d678..dc75c23 100644
--- a/tools/recovery_l10n/res/values-en-rGB/strings.xml
+++ b/tools/recovery_l10n/res/values-en-rGB/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Installing system update…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Erasing…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"No command."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Error!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Installing system update"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Erasing"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"No command"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Error!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Installing security update"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-en-rIN/strings.xml b/tools/recovery_l10n/res/values-en-rIN/strings.xml
index b70d678..dc75c23 100644
--- a/tools/recovery_l10n/res/values-en-rIN/strings.xml
+++ b/tools/recovery_l10n/res/values-en-rIN/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Installing system update…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Erasing…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"No command."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Error!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Installing system update"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Erasing"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"No command"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Error!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Installing security update"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-es-rUS/strings.xml b/tools/recovery_l10n/res/values-es-rUS/strings.xml
index 256272a..06b8606 100644
--- a/tools/recovery_l10n/res/values-es-rUS/strings.xml
+++ b/tools/recovery_l10n/res/values-es-rUS/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Instalando actualización del sistema…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Borrando…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Ningún comando"</string>
- <string name="recovery_error" msgid="4550265746256727080">"Error"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Instalando actualización del sistema"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Borrando"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Ningún comando"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Error"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Instalando actualización de seguridad"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-es/strings.xml b/tools/recovery_l10n/res/values-es/strings.xml
index 323f055..d8618f2 100644
--- a/tools/recovery_l10n/res/values-es/strings.xml
+++ b/tools/recovery_l10n/res/values-es/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Instalando actualización del sistema…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Borrando…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Sin comandos"</string>
- <string name="recovery_error" msgid="4550265746256727080">"Error"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Instalando actualización del sistema"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Borrando"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Sin comandos"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Error"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Instalando actualización de seguridad"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-et-rEE/strings.xml b/tools/recovery_l10n/res/values-et-rEE/strings.xml
index 407a53d..072a9ef 100644
--- a/tools/recovery_l10n/res/values-et-rEE/strings.xml
+++ b/tools/recovery_l10n/res/values-et-rEE/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Süsteemivärskenduste installimine ..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Kustutamine ..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Käsk puudub."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Viga!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Süsteemivärskenduse installimine"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Kustutamine"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Käsk puudub"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Viga!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Turvavärskenduse installimine"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-eu-rES/strings.xml b/tools/recovery_l10n/res/values-eu-rES/strings.xml
index 08d9c06..5540469 100644
--- a/tools/recovery_l10n/res/values-eu-rES/strings.xml
+++ b/tools/recovery_l10n/res/values-eu-rES/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Sistemaren eguneratzea instalatzen…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Ezabatzen…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Ez dago agindurik."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Errorea!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Sistemaren eguneratzea instalatzen"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Eduki guztia ezabatzen"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Ez dago agindurik"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Errorea"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Segurtasun-eguneratzea instalatzen"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-fa/strings.xml b/tools/recovery_l10n/res/values-fa/strings.xml
index dd002fa..cc390ae 100644
--- a/tools/recovery_l10n/res/values-fa/strings.xml
+++ b/tools/recovery_l10n/res/values-fa/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"در حال نصب بهروزرسانی سیستم ..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"پاک کردن..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"فرمانی موجود نیست."</string>
- <string name="recovery_error" msgid="4550265746256727080">"خطا!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"در حال نصب بهروزرسانی سیستم"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"در حال پاک کردن"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"فرمانی وجود ندارد"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"خطا!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"در حال نصب بهروزرسانی امنیتی"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-fi/strings.xml b/tools/recovery_l10n/res/values-fi/strings.xml
index b77417a..5141642 100644
--- a/tools/recovery_l10n/res/values-fi/strings.xml
+++ b/tools/recovery_l10n/res/values-fi/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Asennetaan järjestelmäpäivitystä..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Tyhjennetään..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Ei komentoa."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Virhe!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Asennetaan järjestelmäpäivitystä"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Tyhjennetään"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Ei komentoa"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Virhe!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Asennetaan tietoturvapäivitystä"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-fr-rCA/strings.xml b/tools/recovery_l10n/res/values-fr-rCA/strings.xml
index f2a85d8..b241529 100644
--- a/tools/recovery_l10n/res/values-fr-rCA/strings.xml
+++ b/tools/recovery_l10n/res/values-fr-rCA/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Installation de la mise à jour du système en cours…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Effacement en cours…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Aucune commande."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Erreur!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Installation de la mise à jour du système en cours…"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Suppression en cours..."</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Aucune commande"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Erreur!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Installation de la mise à jour de sécurité en cours..."</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-fr/strings.xml b/tools/recovery_l10n/res/values-fr/strings.xml
index cdb4a26..f0472b5 100644
--- a/tools/recovery_l10n/res/values-fr/strings.xml
+++ b/tools/recovery_l10n/res/values-fr/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Installation de la mise à jour du système en cours…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Effacement en cours…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Aucune commande."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Erreur !"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Installation de la mise à jour du système…"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Suppression…"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Aucune commande"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Erreur !"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Installation de la mise à jour de sécurité…"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-gl-rES/strings.xml b/tools/recovery_l10n/res/values-gl-rES/strings.xml
index 7546fbd..42b2016 100644
--- a/tools/recovery_l10n/res/values-gl-rES/strings.xml
+++ b/tools/recovery_l10n/res/values-gl-rES/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Instalando actualización do sistema..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Borrando..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Ningún comando"</string>
- <string name="recovery_error" msgid="4550265746256727080">"Erro"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Instalando actualización do sistema"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Borrando"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Non hai ningún comando"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Erro"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Instalando actualización de seguranza"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-gu-rIN/strings.xml b/tools/recovery_l10n/res/values-gu-rIN/strings.xml
index a364b52..2355a0f 100644
--- a/tools/recovery_l10n/res/values-gu-rIN/strings.xml
+++ b/tools/recovery_l10n/res/values-gu-rIN/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"સિસ્ટમ અપડેટ ઇન્સ્ટોલ કરી રહ્યાં છે…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"કાઢી નાખી રહ્યાં છે…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"કોઈ આદેશ નથી."</string>
- <string name="recovery_error" msgid="4550265746256727080">"ભૂલ!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"સિસ્ટમ અપડેટ ઇન્સ્ટૉલ કરી રહ્યાં છે"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"કાઢી નાખી રહ્યું છે"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"કોઈ આદેશ નથી"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"ભૂલ!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"સુરક્ષા અપડેટ ઇન્સ્ટૉલ કરી રહ્યાં છે"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-hi/strings.xml b/tools/recovery_l10n/res/values-hi/strings.xml
index a470d12..de87578 100644
--- a/tools/recovery_l10n/res/values-hi/strings.xml
+++ b/tools/recovery_l10n/res/values-hi/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"सिस्टम के बारे में नई जानकारी मिल रही है…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"मिटा रहा है…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"कोई आदेश नहीं."</string>
- <string name="recovery_error" msgid="4550265746256727080">"त्रुटि!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"सिस्टम अपडेट इंस्टॉल किया जा रहा है"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"मिटाया जा रहा है"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"कोई आदेश नहीं"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"त्रुटि!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"सुरक्षा अपडेट इंस्टॉल किया जा रहा है"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-hr/strings.xml b/tools/recovery_l10n/res/values-hr/strings.xml
index 56225c0..3b75ff1 100644
--- a/tools/recovery_l10n/res/values-hr/strings.xml
+++ b/tools/recovery_l10n/res/values-hr/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Instaliranje ažuriranja sustava…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Brisanje…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Nema naredbe."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Pogreška!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Instaliranje ažuriranja sustava"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Brisanje"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Nema naredbe"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Pogreška!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Instaliranje sigurnosnog ažuriranja"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-hu/strings.xml b/tools/recovery_l10n/res/values-hu/strings.xml
index a64f501..12d4d9f 100644
--- a/tools/recovery_l10n/res/values-hu/strings.xml
+++ b/tools/recovery_l10n/res/values-hu/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Rendszerfrissítés telepítése..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Törlés..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Nincs parancs."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Hiba!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Rendszerfrissítés telepítése"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Törlés"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Nincs parancs"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Hiba!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Biztonsági frissítés telepítése"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-hy-rAM/strings.xml b/tools/recovery_l10n/res/values-hy-rAM/strings.xml
index 7babe80..9d62bb7 100644
--- a/tools/recovery_l10n/res/values-hy-rAM/strings.xml
+++ b/tools/recovery_l10n/res/values-hy-rAM/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Համակարգի թարմացման տեղադրում…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Ջնջում…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Հրամանը տրված չէ:"</string>
- <string name="recovery_error" msgid="4550265746256727080">"Սխալ"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Համակարգի թարմացման տեղադրում"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Ջնջում"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Հրամանը տրված չէ"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Սխալ"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Անվտանգության թարմացման տեղադրում"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-in/strings.xml b/tools/recovery_l10n/res/values-in/strings.xml
index 93f9c28..0e56e0d 100644
--- a/tools/recovery_l10n/res/values-in/strings.xml
+++ b/tools/recovery_l10n/res/values-in/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Memasang pembaruan sistem…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Menghapus..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Tidak ada perintah."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Kesalahan!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Memasang pembaruan sistem"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Menghapus"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Tidak ada perintah"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Error!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Memasang pembaruan keamanan"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-is-rIS/strings.xml b/tools/recovery_l10n/res/values-is-rIS/strings.xml
index 926e851..5065b65 100644
--- a/tools/recovery_l10n/res/values-is-rIS/strings.xml
+++ b/tools/recovery_l10n/res/values-is-rIS/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Setur upp kerfisuppfærslu…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Þurrkar út…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Engin skipun."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Villa!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Setur upp kerfisuppfærslu"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Eyðir"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Engin skipun"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Villa!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Setur upp öryggisuppfærslu"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-it/strings.xml b/tools/recovery_l10n/res/values-it/strings.xml
index 9defe36..2c0364e 100644
--- a/tools/recovery_l10n/res/values-it/strings.xml
+++ b/tools/recovery_l10n/res/values-it/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Installazione aggiornamento di sistema…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Cancellazione…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Nessun comando."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Errore!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Installazione aggiornamento di sistema…"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Cancellazione…"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Nessun comando"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Errore!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Installazione aggiornamento sicurezza…"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-iw/strings.xml b/tools/recovery_l10n/res/values-iw/strings.xml
index e43bb20..ea5e6f2 100644
--- a/tools/recovery_l10n/res/values-iw/strings.xml
+++ b/tools/recovery_l10n/res/values-iw/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"מתקין עדכון מערכת…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"מוחק…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"אין פקודה."</string>
- <string name="recovery_error" msgid="4550265746256727080">"שגיאה!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"מתקין עדכון מערכת"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"מוחק"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"אין פקודה"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"שגיאה!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"מתקין עדכון אבטחה"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-ja/strings.xml b/tools/recovery_l10n/res/values-ja/strings.xml
index da0fa62..36e029b 100644
--- a/tools/recovery_l10n/res/values-ja/strings.xml
+++ b/tools/recovery_l10n/res/values-ja/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"システムアップデートをインストールしています…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"消去しています…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"コマンドが指定されていません。"</string>
- <string name="recovery_error" msgid="4550265746256727080">"エラーです"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"システム アップデートをインストールしています"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"消去しています"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"コマンドが指定されていません"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"エラーが発生しました。"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"セキュリティ アップデートをインストールしています"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-ka-rGE/strings.xml b/tools/recovery_l10n/res/values-ka-rGE/strings.xml
index 2d27c17..6a46b36 100644
--- a/tools/recovery_l10n/res/values-ka-rGE/strings.xml
+++ b/tools/recovery_l10n/res/values-ka-rGE/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"სისტემის განახლების დაყენება…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"მიმდინარეობს წაშლა…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"ბრძანება არ არის."</string>
- <string name="recovery_error" msgid="4550265746256727080">"შეცდომა!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"მიმდინარეობს სისტემის განახლების ინსტალაცია"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"მიმდინარეობს ამოშლა"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"ბრძანება არ არის"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"წარმოიქმნა შეცდომა!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"მიმდინარეობს უსაფრთხოების განახლების ინსტალაცია"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-kk-rKZ/strings.xml b/tools/recovery_l10n/res/values-kk-rKZ/strings.xml
index 3ca05b9..a4bd86e 100644
--- a/tools/recovery_l10n/res/values-kk-rKZ/strings.xml
+++ b/tools/recovery_l10n/res/values-kk-rKZ/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Жүйе жаңартуларын орнатуда…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Өшіруде..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Пәрмен берілген жоқ."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Қате!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Жүйе жаңартуы орнатылуда"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Өшірілуде"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Пәрмен жоқ"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Қате!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Қауіпсіздік жаңартуы орнатылуда"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-km-rKH/strings.xml b/tools/recovery_l10n/res/values-km-rKH/strings.xml
index 0c1c272..313c0f4 100644
--- a/tools/recovery_l10n/res/values-km-rKH/strings.xml
+++ b/tools/recovery_l10n/res/values-km-rKH/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"កំពុងដំឡើងបច្ចុប្បន្នភាពប្រព័ន្ធ…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"កំពុងលុប…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"គ្មានពាក្យបញ្ជា។"</string>
- <string name="recovery_error" msgid="4550265746256727080">"កំហុស!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"កំពុងអាប់ដេតប្រព័ន្ធ"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"លុប"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"គ្មានពាក្យបញ្ជាទេ"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"កំហុស!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"កំពុងដំឡើងការអាប់ដេតសុវត្ថិភាព"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-kn-rIN/strings.xml b/tools/recovery_l10n/res/values-kn-rIN/strings.xml
index be25d7a..5bf6260 100644
--- a/tools/recovery_l10n/res/values-kn-rIN/strings.xml
+++ b/tools/recovery_l10n/res/values-kn-rIN/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"ಸಿಸ್ಟಂ ನವೀಕರಣವನ್ನು ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"ಅಳಿಸಲಾಗುತ್ತಿದೆ…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"ಯಾವುದೇ ಆದೇಶವಿಲ್ಲ."</string>
- <string name="recovery_error" msgid="4550265746256727080">"ದೋಷ!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"ಸಿಸ್ಟಂ ಅಪ್ಡೇಟ್ ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"ಅಳಿಸಲಾಗುತ್ತಿದೆ"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"ಯಾವುದೇ ಆದೇಶವಿಲ್ಲ"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"ದೋಷ!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"ಭದ್ರತೆಯ ಅಪ್ಡೇಟ್ ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-ko/strings.xml b/tools/recovery_l10n/res/values-ko/strings.xml
index e46a876..aca13bb 100644
--- a/tools/recovery_l10n/res/values-ko/strings.xml
+++ b/tools/recovery_l10n/res/values-ko/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"시스템 업데이트 설치 중…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"지우는 중…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"명령어가 없습니다."</string>
- <string name="recovery_error" msgid="4550265746256727080">"오류!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"시스템 업데이트 설치"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"지우는 중"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"명령어 없음"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"오류!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"보안 업데이트 설치 중"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-ky-rKG/strings.xml b/tools/recovery_l10n/res/values-ky-rKG/strings.xml
index e2ced27..0a6bd78 100644
--- a/tools/recovery_l10n/res/values-ky-rKG/strings.xml
+++ b/tools/recovery_l10n/res/values-ky-rKG/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Системдик жаңыртууларды орнотуу…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Өчүрүлүүдө…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Буйрук берилген жок."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Ката!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Тутум жаңыртуусу орнотулууда"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Тазаланууда"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Буйрук берилген жок"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Ката!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Коопсуздук жаңыртуусу орнотулууда"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-lo-rLA/strings.xml b/tools/recovery_l10n/res/values-lo-rLA/strings.xml
index 5880cca..d3dbb39 100644
--- a/tools/recovery_l10n/res/values-lo-rLA/strings.xml
+++ b/tools/recovery_l10n/res/values-lo-rLA/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"ກຳລັງຕິດຕັ້ງການອັບເດດລະບົບ..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"ກຳລັງລຶບ..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"ບໍ່ມີຄຳສັ່ງ."</string>
- <string name="recovery_error" msgid="4550265746256727080">"ຜິດພາດ!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"ກຳລັງຕິດຕັ້ງການອັບເດດລະບົບ"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"ກຳລັງລຶບ"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"ບໍ່ມີຄຳສັ່ງ"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"ຜິດພາດ!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"ກຳລັງຕິດຕັ້ງອັບເດດຄວາມປອດໄພ"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-lt/strings.xml b/tools/recovery_l10n/res/values-lt/strings.xml
index 957ac75..d5d5e88 100644
--- a/tools/recovery_l10n/res/values-lt/strings.xml
+++ b/tools/recovery_l10n/res/values-lt/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Diegiamas sistemos naujinys…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Ištrinama…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Nėra komandos."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Klaida!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Diegiamas sistemos naujinys"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Ištrinama"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Nėra jokių komandų"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Klaida!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Diegiamas saugos naujinys"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-lv/strings.xml b/tools/recovery_l10n/res/values-lv/strings.xml
index c5d5b93..d877f6a 100644
--- a/tools/recovery_l10n/res/values-lv/strings.xml
+++ b/tools/recovery_l10n/res/values-lv/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Notiek sistēmas atjauninājuma instalēšana..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Notiek dzēšana..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Nav nevienas komandas."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Kļūda!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Notiek sistēmas atjauninājuma instalēšana"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Notiek dzēšana"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Nav nevienas komandas"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Kļūda!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Notiek drošības atjauninājuma instalēšana"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-mk-rMK/strings.xml b/tools/recovery_l10n/res/values-mk-rMK/strings.xml
index d91a67c..3514597 100644
--- a/tools/recovery_l10n/res/values-mk-rMK/strings.xml
+++ b/tools/recovery_l10n/res/values-mk-rMK/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Се инсталира ажурирање на системот..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Се брише..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Нема наредба."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Грешка!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Се инсталира ажурирање на системот"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Се брише"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Нема наредба"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Грешка!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Се инсталира безбедносно ажурирање"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-ml-rIN/strings.xml b/tools/recovery_l10n/res/values-ml-rIN/strings.xml
index 38ebcd1..b506e25 100644
--- a/tools/recovery_l10n/res/values-ml-rIN/strings.xml
+++ b/tools/recovery_l10n/res/values-ml-rIN/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"സിസ്റ്റം അപ്ഡേറ്റ് ഇൻസ്റ്റാളുചെയ്യുന്നു…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"മായ്ക്കുന്നു…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"കമാൻഡ് ഒന്നുമില്ല."</string>
- <string name="recovery_error" msgid="4550265746256727080">"പിശക്!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"സിസ്റ്റം അപ്ഡേറ്റ് ഇൻസ്റ്റാൾ ചെയ്യുന്നു"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"മായ്ക്കുന്നു"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"കമാൻഡ് ഒന്നുമില്ല"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"പിശക്!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"സുരക്ഷാ അപ്ഡേറ്റ് ഇൻസ്റ്റാൾ ചെയ്യുന്നു"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-mn-rMN/strings.xml b/tools/recovery_l10n/res/values-mn-rMN/strings.xml
index 463cafe..e3dd2e9 100644
--- a/tools/recovery_l10n/res/values-mn-rMN/strings.xml
+++ b/tools/recovery_l10n/res/values-mn-rMN/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Системийн шинэчлэлтийг суулгаж байна…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Арилгаж байна…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Команд байхгүй."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Алдаа!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Системийн шинэчлэлтийг суулгаж байна"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Устгаж байна"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Тушаал байхгүй"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Алдаа!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Аюулгүй байдлын шинэчлэлтийг суулгаж байна"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-mr-rIN/strings.xml b/tools/recovery_l10n/res/values-mr-rIN/strings.xml
index 25c5d0c..8cf86f7 100644
--- a/tools/recovery_l10n/res/values-mr-rIN/strings.xml
+++ b/tools/recovery_l10n/res/values-mr-rIN/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"सिस्टम अद्यतन स्थापित करीत आहे..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"मिटवित आहे…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"कोणताही आदेश नाही."</string>
- <string name="recovery_error" msgid="4550265746256727080">"त्रुटी!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"सिस्टम अद्यतन स्थापित करीत आहे"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"मिटवत आहे"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"कोणताही आदेश नाही"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"त्रुटी!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"सुरक्षा अद्यतन स्थापित करीत आहे"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-ms-rMY/strings.xml b/tools/recovery_l10n/res/values-ms-rMY/strings.xml
index f563591..0e24ac4 100644
--- a/tools/recovery_l10n/res/values-ms-rMY/strings.xml
+++ b/tools/recovery_l10n/res/values-ms-rMY/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Memasang kemas kini sistem..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Memadam..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Tiada arahan."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Ralat!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Memasang kemas kini sistem"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Memadam"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Tiada perintah"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Ralat!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Memasang kemas kini keselamatan"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-my-rMM/strings.xml b/tools/recovery_l10n/res/values-my-rMM/strings.xml
index 4091b19..f137524 100644
--- a/tools/recovery_l10n/res/values-my-rMM/strings.xml
+++ b/tools/recovery_l10n/res/values-my-rMM/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"စနစ်အား အဆင့်မြှင့်ခြင်း လုပ်ဆောင်နေသည်…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"ဖျက်နေသည် ..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"ညွှန်ကြားချက်မပေးထားပါ"</string>
- <string name="recovery_error" msgid="4550265746256727080">"မှားနေပါသည်!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"စနစ်အပ်ဒိတ်ကို ထည့်သွင်းနေသည်"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"ဖျက်နေသည်"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"ညွှန်ကြားချက်မပေးထားပါ"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"မှားနေပါသည်!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"လုံခြုံရေး အပ်ဒိတ်ကို ထည့်သွင်းနေသည်"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-nb/strings.xml b/tools/recovery_l10n/res/values-nb/strings.xml
index 4e89ad7..ad6f20e 100644
--- a/tools/recovery_l10n/res/values-nb/strings.xml
+++ b/tools/recovery_l10n/res/values-nb/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Installerer systemoppdateringen ..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Sletter ..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Ingen kommando."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Feil!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Installerer systemoppdateringen"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Tømmer"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Ingen kommandoer"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Feil!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Installerer sikkerhetsoppdateringen"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-ne-rNP/strings.xml b/tools/recovery_l10n/res/values-ne-rNP/strings.xml
index 835f275..1880e80 100644
--- a/tools/recovery_l10n/res/values-ne-rNP/strings.xml
+++ b/tools/recovery_l10n/res/values-ne-rNP/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"प्रणाली अद्यावधिक स्थापना गर्दै..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"मेटाइदै..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"कुनै आदेश छैन।"</string>
- <string name="recovery_error" msgid="4550265746256727080">"त्रुटि!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"प्रणालीको अद्यावधिकलाई स्थापना गर्दै"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"मेटाउँदै"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"कुनै आदेश छैन"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"त्रुटि!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"सुरक्षा सम्बन्धी अद्यावधिकलाई स्थापना गर्दै"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-nl/strings.xml b/tools/recovery_l10n/res/values-nl/strings.xml
index be80a6b..0d6c15a 100644
--- a/tools/recovery_l10n/res/values-nl/strings.xml
+++ b/tools/recovery_l10n/res/values-nl/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Systeemupdate installeren…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Wissen…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Geen opdracht."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Fout!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Systeemupdate installeren"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Wissen"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Geen opdracht"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Fout!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Beveiligingsupdate installeren"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-pa-rIN/strings.xml b/tools/recovery_l10n/res/values-pa-rIN/strings.xml
index 39ef32f..8564c9c 100644
--- a/tools/recovery_l10n/res/values-pa-rIN/strings.xml
+++ b/tools/recovery_l10n/res/values-pa-rIN/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"ਸਿਸਟਮ ਅਪਡੇਟ ਇੰਸਟੌਲ ਕਰ ਰਿਹਾ ਹੈ…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"ਹਟਾ ਰਿਹਾ ਹੈ…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"ਕੋਈ ਕਮਾਂਡ ਨਹੀਂ।"</string>
- <string name="recovery_error" msgid="4550265746256727080">"ਅਸ਼ੁੱਧੀ!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"ਸਿਸਟਮ ਅੱਪਡੇਟ ਸਥਾਪਤ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"ਮਿਟਾਈ ਜਾ ਰਹੀ ਹੈ"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"ਕੋਈ ਕਮਾਂਡ ਨਹੀਂ"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"ਅਸ਼ੁੱਧੀ!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"ਸੁਰੱਖਿਆ ਅੱਪਡੇਟ ਸਥਾਪਤ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-pl/strings.xml b/tools/recovery_l10n/res/values-pl/strings.xml
index b1e5b7b..8d6db38 100644
--- a/tools/recovery_l10n/res/values-pl/strings.xml
+++ b/tools/recovery_l10n/res/values-pl/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Instaluję aktualizację systemu…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Usuwam…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Brak polecenia."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Błąd"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Instaluję aktualizację systemu"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Kasuję"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Brak polecenia"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Błąd"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Instaluję aktualizację zabezpieczeń"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-pt-rBR/strings.xml b/tools/recovery_l10n/res/values-pt-rBR/strings.xml
index 3cc5723..b727043 100644
--- a/tools/recovery_l10n/res/values-pt-rBR/strings.xml
+++ b/tools/recovery_l10n/res/values-pt-rBR/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Instalando atualização do sistema..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Apagando..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Nenhum comando."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Erro!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Instalando atualização do sistema"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Apagando"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Nenhum comando"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Erro!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Instalando atualização de segurança"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-pt-rPT/strings.xml b/tools/recovery_l10n/res/values-pt-rPT/strings.xml
index 7d6bc18..9814637 100644
--- a/tools/recovery_l10n/res/values-pt-rPT/strings.xml
+++ b/tools/recovery_l10n/res/values-pt-rPT/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"A instalar a atualização do sistema..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"A apagar…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Nenhum comando."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Erro!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"A instalar atualização do sistema"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"A apagar"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Nenhum comando"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Erro!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"A instalar atualização de segurança"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-pt/strings.xml b/tools/recovery_l10n/res/values-pt/strings.xml
index 3cc5723..b727043 100644
--- a/tools/recovery_l10n/res/values-pt/strings.xml
+++ b/tools/recovery_l10n/res/values-pt/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Instalando atualização do sistema..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Apagando..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Nenhum comando."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Erro!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Instalando atualização do sistema"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Apagando"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Nenhum comando"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Erro!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Instalando atualização de segurança"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-ro/strings.xml b/tools/recovery_l10n/res/values-ro/strings.xml
index ad924da..8032865 100644
--- a/tools/recovery_l10n/res/values-ro/strings.xml
+++ b/tools/recovery_l10n/res/values-ro/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Se instalează actualizarea de sistem…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Se efectuează ștergerea…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Nicio comandă."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Eroare!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Se instalează actualizarea de sistem"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Se șterge"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Nicio comandă"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Eroare!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Se instalează actualizarea de securitate"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-ru/strings.xml b/tools/recovery_l10n/res/values-ru/strings.xml
index de0da40..feebecf 100644
--- a/tools/recovery_l10n/res/values-ru/strings.xml
+++ b/tools/recovery_l10n/res/values-ru/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Установка обновления системы…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Удаление…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Команды нет"</string>
- <string name="recovery_error" msgid="4550265746256727080">"Ошибка"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Установка обновления системы…"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Удаление…"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Команды нет"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Ошибка"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Установка обновления системы безопасности…"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-si-rLK/strings.xml b/tools/recovery_l10n/res/values-si-rLK/strings.xml
index e717a97..456cdc5 100644
--- a/tools/recovery_l10n/res/values-si-rLK/strings.xml
+++ b/tools/recovery_l10n/res/values-si-rLK/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"පද්ධති යාවත්කාල ස්ථාපනය කරමින්…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"මකමින්...."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"විධානයක් නොමැත."</string>
- <string name="recovery_error" msgid="4550265746256727080">"දෝෂය!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"පද්ධති යාවත්කාලීනය ස්ථාපනය කරමින්"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"මකමින්"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"විධානයක් නොමැත"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"දෝෂය!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"ආරක්ෂක යාවත්කාලීනය ස්ථාපනය කරමින්"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-sk/strings.xml b/tools/recovery_l10n/res/values-sk/strings.xml
index cae6bce..b15f380 100644
--- a/tools/recovery_l10n/res/values-sk/strings.xml
+++ b/tools/recovery_l10n/res/values-sk/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Inštalácia aktualizácie systému..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Prebieha mazanie..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Žiadny príkaz."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Chyba!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Inštaluje sa aktualizácia systému"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Prebieha vymazávanie"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Žiadny príkaz"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Chyba!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Inštaluje sa bezpečnostná aktualizácia"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-sl/strings.xml b/tools/recovery_l10n/res/values-sl/strings.xml
index 3f8d46f..d608b75 100644
--- a/tools/recovery_l10n/res/values-sl/strings.xml
+++ b/tools/recovery_l10n/res/values-sl/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Namestitev posodobitve sistema ..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Brisanje ..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Ni ukaza"</string>
- <string name="recovery_error" msgid="4550265746256727080">"Napaka"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Nameščanje posodobitve sistema"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Brisanje"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Ni ukaza"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Napaka"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Nameščanje varnostne posodobitve"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-sq-rAL/strings.xml b/tools/recovery_l10n/res/values-sq-rAL/strings.xml
index 29f8ef5..1156931 100644
--- a/tools/recovery_l10n/res/values-sq-rAL/strings.xml
+++ b/tools/recovery_l10n/res/values-sq-rAL/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Po instalon përditësimin e sistemit..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Po spastron..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Nuk ka komanda."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Gabim!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Po instalon përditësimin e sistemit"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Po spastron"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Nuk ka komanda"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Gabim!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Po instalon përditësimin e sigurisë"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-sr/strings.xml b/tools/recovery_l10n/res/values-sr/strings.xml
index 9553260..a593d8f 100644
--- a/tools/recovery_l10n/res/values-sr/strings.xml
+++ b/tools/recovery_l10n/res/values-sr/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Инсталирање ажурирања система..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Брисање..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Нема команде."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Грешка!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Ажурирање система се инсталира"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Брише се"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Нема команде"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Грешка!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Инсталира се безбедносно ажурирање"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-sv/strings.xml b/tools/recovery_l10n/res/values-sv/strings.xml
index f875d30..b33ce25 100644
--- a/tools/recovery_l10n/res/values-sv/strings.xml
+++ b/tools/recovery_l10n/res/values-sv/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Installerar systemuppdatering ..."</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Tar bort ..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Inget kommando."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Fel!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Systemuppdatering installeras"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Rensar"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Inget kommando"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Fel!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Säkerhetsuppdatering installeras"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-sw/strings.xml b/tools/recovery_l10n/res/values-sw/strings.xml
index 1a53046..1567658 100644
--- a/tools/recovery_l10n/res/values-sw/strings.xml
+++ b/tools/recovery_l10n/res/values-sw/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Inasakinisha sasisho la mfumo…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Inafuta…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Hakuna amri."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Hitilafu!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Inasakinisha sasisho la mfumo"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Inafuta"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Hakuna amri"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Hitilafu fulani imetokea!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Inasakinisha sasisho la usalama"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-ta-rIN/strings.xml b/tools/recovery_l10n/res/values-ta-rIN/strings.xml
index f6f3e0e..d49186d 100644
--- a/tools/recovery_l10n/res/values-ta-rIN/strings.xml
+++ b/tools/recovery_l10n/res/values-ta-rIN/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"முறைமை புதுப்பிப்பை நிறுவுகிறது…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"அழிக்கிறது…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"கட்டளை இல்லை."</string>
- <string name="recovery_error" msgid="4550265746256727080">"பிழை!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"முறைமைப் புதுப்பிப்பை நிறுவுகிறது"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"அழிக்கிறது"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"கட்டளை இல்லை"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"பிழை!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"பாதுகாப்புப் புதுப்பிப்பை நிறுவுகிறது"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-te-rIN/strings.xml b/tools/recovery_l10n/res/values-te-rIN/strings.xml
index 6d0d17a..cfb02c9 100644
--- a/tools/recovery_l10n/res/values-te-rIN/strings.xml
+++ b/tools/recovery_l10n/res/values-te-rIN/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"సిస్టమ్ నవీకరణను ఇన్స్టాల్ చేస్తోంది…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"ఎరేజ్ చేస్తోంది…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"ఆదేశం లేదు."</string>
- <string name="recovery_error" msgid="4550265746256727080">"లోపం!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"సిస్టమ్ నవీకరణను ఇన్స్టాల్ చేస్తోంది"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"డేటాను తొలగిస్తోంది"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"ఆదేశం లేదు"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"లోపం సంభవించింది!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"భద్రతా నవీకరణను ఇన్స్టాల్ చేస్తోంది"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-th/strings.xml b/tools/recovery_l10n/res/values-th/strings.xml
index bcdfa2b..155affe 100644
--- a/tools/recovery_l10n/res/values-th/strings.xml
+++ b/tools/recovery_l10n/res/values-th/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"กำลังติดตั้งการอัปเดตระบบ…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"กำลังลบ…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"ไม่มีคำสั่ง"</string>
- <string name="recovery_error" msgid="4550265746256727080">"ข้อผิดพลาด!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"กำลังติดตั้งการอัปเดตระบบ"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"กำลังลบ"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"ไม่มีคำสั่ง"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"ข้อผิดพลาด!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"กำลังติดตั้งการอัปเดตความปลอดภัย"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-tl/strings.xml b/tools/recovery_l10n/res/values-tl/strings.xml
index be2ba26..555b42b 100644
--- a/tools/recovery_l10n/res/values-tl/strings.xml
+++ b/tools/recovery_l10n/res/values-tl/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Ini-install ang update sa system…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Binubura…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Walang command."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Error!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Nag-i-install ng pag-update ng system"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Binubura"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Walang command"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Error!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Nag-i-install ng update sa seguridad"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-tr/strings.xml b/tools/recovery_l10n/res/values-tr/strings.xml
index 8629029..5387cb2 100644
--- a/tools/recovery_l10n/res/values-tr/strings.xml
+++ b/tools/recovery_l10n/res/values-tr/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Sistem güncellemesi yükleniyor…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Siliniyor…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Komut yok."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Hata!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Sistem güncellemesi yükleniyor"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Siliniyor"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Komut yok"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Hata!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Güvenlik güncellemesi yükleniyor"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-uk/strings.xml b/tools/recovery_l10n/res/values-uk/strings.xml
index 762c06f..0c2fa16 100644
--- a/tools/recovery_l10n/res/values-uk/strings.xml
+++ b/tools/recovery_l10n/res/values-uk/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Встановлення оновлення системи…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Стирання…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Немає команди."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Помилка!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Установлюється оновлення системи"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Стирання"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Немає команди"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Помилка!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Установлюється оновлення системи безпеки"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-ur-rPK/strings.xml b/tools/recovery_l10n/res/values-ur-rPK/strings.xml
index dc6eb6a..12e32fb 100644
--- a/tools/recovery_l10n/res/values-ur-rPK/strings.xml
+++ b/tools/recovery_l10n/res/values-ur-rPK/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"سسٹم اپ ڈیٹ انسٹال ہو رہا ہے…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"صاف کر رہا ہے…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"کوئی کمانڈ نہیں ہے۔"</string>
- <string name="recovery_error" msgid="4550265746256727080">"خرابی!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"سسٹم اپ ڈیٹ انسٹال ہو رہی ہے"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"صاف ہو رہا ہے"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"کوئی کمانڈ نہیں ہے"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"خرابی!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"سیکیورٹی اپ ڈیٹ انسٹال ہو رہی ہے"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-uz-rUZ/strings.xml b/tools/recovery_l10n/res/values-uz-rUZ/strings.xml
index 2874484..2c309d6 100644
--- a/tools/recovery_l10n/res/values-uz-rUZ/strings.xml
+++ b/tools/recovery_l10n/res/values-uz-rUZ/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Tizim yangilanishi o‘rnatilmoqda…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Tozalanmoqda…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Buyruq yo‘q."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Xato!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Tizim yangilanishi o‘rnatilmoqda"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Tozalanmoqda…"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Buyruq yo‘q"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Xato!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Xavfsizlik yangilanishi o‘rnatilmoqda"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-vi/strings.xml b/tools/recovery_l10n/res/values-vi/strings.xml
index ab4005b..c77d0c8 100644
--- a/tools/recovery_l10n/res/values-vi/strings.xml
+++ b/tools/recovery_l10n/res/values-vi/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Đang cài đặt bản cập nhật hệ thống…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Đang xóa…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Không có lệnh nào."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Lỗi!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Đang cài đặt bản cập nhật hệ thống"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Đang xóa"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Không có lệnh nào"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Lỗi!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Đang cài đặt bản cập nhật bảo mật"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-zh-rCN/strings.xml b/tools/recovery_l10n/res/values-zh-rCN/strings.xml
index 2e1a6f5..e061497 100644
--- a/tools/recovery_l10n/res/values-zh-rCN/strings.xml
+++ b/tools/recovery_l10n/res/values-zh-rCN/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"正在安装系统更新…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"正在清除…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"无命令。"</string>
- <string name="recovery_error" msgid="4550265746256727080">"出错了!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"正在安装系统更新"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"正在清空"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"无命令"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"出错了!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"正在安装安全更新"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-zh-rHK/strings.xml b/tools/recovery_l10n/res/values-zh-rHK/strings.xml
index f615c7a..ec3315d 100644
--- a/tools/recovery_l10n/res/values-zh-rHK/strings.xml
+++ b/tools/recovery_l10n/res/values-zh-rHK/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"正在安裝系統更新…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"正在清除…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"沒有指令。"</string>
- <string name="recovery_error" msgid="4550265746256727080">"錯誤!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"正在安裝系統更新"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"正在清除"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"沒有指令"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"錯誤!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"正在安裝安全性更新"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-zh-rTW/strings.xml b/tools/recovery_l10n/res/values-zh-rTW/strings.xml
index f3f6a2c..78eae24 100644
--- a/tools/recovery_l10n/res/values-zh-rTW/strings.xml
+++ b/tools/recovery_l10n/res/values-zh-rTW/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"正在安裝系統更新…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"清除中..."</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"沒有指令。"</string>
- <string name="recovery_error" msgid="4550265746256727080">"錯誤!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"正在安裝系統更新"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"清除中"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"沒有指令"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"錯誤!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"正在安裝安全性更新"</string>
</resources>
diff --git a/tools/recovery_l10n/res/values-zu/strings.xml b/tools/recovery_l10n/res/values-zu/strings.xml
index 1f904a2..6b815e1 100644
--- a/tools/recovery_l10n/res/values-zu/strings.xml
+++ b/tools/recovery_l10n/res/values-zu/strings.xml
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="recovery_installing" msgid="7864047928003865598">"Ifaka isibuyekezo sesistimu…"</string>
- <string name="recovery_erasing" msgid="4612809744968710197">"Iyasula…"</string>
- <string name="recovery_no_command" msgid="1915703879031023455">"Awukho umyalo."</string>
- <string name="recovery_error" msgid="4550265746256727080">"Iphutha!"</string>
+ <string name="recovery_installing" msgid="2013591905463558223">"Ifaka isibuyekezo sesistimu"</string>
+ <string name="recovery_erasing" msgid="7334826894904037088">"Iyasula"</string>
+ <string name="recovery_no_command" msgid="4465476568623024327">"Awukho umyalo"</string>
+ <string name="recovery_error" msgid="5748178989622716736">"Iphutha!"</string>
+ <string name="recovery_installing_security" msgid="9184031299717114342">"Ifaka isibuyekezo sokuphepha"</string>
</resources>
diff --git a/uncrypt/uncrypt.cpp b/uncrypt/uncrypt.cpp
index c19943f..993441a 100644
--- a/uncrypt/uncrypt.cpp
+++ b/uncrypt/uncrypt.cpp
@@ -116,9 +116,6 @@
#include <cutils/sockets.h>
#include <fs_mgr.h>
-#define LOG_TAG "uncrypt"
-#include <log/log.h>
-
#define WINDOW_SIZE 5
// uncrypt provides three services: SETUP_BCB, CLEAR_BCB and UNCRYPT.
@@ -139,11 +136,11 @@
static int write_at_offset(unsigned char* buffer, size_t size, int wfd, off64_t offset) {
if (TEMP_FAILURE_RETRY(lseek64(wfd, offset, SEEK_SET)) == -1) {
- ALOGE("error seeking to offset %" PRId64 ": %s", offset, strerror(errno));
+ PLOG(ERROR) << "error seeking to offset " << offset;
return -1;
}
if (!android::base::WriteFully(wfd, buffer, size)) {
- ALOGE("error writing offset %" PRId64 ": %s", offset, strerror(errno));
+ PLOG(ERROR) << "error writing offset " << offset;
return -1;
}
return 0;
@@ -167,13 +164,13 @@
// The fstab path is always "/fstab.${ro.hardware}".
char fstab_path[PATH_MAX+1] = "/fstab.";
if (!property_get("ro.hardware", fstab_path+strlen(fstab_path), "")) {
- ALOGE("failed to get ro.hardware");
+ LOG(ERROR) << "failed to get ro.hardware";
return NULL;
}
fstab = fs_mgr_read_fstab(fstab_path);
if (!fstab) {
- ALOGE("failed to read %s", fstab_path);
+ LOG(ERROR) << "failed to read " << fstab_path;
return NULL;
}
@@ -210,6 +207,11 @@
}
static bool write_status_to_socket(int status, int socket) {
+ // If socket equals -1, uncrypt is in debug mode without socket communication.
+ // Skip writing and return success.
+ if (socket == -1) {
+ return true;
+ }
int status_out = htonl(status);
return android::base::WriteFully(socket, &status_out, sizeof(int));
}
@@ -219,7 +221,7 @@
CHECK(package_name != nullptr);
std::string uncrypt_path;
if (!android::base::ReadFileToString(uncrypt_path_file, &uncrypt_path)) {
- ALOGE("failed to open \"%s\": %s", uncrypt_path_file.c_str(), strerror(errno));
+ PLOG(ERROR) << "failed to open \"" << uncrypt_path_file << "\"";
return false;
}
@@ -232,33 +234,33 @@
bool encrypted, int socket) {
std::string err;
if (!android::base::RemoveFileIfExists(map_file, &err)) {
- ALOGE("failed to remove the existing map file %s: %s", map_file, err.c_str());
+ LOG(ERROR) << "failed to remove the existing map file " << map_file << ": " << err;
return -1;
}
std::string tmp_map_file = std::string(map_file) + ".tmp";
android::base::unique_fd mapfd(open(tmp_map_file.c_str(),
O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR));
if (mapfd == -1) {
- ALOGE("failed to open %s: %s\n", tmp_map_file.c_str(), strerror(errno));
+ PLOG(ERROR) << "failed to open " << tmp_map_file;
return -1;
}
// Make sure we can write to the socket.
if (!write_status_to_socket(0, socket)) {
- ALOGE("failed to write to socket %d\n", socket);
+ LOG(ERROR) << "failed to write to socket " << socket;
return -1;
}
struct stat sb;
if (stat(path, &sb) != 0) {
- ALOGE("failed to stat %s", path);
+ LOG(ERROR) << "failed to stat " << path;
return -1;
}
- ALOGI(" block size: %ld bytes", static_cast<long>(sb.st_blksize));
+ LOG(INFO) << " block size: " << sb.st_blksize << " bytes";
int blocks = ((sb.st_size-1) / sb.st_blksize) + 1;
- ALOGI(" file size: %" PRId64 " bytes, %d blocks", sb.st_size, blocks);
+ LOG(INFO) << " file size: " << sb.st_size << " bytes, " << blocks << " blocks";
std::vector<int> ranges;
@@ -266,7 +268,7 @@
blk_dev, static_cast<int64_t>(sb.st_size),
static_cast<int64_t>(sb.st_blksize));
if (!android::base::WriteStringToFd(s, mapfd)) {
- ALOGE("failed to write %s: %s", tmp_map_file.c_str(), strerror(errno));
+ PLOG(ERROR) << "failed to write " << tmp_map_file;
return -1;
}
@@ -279,7 +281,7 @@
android::base::unique_fd fd(open(path, O_RDONLY));
if (fd == -1) {
- ALOGE("failed to open %s for reading: %s", path, strerror(errno));
+ PLOG(ERROR) << "failed to open " << path << " for reading";
return -1;
}
@@ -287,7 +289,7 @@
if (encrypted) {
wfd.reset(open(blk_dev, O_WRONLY));
if (wfd == -1) {
- ALOGE("failed to open fd for writing: %s", strerror(errno));
+ PLOG(ERROR) << "failed to open " << blk_dev << " for writing";
return -1;
}
}
@@ -306,7 +308,7 @@
// write out head buffer
int block = head_block;
if (ioctl(fd, FIBMAP, &block) != 0) {
- ALOGE("failed to find block %d", head_block);
+ LOG(ERROR) << "failed to find block " << head_block;
return -1;
}
add_block_to_ranges(ranges, block);
@@ -325,7 +327,7 @@
size_t to_read = static_cast<size_t>(
std::min(static_cast<off64_t>(sb.st_blksize), sb.st_size - pos));
if (!android::base::ReadFully(fd, buffers[tail].data(), to_read)) {
- ALOGE("failed to read: %s", strerror(errno));
+ PLOG(ERROR) << "failed to read " << path;
return -1;
}
pos += to_read;
@@ -342,7 +344,7 @@
// write out head buffer
int block = head_block;
if (ioctl(fd, FIBMAP, &block) != 0) {
- ALOGE("failed to find block %d", head_block);
+ LOG(ERROR) << "failed to find block " << head_block;
return -1;
}
add_block_to_ranges(ranges, block);
@@ -358,39 +360,39 @@
if (!android::base::WriteStringToFd(
android::base::StringPrintf("%zu\n", ranges.size() / 2), mapfd)) {
- ALOGE("failed to write %s: %s", tmp_map_file.c_str(), strerror(errno));
+ PLOG(ERROR) << "failed to write " << tmp_map_file;
return -1;
}
for (size_t i = 0; i < ranges.size(); i += 2) {
if (!android::base::WriteStringToFd(
android::base::StringPrintf("%d %d\n", ranges[i], ranges[i+1]), mapfd)) {
- ALOGE("failed to write %s: %s", tmp_map_file.c_str(), strerror(errno));
+ PLOG(ERROR) << "failed to write " << tmp_map_file;
return -1;
}
}
if (fsync(mapfd) == -1) {
- ALOGE("failed to fsync \"%s\": %s", tmp_map_file.c_str(), strerror(errno));
+ PLOG(ERROR) << "failed to fsync \"" << tmp_map_file << "\"";
return -1;
}
if (close(mapfd.release()) == -1) {
- ALOGE("failed to close %s: %s", tmp_map_file.c_str(), strerror(errno));
+ PLOG(ERROR) << "failed to close " << tmp_map_file;
return -1;
}
if (encrypted) {
if (fsync(wfd) == -1) {
- ALOGE("failed to fsync \"%s\": %s", blk_dev, strerror(errno));
+ PLOG(ERROR) << "failed to fsync \"" << blk_dev << "\"";
return -1;
}
if (close(wfd.release()) == -1) {
- ALOGE("failed to close %s: %s", blk_dev, strerror(errno));
+ PLOG(ERROR) << "failed to close " << blk_dev;
return -1;
}
}
if (rename(tmp_map_file.c_str(), map_file) == -1) {
- ALOGE("failed to rename %s to %s: %s", tmp_map_file.c_str(), map_file, strerror(errno));
+ PLOG(ERROR) << "failed to rename " << tmp_map_file << " to " << map_file;
return -1;
}
// Sync dir to make rename() result written to disk.
@@ -398,28 +400,28 @@
std::string dir_name = dirname(&file_name[0]);
android::base::unique_fd dfd(open(dir_name.c_str(), O_RDONLY | O_DIRECTORY));
if (dfd == -1) {
- ALOGE("failed to open dir %s: %s", dir_name.c_str(), strerror(errno));
+ PLOG(ERROR) << "failed to open dir " << dir_name;
return -1;
}
if (fsync(dfd) == -1) {
- ALOGE("failed to fsync %s: %s", dir_name.c_str(), strerror(errno));
+ PLOG(ERROR) << "failed to fsync " << dir_name;
return -1;
}
if (close(dfd.release()) == -1) {
- ALOGE("failed to close %s: %s", dir_name.c_str(), strerror(errno));
+ PLOG(ERROR) << "failed to close " << dir_name;
return -1;
}
return 0;
}
static int uncrypt(const char* input_path, const char* map_file, const int socket) {
- ALOGI("update package is \"%s\"", input_path);
+ LOG(INFO) << "update package is \"" << input_path << "\"";
// Turn the name of the file we're supposed to convert into an
// absolute path, so we can find what filesystem it's on.
char path[PATH_MAX+1];
if (realpath(input_path, path) == NULL) {
- ALOGE("failed to convert \"%s\" to absolute path: %s", input_path, strerror(errno));
+ PLOG(ERROR) << "failed to convert \"" << input_path << "\" to absolute path";
return 1;
}
@@ -427,15 +429,15 @@
bool encrypted;
const char* blk_dev = find_block_device(path, &encryptable, &encrypted);
if (blk_dev == NULL) {
- ALOGE("failed to find block device for %s", path);
+ LOG(ERROR) << "failed to find block device for " << path;
return 1;
}
// If the filesystem it's on isn't encrypted, we only produce the
// block map, we don't rewrite the file contents (it would be
// pointless to do so).
- ALOGI("encryptable: %s", encryptable ? "yes" : "no");
- ALOGI(" encrypted: %s", encrypted ? "yes" : "no");
+ LOG(INFO) << "encryptable: " << (encryptable ? "yes" : "no");
+ LOG(INFO) << " encrypted: " << (encrypted ? "yes" : "no");
// Recovery supports installing packages from 3 paths: /cache,
// /data, and /sdcard. (On a particular device, other locations
@@ -445,7 +447,7 @@
// can read the package without mounting the partition. On /cache
// and /sdcard we leave the file alone.
if (strncmp(path, "/data/", 6) == 0) {
- ALOGI("writing block map %s", map_file);
+ LOG(INFO) << "writing block map " << map_file;
if (produce_block_map(path, map_file, blk_dev, encrypted, socket) != 0) {
return 1;
}
@@ -476,7 +478,7 @@
static bool clear_bcb(const int socket) {
std::string err;
if (!clear_bootloader_message(&err)) {
- ALOGE("failed to clear bootloader message: %s", err.c_str());
+ LOG(ERROR) << "failed to clear bootloader message: " << err;
write_status_to_socket(-1, socket);
return false;
}
@@ -488,7 +490,7 @@
// c5. receive message length
int length;
if (!android::base::ReadFully(socket, &length, 4)) {
- ALOGE("failed to read the length: %s", strerror(errno));
+ PLOG(ERROR) << "failed to read the length";
return false;
}
length = ntohl(length);
@@ -497,17 +499,17 @@
std::string content;
content.resize(length);
if (!android::base::ReadFully(socket, &content[0], length)) {
- ALOGE("failed to read the length: %s", strerror(errno));
+ PLOG(ERROR) << "failed to read the length";
return false;
}
- ALOGI(" received command: [%s] (%zu)", content.c_str(), content.size());
+ LOG(INFO) << " received command: [" << content << "] (" << content.size() << ")";
std::vector<std::string> options = android::base::Split(content, "\n");
std::string wipe_package;
for (auto& option : options) {
if (android::base::StartsWith(option, "--wipe_package=")) {
std::string path = option.substr(strlen("--wipe_package="));
if (!android::base::ReadFileToString(path, &wipe_package)) {
- ALOGE("failed to read %s: %s", path.c_str(), strerror(errno));
+ PLOG(ERROR) << "failed to read " << path;
return false;
}
option = android::base::StringPrintf("--wipe_package_size=%zu", wipe_package.size());
@@ -517,12 +519,12 @@
// c8. setup the bcb command
std::string err;
if (!write_bootloader_message(options, &err)) {
- ALOGE("failed to set bootloader message: %s", err.c_str());
+ LOG(ERROR) << "failed to set bootloader message: " << err;
write_status_to_socket(-1, socket);
return false;
}
if (!wipe_package.empty() && !write_wipe_package(wipe_package, &err)) {
- ALOGE("failed to set wipe package: %s", err.c_str());
+ PLOG(ERROR) << "failed to set wipe package: " << err;
write_status_to_socket(-1, socket);
return false;
}
@@ -539,7 +541,7 @@
}
int main(int argc, char** argv) {
- enum { UNCRYPT, SETUP_BCB, CLEAR_BCB } action;
+ enum { UNCRYPT, SETUP_BCB, CLEAR_BCB, UNCRYPT_DEBUG } action;
const char* input_path = nullptr;
const char* map_file = CACHE_BLOCK_MAP.c_str();
@@ -552,7 +554,7 @@
} else if (argc == 3) {
input_path = argv[1];
map_file = argv[2];
- action = UNCRYPT;
+ action = UNCRYPT_DEBUG;
} else {
usage(argv[0]);
return 2;
@@ -562,23 +564,34 @@
return 1;
}
+ if (action == UNCRYPT_DEBUG) {
+ LOG(INFO) << "uncrypt called in debug mode, skip socket communication";
+ bool success = uncrypt_wrapper(input_path, map_file, -1);
+ if (success) {
+ LOG(INFO) << "uncrypt succeeded";
+ } else{
+ LOG(INFO) << "uncrypt failed";
+ }
+ return success ? 0 : 1;
+ }
+
// c3. The socket is created by init when starting the service. uncrypt
// will use the socket to communicate with its caller.
android::base::unique_fd service_socket(android_get_control_socket(UNCRYPT_SOCKET.c_str()));
if (service_socket == -1) {
- ALOGE("failed to open socket \"%s\": %s", UNCRYPT_SOCKET.c_str(), strerror(errno));
+ PLOG(ERROR) << "failed to open socket \"" << UNCRYPT_SOCKET << "\"";
return 1;
}
fcntl(service_socket, F_SETFD, FD_CLOEXEC);
if (listen(service_socket, 1) == -1) {
- ALOGE("failed to listen on socket %d: %s", service_socket.get(), strerror(errno));
+ PLOG(ERROR) << "failed to listen on socket " << service_socket.get();
return 1;
}
android::base::unique_fd socket_fd(accept4(service_socket, nullptr, nullptr, SOCK_CLOEXEC));
if (socket_fd == -1) {
- ALOGE("failed to accept on socket %d: %s", service_socket.get(), strerror(errno));
+ PLOG(ERROR) << "failed to accept on socket " << service_socket.get();
return 1;
}
@@ -594,7 +607,7 @@
success = clear_bcb(socket_fd);
break;
default: // Should never happen.
- ALOGE("Invalid uncrypt action code: %d", action);
+ LOG(ERROR) << "Invalid uncrypt action code: " << action;
return 1;
}
@@ -603,9 +616,9 @@
// destroyed.
int code;
if (android::base::ReadFully(socket_fd, &code, 4)) {
- ALOGI(" received %d, exiting now", code);
+ LOG(INFO) << " received " << code << ", exiting now";
} else {
- ALOGE("failed to read the code: %s", strerror(errno));
+ PLOG(ERROR) << "failed to read the code";
}
return success ? 0 : 1;
}
diff --git a/update_verifier/update_verifier.cpp b/update_verifier/update_verifier.cpp
index 5cff8be..93ac605 100644
--- a/update_verifier/update_verifier.cpp
+++ b/update_verifier/update_verifier.cpp
@@ -40,13 +40,12 @@
#include <vector>
#include <android-base/file.h>
+#include <android-base/logging.h>
#include <android-base/parseint.h>
#include <android-base/strings.h>
#include <android-base/unique_fd.h>
#include <cutils/properties.h>
#include <hardware/boot_control.h>
-#define LOG_TAG "update_verifier"
-#include <log/log.h>
constexpr auto CARE_MAP_FILE = "/data/ota_package/care_map.txt";
constexpr int BLOCKSIZE = 4096;
@@ -57,7 +56,7 @@
std::string blk_device = blk_device_prefix + std::string(slot_suffix);
android::base::unique_fd fd(TEMP_FAILURE_RETRY(open(blk_device.c_str(), O_RDONLY)));
if (fd.get() == -1) {
- SLOGE("Error reading partition %s: %s\n", blk_device.c_str(), strerror(errno));
+ PLOG(ERROR) << "Error reading partition " << blk_device;
return false;
}
@@ -70,7 +69,7 @@
bool status = android::base::ParseUint(ranges[0].c_str(), &range_count);
if (!status || (range_count == 0) || (range_count % 2 != 0) ||
(range_count != ranges.size()-1)) {
- SLOGE("Error in parsing range string.\n");
+ LOG(ERROR) << "Error in parsing range string.";
return false;
}
@@ -80,26 +79,25 @@
bool parse_status = android::base::ParseUint(ranges[i].c_str(), &range_start);
parse_status = parse_status && android::base::ParseUint(ranges[i+1].c_str(), &range_end);
if (!parse_status || range_start >= range_end) {
- SLOGE("Invalid range pair %s, %s.\n", ranges[i].c_str(), ranges[i+1].c_str());
+ LOG(ERROR) << "Invalid range pair " << ranges[i] << ", " << ranges[i+1];
return false;
}
if (lseek64(fd.get(), static_cast<off64_t>(range_start) * BLOCKSIZE, SEEK_SET) == -1) {
- SLOGE("lseek to %u failed: %s.\n", range_start, strerror(errno));
+ PLOG(ERROR) << "lseek to " << range_start << " failed";
return false;
}
size_t size = (range_end - range_start) * BLOCKSIZE;
std::vector<uint8_t> buf(size);
if (!android::base::ReadFully(fd.get(), buf.data(), size)) {
- SLOGE("Failed to read blocks %u to %u: %s.\n", range_start, range_end,
- strerror(errno));
+ PLOG(ERROR) << "Failed to read blocks " << range_start << " to " << range_end;
return false;
}
blk_count += (range_end - range_start);
}
- SLOGI("Finished reading %zu blocks on %s.\n", blk_count, blk_device.c_str());
+ LOG(INFO) << "Finished reading " << blk_count << " blocks on " << blk_device;
return true;
}
@@ -109,7 +107,7 @@
// in /data/ota_package. To allow the device to continue booting in this situation,
// we should print a warning and skip the block verification.
if (care_map_fd.get() == -1) {
- SLOGI("Warning: care map %s not found.\n", care_map_name.c_str());
+ LOG(WARNING) << "Warning: care map " << care_map_name << " not found.";
return true;
}
// Care map file has four lines (two lines if vendor partition is not present):
@@ -118,15 +116,15 @@
// The next two lines have the same format but for vendor partition.
std::string file_content;
if (!android::base::ReadFdToString(care_map_fd.get(), &file_content)) {
- SLOGE("Error reading care map contents to string.\n");
+ LOG(ERROR) << "Error reading care map contents to string.";
return false;
}
std::vector<std::string> lines;
lines = android::base::Split(android::base::Trim(file_content), "\n");
if (lines.size() != 2 && lines.size() != 4) {
- SLOGE("Invalid lines in care_map: found %zu lines, expecting 2 or 4 lines.\n",
- lines.size());
+ LOG(ERROR) << "Invalid lines in care_map: found " << lines.size()
+ << " lines, expecting 2 or 4 lines.";
return false;
}
@@ -141,12 +139,12 @@
int main(int argc, char** argv) {
for (int i = 1; i < argc; i++) {
- SLOGI("Started with arg %d: %s\n", i, argv[i]);
+ LOG(INFO) << "Started with arg " << i << ": " << argv[i];
}
const hw_module_t* hw_module;
if (hw_get_module("bootctrl", &hw_module) != 0) {
- SLOGE("Error getting bootctrl module.\n");
+ LOG(ERROR) << "Error getting bootctrl module.";
return -1;
}
@@ -156,34 +154,35 @@
unsigned current_slot = module->getCurrentSlot(module);
int is_successful= module->isSlotMarkedSuccessful(module, current_slot);
- SLOGI("Booting slot %u: isSlotMarkedSuccessful=%d\n", current_slot, is_successful);
+ LOG(INFO) << "Booting slot " << current_slot << ": isSlotMarkedSuccessful=" << is_successful;
+
if (is_successful == 0) {
// The current slot has not booted successfully.
char verity_mode[PROPERTY_VALUE_MAX];
if (property_get("ro.boot.veritymode", verity_mode, "") == -1) {
- SLOGE("Failed to get dm-verity mode");
+ LOG(ERROR) << "Failed to get dm-verity mode.";
return -1;
} else if (strcasecmp(verity_mode, "eio") == 0) {
// We shouldn't see verity in EIO mode if the current slot hasn't booted
// successfully before. Therefore, fail the verification when veritymode=eio.
- SLOGE("Found dm-verity in EIO mode, skip verification.");
+ LOG(ERROR) << "Found dm-verity in EIO mode, skip verification.";
return -1;
} else if (strcmp(verity_mode, "enforcing") != 0) {
- SLOGE("Unexpected dm-verity mode : %s, expecting enforcing.", verity_mode);
+ LOG(ERROR) << "Unexpected dm-verity mode : " << verity_mode << ", expecting enforcing.";
return -1;
} else if (!verify_image(CARE_MAP_FILE)) {
- SLOGE("Failed to verify all blocks in care map file.\n");
+ LOG(ERROR) << "Failed to verify all blocks in care map file.";
return -1;
}
int ret = module->markBootSuccessful(module);
if (ret != 0) {
- SLOGE("Error marking booted successfully: %s\n", strerror(-ret));
+ LOG(ERROR) << "Error marking booted successfully: " << strerror(-ret);
return -1;
}
- SLOGI("Marked slot %u as booted successfully.\n", current_slot);
+ LOG(INFO) << "Marked slot " << current_slot << " as booted successfully.";
}
- SLOGI("Leaving update_verifier.\n");
+ LOG(INFO) << "Leaving update_verifier.";
return 0;
}
diff --git a/updater/Android.mk b/updater/Android.mk
index b4d427c..e4d73a4 100644
--- a/updater/Android.mk
+++ b/updater/Android.mk
@@ -37,7 +37,6 @@
libcrypto_utils \
libcrypto \
libapplypatch \
- libbase \
libotafault \
libedify \
libminzip \
@@ -46,7 +45,9 @@
libbz \
libcutils \
liblog \
- libselinux
+ libselinux \
+ libbase \
+ liblog
tune2fs_static_libraries := \
libext2_com_err \
diff --git a/updater/updater.cpp b/updater/updater.cpp
index c222cee..9fa01a5 100644
--- a/updater/updater.cpp
+++ b/updater/updater.cpp
@@ -19,6 +19,8 @@
#include <stdlib.h>
#include <string.h>
+#include <string>
+
#include "edify/expr.h"
#include "updater.h"
#include "install.h"
@@ -96,12 +98,11 @@
return 4;
}
- char* script = reinterpret_cast<char*>(malloc(script_entry->uncompLen+1));
- if (!mzReadZipEntry(&za, script_entry, script, script_entry->uncompLen)) {
+ std::string script(script_entry->uncompLen, '\0');
+ if (!mzReadZipEntry(&za, script_entry, &script[0], script_entry->uncompLen)) {
printf("failed to read script from package\n");
return 5;
}
- script[script_entry->uncompLen] = '\0';
// Configure edify's functions.
@@ -115,7 +116,7 @@
Expr* root;
int error_count = 0;
- int error = parse_string(script, &root, &error_count);
+ int error = parse_string(script.c_str(), &root, &error_count);
if (error != 0 || error_count > 0) {
printf("%d parse errors\n", error_count);
return 6;
@@ -142,7 +143,7 @@
State state;
state.cookie = &updater_info;
- state.script = script;
+ state.script = &script[0];
state.errmsg = NULL;
if (argc == 5) {
@@ -200,7 +201,5 @@
mzCloseZipArchive(updater_info.package_zip);
}
sysReleaseMap(&map);
- free(script);
-
return 0;
}
diff --git a/verifier.cpp b/verifier.cpp
index 996a1fd..401bd7e 100644
--- a/verifier.cpp
+++ b/verifier.cpp
@@ -22,6 +22,7 @@
#include <algorithm>
#include <memory>
+#include <android-base/logging.h>
#include <openssl/bn.h>
#include <openssl/ecdsa.h>
#include <openssl/obj_mac.h>
@@ -131,24 +132,24 @@
#define FOOTER_SIZE 6
if (length < FOOTER_SIZE) {
- LOGE("not big enough to contain footer\n");
+ LOG(ERROR) << "not big enough to contain footer";
return VERIFY_FAILURE;
}
unsigned char* footer = addr + length - FOOTER_SIZE;
if (footer[2] != 0xff || footer[3] != 0xff) {
- LOGE("footer is wrong\n");
+ LOG(ERROR) << "footer is wrong";
return VERIFY_FAILURE;
}
size_t comment_size = footer[4] + (footer[5] << 8);
size_t signature_start = footer[0] + (footer[1] << 8);
- LOGI("comment is %zu bytes; signature %zu bytes from end\n",
- comment_size, signature_start);
+ LOG(INFO) << "comment is " << comment_size << " bytes; signature is " << signature_start
+ << " bytes from end";
if (signature_start <= FOOTER_SIZE) {
- LOGE("Signature start is in the footer");
+ LOG(ERROR) << "Signature start is in the footer";
return VERIFY_FAILURE;
}
@@ -159,7 +160,7 @@
size_t eocd_size = comment_size + EOCD_HEADER_SIZE;
if (length < eocd_size) {
- LOGE("not big enough to contain EOCD\n");
+ LOG(ERROR) << "not big enough to contain EOCD";
return VERIFY_FAILURE;
}
@@ -175,7 +176,7 @@
// magic number $50 $4b $05 $06.
if (eocd[0] != 0x50 || eocd[1] != 0x4b ||
eocd[2] != 0x05 || eocd[3] != 0x06) {
- LOGE("signature length doesn't match EOCD marker\n");
+ LOG(ERROR) << "signature length doesn't match EOCD marker";
return VERIFY_FAILURE;
}
@@ -186,7 +187,7 @@
// the real one, minzip will find the later (wrong) one,
// which could be exploitable. Fail verification if
// this sequence occurs anywhere after the real one.
- LOGE("EOCD marker occurs after start of EOCD\n");
+ LOG(ERROR) << "EOCD marker occurs after start of EOCD";
return VERIFY_FAILURE;
}
}
@@ -235,12 +236,11 @@
uint8_t* signature = eocd + eocd_size - signature_start;
size_t signature_size = signature_start - FOOTER_SIZE;
- LOGI("signature (offset: 0x%zx, length: %zu): %s\n",
- length - signature_start, signature_size,
- print_hex(signature, signature_size).c_str());
+ LOG(INFO) << "signature (offset: " << std::hex << (length - signature_start) << ", length: "
+ << signature_size << "): " << print_hex(signature, signature_size);
if (!read_pkcs7(signature, signature_size, &sig_der, &sig_der_length)) {
- LOGE("Could not find signature DER block\n");
+ LOG(ERROR) << "Could not find signature DER block";
return VERIFY_FAILURE;
}
@@ -271,38 +271,38 @@
if (key.key_type == Certificate::KEY_TYPE_RSA) {
if (!RSA_verify(hash_nid, hash, key.hash_len, sig_der,
sig_der_length, key.rsa.get())) {
- LOGI("failed to verify against RSA key %zu\n", i);
+ LOG(INFO) << "failed to verify against RSA key " << i;
continue;
}
- LOGI("whole-file signature verified against RSA key %zu\n", i);
+ LOG(INFO) << "whole-file signature verified against RSA key " << i;
free(sig_der);
return VERIFY_SUCCESS;
} else if (key.key_type == Certificate::KEY_TYPE_EC
&& key.hash_len == SHA256_DIGEST_LENGTH) {
if (!ECDSA_verify(0, hash, key.hash_len, sig_der,
sig_der_length, key.ec.get())) {
- LOGI("failed to verify against EC key %zu\n", i);
+ LOG(INFO) << "failed to verify against EC key " << i;
continue;
}
- LOGI("whole-file signature verified against EC key %zu\n", i);
+ LOG(INFO) << "whole-file signature verified against EC key " << i;
free(sig_der);
return VERIFY_SUCCESS;
} else {
- LOGI("Unknown key type %d\n", key.key_type);
+ LOG(INFO) << "Unknown key type " << key.key_type;
}
i++;
}
if (need_sha1) {
- LOGI("SHA-1 digest: %s\n", print_hex(sha1, SHA_DIGEST_LENGTH).c_str());
+ LOG(INFO) << "SHA-1 digest: " << print_hex(sha1, SHA_DIGEST_LENGTH);
}
if (need_sha256) {
- LOGI("SHA-256 digest: %s\n", print_hex(sha256, SHA256_DIGEST_LENGTH).c_str());
+ LOG(INFO) << "SHA-256 digest: " << print_hex(sha256, SHA256_DIGEST_LENGTH);
}
free(sig_der);
- LOGE("failed to verify whole-file signature\n");
+ LOG(ERROR) << "failed to verify whole-file signature";
return VERIFY_FAILURE;
}
@@ -323,7 +323,7 @@
}
if (key_len_words > 8192 / 32) {
- LOGE("key length (%d) too large\n", key_len_words);
+ LOG(ERROR) << "key length (" << key_len_words << ") too large";
return nullptr;
}
@@ -479,7 +479,7 @@
bool load_keys(const char* filename, std::vector<Certificate>& certs) {
std::unique_ptr<FILE, decltype(&fclose)> f(fopen(filename, "r"), fclose);
if (!f) {
- LOGE("opening %s: %s\n", filename, strerror(errno));
+ PLOG(ERROR) << "error opening " << filename;
return false;
}
@@ -529,14 +529,14 @@
return false;
}
- LOGI("read key e=%d hash=%d\n", exponent, cert.hash_len);
+ LOG(INFO) << "read key e=" << exponent << " hash=" << cert.hash_len;
} else if (cert.key_type == Certificate::KEY_TYPE_EC) {
cert.ec = parse_ec_key(f.get());
if (!cert.ec) {
return false;
}
} else {
- LOGE("Unknown key type %d\n", cert.key_type);
+ LOG(ERROR) << "Unknown key type " << cert.key_type;
return false;
}
@@ -548,7 +548,7 @@
} else if (ch == EOF) {
break;
} else {
- LOGE("unexpected character between keys\n");
+ LOG(ERROR) << "unexpected character between keys";
return false;
}
}
diff --git a/wear_touch.cpp b/wear_touch.cpp
index 51a1d31..cf33daa 100644
--- a/wear_touch.cpp
+++ b/wear_touch.cpp
@@ -14,9 +14,6 @@
* limitations under the License.
*/
-#include "common.h"
-#include "wear_touch.h"
-
#include <dirent.h>
#include <fcntl.h>
#include <stdio.h>
@@ -25,8 +22,11 @@
#include <errno.h>
#include <string.h>
+#include <android-base/logging.h>
#include <linux/input.h>
+#include "wear_touch.h"
+
#define DEVICE_PATH "/dev/input"
WearSwipeDetector::WearSwipeDetector(int low, int high, OnSwipeCallback callback, void* cookie):
@@ -49,11 +49,11 @@
} else if (abs(dx) < mLowThreshold && abs(dy) > mHighThreshold) {
direction = dy < 0 ? UP : DOWN;
} else {
- LOGD("Ignore %d %d\n", dx, dy);
+ LOG(DEBUG) << "Ignore " << dx << " " << dy;
return;
}
- LOGD("Swipe direction=%d\n", direction);
+ LOG(DEBUG) << "Swipe direction=" << direction;
mCallback(mCookie, direction);
}
@@ -105,7 +105,7 @@
void WearSwipeDetector::run() {
int fd = findDevice(DEVICE_PATH);
if (fd < 0) {
- LOGE("no input devices found\n");
+ LOG(ERROR) << "no input devices found";
return;
}
@@ -127,14 +127,14 @@
int WearSwipeDetector::openDevice(const char *device) {
int fd = open(device, O_RDONLY);
if (fd < 0) {
- LOGE("could not open %s, %s\n", device, strerror(errno));
+ PLOG(ERROR) << "could not open " << device;
return false;
}
char name[80];
name[sizeof(name) - 1] = '\0';
if (ioctl(fd, EVIOCGNAME(sizeof(name) - 1), &name) < 1) {
- LOGE("could not get device name for %s, %s\n", device, strerror(errno));
+ PLOG(ERROR) << "could not get device name for " << device;
name[0] = '\0';
}
@@ -143,7 +143,7 @@
int ret = ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(bits)), bits);
if (ret > 0) {
if (test_bit(ABS_MT_POSITION_X, bits) && test_bit(ABS_MT_POSITION_Y, bits)) {
- LOGD("Found %s %s\n", device, name);
+ LOG(DEBUG) << "Found " << device << " " << name;
return fd;
}
}
@@ -155,7 +155,7 @@
int WearSwipeDetector::findDevice(const char* path) {
DIR* dir = opendir(path);
if (dir == NULL) {
- LOGE("Could not open directory %s", path);
+ PLOG(ERROR) << "Could not open directory " << path;
return false;
}