diff options
Diffstat (limited to 'gzread.c')
-rw-r--r-- | gzread.c | 8 |
1 files changed, 6 insertions, 2 deletions
@@ -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; |