tools: mkimage: Fixed build warnings
[oweals/u-boot.git] / tools / mkimage.c
index 02cdb953877b9287ce55d564078a6c3fb53ffd5a..b0c02ebcf34a01cbf325ba0d38bcddfd0a86dc37 100644 (file)
@@ -4,7 +4,6 @@
  * (C) Copyright 2000-2004
  * DENX Software Engineering
  * Wolfgang Denk, wd@denx.de
- * All rights reserved.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
 
 #include "mkimage.h"
 #include <image.h>
+#include <u-boot/crc.h>
 
-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;
@@ -60,6 +59,7 @@ main (int argc, char **argv)
        struct stat sbuf;
        unsigned char *ptr;
        char *name = "";
+       int retval = 0;
 
        cmdname = *argv;
 
@@ -219,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);
        }
 
        /*
@@ -333,7 +333,8 @@ NXTARG:             ;
        hdr = (image_header_t *)ptr;
 
        checksum = crc32 (0,
-                         (const char *)(ptr + image_get_header_size ()),
+                         (const unsigned char *)(ptr +
+                               image_get_header_size ()),
                          sbuf.st_size - image_get_header_size ()
                         );
 
@@ -351,7 +352,8 @@ NXTARG:             ;
 
        image_set_name (hdr, name);
 
-       checksum = crc32 (0, (const char *)hdr, image_get_header_size ());
+       checksum = crc32 (0, (const unsigned char *)hdr,
+                                       image_get_header_size ());
 
        image_set_hcrc (hdr, checksum);
 
@@ -480,11 +482,11 @@ usage ()
        exit (EXIT_FAILURE);
 }
 
-static void
+static int
 image_verify_header (char *ptr, int image_size)
 {
        int len;
-       char *data;
+       const unsigned char *data;
        uint32_t checksum;
        image_header_t header;
        image_header_t *hdr = &header;
@@ -500,10 +502,10 @@ 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;
+       data = (const unsigned char *)hdr;
        len  = sizeof(image_header_t);
 
        checksum = be32_to_cpu(hdr->ih_hcrc);
@@ -513,18 +515,19 @@ 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);
+       data = (const unsigned char *)ptr + sizeof(image_header_t);
        len  = image_size - sizeof(image_header_t) ;
 
        if (crc32 (0, data, len) != be32_to_cpu(hdr->ih_dcrc)) {
                fprintf (stderr,
                        "%s: ERROR: \"%s\" has corrupted data!\n",
                        cmdname, imagefile);
-               exit (EXIT_FAILURE);
+               return -FDT_ERR_BADSTRUCTURE;
        }
+       return 0;
 }
 
 /**