diff options
| -rwxr-xr-x | configure | 22 | ||||
| -rw-r--r-- | gzread.c | 8 | ||||
| -rw-r--r-- | gzwrite.c | 23 | ||||
| -rw-r--r-- | zconf.h | 11 | ||||
| -rw-r--r-- | zconf.h.cmakein | 11 | ||||
| -rw-r--r-- | zconf.h.in | 11 |
6 files changed, 19 insertions, 67 deletions
| @@ -465,23 +465,8 @@ fi | |||
| 465 | 465 | ||
| 466 | echo >> configure.log | 466 | echo >> configure.log |
| 467 | 467 | ||
| 468 | # check for ssize_t | ||
| 469 | cat > $test.c <<EOF | ||
| 470 | #include <sys/types.h> | ||
| 471 | ssize_t dummy = 0; | ||
| 472 | EOF | ||
| 473 | if try $CC -c $CFLAGS $test.c; then | ||
| 474 | echo "Checking for ssize_t... Yes." | tee -a configure.log | ||
| 475 | need_ssizet=0 | ||
| 476 | else | ||
| 477 | echo "Checking for ssize_t... No." | tee -a configure.log | ||
| 478 | need_ssizet=1 | ||
| 479 | fi | ||
| 480 | |||
| 481 | echo >> configure.log | ||
| 482 | |||
| 483 | # find the size_t integer type, if needed | 468 | # find the size_t integer type, if needed |
| 484 | if test $need_sizet -eq 1 -o $need_ssizet -eq 1; then | 469 | if test $need_sizet -eq 1; then |
| 485 | cat > $test.c <<EOF | 470 | cat > $test.c <<EOF |
| 486 | long long dummy = 0; | 471 | long long dummy = 0; |
| 487 | EOF | 472 | EOF |
| @@ -521,11 +506,6 @@ if test $need_sizet -eq 1; then | |||
| 521 | SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}" | 506 | SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}" |
| 522 | fi | 507 | fi |
| 523 | 508 | ||
| 524 | if test $need_ssizet -eq 1; then | ||
| 525 | CFLAGS="${CFLAGS} -DNO_SSIZE_T=${sizet}" | ||
| 526 | SFLAGS="${SFLAGS} -DNO_SSIZE_T=${sizet}" | ||
| 527 | fi | ||
| 528 | |||
| 529 | echo >> configure.log | 509 | echo >> configure.log |
| 530 | 510 | ||
| 531 | # check for large file support, and if none, check for fseeko() | 511 | # check for large file support, and if none, check for fseeko() |
| @@ -24,11 +24,15 @@ local int gz_load(state, buf, len, have) | |||
| 24 | unsigned len; | 24 | unsigned len; |
| 25 | unsigned *have; | 25 | unsigned *have; |
| 26 | { | 26 | { |
| 27 | z_ssize_t ret; | 27 | int ret; |
| 28 | unsigned get, max = ((unsigned)-1 >> 2) + 1; | ||
| 28 | 29 | ||
| 29 | *have = 0; | 30 | *have = 0; |
| 30 | do { | 31 | do { |
| 31 | ret = read(state->fd, buf + *have, len - *have); | 32 | get = len - *have; |
| 33 | if (get > max) | ||
| 34 | get = max; | ||
| 35 | ret = read(state->fd, buf + *have, get); | ||
| 32 | if (ret <= 0) | 36 | if (ret <= 0) |
| 33 | break; | 37 | break; |
| 34 | *have += (unsigned)ret; | 38 | *have += (unsigned)ret; |
| @@ -74,9 +74,8 @@ local int gz_comp(state, flush) | |||
| 74 | gz_statep state; | 74 | gz_statep state; |
| 75 | int flush; | 75 | int flush; |
| 76 | { | 76 | { |
| 77 | int ret; | 77 | int ret, writ; |
| 78 | z_ssize_t got; | 78 | unsigned have, put, max = ((unsigned)-1 >> 2) + 1; |
| 79 | unsigned have; | ||
| 80 | z_streamp strm = &(state->strm); | 79 | z_streamp strm = &(state->strm); |
| 81 | 80 | ||
| 82 | /* allocate memory if this is the first time through */ | 81 | /* allocate memory if this is the first time through */ |
| @@ -86,13 +85,14 @@ local int gz_comp(state, flush) | |||
| 86 | /* write directly if requested */ | 85 | /* write directly if requested */ |
| 87 | if (state->direct) { | 86 | if (state->direct) { |
| 88 | while (strm->avail_in) { | 87 | while (strm->avail_in) { |
| 89 | got = write(state->fd, strm->next_in, strm->avail_in); | 88 | put = strm->avail_in > max ? max : strm->avail_in; |
| 90 | if (got < 0) { | 89 | writ = write(state->fd, strm->next_in, put); |
| 90 | if (writ < 0) { | ||
| 91 | gz_error(state, Z_ERRNO, zstrerror()); | 91 | gz_error(state, Z_ERRNO, zstrerror()); |
| 92 | return -1; | 92 | return -1; |
| 93 | } | 93 | } |
| 94 | strm->avail_in -= (unsigned)got; | 94 | strm->avail_in -= (unsigned)writ; |
| 95 | strm->next_in += got; | 95 | strm->next_in += writ; |
| 96 | } | 96 | } |
| 97 | return 0; | 97 | return 0; |
| 98 | } | 98 | } |
| @@ -105,13 +105,14 @@ local int gz_comp(state, flush) | |||
| 105 | if (strm->avail_out == 0 || (flush != Z_NO_FLUSH && | 105 | if (strm->avail_out == 0 || (flush != Z_NO_FLUSH && |
| 106 | (flush != Z_FINISH || ret == Z_STREAM_END))) { | 106 | (flush != Z_FINISH || ret == Z_STREAM_END))) { |
| 107 | while (strm->next_out > state->x.next) { | 107 | while (strm->next_out > state->x.next) { |
| 108 | got = write(state->fd, state->x.next, | 108 | put = strm->next_out - state->x.next > (int)max ? max : |
| 109 | (unsigned long)(strm->next_out - state->x.next)); | 109 | (unsigned)(strm->next_out - state->x.next); |
| 110 | if (got < 0) { | 110 | writ = write(state->fd, state->x.next, put); |
| 111 | if (writ < 0) { | ||
| 111 | gz_error(state, Z_ERRNO, zstrerror()); | 112 | gz_error(state, Z_ERRNO, zstrerror()); |
| 112 | return -1; | 113 | return -1; |
| 113 | } | 114 | } |
| 114 | state->x.next += got; | 115 | state->x.next += writ; |
| 115 | } | 116 | } |
| 116 | if (strm->avail_out == 0) { | 117 | if (strm->avail_out == 0) { |
| 117 | strm->avail_out = state->size; | 118 | strm->avail_out = state->size; |
| @@ -237,17 +237,6 @@ | |||
| 237 | # include <stddef.h> | 237 | # include <stddef.h> |
| 238 | typedef size_t z_size_t; | 238 | typedef size_t z_size_t; |
| 239 | # endif | 239 | # endif |
| 240 | # ifdef NO_SSIZE_T | ||
| 241 | typedef NO_SSIZE_T z_ssize_t; | ||
| 242 | # else | ||
| 243 | # include <stddef.h> | ||
| 244 | # include <sys/types.h> | ||
| 245 | # ifdef _MSC_VER | ||
| 246 | typedef intptr_t z_ssize_t; | ||
| 247 | # else | ||
| 248 | typedef ssize_t z_ssize_t; | ||
| 249 | # endif | ||
| 250 | # endif | ||
| 251 | # undef z_longlong | 240 | # undef z_longlong |
| 252 | #endif | 241 | #endif |
| 253 | 242 | ||
diff --git a/zconf.h.cmakein b/zconf.h.cmakein index 843aeb4..31619f3 100644 --- a/zconf.h.cmakein +++ b/zconf.h.cmakein | |||
| @@ -239,17 +239,6 @@ | |||
| 239 | # include <stddef.h> | 239 | # include <stddef.h> |
| 240 | typedef size_t z_size_t; | 240 | typedef size_t z_size_t; |
| 241 | # endif | 241 | # endif |
| 242 | # ifdef NO_SSIZE_T | ||
| 243 | typedef NO_SSIZE_T z_ssize_t; | ||
| 244 | # else | ||
| 245 | # include <stddef.h> | ||
| 246 | # include <sys/types.h> | ||
| 247 | # ifdef _MSC_VER | ||
| 248 | typedef intptr_t z_ssize_t; | ||
| 249 | # else | ||
| 250 | typedef ssize_t z_ssize_t; | ||
| 251 | # endif | ||
| 252 | # endif | ||
| 253 | # undef z_longlong | 242 | # undef z_longlong |
| 254 | #endif | 243 | #endif |
| 255 | 244 | ||
| @@ -237,17 +237,6 @@ | |||
| 237 | # include <stddef.h> | 237 | # include <stddef.h> |
| 238 | typedef size_t z_size_t; | 238 | typedef size_t z_size_t; |
| 239 | # endif | 239 | # endif |
| 240 | # ifdef NO_SSIZE_T | ||
| 241 | typedef NO_SSIZE_T z_ssize_t; | ||
| 242 | # else | ||
| 243 | # include <stddef.h> | ||
| 244 | # include <sys/types.h> | ||
| 245 | # ifdef _MSC_VER | ||
| 246 | typedef intptr_t z_ssize_t; | ||
| 247 | # else | ||
| 248 | typedef ssize_t z_ssize_t; | ||
| 249 | # endif | ||
| 250 | # endif | ||
| 251 | # undef z_longlong | 240 | # undef z_longlong |
| 252 | #endif | 241 | #endif |
| 253 | 242 | ||
