tools: mkimage : bugfix returns correct value for list command
authorPrafulla Wadaskar <prafulla@marvell.com>
Mon, 10 Aug 2009 13:19:37 +0000 (18:49 +0530)
committerWolfgang Denk <wd@denx.de>
Thu, 10 Sep 2009 20:58:47 +0000 (22:58 +0200)
List command always return "EXIT_SUCCESS" even in case of
failure by any means.

This patch return 0 if list command is sucessful,
returns negative value reported by check_header functions

Signed-off-by: Prafulla Wadaskar <prafulla@marvell.com>
Signed-off-by: Wolfgang Denk <wd@denx.de>
tools/mkimage.c

index 7fd9fd1aeb88abb108fc0a7d042e69a723dbe176..dc2d4c5386f130f44b36dd2a4773f60c74b5e767 100644 (file)
@@ -27,7 +27,7 @@
 extern unsigned long   crc32 (unsigned long crc, const char *buf, unsigned int len);
 static void            copy_file (int, const char *, int);
 static void            usage (void);
-static void            image_verify_header (char *, int);
+static int             image_verify_header (char *, int);
 static void            fit_handle_file (void);
 
 char   *datafile;
@@ -59,6 +59,7 @@ main (int argc, char **argv)
        struct stat sbuf;
        unsigned char *ptr;
        char *name = "";
+       int retval;
 
        cmdname = *argv;
 
@@ -218,24 +219,24 @@ NXTARG:           ;
                        exit (EXIT_FAILURE);
                }
 
-               if (fdt_check_header (ptr)) {
-                       /* old-style image */
-                       image_verify_header ((char *)ptr, sbuf.st_size);
-                       image_print_contents ((image_header_t *)ptr);
-               } else {
+               if (!(retval = fdt_check_header (ptr))) {
                        /* FIT image */
                        fit_print_contents (ptr);
+               } else if (!(retval = image_verify_header ((char *)ptr,
+                                                          sbuf.st_size))) {
+                       /* old-style image */
+                       image_print_contents ((image_header_t *)ptr);
                }
 
                (void) munmap((void *)ptr, sbuf.st_size);
                (void) close (ifd);
 
-               exit (EXIT_SUCCESS);
+               exit (retval);
        } else if (fflag) {
                /* Flattened Image Tree (FIT) format  handling */
                debug ("FIT format handling\n");
                fit_handle_file ();
-               exit (EXIT_SUCCESS);
+               exit (retval);
        }
 
        /*
@@ -479,7 +480,7 @@ usage ()
        exit (EXIT_FAILURE);
 }
 
-static void
+static int
 image_verify_header (char *ptr, int image_size)
 {
        int len;
@@ -499,7 +500,7 @@ image_verify_header (char *ptr, int image_size)
                fprintf (stderr,
                        "%s: Bad Magic Number: \"%s\" is no valid image\n",
                        cmdname, imagefile);
-               exit (EXIT_FAILURE);
+               return -FDT_ERR_BADMAGIC;
        }
 
        data = (char *)hdr;
@@ -512,7 +513,7 @@ image_verify_header (char *ptr, int image_size)
                fprintf (stderr,
                        "%s: ERROR: \"%s\" has bad header checksum!\n",
                        cmdname, imagefile);
-               exit (EXIT_FAILURE);
+               return -FDT_ERR_BADSTATE;
        }
 
        data = ptr + sizeof(image_header_t);
@@ -522,8 +523,9 @@ image_verify_header (char *ptr, int image_size)
                fprintf (stderr,
                        "%s: ERROR: \"%s\" has corrupted data!\n",
                        cmdname, imagefile);
-               exit (EXIT_FAILURE);
+               return -FDT_ERR_BADSTRUCTURE;
        }
+       return 0;
 }
 
 /**