mkenvimage: Read/Write from/to stdin/out by default or if the filename is "-"
authorDavid Wagner <david.wagner@free-electrons.com>
Fri, 13 Jan 2012 13:27:37 +0000 (13:27 +0000)
committerAnatolij Gustschin <agust@denx.de>
Tue, 27 Mar 2012 08:05:05 +0000 (10:05 +0200)
Signed-off-by: David Wagner <david.wagner@free-electrons.com>
Acked-by: Mike Frysinger <vapier@gentoo.org>
tools/mkenvimage.c

index b6879bcef7c3029f5029ac5d25bc9859c958fcc5..032dc836526b36179e0980f60ce4a3cf9ac93968 100644 (file)
@@ -171,15 +171,9 @@ int main(int argc, char **argv)
        memset(envptr, padbyte, envsize);
 
        /* Open the input file ... */
-       if (optind >= argc) {
-               fprintf(stderr, "Please specify an input filename\n");
-               return EXIT_FAILURE;
-       }
-
-       txt_filename = argv[optind];
-       if (strcmp(txt_filename, "-") == 0) {
+       if (optind >= argc || strcmp(argv[optind], "-") == 0) {
                int readbytes = 0;
-               int readlen = sizeof(*envptr) * 2048;
+               int readlen = sizeof(*envptr) * 4096;
                txt_fd = STDIN_FILENO;
 
                do {
@@ -198,6 +192,7 @@ int main(int argc, char **argv)
                } while (readbytes == readlen);
 
        } else {
+               txt_filename = argv[optind];
                txt_fd = open(txt_filename, O_RDONLY);
                if (txt_fd == -1) {
                        fprintf(stderr, "Can't open \"%s\": %s\n",
@@ -287,11 +282,16 @@ int main(int argc, char **argv)
 
        memcpy(dataptr, &targetendian_crc, sizeof(uint32_t));
 
-       bin_fd = creat(bin_filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
-       if (bin_fd == -1) {
-               fprintf(stderr, "Can't open output file \"%s\": %s\n",
-                               bin_filename, strerror(errno));
-               return EXIT_FAILURE;
+       if (!bin_filename || strcmp(bin_filename, "-") == 0) {
+               bin_fd = STDOUT_FILENO;
+       } else {
+               bin_fd = creat(bin_filename, S_IRUSR | S_IWUSR | S_IRGRP |
+                                            S_IWGRP);
+               if (bin_fd == -1) {
+                       fprintf(stderr, "Can't open output file \"%s\": %s\n",
+                                       bin_filename, strerror(errno));
+                       return EXIT_FAILURE;
+               }
        }
 
        if (write(bin_fd, dataptr, sizeof(*dataptr) * datasize) !=