mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH] decompress: change length arguments to long
@ 2024-02-06  9:48 Sascha Hauer
  2024-02-06 11:16 ` Marco Felsch
  2024-02-06 15:05 ` Sascha Hauer
  0 siblings, 2 replies; 5+ messages in thread
From: Sascha Hauer @ 2024-02-06  9:48 UTC (permalink / raw)
  To: Barebox List

In order to support decompression of files > 2GiB Linux has changed
the prototypes of decompression functions from

int uncompress(unsigned char *inbuf, int len,
	       int(*fill)(void*, unsigned int),
	       int(*flush)(void*, unsigned int),
	       unsigned char *output,
	       int *pos,
	       void(*error_fn)(char *x));

to

int uncompress(unsigned char *inbuf, long len,
	       long(*fill)(void*, unsigned long),
	       long(*flush)(void*, unsigned long),
	       unsigned char *output,
	       long *pos,
	       void(*error_fn)(char *x));

Do likewise in barebox for easier code sharing with Linux.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 commands/uimage.c                |  2 +-
 common/uimage.c                  | 24 ++++++++++++------------
 include/bunzip2.h                |  8 ++++----
 include/gunzip.h                 |  8 ++++----
 include/image.h                  |  2 +-
 include/linux/decompress/unlz4.h |  8 ++++----
 include/linux/xz.h               |  8 ++++----
 include/lzo.h                    |  8 ++++----
 include/uncompress.h             |  8 ++++----
 lib/decompress_bunzip2.c         | 16 ++++++++--------
 lib/decompress_inflate.c         | 10 +++++-----
 lib/decompress_unlz4.c           | 16 ++++++++--------
 lib/decompress_unlzo.c           |  8 ++++----
 lib/decompress_unxz.c            |  8 ++++----
 lib/uncompress.c                 | 28 ++++++++++++++--------------
 15 files changed, 81 insertions(+), 81 deletions(-)

diff --git a/commands/uimage.c b/commands/uimage.c
index 588519e3f3..72b827b5b2 100644
--- a/commands/uimage.c
+++ b/commands/uimage.c
@@ -13,7 +13,7 @@
 
 static int uimage_fd;
 
-static int uimage_flush(void *buf, unsigned int len)
+static long uimage_flush(void *buf, unsigned long len)
 {
 	return write_full(uimage_fd, buf, len);
 }
diff --git a/common/uimage.c b/common/uimage.c
index 3c9a79d910..cc9e5e510a 100644
--- a/common/uimage.c
+++ b/common/uimage.c
@@ -218,23 +218,23 @@ EXPORT_SYMBOL(uimage_close);
 
 static int uimage_fd;
 
-static int uimage_fill(void *buf, unsigned int len)
+static long uimage_fill(void *buf, unsigned long len)
 {
 	return read_full(uimage_fd, buf, len);
 }
 
-static int uncompress_copy(unsigned char *inbuf_unused, int len,
-		int(*fill)(void*, unsigned int),
-		int(*flush)(void*, unsigned int),
+static int uncompress_copy(unsigned char *inbuf_unused, long len,
+		long(*fill)(void*, unsigned long),
+		long(*flush)(void*, unsigned long),
 		unsigned char *outbuf_unused,
-		int *pos,
+		long *pos,
 		void(*error_fn)(char *x))
 {
 	int ret;
 	void *buf = xmalloc(PAGE_SIZE);
 
 	while (len) {
-		int now = min(len, PAGE_SIZE);
+		int now = min_t(long, len, PAGE_SIZE);
 		ret = fill(buf, now);
 		if (ret < 0)
 			goto err;
@@ -295,17 +295,17 @@ EXPORT_SYMBOL(uimage_verify);
  * Load a uimage, flushing output to flush function
  */
 int uimage_load(struct uimage_handle *handle, unsigned int image_no,
-		int(*flush)(void*, unsigned int))
+		long(*flush)(void*, unsigned long))
 {
 	image_header_t *hdr = &handle->header;
 	struct uimage_handle_data *iha;
 	int ret;
 	loff_t off;
-	int (*uncompress_fn)(unsigned char *inbuf, int len,
-		    int(*fill)(void*, unsigned int),
-	            int(*flush)(void*, unsigned int),
+	int (*uncompress_fn)(unsigned char *inbuf, long len,
+		    long(*fill)(void*, unsigned long),
+	            long(*flush)(void*, unsigned long),
 		    unsigned char *output,
-	            int *pos,
+	            long *pos,
 		    void(*error)(char *x));
 
 	if (image_no >= handle->nb_data_entries)
@@ -336,7 +336,7 @@ static void *uimage_buf;
 static size_t uimage_size;
 static struct resource *uimage_resource;
 
-static int uimage_sdram_flush(void *buf, unsigned int len)
+static long uimage_sdram_flush(void *buf, unsigned long len)
 {
 	if (uimage_size + len > resource_size(uimage_resource)) {
 		resource_size_t start = uimage_resource->start;
diff --git a/include/bunzip2.h b/include/bunzip2.h
index 55404ff846..d9edaf3a01 100644
--- a/include/bunzip2.h
+++ b/include/bunzip2.h
@@ -2,10 +2,10 @@
 #ifndef DECOMPRESS_BUNZIP2_H
 #define DECOMPRESS_BUNZIP2_H
 
-int bunzip2(unsigned char *inbuf, int len,
-	    int(*fill)(void*, unsigned int),
-	    int(*flush)(void*, unsigned int),
+int bunzip2(unsigned char *inbuf, long len,
+	    long(*fill)(void*, unsigned long),
+	    long(*flush)(void*, unsigned long),
 	    unsigned char *output,
-	    int *pos,
+	    long *pos,
 	    void(*error)(char *x));
 #endif
diff --git a/include/gunzip.h b/include/gunzip.h
index 0a959d5eb7..d3ec31166a 100644
--- a/include/gunzip.h
+++ b/include/gunzip.h
@@ -2,10 +2,10 @@
 #ifndef GUNZIP_H
 #define GUNZIP_H
 
-int gunzip(unsigned char *inbuf, int len,
-	   int(*fill)(void*, unsigned int),
-	   int(*flush)(void*, unsigned int),
+int gunzip(unsigned char *inbuf, long len,
+	   long(*fill)(void*, unsigned long),
+	   long(*flush)(void*, unsigned long),
 	   unsigned char *output,
-	   int *pos,
+	   long *pos,
 	   void(*error_fn)(char *x));
 #endif
diff --git a/include/image.h b/include/image.h
index b593ae30ef..b4c69d9a02 100644
--- a/include/image.h
+++ b/include/image.h
@@ -300,7 +300,7 @@ struct uimage_handle *uimage_open(const char *filename);
 void uimage_close(struct uimage_handle *handle);
 int uimage_verify(struct uimage_handle *handle);
 int uimage_load(struct uimage_handle *handle, unsigned int image_no,
-		int(*flush)(void*, unsigned int));
+		long(*flush)(void*, unsigned long));
 void uimage_print_contents(struct uimage_handle *handle);
 ssize_t uimage_get_size(struct uimage_handle *handle, unsigned int image_no);
 struct resource *uimage_load_to_sdram(struct uimage_handle *handle,
diff --git a/include/linux/decompress/unlz4.h b/include/linux/decompress/unlz4.h
index 0ad189d2d9..fb6d499d1b 100644
--- a/include/linux/decompress/unlz4.h
+++ b/include/linux/decompress/unlz4.h
@@ -3,10 +3,10 @@
 #ifndef DECOMPRESS_UNLZ4_H
 #define DECOMPRESS_UNLZ4_H
 
-int decompress_unlz4(unsigned char *inbuf, int len,
-	int(*fill)(void*, unsigned int),
-	int(*flush)(void*, unsigned int),
+int decompress_unlz4(unsigned char *inbuf, long len,
+	long(*fill)(void*, unsigned long),
+	long(*flush)(void*, unsigned long),
 	unsigned char *output,
-	int *pos,
+	long *pos,
 	void(*error)(char *x));
 #endif
diff --git a/include/linux/xz.h b/include/linux/xz.h
index 77e80ce4b1..6480877f86 100644
--- a/include/linux/xz.h
+++ b/include/linux/xz.h
@@ -264,10 +264,10 @@ XZ_EXTERN void xz_crc32_init(void);
 XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc);
 #endif
 
-STATIC int decompress_unxz(unsigned char *in, int in_size,
-		     int (*fill)(void *dest, unsigned int size),
-		     int (*flush)(void *src, unsigned int size),
-		     unsigned char *out, int *in_used,
+STATIC int decompress_unxz(unsigned char *in, long in_size,
+		     long (*fill)(void *dest, unsigned long size),
+		     long (*flush)(void *src, unsigned long size),
+		     unsigned char *out, long *in_used,
 		     void (*error)(char *x));
 
 #endif
diff --git a/include/lzo.h b/include/lzo.h
index f46f38b0ed..72bac97cc7 100644
--- a/include/lzo.h
+++ b/include/lzo.h
@@ -47,10 +47,10 @@ STATIC int lzo1x_decompress_safe(const unsigned char *src, size_t src_len,
 #define LZO_E_NOT_YET_IMPLEMENTED	(-9)
 #define LZO_E_INVALID_ARGUMENT		(-10)
 
-STATIC int decompress_unlzo(u8 *input, int in_len,
-		int (*fill) (void *, unsigned int),
-		int (*flush) (void *, unsigned int),
-		u8 *output, int *posp,
+STATIC int decompress_unlzo(u8 *input, long in_len,
+		long (*fill) (void *, unsigned long),
+		long (*flush) (void *, unsigned long),
+		u8 *output, long *posp,
 		void (*error) (char *x));
 
 #endif
diff --git a/include/uncompress.h b/include/uncompress.h
index 72ba1dfda6..69ba18000e 100644
--- a/include/uncompress.h
+++ b/include/uncompress.h
@@ -2,11 +2,11 @@
 #ifndef __UNCOMPRESS_H
 #define __UNCOMPRESS_H
 
-int uncompress(unsigned char *inbuf, int len,
-	   int(*fill)(void*, unsigned int),
-	   int(*flush)(void*, unsigned int),
+int uncompress(unsigned char *inbuf, long len,
+	   long(*fill)(void*, unsigned long),
+	   long(*flush)(void*, unsigned long),
 	   unsigned char *output,
-	   int *pos,
+	   long *pos,
 	   void(*error_fn)(char *x));
 
 int uncompress_fd_to_fd(int infd, int outfd,
diff --git a/lib/decompress_bunzip2.c b/lib/decompress_bunzip2.c
index ee2862bebb..2daeb9b38c 100644
--- a/lib/decompress_bunzip2.c
+++ b/lib/decompress_bunzip2.c
@@ -89,7 +89,7 @@ struct bunzip_data {
 	/* State for interrupting output loop */
 	int writeCopies, writePos, writeRunCountdown, writeCount, writeCurrent;
 	/* I/O tracking data (file handles, buffers, positions, etc.) */
-	int (*fill)(void*, unsigned int);
+	long (*fill)(void*, unsigned long);
 	int inbufCount, inbufPos /*, outbufPos*/;
 	unsigned char *inbuf /*,*outbuf*/;
 	unsigned int inbufBitCount, inbufBits;
@@ -614,7 +614,7 @@ static int read_bunzip(struct bunzip_data *bd, char *outbuf, int len)
 	goto decode_next_byte;
 }
 
-static int nofill(void *buf, unsigned int len)
+static long nofill(void *buf, unsigned long len)
 {
 	return -1;
 }
@@ -622,8 +622,8 @@ static int nofill(void *buf, unsigned int len)
 /* Allocate the structure, read file header.  If in_fd ==-1, inbuf must contain
    a complete bunzip file (len bytes long).  If in_fd!=-1, inbuf and len are
    ignored, and data is read from file handle into temporary buffer. */
-static int start_bunzip(struct bunzip_data **bdp, void *inbuf, int len,
-			     int (*fill)(void*, unsigned int))
+static int start_bunzip(struct bunzip_data **bdp, void *inbuf, long len,
+			     long (*fill)(void*, unsigned long))
 {
 	struct bunzip_data *bd;
 	unsigned int i, j, c;
@@ -672,11 +672,11 @@ static int start_bunzip(struct bunzip_data **bdp, void *inbuf, int len,
 
 /* Example usage: decompress src_fd to dst_fd.  (Stops at end of bzip2 data,
    not end of file.) */
-int bunzip2(unsigned char *buf, int len,
-			int(*fill)(void*, unsigned int),
-			int(*flush)(void*, unsigned int),
+int bunzip2(unsigned char *buf, long len,
+			long(*fill)(void*, unsigned long),
+			long(*flush)(void*, unsigned long),
 			unsigned char *outbuf,
-			int *pos,
+			long *pos,
 			void(*error)(char *x))
 {
 	struct bunzip_data *bd;
diff --git a/lib/decompress_inflate.c b/lib/decompress_inflate.c
index 47bd3db131..507190938c 100644
--- a/lib/decompress_inflate.c
+++ b/lib/decompress_inflate.c
@@ -32,17 +32,17 @@
 
 #define GZIP_IOBUF_SIZE (16*1024)
 
-static int  nofill(void *buffer, unsigned int len)
+static long nofill(void *buffer, unsigned long len)
 {
 	return -1;
 }
 
 /* Included from initramfs et al code */
-int  gunzip(unsigned char *buf, int len,
-		       int(*fill)(void*, unsigned int),
-		       int(*flush)(void*, unsigned int),
+int  gunzip(unsigned char *buf, long len,
+		       long(*fill)(void*, unsigned long),
+		       long(*flush)(void*, unsigned long),
 		       unsigned char *out_buf,
-		       int *pos,
+		       long *pos,
 		       void(*error)(char *x)) {
 	u8 *zbuf;
 	struct z_stream_s *strm;
diff --git a/lib/decompress_unlz4.c b/lib/decompress_unlz4.c
index 2c04eac71c..a18e6591e9 100644
--- a/lib/decompress_unlz4.c
+++ b/lib/decompress_unlz4.c
@@ -38,10 +38,10 @@
 #define LZ4_DEFAULT_UNCOMPRESSED_CHUNK_SIZE (8 << 20)
 #define ARCHIVE_MAGICNUMBER 0x184C2102
 
-static inline int unlz4(u8 *input, int in_len,
-				int (*fill) (void *, unsigned int),
-				int (*flush) (void *, unsigned int),
-				u8 *output, int *posp,
+static inline int unlz4(u8 *input, long in_len,
+				long (*fill) (void *, unsigned long),
+				long (*flush) (void *, unsigned long),
+				u8 *output, long *posp,
 				void (*error) (char *x))
 {
 	int ret = -1;
@@ -180,11 +180,11 @@ static inline int unlz4(u8 *input, int in_len,
 	return ret;
 }
 
-STATIC int decompress_unlz4(unsigned char *buf, int in_len,
-			      int(*fill)(void*, unsigned int),
-			      int(*flush)(void*, unsigned int),
+STATIC int decompress_unlz4(unsigned char *buf, long in_len,
+			      long(*fill)(void*, unsigned long),
+			      long(*flush)(void*, unsigned long),
 			      unsigned char *output,
-			      int *posp,
+			      long *posp,
 			      void(*error)(char *x)
 	)
 {
diff --git a/lib/decompress_unlzo.c b/lib/decompress_unlzo.c
index ad7f977280..18168cb948 100644
--- a/lib/decompress_unlzo.c
+++ b/lib/decompress_unlzo.c
@@ -109,10 +109,10 @@ static inline int parse_header(u8 *input, int *skip, int in_len)
 	return 1;
 }
 
-int decompress_unlzo(u8 *input, int in_len,
-				int (*fill) (void *, unsigned int),
-				int (*flush) (void *, unsigned int),
-				u8 *output, int *posp,
+int decompress_unlzo(u8 *input, long in_len,
+				long (*fill) (void *, unsigned long),
+				long (*flush) (void *, unsigned long),
+				u8 *output, long *posp,
 				void (*error) (char *x))
 {
 	u8 r = 0;
diff --git a/lib/decompress_unxz.c b/lib/decompress_unxz.c
index ad6a5f20ba..7b8a9cd331 100644
--- a/lib/decompress_unxz.c
+++ b/lib/decompress_unxz.c
@@ -235,10 +235,10 @@ static void memzero(void *buf, size_t size)
  * both input and output buffers are available as a single chunk, i.e. when
  * fill() and flush() won't be used.
  */
-STATIC int decompress_unxz(unsigned char *in, int in_size,
-		     int (*fill)(void *dest, unsigned int size),
-		     int (*flush)(void *src, unsigned int size),
-		     unsigned char *out, int *in_used,
+STATIC int decompress_unxz(unsigned char *in, long in_size,
+		     long (*fill)(void *dest, unsigned long size),
+		     long (*flush)(void *src, unsigned long size),
+		     unsigned char *out, long *in_used,
 		     void (*error)(char *x))
 {
 	struct xz_buf b;
diff --git a/lib/uncompress.c b/lib/uncompress.c
index bfe042fcf8..c23988fc02 100644
--- a/lib/uncompress.c
+++ b/lib/uncompress.c
@@ -27,18 +27,18 @@
 #include <libfile.h>
 
 static void *uncompress_buf;
-static unsigned int uncompress_size;
+static unsigned long uncompress_size;
 
 void uncompress_err_stdout(char *x)
 {
 	printf("%s\n", x);
 }
 
-static int (*uncompress_fill_fn)(void*, unsigned int);
+static long (*uncompress_fill_fn)(void*, unsigned long);
 
-static int uncompress_fill(void *buf, unsigned int len)
+static long uncompress_fill(void *buf, unsigned long len)
 {
-	int total = 0;
+	long total = 0;
 
 	if (uncompress_size) {
 		int now = min(len, uncompress_size);
@@ -60,19 +60,19 @@ static int uncompress_fill(void *buf, unsigned int len)
 	return total;
 }
 
-int uncompress(unsigned char *inbuf, int len,
-	   int(*fill)(void*, unsigned int),
-	   int(*flush)(void*, unsigned int),
+int uncompress(unsigned char *inbuf, long len,
+	   long(*fill)(void*, unsigned long),
+	   long(*flush)(void*, unsigned long),
 	   unsigned char *output,
-	   int *pos,
+	   long *pos,
 	   void(*error_fn)(char *x))
 {
 	enum filetype ft;
-	int (*compfn)(unsigned char *inbuf, int len,
-            int(*fill)(void*, unsigned int),
-            int(*flush)(void*, unsigned int),
+	int (*compfn)(unsigned char *inbuf, long len,
+            long(*fill)(void*, unsigned long),
+            long(*flush)(void*, unsigned long),
             unsigned char *output,
-            int *pos,
+            long *pos,
             void(*error)(char *x));
 	int ret;
 	char *err;
@@ -141,12 +141,12 @@ int uncompress(unsigned char *inbuf, int len,
 
 static int uncompress_infd, uncompress_outfd;
 
-static int fill_fd(void *buf, unsigned int len)
+static long fill_fd(void *buf, unsigned long len)
 {
 	return read_full(uncompress_infd, buf, len);
 }
 
-static int flush_fd(void *buf, unsigned int len)
+static long flush_fd(void *buf, unsigned long len)
 {
 	return write(uncompress_outfd, buf, len);
 }
-- 
2.39.2




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] decompress: change length arguments to long
  2024-02-06  9:48 [PATCH] decompress: change length arguments to long Sascha Hauer
@ 2024-02-06 11:16 ` Marco Felsch
  2024-02-06 11:59   ` Sascha Hauer
  2024-02-06 15:05 ` Sascha Hauer
  1 sibling, 1 reply; 5+ messages in thread
From: Marco Felsch @ 2024-02-06 11:16 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: Barebox List

On 24-02-06, Sascha Hauer wrote:
> In order to support decompression of files > 2GiB Linux has changed
> the prototypes of decompression functions from
> 
> int uncompress(unsigned char *inbuf, int len,
> 	       int(*fill)(void*, unsigned int),
> 	       int(*flush)(void*, unsigned int),
> 	       unsigned char *output,
> 	       int *pos,
> 	       void(*error_fn)(char *x));
> 
> to
> 
> int uncompress(unsigned char *inbuf, long len,
> 	       long(*fill)(void*, unsigned long),
> 	       long(*flush)(void*, unsigned long),
> 	       unsigned char *output,
> 	       long *pos,
> 	       void(*error_fn)(char *x));
> 
> Do likewise in barebox for easier code sharing with Linux.

Thanks a lot.

> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> ---
>  commands/uimage.c                |  2 +-
>  common/uimage.c                  | 24 ++++++++++++------------
>  include/bunzip2.h                |  8 ++++----
>  include/gunzip.h                 |  8 ++++----
>  include/image.h                  |  2 +-
>  include/linux/decompress/unlz4.h |  8 ++++----
>  include/linux/xz.h               |  8 ++++----
>  include/lzo.h                    |  8 ++++----
>  include/uncompress.h             |  8 ++++----
>  lib/decompress_bunzip2.c         | 16 ++++++++--------
>  lib/decompress_inflate.c         | 10 +++++-----
>  lib/decompress_unlz4.c           | 16 ++++++++--------
>  lib/decompress_unlzo.c           |  8 ++++----
>  lib/decompress_unxz.c            |  8 ++++----
>  lib/uncompress.c                 | 28 ++++++++++++++--------------

I do miss the zstd here.

Regards,
  Marco

>  15 files changed, 81 insertions(+), 81 deletions(-)
> 
> diff --git a/commands/uimage.c b/commands/uimage.c
> index 588519e3f3..72b827b5b2 100644
> --- a/commands/uimage.c
> +++ b/commands/uimage.c
> @@ -13,7 +13,7 @@
>  
>  static int uimage_fd;
>  
> -static int uimage_flush(void *buf, unsigned int len)
> +static long uimage_flush(void *buf, unsigned long len)
>  {
>  	return write_full(uimage_fd, buf, len);
>  }
> diff --git a/common/uimage.c b/common/uimage.c
> index 3c9a79d910..cc9e5e510a 100644
> --- a/common/uimage.c
> +++ b/common/uimage.c
> @@ -218,23 +218,23 @@ EXPORT_SYMBOL(uimage_close);
>  
>  static int uimage_fd;
>  
> -static int uimage_fill(void *buf, unsigned int len)
> +static long uimage_fill(void *buf, unsigned long len)
>  {
>  	return read_full(uimage_fd, buf, len);
>  }
>  
> -static int uncompress_copy(unsigned char *inbuf_unused, int len,
> -		int(*fill)(void*, unsigned int),
> -		int(*flush)(void*, unsigned int),
> +static int uncompress_copy(unsigned char *inbuf_unused, long len,
> +		long(*fill)(void*, unsigned long),
> +		long(*flush)(void*, unsigned long),
>  		unsigned char *outbuf_unused,
> -		int *pos,
> +		long *pos,
>  		void(*error_fn)(char *x))
>  {
>  	int ret;
>  	void *buf = xmalloc(PAGE_SIZE);
>  
>  	while (len) {
> -		int now = min(len, PAGE_SIZE);
> +		int now = min_t(long, len, PAGE_SIZE);
>  		ret = fill(buf, now);
>  		if (ret < 0)
>  			goto err;
> @@ -295,17 +295,17 @@ EXPORT_SYMBOL(uimage_verify);
>   * Load a uimage, flushing output to flush function
>   */
>  int uimage_load(struct uimage_handle *handle, unsigned int image_no,
> -		int(*flush)(void*, unsigned int))
> +		long(*flush)(void*, unsigned long))
>  {
>  	image_header_t *hdr = &handle->header;
>  	struct uimage_handle_data *iha;
>  	int ret;
>  	loff_t off;
> -	int (*uncompress_fn)(unsigned char *inbuf, int len,
> -		    int(*fill)(void*, unsigned int),
> -	            int(*flush)(void*, unsigned int),
> +	int (*uncompress_fn)(unsigned char *inbuf, long len,
> +		    long(*fill)(void*, unsigned long),
> +	            long(*flush)(void*, unsigned long),
>  		    unsigned char *output,
> -	            int *pos,
> +	            long *pos,
>  		    void(*error)(char *x));
>  
>  	if (image_no >= handle->nb_data_entries)
> @@ -336,7 +336,7 @@ static void *uimage_buf;
>  static size_t uimage_size;
>  static struct resource *uimage_resource;
>  
> -static int uimage_sdram_flush(void *buf, unsigned int len)
> +static long uimage_sdram_flush(void *buf, unsigned long len)
>  {
>  	if (uimage_size + len > resource_size(uimage_resource)) {
>  		resource_size_t start = uimage_resource->start;
> diff --git a/include/bunzip2.h b/include/bunzip2.h
> index 55404ff846..d9edaf3a01 100644
> --- a/include/bunzip2.h
> +++ b/include/bunzip2.h
> @@ -2,10 +2,10 @@
>  #ifndef DECOMPRESS_BUNZIP2_H
>  #define DECOMPRESS_BUNZIP2_H
>  
> -int bunzip2(unsigned char *inbuf, int len,
> -	    int(*fill)(void*, unsigned int),
> -	    int(*flush)(void*, unsigned int),
> +int bunzip2(unsigned char *inbuf, long len,
> +	    long(*fill)(void*, unsigned long),
> +	    long(*flush)(void*, unsigned long),
>  	    unsigned char *output,
> -	    int *pos,
> +	    long *pos,
>  	    void(*error)(char *x));
>  #endif
> diff --git a/include/gunzip.h b/include/gunzip.h
> index 0a959d5eb7..d3ec31166a 100644
> --- a/include/gunzip.h
> +++ b/include/gunzip.h
> @@ -2,10 +2,10 @@
>  #ifndef GUNZIP_H
>  #define GUNZIP_H
>  
> -int gunzip(unsigned char *inbuf, int len,
> -	   int(*fill)(void*, unsigned int),
> -	   int(*flush)(void*, unsigned int),
> +int gunzip(unsigned char *inbuf, long len,
> +	   long(*fill)(void*, unsigned long),
> +	   long(*flush)(void*, unsigned long),
>  	   unsigned char *output,
> -	   int *pos,
> +	   long *pos,
>  	   void(*error_fn)(char *x));
>  #endif
> diff --git a/include/image.h b/include/image.h
> index b593ae30ef..b4c69d9a02 100644
> --- a/include/image.h
> +++ b/include/image.h
> @@ -300,7 +300,7 @@ struct uimage_handle *uimage_open(const char *filename);
>  void uimage_close(struct uimage_handle *handle);
>  int uimage_verify(struct uimage_handle *handle);
>  int uimage_load(struct uimage_handle *handle, unsigned int image_no,
> -		int(*flush)(void*, unsigned int));
> +		long(*flush)(void*, unsigned long));
>  void uimage_print_contents(struct uimage_handle *handle);
>  ssize_t uimage_get_size(struct uimage_handle *handle, unsigned int image_no);
>  struct resource *uimage_load_to_sdram(struct uimage_handle *handle,
> diff --git a/include/linux/decompress/unlz4.h b/include/linux/decompress/unlz4.h
> index 0ad189d2d9..fb6d499d1b 100644
> --- a/include/linux/decompress/unlz4.h
> +++ b/include/linux/decompress/unlz4.h
> @@ -3,10 +3,10 @@
>  #ifndef DECOMPRESS_UNLZ4_H
>  #define DECOMPRESS_UNLZ4_H
>  
> -int decompress_unlz4(unsigned char *inbuf, int len,
> -	int(*fill)(void*, unsigned int),
> -	int(*flush)(void*, unsigned int),
> +int decompress_unlz4(unsigned char *inbuf, long len,
> +	long(*fill)(void*, unsigned long),
> +	long(*flush)(void*, unsigned long),
>  	unsigned char *output,
> -	int *pos,
> +	long *pos,
>  	void(*error)(char *x));
>  #endif
> diff --git a/include/linux/xz.h b/include/linux/xz.h
> index 77e80ce4b1..6480877f86 100644
> --- a/include/linux/xz.h
> +++ b/include/linux/xz.h
> @@ -264,10 +264,10 @@ XZ_EXTERN void xz_crc32_init(void);
>  XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc);
>  #endif
>  
> -STATIC int decompress_unxz(unsigned char *in, int in_size,
> -		     int (*fill)(void *dest, unsigned int size),
> -		     int (*flush)(void *src, unsigned int size),
> -		     unsigned char *out, int *in_used,
> +STATIC int decompress_unxz(unsigned char *in, long in_size,
> +		     long (*fill)(void *dest, unsigned long size),
> +		     long (*flush)(void *src, unsigned long size),
> +		     unsigned char *out, long *in_used,
>  		     void (*error)(char *x));
>  
>  #endif
> diff --git a/include/lzo.h b/include/lzo.h
> index f46f38b0ed..72bac97cc7 100644
> --- a/include/lzo.h
> +++ b/include/lzo.h
> @@ -47,10 +47,10 @@ STATIC int lzo1x_decompress_safe(const unsigned char *src, size_t src_len,
>  #define LZO_E_NOT_YET_IMPLEMENTED	(-9)
>  #define LZO_E_INVALID_ARGUMENT		(-10)
>  
> -STATIC int decompress_unlzo(u8 *input, int in_len,
> -		int (*fill) (void *, unsigned int),
> -		int (*flush) (void *, unsigned int),
> -		u8 *output, int *posp,
> +STATIC int decompress_unlzo(u8 *input, long in_len,
> +		long (*fill) (void *, unsigned long),
> +		long (*flush) (void *, unsigned long),
> +		u8 *output, long *posp,
>  		void (*error) (char *x));
>  
>  #endif
> diff --git a/include/uncompress.h b/include/uncompress.h
> index 72ba1dfda6..69ba18000e 100644
> --- a/include/uncompress.h
> +++ b/include/uncompress.h
> @@ -2,11 +2,11 @@
>  #ifndef __UNCOMPRESS_H
>  #define __UNCOMPRESS_H
>  
> -int uncompress(unsigned char *inbuf, int len,
> -	   int(*fill)(void*, unsigned int),
> -	   int(*flush)(void*, unsigned int),
> +int uncompress(unsigned char *inbuf, long len,
> +	   long(*fill)(void*, unsigned long),
> +	   long(*flush)(void*, unsigned long),
>  	   unsigned char *output,
> -	   int *pos,
> +	   long *pos,
>  	   void(*error_fn)(char *x));
>  
>  int uncompress_fd_to_fd(int infd, int outfd,
> diff --git a/lib/decompress_bunzip2.c b/lib/decompress_bunzip2.c
> index ee2862bebb..2daeb9b38c 100644
> --- a/lib/decompress_bunzip2.c
> +++ b/lib/decompress_bunzip2.c
> @@ -89,7 +89,7 @@ struct bunzip_data {
>  	/* State for interrupting output loop */
>  	int writeCopies, writePos, writeRunCountdown, writeCount, writeCurrent;
>  	/* I/O tracking data (file handles, buffers, positions, etc.) */
> -	int (*fill)(void*, unsigned int);
> +	long (*fill)(void*, unsigned long);
>  	int inbufCount, inbufPos /*, outbufPos*/;
>  	unsigned char *inbuf /*,*outbuf*/;
>  	unsigned int inbufBitCount, inbufBits;
> @@ -614,7 +614,7 @@ static int read_bunzip(struct bunzip_data *bd, char *outbuf, int len)
>  	goto decode_next_byte;
>  }
>  
> -static int nofill(void *buf, unsigned int len)
> +static long nofill(void *buf, unsigned long len)
>  {
>  	return -1;
>  }
> @@ -622,8 +622,8 @@ static int nofill(void *buf, unsigned int len)
>  /* Allocate the structure, read file header.  If in_fd ==-1, inbuf must contain
>     a complete bunzip file (len bytes long).  If in_fd!=-1, inbuf and len are
>     ignored, and data is read from file handle into temporary buffer. */
> -static int start_bunzip(struct bunzip_data **bdp, void *inbuf, int len,
> -			     int (*fill)(void*, unsigned int))
> +static int start_bunzip(struct bunzip_data **bdp, void *inbuf, long len,
> +			     long (*fill)(void*, unsigned long))
>  {
>  	struct bunzip_data *bd;
>  	unsigned int i, j, c;
> @@ -672,11 +672,11 @@ static int start_bunzip(struct bunzip_data **bdp, void *inbuf, int len,
>  
>  /* Example usage: decompress src_fd to dst_fd.  (Stops at end of bzip2 data,
>     not end of file.) */
> -int bunzip2(unsigned char *buf, int len,
> -			int(*fill)(void*, unsigned int),
> -			int(*flush)(void*, unsigned int),
> +int bunzip2(unsigned char *buf, long len,
> +			long(*fill)(void*, unsigned long),
> +			long(*flush)(void*, unsigned long),
>  			unsigned char *outbuf,
> -			int *pos,
> +			long *pos,
>  			void(*error)(char *x))
>  {
>  	struct bunzip_data *bd;
> diff --git a/lib/decompress_inflate.c b/lib/decompress_inflate.c
> index 47bd3db131..507190938c 100644
> --- a/lib/decompress_inflate.c
> +++ b/lib/decompress_inflate.c
> @@ -32,17 +32,17 @@
>  
>  #define GZIP_IOBUF_SIZE (16*1024)
>  
> -static int  nofill(void *buffer, unsigned int len)
> +static long nofill(void *buffer, unsigned long len)
>  {
>  	return -1;
>  }
>  
>  /* Included from initramfs et al code */
> -int  gunzip(unsigned char *buf, int len,
> -		       int(*fill)(void*, unsigned int),
> -		       int(*flush)(void*, unsigned int),
> +int  gunzip(unsigned char *buf, long len,
> +		       long(*fill)(void*, unsigned long),
> +		       long(*flush)(void*, unsigned long),
>  		       unsigned char *out_buf,
> -		       int *pos,
> +		       long *pos,
>  		       void(*error)(char *x)) {
>  	u8 *zbuf;
>  	struct z_stream_s *strm;
> diff --git a/lib/decompress_unlz4.c b/lib/decompress_unlz4.c
> index 2c04eac71c..a18e6591e9 100644
> --- a/lib/decompress_unlz4.c
> +++ b/lib/decompress_unlz4.c
> @@ -38,10 +38,10 @@
>  #define LZ4_DEFAULT_UNCOMPRESSED_CHUNK_SIZE (8 << 20)
>  #define ARCHIVE_MAGICNUMBER 0x184C2102
>  
> -static inline int unlz4(u8 *input, int in_len,
> -				int (*fill) (void *, unsigned int),
> -				int (*flush) (void *, unsigned int),
> -				u8 *output, int *posp,
> +static inline int unlz4(u8 *input, long in_len,
> +				long (*fill) (void *, unsigned long),
> +				long (*flush) (void *, unsigned long),
> +				u8 *output, long *posp,
>  				void (*error) (char *x))
>  {
>  	int ret = -1;
> @@ -180,11 +180,11 @@ static inline int unlz4(u8 *input, int in_len,
>  	return ret;
>  }
>  
> -STATIC int decompress_unlz4(unsigned char *buf, int in_len,
> -			      int(*fill)(void*, unsigned int),
> -			      int(*flush)(void*, unsigned int),
> +STATIC int decompress_unlz4(unsigned char *buf, long in_len,
> +			      long(*fill)(void*, unsigned long),
> +			      long(*flush)(void*, unsigned long),
>  			      unsigned char *output,
> -			      int *posp,
> +			      long *posp,
>  			      void(*error)(char *x)
>  	)
>  {
> diff --git a/lib/decompress_unlzo.c b/lib/decompress_unlzo.c
> index ad7f977280..18168cb948 100644
> --- a/lib/decompress_unlzo.c
> +++ b/lib/decompress_unlzo.c
> @@ -109,10 +109,10 @@ static inline int parse_header(u8 *input, int *skip, int in_len)
>  	return 1;
>  }
>  
> -int decompress_unlzo(u8 *input, int in_len,
> -				int (*fill) (void *, unsigned int),
> -				int (*flush) (void *, unsigned int),
> -				u8 *output, int *posp,
> +int decompress_unlzo(u8 *input, long in_len,
> +				long (*fill) (void *, unsigned long),
> +				long (*flush) (void *, unsigned long),
> +				u8 *output, long *posp,
>  				void (*error) (char *x))
>  {
>  	u8 r = 0;
> diff --git a/lib/decompress_unxz.c b/lib/decompress_unxz.c
> index ad6a5f20ba..7b8a9cd331 100644
> --- a/lib/decompress_unxz.c
> +++ b/lib/decompress_unxz.c
> @@ -235,10 +235,10 @@ static void memzero(void *buf, size_t size)
>   * both input and output buffers are available as a single chunk, i.e. when
>   * fill() and flush() won't be used.
>   */
> -STATIC int decompress_unxz(unsigned char *in, int in_size,
> -		     int (*fill)(void *dest, unsigned int size),
> -		     int (*flush)(void *src, unsigned int size),
> -		     unsigned char *out, int *in_used,
> +STATIC int decompress_unxz(unsigned char *in, long in_size,
> +		     long (*fill)(void *dest, unsigned long size),
> +		     long (*flush)(void *src, unsigned long size),
> +		     unsigned char *out, long *in_used,
>  		     void (*error)(char *x))
>  {
>  	struct xz_buf b;
> diff --git a/lib/uncompress.c b/lib/uncompress.c
> index bfe042fcf8..c23988fc02 100644
> --- a/lib/uncompress.c
> +++ b/lib/uncompress.c
> @@ -27,18 +27,18 @@
>  #include <libfile.h>
>  
>  static void *uncompress_buf;
> -static unsigned int uncompress_size;
> +static unsigned long uncompress_size;
>  
>  void uncompress_err_stdout(char *x)
>  {
>  	printf("%s\n", x);
>  }
>  
> -static int (*uncompress_fill_fn)(void*, unsigned int);
> +static long (*uncompress_fill_fn)(void*, unsigned long);
>  
> -static int uncompress_fill(void *buf, unsigned int len)
> +static long uncompress_fill(void *buf, unsigned long len)
>  {
> -	int total = 0;
> +	long total = 0;
>  
>  	if (uncompress_size) {
>  		int now = min(len, uncompress_size);
> @@ -60,19 +60,19 @@ static int uncompress_fill(void *buf, unsigned int len)
>  	return total;
>  }
>  
> -int uncompress(unsigned char *inbuf, int len,
> -	   int(*fill)(void*, unsigned int),
> -	   int(*flush)(void*, unsigned int),
> +int uncompress(unsigned char *inbuf, long len,
> +	   long(*fill)(void*, unsigned long),
> +	   long(*flush)(void*, unsigned long),
>  	   unsigned char *output,
> -	   int *pos,
> +	   long *pos,
>  	   void(*error_fn)(char *x))
>  {
>  	enum filetype ft;
> -	int (*compfn)(unsigned char *inbuf, int len,
> -            int(*fill)(void*, unsigned int),
> -            int(*flush)(void*, unsigned int),
> +	int (*compfn)(unsigned char *inbuf, long len,
> +            long(*fill)(void*, unsigned long),
> +            long(*flush)(void*, unsigned long),
>              unsigned char *output,
> -            int *pos,
> +            long *pos,
>              void(*error)(char *x));
>  	int ret;
>  	char *err;
> @@ -141,12 +141,12 @@ int uncompress(unsigned char *inbuf, int len,
>  
>  static int uncompress_infd, uncompress_outfd;
>  
> -static int fill_fd(void *buf, unsigned int len)
> +static long fill_fd(void *buf, unsigned long len)
>  {
>  	return read_full(uncompress_infd, buf, len);
>  }
>  
> -static int flush_fd(void *buf, unsigned int len)
> +static long flush_fd(void *buf, unsigned long len)
>  {
>  	return write(uncompress_outfd, buf, len);
>  }
> -- 
> 2.39.2
> 
> 
> 



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] decompress: change length arguments to long
  2024-02-06 11:16 ` Marco Felsch
@ 2024-02-06 11:59   ` Sascha Hauer
  2024-02-06 12:09     ` Marco Felsch
  0 siblings, 1 reply; 5+ messages in thread
From: Sascha Hauer @ 2024-02-06 11:59 UTC (permalink / raw)
  To: Marco Felsch; +Cc: Barebox List

On Tue, Feb 06, 2024 at 12:16:28PM +0100, Marco Felsch wrote:
> On 24-02-06, Sascha Hauer wrote:
> > In order to support decompression of files > 2GiB Linux has changed
> > the prototypes of decompression functions from
> > 
> > int uncompress(unsigned char *inbuf, int len,
> > 	       int(*fill)(void*, unsigned int),
> > 	       int(*flush)(void*, unsigned int),
> > 	       unsigned char *output,
> > 	       int *pos,
> > 	       void(*error_fn)(char *x));
> > 
> > to
> > 
> > int uncompress(unsigned char *inbuf, long len,
> > 	       long(*fill)(void*, unsigned long),
> > 	       long(*flush)(void*, unsigned long),
> > 	       unsigned char *output,
> > 	       long *pos,
> > 	       void(*error_fn)(char *x));
> > 
> > Do likewise in barebox for easier code sharing with Linux.
> 
> Thanks a lot.
> 
> > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> > ---
> >  commands/uimage.c                |  2 +-
> >  common/uimage.c                  | 24 ++++++++++++------------
> >  include/bunzip2.h                |  8 ++++----
> >  include/gunzip.h                 |  8 ++++----
> >  include/image.h                  |  2 +-
> >  include/linux/decompress/unlz4.h |  8 ++++----
> >  include/linux/xz.h               |  8 ++++----
> >  include/lzo.h                    |  8 ++++----
> >  include/uncompress.h             |  8 ++++----
> >  lib/decompress_bunzip2.c         | 16 ++++++++--------
> >  lib/decompress_inflate.c         | 10 +++++-----
> >  lib/decompress_unlz4.c           | 16 ++++++++--------
> >  lib/decompress_unlzo.c           |  8 ++++----
> >  lib/decompress_unxz.c            |  8 ++++----
> >  lib/uncompress.c                 | 28 ++++++++++++++--------------
> 
> I do miss the zstd here.

This patch is supposed to go before the zstd patch so that we can add
zstd support with the correct prototypes. I have a patch for that
already, should have sent it.

Sascha

> 
> Regards,
>   Marco
> 
> >  15 files changed, 81 insertions(+), 81 deletions(-)
> > 
> > diff --git a/commands/uimage.c b/commands/uimage.c
> > index 588519e3f3..72b827b5b2 100644
> > --- a/commands/uimage.c
> > +++ b/commands/uimage.c
> > @@ -13,7 +13,7 @@
> >  
> >  static int uimage_fd;
> >  
> > -static int uimage_flush(void *buf, unsigned int len)
> > +static long uimage_flush(void *buf, unsigned long len)
> >  {
> >  	return write_full(uimage_fd, buf, len);
> >  }
> > diff --git a/common/uimage.c b/common/uimage.c
> > index 3c9a79d910..cc9e5e510a 100644
> > --- a/common/uimage.c
> > +++ b/common/uimage.c
> > @@ -218,23 +218,23 @@ EXPORT_SYMBOL(uimage_close);
> >  
> >  static int uimage_fd;
> >  
> > -static int uimage_fill(void *buf, unsigned int len)
> > +static long uimage_fill(void *buf, unsigned long len)
> >  {
> >  	return read_full(uimage_fd, buf, len);
> >  }
> >  
> > -static int uncompress_copy(unsigned char *inbuf_unused, int len,
> > -		int(*fill)(void*, unsigned int),
> > -		int(*flush)(void*, unsigned int),
> > +static int uncompress_copy(unsigned char *inbuf_unused, long len,
> > +		long(*fill)(void*, unsigned long),
> > +		long(*flush)(void*, unsigned long),
> >  		unsigned char *outbuf_unused,
> > -		int *pos,
> > +		long *pos,
> >  		void(*error_fn)(char *x))
> >  {
> >  	int ret;
> >  	void *buf = xmalloc(PAGE_SIZE);
> >  
> >  	while (len) {
> > -		int now = min(len, PAGE_SIZE);
> > +		int now = min_t(long, len, PAGE_SIZE);
> >  		ret = fill(buf, now);
> >  		if (ret < 0)
> >  			goto err;
> > @@ -295,17 +295,17 @@ EXPORT_SYMBOL(uimage_verify);
> >   * Load a uimage, flushing output to flush function
> >   */
> >  int uimage_load(struct uimage_handle *handle, unsigned int image_no,
> > -		int(*flush)(void*, unsigned int))
> > +		long(*flush)(void*, unsigned long))
> >  {
> >  	image_header_t *hdr = &handle->header;
> >  	struct uimage_handle_data *iha;
> >  	int ret;
> >  	loff_t off;
> > -	int (*uncompress_fn)(unsigned char *inbuf, int len,
> > -		    int(*fill)(void*, unsigned int),
> > -	            int(*flush)(void*, unsigned int),
> > +	int (*uncompress_fn)(unsigned char *inbuf, long len,
> > +		    long(*fill)(void*, unsigned long),
> > +	            long(*flush)(void*, unsigned long),
> >  		    unsigned char *output,
> > -	            int *pos,
> > +	            long *pos,
> >  		    void(*error)(char *x));
> >  
> >  	if (image_no >= handle->nb_data_entries)
> > @@ -336,7 +336,7 @@ static void *uimage_buf;
> >  static size_t uimage_size;
> >  static struct resource *uimage_resource;
> >  
> > -static int uimage_sdram_flush(void *buf, unsigned int len)
> > +static long uimage_sdram_flush(void *buf, unsigned long len)
> >  {
> >  	if (uimage_size + len > resource_size(uimage_resource)) {
> >  		resource_size_t start = uimage_resource->start;
> > diff --git a/include/bunzip2.h b/include/bunzip2.h
> > index 55404ff846..d9edaf3a01 100644
> > --- a/include/bunzip2.h
> > +++ b/include/bunzip2.h
> > @@ -2,10 +2,10 @@
> >  #ifndef DECOMPRESS_BUNZIP2_H
> >  #define DECOMPRESS_BUNZIP2_H
> >  
> > -int bunzip2(unsigned char *inbuf, int len,
> > -	    int(*fill)(void*, unsigned int),
> > -	    int(*flush)(void*, unsigned int),
> > +int bunzip2(unsigned char *inbuf, long len,
> > +	    long(*fill)(void*, unsigned long),
> > +	    long(*flush)(void*, unsigned long),
> >  	    unsigned char *output,
> > -	    int *pos,
> > +	    long *pos,
> >  	    void(*error)(char *x));
> >  #endif
> > diff --git a/include/gunzip.h b/include/gunzip.h
> > index 0a959d5eb7..d3ec31166a 100644
> > --- a/include/gunzip.h
> > +++ b/include/gunzip.h
> > @@ -2,10 +2,10 @@
> >  #ifndef GUNZIP_H
> >  #define GUNZIP_H
> >  
> > -int gunzip(unsigned char *inbuf, int len,
> > -	   int(*fill)(void*, unsigned int),
> > -	   int(*flush)(void*, unsigned int),
> > +int gunzip(unsigned char *inbuf, long len,
> > +	   long(*fill)(void*, unsigned long),
> > +	   long(*flush)(void*, unsigned long),
> >  	   unsigned char *output,
> > -	   int *pos,
> > +	   long *pos,
> >  	   void(*error_fn)(char *x));
> >  #endif
> > diff --git a/include/image.h b/include/image.h
> > index b593ae30ef..b4c69d9a02 100644
> > --- a/include/image.h
> > +++ b/include/image.h
> > @@ -300,7 +300,7 @@ struct uimage_handle *uimage_open(const char *filename);
> >  void uimage_close(struct uimage_handle *handle);
> >  int uimage_verify(struct uimage_handle *handle);
> >  int uimage_load(struct uimage_handle *handle, unsigned int image_no,
> > -		int(*flush)(void*, unsigned int));
> > +		long(*flush)(void*, unsigned long));
> >  void uimage_print_contents(struct uimage_handle *handle);
> >  ssize_t uimage_get_size(struct uimage_handle *handle, unsigned int image_no);
> >  struct resource *uimage_load_to_sdram(struct uimage_handle *handle,
> > diff --git a/include/linux/decompress/unlz4.h b/include/linux/decompress/unlz4.h
> > index 0ad189d2d9..fb6d499d1b 100644
> > --- a/include/linux/decompress/unlz4.h
> > +++ b/include/linux/decompress/unlz4.h
> > @@ -3,10 +3,10 @@
> >  #ifndef DECOMPRESS_UNLZ4_H
> >  #define DECOMPRESS_UNLZ4_H
> >  
> > -int decompress_unlz4(unsigned char *inbuf, int len,
> > -	int(*fill)(void*, unsigned int),
> > -	int(*flush)(void*, unsigned int),
> > +int decompress_unlz4(unsigned char *inbuf, long len,
> > +	long(*fill)(void*, unsigned long),
> > +	long(*flush)(void*, unsigned long),
> >  	unsigned char *output,
> > -	int *pos,
> > +	long *pos,
> >  	void(*error)(char *x));
> >  #endif
> > diff --git a/include/linux/xz.h b/include/linux/xz.h
> > index 77e80ce4b1..6480877f86 100644
> > --- a/include/linux/xz.h
> > +++ b/include/linux/xz.h
> > @@ -264,10 +264,10 @@ XZ_EXTERN void xz_crc32_init(void);
> >  XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc);
> >  #endif
> >  
> > -STATIC int decompress_unxz(unsigned char *in, int in_size,
> > -		     int (*fill)(void *dest, unsigned int size),
> > -		     int (*flush)(void *src, unsigned int size),
> > -		     unsigned char *out, int *in_used,
> > +STATIC int decompress_unxz(unsigned char *in, long in_size,
> > +		     long (*fill)(void *dest, unsigned long size),
> > +		     long (*flush)(void *src, unsigned long size),
> > +		     unsigned char *out, long *in_used,
> >  		     void (*error)(char *x));
> >  
> >  #endif
> > diff --git a/include/lzo.h b/include/lzo.h
> > index f46f38b0ed..72bac97cc7 100644
> > --- a/include/lzo.h
> > +++ b/include/lzo.h
> > @@ -47,10 +47,10 @@ STATIC int lzo1x_decompress_safe(const unsigned char *src, size_t src_len,
> >  #define LZO_E_NOT_YET_IMPLEMENTED	(-9)
> >  #define LZO_E_INVALID_ARGUMENT		(-10)
> >  
> > -STATIC int decompress_unlzo(u8 *input, int in_len,
> > -		int (*fill) (void *, unsigned int),
> > -		int (*flush) (void *, unsigned int),
> > -		u8 *output, int *posp,
> > +STATIC int decompress_unlzo(u8 *input, long in_len,
> > +		long (*fill) (void *, unsigned long),
> > +		long (*flush) (void *, unsigned long),
> > +		u8 *output, long *posp,
> >  		void (*error) (char *x));
> >  
> >  #endif
> > diff --git a/include/uncompress.h b/include/uncompress.h
> > index 72ba1dfda6..69ba18000e 100644
> > --- a/include/uncompress.h
> > +++ b/include/uncompress.h
> > @@ -2,11 +2,11 @@
> >  #ifndef __UNCOMPRESS_H
> >  #define __UNCOMPRESS_H
> >  
> > -int uncompress(unsigned char *inbuf, int len,
> > -	   int(*fill)(void*, unsigned int),
> > -	   int(*flush)(void*, unsigned int),
> > +int uncompress(unsigned char *inbuf, long len,
> > +	   long(*fill)(void*, unsigned long),
> > +	   long(*flush)(void*, unsigned long),
> >  	   unsigned char *output,
> > -	   int *pos,
> > +	   long *pos,
> >  	   void(*error_fn)(char *x));
> >  
> >  int uncompress_fd_to_fd(int infd, int outfd,
> > diff --git a/lib/decompress_bunzip2.c b/lib/decompress_bunzip2.c
> > index ee2862bebb..2daeb9b38c 100644
> > --- a/lib/decompress_bunzip2.c
> > +++ b/lib/decompress_bunzip2.c
> > @@ -89,7 +89,7 @@ struct bunzip_data {
> >  	/* State for interrupting output loop */
> >  	int writeCopies, writePos, writeRunCountdown, writeCount, writeCurrent;
> >  	/* I/O tracking data (file handles, buffers, positions, etc.) */
> > -	int (*fill)(void*, unsigned int);
> > +	long (*fill)(void*, unsigned long);
> >  	int inbufCount, inbufPos /*, outbufPos*/;
> >  	unsigned char *inbuf /*,*outbuf*/;
> >  	unsigned int inbufBitCount, inbufBits;
> > @@ -614,7 +614,7 @@ static int read_bunzip(struct bunzip_data *bd, char *outbuf, int len)
> >  	goto decode_next_byte;
> >  }
> >  
> > -static int nofill(void *buf, unsigned int len)
> > +static long nofill(void *buf, unsigned long len)
> >  {
> >  	return -1;
> >  }
> > @@ -622,8 +622,8 @@ static int nofill(void *buf, unsigned int len)
> >  /* Allocate the structure, read file header.  If in_fd ==-1, inbuf must contain
> >     a complete bunzip file (len bytes long).  If in_fd!=-1, inbuf and len are
> >     ignored, and data is read from file handle into temporary buffer. */
> > -static int start_bunzip(struct bunzip_data **bdp, void *inbuf, int len,
> > -			     int (*fill)(void*, unsigned int))
> > +static int start_bunzip(struct bunzip_data **bdp, void *inbuf, long len,
> > +			     long (*fill)(void*, unsigned long))
> >  {
> >  	struct bunzip_data *bd;
> >  	unsigned int i, j, c;
> > @@ -672,11 +672,11 @@ static int start_bunzip(struct bunzip_data **bdp, void *inbuf, int len,
> >  
> >  /* Example usage: decompress src_fd to dst_fd.  (Stops at end of bzip2 data,
> >     not end of file.) */
> > -int bunzip2(unsigned char *buf, int len,
> > -			int(*fill)(void*, unsigned int),
> > -			int(*flush)(void*, unsigned int),
> > +int bunzip2(unsigned char *buf, long len,
> > +			long(*fill)(void*, unsigned long),
> > +			long(*flush)(void*, unsigned long),
> >  			unsigned char *outbuf,
> > -			int *pos,
> > +			long *pos,
> >  			void(*error)(char *x))
> >  {
> >  	struct bunzip_data *bd;
> > diff --git a/lib/decompress_inflate.c b/lib/decompress_inflate.c
> > index 47bd3db131..507190938c 100644
> > --- a/lib/decompress_inflate.c
> > +++ b/lib/decompress_inflate.c
> > @@ -32,17 +32,17 @@
> >  
> >  #define GZIP_IOBUF_SIZE (16*1024)
> >  
> > -static int  nofill(void *buffer, unsigned int len)
> > +static long nofill(void *buffer, unsigned long len)
> >  {
> >  	return -1;
> >  }
> >  
> >  /* Included from initramfs et al code */
> > -int  gunzip(unsigned char *buf, int len,
> > -		       int(*fill)(void*, unsigned int),
> > -		       int(*flush)(void*, unsigned int),
> > +int  gunzip(unsigned char *buf, long len,
> > +		       long(*fill)(void*, unsigned long),
> > +		       long(*flush)(void*, unsigned long),
> >  		       unsigned char *out_buf,
> > -		       int *pos,
> > +		       long *pos,
> >  		       void(*error)(char *x)) {
> >  	u8 *zbuf;
> >  	struct z_stream_s *strm;
> > diff --git a/lib/decompress_unlz4.c b/lib/decompress_unlz4.c
> > index 2c04eac71c..a18e6591e9 100644
> > --- a/lib/decompress_unlz4.c
> > +++ b/lib/decompress_unlz4.c
> > @@ -38,10 +38,10 @@
> >  #define LZ4_DEFAULT_UNCOMPRESSED_CHUNK_SIZE (8 << 20)
> >  #define ARCHIVE_MAGICNUMBER 0x184C2102
> >  
> > -static inline int unlz4(u8 *input, int in_len,
> > -				int (*fill) (void *, unsigned int),
> > -				int (*flush) (void *, unsigned int),
> > -				u8 *output, int *posp,
> > +static inline int unlz4(u8 *input, long in_len,
> > +				long (*fill) (void *, unsigned long),
> > +				long (*flush) (void *, unsigned long),
> > +				u8 *output, long *posp,
> >  				void (*error) (char *x))
> >  {
> >  	int ret = -1;
> > @@ -180,11 +180,11 @@ static inline int unlz4(u8 *input, int in_len,
> >  	return ret;
> >  }
> >  
> > -STATIC int decompress_unlz4(unsigned char *buf, int in_len,
> > -			      int(*fill)(void*, unsigned int),
> > -			      int(*flush)(void*, unsigned int),
> > +STATIC int decompress_unlz4(unsigned char *buf, long in_len,
> > +			      long(*fill)(void*, unsigned long),
> > +			      long(*flush)(void*, unsigned long),
> >  			      unsigned char *output,
> > -			      int *posp,
> > +			      long *posp,
> >  			      void(*error)(char *x)
> >  	)
> >  {
> > diff --git a/lib/decompress_unlzo.c b/lib/decompress_unlzo.c
> > index ad7f977280..18168cb948 100644
> > --- a/lib/decompress_unlzo.c
> > +++ b/lib/decompress_unlzo.c
> > @@ -109,10 +109,10 @@ static inline int parse_header(u8 *input, int *skip, int in_len)
> >  	return 1;
> >  }
> >  
> > -int decompress_unlzo(u8 *input, int in_len,
> > -				int (*fill) (void *, unsigned int),
> > -				int (*flush) (void *, unsigned int),
> > -				u8 *output, int *posp,
> > +int decompress_unlzo(u8 *input, long in_len,
> > +				long (*fill) (void *, unsigned long),
> > +				long (*flush) (void *, unsigned long),
> > +				u8 *output, long *posp,
> >  				void (*error) (char *x))
> >  {
> >  	u8 r = 0;
> > diff --git a/lib/decompress_unxz.c b/lib/decompress_unxz.c
> > index ad6a5f20ba..7b8a9cd331 100644
> > --- a/lib/decompress_unxz.c
> > +++ b/lib/decompress_unxz.c
> > @@ -235,10 +235,10 @@ static void memzero(void *buf, size_t size)
> >   * both input and output buffers are available as a single chunk, i.e. when
> >   * fill() and flush() won't be used.
> >   */
> > -STATIC int decompress_unxz(unsigned char *in, int in_size,
> > -		     int (*fill)(void *dest, unsigned int size),
> > -		     int (*flush)(void *src, unsigned int size),
> > -		     unsigned char *out, int *in_used,
> > +STATIC int decompress_unxz(unsigned char *in, long in_size,
> > +		     long (*fill)(void *dest, unsigned long size),
> > +		     long (*flush)(void *src, unsigned long size),
> > +		     unsigned char *out, long *in_used,
> >  		     void (*error)(char *x))
> >  {
> >  	struct xz_buf b;
> > diff --git a/lib/uncompress.c b/lib/uncompress.c
> > index bfe042fcf8..c23988fc02 100644
> > --- a/lib/uncompress.c
> > +++ b/lib/uncompress.c
> > @@ -27,18 +27,18 @@
> >  #include <libfile.h>
> >  
> >  static void *uncompress_buf;
> > -static unsigned int uncompress_size;
> > +static unsigned long uncompress_size;
> >  
> >  void uncompress_err_stdout(char *x)
> >  {
> >  	printf("%s\n", x);
> >  }
> >  
> > -static int (*uncompress_fill_fn)(void*, unsigned int);
> > +static long (*uncompress_fill_fn)(void*, unsigned long);
> >  
> > -static int uncompress_fill(void *buf, unsigned int len)
> > +static long uncompress_fill(void *buf, unsigned long len)
> >  {
> > -	int total = 0;
> > +	long total = 0;
> >  
> >  	if (uncompress_size) {
> >  		int now = min(len, uncompress_size);
> > @@ -60,19 +60,19 @@ static int uncompress_fill(void *buf, unsigned int len)
> >  	return total;
> >  }
> >  
> > -int uncompress(unsigned char *inbuf, int len,
> > -	   int(*fill)(void*, unsigned int),
> > -	   int(*flush)(void*, unsigned int),
> > +int uncompress(unsigned char *inbuf, long len,
> > +	   long(*fill)(void*, unsigned long),
> > +	   long(*flush)(void*, unsigned long),
> >  	   unsigned char *output,
> > -	   int *pos,
> > +	   long *pos,
> >  	   void(*error_fn)(char *x))
> >  {
> >  	enum filetype ft;
> > -	int (*compfn)(unsigned char *inbuf, int len,
> > -            int(*fill)(void*, unsigned int),
> > -            int(*flush)(void*, unsigned int),
> > +	int (*compfn)(unsigned char *inbuf, long len,
> > +            long(*fill)(void*, unsigned long),
> > +            long(*flush)(void*, unsigned long),
> >              unsigned char *output,
> > -            int *pos,
> > +            long *pos,
> >              void(*error)(char *x));
> >  	int ret;
> >  	char *err;
> > @@ -141,12 +141,12 @@ int uncompress(unsigned char *inbuf, int len,
> >  
> >  static int uncompress_infd, uncompress_outfd;
> >  
> > -static int fill_fd(void *buf, unsigned int len)
> > +static long fill_fd(void *buf, unsigned long len)
> >  {
> >  	return read_full(uncompress_infd, buf, len);
> >  }
> >  
> > -static int flush_fd(void *buf, unsigned int len)
> > +static long flush_fd(void *buf, unsigned long len)
> >  {
> >  	return write(uncompress_outfd, buf, len);
> >  }
> > -- 
> > 2.39.2
> > 
> > 
> > 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] decompress: change length arguments to long
  2024-02-06 11:59   ` Sascha Hauer
@ 2024-02-06 12:09     ` Marco Felsch
  0 siblings, 0 replies; 5+ messages in thread
From: Marco Felsch @ 2024-02-06 12:09 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: Barebox List

On 24-02-06, Sascha Hauer wrote:
> On Tue, Feb 06, 2024 at 12:16:28PM +0100, Marco Felsch wrote:
> > On 24-02-06, Sascha Hauer wrote:
> > > In order to support decompression of files > 2GiB Linux has changed
> > > the prototypes of decompression functions from
> > > 
> > > int uncompress(unsigned char *inbuf, int len,
> > > 	       int(*fill)(void*, unsigned int),
> > > 	       int(*flush)(void*, unsigned int),
> > > 	       unsigned char *output,
> > > 	       int *pos,
> > > 	       void(*error_fn)(char *x));
> > > 
> > > to
> > > 
> > > int uncompress(unsigned char *inbuf, long len,
> > > 	       long(*fill)(void*, unsigned long),
> > > 	       long(*flush)(void*, unsigned long),
> > > 	       unsigned char *output,
> > > 	       long *pos,
> > > 	       void(*error_fn)(char *x));
> > > 
> > > Do likewise in barebox for easier code sharing with Linux.
> > 
> > Thanks a lot.
> > 
> > > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> > > ---
> > >  commands/uimage.c                |  2 +-
> > >  common/uimage.c                  | 24 ++++++++++++------------
> > >  include/bunzip2.h                |  8 ++++----
> > >  include/gunzip.h                 |  8 ++++----
> > >  include/image.h                  |  2 +-
> > >  include/linux/decompress/unlz4.h |  8 ++++----
> > >  include/linux/xz.h               |  8 ++++----
> > >  include/lzo.h                    |  8 ++++----
> > >  include/uncompress.h             |  8 ++++----
> > >  lib/decompress_bunzip2.c         | 16 ++++++++--------
> > >  lib/decompress_inflate.c         | 10 +++++-----
> > >  lib/decompress_unlz4.c           | 16 ++++++++--------
> > >  lib/decompress_unlzo.c           |  8 ++++----
> > >  lib/decompress_unxz.c            |  8 ++++----
> > >  lib/uncompress.c                 | 28 ++++++++++++++--------------
> > 
> > I do miss the zstd here.
> 
> This patch is supposed to go before the zstd patch so that we can add
> zstd support with the correct prototypes. I have a patch for that
> already, should have sent it.

Ah okay, makes sense I just thought that you applied the zstd patches
already :)

In that case: Reviewed-by: Marco Felsch <m.felsch@pengutronix.de>

> 
> Sascha
> 
> > 
> > Regards,
> >   Marco
> > 
> > >  15 files changed, 81 insertions(+), 81 deletions(-)
> > > 
> > > diff --git a/commands/uimage.c b/commands/uimage.c
> > > index 588519e3f3..72b827b5b2 100644
> > > --- a/commands/uimage.c
> > > +++ b/commands/uimage.c
> > > @@ -13,7 +13,7 @@
> > >  
> > >  static int uimage_fd;
> > >  
> > > -static int uimage_flush(void *buf, unsigned int len)
> > > +static long uimage_flush(void *buf, unsigned long len)
> > >  {
> > >  	return write_full(uimage_fd, buf, len);
> > >  }
> > > diff --git a/common/uimage.c b/common/uimage.c
> > > index 3c9a79d910..cc9e5e510a 100644
> > > --- a/common/uimage.c
> > > +++ b/common/uimage.c
> > > @@ -218,23 +218,23 @@ EXPORT_SYMBOL(uimage_close);
> > >  
> > >  static int uimage_fd;
> > >  
> > > -static int uimage_fill(void *buf, unsigned int len)
> > > +static long uimage_fill(void *buf, unsigned long len)
> > >  {
> > >  	return read_full(uimage_fd, buf, len);
> > >  }
> > >  
> > > -static int uncompress_copy(unsigned char *inbuf_unused, int len,
> > > -		int(*fill)(void*, unsigned int),
> > > -		int(*flush)(void*, unsigned int),
> > > +static int uncompress_copy(unsigned char *inbuf_unused, long len,
> > > +		long(*fill)(void*, unsigned long),
> > > +		long(*flush)(void*, unsigned long),
> > >  		unsigned char *outbuf_unused,
> > > -		int *pos,
> > > +		long *pos,
> > >  		void(*error_fn)(char *x))
> > >  {
> > >  	int ret;
> > >  	void *buf = xmalloc(PAGE_SIZE);
> > >  
> > >  	while (len) {
> > > -		int now = min(len, PAGE_SIZE);
> > > +		int now = min_t(long, len, PAGE_SIZE);
> > >  		ret = fill(buf, now);
> > >  		if (ret < 0)
> > >  			goto err;
> > > @@ -295,17 +295,17 @@ EXPORT_SYMBOL(uimage_verify);
> > >   * Load a uimage, flushing output to flush function
> > >   */
> > >  int uimage_load(struct uimage_handle *handle, unsigned int image_no,
> > > -		int(*flush)(void*, unsigned int))
> > > +		long(*flush)(void*, unsigned long))
> > >  {
> > >  	image_header_t *hdr = &handle->header;
> > >  	struct uimage_handle_data *iha;
> > >  	int ret;
> > >  	loff_t off;
> > > -	int (*uncompress_fn)(unsigned char *inbuf, int len,
> > > -		    int(*fill)(void*, unsigned int),
> > > -	            int(*flush)(void*, unsigned int),
> > > +	int (*uncompress_fn)(unsigned char *inbuf, long len,
> > > +		    long(*fill)(void*, unsigned long),
> > > +	            long(*flush)(void*, unsigned long),
> > >  		    unsigned char *output,
> > > -	            int *pos,
> > > +	            long *pos,
> > >  		    void(*error)(char *x));
> > >  
> > >  	if (image_no >= handle->nb_data_entries)
> > > @@ -336,7 +336,7 @@ static void *uimage_buf;
> > >  static size_t uimage_size;
> > >  static struct resource *uimage_resource;
> > >  
> > > -static int uimage_sdram_flush(void *buf, unsigned int len)
> > > +static long uimage_sdram_flush(void *buf, unsigned long len)
> > >  {
> > >  	if (uimage_size + len > resource_size(uimage_resource)) {
> > >  		resource_size_t start = uimage_resource->start;
> > > diff --git a/include/bunzip2.h b/include/bunzip2.h
> > > index 55404ff846..d9edaf3a01 100644
> > > --- a/include/bunzip2.h
> > > +++ b/include/bunzip2.h
> > > @@ -2,10 +2,10 @@
> > >  #ifndef DECOMPRESS_BUNZIP2_H
> > >  #define DECOMPRESS_BUNZIP2_H
> > >  
> > > -int bunzip2(unsigned char *inbuf, int len,
> > > -	    int(*fill)(void*, unsigned int),
> > > -	    int(*flush)(void*, unsigned int),
> > > +int bunzip2(unsigned char *inbuf, long len,
> > > +	    long(*fill)(void*, unsigned long),
> > > +	    long(*flush)(void*, unsigned long),
> > >  	    unsigned char *output,
> > > -	    int *pos,
> > > +	    long *pos,
> > >  	    void(*error)(char *x));
> > >  #endif
> > > diff --git a/include/gunzip.h b/include/gunzip.h
> > > index 0a959d5eb7..d3ec31166a 100644
> > > --- a/include/gunzip.h
> > > +++ b/include/gunzip.h
> > > @@ -2,10 +2,10 @@
> > >  #ifndef GUNZIP_H
> > >  #define GUNZIP_H
> > >  
> > > -int gunzip(unsigned char *inbuf, int len,
> > > -	   int(*fill)(void*, unsigned int),
> > > -	   int(*flush)(void*, unsigned int),
> > > +int gunzip(unsigned char *inbuf, long len,
> > > +	   long(*fill)(void*, unsigned long),
> > > +	   long(*flush)(void*, unsigned long),
> > >  	   unsigned char *output,
> > > -	   int *pos,
> > > +	   long *pos,
> > >  	   void(*error_fn)(char *x));
> > >  #endif
> > > diff --git a/include/image.h b/include/image.h
> > > index b593ae30ef..b4c69d9a02 100644
> > > --- a/include/image.h
> > > +++ b/include/image.h
> > > @@ -300,7 +300,7 @@ struct uimage_handle *uimage_open(const char *filename);
> > >  void uimage_close(struct uimage_handle *handle);
> > >  int uimage_verify(struct uimage_handle *handle);
> > >  int uimage_load(struct uimage_handle *handle, unsigned int image_no,
> > > -		int(*flush)(void*, unsigned int));
> > > +		long(*flush)(void*, unsigned long));
> > >  void uimage_print_contents(struct uimage_handle *handle);
> > >  ssize_t uimage_get_size(struct uimage_handle *handle, unsigned int image_no);
> > >  struct resource *uimage_load_to_sdram(struct uimage_handle *handle,
> > > diff --git a/include/linux/decompress/unlz4.h b/include/linux/decompress/unlz4.h
> > > index 0ad189d2d9..fb6d499d1b 100644
> > > --- a/include/linux/decompress/unlz4.h
> > > +++ b/include/linux/decompress/unlz4.h
> > > @@ -3,10 +3,10 @@
> > >  #ifndef DECOMPRESS_UNLZ4_H
> > >  #define DECOMPRESS_UNLZ4_H
> > >  
> > > -int decompress_unlz4(unsigned char *inbuf, int len,
> > > -	int(*fill)(void*, unsigned int),
> > > -	int(*flush)(void*, unsigned int),
> > > +int decompress_unlz4(unsigned char *inbuf, long len,
> > > +	long(*fill)(void*, unsigned long),
> > > +	long(*flush)(void*, unsigned long),
> > >  	unsigned char *output,
> > > -	int *pos,
> > > +	long *pos,
> > >  	void(*error)(char *x));
> > >  #endif
> > > diff --git a/include/linux/xz.h b/include/linux/xz.h
> > > index 77e80ce4b1..6480877f86 100644
> > > --- a/include/linux/xz.h
> > > +++ b/include/linux/xz.h
> > > @@ -264,10 +264,10 @@ XZ_EXTERN void xz_crc32_init(void);
> > >  XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc);
> > >  #endif
> > >  
> > > -STATIC int decompress_unxz(unsigned char *in, int in_size,
> > > -		     int (*fill)(void *dest, unsigned int size),
> > > -		     int (*flush)(void *src, unsigned int size),
> > > -		     unsigned char *out, int *in_used,
> > > +STATIC int decompress_unxz(unsigned char *in, long in_size,
> > > +		     long (*fill)(void *dest, unsigned long size),
> > > +		     long (*flush)(void *src, unsigned long size),
> > > +		     unsigned char *out, long *in_used,
> > >  		     void (*error)(char *x));
> > >  
> > >  #endif
> > > diff --git a/include/lzo.h b/include/lzo.h
> > > index f46f38b0ed..72bac97cc7 100644
> > > --- a/include/lzo.h
> > > +++ b/include/lzo.h
> > > @@ -47,10 +47,10 @@ STATIC int lzo1x_decompress_safe(const unsigned char *src, size_t src_len,
> > >  #define LZO_E_NOT_YET_IMPLEMENTED	(-9)
> > >  #define LZO_E_INVALID_ARGUMENT		(-10)
> > >  
> > > -STATIC int decompress_unlzo(u8 *input, int in_len,
> > > -		int (*fill) (void *, unsigned int),
> > > -		int (*flush) (void *, unsigned int),
> > > -		u8 *output, int *posp,
> > > +STATIC int decompress_unlzo(u8 *input, long in_len,
> > > +		long (*fill) (void *, unsigned long),
> > > +		long (*flush) (void *, unsigned long),
> > > +		u8 *output, long *posp,
> > >  		void (*error) (char *x));
> > >  
> > >  #endif
> > > diff --git a/include/uncompress.h b/include/uncompress.h
> > > index 72ba1dfda6..69ba18000e 100644
> > > --- a/include/uncompress.h
> > > +++ b/include/uncompress.h
> > > @@ -2,11 +2,11 @@
> > >  #ifndef __UNCOMPRESS_H
> > >  #define __UNCOMPRESS_H
> > >  
> > > -int uncompress(unsigned char *inbuf, int len,
> > > -	   int(*fill)(void*, unsigned int),
> > > -	   int(*flush)(void*, unsigned int),
> > > +int uncompress(unsigned char *inbuf, long len,
> > > +	   long(*fill)(void*, unsigned long),
> > > +	   long(*flush)(void*, unsigned long),
> > >  	   unsigned char *output,
> > > -	   int *pos,
> > > +	   long *pos,
> > >  	   void(*error_fn)(char *x));
> > >  
> > >  int uncompress_fd_to_fd(int infd, int outfd,
> > > diff --git a/lib/decompress_bunzip2.c b/lib/decompress_bunzip2.c
> > > index ee2862bebb..2daeb9b38c 100644
> > > --- a/lib/decompress_bunzip2.c
> > > +++ b/lib/decompress_bunzip2.c
> > > @@ -89,7 +89,7 @@ struct bunzip_data {
> > >  	/* State for interrupting output loop */
> > >  	int writeCopies, writePos, writeRunCountdown, writeCount, writeCurrent;
> > >  	/* I/O tracking data (file handles, buffers, positions, etc.) */
> > > -	int (*fill)(void*, unsigned int);
> > > +	long (*fill)(void*, unsigned long);
> > >  	int inbufCount, inbufPos /*, outbufPos*/;
> > >  	unsigned char *inbuf /*,*outbuf*/;
> > >  	unsigned int inbufBitCount, inbufBits;
> > > @@ -614,7 +614,7 @@ static int read_bunzip(struct bunzip_data *bd, char *outbuf, int len)
> > >  	goto decode_next_byte;
> > >  }
> > >  
> > > -static int nofill(void *buf, unsigned int len)
> > > +static long nofill(void *buf, unsigned long len)
> > >  {
> > >  	return -1;
> > >  }
> > > @@ -622,8 +622,8 @@ static int nofill(void *buf, unsigned int len)
> > >  /* Allocate the structure, read file header.  If in_fd ==-1, inbuf must contain
> > >     a complete bunzip file (len bytes long).  If in_fd!=-1, inbuf and len are
> > >     ignored, and data is read from file handle into temporary buffer. */
> > > -static int start_bunzip(struct bunzip_data **bdp, void *inbuf, int len,
> > > -			     int (*fill)(void*, unsigned int))
> > > +static int start_bunzip(struct bunzip_data **bdp, void *inbuf, long len,
> > > +			     long (*fill)(void*, unsigned long))
> > >  {
> > >  	struct bunzip_data *bd;
> > >  	unsigned int i, j, c;
> > > @@ -672,11 +672,11 @@ static int start_bunzip(struct bunzip_data **bdp, void *inbuf, int len,
> > >  
> > >  /* Example usage: decompress src_fd to dst_fd.  (Stops at end of bzip2 data,
> > >     not end of file.) */
> > > -int bunzip2(unsigned char *buf, int len,
> > > -			int(*fill)(void*, unsigned int),
> > > -			int(*flush)(void*, unsigned int),
> > > +int bunzip2(unsigned char *buf, long len,
> > > +			long(*fill)(void*, unsigned long),
> > > +			long(*flush)(void*, unsigned long),
> > >  			unsigned char *outbuf,
> > > -			int *pos,
> > > +			long *pos,
> > >  			void(*error)(char *x))
> > >  {
> > >  	struct bunzip_data *bd;
> > > diff --git a/lib/decompress_inflate.c b/lib/decompress_inflate.c
> > > index 47bd3db131..507190938c 100644
> > > --- a/lib/decompress_inflate.c
> > > +++ b/lib/decompress_inflate.c
> > > @@ -32,17 +32,17 @@
> > >  
> > >  #define GZIP_IOBUF_SIZE (16*1024)
> > >  
> > > -static int  nofill(void *buffer, unsigned int len)
> > > +static long nofill(void *buffer, unsigned long len)
> > >  {
> > >  	return -1;
> > >  }
> > >  
> > >  /* Included from initramfs et al code */
> > > -int  gunzip(unsigned char *buf, int len,
> > > -		       int(*fill)(void*, unsigned int),
> > > -		       int(*flush)(void*, unsigned int),
> > > +int  gunzip(unsigned char *buf, long len,
> > > +		       long(*fill)(void*, unsigned long),
> > > +		       long(*flush)(void*, unsigned long),
> > >  		       unsigned char *out_buf,
> > > -		       int *pos,
> > > +		       long *pos,
> > >  		       void(*error)(char *x)) {
> > >  	u8 *zbuf;
> > >  	struct z_stream_s *strm;
> > > diff --git a/lib/decompress_unlz4.c b/lib/decompress_unlz4.c
> > > index 2c04eac71c..a18e6591e9 100644
> > > --- a/lib/decompress_unlz4.c
> > > +++ b/lib/decompress_unlz4.c
> > > @@ -38,10 +38,10 @@
> > >  #define LZ4_DEFAULT_UNCOMPRESSED_CHUNK_SIZE (8 << 20)
> > >  #define ARCHIVE_MAGICNUMBER 0x184C2102
> > >  
> > > -static inline int unlz4(u8 *input, int in_len,
> > > -				int (*fill) (void *, unsigned int),
> > > -				int (*flush) (void *, unsigned int),
> > > -				u8 *output, int *posp,
> > > +static inline int unlz4(u8 *input, long in_len,
> > > +				long (*fill) (void *, unsigned long),
> > > +				long (*flush) (void *, unsigned long),
> > > +				u8 *output, long *posp,
> > >  				void (*error) (char *x))
> > >  {
> > >  	int ret = -1;
> > > @@ -180,11 +180,11 @@ static inline int unlz4(u8 *input, int in_len,
> > >  	return ret;
> > >  }
> > >  
> > > -STATIC int decompress_unlz4(unsigned char *buf, int in_len,
> > > -			      int(*fill)(void*, unsigned int),
> > > -			      int(*flush)(void*, unsigned int),
> > > +STATIC int decompress_unlz4(unsigned char *buf, long in_len,
> > > +			      long(*fill)(void*, unsigned long),
> > > +			      long(*flush)(void*, unsigned long),
> > >  			      unsigned char *output,
> > > -			      int *posp,
> > > +			      long *posp,
> > >  			      void(*error)(char *x)
> > >  	)
> > >  {
> > > diff --git a/lib/decompress_unlzo.c b/lib/decompress_unlzo.c
> > > index ad7f977280..18168cb948 100644
> > > --- a/lib/decompress_unlzo.c
> > > +++ b/lib/decompress_unlzo.c
> > > @@ -109,10 +109,10 @@ static inline int parse_header(u8 *input, int *skip, int in_len)
> > >  	return 1;
> > >  }
> > >  
> > > -int decompress_unlzo(u8 *input, int in_len,
> > > -				int (*fill) (void *, unsigned int),
> > > -				int (*flush) (void *, unsigned int),
> > > -				u8 *output, int *posp,
> > > +int decompress_unlzo(u8 *input, long in_len,
> > > +				long (*fill) (void *, unsigned long),
> > > +				long (*flush) (void *, unsigned long),
> > > +				u8 *output, long *posp,
> > >  				void (*error) (char *x))
> > >  {
> > >  	u8 r = 0;
> > > diff --git a/lib/decompress_unxz.c b/lib/decompress_unxz.c
> > > index ad6a5f20ba..7b8a9cd331 100644
> > > --- a/lib/decompress_unxz.c
> > > +++ b/lib/decompress_unxz.c
> > > @@ -235,10 +235,10 @@ static void memzero(void *buf, size_t size)
> > >   * both input and output buffers are available as a single chunk, i.e. when
> > >   * fill() and flush() won't be used.
> > >   */
> > > -STATIC int decompress_unxz(unsigned char *in, int in_size,
> > > -		     int (*fill)(void *dest, unsigned int size),
> > > -		     int (*flush)(void *src, unsigned int size),
> > > -		     unsigned char *out, int *in_used,
> > > +STATIC int decompress_unxz(unsigned char *in, long in_size,
> > > +		     long (*fill)(void *dest, unsigned long size),
> > > +		     long (*flush)(void *src, unsigned long size),
> > > +		     unsigned char *out, long *in_used,
> > >  		     void (*error)(char *x))
> > >  {
> > >  	struct xz_buf b;
> > > diff --git a/lib/uncompress.c b/lib/uncompress.c
> > > index bfe042fcf8..c23988fc02 100644
> > > --- a/lib/uncompress.c
> > > +++ b/lib/uncompress.c
> > > @@ -27,18 +27,18 @@
> > >  #include <libfile.h>
> > >  
> > >  static void *uncompress_buf;
> > > -static unsigned int uncompress_size;
> > > +static unsigned long uncompress_size;
> > >  
> > >  void uncompress_err_stdout(char *x)
> > >  {
> > >  	printf("%s\n", x);
> > >  }
> > >  
> > > -static int (*uncompress_fill_fn)(void*, unsigned int);
> > > +static long (*uncompress_fill_fn)(void*, unsigned long);
> > >  
> > > -static int uncompress_fill(void *buf, unsigned int len)
> > > +static long uncompress_fill(void *buf, unsigned long len)
> > >  {
> > > -	int total = 0;
> > > +	long total = 0;
> > >  
> > >  	if (uncompress_size) {
> > >  		int now = min(len, uncompress_size);
> > > @@ -60,19 +60,19 @@ static int uncompress_fill(void *buf, unsigned int len)
> > >  	return total;
> > >  }
> > >  
> > > -int uncompress(unsigned char *inbuf, int len,
> > > -	   int(*fill)(void*, unsigned int),
> > > -	   int(*flush)(void*, unsigned int),
> > > +int uncompress(unsigned char *inbuf, long len,
> > > +	   long(*fill)(void*, unsigned long),
> > > +	   long(*flush)(void*, unsigned long),
> > >  	   unsigned char *output,
> > > -	   int *pos,
> > > +	   long *pos,
> > >  	   void(*error_fn)(char *x))
> > >  {
> > >  	enum filetype ft;
> > > -	int (*compfn)(unsigned char *inbuf, int len,
> > > -            int(*fill)(void*, unsigned int),
> > > -            int(*flush)(void*, unsigned int),
> > > +	int (*compfn)(unsigned char *inbuf, long len,
> > > +            long(*fill)(void*, unsigned long),
> > > +            long(*flush)(void*, unsigned long),
> > >              unsigned char *output,
> > > -            int *pos,
> > > +            long *pos,
> > >              void(*error)(char *x));
> > >  	int ret;
> > >  	char *err;
> > > @@ -141,12 +141,12 @@ int uncompress(unsigned char *inbuf, int len,
> > >  
> > >  static int uncompress_infd, uncompress_outfd;
> > >  
> > > -static int fill_fd(void *buf, unsigned int len)
> > > +static long fill_fd(void *buf, unsigned long len)
> > >  {
> > >  	return read_full(uncompress_infd, buf, len);
> > >  }
> > >  
> > > -static int flush_fd(void *buf, unsigned int len)
> > > +static long flush_fd(void *buf, unsigned long len)
> > >  {
> > >  	return write(uncompress_outfd, buf, len);
> > >  }
> > > -- 
> > > 2.39.2
> > > 
> > > 
> > > 
> > 
> 
> -- 
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] decompress: change length arguments to long
  2024-02-06  9:48 [PATCH] decompress: change length arguments to long Sascha Hauer
  2024-02-06 11:16 ` Marco Felsch
@ 2024-02-06 15:05 ` Sascha Hauer
  1 sibling, 0 replies; 5+ messages in thread
From: Sascha Hauer @ 2024-02-06 15:05 UTC (permalink / raw)
  To: Barebox List, Sascha Hauer


On Tue, 06 Feb 2024 10:48:38 +0100, Sascha Hauer wrote:
> In order to support decompression of files > 2GiB Linux has changed
> the prototypes of decompression functions from
> 
> int uncompress(unsigned char *inbuf, int len,
> 	       int(*fill)(void*, unsigned int),
> 	       int(*flush)(void*, unsigned int),
> 	       unsigned char *output,
> 	       int *pos,
> 	       void(*error_fn)(char *x));
> 
> [...]

Applied, thanks!

[1/1] decompress: change length arguments to long
      https://git.pengutronix.de/cgit/barebox/commit/?id=19f44baf474d (link may not be stable)

Best regards,
-- 
Sascha Hauer <s.hauer@pengutronix.de>




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-02-06 15:05 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-06  9:48 [PATCH] decompress: change length arguments to long Sascha Hauer
2024-02-06 11:16 ` Marco Felsch
2024-02-06 11:59   ` Sascha Hauer
2024-02-06 12:09     ` Marco Felsch
2024-02-06 15:05 ` Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox