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:
parent
caa93ecdd3
commit
8d269ef859
@ -2360,10 +2360,11 @@ static char *awk_printf(node *n, size_t *len)
|
|||||||
*/
|
*/
|
||||||
if (c == 'c') {
|
if (c == 'c') {
|
||||||
char cc = is_numeric(arg) ? getvar_i(arg) : *getvar_s(arg);
|
char cc = is_numeric(arg) ? getvar_i(arg) : *getvar_s(arg);
|
||||||
s = xasprintf(s, cc);
|
char *r = xasprintf(s, cc ? cc : '^' /* else strlen will be wrong */);
|
||||||
/* + 1 if cc == NUL: handle printf "%c" 0 case
|
slen = strlen(r);
|
||||||
* (and printf "%22c" 0 etc, but still fails for e.g. printf "%-22c" 0) */
|
if (cc == '\0') /* if cc is NUL, re-format the string with it */
|
||||||
slen = strlen(s) + (cc == '\0');
|
sprintf(r, s, cc);
|
||||||
|
s = r;
|
||||||
} else {
|
} else {
|
||||||
if (c == 's') {
|
if (c == 's') {
|
||||||
s = xasprintf(s, getvar_s(arg));
|
s = xasprintf(s, getvar_s(arg));
|
||||||
|
@ -415,6 +415,14 @@ testing "awk printf('%c') can output NUL" \
|
|||||||
"awk '{printf(\"hello%c null\n\", 0)}'" "hello\0 null\n" "" "\n"
|
"awk '{printf(\"hello%c null\n\", 0)}'" "hello\0 null\n" "" "\n"
|
||||||
SKIP=
|
SKIP=
|
||||||
|
|
||||||
|
optional FEATURE_AWK_GNU_EXTENSIONS
|
||||||
|
testing "awk printf('%-10c') can output NUL" \
|
||||||
|
"awk 'BEGIN { printf \"[%-10c]\n\", 0 }' | od -tx1" "\
|
||||||
|
0000000 5b 00 20 20 20 20 20 20 20 20 20 5d 0a
|
||||||
|
0000015
|
||||||
|
" "" ""
|
||||||
|
SKIP=
|
||||||
|
|
||||||
# testing "description" "command" "result" "infile" "stdin"
|
# testing "description" "command" "result" "infile" "stdin"
|
||||||
testing 'awk negative field access' \
|
testing 'awk negative field access' \
|
||||||
'awk 2>&1 -- '\''{ $(-1) }'\' \
|
'awk 2>&1 -- '\''{ $(-1) }'\' \
|
||||||
|
Loading…
Reference in New Issue
Block a user