diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2017-07-06 00:33:35 +0200 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-07-06 00:33:35 +0200 |
commit | bee95d68661d990c04a581393206ff8a46b5149f (patch) | |
tree | 424f67c41bdd4b425d4a0e1a11cdac3e7bd60380 /updater | |
parent | screen_ui: Compute the top and bottom gaps. (diff) | |
parent | recovery: replace make_ext4 with e2fsprogs (diff) | |
download | android_bootable_recovery-bee95d68661d990c04a581393206ff8a46b5149f.tar android_bootable_recovery-bee95d68661d990c04a581393206ff8a46b5149f.tar.gz android_bootable_recovery-bee95d68661d990c04a581393206ff8a46b5149f.tar.bz2 android_bootable_recovery-bee95d68661d990c04a581393206ff8a46b5149f.tar.lz android_bootable_recovery-bee95d68661d990c04a581393206ff8a46b5149f.tar.xz android_bootable_recovery-bee95d68661d990c04a581393206ff8a46b5149f.tar.zst android_bootable_recovery-bee95d68661d990c04a581393206ff8a46b5149f.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); |