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') {
str++;
}
}
+ else if (*str == 'c') {
+ return 1;
+ }
{
/* optimization: don't force arg to be on-stack,
* use another variable for that. */
}
putchar(c);
}
+
+ return 0;
}
static void print_direc(char *format, unsigned fmt_length,
}
if (*f == 'b') {
if (*argv) {
- print_esc_string(*argv);
+ if (print_esc_string(*argv))
+ return saved_argv; /* causes main() to exit */
++argv;
}
break;