summaryrefslogtreecommitdiff
path: root/utils/imxtools/sbtools/sb.c
diff options
context:
space:
mode:
Diffstat (limited to 'utils/imxtools/sbtools/sb.c')
-rw-r--r--utils/imxtools/sbtools/sb.c22
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
649struct sb_file_t *sb_read_file(const char *filename, bool raw_mode, void *u, 649struct 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
655struct sb_file_t *sb_read_file_ex(const char *filename, size_t offset, size_t size, bool raw_mode, void *u, 655struct 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
707struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, bool raw_mode, void *u, 707struct 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");