| | 940 | |
|---|
| | 941 | #ifdef ZEND_ENGINE_2 /* patch from "Juan M. de la Torre" <juan.torre@iron-gate.net> */ |
|---|
| | 942 | { |
|---|
| | 943 | zend_function *f; |
|---|
| | 944 | Bucket *p; |
|---|
| | 945 | int fname_len, cname_len; |
|---|
| | 946 | char *fname_lc, *cname_lc; |
|---|
| | 947 | |
|---|
| | 948 | cname_len = to->name_length; |
|---|
| | 949 | cname_lc = zend_str_tolower_dup(to->name, cname_len); |
|---|
| | 950 | |
|---|
| | 951 | to->constructor = to->destructor = to->clone = to->__get = to->__set = to->__call = NULL; |
|---|
| | 952 | |
|---|
| | 953 | p = to->function_table.pListHead; |
|---|
| | 954 | while (p != NULL) { |
|---|
| | 955 | f = p->pData; |
|---|
| | 956 | fname_len = strlen(f->common.function_name); |
|---|
| | 957 | fname_lc = zend_str_tolower_dup(f->common.function_name, fname_len); |
|---|
| | 958 | |
|---|
| | 959 | if (fname_len == cname_len && !memcmp(fname_lc, cname_lc, fname_len)) |
|---|
| | 960 | to->constructor = (zend_function*)f; |
|---|
| | 961 | else if (fname_lc[0] == '_' && fname_lc[1] == '_') |
|---|
| | 962 | { |
|---|
| | 963 | if (fname_len == sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1 && memcmp(fname_lc, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)) == 0) |
|---|
| | 964 | to->constructor = (zend_function*)f; |
|---|
| | 965 | else if (fname_len == sizeof(ZEND_DESTRUCTOR_FUNC_NAME)-1 && memcmp(fname_lc, ZEND_DESTRUCTOR_FUNC_NAME, sizeof(ZEND_DESTRUCTOR_FUNC_NAME)) == 0) |
|---|
| | 966 | to->destructor = (zend_function*)f; |
|---|
| | 967 | else if (fname_len == sizeof(ZEND_CLONE_FUNC_NAME)-1 && memcmp(fname_lc, ZEND_CLONE_FUNC_NAME, sizeof(ZEND_CLONE_FUNC_NAME)) == 0) |
|---|
| | 968 | to->clone = (zend_function*)f; |
|---|
| | 969 | else if (fname_len == sizeof(ZEND_GET_FUNC_NAME)-1 && memcmp(fname_lc, ZEND_GET_FUNC_NAME, sizeof(ZEND_GET_FUNC_NAME)) == 0) |
|---|
| | 970 | to->__get = (zend_function*)f; |
|---|
| | 971 | else if (fname_len == sizeof(ZEND_SET_FUNC_NAME)-1 && memcmp(fname_lc, ZEND_SET_FUNC_NAME, sizeof(ZEND_SET_FUNC_NAME)) == 0) |
|---|
| | 972 | to->__set = (zend_function*)f; |
|---|
| | 973 | else if (fname_len == sizeof(ZEND_CALL_FUNC_NAME)-1 && memcmp(fname_lc, ZEND_CALL_FUNC_NAME, sizeof(ZEND_CALL_FUNC_NAME)) == 0) |
|---|
| | 974 | to->__call = (zend_function*)f; |
|---|
| | 975 | } |
|---|
| | 976 | efree(fname_lc); |
|---|
| | 977 | p = p->pListNext; |
|---|
| | 978 | } |
|---|
| | 979 | } |
|---|
| | 980 | #endif |
|---|