From d88c2b18d420800a04a98c594dfa71b4e1e687b4 Mon Sep 17 00:00:00 2001 From: Hartmut Holzgraefe Date: Fri, 4 Feb 2005 20:24:21 +0000 Subject: [PATCH] added some missing zend_[declare|update]_property_...() convenience functions for bool, double and binary safe string data --- NEWS | 2 ++ Zend/zend_API.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++ Zend/zend_API.h | 6 ++++ 3 files changed, 84 insertions(+) diff --git a/NEWS b/NEWS index 3478eacc4d..a203bb99b4 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,8 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2004, PHP 5.1.0 +- Added zend_declare_property_...() and zend_update_property_...() + API functions for bool, double and binary safe strings. (Hartmut) - Moved extensions to PECL: . ext/dio (Jani, Derick) . ext/yp (Jani, Derick) diff --git a/Zend/zend_API.c b/Zend/zend_API.c index f59261cf43..2fca49980e 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -1970,6 +1970,20 @@ ZEND_API int zend_declare_property_null(zend_class_entry *ce, char *name, int na return zend_declare_property(ce, name, name_length, property, access_type TSRMLS_CC); } +ZEND_API int zend_declare_property_bool(zend_class_entry *ce, char *name, int name_length, long value, int access_type TSRMLS_DC) +{ + zval *property; + + if (ce->type & ZEND_INTERNAL_CLASS) { + property = malloc(sizeof(zval)); + } else { + ALLOC_ZVAL(property); + } + INIT_PZVAL(property); + ZVAL_BOOL(property, value); + return zend_declare_property(ce, name, name_length, property, access_type TSRMLS_CC); +} + ZEND_API int zend_declare_property_long(zend_class_entry *ce, char *name, int name_length, long value, int access_type TSRMLS_DC) { zval *property; @@ -1984,6 +1998,20 @@ ZEND_API int zend_declare_property_long(zend_class_entry *ce, char *name, int na return zend_declare_property(ce, name, name_length, property, access_type TSRMLS_CC); } +ZEND_API int zend_declare_property_double(zend_class_entry *ce, char *name, int name_length, double value, int access_type TSRMLS_DC) +{ + zval *property; + + if (ce->type & ZEND_INTERNAL_CLASS) { + property = malloc(sizeof(zval)); + } else { + ALLOC_ZVAL(property); + } + INIT_PZVAL(property); + ZVAL_DOUBLE(property, value); + return zend_declare_property(ce, name, name_length, property, access_type TSRMLS_CC); +} + ZEND_API int zend_declare_property_string(zend_class_entry *ce, char *name, int name_length, char *value, int access_type TSRMLS_DC) { zval *property; @@ -2000,6 +2028,21 @@ ZEND_API int zend_declare_property_string(zend_class_entry *ce, char *name, int return zend_declare_property(ce, name, name_length, property, access_type TSRMLS_CC); } +ZEND_API int zend_declare_property_stringl(zend_class_entry *ce, char *name, int name_length, char *value, int value_len, int access_type TSRMLS_DC) +{ + zval *property; + + if (ce->type & ZEND_INTERNAL_CLASS) { + property = malloc(sizeof(zval)); + ZVAL_STRINGL(property, zend_strndup(value, value_len), value_len, 0); + } else { + ALLOC_ZVAL(property); + ZVAL_STRINGL(property, value, value_len, 1); + } + INIT_PZVAL(property); + return zend_declare_property(ce, name, name_length, property, access_type TSRMLS_CC); +} + ZEND_API void zend_update_property(zend_class_entry *scope, zval *object, char *name, int name_length, zval *value TSRMLS_DC) { zval property; @@ -2027,6 +2070,17 @@ ZEND_API void zend_update_property_null(zend_class_entry *scope, zval *object, c zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC); } +ZEND_API void zend_update_property_bool(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC) +{ + zval *tmp; + + ALLOC_ZVAL(tmp); + tmp->is_ref = 0; + tmp->refcount = 0; + ZVAL_BOOL(tmp, value); + zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC); +} + ZEND_API void zend_update_property_long(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC) { zval *tmp; @@ -2038,6 +2092,17 @@ ZEND_API void zend_update_property_long(zend_class_entry *scope, zval *object, c zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC); } +ZEND_API void zend_update_property_double(zend_class_entry *scope, zval *object, char *name, int name_length, double value TSRMLS_DC) +{ + zval *tmp; + + ALLOC_ZVAL(tmp); + tmp->is_ref = 0; + tmp->refcount = 0; + ZVAL_LONG(tmp, value); + zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC); +} + ZEND_API void zend_update_property_string(zend_class_entry *scope, zval *object, char *name, int name_length, char *value TSRMLS_DC) { zval *tmp; @@ -2049,6 +2114,17 @@ ZEND_API void zend_update_property_string(zend_class_entry *scope, zval *object, zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC); } +ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zval *object, char *name, int name_length, char *value, int value_len TSRMLS_DC) +{ + zval *tmp; + + ALLOC_ZVAL(tmp); + tmp->is_ref = 0; + tmp->refcount = 0; + ZVAL_STRINGL(tmp, value, value_len, 1); + zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC); +} + ZEND_API zval *zend_read_property(zend_class_entry *scope, zval *object, char *name, int name_length, zend_bool silent TSRMLS_DC) { zval property, *value; diff --git a/Zend/zend_API.h b/Zend/zend_API.h index 9d4a1ebf03..60ed450424 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -188,14 +188,20 @@ ZEND_API char *zend_get_module_version(char *module_name); ZEND_API int zend_get_module_started(char *module_name); ZEND_API int zend_declare_property(zend_class_entry *ce, char *name, int name_length, zval *property, int access_type TSRMLS_DC); ZEND_API int zend_declare_property_null(zend_class_entry *ce, char *name, int name_length, int access_type TSRMLS_DC); +ZEND_API int zend_declare_property_bool(zend_class_entry *ce, char *name, int name_length, long value, int access_type TSRMLS_DC); ZEND_API int zend_declare_property_long(zend_class_entry *ce, char *name, int name_length, long value, int access_type TSRMLS_DC); +ZEND_API int zend_declare_property_double(zend_class_entry *ce, char *name, int name_length, double value, int access_type TSRMLS_DC); ZEND_API int zend_declare_property_string(zend_class_entry *ce, char *name, int name_length, char *value, int access_type TSRMLS_DC); +ZEND_API int zend_declare_property_stringl(zend_class_entry *ce, char *name, int name_length, char *value, int value_len, int access_type TSRMLS_DC); ZEND_API void zend_update_class_constants(zend_class_entry *class_type TSRMLS_DC); ZEND_API void zend_update_property(zend_class_entry *scope, zval *object, char *name, int name_length, zval *value TSRMLS_DC); ZEND_API void zend_update_property_null(zend_class_entry *scope, zval *object, char *name, int name_length TSRMLS_DC); +ZEND_API void zend_update_property_bool(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC); ZEND_API void zend_update_property_long(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC); +ZEND_API void zend_update_property_double(zend_class_entry *scope, zval *object, char *name, int name_length, double value TSRMLS_DC); ZEND_API void zend_update_property_string(zend_class_entry *scope, zval *object, char *name, int name_length, char *value TSRMLS_DC); +ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zval *object, char *name, int name_length, char *value, int value_length TSRMLS_DC); ZEND_API zval *zend_read_property(zend_class_entry *scope, zval *object, char *name, int name_length, zend_bool silent TSRMLS_DC); -- 2.50.1