$Id$ UPGRADE NOTES - PHP X.Y 1. Internal API changes a. virtual_file_ex b. stat/lstat support c. readlink support d. layout of some core ZE structures (zend_op_array, zend_class_entry, ...) e. Zend\zend_fast_cache.h has been removed f. API Signature changes ======================== 1. Internal API changes ======================== a. virtual_file_ex virtual_file_ex takes now a TSRM context as last parameter: CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath TSRLS_DC); b. stat/lstat support lstat is now available on all platforms. On unix-like platform php_sys_lstat is an alias to lstat (when avaible). On Windows it is now available using php_sys_lstat. php_sys_stat and php_sys_lstat usage is recommended instead of calling lstat directly, to ensure portability. c. readlink support readlink is now available on all platforms. On unix-like platform php_sys_readlink is an alias to readlink (when avaible). On Windows it is now available using php_sys_readlink. php_sys_readlink usage is recommended instead of calling readlink directly, to ensure portability. d. layout of some core ZE structures (zend_op_array, zend_class_entry, ...) . zend_function.pass_rest_by_reference is replaced by ZEND_ACC_PASS_REST_BY_REFERENCE in zend_function.fn_flags . zend_function.return_reference is replaced by ZEND_ACC_RETURN_REFERENCE in zend_function.fn_flags . zend_arg_info.required_num_args removed. it was needed only for internal functions. Now the first arg_info for internal function (which has special meaning) is represented by zend_internal_function_info structure. . zend_op_array.size, size_var, size_literal, current_brk_cont, backpatch_count moved into CG(context), because they are used only during compilation. . zend_op_array.start_op is moved into EG(start_op), because it's used only for 'interactive' execution of single top-level op-array. . zend_op_array.done_pass_two is replaced by ZEND_ACC_DONE_PASS_TWO in zend_op_array.fn_flags. . op_array.vars array is trimmed (reallocated) during pass_two. . zend_class_entry.constants_updated is replaced by ZEND_ACC_CONSTANTS_UPDATED in zend_class_entry.ce_flags . the size of zend_class_entry is reduced by sharing the same memory space by different information for internal and user classes. See zend_class_inttry.info union. e. Zend\zend_fast_cache.h It should not have been used anymore since php5, but now this header has been removed. The following macros are not available anymore: ZEND_FAST_ALLOC(p, type, fc_type) ZEND_FAST_FREE(p, fc_type) ZEND_FAST_ALLOC_REL(p, type, fc_type) ZEND_FAST_FREE_REL(p, fc_type) Use emalloc, emalloc_rel, efree or efree_rel instead. f. API Signature changes . zend_list_insert ZEND_API int zend_list_insert(void *ptr, int type TSRMLS_DC); call: zend_list_insert(a, SOMETYPE TSRMLS_CC); NB: If zend_list_insert is used to register a resource, ZEND_REGISTER_RESOURCE could be used instead. . php_le_stream_context(TSRMLS_C) PHPAPI php_stream_context *php_stream_context_alloc(TSRMLS_D) call: context = php_stream_context_alloc(TSRMLS_C); . php_stream_context_alloc PHPAPI php_stream_context *php_stream_context_alloc(TSRMLS_D); call: context = php_stream_context_alloc(TSRMLS_C); . sapi_register_default_post_reader SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(TSRMLS_D) TSRMLS_DC); . sapi_register_treat_data SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC) TSRMLS_DC); . sapi_register_input_filter SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC), unsigned int (*input_filter_init)(TSRMLS_D) TSRMLS_DC);