aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
Diffstat (limited to 'libbb')
-rw-r--r--libbb/dump.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/libbb/dump.c b/libbb/dump.c
index cfb9d94f9..77d76611b 100644
--- a/libbb/dump.c
+++ b/libbb/dump.c
@@ -242,7 +242,7 @@ static NOINLINE void rewrite(priv_dumper_t *dumper, FS *fs)
242 pr->flags = F_P; 242 pr->flags = F_P;
243 *p1 = 'c'; 243 *p1 = 'c';
244 goto DO_BYTE_COUNT_1; 244 goto DO_BYTE_COUNT_1;
245 case 'u': /* %_p: chars, 'nul', 'esc' etc for nonprintable */ 245 case 'u': /* %_u: chars, 'nul', 'esc' etc for nonprintable */
246 pr->flags = F_U; 246 pr->flags = F_U;
247 /* *p1 = 'c'; set in conv_u */ 247 /* *p1 = 'c'; set in conv_u */
248 goto DO_BYTE_COUNT_1; 248 goto DO_BYTE_COUNT_1;
@@ -322,8 +322,7 @@ static NOINLINE void rewrite(priv_dumper_t *dumper, FS *fs)
322 p2 = NULL; 322 p2 = NULL;
323 for (p1 = pr->fmt; *p1; ++p1) 323 for (p1 = pr->fmt; *p1; ++p1)
324 p2 = isspace(*p1) ? p1 : NULL; 324 p2 = isspace(*p1) ? p1 : NULL;
325 if (p2) 325 pr->nospace = p2;
326 pr->nospace = p2;
327 } 326 }
328 } 327 }
329} 328}
@@ -477,7 +476,7 @@ static void bpad(PR *pr)
477 476
478static const char conv_str[] ALIGN1 = 477static const char conv_str[] ALIGN1 =
479 "\0" "\\""0""\0" 478 "\0" "\\""0""\0"
480 "\007""\\""a""\0" /* \a */ 479 "\007""\\""a""\0"
481 "\b" "\\""b""\0" 480 "\b" "\\""b""\0"
482 "\f" "\\""f""\0" 481 "\f" "\\""f""\0"
483 "\n" "\\""n""\0" 482 "\n" "\\""n""\0"
@@ -539,7 +538,6 @@ static void conv_u(PR *pr, unsigned char *p)
539static NOINLINE void display(priv_dumper_t* dumper) 538static NOINLINE void display(priv_dumper_t* dumper)
540{ 539{
541 unsigned char *bp; 540 unsigned char *bp;
542 unsigned char savech = '\0';
543 541
544 while ((bp = get(dumper)) != NULL) { 542 while ((bp = get(dumper)) != NULL) {
545 FS *fs; 543 FS *fs;
@@ -560,6 +558,8 @@ static NOINLINE void display(priv_dumper_t* dumper)
560 PR *pr; 558 PR *pr;
561 for (pr = fu->nextpr; pr; dumper->pub.address += pr->bcnt, 559 for (pr = fu->nextpr; pr; dumper->pub.address += pr->bcnt,
562 bp += pr->bcnt, pr = pr->nextpr) { 560 bp += pr->bcnt, pr = pr->nextpr) {
561 unsigned char savech;
562
563 if (dumper->eaddress 563 if (dumper->eaddress
564 && dumper->pub.address >= dumper->eaddress 564 && dumper->pub.address >= dumper->eaddress
565 ) { 565 ) {
@@ -568,9 +568,16 @@ static NOINLINE void display(priv_dumper_t* dumper)
568 fputs_stdout(dumper->pub.xxd_eofstring); 568 fputs_stdout(dumper->pub.xxd_eofstring);
569 return; 569 return;
570 } 570 }
571 if (dumper->pub.od_eofstring) {
572 /* od support: requested to not pad incomplete blocks */
573 /* ... but do print final offset */
574 fputs_stdout(dumper->pub.od_eofstring);
575 goto endfu;
576 }
571 if (!(pr->flags & (F_TEXT | F_BPAD))) 577 if (!(pr->flags & (F_TEXT | F_BPAD)))
572 bpad(pr); 578 bpad(pr);
573 } 579 }
580 savech = '\0';
574 if (cnt == 1 && pr->nospace) { 581 if (cnt == 1 && pr->nospace) {
575 savech = *pr->nospace; 582 savech = *pr->nospace;
576 *pr->nospace = '\0'; 583 *pr->nospace = '\0';
@@ -665,7 +672,7 @@ static NOINLINE void display(priv_dumper_t* dumper)
665 break; 672 break;
666 } 673 }
667 } 674 }
668 if (cnt == 1 && pr->nospace) { 675 if (savech) {
669 *pr->nospace = savech; 676 *pr->nospace = savech;
670 } 677 }
671 } 678 }
@@ -673,7 +680,7 @@ static NOINLINE void display(priv_dumper_t* dumper)
673 } 680 }
674 } 681 }
675 } 682 }
676 683 endfu:
677 if (dumper->endfu) { 684 if (dumper->endfu) {
678 PR *pr; 685 PR *pr;
679 /* 686 /*