From 52b5d9c2c026825e6f385ffa8b1ad0fb081c301f Mon Sep 17 00:00:00 2001
From: Arne Goedeke <el@laramies.com>
Date: Fri, 17 May 2013 19:49:55 +0200
Subject: [PATCH] string_to_utf8: use macros to access string. much faster for
 long 7bit strings

---
 src/builtin_functions.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/builtin_functions.c b/src/builtin_functions.c
index 3960436e88..4a69af7cca 100644
--- a/src/builtin_functions.c
+++ b/src/builtin_functions.c
@@ -1949,13 +1949,14 @@ PMOD_EXPORT void f_string_to_utf8(INT32 args)
   struct pike_string *out;
   ptrdiff_t i,j;
   INT_TYPE extended = 0;
+  PCHARP src;
 
   get_all_args("string_to_utf8", args, "%W.%i", &in, &extended);
 
   len = in->len;
 
-  for(i=0; i < in->len; i++) {
-    unsigned INT32 c = index_shared_string(in, i);
+  for(i=0,src=MKPCHARP_STR(in); i < in->len; INC_PCHARP(src,1),i++) {
+    unsigned INT32 c = EXTRACT_PCHARP(src);
     if (c & ~0x7f) {
       /* 8bit or more. */
       len++;
@@ -2001,8 +2002,8 @@ PMOD_EXPORT void f_string_to_utf8(INT32 args)
   }
   out = begin_shared_string(len);
 
-  for(i=j=0; i < in->len; i++) {
-    unsigned INT32 c = index_shared_string(in, i);
+  for(i=j=0,src=MKPCHARP_STR(in); i < in->len; INC_PCHARP(src,1),i++) {
+    unsigned INT32 c = EXTRACT_PCHARP(src);
     if (!(c & ~0x7f)) {
       /* 7bit */
       out->str[j++] = c;
-- 
GitLab