- be smart about internal/user zvals, though it's not actually used
[m6w6/ext-http] / missing.c
index 98354deb8dd68cfa11043cebc463b483f351b2c0..328096c8a38ef427938f10767ae74fd46dc672fd 100644 (file)
--- a/missing.c
+++ b/missing.c
@@ -44,6 +44,88 @@ void zend_update_property_double(zend_class_entry *scope, zval *object, char *na
        zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC);
 }
 
+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);
+}
+
+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);
+}
+
+#endif
+
+#if (PHP_MAJOR_VERSION >= 5)
+
+static inline zval *new_class_constant_zval(zend_class_entry *ce)
+{
+       zval *z;
+       if (ce->type & ZEND_INTERNAL_CLASS) {
+               z = malloc(sizeof(zval));
+       } else {
+               ALLOC_ZVAL(z);
+       }
+       INIT_PZVAL(z);
+       return z;
+}
+
+int zend_declare_class_constant(zend_class_entry *ce, char *name, size_t name_length, zval *value TSRMLS_DC)
+{
+       return zend_hash_add(&ce->constants_table, name, name_length, &value, sizeof(zval *), NULL);
+}
+
+int zend_declare_class_constant_long(zend_class_entry *ce, char *name, size_t name_length, long value TSRMLS_DC)
+{
+       zval *constant = new_class_constant_zval(ce);
+       ZVAL_LONG(constant, value);
+       return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC);
+}
+
+int zend_declare_class_constant_bool(zend_class_entry *ce, char *name, size_t name_length, zend_bool value TSRMLS_DC)
+{
+       zval *constant = new_class_constant_zval(ce);
+       ZVAL_BOOL(constant, value);
+       return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC);
+}
+
+int zend_declare_class_constant_double(zend_class_entry *ce, char *name, size_t name_length, double value TSRMLS_DC)
+{
+       zval *constant = new_class_constant_zval(ce);
+       ZVAL_DOUBLE(constant, value);
+       return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC);
+}
+
+int zend_declare_class_constant_string(zend_class_entry *ce, char *name, size_t name_length, char *value TSRMLS_DC)
+{
+       return zend_declare_class_constant_stringl(ce, name, name_length, value, strlen(value) TSRMLS_CC);
+}
+
+int zend_declare_class_constant_stringl(zend_class_entry *ce, char *name, size_t name_length, char *value, size_t value_length TSRMLS_DC)
+{
+       zval *constant = new_class_constant_zval(ce);
+       if (ce->type & ZEND_INTERNAL_CLASS) {
+               ZVAL_STRINGL(constant, zend_strndup(value, value_length), value_length, 0);
+       } else {
+               ZVAL_STRINGL(constant, value, value_length, 1);
+       }
+       return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC);
+}
 #endif
 
 /*