aboutsummaryrefslogtreecommitdiffstats
path: root/roots.cpp
diff options
context:
space:
mode:
authorAndres Morales <anmorales@google.com>2014-08-06 17:07:35 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-08-05 00:34:22 +0000
commit9dc71cfa5233789a50d8a9d2c9af87d0f106d4ad (patch)
tree1d60fc74a6983fe4a1ef3f60e2d039857a18c2a1 /roots.cpp
parent2b5f0e0f767ce51d9605809052ad04fe83d1df83 (diff)
parentee19387905650cab5da7dd97ada5502cd17ac93d (diff)
downloadbootable_recovery-9dc71cfa5233789a50d8a9d2c9af87d0f106d4ad.zip
bootable_recovery-9dc71cfa5233789a50d8a9d2c9af87d0f106d4ad.tar.gz
bootable_recovery-9dc71cfa5233789a50d8a9d2c9af87d0f106d4ad.tar.bz2
Merge "Erase PST partition if its marked to be erased." into lmp-dev
Diffstat (limited to 'roots.cpp')
-rw-r--r--roots.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/roots.cpp b/roots.cpp
index ee14016..0d47577 100644
--- a/roots.cpp
+++ b/roots.cpp
@@ -39,6 +39,8 @@ static struct fstab *fstab = NULL;
extern struct selabel_handle *sehandle;
+static const char* PERSISTENT_PATH = "/persistent";
+
void load_volume_table()
{
int i;
@@ -264,6 +266,41 @@ int format_volume(const char* volume) {
return -1;
}
+int erase_persistent_partition() {
+ Volume *v = volume_for_path(PERSISTENT_PATH);
+ if (v == NULL) {
+ // most devices won't have /persistent, so this is not an error.
+ return 0;
+ }
+
+ int fd = open(v->blk_device, O_RDWR);
+ uint64_t size = get_file_size(fd);
+ if (size == 0) {
+ LOGE("failed to stat size of /persistent\n");
+ close(fd);
+ return -1;
+ }
+
+ char oem_unlock_enabled;
+ lseek(fd, size - 1, SEEK_SET);
+ read(fd, &oem_unlock_enabled, 1);
+
+ if (oem_unlock_enabled) {
+ if (wipe_block_device(fd, size)) {
+ LOGE("error wiping /persistent: %s\n", strerror(errno));
+ close(fd);
+ return -1;
+ }
+
+ lseek(fd, size - 1, SEEK_SET);
+ write(fd, &oem_unlock_enabled, 1);
+ }
+
+ close(fd);
+
+ return (int) oem_unlock_enabled;
+}
+
int setup_install_mounts() {
if (fstab == NULL) {
LOGE("can't set up install mounts: no fstab loaded\n");