printf: fix this case: printf "%b" '\0057usr\0057bin\n'
It was not accepting \0NNN. Standard printf tool does. function old new delta printf_main 869 886 +17 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
d4acaf70c5
commit
69d81a1c1b
@ -131,13 +131,28 @@ static double my_xstrtod(const char *arg)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Handles %b */
|
||||||
static void print_esc_string(const char *str)
|
static void print_esc_string(const char *str)
|
||||||
{
|
{
|
||||||
char c;
|
char c;
|
||||||
while ((c = *str) != '\0') {
|
while ((c = *str) != '\0') {
|
||||||
str++;
|
str++;
|
||||||
if (c == '\\')
|
if (c == '\\') {
|
||||||
c = bb_process_escape_sequence(&str);
|
/* %b also accepts 4-digit octals of the form \0### */
|
||||||
|
if (*str == '0') {
|
||||||
|
if ((unsigned char)(str[1] - '0') < 8) {
|
||||||
|
/* 2nd char is 0..7: skip leading '0' */
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{
|
||||||
|
/* optimization: don't force arg to be on-stack,
|
||||||
|
* use another variable for that. */
|
||||||
|
const char *z = str;
|
||||||
|
c = bb_process_escape_sequence(&z);
|
||||||
|
str = z;
|
||||||
|
}
|
||||||
|
}
|
||||||
putchar(c);
|
putchar(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user