diff options
-rw-r--r-- | ext/mysql/php_mysql.c | 2 | ||||
-rw-r--r-- | ext/mysql/php_mysql.h | 115 | ||||
-rw-r--r-- | ext/mysql/php_mysql_structs.h | 151 | ||||
-rw-r--r-- | ext/mysqlnd/config.w32 | 36 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd_debug.c | 21 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd_debug.h | 14 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd_palloc.c | 6 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd_portability.h | 1 | ||||
-rw-r--r-- | ext/mysqlnd/mysqlnd_priv.h | 10 |
9 files changed, 200 insertions, 156 deletions
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c index f2acbff75b..b5511b625c 100644 --- a/ext/mysql/php_mysql.c +++ b/ext/mysql/php_mysql.c @@ -59,7 +59,7 @@ #endif #include "php_ini.h" -#include "php_mysql.h" +#include "php_mysql_structs.h" /* True globals, no need for thread safety */ static int le_result, le_link, le_plink; diff --git a/ext/mysql/php_mysql.h b/ext/mysql/php_mysql.h index ba906af333..9cc718898a 100644 --- a/ext/mysql/php_mysql.h +++ b/ext/mysql/php_mysql.h @@ -21,128 +21,13 @@ #ifndef PHP_MYSQL_H #define PHP_MYSQL_H -#ifdef PHP_WIN32 -#define PHP_MYSQL_API __declspec(dllexport) -#else -#define PHP_MYSQL_API -#endif - #if HAVE_MYSQL -#ifdef ZTS -#include "TSRM.h" -#endif - -#ifndef TRUE -#define TRUE 1 -#endif - -#ifndef FALSE -#define FALSE 0 -#endif - -#if defined(HAVE_MYSQLND) -#include "ext/mysqlnd/mysqlnd.h" -#include "ext/mysql/mysql_mysqlnd.h" -#else -#include <mysql.h> -#endif - -#if (MYSQL_VERSION_ID >= 40113 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50007 || HAVE_MYSQLND -#define MYSQL_HAS_SET_CHARSET -#endif - extern zend_module_entry mysql_module_entry; - #define mysql_module_ptr &mysql_module_entry -PHP_MINIT_FUNCTION(mysql); -PHP_RINIT_FUNCTION(mysql); -PHP_MSHUTDOWN_FUNCTION(mysql); -PHP_RSHUTDOWN_FUNCTION(mysql); -PHP_MINFO_FUNCTION(mysql); - -PHP_FUNCTION(mysql_connect); -PHP_FUNCTION(mysql_pconnect); -PHP_FUNCTION(mysql_close); -PHP_FUNCTION(mysql_select_db); -#if MYSQL_VERSION_ID < 40000 -PHP_FUNCTION(mysql_create_db); -PHP_FUNCTION(mysql_drop_db); -#endif -PHP_FUNCTION(mysql_query); -PHP_FUNCTION(mysql_unbuffered_query); -PHP_FUNCTION(mysql_db_query); -PHP_FUNCTION(mysql_list_dbs); -PHP_FUNCTION(mysql_list_tables); -PHP_FUNCTION(mysql_list_fields); -PHP_FUNCTION(mysql_list_processes); -PHP_FUNCTION(mysql_error); -PHP_FUNCTION(mysql_errno); -PHP_FUNCTION(mysql_affected_rows); -PHP_FUNCTION(mysql_insert_id); -PHP_FUNCTION(mysql_result); -PHP_FUNCTION(mysql_num_rows); -PHP_FUNCTION(mysql_num_fields); -PHP_FUNCTION(mysql_fetch_row); -PHP_FUNCTION(mysql_fetch_array); -PHP_FUNCTION(mysql_fetch_assoc); -PHP_FUNCTION(mysql_fetch_object); -PHP_FUNCTION(mysql_data_seek); -PHP_FUNCTION(mysql_fetch_lengths); -PHP_FUNCTION(mysql_fetch_field); -PHP_FUNCTION(mysql_field_seek); -PHP_FUNCTION(mysql_free_result); -PHP_FUNCTION(mysql_field_name); -PHP_FUNCTION(mysql_field_table); -PHP_FUNCTION(mysql_field_len); -PHP_FUNCTION(mysql_field_type); -PHP_FUNCTION(mysql_field_flags); -PHP_FUNCTION(mysql_escape_string); -PHP_FUNCTION(mysql_real_escape_string); -PHP_FUNCTION(mysql_get_client_info); -PHP_FUNCTION(mysql_get_host_info); -PHP_FUNCTION(mysql_get_proto_info); -PHP_FUNCTION(mysql_get_server_info); -PHP_FUNCTION(mysql_info); -PHP_FUNCTION(mysql_stat); -PHP_FUNCTION(mysql_thread_id); -PHP_FUNCTION(mysql_client_encoding); -PHP_FUNCTION(mysql_ping); -PHP_FUNCTION(mysql_set_charset); - -ZEND_BEGIN_MODULE_GLOBALS(mysql) - long default_link; - long num_links,num_persistent; - long max_links,max_persistent; - long allow_persistent; - long default_port; - char *default_host, *default_user, *default_password; - char *default_socket; - char *connect_error; - long connect_errno; - long connect_timeout; - long result_allocated; - long trace_mode; - long allow_local_infile; -#ifdef HAVE_MYSQLND - MYSQLND_THD_ZVAL_PCACHE *mysqlnd_thd_zval_cache; - MYSQLND_QCACHE *mysqlnd_qcache; - long cache_size; -#endif -ZEND_END_MODULE_GLOBALS(mysql) - -#ifdef ZTS -# define MySG(v) TSRMG(mysql_globals_id, zend_mysql_globals *, v) #else -# define MySG(v) (mysql_globals.v) -#endif - - -#else - #define mysql_module_ptr NULL - #endif #define phpext_mysql_ptr mysql_module_ptr diff --git a/ext/mysql/php_mysql_structs.h b/ext/mysql/php_mysql_structs.h new file mode 100644 index 0000000000..2591b78c51 --- /dev/null +++ b/ext/mysql/php_mysql_structs.h @@ -0,0 +1,151 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2007 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Zeev Suraski <zeev@zend.com> | + | Andrey Hristov <andrey@php.net> | + +----------------------------------------------------------------------+ +*/ + +/* $Id$ */ + +#ifndef PHP_MYSQL_STRUCTS_H +#define PHP_MYSQL_STRUCTS_H + +#ifdef PHP_WIN32 +#define PHP_MYSQL_API __declspec(dllexport) +#else +#define PHP_MYSQL_API +#endif + +#if HAVE_MYSQL + +#ifdef ZTS +#include "TSRM.h" +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#if defined(HAVE_MYSQLND) +#include "ext/mysqlnd/mysqlnd.h" +#include "ext/mysql/mysql_mysqlnd.h" +#else +#include <mysql.h> +#endif + +#if (MYSQL_VERSION_ID >= 40113 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50007 || HAVE_MYSQLND +#define MYSQL_HAS_SET_CHARSET +#endif + +extern zend_module_entry mysql_module_entry; + +#define mysql_module_ptr &mysql_module_entry + +PHP_MINIT_FUNCTION(mysql); +PHP_RINIT_FUNCTION(mysql); +PHP_MSHUTDOWN_FUNCTION(mysql); +PHP_RSHUTDOWN_FUNCTION(mysql); +PHP_MINFO_FUNCTION(mysql); + +PHP_FUNCTION(mysql_connect); +PHP_FUNCTION(mysql_pconnect); +PHP_FUNCTION(mysql_close); +PHP_FUNCTION(mysql_select_db); +#if MYSQL_VERSION_ID < 40000 +PHP_FUNCTION(mysql_create_db); +PHP_FUNCTION(mysql_drop_db); +#endif +PHP_FUNCTION(mysql_query); +PHP_FUNCTION(mysql_unbuffered_query); +PHP_FUNCTION(mysql_db_query); +PHP_FUNCTION(mysql_list_dbs); +PHP_FUNCTION(mysql_list_tables); +PHP_FUNCTION(mysql_list_fields); +PHP_FUNCTION(mysql_list_processes); +PHP_FUNCTION(mysql_error); +PHP_FUNCTION(mysql_errno); +PHP_FUNCTION(mysql_affected_rows); +PHP_FUNCTION(mysql_insert_id); +PHP_FUNCTION(mysql_result); +PHP_FUNCTION(mysql_num_rows); +PHP_FUNCTION(mysql_num_fields); +PHP_FUNCTION(mysql_fetch_row); +PHP_FUNCTION(mysql_fetch_array); +PHP_FUNCTION(mysql_fetch_assoc); +PHP_FUNCTION(mysql_fetch_object); +PHP_FUNCTION(mysql_data_seek); +PHP_FUNCTION(mysql_fetch_lengths); +PHP_FUNCTION(mysql_fetch_field); +PHP_FUNCTION(mysql_field_seek); +PHP_FUNCTION(mysql_free_result); +PHP_FUNCTION(mysql_field_name); +PHP_FUNCTION(mysql_field_table); +PHP_FUNCTION(mysql_field_len); +PHP_FUNCTION(mysql_field_type); +PHP_FUNCTION(mysql_field_flags); +PHP_FUNCTION(mysql_escape_string); +PHP_FUNCTION(mysql_real_escape_string); +PHP_FUNCTION(mysql_get_client_info); +PHP_FUNCTION(mysql_get_host_info); +PHP_FUNCTION(mysql_get_proto_info); +PHP_FUNCTION(mysql_get_server_info); +PHP_FUNCTION(mysql_info); +PHP_FUNCTION(mysql_stat); +PHP_FUNCTION(mysql_thread_id); +PHP_FUNCTION(mysql_client_encoding); +PHP_FUNCTION(mysql_ping); +PHP_FUNCTION(mysql_set_charset); + +ZEND_BEGIN_MODULE_GLOBALS(mysql) + long default_link; + long num_links,num_persistent; + long max_links,max_persistent; + long allow_persistent; + long default_port; + char *default_host, *default_user, *default_password; + char *default_socket; + char *connect_error; + long connect_errno; + long connect_timeout; + long result_allocated; + long trace_mode; + long allow_local_infile; +#ifdef HAVE_MYSQLND + MYSQLND_THD_ZVAL_PCACHE *mysqlnd_thd_zval_cache; + MYSQLND_QCACHE *mysqlnd_qcache; + long cache_size; +#endif +ZEND_END_MODULE_GLOBALS(mysql) + +#ifdef ZTS +# define MySG(v) TSRMG(mysql_globals_id, zend_mysql_globals *, v) +#else +# define MySG(v) (mysql_globals.v) +#endif + + +#else + +#define mysql_module_ptr NULL + +#endif + +#define phpext_mysql_ptr mysql_module_ptr + +#endif /* PHP_MYSQL_STRUCTS_H */ diff --git a/ext/mysqlnd/config.w32 b/ext/mysqlnd/config.w32 index 9174fe11d3..99a702f1f0 100644 --- a/ext/mysqlnd/config.w32 +++ b/ext/mysqlnd/config.w32 @@ -1,26 +1,20 @@ // $Id$ // vim:ft=javascript -ARG_WITH("mysqli", "MySQLi support", "no"); -ARG_ENABLE("mysqlnd", "MySQLi with mysqlnd support", "no"); - -if (PHP_MYSQLI == "mysqlnd" || PHP_MYSQL == "mysqlnd") { +mysqld_source = ""; +if (CHECK_LIB("ws2_32.lib", "mysqlnd")) { mysqlnd_source = - "mysqlnd.c " + - "mysqlnd_debug.c " + - "mysqlnd_charset.c " + - "mysqlnd_loaddata.c " + - "mysqlnd_palloc.c " + - "mysqlnd_ps.c " + - "mysqlnd_ps_codec.c " + - "mysqlnd_qcache.c " + - "mysqlnd_result.c " + - "mysqlnd_result_meta.c " + - "mysqlnd_statistics.c " + - "mysqlnd_wireprotocol.c"; - if (CHECK_LIB("ws2_32.lib", "mysqlnd")) { - EXTENSION("mysqlnd", mysqlnd_source); - AC_DEFINE('HAVE_MYSQLND', 1, 'MySQL native driver support enabled'); - } + "mysqlnd.c " + + "mysqlnd_debug.c " + + "mysqlnd_charset.c " + + "mysqlnd_loaddata.c " + + "mysqlnd_palloc.c " + + "mysqlnd_ps.c " + + "mysqlnd_ps_codec.c " + + "mysqlnd_qcache.c " + + "mysqlnd_result.c " + + "mysqlnd_result_meta.c " + + "mysqlnd_statistics.c " + + "mysqlnd_wireprotocol.c"; + EXTENSION("mysqlnd", mysqlnd_source, false); } - diff --git a/ext/mysqlnd/mysqlnd_debug.c b/ext/mysqlnd/mysqlnd_debug.c index fedfccf651..3dc3f592a6 100644 --- a/ext/mysqlnd/mysqlnd_debug.c +++ b/ext/mysqlnd/mysqlnd_debug.c @@ -86,14 +86,14 @@ MYSQLND_METHOD(mysqlnd_debug, log)(MYSQLND_DEBUG * self, unsigned int level, const char * type, const char * message) { char pipe_buffer[512]; - MYSQLND_ZTS(self); enum_func_status ret; int i; char * message_line; - size_t message_line_len; + uint message_line_len; unsigned int flags = self->flags; char pid_buffer[10], time_buffer[30], file_buffer[200], line_buffer[6], level_buffer[7]; + MYSQLND_ZTS(self); if (!self->stream) { if (FAIL == self->m->open(self, FALSE)) { @@ -185,15 +185,15 @@ MYSQLND_METHOD(mysqlnd_debug, log_va)(MYSQLND_DEBUG *self, const char *format, ...) { char pipe_buffer[512]; - MYSQLND_ZTS(self); int i; enum_func_status ret; char * message_line, *buffer; - size_t message_line_len; + uint message_line_len; va_list args; unsigned int flags = self->flags; char pid_buffer[10], time_buffer[30], file_buffer[200], line_buffer[6], level_buffer[7]; + MYSQLND_ZTS(self); if (!self->stream) { if (FAIL == self->m->open(self, FALSE)) { @@ -289,7 +289,7 @@ MYSQLND_METHOD(mysqlnd_debug, log_va)(MYSQLND_DEBUG *self, static zend_bool MYSQLND_METHOD(mysqlnd_debug, func_enter)(MYSQLND_DEBUG * self, unsigned int line, const char * const file, - char * func_name, size_t func_name_len) + char * func_name, uint func_name_len) { if ((self->flags & MYSQLND_DEBUG_DUMP_TRACE) == 0 || self->file_name == NULL) { return FALSE; @@ -396,7 +396,7 @@ enum mysqlnd_debug_parser_state static void MYSQLND_METHOD(mysqlnd_debug, set_mode)(MYSQLND_DEBUG * self, const char * const mode) { - size_t mode_len = strlen(mode), i; + uint mode_len = strlen(mode), i; enum mysqlnd_debug_parser_state state = PARSER_WAIT_MODIFIER; self->flags = 0; @@ -460,7 +460,7 @@ MYSQLND_METHOD(mysqlnd_debug, set_mode)(MYSQLND_DEBUG * self, const char * const if (mode[j] == ',' || mode[j] == ':') { if (j > i + 2) { char func_name[1024]; - size_t func_name_len = MIN(sizeof(func_name) - 1, j - i - 1); + uint func_name_len = MIN(sizeof(func_name) - 1, j - i - 1); memcpy(func_name, mode + i + 1, func_name_len); func_name[func_name_len] = '\0'; @@ -630,6 +630,13 @@ void _mysqlnd_debug(const char *mode TSRMLS_DC) /* }}} */ +#if ZEND_DEBUG +#else +#define __zend_filename "/unknown/unknown" +#define __zend_lineno 0 +#endif + + /* {{{ _mysqlnd_emalloc */ void * _mysqlnd_emalloc(size_t size MYSQLND_MEM_D) { diff --git a/ext/mysqlnd/mysqlnd_debug.h b/ext/mysqlnd/mysqlnd_debug.h index e60a6d912d..120d74aaa5 100644 --- a/ext/mysqlnd/mysqlnd_debug.h +++ b/ext/mysqlnd/mysqlnd_debug.h @@ -36,7 +36,7 @@ struct st_mysqlnd_debug_methods enum_func_status (*log_va)(MYSQLND_DEBUG *self, unsigned int line, const char * const file, unsigned int level, const char * type, const char *format, ...); zend_bool (*func_enter)(MYSQLND_DEBUG *self, unsigned int line, const char * const file, - char * func_name, size_t func_name_len); + char * func_name, uint func_name_len); enum_func_status (*func_leave)(MYSQLND_DEBUG *self, unsigned int line, const char * const file); enum_func_status (*close)(MYSQLND_DEBUG *self); enum_func_status (*free)(MYSQLND_DEBUG *self); @@ -91,15 +91,13 @@ char * mysqlnd_get_backtrace(TSRMLS_D); #else -#define DBG_INF(msg) -#define DBG_ERR(msg) -#define DBG_INF_FMT(...) -#define DBG_ERR_FMT(...) - -#define DBG_ENTER(func_name) +static inline void DBG_INF(char *msg) {} +static inline void DBG_ERR(char *msg) {} +static inline void DBG_INF_FMT(char *format, ...) {} +static inline void DBG_ERR_FMT(char *format, ...) {} +static inline void DBG_ENTER(char *func_name) {} #define DBG_RETURN(value) return (value) #define DBG_VOID_RETURN return; - #endif diff --git a/ext/mysqlnd/mysqlnd_palloc.c b/ext/mysqlnd/mysqlnd_palloc.c index 819c9def3e..d03af9cc18 100644 --- a/ext/mysqlnd/mysqlnd_palloc.c +++ b/ext/mysqlnd/mysqlnd_palloc.c @@ -359,7 +359,7 @@ void mysqlnd_palloc_zval_ptr_dtor(zval **zv, MYSQLND_THD_ZVAL_PCACHE * const thd */ if (type == MYSQLND_RES_PS_BUF || type == MYSQLND_RES_PS_UNBUF) { ; /* do nothing, zval_ptr_dtor will do the job*/ - } else if (Z_REFCOUNT_P(*zv) > 1) { + } else if (Z_REFCOUNT_PP(zv) > 1) { /* Not a prepared statement, then we have to call copy_ctor and then zval_ptr_dtor() @@ -389,7 +389,7 @@ void mysqlnd_palloc_zval_ptr_dtor(zval **zv, MYSQLND_THD_ZVAL_PCACHE * const thd /* The zval is from our cache */ /* refcount is always > 1, because we call Z_ADDREF_P(). Thus test refcount > 2 */ - if (Z_REFCOUNT_P(*zv) > 2) { + if (Z_REFCOUNT_PP(zv) > 2) { /* Because the zval is first element in mysqlnd_zval structure, then we can do upcasting from zval to mysqlnd_zval here. Because we know that this @@ -435,7 +435,7 @@ void mysqlnd_palloc_zval_ptr_dtor(zval **zv, MYSQLND_THD_ZVAL_PCACHE * const thd ++cache->put_hits; ++cache->free_items; ((mysqlnd_zval *)*zv)->point_type = MYSQLND_POINTS_FREE; - Z_DELREF_P(*zv); /* Make it 1 */ + Z_DELREF_PP(zv); /* Make it 1 */ ZVAL_NULL(*zv); #ifdef ZTS memset(&((mysqlnd_zval *)*zv)->thread_id, 0, sizeof(THREAD_T)); diff --git a/ext/mysqlnd/mysqlnd_portability.h b/ext/mysqlnd/mysqlnd_portability.h index 20a2a48c43..37aeb67e21 100644 --- a/ext/mysqlnd/mysqlnd_portability.h +++ b/ext/mysqlnd/mysqlnd_portability.h @@ -280,7 +280,6 @@ typedef union { (((uint32) ((uchar) (A)[1])) << 8) +\ (((uint32) ((uchar) (A)[2])) << 16) +\ (((uint32) ((uchar) (A)[3])) << 24)) -#undef bit_uint5korr #define bit_uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ (((uint32) ((uchar) (A)[1])) << 8) +\ (((uint32) ((uchar) (A)[2])) << 16) +\ diff --git a/ext/mysqlnd/mysqlnd_priv.h b/ext/mysqlnd/mysqlnd_priv.h index 83bc0665cb..cd3f11cbb4 100644 --- a/ext/mysqlnd/mysqlnd_priv.h +++ b/ext/mysqlnd/mysqlnd_priv.h @@ -23,6 +23,16 @@ #ifndef MYSQLND_PRIV_H #define MYSQLND_PRIV_H +#ifndef Z_ADDREF_P +/* PHP 5.2, old GC */ +#define Z_ADDREF_P(pz) (++(pz)->refcount) +#define Z_DELREF_P(pz) (--(pz)->refcount) +#define Z_REFCOUNT_P(pz) ((pz)->refcount) +#define Z_SET_REFCOUNT_P(pz, rc) ((pz)->refcount = rc) +#define Z_REFCOUNT_PP(ppz) Z_REFCOUNT_P(*(ppz)) +#define Z_DELREF_PP(ppz) Z_DELREF_P(*(ppz)) +#endif + #ifdef ZTS #include "TSRM.h" #endif |