diff options
author | Michael Runge <mrunge@google.com> | 2014-10-24 00:15:29 +0200 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-10-24 00:15:29 +0200 |
commit | 45322f939a5bf66d378aab57e1fee1aa29ff9469 (patch) | |
tree | e57b2baefb54c5387d87c5bdafdf34a08a2466af | |
parent | am 4da9cdea: am 473967d8: Merge "Log to UI any metadata setting errors" into lmp-dev (diff) | |
parent | am 168f7778: Allow passing of mount args to mountFn (diff) | |
download | android_bootable_recovery-45322f939a5bf66d378aab57e1fee1aa29ff9469.tar android_bootable_recovery-45322f939a5bf66d378aab57e1fee1aa29ff9469.tar.gz android_bootable_recovery-45322f939a5bf66d378aab57e1fee1aa29ff9469.tar.bz2 android_bootable_recovery-45322f939a5bf66d378aab57e1fee1aa29ff9469.tar.lz android_bootable_recovery-45322f939a5bf66d378aab57e1fee1aa29ff9469.tar.xz android_bootable_recovery-45322f939a5bf66d378aab57e1fee1aa29ff9469.tar.zst android_bootable_recovery-45322f939a5bf66d378aab57e1fee1aa29ff9469.zip |
-rw-r--r-- | updater/install.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/updater/install.c b/updater/install.c index 17ea4c2b5..282a6188b 100644 --- a/updater/install.c +++ b/updater/install.c @@ -91,16 +91,27 @@ char* PrintSha1(const uint8_t* digest) { // fs_type="ext4" partition_type="EMMC" location=device Value* MountFn(const char* name, State* state, int argc, Expr* argv[]) { char* result = NULL; - if (argc != 4) { - return ErrorAbort(state, "%s() expects 4 args, got %d", name, argc); + if (argc != 4 && argc != 5) { + return ErrorAbort(state, "%s() expects 4-5 args, got %d", name, argc); } char* fs_type; char* partition_type; char* location; char* mount_point; - if (ReadArgs(state, argv, 4, &fs_type, &partition_type, + char* mount_options; + bool has_mount_options; + if (argc == 5) { + has_mount_options = true; + if (ReadArgs(state, argv, 5, &fs_type, &partition_type, + &location, &mount_point, &mount_options) < 0) { + return NULL; + } + } else { + has_mount_options = false; + if (ReadArgs(state, argv, 4, &fs_type, &partition_type, &location, &mount_point) < 0) { - return NULL; + return NULL; + } } if (strlen(fs_type) == 0) { @@ -154,7 +165,8 @@ Value* MountFn(const char* name, State* state, int argc, Expr* argv[]) { result = mount_point; } else { if (mount(location, mount_point, fs_type, - MS_NOATIME | MS_NODEV | MS_NODIRATIME, "") < 0) { + MS_NOATIME | MS_NODEV | MS_NODIRATIME, + has_mount_options ? mount_options : "") < 0) { printf("%s: failed to mount %s at %s: %s\n", name, location, mount_point, strerror(errno)); result = strdup(""); @@ -168,6 +180,7 @@ done: free(partition_type); free(location); if (result != mount_point) free(mount_point); + if (has_mount_options) free(mount_options); return StringValue(result); } |