aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-12-11 19:52:25 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2018-12-11 19:52:25 +0100
commit9f657e0f7deae5e27f95d783f52f897f42eafa57 (patch)
treedd85f9dfc4095c047b7b8bd8c6087c6d78c48832
parent259137d0f0600150cd783c796e4011164c44a7f0 (diff)
downloadbusybox-w32-9f657e0f7deae5e27f95d783f52f897f42eafa57.tar.gz
busybox-w32-9f657e0f7deae5e27f95d783f52f897f42eafa57.tar.bz2
busybox-w32-9f657e0f7deae5e27f95d783f52f897f42eafa57.zip
bc: shrink bc_program_printString
function old new delta zbc_program_print 665 642 -23 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--miscutils/bc.c110
1 files changed, 39 insertions, 71 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index be118d81d..5f1baf431 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -5585,87 +5585,55 @@ static char *bc_program_name(char *code, size_t *bgn)
5585 5585
5586static void bc_program_printString(const char *str) 5586static void bc_program_printString(const char *str)
5587{ 5587{
5588 size_t i, len = strlen(str);
5589
5590#if ENABLE_DC 5588#if ENABLE_DC
5591 if (len == 0) { 5589 // Huh? Example when this happens?
5590 if (!str[0]) {
5592 bb_putchar('\0'); 5591 bb_putchar('\0');
5593 return; 5592 return;
5594 } 5593 }
5595#endif 5594#endif
5596 5595 while (*str) {
5597 for (i = 0; i < len; ++i, ++G.prog.nchars) { 5596 int c = *str++;
5598 5597 if (c != '\\' || !*str)
5599 int c = str[i];
5600
5601 if (c != '\\' || i == len - 1)
5602 bb_putchar(c); 5598 bb_putchar(c);
5603 else { 5599 else {
5604 5600 c = *str++;
5605 c = str[++i];
5606
5607 switch (c) { 5601 switch (c) {
5608 5602 case 'a':
5609 case 'a': 5603 bb_putchar('\a');
5610 { 5604 break;
5611 bb_putchar('\a'); 5605 case 'b':
5612 break; 5606 bb_putchar('\b');
5613 } 5607 break;
5614 5608 case '\\':
5615 case 'b': 5609 case 'e':
5616 { 5610 bb_putchar('\\');
5617 bb_putchar('\b'); 5611 break;
5618 break; 5612 case 'f':
5619 } 5613 bb_putchar('\f');
5620 5614 break;
5621 case '\\': 5615 case 'n':
5622 case 'e': 5616 bb_putchar('\n');
5623 { 5617 G.prog.nchars = SIZE_MAX;
5624 bb_putchar('\\'); 5618 break;
5625 break; 5619 case 'r':
5626 } 5620 bb_putchar('\r');
5627 5621 break;
5628 case 'f': 5622 case 'q':
5629 { 5623 bb_putchar('"');
5630 bb_putchar('\f'); 5624 break;
5631 break; 5625 case 't':
5632 } 5626 bb_putchar('\t');
5633 5627 break;
5634 case 'n': 5628 default:
5635 { 5629 // Just print the backslash and following character.
5636 bb_putchar('\n'); 5630 bb_putchar('\\');
5637 G.prog.nchars = SIZE_MAX; 5631 ++G.prog.nchars;
5638 break; 5632 bb_putchar(c);
5639 } 5633 break;
5640
5641 case 'r':
5642 {
5643 bb_putchar('\r');
5644 break;
5645 }
5646
5647 case 'q':
5648 {
5649 bb_putchar('"');
5650 break;
5651 }
5652
5653 case 't':
5654 {
5655 bb_putchar('\t');
5656 break;
5657 }
5658
5659 default:
5660 {
5661 // Just print the backslash and following character.
5662 bb_putchar('\\');
5663 ++G.prog.nchars;
5664 bb_putchar(c);
5665 break;
5666 }
5667 } 5634 }
5668 } 5635 }
5636 ++G.prog.nchars;
5669 } 5637 }
5670} 5638}
5671 5639