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