From: Andrey Hristov Date: Thu, 22 Oct 2009 17:07:55 +0000 (+0000) Subject: Have the lengths also to skip many calls to strlen X-Git-Tag: php-5.3.2RC1~320 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f2814dd0dfb81ef60b31f2b1d711aed6df08e892;p=php Have the lengths also to skip many calls to strlen --- 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); } /* }}} */ diff --git a/ext/mysqlnd/mysqlnd_structs.h b/ext/mysqlnd/mysqlnd_structs.h index a5ba59e6ea..b54ea7fa7a 100644 --- a/ext/mysqlnd/mysqlnd_structs.h +++ b/ext/mysqlnd/mysqlnd_structs.h @@ -393,17 +393,23 @@ struct st_mysqlnd_connection /* Information related */ char *host; + unsigned int host_len; char *unix_socket; + unsigned int unix_socket_len; char *user; + unsigned int user_len; char *passwd; - unsigned int *passwd_len; + unsigned int passwd_len; char *scheme; + unsigned int scheme_len; uint64_t thread_id; char *server_version; char *host_info; unsigned char *scramble; const MYSQLND_CHARSET *charset; const MYSQLND_CHARSET *greet_charset; + char *connect_or_select_db; + unsigned int connect_or_select_db_len; MYSQLND_INFILE infile; unsigned int protocol_version; unsigned long max_packet_size;