On Thursday, September 01, 2011 11:57:09 David Wagner wrote:
> +     txt_filename = argv[optind];
> +     if (strcmp(txt_filename, "-") == 0) {
> +             txt_fd = STDIN_FILENO;
> +     } else {
> +             txt_fd = open(txt_filename, O_RDONLY);
> +             if (txt_fd == -1) {
> +                     fprintf(stderr, "Can't open \"%s\": %s\n",
> +                                     txt_filename, strerror(errno));
> +                     return EXIT_FAILURE;
> +             }
> +     }
> +     /* ... and check it */
> +     ret = fstat(txt_fd, &txt_file_stat);
> +     if (ret == -1) {
> +             fprintf(stderr, "Can't stat() on \"%s\": "
> +                             "%s\n", txt_filename, strerror(errno));
> +             return EXIT_FAILURE;
> +     }
> +     /*
> +      * The right test to do is "=>" (not ">") because of the additionnal
> +      * ending \0. See below.
> +      */
> +     if (txt_file_stat.st_size >= envsize) {
> +             fprintf(stderr, "The input file is larger than the "
> +                             "envrionnment partition size\n");
> +             return EXIT_FAILURE;
> +     }
> +
> +     /* Read the raw input file and transform it */
> +     filebuf = malloc(sizeof(*envptr) * txt_file_stat.st_size);
> +     ret = read(txt_fd, filebuf, sizeof(*envptr) * txt_file_stat.st_size);
> +     if (ret != txt_file_stat.st_size) {
> +             fprintf(stderr, "Can't read the whole input file\n");
> +             return EXIT_FAILURE;
> +     }

i think the stdin logic here is broken.  when you fstat() stdin, you get back 
st_size == 0, and so you end up doing a read() on stdin of 0 bytes, and it 
writes out an empty image.

simple test:
echo foo=var | ./mkenvimage -s 0x1000 -o foo -
hexdump -C foo
<see that the env is empty>

running it through strace shows the bum read(0, "", 0) ...
-mike

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to