diff options
author | Tao Bao <tbao@google.com> | 2015-12-15 18:55:05 +0100 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-12-15 18:55:05 +0100 |
commit | 4e72d1a81e2194caf101dc8633858efaa9bdb39b (patch) | |
tree | ebcae32374c84258018e995b10224c0f0eb6a78e | |
parent | Merge "update_verifier: Track the API change for isSlotBootable()." (diff) | |
parent | updater: Use O_SYNC and fsync() for package_extract_file(). (diff) | |
download | android_bootable_recovery-4e72d1a81e2194caf101dc8633858efaa9bdb39b.tar android_bootable_recovery-4e72d1a81e2194caf101dc8633858efaa9bdb39b.tar.gz android_bootable_recovery-4e72d1a81e2194caf101dc8633858efaa9bdb39b.tar.bz2 android_bootable_recovery-4e72d1a81e2194caf101dc8633858efaa9bdb39b.tar.lz android_bootable_recovery-4e72d1a81e2194caf101dc8633858efaa9bdb39b.tar.xz android_bootable_recovery-4e72d1a81e2194caf101dc8633858efaa9bdb39b.tar.zst android_bootable_recovery-4e72d1a81e2194caf101dc8633858efaa9bdb39b.zip |
-rw-r--r-- | updater/install.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/updater/install.cpp b/updater/install.cpp index e2b3db7ce..b09086964 100644 --- a/updater/install.cpp +++ b/updater/install.cpp @@ -555,14 +555,21 @@ Value* PackageExtractFileFn(const char* name, State* state, } { - FILE* f = fopen(dest_path, "wb"); - if (f == NULL) { - printf("%s: can't open %s for write: %s\n", - name, dest_path, strerror(errno)); + int fd = TEMP_FAILURE_RETRY(open(dest_path, O_WRONLY | O_CREAT | O_TRUNC | O_SYNC, + S_IRUSR | S_IWUSR)); + if (fd == -1) { + printf("%s: can't open %s for write: %s\n", name, dest_path, strerror(errno)); goto done2; } - success = mzExtractZipEntryToFile(za, entry, fileno(f)); - fclose(f); + success = mzExtractZipEntryToFile(za, entry, fd); + if (fsync(fd) == -1) { + printf("fsync of \"%s\" failed: %s\n", dest_path, strerror(errno)); + success = false; + } + if (close(fd) == -1) { + printf("close of \"%s\" failed: %s\n", dest_path, strerror(errno)); + success = false; + } } done2: |