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