diff options
author | Michael Runge <mrunge@google.com> | 2013-11-08 00:00:42 +0100 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-11-08 00:00:42 +0100 |
commit | 40dfc474c457f5be24e204e6a0c657c97acb8f3c (patch) | |
tree | 0db09e752137a03b474eb78fcb20cd86b5902947 /updater | |
parent | am 3966c571: merge in klp-release (no-op) (diff) | |
parent | Merge "Enable incremental builder to find files that moved, and try to process them via patch + rename, instead of delete + add." into klp-dev (diff) | |
download | android_bootable_recovery-40dfc474c457f5be24e204e6a0c657c97acb8f3c.tar android_bootable_recovery-40dfc474c457f5be24e204e6a0c657c97acb8f3c.tar.gz android_bootable_recovery-40dfc474c457f5be24e204e6a0c657c97acb8f3c.tar.bz2 android_bootable_recovery-40dfc474c457f5be24e204e6a0c657c97acb8f3c.tar.lz android_bootable_recovery-40dfc474c457f5be24e204e6a0c657c97acb8f3c.tar.xz android_bootable_recovery-40dfc474c457f5be24e204e6a0c657c97acb8f3c.tar.zst android_bootable_recovery-40dfc474c457f5be24e204e6a0c657c97acb8f3c.zip |
Diffstat (limited to 'updater')
-rw-r--r-- | updater/install.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/updater/install.c b/updater/install.c index 061aa7b5b..6a8a6b3fc 100644 --- a/updater/install.c +++ b/updater/install.c @@ -285,6 +285,40 @@ done: return StringValue(result); } +Value* RenameFn(const char* name, State* state, int argc, Expr* argv[]) { + char* result = NULL; + if (argc != 2) { + return ErrorAbort(state, "%s() expects 2 args, got %d", name, argc); + } + + char* src_name; + char* dst_name; + + if (ReadArgs(state, argv, 2, &src_name, &dst_name) < 0) { + return NULL; + } + if (strlen(src_name) == 0) { + ErrorAbort(state, "src_name argument to %s() can't be empty", name); + goto done; + } + if (strlen(dst_name) == 0) { + ErrorAbort(state, "dst_name argument to %s() can't be empty", + name); + goto done; + } + + if (rename(src_name, dst_name) != 0) { + ErrorAbort(state, "Rename of %s() to %s() failed, error %s()", + src_name, dst_name, strerror(errno)); + } else { + result = dst_name; + } + +done: + free(src_name); + if (result != dst_name) free(dst_name); + return StringValue(result); +} Value* DeleteFn(const char* name, State* state, int argc, Expr* argv[]) { char** paths = malloc(argc * sizeof(char*)); @@ -1338,6 +1372,7 @@ void RegisterInstallFunctions() { RegisterFunction("read_file", ReadFileFn); RegisterFunction("sha1_check", Sha1CheckFn); + RegisterFunction("rename", RenameFn); RegisterFunction("wipe_cache", WipeCacheFn); |