diff options
author | Ron Yorston <rmy@pobox.com> | 2021-02-05 11:24:06 +0000 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2021-02-05 11:24:06 +0000 |
commit | 32e19e7ae8b0d76d69871ba234e8f0af31baff4e (patch) | |
tree | 6fdc833a444e0dd6fd359b21a8d463856917a387 /editors/awk.c | |
parent | 4fb71406b884c6ac0a9a4d2acf7a32b544611f70 (diff) | |
parent | cad3fc743aa7c7744e4fcf044371f0fda50fa51f (diff) | |
download | busybox-w32-32e19e7ae8b0d76d69871ba234e8f0af31baff4e.tar.gz busybox-w32-32e19e7ae8b0d76d69871ba234e8f0af31baff4e.tar.bz2 busybox-w32-32e19e7ae8b0d76d69871ba234e8f0af31baff4e.zip |
Merge branch 'busybox' into merge
Diffstat (limited to 'editors/awk.c')
-rw-r--r-- | editors/awk.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/editors/awk.c b/editors/awk.c index 4799091ec..41a57ea0c 100644 --- a/editors/awk.c +++ b/editors/awk.c | |||
@@ -2174,7 +2174,10 @@ static int fmt_num(char *b, int size, const char *format, double n, int int_as_i | |||
2174 | } | 2174 | } |
2175 | 2175 | ||
2176 | /* formatted output into an allocated buffer, return ptr to buffer */ | 2176 | /* formatted output into an allocated buffer, return ptr to buffer */ |
2177 | static char *awk_printf(node *n) | 2177 | #if !ENABLE_FEATURE_AWK_GNU_EXTENSIONS |
2178 | # define awk_printf(a, b) awk_printf(a) | ||
2179 | #endif | ||
2180 | static char *awk_printf(node *n, int *len) | ||
2178 | { | 2181 | { |
2179 | char *b = NULL; | 2182 | char *b = NULL; |
2180 | char *fmt, *s, *f; | 2183 | char *fmt, *s, *f; |
@@ -2228,6 +2231,10 @@ static char *awk_printf(node *n) | |||
2228 | nvfree(v); | 2231 | nvfree(v); |
2229 | b = xrealloc(b, i + 1); | 2232 | b = xrealloc(b, i + 1); |
2230 | b[i] = '\0'; | 2233 | b[i] = '\0'; |
2234 | #if ENABLE_FEATURE_AWK_GNU_EXTENSIONS | ||
2235 | if (len) | ||
2236 | *len = i; | ||
2237 | #endif | ||
2231 | return b; | 2238 | return b; |
2232 | } | 2239 | } |
2233 | 2240 | ||
@@ -2685,6 +2692,7 @@ static var *evaluate(node *op, var *res) | |||
2685 | case XC( OC_PRINT ): | 2692 | case XC( OC_PRINT ): |
2686 | case XC( OC_PRINTF ): { | 2693 | case XC( OC_PRINTF ): { |
2687 | FILE *F = stdout; | 2694 | FILE *F = stdout; |
2695 | IF_FEATURE_AWK_GNU_EXTENSIONS(int len;) | ||
2688 | 2696 | ||
2689 | if (op->r.n) { | 2697 | if (op->r.n) { |
2690 | rstream *rsm = newfile(R.s); | 2698 | rstream *rsm = newfile(R.s); |
@@ -2722,8 +2730,12 @@ static var *evaluate(node *op, var *res) | |||
2722 | fputs(getvar_s(intvar[ORS]), F); | 2730 | fputs(getvar_s(intvar[ORS]), F); |
2723 | 2731 | ||
2724 | } else { /* OC_PRINTF */ | 2732 | } else { /* OC_PRINTF */ |
2725 | char *s = awk_printf(op1); | 2733 | char *s = awk_printf(op1, &len); |
2734 | #if ENABLE_FEATURE_AWK_GNU_EXTENSIONS | ||
2735 | fwrite(s, len, 1, F); | ||
2736 | #else | ||
2726 | fputs(s, F); | 2737 | fputs(s, F); |
2738 | #endif | ||
2727 | free(s); | 2739 | free(s); |
2728 | } | 2740 | } |
2729 | fflush(F); | 2741 | fflush(F); |
@@ -2997,7 +3009,7 @@ static var *evaluate(node *op, var *res) | |||
2997 | break; | 3009 | break; |
2998 | 3010 | ||
2999 | case XC( OC_SPRINTF ): | 3011 | case XC( OC_SPRINTF ): |
3000 | setvar_p(res, awk_printf(op1)); | 3012 | setvar_p(res, awk_printf(op1, NULL)); |
3001 | break; | 3013 | break; |
3002 | 3014 | ||
3003 | case XC( OC_UNARY ): { | 3015 | case XC( OC_UNARY ): { |