diff options
author | Doug Zongker <dougz@android.com> | 2010-09-14 18:06:55 -0700 |
---|---|---|
committer | Doug Zongker <dougz@android.com> | 2010-09-14 21:26:38 -0700 |
commit | 8e5e4dada713609c9b2c45ea9cf4572bb89ef761 (patch) | |
tree | b1dd9d0f6408811e71dade4f1ccbc52f18114a5e | |
parent | d12560aa2134d3af21a1220cd4873553f9c51743 (diff) | |
download | bootable_recovery-8e5e4dada713609c9b2c45ea9cf4572bb89ef761.zip bootable_recovery-8e5e4dada713609c9b2c45ea9cf4572bb89ef761.tar.gz bootable_recovery-8e5e4dada713609c9b2c45ea9cf4572bb89ef761.tar.bz2 |
close update package before installing; allow remount
Close the update package before invoking the binary, to allow the
installer to unmount /cache if it wants to. Add a function to allow
remounting of a mount as read-only.
Change-Id: Idfcc96c3da66083295177f729263560be58034e4
-rw-r--r-- | install.c | 4 | ||||
-rw-r--r-- | mtdutils/mounts.c | 8 | ||||
-rw-r--r-- | mtdutils/mounts.h | 2 | ||||
-rw-r--r-- | mtdutils/mtdutils.c | 2 | ||||
-rw-r--r-- | updater/updater.c | 4 |
5 files changed, 17 insertions, 3 deletions
@@ -42,6 +42,7 @@ try_update_binary(const char *path, ZipArchive *zip) { const ZipEntry* binary_entry = mzFindZipEntry(zip, ASSUMED_UPDATE_BINARY_NAME); if (binary_entry == NULL) { + mzCloseZipArchive(zip); return INSTALL_CORRUPT; } @@ -49,11 +50,13 @@ try_update_binary(const char *path, ZipArchive *zip) { unlink(binary); int fd = creat(binary, 0755); if (fd < 0) { + mzCloseZipArchive(zip); LOGE("Can't make %s\n", binary); return 1; } bool ok = mzExtractZipEntryToFile(zip, binary_entry, fd); close(fd); + mzCloseZipArchive(zip); if (!ok) { LOGE("Can't copy %s\n", ASSUMED_UPDATE_BINARY_NAME); @@ -298,6 +301,5 @@ install_package(const char *root_path) /* Verify and install the contents of the package. */ int status = handle_update_package(path, &zip); - mzCloseZipArchive(&zip); return status; } diff --git a/mtdutils/mounts.c b/mtdutils/mounts.c index 2ab3ff6..c90fc8a 100644 --- a/mtdutils/mounts.c +++ b/mtdutils/mounts.c @@ -212,3 +212,11 @@ unmount_mounted_volume(const MountedVolume *volume) } return ret; } + +int +remount_read_only(const MountedVolume* volume) +{ + return mount(volume->device, volume->mount_point, volume->filesystem, + MS_NOATIME | MS_NODEV | MS_NODIRATIME | + MS_RDONLY | MS_REMOUNT, 0); +} diff --git a/mtdutils/mounts.h b/mtdutils/mounts.h index 2e2765a..30b2927 100644 --- a/mtdutils/mounts.h +++ b/mtdutils/mounts.h @@ -28,4 +28,6 @@ find_mounted_volume_by_mount_point(const char *mount_point); int unmount_mounted_volume(const MountedVolume *volume); +int remount_read_only(const MountedVolume* volume); + #endif // MTDUTILS_MOUNTS_H_ diff --git a/mtdutils/mtdutils.c b/mtdutils/mtdutils.c index d16f44e..48d5ea9 100644 --- a/mtdutils/mtdutils.c +++ b/mtdutils/mtdutils.c @@ -455,7 +455,7 @@ static int write_block(MtdWriteContext *ctx, const char *data) if (retry > 0) { fprintf(stderr, "mtd: wrote block after %d retries\n", retry); } - fprintf(stderr, "mtd: successfully wrote block at %x\n", pos); + fprintf(stderr, "mtd: successfully wrote block at %llx\n", pos); return 0; // Success! } diff --git a/updater/updater.c b/updater/updater.c index 6537a94..aa626d2 100644 --- a/updater/updater.c +++ b/updater/updater.c @@ -136,7 +136,9 @@ int main(int argc, char** argv) { free(result); } - mzCloseZipArchive(&za); + if (updater_info.package_zip) { + mzCloseZipArchive(updater_info.package_zip); + } free(script); return 0; |