aboutsummaryrefslogtreecommitdiffstats
path: root/roots.cpp
diff options
context:
space:
mode:
authorDoug Zongker <dougz@google.com>2013-08-20 16:03:25 -0700
committerDoug Zongker <dougz@google.com>2013-08-21 13:44:35 -0700
commit239ac6abac4524be93fce710360c0512c6cc2ab3 (patch)
tree55428f9ad654b63d4002ca94902440648c955b96 /roots.cpp
parentc0441d171914e59941ec4f815ae0aabf56d6504f (diff)
downloadbootable_recovery-239ac6abac4524be93fce710360c0512c6cc2ab3.zip
bootable_recovery-239ac6abac4524be93fce710360c0512c6cc2ab3.tar.gz
bootable_recovery-239ac6abac4524be93fce710360c0512c6cc2ab3.tar.bz2
recovery: install packages in a known mount environment
When installing a package, we should have /tmp and /cache mounted and nothing else. Ensure this is true by explicitly mounting them and unmounting everything else as the first step of every install. Also fix an error in the progress bar that crops up when you do multiple package installs in one instance of recovery. Change-Id: I4837ed707cb419ddd3d9f6188b6355ba1bcfe2b2
Diffstat (limited to 'roots.cpp')
-rw-r--r--roots.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/roots.cpp b/roots.cpp
index 0947122..113dba1 100644
--- a/roots.cpp
+++ b/roots.cpp
@@ -202,3 +202,22 @@ int format_volume(const char* volume) {
LOGE("format_volume: fs_type \"%s\" unsupported\n", v->fs_type);
return -1;
}
+
+int setup_install_mounts() {
+ if (fstab == NULL) {
+ LOGE("can't set up install mounts: no fstab loaded\n");
+ return -1;
+ }
+ for (int i = 0; i < fstab->num_entries; ++i) {
+ Volume* v = fstab->recs + i;
+
+ if (strcmp(v->mount_point, "/tmp") == 0 ||
+ strcmp(v->mount_point, "/cache") == 0) {
+ if (ensure_path_mounted(v->mount_point) != 0) return -1;
+
+ } else {
+ if (ensure_path_unmounted(v->mount_point) != 0) return -1;
+ }
+ }
+ return 0;
+}