diff --git a/init/Android.mk b/init/Android.mk index d8b574f2a635853a75e927f71867afe6defdd024..4827fa34b39be511c223e326de017baa1f4fcbdb 100644 --- a/init/Android.mk +++ b/init/Android.mk @@ -83,6 +83,7 @@ LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_UNSTRIPPED) LOCAL_STATIC_LIBRARIES := \ libinit \ + libbootloader_message_writer \ libfs_mgr \ libfec \ libfec_rs \ diff --git a/init/builtins.cpp b/init/builtins.cpp index 1fddc63140234cf93ef84b7b61272ce6e1706436..c8780bb532d83d78cd1f19f78d16f03f891a8878 100644 --- a/init/builtins.cpp +++ b/init/builtins.cpp @@ -44,6 +44,7 @@ #include <android-base/file.h> #include <android-base/parseint.h> #include <android-base/stringprintf.h> +#include <bootloader_message_writer.h> #include <cutils/partition_utils.h> #include <cutils/android_reboot.h> #include <logwrap/logwrap.h> @@ -450,14 +451,10 @@ exit_success: } static int wipe_data_via_recovery() { - mkdir("/cache/recovery", 0700); - int fd = open("/cache/recovery/command", O_RDWR|O_CREAT|O_TRUNC|O_CLOEXEC, 0600); - if (fd >= 0) { - write(fd, "--wipe_data\n", strlen("--wipe_data\n") + 1); - write(fd, "--reason=wipe_data_via_recovery\n", strlen("--reason=wipe_data_via_recovery\n") + 1); - close(fd); - } else { - ERROR("could not open /cache/recovery/command\n"); + const std::vector<std::string> options = {"--wipe_data", "--reason=wipe_data_via_recovery"}; + std::string err; + if (!write_bootloader_message(options, &err)) { + ERROR("failed to set bootloader message: %s", err.c_str()); return -1; } android_reboot(ANDROID_RB_RESTART2, 0, "recovery");