]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-5.3' into PHP-5.4
authorXinchen Hui <laruence@php.net>
Sat, 4 Aug 2012 03:14:03 +0000 (11:14 +0800)
committerXinchen Hui <laruence@php.net>
Sat, 4 Aug 2012 03:14:03 +0000 (11:14 +0800)
Conflicts:
Zend/zend_API.h

1  2 
Zend/zend_API.c
Zend/zend_API.h

diff --cc Zend/zend_API.c
index 98a33e544508f85ece7b9f4f4256c83010bdb4b0,16a940dcac3663477eee567168148e2f998a8beb..827446b26da580923c47a30bc41ee56f75eb2373
@@@ -2547,16 -2342,16 +2547,15 @@@ static const zend_function_entry disabl
  
  ZEND_API int zend_disable_class(char *class_name, uint class_name_length TSRMLS_DC) /* {{{ */
  {
-       zend_class_entry disabled_class;
+       zend_class_entry **disabled_class;
  
        zend_str_tolower(class_name, class_name_length);
-       if (zend_hash_del(CG(class_table), class_name, class_name_length+1)==FAILURE) {
+       if (zend_hash_find(CG(class_table), class_name, class_name_length+1, (void **)&disabled_class)==FAILURE) {
                return FAILURE;
        }
-       INIT_OVERLOADED_CLASS_ENTRY_EX(disabled_class, class_name, class_name_length, disabled_class_new, NULL, NULL, NULL, NULL, NULL);
-       disabled_class.create_object = display_disabled_class;
-       disabled_class.name_length = class_name_length;
-       zend_register_internal_class(&disabled_class TSRMLS_CC);
+       INIT_CLASS_ENTRY_INIT_METHODS((**disabled_class), disabled_class_new, NULL, NULL, NULL, NULL, NULL);
+       (*disabled_class)->create_object = display_disabled_class;
 -      (*disabled_class)->builtin_functions = disabled_class_new;
+       zend_hash_clean(&((*disabled_class)->function_table));
        return SUCCESS;
  }
  /* }}} */
diff --cc Zend/zend_API.h
index f54db7f2e87cc6d2de27f1dfa990d1baeef6ba18,ddd84fa584777986881664b9cfcbb5746d6e1b09..d7fbc3c3afd1dd6b75321c67fdab397d7e7e3aa6
@@@ -168,13 -167,15 +168,18 @@@ typedef struct _zend_fcall_info_cache 
  
  #define INIT_OVERLOADED_CLASS_ENTRY_EX(class_container, class_name, class_name_len, functions, handle_fcall, handle_propget, handle_propset, handle_propunset, handle_propisset) \
        {                                                                                                                       \
 +              const char *cl_name = class_name;                                                               \
                int _len = class_name_len;                                                              \
 -              class_container.name = zend_strndup(class_name, _len);  \
 +              class_container.name = zend_new_interned_string(cl_name, _len+1, 0 TSRMLS_CC);  \
 +              if (class_container.name == cl_name) {                                  \
 +                      class_container.name = zend_strndup(cl_name, _len);     \
 +              }                                                                                                               \
                class_container.name_length = _len;                                             \
 -              class_container.builtin_functions = functions;                  \
+               INIT_CLASS_ENTRY_INIT_METHODS(class_container, functions, handle_fcall, handle_propget, handle_propset, handle_propunset, handle_propisset) \
+       }
+ #define INIT_CLASS_ENTRY_INIT_METHODS(class_container, functions, handle_fcall, handle_propget, handle_propset, handle_propunset, handle_propisset) \
+       {                                                                                                                       \
                class_container.constructor = NULL;                                             \
                class_container.destructor = NULL;                                              \
                class_container.clone = NULL;                                                   \