summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2013-08-06 19:30:05 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2013-08-06 21:24:38 +0200
commitc0aba07f1a4221e0aee10f7fddc47dde29e5282e (patch)
tree6c19e8b1b61ebbb620efdadd01370aeb0d1ea6ec
parent97459def3c34d338d3ced9bd2b55f8902573aa19 (diff)
downloadrockbox-c0aba07f1a4221e0aee10f7fddc47dde29e5282e.tar.gz
rockbox-c0aba07f1a4221e0aee10f7fddc47dde29e5282e.zip
sbtools: fix output printing
The code used printf instead of the provided printf functions, resulting in strange output. Change-Id: I2c7c2531d8d54ecdea97e8c189d18d351320ca7d
-rw-r--r--utils/imxtools/sbtools/misc.c46
-rw-r--r--utils/imxtools/sbtools/misc.h10
-rw-r--r--utils/imxtools/sbtools/sb.c29
3 files changed, 60 insertions, 25 deletions
diff --git a/utils/imxtools/sbtools/misc.c b/utils/imxtools/sbtools/misc.c
index 71b3cb600b..58e9609909 100644
--- a/utils/imxtools/sbtools/misc.c
+++ b/utils/imxtools/sbtools/misc.c
@@ -22,6 +22,7 @@
22#include <stdio.h> 22#include <stdio.h>
23#include <time.h> 23#include <time.h>
24#include <ctype.h> 24#include <ctype.h>
25#include <stdarg.h>
25#include "misc.h" 26#include "misc.h"
26 27
27bool g_debug = false; 28bool g_debug = false;
@@ -193,6 +194,15 @@ void clear_keys()
193 g_key_array = NULL; 194 g_key_array = NULL;
194} 195}
195 196
197void misc_std_printf(void *user, const char *fmt, ...)
198{
199 (void) user;
200 va_list args;
201 va_start(args, fmt);
202 vprintf(fmt, args);
203 va_end(args);
204}
205
196bool add_keys_from_file(const char *key_file) 206bool add_keys_from_file(const char *key_file)
197{ 207{
198 int size; 208 int size;
@@ -233,7 +243,7 @@ bool add_keys_from_file(const char *key_file)
233 if(g_debug) 243 if(g_debug)
234 { 244 {
235 printf("Add key: "); 245 printf("Add key: ");
236 print_key(&k, true); 246 print_key(NULL, misc_std_printf, &k, true);
237 } 247 }
238 add_keys(&k, 1); 248 add_keys(&k, 1);
239 /* request at least one space character before next key, or end of file */ 249 /* request at least one space character before next key, or end of file */
@@ -253,45 +263,45 @@ bool add_keys_from_file(const char *key_file)
253 return true; 263 return true;
254} 264}
255 265
256void print_hex(byte *data, int len, bool newline) 266void print_hex(void *user, misc_printf_t printf, byte *data, int len, bool newline)
257{ 267{
258 for(int i = 0; i < len; i++) 268 for(int i = 0; i < len; i++)
259 printf("%02X ", data[i]); 269 printf(user, "%02X ", data[i]);
260 if(newline) 270 if(newline)
261 printf("\n"); 271 printf(user, "\n");
262} 272}
263 273
264void print_key(struct crypto_key_t *key, bool newline) 274void print_key(void *user, misc_printf_t printf, struct crypto_key_t *key, bool newline)
265{ 275{
266 switch(key->method) 276 switch(key->method)
267 { 277 {
268 case CRYPTO_KEY: 278 case CRYPTO_KEY:
269 print_hex(key->u.key, 16, false); 279 print_hex(user, printf, key->u.key, 16, false);
270 break; 280 break;
271 case CRYPTO_USBOTP: 281 case CRYPTO_USBOTP:
272 printf("USB-OTP(%04x:%04x)", key->u.vid_pid >> 16, key->u.vid_pid & 0xffff); 282 printf(user, "USB-OTP(%04x:%04x)", key->u.vid_pid >> 16, key->u.vid_pid & 0xffff);
273 break; 283 break;
274 case CRYPTO_NONE: 284 case CRYPTO_NONE:
275 printf("none"); 285 printf(user, "none");
276 break; 286 break;
277 case CRYPTO_XOR_KEY: 287 case CRYPTO_XOR_KEY:
278 print_hex(&key->u.xor_key[0].key[0], 64, false); 288 print_hex(user, printf, &key->u.xor_key[0].key[0], 64, false);
279 print_hex(&key->u.xor_key[1].key[0], 64, false); 289 print_hex(user, printf, &key->u.xor_key[1].key[0], 64, false);
280 break; 290 break;
281 default: 291 default:
282 printf("unknown"); 292 printf(user, "unknown");
283 } 293 }
284 if(newline) 294 if(newline)
285 printf("\n"); 295 printf(user, "\n");
286} 296}
287 297
288char OFF[] = { 0x1b, 0x5b, 0x31, 0x3b, '0', '0', 0x6d, '\0' }; 298const char OFF[] = { 0x1b, 0x5b, 0x31, 0x3b, '0', '0', 0x6d, '\0' };
289 299
290char GREY[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '0', 0x6d, '\0' }; 300const char GREY[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '0', 0x6d, '\0' };
291char RED[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '1', 0x6d, '\0' }; 301const char RED[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '1', 0x6d, '\0' };
292char GREEN[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '2', 0x6d, '\0' }; 302const char GREEN[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '2', 0x6d, '\0' };
293char YELLOW[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '3', 0x6d, '\0' }; 303const char YELLOW[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '3', 0x6d, '\0' };
294char BLUE[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '4', 0x6d, '\0' }; 304const char BLUE[] = { 0x1b, 0x5b, 0x31, 0x3b, '3', '4', 0x6d, '\0' };
295 305
296static bool g_color_enable = true; 306static bool g_color_enable = true;
297 307
diff --git a/utils/imxtools/sbtools/misc.h b/utils/imxtools/sbtools/misc.h
index 8429e84faf..624cd5a9c0 100644
--- a/utils/imxtools/sbtools/misc.h
+++ b/utils/imxtools/sbtools/misc.h
@@ -43,6 +43,10 @@ typedef struct crypto_key_t *key_array_t;
43int g_nr_keys; 43int g_nr_keys;
44key_array_t g_key_array; 44key_array_t g_key_array;
45 45
46typedef void (*misc_printf_t)(void *user, const char *fmt, ...);
47
48void misc_std_printf(void *user, const char *fmt, ...);
49
46void *memdup(const void *p, size_t len); 50void *memdup(const void *p, size_t len);
47void *augment_array(void *arr, size_t elem_sz, size_t cnt, void *aug, size_t aug_cnt); 51void *augment_array(void *arr, size_t elem_sz, size_t cnt, void *aug, size_t aug_cnt);
48void augment_array_ex(void **arr, size_t elem_sz, int *cnt, int *capacity, 52void augment_array_ex(void **arr, size_t elem_sz, int *cnt, int *capacity,
@@ -50,14 +54,14 @@ void augment_array_ex(void **arr, size_t elem_sz, int *cnt, int *capacity,
50void generate_random_data(void *buf, size_t sz); 54void generate_random_data(void *buf, size_t sz);
51void *xmalloc(size_t s); 55void *xmalloc(size_t s);
52int convxdigit(char digit, byte *val); 56int convxdigit(char digit, byte *val);
53void print_hex(byte *data, int len, bool newline); 57void print_hex(void *user, misc_printf_t printf, byte *data, int len, bool newline);
54void add_keys(key_array_t ka, int kac); 58void add_keys(key_array_t ka, int kac);
55bool parse_key(char **str, struct crypto_key_t *key); 59bool parse_key(char **str, struct crypto_key_t *key);
56bool add_keys_from_file(const char *key_file); 60bool add_keys_from_file(const char *key_file);
57void print_key(struct crypto_key_t *key, bool newline); 61void print_key(void *user, misc_printf_t printf, struct crypto_key_t *key, bool newline);
58void clear_keys(); 62void clear_keys();
59 63
60typedef char color_t[]; 64typedef const char color_t[];
61 65
62extern color_t OFF, GREY, RED, GREEN, YELLOW, BLUE; 66extern color_t OFF, GREY, RED, GREEN, YELLOW, BLUE;
63void color(color_t c); 67void color(color_t c);
diff --git a/utils/imxtools/sbtools/sb.c b/utils/imxtools/sbtools/sb.c
index df3622940f..218ea5a6f7 100644
--- a/utils/imxtools/sbtools/sb.c
+++ b/utils/imxtools/sbtools/sb.c
@@ -674,6 +674,25 @@ struct sb_file_t *sb_read_file_ex(const char *filename, size_t offset, size_t si
674 #undef fatal 674 #undef fatal
675} 675}
676 676
677struct printer_t
678{
679 void *user;
680 sb_color_printf cprintf;
681 const char *color;
682 bool error;
683};
684
685static void sb_printer(void *user, const char *fmt, ...)
686{
687 struct printer_t *p = user;
688 va_list args;
689 va_start(args, fmt);
690 char buffer[1024];
691 vsnprintf(buffer, sizeof(buffer), fmt, args);
692 p->cprintf(p->user, p->error, p->color, "%s", buffer);
693 va_end(args);
694}
695
677struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, bool raw_mode, void *u, 696struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, bool raw_mode, void *u,
678 sb_color_printf cprintf, enum sb_error_t *err) 697 sb_color_printf cprintf, enum sb_error_t *err)
679{ 698{
@@ -686,8 +705,9 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, bool raw_mode, voi
686 cprintf(u, true, GREY, __VA_ARGS__); \ 705 cprintf(u, true, GREY, __VA_ARGS__); \
687 sb_free(sb_file); \ 706 sb_free(sb_file); \
688 return NULL; } while(0) 707 return NULL; } while(0)
708 struct printer_t printer = {.user = u, .cprintf = cprintf, .color = OFF, .error = false };
689 #define print_hex(c, p, len, nl) \ 709 #define print_hex(c, p, len, nl) \
690 do { printf(c, ""); print_hex(p, len, nl); } while(0) 710 do { printer.color = c; print_hex(&printer, sb_printer, p, len, nl); } while(0)
691 711
692 struct sha_1_params_t sha_1_params; 712 struct sha_1_params_t sha_1_params;
693 sb_file = xmalloc(sizeof(struct sb_file_t)); 713 sb_file = xmalloc(sizeof(struct sb_file_t));
@@ -798,8 +818,8 @@ struct sb_file_t *sb_read_memory(void *_buf, size_t filesize, bool raw_mode, voi
798 { 818 {
799 printf(RED, " Key %d\n", i), 819 printf(RED, " Key %d\n", i),
800 printf(GREEN, " Key: "); 820 printf(GREEN, " Key: ");
801 printf(YELLOW, ""); 821 printer.color = YELLOW;
802 print_key(&g_key_array[i], true); 822 print_key(&printer, sb_printer, &g_key_array[i], true);
803 printf(GREEN, " CBC-MAC: "); 823 printf(GREEN, " CBC-MAC: ");
804 /* check it */ 824 /* check it */
805 byte zero[16]; 825 byte zero[16];
@@ -1137,8 +1157,9 @@ void sb_free(struct sb_file_t *file)
1137void sb_dump(struct sb_file_t *file, void *u, sb_color_printf cprintf) 1157void sb_dump(struct sb_file_t *file, void *u, sb_color_printf cprintf)
1138{ 1158{
1139 #define printf(c, ...) cprintf(u, false, c, __VA_ARGS__) 1159 #define printf(c, ...) cprintf(u, false, c, __VA_ARGS__)
1160 struct printer_t printer = {.user = u, .cprintf = cprintf, .color = OFF, .error = false };
1140 #define print_hex(c, p, len, nl) \ 1161 #define print_hex(c, p, len, nl) \
1141 do { printf(c, ""); print_hex(p, len, nl); } while(0) 1162 do { printer.color = c; print_hex(&printer, sb_printer, p, len, nl); } while(0)
1142 1163
1143 #define TREE RED 1164 #define TREE RED
1144 #define HEADER GREEN 1165 #define HEADER GREEN