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

Reply via email to