diff options
-rw-r--r-- | miscutils/bc.c | 110 |
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 | ||
5586 | static void bc_program_printString(const char *str) | 5586 | static 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 | ||