summaryrefslogtreecommitdiffstats
path: root/updater/install.c
diff options
context:
space:
mode:
authorMichael Runge <mrunge@google.com>2014-10-24 00:15:29 +0200
committerAndroid Git Automerger <android-git-automerger@android.com>2014-10-24 00:15:29 +0200
commit45322f939a5bf66d378aab57e1fee1aa29ff9469 (patch)
treee57b2baefb54c5387d87c5bdafdf34a08a2466af /updater/install.c
parentam 4da9cdea: am 473967d8: Merge "Log to UI any metadata setting errors" into lmp-dev (diff)
parentam 168f7778: Allow passing of mount args to mountFn (diff)
downloadandroid_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
Diffstat (limited to '')
-rw-r--r--updater/install.c23
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);
}