awk: fix printf "%-10c", 0

function                                             old     new   delta
awk_printf                                           596     626     +30

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2021-07-12 11:27:11 +02:00
parent caa93ecdd3
commit 8d269ef859
2 changed files with 13 additions and 4 deletions

View file

@ -2360,10 +2360,11 @@ static char *awk_printf(node *n, size_t *len)
*/
if (c == 'c') {
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) + (cc == '\0');
char *r = xasprintf(s, cc ? cc : '^' /* else strlen will be wrong */);
slen = strlen(r);
if (cc == '\0') /* if cc is NUL, re-format the string with it */
sprintf(r, s, cc);
s = r;
} else {
if (c == 's') {
s = xasprintf(s, getvar_s(arg));