bc: shrink bc_program_printString

function                                             old     new   delta
zbc_program_print                                    665     642     -23

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-12-11 19:52:25 +01:00
parent 259137d0f0
commit 9f657e0f7d

View File

@ -5585,79 +5585,47 @@ static char *bc_program_name(char *code, size_t *bgn)
static void bc_program_printString(const char *str) static void bc_program_printString(const char *str)
{ {
size_t i, len = strlen(str);
#if ENABLE_DC #if ENABLE_DC
if (len == 0) { // Huh? Example when this happens?
if (!str[0]) {
bb_putchar('\0'); bb_putchar('\0');
return; return;
} }
#endif #endif
while (*str) {
for (i = 0; i < len; ++i, ++G.prog.nchars) { int c = *str++;
if (c != '\\' || !*str)
int c = str[i];
if (c != '\\' || i == len - 1)
bb_putchar(c); bb_putchar(c);
else { else {
c = *str++;
c = str[++i];
switch (c) { switch (c) {
case 'a': case 'a':
{
bb_putchar('\a'); bb_putchar('\a');
break; break;
}
case 'b': case 'b':
{
bb_putchar('\b'); bb_putchar('\b');
break; break;
}
case '\\': case '\\':
case 'e': case 'e':
{
bb_putchar('\\'); bb_putchar('\\');
break; break;
}
case 'f': case 'f':
{
bb_putchar('\f'); bb_putchar('\f');
break; break;
}
case 'n': case 'n':
{
bb_putchar('\n'); bb_putchar('\n');
G.prog.nchars = SIZE_MAX; G.prog.nchars = SIZE_MAX;
break; break;
}
case 'r': case 'r':
{
bb_putchar('\r'); bb_putchar('\r');
break; break;
}
case 'q': case 'q':
{
bb_putchar('"'); bb_putchar('"');
break; break;
}
case 't': case 't':
{
bb_putchar('\t'); bb_putchar('\t');
break; break;
}
default: default:
{
// Just print the backslash and following character. // Just print the backslash and following character.
bb_putchar('\\'); bb_putchar('\\');
++G.prog.nchars; ++G.prog.nchars;
@ -5665,7 +5633,7 @@ static void bc_program_printString(const char *str)
break; break;
} }
} }
} ++G.prog.nchars;
} }
} }