- be smart about internal/user zvals, though it's not actually used
[m6w6/ext-http] / missing.c
index bbc4b3ac3b8787114f546b0bbfeaa5a78d4c578b..328096c8a38ef427938f10767ae74fd46dc672fd 100644 (file)
--- a/missing.c
+++ b/missing.c
@@ -1,7 +1,24 @@
+/*
+   +----------------------------------------------------------------------+
+   | PECL :: http                                                         |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 3.0 of the PHP license, that  |
+   | is bundled with this package in the file LICENSE, and is available   |
+   | through the world-wide-web at http://www.php.net/license/3_0.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.               |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 2004-2005 Michael Wallner <mike@php.net>               |
+   +----------------------------------------------------------------------+
+*/
+
+/* $Id$ */
 
 #include "php.h"
 #include "missing.h"
 
+#if (PHP_MAJOR_VERSION == 5) && (PHP_MINOR_VERSION == 0)
 int zend_declare_property_double(zend_class_entry *ce, char *name, int name_length, double value, int access_type TSRMLS_DC)
 {
        zval *property;
@@ -27,6 +44,90 @@ 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
+
 /*
  * Local variables:
  * tab-width: 4