yohgaki         Tue Nov 12 04:07:36 2002 EDT

  Modified files:              
    /php4/ext/pgsql     pgsql.c 
  Log:
  Speed up pg_escape_bytea, from O(n^2) => O(n). My test script speed up
  from 50 sec to 5 sec. (sscanf is too slow at least under my linux, I 
  might write better function that unescape values later)
  Use emalloc/erealloc for bundled PQescapeBytea(php_pgsql_escape_bytea)
  
  
Index: php4/ext/pgsql/pgsql.c
diff -u php4/ext/pgsql/pgsql.c:1.243 php4/ext/pgsql/pgsql.c:1.244
--- php4/ext/pgsql/pgsql.c:1.243        Tue Nov  5 09:28:32 2002
+++ php4/ext/pgsql/pgsql.c      Tue Nov 12 04:07:36 2002
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
  */
  
-/* $Id: pgsql.c,v 1.243 2002/11/05 14:28:32 iliaa Exp $ */
+/* $Id: pgsql.c,v 1.244 2002/11/12 09:07:36 yohgaki Exp $ */
 
 #include <stdlib.h>
 
@@ -2664,7 +2664,7 @@
                return NULL;
        buflen = strlen(strtext);       /* will shrink, also we discover if
                                                                 * strtext */
-       buffer = (unsigned char *) malloc(buflen);      /* isn't NULL terminated */
+       buffer = (unsigned char *) emalloc(buflen);     /* isn't NULL terminated */
        if (buffer == NULL)
                return NULL;
        for (bp = buffer, sp = strtext; *sp != '\0'; bp++, sp++)
@@ -2710,10 +2710,14 @@
                        case 3:
                                if (isdigit(*sp))               /* state=4 */
                                {
-                                       int                     v;
+                                       unsigned int  v,i;
+                                       unsigned char buf[4]; /* 000 + '\0' */
 
                                        bp -= 3;
-                                       sscanf(sp - 2, "%03o", &v);
+                                       for (i = 0; i < 3; i++)
+                                               buf[i] = *((sp-2)+i);
+                                       buf[i] = '\0';
+                                       sscanf(buf, "%03o", &v);
                                        *bp = v;
                                        buflen -= 3;
                                        state = 0;
@@ -2726,7 +2730,7 @@
                                break;
                }
        }
-       buffer = realloc(buffer, buflen);
+       buffer = erealloc(buffer, buflen);
        if (buffer == NULL)
                return NULL;
 
@@ -2749,8 +2753,7 @@
        if (!to) {
                RETURN_FALSE;
        }
-       RETVAL_STRINGL(to, to_len, 1);
-       free(to);
+       RETVAL_STRINGL(to, to_len, 0);
 }
 /* }}} */
 #endif



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to