diff --git a/tools/fit_common.c b/tools/fit_common.c index d96085eaad..9506390214 100644 --- a/tools/fit_common.c +++ b/tools/fit_common.c @@ -26,7 +26,10 @@ int fit_verify_header(unsigned char *ptr, int image_size, struct image_tool_params *params) { - return fdt_check_header(ptr); + if (fdt_check_header(ptr) != EXIT_SUCCESS || !fit_check_format(ptr)) + return EXIT_FAILURE; + + return EXIT_SUCCESS; } int fit_check_image_types(uint8_t type) diff --git a/tools/fit_common.h b/tools/fit_common.h index 71e792e3c4..9e09624f64 100644 --- a/tools/fit_common.h +++ b/tools/fit_common.h @@ -10,6 +10,14 @@ #include "mkimage.h" #include +/** + * Verify the format of FIT header pointed to by ptr + * + * @ptr: image header to be verified + * @image_size: size of while image + * @params: mkimage parameters + * @return 0 if OK, -1 on error + */ int fit_verify_header(unsigned char *ptr, int image_size, struct image_tool_params *params); diff --git a/tools/imagetool.c b/tools/imagetool.c index b3e628f612..ba1f64aa37 100644 --- a/tools/imagetool.c +++ b/tools/imagetool.c @@ -46,7 +46,7 @@ int imagetool_verify_print_header( if (retval == 0) { /* - * Print the image information if verify is + * Print the image information if verify is * successful */ if ((*curr)->print_header) { @@ -65,6 +65,38 @@ int imagetool_verify_print_header( return retval; } +int imagetool_verify_print_header_by_type( + void *ptr, + struct stat *sbuf, + struct image_type_params *tparams, + struct image_tool_params *params) +{ + int retval; + + retval = tparams->verify_header((unsigned char *)ptr, sbuf->st_size, + params); + + if (retval == 0) { + /* + * Print the image information if verify is successful + */ + if (tparams->print_header) { + if (!params->quiet) + tparams->print_header(ptr); + } else { + fprintf(stderr, + "%s: print_header undefined for %s\n", + params->cmdname, tparams->name); + } + } else { + fprintf(stderr, + "%s: verify_header failed for %s with exit code %d\n", + params->cmdname, tparams->name, retval); + } + + return retval; +} + int imagetool_save_subimage( const char *file_name, ulong file_data, diff --git a/tools/imagetool.h b/tools/imagetool.h index 71471420f9..2689a4004a 100644 --- a/tools/imagetool.h +++ b/tools/imagetool.h @@ -179,6 +179,25 @@ int imagetool_verify_print_header( struct image_type_params *tparams, struct image_tool_params *params); +/* + * imagetool_verify_print_header_by_type() - verifies the image header + * + * Verify the image_header for the image type given by tparams. + * If verification is successful, this prints the respective header. + * @ptr: pointer the the image header + * @sbuf: stat information about the file pointed to by ptr + * @tparams: image type parameters + * @params: mkimage parameters + * + * @return 0 on success, negative if input image format does not match with + * the given image type + */ +int imagetool_verify_print_header_by_type( + void *ptr, + struct stat *sbuf, + struct image_type_params *tparams, + struct image_tool_params *params); + /** * imagetool_save_subimage - store data into a file * @file_name: name of the destination file diff --git a/tools/mkimage.c b/tools/mkimage.c index ea5ed542ab..2899adff81 100644 --- a/tools/mkimage.c +++ b/tools/mkimage.c @@ -409,7 +409,7 @@ int main(int argc, char **argv) * Print the image information for matched image type * Returns the error code if not matched */ - retval = imagetool_verify_print_header(ptr, &sbuf, + retval = imagetool_verify_print_header_by_type(ptr, &sbuf, tparams, ¶ms); (void) munmap((void *)ptr, sbuf.st_size);