[U-Boot] [PATCH] kwbimage: Correct a long-standing warning

Simon Glass sjg at chromium.org
Sat Jan 10 18:53:51 CET 2015


tools/kwbimage.c:803:8: warning: 'headersz' may be used uninitialized in this function [-Wmaybe-uninitialized]

This problem was discussed twice previously, but neither solution has been
applied to mainline. This is another attempt at a possible solution before
the release goes out and we are stuck with it.

https://patchwork.ozlabs.org/patch/412968/
https://patchwork.ozlabs.org/patch/417410/

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 tools/kwbimage.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/tools/kwbimage.c b/tools/kwbimage.c
index c50f2e2..937b208 100644
--- a/tools/kwbimage.c
+++ b/tools/kwbimage.c
@@ -302,6 +302,7 @@ static void *image_create_v0(size_t *imagesz, struct image_tool_params *params,
 	 * Calculate the size of the header and the size of the
 	 * payload
 	 */
+	*imagesz = 0;
 	headersz  = sizeof(struct main_hdr_v0);
 
 	if (image_count_options(IMAGE_CFG_DATA) > 0) {
@@ -441,6 +442,7 @@ static void *image_create_v1(size_t *imagesz, struct image_tool_params *params,
 	 * Calculate the size of the header and the size of the
 	 * payload
 	 */
+	*imagesz = 0;
 	headersz = image_headersz_v1(params, &hasext);
 	if (headersz == 0)
 		return NULL;
@@ -737,7 +739,7 @@ static void kwbimage_set_header(void *ptr, struct stat *sbuf, int ifd,
 	if (!fcfg) {
 		fprintf(stderr, "Could not open input file %s\n",
 			params->imagename);
-		exit(EXIT_FAILURE);
+		goto err;
 	}
 
 	image_cfg = malloc(IMAGE_CFG_ELEMENT_MAX *
@@ -745,7 +747,7 @@ static void kwbimage_set_header(void *ptr, struct stat *sbuf, int ifd,
 	if (!image_cfg) {
 		fprintf(stderr, "Cannot allocate memory\n");
 		fclose(fcfg);
-		exit(EXIT_FAILURE);
+		goto err;
 	}
 
 	memset(image_cfg, 0,
@@ -756,7 +758,7 @@ static void kwbimage_set_header(void *ptr, struct stat *sbuf, int ifd,
 	fclose(fcfg);
 	if (ret) {
 		free(image_cfg);
-		exit(EXIT_FAILURE);
+		goto err;
 	}
 
 	version = image_get_version();
@@ -777,13 +779,13 @@ static void kwbimage_set_header(void *ptr, struct stat *sbuf, int ifd,
 	default:
 		fprintf(stderr, "Unsupported version %d\n", version);
 		free(image_cfg);
-		exit(EXIT_FAILURE);
+		goto err;
 	}
 
 	if (!image) {
 		fprintf(stderr, "Could not create image\n");
 		free(image_cfg);
-		exit(EXIT_FAILURE);
+		goto err;
 	}
 
 	free(image_cfg);
@@ -794,7 +796,7 @@ static void kwbimage_set_header(void *ptr, struct stat *sbuf, int ifd,
 	if (size != sizeof(uint32_t)) {
 		fprintf(stderr, "Error:%s - Checksum write %d bytes %s\n",
 			params->cmdname, size, params->imagefile);
-		exit(EXIT_FAILURE);
+		goto err;
 	}
 
 	sbuf->st_size += sizeof(uint32_t);
@@ -803,6 +805,13 @@ static void kwbimage_set_header(void *ptr, struct stat *sbuf, int ifd,
 	memcpy(ptr, image, headersz);
 
 	free(image);
+
+err:
+	/*
+	 * TODO: Adjust the struct image_type_params set_header() method to
+	 * return an error instead of calling exit() here.
+	 */
+	exit(EXIT_FAILURE);
 }
 
 static void kwbimage_print_header(const void *ptr)
-- 
2.2.0.rc0.207.ga3a616c



More information about the U-Boot mailing list