diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2014-02-17 17:59:18 +0400 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2014-02-17 17:59:18 +0400 |
| commit | 2b9b9afa7a9a66f9c80013ce4121183bdff434e8 (patch) | |
| tree | 6fa09b93653af14de10c02215632e5cc458cf60a /ext/spl | |
| parent | 50661690709630bd5dcea599bb0f276083292921 (diff) | |
| download | php-git-2b9b9afa7a9a66f9c80013ce4121183bdff434e8.tar.gz | |
Use better data structures (incomplete)
Diffstat (limited to 'ext/spl')
| -rw-r--r-- | ext/spl/php_spl.c | 4 | ||||
| -rw-r--r-- | ext/spl/spl_array.c | 9 | ||||
| -rw-r--r-- | ext/spl/spl_directory.c | 47 | ||||
| -rw-r--r-- | ext/spl/spl_dllist.c | 15 | ||||
| -rw-r--r-- | ext/spl/spl_functions.c | 8 | ||||
| -rw-r--r-- | ext/spl/spl_functions.h | 2 | ||||
| -rw-r--r-- | ext/spl/spl_heap.c | 21 | ||||
| -rw-r--r-- | ext/spl/spl_observer.c | 9 |
8 files changed, 54 insertions, 61 deletions
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c index 35b6e549f2..238b7574a0 100644 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@ -573,7 +573,7 @@ PHP_FUNCTION(spl_autoload_register) if (obj_ptr && !(alfi.func_ptr->common.fn_flags & ZEND_ACC_STATIC)) { /* add object id to the hash to ensure uniqueness, for more reference look at bug #40091 */ - STR_EREALLOC(lc_name, lc_name->len + 2 + sizeof(zend_uint)); + STR_REALLOC(lc_name, lc_name->len + 2 + sizeof(zend_uint), 0); memcpy(lc_name->val + lc_name->len - 2 - sizeof(zend_uint), &Z_OBJ_HANDLE_P(obj_ptr), sizeof(zend_uint)); lc_name->val[lc_name->len] = '\0'; alfi.obj = obj_ptr; @@ -685,7 +685,7 @@ PHP_FUNCTION(spl_autoload_unregister) /* remove specific */ success = zend_hash_del(SPL_G(autoload_functions), lc_name); if (success != SUCCESS && obj_ptr) { - STR_EREALLOC(lc_name, lc_name->len + 2 + sizeof(zend_uint)); + STR_REALLOC(lc_name, lc_name->len + 2 + sizeof(zend_uint), 0); memcpy(lc_name->val + lc_name->len - 2 - sizeof(zend_uint), &Z_OBJ_HANDLE_P(obj_ptr), sizeof(zend_uint)); lc_name->val[lc_name->len] = '\0'; success = zend_hash_del(SPL_G(autoload_functions), lc_name); diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 903ca7882f..ec28e2e4fd 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -784,8 +784,7 @@ static HashTable *spl_array_get_properties(zval *object TSRMLS_DC) /* {{{ */ static HashTable* spl_array_get_debug_info(zval *obj, int *is_temp TSRMLS_DC) /* {{{ */ { zval *storage; - int name_len; - char *zname; + zend_string *zname; zend_class_entry *base; spl_array_object *intern = (spl_array_object*)Z_OBJ_P(obj); @@ -811,9 +810,9 @@ static HashTable* spl_array_get_debug_info(zval *obj, int *is_temp TSRMLS_DC) /* zval_add_ref(storage); base = (Z_OBJ_HT_P(obj) == &spl_handler_ArrayIterator) ? spl_ce_ArrayIterator : spl_ce_ArrayObject; - zname = spl_gen_private_prop_name(base, "storage", sizeof("storage")-1, &name_len TSRMLS_CC); - zend_symtable_str_update(intern->debug_info, zname, name_len, storage); - efree(zname); + zname = spl_gen_private_prop_name(base, "storage", sizeof("storage")-1 TSRMLS_CC); + zend_symtable_update(intern->debug_info, zname, storage); + STR_RELEASE(zname); } return intern->debug_info; diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index f2093d9cb4..0d2621c6ed 100644 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -586,8 +586,9 @@ static HashTable *spl_filesystem_object_get_debug_info(zval *obj, int *is_temp T spl_filesystem_object *intern = (spl_filesystem_object*)Z_OBJ_P(obj); zval tmp; HashTable *rv; - char *pnstr, *path; - int pnlen, path_len; + zend_string *pnstr; + char *path; + int path_len; char stmp[2]; *is_temp = 1; @@ -601,14 +602,14 @@ static HashTable *spl_filesystem_object_get_debug_info(zval *obj, int *is_temp T zend_hash_copy(rv, intern->std.properties, (copy_ctor_func_t) zval_add_ref); - pnstr = spl_gen_private_prop_name(spl_ce_SplFileInfo, "pathName", sizeof("pathName")-1, &pnlen TSRMLS_CC); + pnstr = spl_gen_private_prop_name(spl_ce_SplFileInfo, "pathName", sizeof("pathName")-1 TSRMLS_CC); path = spl_filesystem_object_get_pathname(intern, &path_len TSRMLS_CC); ZVAL_STRINGL(&tmp, path, path_len); - zend_symtable_str_update(rv, pnstr, pnlen, &tmp); - efree(pnstr); + zend_symtable_update(rv, pnstr, &tmp); + STR_RELEASE(pnstr); if (intern->file_name) { - pnstr = spl_gen_private_prop_name(spl_ce_SplFileInfo, "fileName", sizeof("fileName")-1, &pnlen TSRMLS_CC); + pnstr = spl_gen_private_prop_name(spl_ce_SplFileInfo, "fileName", sizeof("fileName")-1 TSRMLS_CC); spl_filesystem_object_get_path(intern, &path_len TSRMLS_CC); if (path_len && path_len < intern->file_name_len) { @@ -616,45 +617,45 @@ static HashTable *spl_filesystem_object_get_debug_info(zval *obj, int *is_temp T } else { ZVAL_STRINGL(&tmp, intern->file_name, intern->file_name_len); } - zend_symtable_str_update(rv, pnstr, pnlen, &tmp); - efree(pnstr); + zend_symtable_update(rv, pnstr, &tmp); + STR_RELEASE(pnstr); } if (intern->type == SPL_FS_DIR) { #ifdef HAVE_GLOB - pnstr = spl_gen_private_prop_name(spl_ce_DirectoryIterator, "glob", sizeof("glob")-1, &pnlen TSRMLS_CC); + pnstr = spl_gen_private_prop_name(spl_ce_DirectoryIterator, "glob", sizeof("glob")-1 TSRMLS_CC); if (php_stream_is(intern->u.dir.dirp ,&php_glob_stream_ops)) { ZVAL_STRINGL(&tmp, intern->_path, intern->_path_len); } else { ZVAL_BOOL(&tmp, 0); } - zend_symtable_str_update(rv, pnstr, pnlen, &tmp); - efree(pnstr); + zend_symtable_update(rv, pnstr, &tmp); + STR_RELEASE(pnstr); #endif - pnstr = spl_gen_private_prop_name(spl_ce_RecursiveDirectoryIterator, "subPathName", sizeof("subPathName")-1, &pnlen TSRMLS_CC); + pnstr = spl_gen_private_prop_name(spl_ce_RecursiveDirectoryIterator, "subPathName", sizeof("subPathName")-1 TSRMLS_CC); if (intern->u.dir.sub_path) { ZVAL_STRINGL(&tmp, intern->u.dir.sub_path, intern->u.dir.sub_path_len); } else { ZVAL_STRINGL(&tmp, "", 0); } - zend_symtable_str_update(rv, pnstr, pnlen, &tmp); - efree(pnstr); + zend_symtable_update(rv, pnstr, &tmp); + STR_RELEASE(pnstr); } if (intern->type == SPL_FS_FILE) { - pnstr = spl_gen_private_prop_name(spl_ce_SplFileObject, "openMode", sizeof("openMode")-1, &pnlen TSRMLS_CC); + pnstr = spl_gen_private_prop_name(spl_ce_SplFileObject, "openMode", sizeof("openMode")-1 TSRMLS_CC); ZVAL_STRINGL(&tmp, intern->u.file.open_mode, intern->u.file.open_mode_len); - zend_symtable_str_update(rv, pnstr, pnlen, &tmp); - efree(pnstr); + zend_symtable_update(rv, pnstr, &tmp); + STR_RELEASE(pnstr); stmp[1] = '\0'; stmp[0] = intern->u.file.delimiter; - pnstr = spl_gen_private_prop_name(spl_ce_SplFileObject, "delimiter", sizeof("delimiter")-1, &pnlen TSRMLS_CC); + pnstr = spl_gen_private_prop_name(spl_ce_SplFileObject, "delimiter", sizeof("delimiter")-1 TSRMLS_CC); ZVAL_STRINGL(&tmp, stmp, 1); - zend_symtable_str_update(rv, pnstr, pnlen, &tmp); - efree(pnstr); + zend_symtable_update(rv, pnstr, &tmp); + STR_RELEASE(pnstr); stmp[0] = intern->u.file.enclosure; - pnstr = spl_gen_private_prop_name(spl_ce_SplFileObject, "enclosure", sizeof("enclosure")-1, &pnlen TSRMLS_CC); + pnstr = spl_gen_private_prop_name(spl_ce_SplFileObject, "enclosure", sizeof("enclosure")-1 TSRMLS_CC); ZVAL_STRINGL(&tmp, stmp, 1); - zend_symtable_str_update(rv, pnstr, pnlen, &tmp); - efree(pnstr); + zend_symtable_update(rv, pnstr, &tmp); + STR_RELEASE(pnstr); } return rv; diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c index 1fc4f13cad..35fa40a7c1 100644 --- a/ext/spl/spl_dllist.c +++ b/ext/spl/spl_dllist.c @@ -500,8 +500,7 @@ static HashTable* spl_dllist_object_get_debug_info(zval *obj, int *is_temp TSRML spl_dllist_object *intern = (spl_dllist_object*)Z_OBJ_P(obj); spl_ptr_llist_element *current = intern->llist->head, *next; zval tmp, dllist_array; - char *pnstr; - int pnlen; + zend_string *pnstr; int i = 0; *is_temp = 0; @@ -518,10 +517,10 @@ static HashTable* spl_dllist_object_get_debug_info(zval *obj, int *is_temp TSRML } zend_hash_copy(intern->debug_info, intern->std.properties, (copy_ctor_func_t) zval_add_ref); - pnstr = spl_gen_private_prop_name(spl_ce_SplDoublyLinkedList, "flags", sizeof("flags")-1, &pnlen TSRMLS_CC); + pnstr = spl_gen_private_prop_name(spl_ce_SplDoublyLinkedList, "flags", sizeof("flags")-1 TSRMLS_CC); ZVAL_LONG(&tmp, intern->flags); - zend_hash_str_add(intern->debug_info, pnstr, pnlen, &tmp); - efree(pnstr); + zend_hash_add(intern->debug_info, pnstr, &tmp); + STR_RELEASE(pnstr); array_init(&dllist_array); @@ -535,9 +534,9 @@ static HashTable* spl_dllist_object_get_debug_info(zval *obj, int *is_temp TSRML current = next; } - pnstr = spl_gen_private_prop_name(spl_ce_SplDoublyLinkedList, "dllist", sizeof("dllist")-1, &pnlen TSRMLS_CC); - zend_hash_str_add(intern->debug_info, pnstr, pnlen, &dllist_array); - efree(pnstr); + pnstr = spl_gen_private_prop_name(spl_ce_SplDoublyLinkedList, "dllist", sizeof("dllist")-1 TSRMLS_CC); + zend_hash_add(intern->debug_info, pnstr, &dllist_array); + STR_RELEASE(pnstr); } return intern->debug_info; diff --git a/ext/spl/spl_functions.c b/ext/spl/spl_functions.c index e3cf1323c3..97a9509caa 100644 --- a/ext/spl/spl_functions.c +++ b/ext/spl/spl_functions.c @@ -133,13 +133,9 @@ int spl_add_classes(zend_class_entry *pce, zval *list, int sub, int allow, int c } /* }}} */ -char * spl_gen_private_prop_name(zend_class_entry *ce, char *prop_name, int prop_len, int *name_len TSRMLS_DC) /* {{{ */ +zend_string * spl_gen_private_prop_name(zend_class_entry *ce, char *prop_name, int prop_len TSRMLS_DC) /* {{{ */ { - char *rv; - - zend_mangle_property_name(&rv, name_len, ce->name->val, ce->name->len, prop_name, prop_len, 0); - - return rv; + return zend_mangle_property_name(ce->name->val, ce->name->len, prop_name, prop_len, 0); } /* }}} */ diff --git a/ext/spl/spl_functions.h b/ext/spl/spl_functions.h index a15da36357..1d116ff783 100644 --- a/ext/spl/spl_functions.h +++ b/ext/spl/spl_functions.h @@ -66,7 +66,7 @@ void spl_add_traits(zval * list, zend_class_entry * pce, int allow, int ce_flags int spl_add_classes(zend_class_entry *pce, zval *list, int sub, int allow, int ce_flags TSRMLS_DC); /* caller must efree(return) */ -char * spl_gen_private_prop_name(zend_class_entry *ce, char *prop_name, int prop_len, int *name_len TSRMLS_DC); +zend_string *spl_gen_private_prop_name(zend_class_entry *ce, char *prop_name, int prop_len TSRMLS_DC); #define SPL_ME(class_name, function_name, arg_info, flags) \ PHP_ME( spl_ ## class_name, function_name, arg_info, flags) diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c index 1520bfb401..45b50c2d25 100644 --- a/ext/spl/spl_heap.c +++ b/ext/spl/spl_heap.c @@ -508,8 +508,7 @@ static int spl_heap_object_count_elements(zval *object, long *count TSRMLS_DC) / static HashTable* spl_heap_object_get_debug_info_helper(zend_class_entry *ce, zval *obj, int *is_temp TSRMLS_DC) { /* {{{ */ spl_heap_object *intern = (spl_heap_object*)Z_OBJ_P(obj); zval tmp, heap_array; - char *pnstr; - int pnlen; + zend_string *pnstr; int i; *is_temp = 0; @@ -527,15 +526,15 @@ static HashTable* spl_heap_object_get_debug_info_helper(zend_class_entry *ce, zv zend_hash_copy(intern->debug_info, intern->std.properties, (copy_ctor_func_t) zval_add_ref); - pnstr = spl_gen_private_prop_name(ce, "flags", sizeof("flags")-1, &pnlen TSRMLS_CC); + pnstr = spl_gen_private_prop_name(ce, "flags", sizeof("flags")-1 TSRMLS_CC); ZVAL_LONG(&tmp, intern->flags); - zend_hash_str_update(intern->debug_info, pnstr, pnlen, &tmp); - efree(pnstr); + zend_hash_update(intern->debug_info, pnstr, &tmp); + STR_RELEASE(pnstr); - pnstr = spl_gen_private_prop_name(ce, "isCorrupted", sizeof("isCorrupted")-1, &pnlen TSRMLS_CC); + pnstr = spl_gen_private_prop_name(ce, "isCorrupted", sizeof("isCorrupted")-1 TSRMLS_CC); ZVAL_BOOL(&tmp, intern->heap->flags&SPL_HEAP_CORRUPTED); - zend_hash_str_update(intern->debug_info, pnstr, pnlen, &tmp); - efree(pnstr); + zend_hash_update(intern->debug_info, pnstr, &tmp); + STR_RELEASE(pnstr); array_init(&heap_array); @@ -544,9 +543,9 @@ static HashTable* spl_heap_object_get_debug_info_helper(zend_class_entry *ce, zv Z_ADDREF_P(&intern->heap->elements[i]); } - pnstr = spl_gen_private_prop_name(ce, "heap", sizeof("heap")-1, &pnlen TSRMLS_CC); - zend_hash_str_update(intern->debug_info, pnstr, pnlen, &heap_array); - efree(pnstr); + pnstr = spl_gen_private_prop_name(ce, "heap", sizeof("heap")-1 TSRMLS_CC); + zend_hash_update(intern->debug_info, pnstr, &heap_array); + STR_RELEASE(pnstr); } return intern->debug_info; diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c index 92baee4b0c..c91379bf20 100644 --- a/ext/spl/spl_observer.c +++ b/ext/spl/spl_observer.c @@ -303,8 +303,7 @@ static HashTable* spl_object_storage_debug_info(zval *obj, int *is_temp TSRMLS_D HashPosition pos; zval tmp, storage; char md5str[33]; - int name_len; - char *zname; + zend_string *zname; *is_temp = 0; @@ -334,9 +333,9 @@ static HashTable* spl_object_storage_debug_info(zval *obj, int *is_temp TSRMLS_D zend_hash_move_forward_ex(&intern->storage, &pos); } - zname = spl_gen_private_prop_name(spl_ce_SplObjectStorage, "storage", sizeof("storage")-1, &name_len TSRMLS_CC); - zend_symtable_str_update(intern->debug_info, zname, name_len, &storage); - efree(zname); + zname = spl_gen_private_prop_name(spl_ce_SplObjectStorage, "storage", sizeof("storage")-1 TSRMLS_CC); + zend_symtable_update(intern->debug_info, zname, &storage); + STR_RELEASE(zname); } return intern->debug_info; |
