
Dear Ricardo Ribalda Delgado,
In message 1240823996-10418-1-git-send-email-ricardo.ribalda@uam.es you wrote:
Separate gunzip in
gunzip: Find the end of the header and call zunzip. zunzip: Inflate gunzip block without header.
What is the needed for? Maybe you should provide a use case so we can see why this change makes sense.
Signed-off-by: Ricardo Ribalda Delgado ricardo.ribalda@uam.es
lib_generic/gunzip.c | 27 ++++++++++++++++++++------- 1 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/lib_generic/gunzip.c b/lib_generic/gunzip.c index 01a4031..d59a448 100644 --- a/lib_generic/gunzip.c +++ b/lib_generic/gunzip.c @@ -39,6 +39,8 @@ int gunzip(void *, int, unsigned char *, unsigned long *); void *zalloc(void *, unsigned, unsigned); void zfree(void *, void *, unsigned); +int zunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp,
int stoponerr, int offset);
void *zalloc(void *x, unsigned items, unsigned size) { @@ -59,8 +61,7 @@ void zfree(void *x, void *addr, unsigned nb)
int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp) {
- z_stream s;
- int r, i, flags;
int i, flags;
/* skip header */ i = 10;
@@ -84,6 +85,18 @@ int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp) return (-1); }
- return zunzip(dst, dstlen, src, lenp, 1, i);
+}
+/*
- Uncompress blocks compressed with zlib without headers
- */
+int zunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp,
int stoponerr, int offset)
+{
- z_stream s;
- int r;
- s.zalloc = zalloc; s.zfree = zfree;
#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) @@ -95,14 +108,14 @@ int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp) r = inflateInit2(&s, -MAX_WBITS); if (r != Z_OK) { printf ("Error: inflateInit2() returned %d\n", r);
return (-1);
}return -1;
- s.next_in = src + i;
- s.avail_in = *lenp - i;
- s.next_in = src + offset;
- s.avail_in = *lenp - offset; s.next_out = dst; s.avail_out = dstlen; r = inflate(&s, Z_FINISH);
- if (r != Z_STREAM_END) {
- if ((r != Z_STREAM_END) && (stoponerr==1)) {
Seems this is an unrelated change. Maybe this should be split out into a separate patch?
Please comment what it means.
Best regards,
Wolfgang Denk