Merge "Reserve space on disk using fallocate"

This commit is contained in:
Narayan Kamath 2015-04-20 09:49:35 +00:00 committed by Gerrit Code Review
commit 4d0cb5e806

View file

@ -1131,7 +1131,22 @@ int32_t ExtractEntryToFile(ZipArchiveHandle handle,
return kIoError;
}
int result = TEMP_FAILURE_RETRY(ftruncate(fd, declared_length + current_offset));
int result = 0;
#if defined(__linux__)
// Make sure we have enough space on the volume to extract the compressed
// entry. Note that the call to ftruncate below will change the file size but
// will not allocate space on disk.
if (declared_length > 0) {
result = TEMP_FAILURE_RETRY(fallocate(fd, 0, current_offset, declared_length));
if (result == -1) {
ALOGW("Zip: unable to allocate space for file to %" PRId64 ": %s",
static_cast<int64_t>(declared_length + current_offset), strerror(errno));
return kIoError;
}
}
#endif // defined(__linux__)
result = TEMP_FAILURE_RETRY(ftruncate(fd, declared_length + current_offset));
if (result == -1) {
ALOGW("Zip: unable to truncate file to %" PRId64 ": %s",
static_cast<int64_t>(declared_length + current_offset), strerror(errno));