summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorKenny Root <kroot@google.com>2012-10-11 23:42:05 -0700
committerKenny Root <kroot@google.com>2012-10-12 11:37:58 -0700
commit3de9cd202948d1b8f372f901c812ef4257af5946 (patch)
tree315e80c35a1229a16697d93fe1d861cb63e799b5 /libs
parentb763d5fffa2f942a6ae3637fab17439dd32dbebc (diff)
downloadframeworks_native-3de9cd202948d1b8f372f901c812ef4257af5946.zip
frameworks_native-3de9cd202948d1b8f372f901c812ef4257af5946.tar.gz
frameworks_native-3de9cd202948d1b8f372f901c812ef4257af5946.tar.bz2
Add TEMP_FAILURE_RETRY around open and write calls
Bug: 7330849 Change-Id: I9aef3c3d3a248c3eea7ca060124ad6decaa6b4da
Diffstat (limited to 'libs')
-rw-r--r--libs/utils/ZipFileRO.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/libs/utils/ZipFileRO.cpp b/libs/utils/ZipFileRO.cpp
index cc62213..ef49c0f 100644
--- a/libs/utils/ZipFileRO.cpp
+++ b/libs/utils/ZipFileRO.cpp
@@ -140,7 +140,7 @@ status_t ZipFileRO::open(const char* zipFileName)
/*
* Open and map the specified file.
*/
- fd = ::open(zipFileName, O_RDONLY | O_BINARY);
+ fd = TEMP_FAILURE_RETRY(::open(zipFileName, O_RDONLY | O_BINARY));
if (fd < 0) {
ALOGW("Unable to open zip '%s': %s\n", zipFileName, strerror(errno));
return NAME_NOT_FOUND;
@@ -771,7 +771,7 @@ bool ZipFileRO::uncompressEntry(ZipEntryRO entry, int fd) const
ptr = (const unsigned char*) file->getDataPtr();
if (method == kCompressStored) {
- ssize_t actual = write(fd, ptr, uncompLen);
+ ssize_t actual = TEMP_FAILURE_RETRY(write(fd, ptr, uncompLen));
if (actual < 0) {
ALOGE("Write failed: %s\n", strerror(errno));
goto unmap;
@@ -920,9 +920,12 @@ bail:
(zerr == Z_STREAM_END && zstream.avail_out != sizeof(writeBuf)))
{
long writeSize = zstream.next_out - writeBuf;
- int cc = write(fd, writeBuf, writeSize);
- if (cc != (int) writeSize) {
- ALOGW("write failed in inflate (%d vs %ld)\n", cc, writeSize);
+ int cc = TEMP_FAILURE_RETRY(write(fd, writeBuf, writeSize));
+ if (cc < 0) {
+ ALOGW("write failed in inflate: %s", strerror(errno));
+ goto z_bail;
+ } else if (cc != (int) writeSize) {
+ ALOGW("write failed in inflate (%d vs %ld)", cc, writeSize);
goto z_bail;
}