am 7abbbc68
: Merge "Add TEMP_FAILURE_RETRY to ZipUtils"
* commit '7abbbc680d03dd8e50a709f89b78ace6b81154b0': Add TEMP_FAILURE_RETRY to ZipUtils
This commit is contained in:
commit
125beceefd
@ -39,4 +39,27 @@ static inline ssize_t pread64(int fd, void* buf, size_t nbytes, off64_t offset)
|
|||||||
|
|
||||||
#endif /* !HAVE_OFF64_T */
|
#endif /* !HAVE_OFF64_T */
|
||||||
|
|
||||||
|
#if HAVE_PRINTF_ZD
|
||||||
|
# define ZD "%zd"
|
||||||
|
# define ZD_TYPE ssize_t
|
||||||
|
#else
|
||||||
|
# define ZD "%ld"
|
||||||
|
# define ZD_TYPE long
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TEMP_FAILURE_RETRY is defined by some, but not all, versions of
|
||||||
|
* <unistd.h>. (Alas, it is not as standard as we'd hoped!) So, if it's
|
||||||
|
* not already defined, then define it here.
|
||||||
|
*/
|
||||||
|
#ifndef TEMP_FAILURE_RETRY
|
||||||
|
/* Used to retry syscalls that can return EINTR. */
|
||||||
|
#define TEMP_FAILURE_RETRY(exp) ({ \
|
||||||
|
typeof (exp) _rc; \
|
||||||
|
do { \
|
||||||
|
_rc = (exp); \
|
||||||
|
} while (_rc == -1 && errno == EINTR); \
|
||||||
|
_rc; })
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* __LIB_UTILS_COMPAT_H */
|
#endif /* __LIB_UTILS_COMPAT_H */
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#define LOG_TAG "zipro"
|
#define LOG_TAG "zipro"
|
||||||
//#define LOG_NDEBUG 0
|
//#define LOG_NDEBUG 0
|
||||||
#include <utils/Log.h>
|
#include <utils/Log.h>
|
||||||
|
#include <utils/Compat.h>
|
||||||
#include <utils/ZipFileRO.h>
|
#include <utils/ZipFileRO.h>
|
||||||
#include <utils/misc.h>
|
#include <utils/misc.h>
|
||||||
#include <utils/threads.h>
|
#include <utils/threads.h>
|
||||||
@ -32,14 +33,6 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#if HAVE_PRINTF_ZD
|
|
||||||
# define ZD "%zd"
|
|
||||||
# define ZD_TYPE ssize_t
|
|
||||||
#else
|
|
||||||
# define ZD "%ld"
|
|
||||||
# define ZD_TYPE long
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We must open binary files using open(path, ... | O_BINARY) under Windows.
|
* We must open binary files using open(path, ... | O_BINARY) under Windows.
|
||||||
* Otherwise strange read errors will happen.
|
* Otherwise strange read errors will happen.
|
||||||
@ -48,21 +41,6 @@
|
|||||||
# define O_BINARY 0
|
# define O_BINARY 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* TEMP_FAILURE_RETRY is defined by some, but not all, versions of
|
|
||||||
* <unistd.h>. (Alas, it is not as standard as we'd hoped!) So, if it's
|
|
||||||
* not already defined, then define it here.
|
|
||||||
*/
|
|
||||||
#ifndef TEMP_FAILURE_RETRY
|
|
||||||
/* Used to retry syscalls that can return EINTR. */
|
|
||||||
#define TEMP_FAILURE_RETRY(exp) ({ \
|
|
||||||
typeof (exp) _rc; \
|
|
||||||
do { \
|
|
||||||
_rc = (exp); \
|
|
||||||
} while (_rc == -1 && errno == EINTR); \
|
|
||||||
_rc; })
|
|
||||||
#endif
|
|
||||||
|
|
||||||
using namespace android;
|
using namespace android;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#define LOG_TAG "ziputil"
|
#define LOG_TAG "ziputil"
|
||||||
|
|
||||||
#include <utils/Log.h>
|
#include <utils/Log.h>
|
||||||
|
#include <utils/Compat.h>
|
||||||
#include <utils/ZipUtils.h>
|
#include <utils/ZipUtils.h>
|
||||||
#include <utils/ZipFileRO.h>
|
#include <utils/ZipFileRO.h>
|
||||||
|
|
||||||
@ -98,10 +99,11 @@ using namespace android;
|
|||||||
ALOGV("+++ reading %ld bytes (%ld left)\n",
|
ALOGV("+++ reading %ld bytes (%ld left)\n",
|
||||||
getSize, compRemaining);
|
getSize, compRemaining);
|
||||||
|
|
||||||
int cc = read(fd, readBuf, getSize);
|
int cc = TEMP_FAILURE_RETRY(read(fd, readBuf, getSize));
|
||||||
if (cc != (int) getSize) {
|
if (cc < 0) {
|
||||||
ALOGD("inflate read failed (%d vs %ld)\n",
|
ALOGW("inflate read failed: %s", strerror(errno));
|
||||||
cc, getSize);
|
} else if (cc != (int) getSize) {
|
||||||
|
ALOGW("inflate read failed (%d vs %ld)", cc, getSize);
|
||||||
goto z_bail;
|
goto z_bail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user