Dear Ricardo Ribalda Delgado, In message <[email protected]> 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 <[email protected]> > --- > 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 -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: [email protected] To the systems programmer, users and applications serve only to provide a test load. _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

