diff options
| author | David M. Syzdek <david@syzdek.net> | 2010-01-11 14:00:24 -0900 |
|---|---|---|
| committer | David M. Syzdek <david@syzdek.net> | 2010-01-11 14:00:24 -0900 |
| commit | baae3c72e17ea34f47a7b95eb21c1ea3b568d8ef (patch) | |
| tree | d7fcf7873f3465709a0c7395ddbd0f42b088fdc7 /src/bindump.c | |
| parent | f8d791372539d9f220a7b2771036a70c66e167e7 (diff) | |
| download | dmstools-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.c | 30 |
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)); | |||
| 160 | int my_lseek PARAMS((BinDumpFile * file, size_t offset, uint32_t verbose)); | 160 | int 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 |
| 163 | size_t my_max PARAMS((size_t pos, ssize_t code, size_t len, size_t offset)); | 163 | size_t my_max PARAMS((ssize_t code, size_t len)); |
| 164 | 164 | ||
| 165 | // opens a file | 165 | // opens a file |
| 166 | int my_open PARAMS((BinDumpFile * file, uint32_t verbose)); | 166 | int 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 |
| 439 | size_t my_max(size_t pos, ssize_t code, size_t len, size_t offset) | 439 | size_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 |
