diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2021-06-18 00:59:17 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-06-18 00:59:17 +0200 |
| commit | 2c436679fbb5fa38b0e7a505022a2075fab87d84 (patch) | |
| tree | 01cc2527c1026abe489b48ee9e6db79a830f0473 /libbb | |
| parent | 25fe2d50bd75097861db9eac8c8c9f238283ff5f (diff) | |
| download | busybox-w32-2c436679fbb5fa38b0e7a505022a2075fab87d84.tar.gz busybox-w32-2c436679fbb5fa38b0e7a505022a2075fab87d84.tar.bz2 busybox-w32-2c436679fbb5fa38b0e7a505022a2075fab87d84.zip | |
xxd: implement -i "C style output"
function old new delta
xxd_main 710 888 +178
.rodata 103252 103331 +79
print_C_style - 78 +78
packed_usage 33639 33652 +13
next 276 278 +2
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 4/0 up/down: 350/0) Total: 350 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb')
| -rw-r--r-- | libbb/dump.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/libbb/dump.c b/libbb/dump.c index 9c16f1f94..f8bb6fd03 100644 --- a/libbb/dump.c +++ b/libbb/dump.c | |||
| @@ -34,7 +34,6 @@ typedef struct priv_dumper_t { | |||
| 34 | FU *endfu; | 34 | FU *endfu; |
| 35 | off_t savaddress; /* saved address/offset in stream */ | 35 | off_t savaddress; /* saved address/offset in stream */ |
| 36 | off_t eaddress; /* end address */ | 36 | off_t eaddress; /* end address */ |
| 37 | off_t address; /* address/offset in stream */ | ||
| 38 | int blocksize; | 37 | int blocksize; |
| 39 | smallint exitval; /* final exit value */ | 38 | smallint exitval; /* final exit value */ |
| 40 | 39 | ||
| @@ -335,14 +334,14 @@ static void do_skip(priv_dumper_t *dumper, const char *fname) | |||
| 335 | ) { | 334 | ) { |
| 336 | /* If st_size is valid and pub.dump_skip >= st_size */ | 335 | /* If st_size is valid and pub.dump_skip >= st_size */ |
| 337 | dumper->pub.dump_skip -= sbuf.st_size; | 336 | dumper->pub.dump_skip -= sbuf.st_size; |
| 338 | dumper->address += sbuf.st_size; | 337 | dumper->pub.address += sbuf.st_size; |
| 339 | return; | 338 | return; |
| 340 | } | 339 | } |
| 341 | if (fseeko(stdin, dumper->pub.dump_skip, SEEK_SET)) { | 340 | if (fseeko(stdin, dumper->pub.dump_skip, SEEK_SET)) { |
| 342 | bb_simple_perror_msg_and_die(fname); | 341 | bb_simple_perror_msg_and_die(fname); |
| 343 | } | 342 | } |
| 344 | dumper->address += dumper->pub.dump_skip; | 343 | dumper->pub.address += dumper->pub.dump_skip; |
| 345 | dumper->savaddress = dumper->address; | 344 | dumper->savaddress = dumper->pub.address; |
| 346 | dumper->pub.dump_skip = 0; | 345 | dumper->pub.dump_skip = 0; |
| 347 | } | 346 | } |
| 348 | 347 | ||
| @@ -381,7 +380,7 @@ static unsigned char *get(priv_dumper_t *dumper) | |||
| 381 | int blocksize = dumper->blocksize; | 380 | int blocksize = dumper->blocksize; |
| 382 | 381 | ||
| 383 | if (!dumper->get__curp) { | 382 | if (!dumper->get__curp) { |
| 384 | dumper->address = (off_t)0; /*DBU:[dave@cray.com] initialize,initialize..*/ | 383 | dumper->pub.address = (off_t)0; /*DBU:[dave@cray.com] initialize,initialize..*/ |
| 385 | dumper->get__curp = xmalloc(blocksize); | 384 | dumper->get__curp = xmalloc(blocksize); |
| 386 | dumper->get__savp = xzalloc(blocksize); /* need to be initialized */ | 385 | dumper->get__savp = xzalloc(blocksize); /* need to be initialized */ |
| 387 | } else { | 386 | } else { |
| @@ -389,7 +388,7 @@ static unsigned char *get(priv_dumper_t *dumper) | |||
| 389 | dumper->get__curp = dumper->get__savp; | 388 | dumper->get__curp = dumper->get__savp; |
| 390 | dumper->get__savp = tmp; | 389 | dumper->get__savp = tmp; |
| 391 | dumper->savaddress += blocksize; | 390 | dumper->savaddress += blocksize; |
| 392 | dumper->address = dumper->savaddress; | 391 | dumper->pub.address = dumper->savaddress; |
| 393 | } | 392 | } |
| 394 | need = blocksize; | 393 | need = blocksize; |
| 395 | nread = 0; | 394 | nread = 0; |
| @@ -412,7 +411,7 @@ static unsigned char *get(priv_dumper_t *dumper) | |||
| 412 | } | 411 | } |
| 413 | } | 412 | } |
| 414 | memset(dumper->get__curp + nread, 0, need); | 413 | memset(dumper->get__curp + nread, 0, need); |
| 415 | dumper->eaddress = dumper->address + nread; | 414 | dumper->eaddress = dumper->pub.address + nread; |
| 416 | return dumper->get__curp; | 415 | return dumper->get__curp; |
| 417 | } | 416 | } |
| 418 | n = fread(dumper->get__curp + nread, sizeof(unsigned char), | 417 | n = fread(dumper->get__curp + nread, sizeof(unsigned char), |
| @@ -444,7 +443,7 @@ static unsigned char *get(priv_dumper_t *dumper) | |||
| 444 | } | 443 | } |
| 445 | dumper->pub.dump_vflag = DUP; | 444 | dumper->pub.dump_vflag = DUP; |
| 446 | dumper->savaddress += blocksize; | 445 | dumper->savaddress += blocksize; |
| 447 | dumper->address = dumper->savaddress; | 446 | dumper->pub.address = dumper->savaddress; |
| 448 | need = blocksize; | 447 | need = blocksize; |
| 449 | nread = 0; | 448 | nread = 0; |
| 450 | } else { | 449 | } else { |
| @@ -545,8 +544,8 @@ static void display(priv_dumper_t* dumper) | |||
| 545 | 544 | ||
| 546 | fs = dumper->pub.fshead; | 545 | fs = dumper->pub.fshead; |
| 547 | savebp = bp; | 546 | savebp = bp; |
| 548 | saveaddress = dumper->address; | 547 | saveaddress = dumper->pub.address; |
| 549 | for (; fs; fs = fs->nextfs, bp = savebp, dumper->address = saveaddress) { | 548 | for (; fs; fs = fs->nextfs, bp = savebp, dumper->pub.address = saveaddress) { |
| 550 | FU *fu; | 549 | FU *fu; |
| 551 | for (fu = fs->nextfu; fu; fu = fu->nextfu) { | 550 | for (fu = fs->nextfu; fu; fu = fu->nextfu) { |
| 552 | int cnt; | 551 | int cnt; |
| @@ -555,10 +554,10 @@ static void display(priv_dumper_t* dumper) | |||
| 555 | } | 554 | } |
| 556 | for (cnt = fu->reps; cnt; --cnt) { | 555 | for (cnt = fu->reps; cnt; --cnt) { |
| 557 | PR *pr; | 556 | PR *pr; |
| 558 | for (pr = fu->nextpr; pr; dumper->address += pr->bcnt, | 557 | for (pr = fu->nextpr; pr; dumper->pub.address += pr->bcnt, |
| 559 | bp += pr->bcnt, pr = pr->nextpr) { | 558 | bp += pr->bcnt, pr = pr->nextpr) { |
| 560 | if (dumper->eaddress | 559 | if (dumper->eaddress |
| 561 | && dumper->address >= dumper->eaddress | 560 | && dumper->pub.address >= dumper->eaddress |
| 562 | ) { | 561 | ) { |
| 563 | if (dumper->pub.xxd_eofstring) { | 562 | if (dumper->pub.xxd_eofstring) { |
| 564 | /* xxd support: requested to not pad incomplete blocks */ | 563 | /* xxd support: requested to not pad incomplete blocks */ |
| @@ -574,7 +573,7 @@ static void display(priv_dumper_t* dumper) | |||
| 574 | } | 573 | } |
| 575 | switch (pr->flags) { | 574 | switch (pr->flags) { |
| 576 | case F_ADDRESS: | 575 | case F_ADDRESS: |
| 577 | printf(pr->fmt, (unsigned long long) dumper->address + dumper->pub.xxd_displayoff); | 576 | printf(pr->fmt, (unsigned long long) dumper->pub.address + dumper->pub.xxd_displayoff); |
| 578 | break; | 577 | break; |
| 579 | case F_BPAD: | 578 | case F_BPAD: |
| 580 | printf(pr->fmt, ""); | 579 | printf(pr->fmt, ""); |
| @@ -668,10 +667,10 @@ static void display(priv_dumper_t* dumper) | |||
| 668 | * of blocksize, and no partial block ever found. | 667 | * of blocksize, and no partial block ever found. |
| 669 | */ | 668 | */ |
| 670 | if (!dumper->eaddress) { | 669 | if (!dumper->eaddress) { |
| 671 | if (!dumper->address) { | 670 | if (!dumper->pub.address) { |
| 672 | return; | 671 | return; |
| 673 | } | 672 | } |
| 674 | dumper->eaddress = dumper->address; | 673 | dumper->eaddress = dumper->pub.address; |
| 675 | } | 674 | } |
| 676 | for (pr = dumper->endfu->nextpr; pr; pr = pr->nextpr) { | 675 | for (pr = dumper->endfu->nextpr; pr; pr = pr->nextpr) { |
| 677 | switch (pr->flags) { | 676 | switch (pr->flags) { |
