diff mbox series

[3/3] cpiohdr: Expose fill_buffer in header for external use

Message ID 20240430124316.1714467-3-Michael.Glembotzki@iris-sensing.com
State Accepted
Headers show
Series [1/3] stream_interface: Fix 16kB issue on save_stream | expand

Commit Message

Michael Glembotzki April 30, 2024, 12:43 p.m. UTC
Signed-off-by: Michael Glembotzki <Michael.Glembotzki@iris-sensing.com>
---
 core/cpio_utils.c | 19 +++++++++++++------
 include/cpiohdr.h |  1 +
 2 files changed, 14 insertions(+), 6 deletions(-)

Comments

Stefano Babic May 30, 2024, 11:24 a.m. UTC | #1
On 30.04.24 14:43, Michael Glembotzki wrote:
> Signed-off-by: Michael Glembotzki <Michael.Glembotzki@iris-sensing.com>
> ---
>   core/cpio_utils.c | 19 +++++++++++++------
>   include/cpiohdr.h |  1 +
>   2 files changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/core/cpio_utils.c b/core/cpio_utils.c
> index 87847981..00b15f03 100644
> --- a/core/cpio_utils.c
> +++ b/core/cpio_utils.c
> @@ -59,7 +59,7 @@ int get_cpiohdr(unsigned char *buf, struct filehdr *fhdr)
>   	return 0;
>   }
>
> -static int fill_buffer(int fd, unsigned char *buf, unsigned int nbytes, unsigned long *offs,
> +static int _fill_buffer(int fd, unsigned char *buf, unsigned int nbytes, unsigned long *offs,
>   	uint32_t *checksum, void *dgst)
>   {
>   	ssize_t len;
> @@ -92,6 +92,13 @@ static int fill_buffer(int fd, unsigned char *buf, unsigned int nbytes, unsigned
>   	return count;
>   }
>
> +
> +int fill_buffer(int fd, unsigned char *buf, unsigned int nbytes)
> +{
> +	unsigned long offs = 0;
> +	return _fill_buffer(fd, buf, nbytes, &offs, NULL, NULL);
> +}
> +
>   /*
>    * Read padding that could exists between the cpio trailer and the end-of-file.
>    * cpio aligns the file to 512 bytes
> @@ -235,7 +242,7 @@ static int input_step(void *state, void *buffer, size_t size)
>   	}
>   	switch (s->source) {
>   	case INPUT_FROM_FD:
> -		ret = fill_buffer(s->fdin, buffer, size, s->offs, &s->checksum, s->dgst);
> +		ret = _fill_buffer(s->fdin, buffer, size, s->offs, &s->checksum, s->dgst);
>   		if (ret < 0) {
>   			return ret;
>   		}
> @@ -669,7 +676,7 @@ static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nby
>   	}
>
>   	if (!inbuf) {
> -		ret = fill_buffer(fdin, buffer, NPAD_BYTES(*offs), offs, checksum, NULL);
> +		ret = _fill_buffer(fdin, buffer, NPAD_BYTES(*offs), offs, checksum, NULL);
>   		if (ret < 0)
>   			DEBUG("Padding bytes are not read, ignoring");
>   	}
> @@ -757,7 +764,7 @@ int copyimage(void *out, struct img_type *img, writeimage callback)
>   int extract_cpio_header(int fd, struct filehdr *fhdr, unsigned long *offset)
>   {
>   	unsigned char buf[sizeof(fhdr->filename)];
> -	if (fill_buffer(fd, buf, sizeof(struct new_ascii_header), offset, NULL, NULL) < 0)
> +	if (_fill_buffer(fd, buf, sizeof(struct new_ascii_header), offset, NULL, NULL) < 0)
>   		return -EINVAL;
>   	if (get_cpiohdr(buf, fhdr) < 0) {
>   		ERROR("CPIO Header corrupted, cannot be parsed");
> @@ -771,13 +778,13 @@ int extract_cpio_header(int fd, struct filehdr *fhdr, unsigned long *offset)
>   		return -EINVAL;
>   	}
>
> -	if (fill_buffer(fd, buf, fhdr->namesize , offset, NULL, NULL) < 0)
> +	if (_fill_buffer(fd, buf, fhdr->namesize , offset, NULL, NULL) < 0)
>   		return -EINVAL;
>   	buf[fhdr->namesize] = '\0';
>   	strlcpy(fhdr->filename, (char *)buf, sizeof(fhdr->filename));
>
>   	/* Skip filename padding, if any */
> -	if (fill_buffer(fd, buf, (4 - (*offset % 4)) % 4, offset, NULL, NULL) < 0)
> +	if (_fill_buffer(fd, buf, (4 - (*offset % 4)) % 4, offset, NULL, NULL) < 0)
>   		return -EINVAL;
>
>   	return 0;
> diff --git a/include/cpiohdr.h b/include/cpiohdr.h
> index b694de5e..18107c17 100644
> --- a/include/cpiohdr.h
> +++ b/include/cpiohdr.h
> @@ -62,3 +62,4 @@ int extract_cpio_header(int fd, struct filehdr *fhdr, unsigned long *offset);
>   int extract_img_from_cpio(int fd, unsigned long offset, struct filehdr *fdh);
>   void extract_padding(int fd);
>   bool swupdate_verify_chksum(const uint32_t chk1, struct filehdr *fhdr);
> +int fill_buffer(int fd, unsigned char *buf, unsigned int nbytes);

Reviewed-by: Stefano Babic <stefano.babic@swupdate.org>
diff mbox series

Patch

diff --git a/core/cpio_utils.c b/core/cpio_utils.c
index 87847981..00b15f03 100644
--- a/core/cpio_utils.c
+++ b/core/cpio_utils.c
@@ -59,7 +59,7 @@  int get_cpiohdr(unsigned char *buf, struct filehdr *fhdr)
 	return 0;
 }
 
-static int fill_buffer(int fd, unsigned char *buf, unsigned int nbytes, unsigned long *offs,
+static int _fill_buffer(int fd, unsigned char *buf, unsigned int nbytes, unsigned long *offs,
 	uint32_t *checksum, void *dgst)
 {
 	ssize_t len;
@@ -92,6 +92,13 @@  static int fill_buffer(int fd, unsigned char *buf, unsigned int nbytes, unsigned
 	return count;
 }
 
+
+int fill_buffer(int fd, unsigned char *buf, unsigned int nbytes)
+{
+	unsigned long offs = 0;
+	return _fill_buffer(fd, buf, nbytes, &offs, NULL, NULL);
+}
+
 /*
  * Read padding that could exists between the cpio trailer and the end-of-file.
  * cpio aligns the file to 512 bytes
@@ -235,7 +242,7 @@  static int input_step(void *state, void *buffer, size_t size)
 	}
 	switch (s->source) {
 	case INPUT_FROM_FD:
-		ret = fill_buffer(s->fdin, buffer, size, s->offs, &s->checksum, s->dgst);
+		ret = _fill_buffer(s->fdin, buffer, size, s->offs, &s->checksum, s->dgst);
 		if (ret < 0) {
 			return ret;
 		}
@@ -669,7 +676,7 @@  static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nby
 	}
 
 	if (!inbuf) {
-		ret = fill_buffer(fdin, buffer, NPAD_BYTES(*offs), offs, checksum, NULL);
+		ret = _fill_buffer(fdin, buffer, NPAD_BYTES(*offs), offs, checksum, NULL);
 		if (ret < 0)
 			DEBUG("Padding bytes are not read, ignoring");
 	}
@@ -757,7 +764,7 @@  int copyimage(void *out, struct img_type *img, writeimage callback)
 int extract_cpio_header(int fd, struct filehdr *fhdr, unsigned long *offset)
 {
 	unsigned char buf[sizeof(fhdr->filename)];
-	if (fill_buffer(fd, buf, sizeof(struct new_ascii_header), offset, NULL, NULL) < 0)
+	if (_fill_buffer(fd, buf, sizeof(struct new_ascii_header), offset, NULL, NULL) < 0)
 		return -EINVAL;
 	if (get_cpiohdr(buf, fhdr) < 0) {
 		ERROR("CPIO Header corrupted, cannot be parsed");
@@ -771,13 +778,13 @@  int extract_cpio_header(int fd, struct filehdr *fhdr, unsigned long *offset)
 		return -EINVAL;
 	}
 
-	if (fill_buffer(fd, buf, fhdr->namesize , offset, NULL, NULL) < 0)
+	if (_fill_buffer(fd, buf, fhdr->namesize , offset, NULL, NULL) < 0)
 		return -EINVAL;
 	buf[fhdr->namesize] = '\0';
 	strlcpy(fhdr->filename, (char *)buf, sizeof(fhdr->filename));
 
 	/* Skip filename padding, if any */
-	if (fill_buffer(fd, buf, (4 - (*offset % 4)) % 4, offset, NULL, NULL) < 0)
+	if (_fill_buffer(fd, buf, (4 - (*offset % 4)) % 4, offset, NULL, NULL) < 0)
 		return -EINVAL;
 
 	return 0;
diff --git a/include/cpiohdr.h b/include/cpiohdr.h
index b694de5e..18107c17 100644
--- a/include/cpiohdr.h
+++ b/include/cpiohdr.h
@@ -62,3 +62,4 @@  int extract_cpio_header(int fd, struct filehdr *fhdr, unsigned long *offset);
 int extract_img_from_cpio(int fd, unsigned long offset, struct filehdr *fdh);
 void extract_padding(int fd);
 bool swupdate_verify_chksum(const uint32_t chk1, struct filehdr *fhdr);
+int fill_buffer(int fd, unsigned char *buf, unsigned int nbytes);