awk: fix printf %%
No binary (build failed)
—
(log yok)
| @@ -2346,8 +2346,15 @@ static char *awk_printf(node *n, size_t *len) | |
| size_t slen; | |
| s = f; | |
| - | while (*f && (*f != '%' || *++f == '%')) |
| + | while (*f && *f != '%') |
| f++; | |
| + | c = *++f; |
| + | if (c == '%') { /* double % */ |
| + | slen = f - s; |
| + | s = xstrndup(s, slen); |
| + | f++; |
| + | goto tail; |
| + | } |
| while (*f && !isalpha(*f)) { | |
| if (*f == '*') | |
| syntax_error("%*x formats are not supported"); | |
| @@ -463,4 +463,10 @@ testing "awk \"cmd\" | getline" \ | |
| "HELLO\n" \ | |
| '' '' | |
| + | # printf %% should print one % (had a bug where it didn't) |
| + | testing 'awk printf %% prints one %' \ |
| + | "awk 'BEGIN { printf \"%%\n\" }'" \ |
| + | "%\n" \ |
| + | '' '' |
| + | |
| exit $FAILCOUNT | |
| @@ -79,6 +79,11 @@ testing "printf understands %Ld" \ | |
| "-5\n""0\n" \ | |
| "" "" | |
| + | testing "printf understands %%" \ |
| + | "${bb}printf '%%\n' 2>&1; echo \$?" \ |
| + | "%\n""0\n" \ |
| + | "" "" |
| + | |
| testing "printf handles positive numbers for %d" \ | |
| "${bb}printf '%d\n' 3 +3 ' 3' ' +3' 2>&1; echo \$?" \ | |
| "3\n"\ | |