summaryrefslogtreecommitdiff
path: root/editors/awk.c
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2021-02-05 11:24:06 +0000
committerRon Yorston <rmy@pobox.com>2021-02-05 11:24:06 +0000
commit32e19e7ae8b0d76d69871ba234e8f0af31baff4e (patch)
tree6fdc833a444e0dd6fd359b21a8d463856917a387 /editors/awk.c
parent4fb71406b884c6ac0a9a4d2acf7a32b544611f70 (diff)
parentcad3fc743aa7c7744e4fcf044371f0fda50fa51f (diff)
downloadbusybox-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.c18
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 */
2177static char *awk_printf(node *n) 2177#if !ENABLE_FEATURE_AWK_GNU_EXTENSIONS
2178# define awk_printf(a, b) awk_printf(a)
2179#endif
2180static 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 ): {