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
This commit is contained in:
Doug Zongker 2010-09-14 18:06:55 -07:00
parent d12560aa21
commit 8e5e4dada7
5 changed files with 17 additions and 3 deletions

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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_

View File

@ -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!
}

View File

@ -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;