diff options
author | Doug Zongker <dougz@android.com> | 2009-09-19 00:49:37 +0200 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-09-19 00:49:37 +0200 |
commit | d16fb221cd27abea8a954bd5f6554fa116366519 (patch) | |
tree | 3539ae744cf639ca10bdcf90db0bc2d0e016812e /updater/install.c | |
parent | am 196c25c7: don\'t complain if recovery icon is short (diff) | |
parent | delete files before symlinking; log error messages (diff) | |
download | android_bootable_recovery-d16fb221cd27abea8a954bd5f6554fa116366519.tar android_bootable_recovery-d16fb221cd27abea8a954bd5f6554fa116366519.tar.gz android_bootable_recovery-d16fb221cd27abea8a954bd5f6554fa116366519.tar.bz2 android_bootable_recovery-d16fb221cd27abea8a954bd5f6554fa116366519.tar.lz android_bootable_recovery-d16fb221cd27abea8a954bd5f6554fa116366519.tar.xz android_bootable_recovery-d16fb221cd27abea8a954bd5f6554fa116366519.tar.zst android_bootable_recovery-d16fb221cd27abea8a954bd5f6554fa116366519.zip |
Diffstat (limited to 'updater/install.c')
-rw-r--r-- | updater/install.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/updater/install.c b/updater/install.c index ad895569e..aa80d7576 100644 --- a/updater/install.c +++ b/updater/install.c @@ -86,6 +86,8 @@ char* MountFn(const char* name, State* state, int argc, Expr* argv[]) { } else { if (mount(location, mount_point, type, MS_NOATIME | MS_NODEV | MS_NODIRATIME, "") < 0) { + fprintf(stderr, "%s: failed to mount %s at %s: %s\n", + name, location, mount_point, strerror(errno)); result = strdup(""); } else { result = mount_point; @@ -348,6 +350,7 @@ char* PackageExtractFileFn(const char* name, State* state, // symlink target src1 src2 ... +// unlinks any previously existing src1, src2, etc before creating symlinks. char* SymlinkFn(const char* name, State* state, int argc, Expr* argv[]) { if (argc == 0) { return ErrorAbort(state, "%s() expects 1+ args, got %d", name, argc); @@ -364,7 +367,16 @@ char* SymlinkFn(const char* name, State* state, int argc, Expr* argv[]) { int i; for (i = 0; i < argc-1; ++i) { - symlink(target, srcs[i]); + if (unlink(srcs[i]) < 0) { + if (errno != ENOENT) { + fprintf(stderr, "%s: failed to remove %s: %s\n", + name, srcs[i], strerror(errno)); + } + } + if (symlink(target, srcs[i]) < 0) { + fprintf(stderr, "%s: failed to symlink %s to %s: %s\n", + name, srcs[i], target, strerror(errno)); + } free(srcs[i]); } free(srcs); @@ -424,8 +436,14 @@ char* SetPermFn(const char* name, State* state, int argc, Expr* argv[]) { } for (i = 3; i < argc; ++i) { - chown(args[i], uid, gid); - chmod(args[i], mode); + if (chown(args[i], uid, gid) < 0) { + fprintf(stderr, "%s: chown of %s to %d %d failed: %s\n", + name, args[i], uid, gid, strerror(errno)); + } + if (chmod(args[i], mode) < 0) { + fprintf(stderr, "%s: chmod of %s to %o failed: %s\n", + name, args[i], mode, strerror(errno)); + } } } result = strdup(""); |