mirror of https://github.com/madler/zlib
Replace use of memmove() with a simple copy for portability.
SunOS 4.1 doesn't have memmove(), and there may be others. memcpy() should not be used for overlapping copies, so here a simple copy is implemented that works for the particular direction of the overlap, which is where the destination precedes the source.
This commit is contained in:
parent
455adc3029
commit
d1714a57c5
11
gzread.c
11
gzread.c
|
@ -57,8 +57,13 @@ local int gz_avail(state)
|
|||
if (state->err != Z_OK && state->err != Z_BUF_ERROR)
|
||||
return -1;
|
||||
if (state->eof == 0) {
|
||||
if (strm->avail_in)
|
||||
memmove(state->in, strm->next_in, strm->avail_in);
|
||||
if (strm->avail_in) { /* copy what's there to the start */
|
||||
unsigned char *p = state->in, *q = strm->next_in;
|
||||
unsigned n = strm->avail_in;
|
||||
do {
|
||||
*p++ = *q++;
|
||||
} while (--n);
|
||||
}
|
||||
if (gz_load(state, state->in + strm->avail_in,
|
||||
state->size - strm->avail_in, &got) == -1)
|
||||
return -1;
|
||||
|
@ -340,7 +345,7 @@ int ZEXPORT gzread(file, buf, len)
|
|||
/* get more output, looking for header if required */
|
||||
if (gz_fetch(state) == -1)
|
||||
return -1;
|
||||
continue; /* no progress yet -- go back to memcpy() above */
|
||||
continue; /* no progress yet -- go back to copy above */
|
||||
/* the copy above assures that we will leave with space in the
|
||||
output buffer, allowing at least one gzungetc() to succeed */
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue