[U-Boot] [PATCH] new tool mkenvimage: generates an env image from an arbitrary config file

Wolfgang Denk wd at denx.de
Thu Aug 25 00:12:10 CEST 2011


Dear David Wagner,

In message <1312885889-20222-1-git-send-email-david.wagner at free-electrons.com> you wrote:
> This tool takes a key=value configuration file (same as would a `printenv' show)
> and generates the corresponding environnment image, ready to be flashed.

s/nnm/nm/

> 
> Signed-off-by: David Wagner <david.wagner at free-electrons.com>
> ---
> 
> 	Hi Mike,
> 
> This 3rd version should address what you pointed out.

If this is v3, then why don't you say so in the Subject: ???


Could you please explain which usage scenarios you have in mind for
this tool?  I would probably rather just load the text file you use as
input, and run "env import -t" on it.

Checkpatch says:

total: 4 errors, 5 warnings, 228 lines checked

Please fix these.

In addition:

...
> +		default:
> +			fprintf(stderr, "Wrong option -%c\n", option);
> +			usage(argv[0]);
> +			return EXIT_FAILURE;
> +		}
> +	}
> +
> +
> +	/* Check datasize and allocate the data */

Please only one blank line in cases like this.

> +	/* envptr points to the beginning of the actual environment (after the
> +	 * crc and possible `redundant' bit */

inforrect multiline comment style.

> +	/* Open the configuration file ... */
> +	txt_filename = argv[optind];
> +	if (!txt_filename) {
> +		fprintf(stderr, "Can't strdup() the configuration filename\n");
> +		return EXIT_FAILURE;

Where is there any strdup() involved ?

> +	txt_file = fopen(txt_filename, "rb");
> +	if (!txt_file) {
> +		fprintf(stderr, "Can't open configuration file: %s\n", strerror(errno));

It would probably be very useful to also print the file name.

> +	/* ... and check it */
> +	ret = fstat(fileno(txt_file), &txt_file_stat);

Why don't you simply use mmap() ?

> +	for (i = 0 ; i < txt_file_stat.st_size ; i++)
> +		if (envptr[i] == '\n')
> +			envptr[i] = '\0';

This is actually wrong.  Envrionment variables can have embedded
newlines.

> +	/* 
> +	 * Make sure there is a final '\0' (necessary if the padding byte isn't
> +	 * 0x00 or if there wasn't a newline at the end of the configuration

You did not take this into account in your file size check above, it
seems.

> +	 * file) Also, don't add it if the configuration file size is exactly
> +	 * the size of the environnment.

The double '\0' termination is _always_ needed.

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: wd at denx.de
You can observe a lot just by watchin'.                  - Yogi Berra


More information about the U-Boot mailing list