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
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