提交 caa93ecd 编写于 作者: D Denys Vlasenko

awk: fix corner case in awk_printf

Example where it wasn't working:
    awk 'BEGIN { printf "qwe %s rty %c uio\n", "a", 0, "c" }'
- the NUL printing in %c caused premature stop of printing.

function                                             old     new   delta
awk_printf                                           593     596      +3
Signed-off-by: NDenys Vlasenko <vda.linux@googlemail.com>
上级 f5f336e7
......@@ -2359,11 +2359,11 @@ static char *awk_printf(node *n, size_t *len)
* printf "%99999s", "BOOM"
*/
if (c == 'c') {
c = is_numeric(arg) ? getvar_i(arg) : *getvar_s(arg);
s = xasprintf(s, c);
/* + 1 if c == NUL: handle printf "%c" 0 case
char cc = is_numeric(arg) ? getvar_i(arg) : *getvar_s(arg);
s = xasprintf(s, cc);
/* + 1 if cc == NUL: handle printf "%c" 0 case
* (and printf "%22c" 0 etc, but still fails for e.g. printf "%-22c" 0) */
slen = strlen(s) + (c == '\0');
slen = strlen(s) + (cc == '\0');
} else {
if (c == 's') {
s = xasprintf(s, getvar_s(arg));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册