From: Xinchen Hui Date: Thu, 15 May 2014 14:33:13 +0000 (+0800) Subject: Made a little clean up X-Git-Tag: POST_PHPNG_MERGE~357^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=49df66be014256a648c2d7970947ae03bcf00c22;p=php Made a little clean up --- diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index 1a2aa39d94..2ff3be7cbb 100644 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -1529,18 +1529,6 @@ static void dbh_free(pdo_dbh_t *dbh TSRMLS_DC) //???pefree(dbh, dbh->is_persistent); } -PDO_API void php_pdo_dbh_addref(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */ -{ - dbh->refcount++; -} -/* }}} */ - -PDO_API void php_pdo_dbh_delref(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */ -{ - dbh_free(dbh TSRMLS_CC); -} -/* }}} */ - static void pdo_dbh_free_storage(zend_object *std TSRMLS_DC) { pdo_dbh_t *dbh = php_pdo_dbh_fetch_object(std); diff --git a/ext/pdo/pdo_sqlstate.c b/ext/pdo/pdo_sqlstate.c index 4d6a01011c..e3585844c6 100644 --- a/ext/pdo/pdo_sqlstate.c +++ b/ext/pdo/pdo_sqlstate.c @@ -319,7 +319,7 @@ int pdo_sqlstate_init_error_table(void) for (i = 0; i < sizeof(err_initializer)/sizeof(err_initializer[0]); i++) { info = &err_initializer[i]; - zend_hash_str_add_ptr(&err_hash, info->state, sizeof(info->state), info); + zend_hash_str_add_ptr(&err_hash, info->state, sizeof(info->state), (void *)info); } return SUCCESS; diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c index 48320d3148..2b7f217418 100644 --- a/ext/pdo_pgsql/pgsql_driver.c +++ b/ext/pdo_pgsql/pgsql_driver.c @@ -137,13 +137,12 @@ static size_t pgsql_lob_read(php_stream *stream, char *buf, size_t count TSRMLS_ static int pgsql_lob_close(php_stream *stream, int close_handle TSRMLS_DC) { struct pdo_pgsql_lob_self *self = (struct pdo_pgsql_lob_self*)stream->abstract; - pdo_dbh_t *dbh = self->dbh; if (close_handle) { lo_close(self->conn, self->lfd); } + zval_ptr_dtor(&self->dbh); efree(self); - php_pdo_dbh_delref(dbh TSRMLS_CC); return 0; } @@ -173,13 +172,13 @@ php_stream_ops pdo_pgsql_lob_stream_ops = { NULL }; -php_stream *pdo_pgsql_create_lob_stream(pdo_dbh_t *dbh, int lfd, Oid oid TSRMLS_DC) +php_stream *pdo_pgsql_create_lob_stream(zval *dbh, int lfd, Oid oid TSRMLS_DC) { php_stream *stm; struct pdo_pgsql_lob_self *self = ecalloc(1, sizeof(*self)); - pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data; + pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)(Z_PDO_DBH_P(dbh))->driver_data; - self->dbh = dbh; + ZVAL_COPY_VALUE(&self->dbh, dbh); self->lfd = lfd; self->oid = oid; self->conn = H->server; @@ -187,7 +186,7 @@ php_stream *pdo_pgsql_create_lob_stream(pdo_dbh_t *dbh, int lfd, Oid oid TSRMLS_ stm = php_stream_alloc(&pdo_pgsql_lob_stream_ops, self, 0, "r+b"); if (stm) { - php_pdo_dbh_addref(dbh TSRMLS_CC); + Z_ADDREF_P(dbh); return stm; } @@ -568,11 +567,9 @@ static PHP_METHOD(PDO, pgsqlCopyFromArray) int command_failed = 0; int buffer_len = 0; zval *tmp; - HashPosition pos; PQclear(pgsql_result); - zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(pg_rows), &pos); - while ((tmp = zend_hash_get_current_data_ex(Z_ARRVAL_P(pg_rows), &pos)) != NULL) { + ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(pg_rows), tmp) { int query_len; convert_to_string_ex(tmp); @@ -592,8 +589,7 @@ static PHP_METHOD(PDO, pgsqlCopyFromArray) PDO_HANDLE_DBH_ERR(); RETURN_FALSE; } - zend_hash_move_forward_ex(Z_ARRVAL_P(pg_rows), &pos); - } + } ZEND_HASH_FOREACH_END(); if (query) { efree(query); } @@ -959,7 +955,7 @@ static PHP_METHOD(PDO, pgsqlLOBOpen) lfd = lo_open(H->server, oid, mode); if (lfd >= 0) { - php_stream *stream = pdo_pgsql_create_lob_stream(dbh, lfd, oid TSRMLS_CC); + php_stream *stream = pdo_pgsql_create_lob_stream(getThis(), lfd, oid TSRMLS_CC); if (stream) { php_stream_to_zval(stream, return_value); return; diff --git a/ext/pdo_pgsql/pgsql_statement.c b/ext/pdo_pgsql/pgsql_statement.c index 6cebb7d9f2..bfceaf4949 100644 --- a/ext/pdo_pgsql/pgsql_statement.c +++ b/ext/pdo_pgsql/pgsql_statement.c @@ -323,12 +323,11 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data * S->param_types[param->paramno] = OIDOID; return 1; } else { - int len; - - SEPARATE_ZVAL_IF_NOT_REF(¶m->parameter); - Z_TYPE_INFO(param->parameter) = IS_STRING; - - if ((Z_STR(param->parameter) = php_stream_copy_to_mem(stm, PHP_STREAM_COPY_ALL, 0)) == NULL) { + zend_string *str = php_stream_copy_to_mem(stm, PHP_STREAM_COPY_ALL, 0); + if (str != NULL) { + SEPARATE_ZVAL_IF_NOT_REF(¶m->parameter); + ZVAL_STR(¶m->parameter, str); + } else { ZVAL_EMPTY_STRING(¶m->parameter); } } @@ -449,8 +448,8 @@ static int pgsql_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC) case OIDOID: /* did the user bind the column as a LOB ? */ if (stmt->bound_columns && ( - (param = zend_hash_index_find(stmt->bound_columns, colno)) != NULL || - (param = zend_hash_str_find(stmt->bound_columns, cols[colno].name, cols[colno].namelen)) != NULL)) { + (param = zend_hash_index_find_ptr(stmt->bound_columns, colno)) != NULL || + (param = zend_hash_str_find_ptr(stmt->bound_columns, cols[colno].name, cols[colno].namelen)) != NULL)) { if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB) { cols[colno].param_type = PDO_PARAM_LOB; @@ -523,7 +522,7 @@ static int pgsql_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned Oid oid = (Oid)strtoul(*ptr, &end_ptr, 10); int loid = lo_open(S->H->server, oid, INV_READ); if (loid >= 0) { - *ptr = (char*)pdo_pgsql_create_lob_stream(stmt->dbh, loid, oid TSRMLS_CC); + *ptr = (char*)pdo_pgsql_create_lob_stream(&stmt->database_object_handle, loid, oid TSRMLS_CC); *len = 0; return *ptr ? 1 : 0; } diff --git a/ext/pdo_pgsql/php_pdo_pgsql_int.h b/ext/pdo_pgsql/php_pdo_pgsql_int.h index 1fedababd2..4d0652049e 100644 --- a/ext/pdo_pgsql/php_pdo_pgsql_int.h +++ b/ext/pdo_pgsql/php_pdo_pgsql_int.h @@ -95,7 +95,7 @@ enum { }; struct pdo_pgsql_lob_self { - pdo_dbh_t *dbh; + zval dbh; PGconn *conn; int lfd; Oid oid; @@ -109,7 +109,7 @@ enum pdo_pgsql_specific_constants { PGSQL_TRANSACTION_UNKNOWN = PQTRANS_UNKNOWN }; -php_stream *pdo_pgsql_create_lob_stream(pdo_dbh_t *stmt, int lfd, Oid oid TSRMLS_DC); +php_stream *pdo_pgsql_create_lob_stream(zval *pdh, int lfd, Oid oid TSRMLS_DC); extern php_stream_ops pdo_pgsql_lob_stream_ops; #endif /* PHP_PDO_PGSQL_INT_H */