aboutsummaryrefslogtreecommitdiff
path: root/run.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2019-10-24 10:06:10 -0400
committerArnold D. Robbins <arnold@skeeve.com>2019-10-24 10:06:10 -0400
commit1d6ddfd9c0ed7119c0601474cded3a385068e886 (patch)
tree42d1d0960e5da18733124a3cff185449ae207c65 /run.c
parent8b92a4abcb83d7d463ff9e7b8356808e73a6156b (diff)
downloadone-true-awk-1d6ddfd9c0ed7119c0601474cded3a385068e886.tar.gz
Optimize string concatenation.
Diffstat (limited to 'run.c')
-rw-r--r--run.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/run.c b/run.c
index b05eb7c..f5bcdc5 100644
--- a/run.c
+++ b/run.c
@@ -1196,13 +1196,14 @@ Cell *cat(Node **a, int q) /* a[0] cat a[1] */
x = execute(a[0]);
n1 = strlen(getsval(x));
- adjbuf(&s, &ssz, n1 + 1, recsize, 0, "cat1");
- (void) strncpy(s, x->sval, ssz);
y = execute(a[1]);
n2 = strlen(getsval(y));
- adjbuf(&s, &ssz, n1 + n2 + 1, recsize, 0, "cat2");
- (void) strncpy(s + n1, y->sval, ssz - n1);
+
+ adjbuf(&s, &ssz, n1 + n2 + 1, recsize, 0, "cat");
+ memcpy(s, x->sval, n1);
+ memcpy(s + n1, y->sval, n2);
+ s[n1 + n2] = '\0';
tempfree(x);
tempfree(y);