Applied, thanks
On Thu, Jan 21, 2016 at 11:28 AM, Ron Yorston <[email protected]> wrote: > printf wasn't correctly handling \c in an argument to the %b format > specifier. > > printf %bXX OK\\c > > returned 'OK\cXX' rather than the expected 'OK'. > > Signed-off-by: Ron Yorston <[email protected]> > --- > coreutils/printf.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/coreutils/printf.c b/coreutils/printf.c > index 3dd43a9..9ee7350 100644 > --- a/coreutils/printf.c > +++ b/coreutils/printf.c > @@ -131,8 +131,8 @@ static double my_xstrtod(const char *arg) > return result; > } > > -/* Handles %b */ > -static void print_esc_string(const char *str) > +/* Handles %b; return 1 if output is to be short-circuited by \c */ > +static int print_esc_string(const char *str) > { > char c; > while ((c = *str) != '\0') { > @@ -145,6 +145,9 @@ static void print_esc_string(const char *str) > str++; > } > } > + else if (*str == 'c') { > + return 1; > + } > { > /* optimization: don't force arg to be > on-stack, > * use another variable for that. */ > @@ -155,6 +158,8 @@ static void print_esc_string(const char *str) > } > putchar(c); > } > + > + return 0; > } > > static void print_direc(char *format, unsigned fmt_length, > @@ -280,7 +285,8 @@ static char **print_formatted(char *f, char **argv, int > *conv_err) > } > if (*f == 'b') { > if (*argv) { > - print_esc_string(*argv); > + if (print_esc_string(*argv)) > + return saved_argv; /* causes > main() to exit */ > ++argv; > } > break; > -- > 2.5.0 > > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
