diff options
author | Jin Qian <jinqian@google.com> | 2017-07-21 21:06:06 +0200 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-07-21 21:06:06 +0200 |
commit | 92036417425386d103ce1550c1c95f6e695129cb (patch) | |
tree | f71477d34184063bacf632e5e2df409bd7f47f64 /updater | |
parent | Merge "Fix the android-cloexec-* warnings in bootable/recovery" (diff) | |
parent | Merge "recovery: replace make_ext4 with e2fsprogs" (diff) | |
download | android_bootable_recovery-92036417425386d103ce1550c1c95f6e695129cb.tar android_bootable_recovery-92036417425386d103ce1550c1c95f6e695129cb.tar.gz android_bootable_recovery-92036417425386d103ce1550c1c95f6e695129cb.tar.bz2 android_bootable_recovery-92036417425386d103ce1550c1c95f6e695129cb.tar.lz android_bootable_recovery-92036417425386d103ce1550c1c95f6e695129cb.tar.xz android_bootable_recovery-92036417425386d103ce1550c1c95f6e695129cb.tar.zst android_bootable_recovery-92036417425386d103ce1550c1c95f6e695129cb.zip |
Diffstat (limited to 'updater')
-rw-r--r-- | updater/install.cpp | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/updater/install.cpp b/updater/install.cpp index ff79edce0..c9a3a0799 100644 --- a/updater/install.cpp +++ b/updater/install.cpp @@ -302,9 +302,32 @@ Value* FormatFn(const char* name, State* state, const std::vector<std::unique_pt } if (fs_type == "ext4") { - int status = make_ext4fs(location.c_str(), size, mount_point.c_str(), sehandle); + const char* mke2fs_argv[] = { "/sbin/mke2fs_static", "-t", "ext4", "-b", "4096", + location.c_str(), nullptr, nullptr }; + std::string size_str; + if (size != 0) { + size_str = std::to_string(size / 4096LL); + mke2fs_argv[6] = size_str.c_str(); + } + + int status = exec_cmd(mke2fs_argv[0], const_cast<char**>(mke2fs_argv)); + if (status != 0) { + LOG(WARNING) << name << ": mke2fs failed (" << status << ") on " << location + << ", falling back to make_ext4fs"; + status = make_ext4fs(location.c_str(), size, mount_point.c_str(), sehandle); + if (status != 0) { + LOG(ERROR) << name << ": make_ext4fs failed (" << status << ") on " << location; + return StringValue(""); + } + return StringValue(location); + } + + const char* e2fsdroid_argv[] = { "/sbin/e2fsdroid_static", "-e", "-S", + "/file_contexts", "-a", mount_point.c_str(), + location.c_str(), nullptr }; + status = exec_cmd(e2fsdroid_argv[0], const_cast<char**>(e2fsdroid_argv)); if (status != 0) { - LOG(ERROR) << name << ": make_ext4fs failed (" << status << ") on " << location; + LOG(ERROR) << name << ": e2fsdroid failed (" << status << ") on " << location; return StringValue(""); } return StringValue(location); |