diff options
Diffstat (limited to 'ext/pdo/pdo.c')
-rw-r--r-- | ext/pdo/pdo.c | 51 |
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(); |