diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2019-10-24 10:06:10 -0400 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2019-10-24 10:06:10 -0400 |
commit | 1d6ddfd9c0ed7119c0601474cded3a385068e886 (patch) | |
tree | 42d1d0960e5da18733124a3cff185449ae207c65 /run.c | |
parent | 8b92a4abcb83d7d463ff9e7b8356808e73a6156b (diff) | |
download | one-true-awk-1d6ddfd9c0ed7119c0601474cded3a385068e886.tar.gz |
Optimize string concatenation.
Diffstat (limited to 'run.c')
-rw-r--r-- | run.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -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); |