diff options
| author | David M. Syzdek <david@syzdek.net> | 2010-01-10 15:45:44 -0900 |
|---|---|---|
| committer | David M. Syzdek <david@syzdek.net> | 2010-01-10 15:45:44 -0900 |
| commit | 214f1fe82fce6c620e6833bc17f2b9312de8472a (patch) | |
| tree | 008a5d2c7959603292ae7111b13d02ef7541bcb1 /src/bindump.c | |
| parent | 6e9a24a634ae2599a3bced227c302b7759582234 (diff) | |
| download | dmstools-214f1fe82fce6c620e6833bc17f2b9312de8472a.tar.gz dmstools-214f1fe82fce6c620e6833bc17f2b9312de8472a.tar.bz2 dmstools-214f1fe82fce6c620e6833bc17f2b9312de8472a.tar.xz dmstools-214f1fe82fce6c620e6833bc17f2b9312de8472a.zip | |
Updating to display only the differences in bindump
Diffstat (limited to 'src/bindump.c')
| -rw-r--r-- | src/bindump.c | 89 |
1 files changed, 73 insertions, 16 deletions
diff --git a/src/bindump.c b/src/bindump.c index b9f8a72..f4678e5 100644 --- a/src/bindump.c +++ b/src/bindump.c | |||
| @@ -451,47 +451,104 @@ int my_open(BinDumpFile * file, uint32_t verbose) | |||
| 451 | size_t my_print_diff(BinDumpFile * file1, BinDumpFile * file2, size_t offset, | 451 | size_t my_print_diff(BinDumpFile * file1, BinDumpFile * file2, size_t offset, |
| 452 | size_t len, uint32_t opts) | 452 | size_t len, uint32_t opts) |
| 453 | { | 453 | { |
| 454 | char buff[9]; | 454 | char buff[9]; |
| 455 | size_t s; | 455 | size_t s; |
| 456 | size_t max; | 456 | size_t max1; |
| 457 | size_t line; | 457 | size_t max2; |
| 458 | size_t len1; | ||
| 459 | size_t len2; | ||
| 460 | size_t line; | ||
| 461 | uint8_t diff; | ||
| 462 | uint8_t diff1[9]; | ||
| 463 | uint8_t diff2[9]; | ||
| 458 | 464 | ||
| 459 | line = 0; | 465 | line = 0; |
| 460 | 466 | ||
| 461 | if (opts) | 467 | if (opts) |
| 462 | return(0); | 468 | return(0); |
| 463 | 469 | ||
| 464 | // prints line offset | 470 | max1 = 0; |
| 471 | max2 = 0; | ||
| 465 | if (file1->code > 0) | 472 | if (file1->code > 0) |
| 466 | { | 473 | { |
| 474 | len1 = len ? (len - (file1->pos-offset)) : 8; | ||
| 475 | max1 = (len1 > ((size_t)file1->code)) ? (size_t)file1->code : len1; | ||
| 476 | }; | ||
| 477 | if (file2->code > 0) | ||
| 478 | { | ||
| 479 | len2 = len ? (len - (file2->pos-offset)) : 8; | ||
| 480 | max2 = (len2 > ((size_t)file2->code)) ? (size_t)file2->code : len2; | ||
| 481 | }; | ||
| 482 | |||
| 483 | if ( (!(max1)) && (!(max2)) ) | ||
| 484 | return(0); | ||
| 485 | |||
| 486 | diff = 0; | ||
| 487 | memset(diff1, 0, 9); | ||
| 488 | memset(diff2, 0, 9); | ||
| 489 | for(s = 0; s < (8-offset); s++) | ||
| 490 | { | ||
| 491 | if ( (s < max1) && (s < max2) ) | ||
| 492 | { | ||
| 493 | if (file1->data[s] != file2->data[s]) | ||
| 494 | { | ||
| 495 | diff = 1; | ||
| 496 | diff1[s] = 1; | ||
| 497 | diff1[8] = 1; | ||
| 498 | diff2[s] = 1; | ||
| 499 | diff2[8] = 1; | ||
| 500 | }; | ||
| 501 | } else if (s < max2) { | ||
| 502 | diff = 1; | ||
| 503 | diff2[s] = 1; | ||
| 504 | diff2[8] = 1; | ||
| 505 | } else { | ||
| 506 | diff = 1; | ||
| 507 | diff1[s] = 1; | ||
| 508 | diff1[8] = 1; | ||
| 509 | }; | ||
| 510 | }; | ||
| 511 | |||
| 512 | if (!(diff)) | ||
| 513 | return(0); | ||
| 514 | |||
| 515 | // prints line offset | ||
| 516 | if ((max1) && (diff1[8])) | ||
| 517 | { | ||
| 467 | printf("< 0%04zo0:", (file1->pos/8)); | 518 | printf("< 0%04zo0:", (file1->pos/8)); |
| 468 | for(s = 0; s < offset; s++) | 519 | for(s = 0; s < offset; s++) |
| 469 | printf(" "); | 520 | printf(" "); |
| 470 | 521 | ||
| 471 | len = len ? (len - (file1->pos-offset)) : 8; | 522 | for(s = 0; s < max1; s++) |
| 472 | max = (len > ((size_t)file1->code)) ? (size_t)file1->code : len; | 523 | { |
| 473 | for(s = 0; s < max; s++) | 524 | printf(" %s", (!(diff1[s])) ? |
| 474 | printf(" %s", my_byte2str(file1->data[s], buff)); | 525 | " " : |
| 526 | my_byte2str(file1->data[s], buff) | ||
| 527 | ); | ||
| 528 | }; | ||
| 475 | printf("\n"); | 529 | printf("\n"); |
| 476 | 530 | ||
| 477 | file1->pos += max; | 531 | file1->pos += max1; |
| 478 | 532 | ||
| 479 | line++; | 533 | line++; |
| 480 | }; | 534 | }; |
| 481 | 535 | ||
| 482 | if (file2->code > 0) | 536 | if ((max2) && (diff2[8])) |
| 483 | { | 537 | { |
| 484 | printf("> 0%04zo0:", (file2->pos/8)); | 538 | printf("> 0%04zo0:", (file2->pos/8)); |
| 485 | for(s = 0; s < offset; s++) | 539 | for(s = 0; s < offset; s++) |
| 486 | printf(" "); | 540 | printf(" "); |
| 487 | 541 | ||
| 488 | len = len ? (len - (file2->pos-offset)) : 8; | 542 | for(s = 0; s < max2; s++) |
| 489 | max = (len > ((size_t)file2->code)) ? (size_t)file2->code : len; | 543 | { |
| 490 | for(s = 0; s < max; s++) | 544 | printf(" %s", (!(diff2[s])) ? |
| 491 | printf(" %s", my_byte2str(file2->data[s], buff)); | 545 | " " : |
| 546 | my_byte2str(file2->data[s], buff) | ||
| 547 | ); | ||
| 548 | }; | ||
| 492 | printf("\n"); | 549 | printf("\n"); |
| 493 | 550 | ||
| 494 | file2->pos += max; | 551 | file2->pos += max2; |
| 495 | 552 | ||
| 496 | line++; | 553 | line++; |
| 497 | }; | 554 | }; |
