cvs: php4 /ext/standard Makefile.in incomplete_class.c php_incomplete_class.h var.c

From: Date: Fri, 23 Jun 2000 16:46:04 +0000
Subject: cvs: php4 /ext/standard Makefile.in incomplete_class.c php_incomplete_class.h var.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-407@lists.php.net to get a copy of this message
sas Fri Jun 23 09:46:04 2000 EDT Added files: /php4/ext/standard incomplete_class.c php_incomplete_class.h Modified files: /php4/ext/standard Makefile.in var.c Log: Move the incomplete class stuff into its own file, so that we can make it easier accessible to WDDX. Index: php4/ext/standard/Makefile.in diff -u php4/ext/standard/Makefile.in:1.14 php4/ext/standard/Makefile.in:1.15 --- php4/ext/standard/Makefile.in:1.14 Wed Jun 21 15:51:29 2000 +++ php4/ext/standard/Makefile.in Fri Jun 23 09:46:04 2000 @@ -7,7 +7,7 @@ link.c mail.c math.c md5.c metaphone.c microtime.c pack.c pageinfo.c \ parsedate.c quot_print.c rand.c reg.c soundex.c string.c scanf.c \ syslog.c type.c uniqid.c url.c url_scanner.c var.c output.c assert.c \ - strnatcmp.c levenshtein.c + strnatcmp.c levenshtein.c incomplete_class.c include $(top_srcdir)/build/dynlib.mk Index: php4/ext/standard/var.c diff -u php4/ext/standard/var.c:1.68 php4/ext/standard/var.c:1.69 --- php4/ext/standard/var.c:1.68 Fri Jun 23 09:21:31 2000 +++ php4/ext/standard/var.c Fri Jun 23 09:46:04 2000 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: var.c,v 1.68 2000/06/23 16:21:31 sas Exp $ */ +/* $Id: var.c,v 1.69 2000/06/23 16:46:04 sas Exp $ */ /* {{{ includes @@ -31,6 +31,7 @@ #include "php_string.h" #include "php_var.h" #include "basic_functions.h" +#include "php_incomplete_class.h" #define COMMON ((*struc)->is_ref?"&":"") @@ -52,102 +53,6 @@ return 0; } -static char *php_lookup_class_name(zval **object, size_t *nlen, zend_bool del); - -#define INCOMPLETE_CLASS_MSG \ - "The script tried to execute a method or " \ - "access a property of an incomplete object. " \ - "Please ensure that the class definition <b>%s</b> of the object " \ - "you are trying to operate on was loaded _before_ " \ - "the session was started" - -static void incomplete_class_message(zend_property_reference *ref) -{ - char buf[1024]; - char *class_name; - - class_name = php_lookup_class_name(&ref->object, NULL, 0); - - if (!class_name) - class_name = estrdup("unknown"); - - snprintf(buf, 1023, INCOMPLETE_CLASS_MSG, class_name); - - efree(class_name); - - php_error(E_ERROR, buf); -} - -static void incomplete_class_call_func(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference) -{ - incomplete_class_message(property_reference); -} - -static int incomplete_class_set_property(zend_property_reference *property_reference, zval *value) -{ - incomplete_class_message(property_reference); - - /* does not reach this point */ - return (0); -} - -static zval incomplete_class_get_property(zend_property_reference *property_reference) -{ - zval foo; - - incomplete_class_message(property_reference); - - /* does not reach this point */ - return (foo); -} - -#define INCOMPLETE_CLASS "__PHP_Incomplete_Class" - -static void php_create_incomplete_class(BLS_D) -{ - zend_class_entry incomplete_class; - - INIT_OVERLOADED_CLASS_ENTRY(incomplete_class, INCOMPLETE_CLASS, NULL, - incomplete_class_call_func, - incomplete_class_get_property, - incomplete_class_set_property); - - BG(incomplete_class) = zend_register_internal_class(&incomplete_class); -} - -#define MAGIC_MEMBER "__PHP_Incomplete_Class_Name" - -static char *php_lookup_class_name(zval **object, size_t *nlen, zend_bool del) -{ - zval **val; - char *retval = NULL; - - if (zend_hash_find((*object)->value.obj.properties, MAGIC_MEMBER, sizeof(MAGIC_MEMBER), (void **) &val) == SUCCESS) { - retval = estrndup(Z_STRVAL_PP(val), Z_STRLEN_PP(val)); - - if (nlen) - *nlen = Z_STRLEN_PP(val); - - if (del) - zend_hash_del((*object)->value.obj.properties, MAGIC_MEMBER, sizeof(MAGIC_MEMBER)); - } - - return (retval); -} - -static void php_store_class_name(zval **object, const char *name, size_t len) -{ - zval *val; - - MAKE_STD_ZVAL(val); - - Z_TYPE_P(val) = IS_STRING; - Z_STRVAL_P(val) = estrndup(name, len); - Z_STRLEN_P(val) = len; - - zend_hash_update((*object)->value.obj.properties, MAGIC_MEMBER, sizeof(MAGIC_MEMBER), &val, sizeof(val), NULL); -} - void php_var_dump(pval **struc, int level) { HashTable *myht; @@ -246,24 +151,6 @@ strcat(__p->value.str.val + __i, (S));\ } -#define PHP_SET_CLASS_ATTRIBUTES() \ - if ((*struc)->value.obj.ce == BG(incomplete_class)) { \ - class_name = php_lookup_class_name(struc, &name_len, 1); \ - free_class_name = 1; \ - } else { \ - class_name = (*struc)->value.obj.ce->name; \ - name_len = (*struc)->value.obj.ce->name_length; \ - } - -#define PHP_CLEANUP_CLASS_ATTRIBUTES() \ - if (free_class_name) efree(class_name) - -#define PHP_CLASS_ATTRIBUTES \ - char *class_name; \ - size_t name_len; \ - zend_bool free_class_name = 0 \ - - /* }}} */ /* {{{ php_var_serialize */ @@ -580,9 +467,7 @@ if (zend_hash_find(EG(class_table), class_name, i+1, (void **) &ce)==FAILURE) { incomplete_class = 1; - if (BG(incomplete_class) == NULL) - php_create_incomplete_class(BLS_C); - ce = BG(incomplete_class); + ce = PHP_IC_ENTRY_READ; } } else { /* old php 3.0 data 'o' */ ce = &zend_standard_class_def; Index: php4/ext/standard/incomplete_class.c +++ php4/ext/standard/incomplete_class.c /* +----------------------------------------------------------------------+ | PHP version 4.0 | +----------------------------------------------------------------------+ | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann <sascha@schumann.cx> | +----------------------------------------------------------------------+ */ /* $Id: incomplete_class.c,v 1.1 2000/06/23 16:46:04 sas Exp $ */ #include "php.h" #include "basic_functions.h" #include "php_incomplete_class.h" #define INCOMPLETE_CLASS_MSG \ "The script tried to execute a method or " \ "access a property of an incomplete object. " \ "Please ensure that the class definition <b>%s</b> of the object " \ "you are trying to operate on was loaded _before_ " \ "the session was started" #define INCOMPLETE_CLASS "__PHP_Incomplete_Class" #define MAGIC_MEMBER "__PHP_Incomplete_Class_Name" static void incomplete_class_message(zend_property_reference *ref) { char buf[1024]; char *class_name; class_name = php_lookup_class_name(&ref->object, NULL, 0); if (!class_name) class_name = estrdup("unknown"); snprintf(buf, 1023, INCOMPLETE_CLASS_MSG, class_name); efree(class_name); php_error(E_ERROR, buf); } static void incomplete_class_call_func(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference) { incomplete_class_message(property_reference); } static int incomplete_class_set_property(zend_property_reference *property_reference, zval *value) { incomplete_class_message(property_reference); /* does not reach this point */ return (0); } static zval incomplete_class_get_property(zend_property_reference *property_reference) { zval foo; incomplete_class_message(property_reference); /* does not reach this point */ return (foo); } zend_class_entry *php_create_incomplete_class(BLS_D) { zend_class_entry incomplete_class; INIT_OVERLOADED_CLASS_ENTRY(incomplete_class, INCOMPLETE_CLASS, NULL, incomplete_class_call_func, incomplete_class_get_property, incomplete_class_set_property); BG(incomplete_class) = zend_register_internal_class(&incomplete_class); return (BG(incomplete_class)); } char *php_lookup_class_name(zval **object, size_t *nlen, zend_bool del) { zval **val; char *retval = NULL; if (zend_hash_find((*object)->value.obj.properties, MAGIC_MEMBER, sizeof(MAGIC_MEMBER), (void **) &val) == SUCCESS) { retval = estrndup(Z_STRVAL_PP(val), Z_STRLEN_PP(val)); if (nlen) *nlen = Z_STRLEN_PP(val); if (del) zend_hash_del((*object)->value.obj.properties, MAGIC_MEMBER, sizeof(MAGIC_MEMBER)); } return (retval); } void php_store_class_name(zval **object, const char *name, size_t len) { zval *val; MAKE_STD_ZVAL(val); Z_TYPE_P(val) = IS_STRING; Z_STRVAL_P(val) = estrndup(name, len); Z_STRLEN_P(val) = len; zend_hash_update((*object)->value.obj.properties, MAGIC_MEMBER, sizeof(MAGIC_MEMBER), &val, sizeof(val), NULL); } Index: php4/ext/standard/php_incomplete_class.h +++ php4/ext/standard/php_incomplete_class.h /* +----------------------------------------------------------------------+ | PHP version 4.0 | +----------------------------------------------------------------------+ | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 2.02 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available at through the world-wide-web at | | http://www.php.net/license/2_02.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann <sascha@schumann.cx> | +----------------------------------------------------------------------+ */ #ifndef PHP_INCOMPLETE_CLASS_H #define PHP_INCOMPLETE_CLASS_H #define PHP_IC_ENTRY \ BG(incomplete_class) #define PHP_IC_ENTRY_READ \ (PHP_IC_ENTRY ? PHP_IC_ENTRY : php_create_incomplete_class(BLS_C)) #define PHP_SET_CLASS_ATTRIBUTES() \ if ((*struc)->value.obj.ce == BG(incomplete_class)) { \ class_name = php_lookup_class_name(struc, &name_len, 1); \ free_class_name = 1; \ } else { \ class_name = (*struc)->value.obj.ce->name; \ name_len = (*struc)->value.obj.ce->name_length; \ } #define PHP_CLEANUP_CLASS_ATTRIBUTES() \ if (free_class_name) efree(class_name) #define PHP_CLASS_ATTRIBUTES \ char *class_name; \ size_t name_len; \ zend_bool free_class_name = 0 \ #ifdef __cplusplus extern "C" { #endif zend_class_entry *php_create_incomplete_class(BLS_D); char *php_lookup_class_name(zval **object, size_t *nlen, zend_bool del); void php_store_class_name(zval **object, const char *name, size_t len); #ifdef __cplusplus }; #endif #endif

« previous php.cvs (#407) next »