summaryrefslogtreecommitdiffstats
path: root/updater
diff options
context:
space:
mode:
authorDan Pasanen <dan.pasanen@gmail.com>2015-01-13 21:25:26 -0600
committerTom Marshall <tdm@cyngn.com>2015-11-25 15:35:47 -0800
commitd644eb58fde7d39a416850af3caeb4cbce514ec8 (patch)
tree8a42e59be879186f543a96f49c929bb5796dd1db /updater
parent0176875fba9ceb5674dfd71108fb66fa53164791 (diff)
downloadbootable_recovery-d644eb58fde7d39a416850af3caeb4cbce514ec8.zip
bootable_recovery-d644eb58fde7d39a416850af3caeb4cbce514ec8.tar.gz
bootable_recovery-d644eb58fde7d39a416850af3caeb4cbce514ec8.tar.bz2
recovery: autodetect filesystem type
* Multiple fstab lines (supported in android) cause recovery to fail to mount partitions if the fs type is not the same as the first fstab entry. So when we attempt to find an fstab entry that matches a path for an f2fs, ext4 or vfat type, check it against blkid's determination of what filesystem type it is. If there is a discrepancy, query fs_mgr for the next possible entry that matches that path until either we find one that is good, or run out of fstab entries. * Also attempt to autodetect the filesystem type for mounting from update.zips. Change-Id: Ib6f4535dd88ef714ae1ca6fb0ffae1c7dac0f7ce
Diffstat (limited to 'updater')
-rw-r--r--updater/Android.mk3
-rw-r--r--updater/install.c11
2 files changed, 14 insertions, 0 deletions
diff --git a/updater/Android.mk b/updater/Android.mk
index 9f9da06..1ea1fb7 100644
--- a/updater/Android.mk
+++ b/updater/Android.mk
@@ -28,6 +28,9 @@ LOCAL_STATIC_LIBRARIES += \
libsparse_static \
libz
+LOCAL_C_INCLUDES += external/e2fsprogs/lib
+LOCAL_STATIC_LIBRARIES += libext2_blkid libext2_uuid
+
ifneq ($(BOARD_RECOVERY_BLDRMSG_OFFSET),)
LOCAL_CFLAGS += -DBOARD_RECOVERY_BLDRMSG_OFFSET=$(BOARD_RECOVERY_BLDRMSG_OFFSET)
endif
diff --git a/updater/install.c b/updater/install.c
index 8d569ff..43d5cfb 100644
--- a/updater/install.c
+++ b/updater/install.c
@@ -33,6 +33,7 @@
#include <sys/xattr.h>
#include <linux/xattr.h>
#include <inttypes.h>
+#include <blkid/blkid.h>
#include "bootloader.h"
#include "applypatch/applypatch.h"
@@ -167,6 +168,16 @@ Value* MountFn(const char* name, State* state, int argc, Expr* argv[]) {
}
result = mount_point;
} else {
+ char *detected_fs_type = blkid_get_tag_value(NULL, "TYPE", location);
+ if (detected_fs_type) {
+ uiPrintf(state, "detected filesystem %s for %s\n",
+ detected_fs_type, location);
+ fs_type = detected_fs_type;
+ } else {
+ uiPrintf(state, "could not detect filesystem for %s, assuming %s\n",
+ location, fs_type);
+ }
+
if (mount(location, mount_point, fs_type,
MS_NOATIME | MS_NODEV | MS_NODIRATIME,
has_mount_options ? mount_options : "") < 0) {