summaryrefslogtreecommitdiffstats
path: root/updater
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--updater/updater.cpp37
1 files changed, 17 insertions, 20 deletions
diff --git a/updater/updater.cpp b/updater/updater.cpp
index 9fa01a53c..2497bd56d 100644
--- a/updater/updater.cpp
+++ b/updater/updater.cpp
@@ -14,6 +14,8 @@
* limitations under the License.
*/
+#include "updater.h"
+
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
@@ -21,16 +23,16 @@
#include <string>
+#include <android-base/strings.h>
+#include <selinux/label.h>
+#include <selinux/selinux.h>
+
+#include "config.h"
#include "edify/expr.h"
-#include "updater.h"
-#include "install.h"
#include "blockimg.h"
+#include "install.h"
#include "minzip/Zip.h"
#include "minzip/SysUtil.h"
-#include "config.h"
-
-#include <selinux/label.h>
-#include <selinux/selinux.h>
// Generated by the makefile, this function defines the
// RegisterDeviceExtensions() function, which calls all the
@@ -141,10 +143,7 @@ int main(int argc, char** argv) {
updater_info.package_zip_addr = map.addr;
updater_info.package_zip_len = map.length;
- State state;
- state.cookie = &updater_info;
- state.script = &script[0];
- state.errmsg = NULL;
+ State state(script, &updater_info);
if (argc == 5) {
if (strcmp(argv[4], "retry") == 0) {
@@ -161,22 +160,21 @@ int main(int argc, char** argv) {
}
if (result == NULL) {
- if (state.errmsg == NULL) {
+ if (state.errmsg.empty()) {
printf("script aborted (no error message)\n");
fprintf(cmd_pipe, "ui_print script aborted (no error message)\n");
} else {
- printf("script aborted: %s\n", state.errmsg);
- char* line = strtok(state.errmsg, "\n");
- while (line) {
+ printf("script aborted: %s\n", state.errmsg.c_str());
+ const std::vector<std::string> lines = android::base::Split(state.errmsg, "\n");
+ for (const std::string& line : lines) {
// Parse the error code in abort message.
// Example: "E30: This package is for bullhead devices."
- if (*line == 'E') {
- if (sscanf(line, "E%u: ", &state.error_code) != 1) {
- printf("Failed to parse error code: [%s]\n", line);
+ if (!line.empty() && line[0] == 'E') {
+ if (sscanf(line.c_str(), "E%u: ", &state.error_code) != 1) {
+ printf("Failed to parse error code: [%s]\n", line.c_str());
}
}
- fprintf(cmd_pipe, "ui_print %s\n", line);
- line = strtok(NULL, "\n");
+ fprintf(cmd_pipe, "ui_print %s\n", line.c_str());
}
fprintf(cmd_pipe, "ui_print\n");
}
@@ -190,7 +188,6 @@ int main(int argc, char** argv) {
}
}
- free(state.errmsg);
return 7;
} else {
fprintf(cmd_pipe, "ui_print script succeeded: result was [%s]\n", result);