From: Mark Adler Date: Sat, 18 Feb 2012 16:19:59 +0000 (-0800) Subject: Replace use of memmove() with a simple copy for portability. X-Git-Tag: upstream/1.2.8~133 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d1714a57c59173837fc3d9c027e18ad6a1b6fc52;p=platform%2Fupstream%2Fzlib.git 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. --- diff --git a/gzread.c b/gzread.c index bac5d22..88807c9 100644 --- a/gzread.c +++ b/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 */ }