diff options
| author | Christian Riesch <christian.riesch@omicron.at> | 2011-12-09 09:47:38 +0000 | 
|---|---|---|
| committer | Albert ARIBAUD <albert.u.boot@aribaud.net> | 2011-12-24 10:23:30 +0100 | 
| commit | d1be8f922eb3ca51abc200e42af0498e81d5fa23 (patch) | |
| tree | 29f352bc1e974519347dfb1619f5f2d2f6a67b5f | |
| parent | 3d2c8e6c7f886d0155f95c9ac718653b1d6e7477 (diff) | |
| download | olio-uboot-2014.01-d1be8f922eb3ca51abc200e42af0498e81d5fa23.tar.xz olio-uboot-2014.01-d1be8f922eb3ca51abc200e42af0498e81d5fa23.zip | |
mkimage: Fix variable length header support
Support for variable length images like AIS image was introduced
in commit f0662105b674a3874227316abf8536bebc9b5995. A parameter
"-s" was also introduced to prohibit copying of the image file
automatically in the main program. However, this parameter
was implemented incorrectly and the image file was copied
nevertheless.
Signed-off-by: Christian Riesch <christian.riesch@omicron.at>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Heiko Schocher <hs@denx.de>
Acked-by: Stefano Babic <sbabic@denx.de>
| -rw-r--r-- | tools/mkimage.c | 93 | 
1 files changed, 47 insertions, 46 deletions
| diff --git a/tools/mkimage.c b/tools/mkimage.c index 36e28ec92..eeb1b1066 100644 --- a/tools/mkimage.c +++ b/tools/mkimage.c @@ -383,65 +383,66 @@ NXTARG:		;  		exit (EXIT_FAILURE);  	} -	if (!params.skipcpy && -		(params.type == IH_TYPE_MULTI || -			params.type == IH_TYPE_SCRIPT)) { -		char *file = params.datafile; -		uint32_t size; +	if (!params.skipcpy) { +		if (params.type == IH_TYPE_MULTI || +		    params.type == IH_TYPE_SCRIPT) { +			char *file = params.datafile; +			uint32_t size; -		for (;;) { -			char *sep = NULL; +			for (;;) { +				char *sep = NULL; -			if (file) { -				if ((sep = strchr(file, ':')) != NULL) { -					*sep = '\0'; +				if (file) { +					if ((sep = strchr(file, ':')) != NULL) { +						*sep = '\0'; +					} + +					if (stat (file, &sbuf) < 0) { +						fprintf (stderr, "%s: Can't stat %s: %s\n", +							 params.cmdname, file, strerror(errno)); +						exit (EXIT_FAILURE); +					} +					size = cpu_to_uimage (sbuf.st_size); +				} else { +					size = 0;  				} -				if (stat (file, &sbuf) < 0) { -					fprintf (stderr, "%s: Can't stat %s: %s\n", -						params.cmdname, file, strerror(errno)); +				if (write(ifd, (char *)&size, sizeof(size)) != sizeof(size)) { +					fprintf (stderr, "%s: Write error on %s: %s\n", +						 params.cmdname, params.imagefile, +						 strerror(errno));  					exit (EXIT_FAILURE);  				} -				size = cpu_to_uimage (sbuf.st_size); -			} else { -				size = 0; -			} - -			if (write(ifd, (char *)&size, sizeof(size)) != sizeof(size)) { -				fprintf (stderr, "%s: Write error on %s: %s\n", -					params.cmdname, params.imagefile, -					strerror(errno)); -				exit (EXIT_FAILURE); -			} -			if (!file) { -				break; -			} +				if (!file) { +					break; +				} -			if (sep) { -				*sep = ':'; -				file = sep + 1; -			} else { -				file = NULL; +				if (sep) { +					*sep = ':'; +					file = sep + 1; +				} else { +					file = NULL; +				}  			} -		} -		file = params.datafile; +			file = params.datafile; -		for (;;) { -			char *sep = strchr(file, ':'); -			if (sep) { -				*sep = '\0'; -				copy_file (ifd, file, 1); -				*sep++ = ':'; -				file = sep; -			} else { -				copy_file (ifd, file, 0); -				break; +			for (;;) { +				char *sep = strchr(file, ':'); +				if (sep) { +					*sep = '\0'; +					copy_file (ifd, file, 1); +					*sep++ = ':'; +					file = sep; +				} else { +					copy_file (ifd, file, 0); +					break; +				}  			} +		} else { +			copy_file (ifd, params.datafile, 0);  		} -	} else { -		copy_file (ifd, params.datafile, 0);  	}  	/* We're a bit of paranoid */ |