aboutsummaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
authorAndrew J. Schorr <aschorr@telemetry-investments.com>2016-07-08 15:26:00 -0400
committerAndrew J. Schorr <aschorr@telemetry-investments.com>2016-07-08 15:26:00 -0400
commitc86137f472fdf876c2c223c8d99f673f477b7554 (patch)
tree7ed0e172eaa8d4f831a2d59287547f63f1e71dee /eval.c
parent4a0f74139fb702a14c2e6782fb1965245e4f9d2f (diff)
downloadegawk-c86137f472fdf876c2c223c8d99f673f477b7554.tar.gz
egawk-c86137f472fdf876c2c223c8d99f673f477b7554.tar.bz2
egawk-c86137f472fdf876c2c223c8d99f673f477b7554.zip
Optimization: support unterminated field strings inside gawk, but make terminated copies for the API.
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/eval.c b/eval.c
index cfb1d1e6..675422e2 100644
--- a/eval.c
+++ b/eval.c
@@ -493,8 +493,15 @@ static int
posix_compare(NODE *s1, NODE *s2)
{
int ret = 0;
+ char save1, save2;
size_t l = 0;
+ save1 = s1->stptr[s1->stlen];
+ s1->stptr[s1->stlen] = '\0';
+
+ save2 = s2->stptr[s2->stlen];
+ s2->stptr[s2->stlen] = '\0';
+
if (gawk_mb_cur_max == 1) {
if (strlen(s1->stptr) == s1->stlen && strlen(s2->stptr) == s2->stlen)
ret = strcoll(s1->stptr, s2->stptr);
@@ -556,6 +563,8 @@ posix_compare(NODE *s1, NODE *s2)
}
#endif
+ s1->stptr[s1->stlen] = save1;
+ s2->stptr[s2->stlen] = save2;
return ret;
}