Merge "Reserve space on disk using fallocate"
This commit is contained in:
commit
4d0cb5e806
1 changed files with 16 additions and 1 deletions
|
|
@ -1131,7 +1131,22 @@ int32_t ExtractEntryToFile(ZipArchiveHandle handle,
|
||||||
return kIoError;
|
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) {
|
if (result == -1) {
|
||||||
ALOGW("Zip: unable to truncate file to %" PRId64 ": %s",
|
ALOGW("Zip: unable to truncate file to %" PRId64 ": %s",
|
||||||
static_cast<int64_t>(declared_length + current_offset), strerror(errno));
|
static_cast<int64_t>(declared_length + current_offset), strerror(errno));
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue