summaryrefslogtreecommitdiff
path: root/ext/mysqlnd/mysqlnd.c
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2009-10-22 17:07:55 +0000
committerAndrey Hristov <andrey@php.net>2009-10-22 17:07:55 +0000
commitf2814dd0dfb81ef60b31f2b1d711aed6df08e892 (patch)
treeb638ec920b70c88fc1ec6a942195633bd86da125 /ext/mysqlnd/mysqlnd.c
parent629d8fe47e0c8e012a0113b5851cdc8bfaeca529 (diff)
downloadphp-git-f2814dd0dfb81ef60b31f2b1d711aed6df08e892.tar.gz
Have the lengths also to skip many calls to strlen
Diffstat (limited to 'ext/mysqlnd/mysqlnd.c')
-rw-r--r--ext/mysqlnd/mysqlnd.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c
index 14b7df9784..822bc42841 100644
--- a/ext/mysqlnd/mysqlnd.c
+++ b/ext/mysqlnd/mysqlnd.c
@@ -174,6 +174,11 @@ MYSQLND_METHOD(mysqlnd_conn, free_contents)(MYSQLND *conn TSRMLS_DC)
mnd_pefree(conn->passwd, pers);
conn->passwd = NULL;
}
+ if (conn->connect_or_select_db) {
+ DBG_INF("Freeing connect_or_select_db");
+ mnd_pefree(conn->connect_or_select_db, pers);
+ conn->connect_or_select_db = NULL;
+ }
if (conn->unix_socket) {
DBG_INF("Freeing unix_socket");
mnd_pefree(conn->unix_socket, pers);
@@ -588,6 +593,7 @@ PHPAPI MYSQLND *mysqlnd_connect(MYSQLND *conn,
} else {
conn->scheme = transport;
}
+ conn->scheme_len = strlen(conn->scheme);
DBG_INF(conn->scheme);
conn->net.stream = php_stream_xport_create(conn->scheme, transport_len, streams_options, streams_flags,
hashed_details,
@@ -726,13 +732,18 @@ PHPAPI MYSQLND *mysqlnd_connect(MYSQLND *conn,
CONN_SET_STATE(conn, CONN_READY);
conn->user = pestrdup(user, conn->persistent);
+ conn->user_len = strlen(conn->user);
conn->passwd = pestrndup(passwd, passwd_len, conn->persistent);
+ conn->passwd_len = passwd_len;
conn->port = port;
+ conn->connect_or_select_db = pestrndup(db, db_len, conn->persistent);
+ conn->connect_or_select_db_len = db_len;
if (!unix_socket) {
char *p;
conn->host = pestrdup(host, conn->persistent);
+ conn->host_len = strlen(conn->host);
spprintf(&p, 0, "%s via TCP/IP", conn->host);
if (conn->persistent) {
conn->host_info = pestrdup(p, 1);
@@ -742,6 +753,7 @@ PHPAPI MYSQLND *mysqlnd_connect(MYSQLND *conn,
}
} else {
conn->unix_socket = pestrdup(socket, conn->persistent);
+ conn->unix_socket_len = strlen(conn->unix_socket);
conn->host_info = pestrdup("Localhost via UNIX socket", conn->persistent);
}
conn->client_flag = auth_packet->client_flags;
@@ -1282,7 +1294,12 @@ MYSQLND_METHOD(mysqlnd_conn, select_db)(MYSQLND * const conn,
a protocol of giving back -1. Thus we have to follow it :(
*/
SET_ERROR_AFF_ROWS(conn);
-
+ if (ret == PASS) {
+ if (conn->connect_or_select_db) {
+ pefree(conn->connect_or_select_db, conn->persistent);
+ }
+ conn->connect_or_select_db = pestrndup(db, db_len, conn->persistent);
+ }
DBG_RETURN(ret);
}
/* }}} */