mount sdcard only on demand; fix sideload installs

Bug: 3009493
Change-Id: I1a7f99fc41a6a7012742e82f8c06a0c75584890a
diff --git a/roots.c b/roots.c
index fb495fe..90b82d7 100644
--- a/roots.c
+++ b/roots.c
@@ -35,6 +35,13 @@
     int alloc = 2;
     device_volumes = malloc(alloc * sizeof(Volume));
 
+    // Insert an entry for /tmp, which is the ramdisk and is always mounted.
+    device_volumes[0].mount_point = "/tmp";
+    device_volumes[0].fs_type = "ramdisk";
+    device_volumes[0].device = NULL;
+    device_volumes[0].device2 = NULL;
+    num_volumes = 1;
+
     FILE* fstab = fopen("/etc/recovery.fstab", "r");
     if (fstab == NULL) {
         LOGE("failed to open /etc/recovery.fstab (%s)\n", strerror(errno));
@@ -104,6 +111,10 @@
         LOGE("unknown volume for path [%s]\n", path);
         return -1;
     }
+    if (strcmp(v->fs_type, "ramdisk") == 0) {
+        // the ramdisk is always mounted.
+        return 0;
+    }
 
     int result;
     result = scan_mounted_volumes();
@@ -160,6 +171,10 @@
         LOGE("unknown volume for path [%s]\n", path);
         return -1;
     }
+    if (strcmp(v->fs_type, "ramdisk") == 0) {
+        // the ramdisk is always mounted; you can't unmount it.
+        return -1;
+    }
 
     int result;
     result = scan_mounted_volumes();
@@ -184,6 +199,11 @@
         LOGE("unknown volume \"%s\"\n", volume);
         return -1;
     }
+    if (strcmp(v->fs_type, "ramdisk") == 0) {
+        // you can't format the ramdisk.
+        LOGE("can't format_volume \"%s\"", volume);
+        return -1;
+    }
     if (strcmp(v->mount_point, volume) != 0) {
         LOGE("can't give path \"%s\" to format_volume\n", volume);
         return -1;