echo >> configure.log
-# check for ssize_t
-cat > $test.c <<EOF
-#include <sys/types.h>
-ssize_t dummy = 0;
-EOF
-if try $CC -c $CFLAGS $test.c; then
- echo "Checking for ssize_t... Yes." | tee -a configure.log
- need_ssizet=0
-else
- echo "Checking for ssize_t... No." | tee -a configure.log
- need_ssizet=1
-fi
-
-echo >> configure.log
-
# find the size_t integer type, if needed
-if test $need_sizet -eq 1 -o $need_ssizet -eq 1; then
+if test $need_sizet -eq 1; then
cat > $test.c <<EOF
long long dummy = 0;
EOF
SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}"
fi
-if test $need_ssizet -eq 1; then
- CFLAGS="${CFLAGS} -DNO_SSIZE_T=${sizet}"
- SFLAGS="${SFLAGS} -DNO_SSIZE_T=${sizet}"
-fi
-
echo >> configure.log
# check for large file support, and if none, check for fseeko()
unsigned len;
unsigned *have;
{
- z_ssize_t ret;
+ int ret;
+ unsigned get, max = ((unsigned)-1 >> 2) + 1;
*have = 0;
do {
- ret = read(state->fd, buf + *have, len - *have);
+ get = len - *have;
+ if (get > max)
+ get = max;
+ ret = read(state->fd, buf + *have, get);
if (ret <= 0)
break;
*have += (unsigned)ret;
gz_statep state;
int flush;
{
- int ret;
- z_ssize_t got;
- unsigned have;
+ int ret, writ;
+ unsigned have, put, max = ((unsigned)-1 >> 2) + 1;
z_streamp strm = &(state->strm);
/* allocate memory if this is the first time through */
/* write directly if requested */
if (state->direct) {
while (strm->avail_in) {
- got = write(state->fd, strm->next_in, strm->avail_in);
- if (got < 0) {
+ put = strm->avail_in > max ? max : strm->avail_in;
+ writ = write(state->fd, strm->next_in, put);
+ if (writ < 0) {
gz_error(state, Z_ERRNO, zstrerror());
return -1;
}
- strm->avail_in -= (unsigned)got;
- strm->next_in += got;
+ strm->avail_in -= (unsigned)writ;
+ strm->next_in += writ;
}
return 0;
}
if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
(flush != Z_FINISH || ret == Z_STREAM_END))) {
while (strm->next_out > state->x.next) {
- got = write(state->fd, state->x.next,
- (unsigned long)(strm->next_out - state->x.next));
- if (got < 0) {
+ put = strm->next_out - state->x.next > (int)max ? max :
+ (unsigned)(strm->next_out - state->x.next);
+ writ = write(state->fd, state->x.next, put);
+ if (writ < 0) {
gz_error(state, Z_ERRNO, zstrerror());
return -1;
}
- state->x.next += got;
+ state->x.next += writ;
}
if (strm->avail_out == 0) {
strm->avail_out = state->size;