- add HttpMessage class constants
[m6w6/ext-http] / missing.c
1 /*
2 +----------------------------------------------------------------------+
3 | PECL :: http |
4 +----------------------------------------------------------------------+
5 | This source file is subject to version 3.0 of the PHP license, that |
6 | is bundled with this package in the file LICENSE, and is available |
7 | through the world-wide-web at http://www.php.net/license/3_0.txt. |
8 | If you did not receive a copy of the PHP license and are unable to |
9 | obtain it through the world-wide-web, please send a note to |
10 | license@php.net so we can mail you a copy immediately. |
11 +----------------------------------------------------------------------+
12 | Copyright (c) 2004-2005 Michael Wallner <mike@php.net> |
13 +----------------------------------------------------------------------+
14 */
15
16 /* $Id$ */
17
18 #include "php.h"
19 #include "missing.h"
20
21 #if (PHP_MAJOR_VERSION == 5) && (PHP_MINOR_VERSION == 0)
22 int zend_declare_property_double(zend_class_entry *ce, char *name, int name_length, double value, int access_type TSRMLS_DC)
23 {
24 zval *property;
25
26 if (ce->type & ZEND_INTERNAL_CLASS) {
27 property = malloc(sizeof(zval));
28 } else {
29 ALLOC_ZVAL(property);
30 }
31 INIT_PZVAL(property);
32 ZVAL_DOUBLE(property, value);
33 return zend_declare_property(ce, name, name_length, property, access_type TSRMLS_CC);
34 }
35
36 void zend_update_property_double(zend_class_entry *scope, zval *object, char *name, int name_length, double value TSRMLS_DC)
37 {
38 zval *tmp;
39
40 ALLOC_ZVAL(tmp);
41 tmp->is_ref = 0;
42 tmp->refcount = 0;
43 ZVAL_DOUBLE(tmp, value);
44 zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC);
45 }
46
47 int zend_declare_property_bool(zend_class_entry *ce, char *name, int name_length, long value, int access_type TSRMLS_DC)
48 {
49 zval *property;
50
51 if (ce->type & ZEND_INTERNAL_CLASS) {
52 property = malloc(sizeof(zval));
53 } else {
54 ALLOC_ZVAL(property);
55 }
56 INIT_PZVAL(property);
57 ZVAL_BOOL(property, value);
58 return zend_declare_property(ce, name, name_length, property, access_type TSRMLS_CC);
59 }
60
61 void zend_update_property_bool(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC)
62 {
63 zval *tmp;
64
65 ALLOC_ZVAL(tmp);
66 tmp->is_ref = 0;
67 tmp->refcount = 0;
68 ZVAL_BOOL(tmp, value);
69 zend_update_property(scope, object, name, name_length, tmp TSRMLS_CC);
70 }
71
72 #endif
73
74 static inline zval *new_class_constant_zval(zend_class_entry *ce)
75 {
76 zval *z;
77 if (ce->type & ZEND_INTERNAL_CLASS) {
78 z = malloc(sizeof(zval));
79 } else {
80 ALLOC_ZVAL(z);
81 }
82 INIT_PZVAL(z);
83 return z;
84 }
85
86 int zend_declare_class_constant(zend_class_entry *ce, char *name, size_t name_length, zval *value TSRMLS_DC)
87 {
88 return zend_hash_add(&ce->constants_table, name, name_length, &value, sizeof(zval *), NULL);
89 }
90
91 int zend_declare_class_constant_long(zend_class_entry *ce, char *name, size_t name_length, long value TSRMLS_DC)
92 {
93 zval *constant = new_class_constant_zval(ce);
94 ZVAL_LONG(constant, value);
95 return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC);
96 }
97
98 int zend_declare_class_constant_bool(zend_class_entry *ce, char *name, size_t name_length, zend_bool value TSRMLS_DC)
99 {
100 zval *constant = new_class_constant_zval(ce);
101 ZVAL_BOOL(constant, value);
102 return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC);
103 }
104
105 int zend_declare_class_constant_double(zend_class_entry *ce, char *name, size_t name_length, double value TSRMLS_DC)
106 {
107 zval *constant = new_class_constant_zval(ce);
108 ZVAL_DOUBLE(constant, value);
109 return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC);
110 }
111
112 int zend_declare_class_constant_string(zend_class_entry *ce, char *name, size_t name_length, char *value TSRMLS_DC)
113 {
114 return zend_declare_class_constant_stringl(ce, name, name_length, value, strlen(value) TSRMLS_CC);
115 }
116
117 int zend_declare_class_constant_stringl(zend_class_entry *ce, char *name, size_t name_length, char *value, size_t value_length TSRMLS_DC)
118 {
119 zval *constant = new_class_constant_zval(ce);
120 Z_TYPE_P(constant) = IS_STRING;
121 Z_STRLEN_P(constant) = value_length;
122 Z_STRVAL_P(constant) = malloc(value_length + 1);
123 memcpy(Z_STRVAL_P(constant), value, value_length);
124 Z_STRVAL_P(constant)[value_length] = '\0';
125 return zend_declare_class_constant(ce, name, name_length, constant TSRMLS_CC);
126 }
127
128
129 /*
130 * Local variables:
131 * tab-width: 4
132 * c-basic-offset: 4
133 * End:
134 * vim600: noet sw=4 ts=4 fdm=marker
135 * vim<600: noet sw=4 ts=4
136 */
137