diff options
Diffstat (limited to 'utils/imxtools/sbtools/sb.c')
-rw-r--r-- | utils/imxtools/sbtools/sb.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/utils/imxtools/sbtools/sb.c b/utils/imxtools/sbtools/sb.c index bea0438cca..385c5e5ded 100644 --- a/utils/imxtools/sbtools/sb.c +++ b/utils/imxtools/sbtools/sb.c | |||
@@ -646,14 +646,14 @@ static uint32_t guess_alignment(uint32_t off) | |||
646 | return a; | 646 | return a; |
647 | } | 647 | } |
648 | 648 | ||
649 | struct sb_file_t *sb_read_file(const char *filename, bool raw_mode, void *u, | 649 | struct sb_file_t *sb_read_file(const char *filename, unsigned flags, void *u, |
650 | generic_printf_t cprintf, enum sb_error_t *err) | 650 | generic_printf_t cprintf, enum sb_error_t *err) |
651 | { | 651 | { |
652 | return sb_read_file_ex(filename, 0, -1, raw_mode, u, cprintf, err); | 652 | return sb_read_file_ex(filename, 0, -1, flags, u, cprintf, err); |
653 | } | 653 | } |
654 | 654 | ||
655 | struct sb_file_t *sb_read_file_ex(const char *filename, size_t offset, size_t size, bool raw_mode, void *u, | 655 | struct sb_file_t *sb_read_file_ex(const char *filename, size_t offset, size_t size, |
656 | generic_printf_t cprintf, enum sb_error_t *err) | 656 | unsigned flags, void *u, generic_printf_t cprintf, enum sb_error_t *err) |
657 | { | 657 | { |
658 | #define fatal(e, ...) \ | 658 | #define fatal(e, ...) \ |
659 | do { if(err) *err = e; \ | 659 | do { if(err) *err = e; \ |
@@ -678,7 +678,7 @@ struct sb_file_t *sb_read_file_ex(const char *filename, size_t offset, size_t si | |||
678 | } | 678 | } |
679 | fclose(f); | 679 | fclose(f); |
680 | 680 | ||
681 | struct sb_file_t *ret = sb_read_memory(buf, read_size, raw_mode, u, cprintf, err); | 681 | struct sb_file_t *ret = sb_read_memory(buf, read_size, flags, u, cprintf, err); |
682 | free(buf); | 682 | free(buf); |
683 | return ret; | 683 | return ret; |
684 | 684 | ||
@@ -704,7 +704,7 @@ static void sb_printer(void *user, const char *fmt, ...) | |||
704 | va_end(args); | 704 | va_end(args); |
705 | } | 705 | } |
706 | 706 | ||
707 | struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, bool raw_mode, void *u, | 707 | struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, unsigned flags, void *u, |
708 | generic_printf_t cprintf, enum sb_error_t *err) | 708 | generic_printf_t cprintf, enum sb_error_t *err) |
709 | { | 709 | { |
710 | struct sb_file_t *sb_file = NULL; | 710 | struct sb_file_t *sb_file = NULL; |
@@ -935,7 +935,7 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, bool raw_mode, voi | |||
935 | } | 935 | } |
936 | 936 | ||
937 | /* sections */ | 937 | /* sections */ |
938 | if(!raw_mode) | 938 | if(!(flags & SB_RAW_MODE)) |
939 | { | 939 | { |
940 | sb_file->nr_sections = sb_header->nr_sections; | 940 | sb_file->nr_sections = sb_header->nr_sections; |
941 | sb_file->sections = xmalloc(sb_file->nr_sections * sizeof(struct sb_section_t)); | 941 | sb_file->sections = xmalloc(sb_file->nr_sections * sizeof(struct sb_section_t)); |
@@ -1132,6 +1132,14 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, bool raw_mode, voi | |||
1132 | sha_1_output(&sha_1_params, computed_sha1); | 1132 | sha_1_output(&sha_1_params, computed_sha1); |
1133 | if(memcmp(decrypted_block, computed_sha1, 20) == 0) | 1133 | if(memcmp(decrypted_block, computed_sha1, 20) == 0) |
1134 | printf(RED, " Ok\n"); | 1134 | printf(RED, " Ok\n"); |
1135 | else if(flags & SB_IGNORE_SHA1) | ||
1136 | { | ||
1137 | /* some weird images produced by some buggy tools have wrong SHA-1, | ||
1138 | * this probably gone unnoticed because the bootloader ignores the SH1-1 | ||
1139 | * anyway */ | ||
1140 | printf(RED, " Failed\n"); | ||
1141 | cprintf(u, true, GREY, "Warning: SHA-1 mismatch ignored per flags\n"); | ||
1142 | } | ||
1135 | else | 1143 | else |
1136 | { | 1144 | { |
1137 | printf(RED, " Failed\n"); | 1145 | printf(RED, " Failed\n"); |