summaryrefslogtreecommitdiff
path: root/ext/pdo/pdo.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pdo/pdo.c')
-rw-r--r--ext/pdo/pdo.c51
1 files changed, 17 insertions, 34 deletions
diff --git a/ext/pdo/pdo.c b/ext/pdo/pdo.c
index a66596ee54..1120f9a326 100644
--- a/ext/pdo/pdo.c
+++ b/ext/pdo/pdo.c
@@ -62,14 +62,6 @@ PDO_API zend_class_entry *php_pdo_get_exception(void) /* {{{ */
}
/* }}} */
-PDO_API char *php_pdo_str_tolower_dup(const char *src, int len) /* {{{ */
-{
- char *dest = emalloc(len + 1);
- zend_str_tolower_copy(dest, src, len);
- return dest;
-}
-/* }}} */
-
/* {{{ Return array of available PDO drivers */
PHP_FUNCTION(pdo_drivers)
{
@@ -80,7 +72,7 @@ PHP_FUNCTION(pdo_drivers)
array_init(return_value);
ZEND_HASH_FOREACH_PTR(&pdo_driver_hash, pdriver) {
- add_next_index_stringl(return_value, (char*)pdriver->driver_name, pdriver->driver_name_len);
+ add_next_index_stringl(return_value, pdriver->driver_name, pdriver->driver_name_len);
} ZEND_HASH_FOREACH_END();
}
/* }}} */
@@ -115,7 +107,7 @@ zend_module_entry pdo_module_entry = {
ZEND_GET_MODULE(pdo)
#endif
-PDO_API int php_pdo_register_driver(const pdo_driver_t *driver) /* {{{ */
+PDO_API zend_result php_pdo_register_driver(const pdo_driver_t *driver) /* {{{ */
{
if (driver->api_version != PDO_DRIVER_API) {
zend_error(E_ERROR, "PDO: driver %s requires PDO API version " ZEND_ULONG_FMT "; this is PDO version %d",
@@ -127,7 +119,7 @@ PDO_API int php_pdo_register_driver(const pdo_driver_t *driver) /* {{{ */
return FAILURE; /* NOTREACHED */
}
- return zend_hash_str_add_ptr(&pdo_driver_hash, (char*)driver->driver_name, driver->driver_name_len, (void*)driver) != NULL ? SUCCESS : FAILURE;
+ return zend_hash_str_add_ptr(&pdo_driver_hash, driver->driver_name, driver->driver_name_len, (void*)driver) != NULL ? SUCCESS : FAILURE;
}
/* }}} */
@@ -137,13 +129,13 @@ PDO_API void php_pdo_unregister_driver(const pdo_driver_t *driver) /* {{{ */
return;
}
- zend_hash_str_del(&pdo_driver_hash, (char*)driver->driver_name, driver->driver_name_len);
+ zend_hash_str_del(&pdo_driver_hash, driver->driver_name, driver->driver_name_len);
}
/* }}} */
pdo_driver_t *pdo_find_driver(const char *name, int namelen) /* {{{ */
{
- return zend_hash_str_find_ptr(&pdo_driver_hash, (char*)name, namelen);
+ return zend_hash_str_find_ptr(&pdo_driver_hash, name, namelen);
}
/* }}} */
@@ -248,8 +240,9 @@ PDO_API int php_pdo_parse_data_source(const char *data_source, zend_ulong data_s
}
/* }}} */
+/* TODO Refactor */
static const char digit_vec[] = "0123456789";
-PDO_API char *php_pdo_int64_to_str(pdo_int64_t i64) /* {{{ */
+PDO_API zend_string *php_pdo_int64_to_str(int64_t i64) /* {{{ */
{
char buffer[65];
char outbuf[65] = "";
@@ -257,25 +250,23 @@ PDO_API char *php_pdo_int64_to_str(pdo_int64_t i64) /* {{{ */
zend_long long_val;
char *dst = outbuf;
+ if (i64 == 0) {
+ return ZSTR_CHAR('0');
+ }
+
if (i64 < 0) {
i64 = -i64;
*dst++ = '-';
}
- if (i64 == 0) {
- *dst++ = '0';
- *dst++ = '\0';
- return estrdup(outbuf);
- }
-
p = &buffer[sizeof(buffer)-1];
*p = '\0';
- while ((pdo_uint64_t)i64 > (pdo_uint64_t)ZEND_LONG_MAX) {
- pdo_uint64_t quo = (pdo_uint64_t)i64 / (unsigned int)10;
+ while ((uint64_t)i64 > (uint64_t)ZEND_LONG_MAX) {
+ uint64_t quo = (uint64_t)i64 / (unsigned int)10;
unsigned int rem = (unsigned int)(i64 - quo*10U);
*--p = digit_vec[rem];
- i64 = (pdo_int64_t)quo;
+ i64 = (int64_t)quo;
}
long_val = (zend_long)i64;
while (long_val != 0) {
@@ -286,29 +277,21 @@ PDO_API char *php_pdo_int64_to_str(pdo_int64_t i64) /* {{{ */
while ((*dst++ = *p++) != 0)
;
*dst = '\0';
- return estrdup(outbuf);
+ return zend_string_init(outbuf, strlen(outbuf), 0);
}
/* }}} */
/* {{{ PHP_MINIT_FUNCTION */
PHP_MINIT_FUNCTION(pdo)
{
- zend_class_entry ce;
-
- if (FAILURE == pdo_sqlstate_init_error_table()) {
- return FAILURE;
- }
+ pdo_sqlstate_init_error_table();
zend_hash_init(&pdo_driver_hash, 0, NULL, NULL, 1);
le_ppdo = zend_register_list_destructors_ex(NULL, php_pdo_pdbh_dtor,
"PDO persistent database", module_number);
- INIT_CLASS_ENTRY(ce, "PDOException", NULL);
-
- pdo_exception_ce = zend_register_internal_class_ex(&ce, spl_ce_RuntimeException);
-
- zend_declare_property_null(pdo_exception_ce, "errorInfo", sizeof("errorInfo")-1, ZEND_ACC_PUBLIC);
+ pdo_exception_ce = register_class_PDOException(spl_ce_RuntimeException);
pdo_dbh_init();
pdo_stmt_init();