Merge "updater: Use O_SYNC and fsync() for package_extract_file()."

am: 4e72d1a81e

* commit '4e72d1a81e2194caf101dc8633858efaa9bdb39b':
  updater: Use O_SYNC and fsync() for package_extract_file().
This commit is contained in:
Tao Bao 2015-12-15 18:23:53 +00:00 committed by android-build-merger
commit 125a6349b9

View file

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