aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/bindump.c
diff options
context:
space:
mode:
authorDavid M. Syzdek <david@syzdek.net>2010-01-11 14:00:24 -0900
committerDavid M. Syzdek <david@syzdek.net>2010-01-11 14:00:24 -0900
commitbaae3c72e17ea34f47a7b95eb21c1ea3b568d8ef (patch)
treed7fcf7873f3465709a0c7395ddbd0f42b088fdc7 /src/bindump.c
parentf8d791372539d9f220a7b2771036a70c66e167e7 (diff)
downloaddmstools-baae3c72e17ea34f47a7b95eb21c1ea3b568d8ef.tar.gz
dmstools-baae3c72e17ea34f47a7b95eb21c1ea3b568d8ef.tar.bz2
dmstools-baae3c72e17ea34f47a7b95eb21c1ea3b568d8ef.tar.xz
dmstools-baae3c72e17ea34f47a7b95eb21c1ea3b568d8ef.zip
Fixing the output of the diff in bindump.
Diffstat (limited to 'src/bindump.c')
-rw-r--r--src/bindump.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/src/bindump.c b/src/bindump.c
index dfa7054..6f310fe 100644
--- a/src/bindump.c
+++ b/src/bindump.c
@@ -160,7 +160,7 @@ int my_close PARAMS((BinDumpFile * file, uint32_t verbose));
160int my_lseek PARAMS((BinDumpFile * file, size_t offset, uint32_t verbose)); 160int my_lseek PARAMS((BinDumpFile * file, size_t offset, uint32_t verbose));
161 161
162// determines the max number of bytes to dislpay 162// determines the max number of bytes to dislpay
163size_t my_max PARAMS((size_t pos, ssize_t code, size_t len, size_t offset)); 163size_t my_max PARAMS((ssize_t code, size_t len));
164 164
165// opens a file 165// opens a file
166int my_open PARAMS((BinDumpFile * file, uint32_t verbose)); 166int my_open PARAMS((BinDumpFile * file, uint32_t verbose));
@@ -250,7 +250,7 @@ int main(int argc, char * argv[])
250 case 'o': 250 case 'o':
251 offset = strtoul(optarg, NULL, 0); 251 offset = strtoul(optarg, NULL, 0);
252 offset_div = (offset / 8); 252 offset_div = (offset / 8);
253 offset_mod = (offset - (offset_div * 8)); 253 offset_mod = (offset % 8);
254 break; 254 break;
255 case 'V': 255 case 'V':
256 my_version(); 256 my_version();
@@ -436,12 +436,12 @@ int my_lseek(BinDumpFile * file, size_t offset, uint32_t verbose)
436/// @param[in] code code 436/// @param[in] code code
437/// @param[in] len len 437/// @param[in] len len
438/// @param[in] offset offset 438/// @param[in] offset offset
439size_t my_max(size_t pos, ssize_t code, size_t len, size_t offset) 439size_t my_max(ssize_t code, size_t len)
440{ 440{
441 size_t max; 441 size_t max;
442 if (code < 1) 442 if (code < 1)
443 return(0); 443 return(0);
444 len = len ? (len - (pos-offset)) : 8; 444 len = len ? len : 8;
445 max = (len > (size_t)code) ? (size_t)code : len; 445 max = (len > (size_t)code) ? (size_t)code : len;
446 return(max); 446 return(max);
447} 447}
@@ -499,8 +499,8 @@ size_t my_print_diff(BinDumpFile * file1, BinDumpFile * file2, size_t offset,
499 uint8_t diff2[9]; 499 uint8_t diff2[9];
500 500
501 line = 0; 501 line = 0;
502 max1 = my_max(file1->pos, file1->code, len, offset); 502 max1 = my_max(file1->code, len);
503 max2 = my_max(file2->pos, file2->code, len, offset); 503 max2 = my_max(file2->code, len);
504 504
505 if ( (!(max1)) && (!(max2)) ) 505 if ( (!(max1)) && (!(max2)) )
506 return(0); 506 return(0);
@@ -520,11 +520,11 @@ size_t my_print_diff(BinDumpFile * file1, BinDumpFile * file2, size_t offset,
520 diff2[s] = 1; 520 diff2[s] = 1;
521 diff2[8] = 1; 521 diff2[8] = 1;
522 }; 522 };
523 } else if ((s < max2) && (s >= max1)) { 523 } else if (s < max2) {
524 diff = 1; 524 diff = 1;
525 diff2[s] = 1; 525 diff2[s] = 1;
526 diff2[8] = 1; 526 diff2[8] = 1;
527 } else if ((s < max1) && (s >= max2)) { 527 } else if (s < max1) {
528 diff = 1; 528 diff = 1;
529 diff1[s] = 1; 529 diff1[s] = 1;
530 diff1[8] = 1; 530 diff1[8] = 1;
@@ -541,9 +541,11 @@ size_t my_print_diff(BinDumpFile * file1, BinDumpFile * file2, size_t offset,
541 (file1->pos/8), 541 (file1->pos/8),
542 ((opts & MY_OPT_XTERM) ? MY_TERM_RESET : "")); 542 ((opts & MY_OPT_XTERM) ? MY_TERM_RESET : ""));
543 543
544 // print leading spaces for offset
544 for(s = 0; s < offset; s++) 545 for(s = 0; s < offset; s++)
545 printf(" "); 546 printf(" ");
546 547
548 // print each byte
547 for(s = 0; s < max1; s++) 549 for(s = 0; s < max1; s++)
548 { 550 {
549 if (diff1[s]) 551 if (diff1[s])
@@ -555,9 +557,10 @@ size_t my_print_diff(BinDumpFile * file1, BinDumpFile * file2, size_t offset,
555 printf(" %s", (opts & MY_OPT_ALL) ? my_byte2str(file1->data[s], buff) : " "); 557 printf(" %s", (opts & MY_OPT_ALL) ? my_byte2str(file1->data[s], buff) : " ");
556 }; 558 };
557 }; 559 };
558 for(s = max1; s < 8; s++) 560 for(s = max1+offset; s < 8; s++)
559 printf(" "); 561 printf(" ");
560 562
563 // prints summary
561 printf(" "); 564 printf(" ");
562 for(s = 0; s < offset; s++) 565 for(s = 0; s < offset; s++)
563 printf(" "); 566 printf(" ");
@@ -586,9 +589,11 @@ size_t my_print_diff(BinDumpFile * file1, BinDumpFile * file2, size_t offset,
586 (file2->pos/8), 589 (file2->pos/8),
587 ((opts & MY_OPT_XTERM) ? MY_TERM_RESET : "")); 590 ((opts & MY_OPT_XTERM) ? MY_TERM_RESET : ""));
588 591
592 // print leading spaces for offset
589 for(s = 0; s < offset; s++) 593 for(s = 0; s < offset; s++)
590 printf(" "); 594 printf(" ");
591 595
596 // print each byte
592 for(s = 0; s < max2; s++) 597 for(s = 0; s < max2; s++)
593 { 598 {
594 if (diff2[s]) 599 if (diff2[s])
@@ -600,9 +605,10 @@ size_t my_print_diff(BinDumpFile * file1, BinDumpFile * file2, size_t offset,
600 printf(" %s", (opts & MY_OPT_ALL) ? my_byte2str(file2->data[s], buff) : " "); 605 printf(" %s", (opts & MY_OPT_ALL) ? my_byte2str(file2->data[s], buff) : " ");
601 }; 606 };
602 }; 607 };
603 for(s = max2; s < 8; s++) 608 for(s = max2+offset; s < 8; s++)
604 printf(" "); 609 printf(" ");
605 610
611 // prints summary
606 printf(" "); 612 printf(" ");
607 for(s = 0; s < offset; s++) 613 for(s = 0; s < offset; s++)
608 printf(" "); 614 printf(" ");
@@ -642,7 +648,7 @@ size_t my_print_dump(BinDumpFile * file, size_t offset, size_t len,
642 size_t s; 648 size_t s;
643 size_t max; 649 size_t max;
644 650
645 max = my_max(file->pos, file->code, len, offset); 651 max = my_max(file->code, len);
646 652
647 if (!(max)) 653 if (!(max))
648 return(0); 654 return(0);
@@ -659,7 +665,7 @@ size_t my_print_dump(BinDumpFile * file, size_t offset, size_t len,
659 // prints each byte 665 // prints each byte
660 for(s = 0; s < max; s++) 666 for(s = 0; s < max; s++)
661 printf(" %s", my_byte2str(file->data[s], buff)); 667 printf(" %s", my_byte2str(file->data[s], buff));
662 for(s = max; s < 8; s++) 668 for(s = max+offset; s < 8; s++)
663 printf(" "); 669 printf(" ");
664 670
665 // prints summary 671 // prints summary