Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 409 lines (332 sloc) 19.096 kb
573b460 andigutmans Zend Library
andigutmans authored
1 /*
2 +----------------------------------------------------------------------+
3 | Zend Engine |
4 +----------------------------------------------------------------------+
d2c9e80 andigutmans - Update copyright year
andigutmans authored
5 | Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
573b460 andigutmans Zend Library
andigutmans authored
6 +----------------------------------------------------------------------+
5e55e47 Zeev Suraski It's official now...
zsuraski authored
7 | This source file is subject to version 0.92 of the Zend license, |
b5b1117 Zeev Suraski License update
zsuraski authored
8 | that is bundled with this package in the file LICENSE, and is |
9 | available at through the world-wide-web at |
5e55e47 Zeev Suraski It's official now...
zsuraski authored
10 | http://www.zend.com/license/0_92.txt. |
b5b1117 Zeev Suraski License update
zsuraski authored
11 | If you did not receive a copy of the Zend license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@zend.com so we can mail you a copy immediately. |
573b460 andigutmans Zend Library
andigutmans authored
14 +----------------------------------------------------------------------+
15 | Authors: Andi Gutmans <andi@zend.com> |
16 | Zeev Suraski <zeev@zend.com> |
58f8805 Adding new parameter parsing API.
Andrei Zmievski authored
17 | Andrei Zmievski <andrei@php.net> |
573b460 andigutmans Zend Library
andigutmans authored
18 +----------------------------------------------------------------------+
19 */
20
b5b1117 Zeev Suraski License update
zsuraski authored
21
b982307 Change header protection macros to conform to standard.
Sascha Schumann authored
22 #ifndef ZEND_API_H
23 #define ZEND_API_H
573b460 andigutmans Zend Library
andigutmans authored
24
7080fa5 andigutmans - Rename modules.h to zend_modules.h
andigutmans authored
25 #include "zend_modules.h"
573b460 andigutmans Zend Library
andigutmans authored
26 #include "zend_list.h"
b7a5b3c Zeev Suraski - Generalize the fast cache mechanism
zsuraski authored
27 #include "zend_fast_cache.h"
5dba477 Zeev Suraski - Some header dependencies cleanup
zsuraski authored
28 #include "zend_operators.h"
29 #include "zend_variables.h"
df74f1d Add optional support for C0x inline semantics.
Sascha Schumann authored
30 #include "zend_execute.h"
573b460 andigutmans Zend Library
andigutmans authored
31
e9d126a andigutmans - Make sure zend_API.h has Zend'ish versions of the ZEND macros so that
andigutmans authored
32 #define ZEND_FN(name) zend_if_##name
342c6e0 Zeev Suraski Whatnot:
zsuraski authored
33 #define ZEND_NAMED_FUNCTION(name) void name(INTERNAL_FUNCTION_PARAMETERS)
e9d126a andigutmans - Make sure zend_API.h has Zend'ish versions of the ZEND macros so that
andigutmans authored
34 #define ZEND_FUNCTION(name) ZEND_NAMED_FUNCTION(ZEND_FN(name))
35
36 #define ZEND_NAMED_FE(zend_name, name, arg_types) { #zend_name, name, arg_types },
37 #define ZEND_FE(name, arg_types) ZEND_NAMED_FE(name, ZEND_FN(name), arg_types)
38 #define ZEND_FALIAS(name, alias, arg_types) ZEND_NAMED_FE(name, ZEND_FN(alias), arg_types)
342c6e0 Zeev Suraski Whatnot:
zsuraski authored
39
e9d126a andigutmans - Make sure zend_API.h has Zend'ish versions of the ZEND macros so that
andigutmans authored
40 #define ZEND_MINIT(module) zend_minit_##module
41 #define ZEND_MSHUTDOWN(module) zend_mshutdown_##module
42 #define ZEND_RINIT(module) zend_rinit_##module
43 #define ZEND_RSHUTDOWN(module) zend_rshutdown_##module
44 #define ZEND_MINFO(module) zend_info_##module
45 #define ZEND_GINIT(module) zend_ginit_##module
46 #define ZEND_GSHUTDOWN(module) zend_gshutdown_##module
342c6e0 Zeev Suraski Whatnot:
zsuraski authored
47
e9d126a andigutmans - Make sure zend_API.h has Zend'ish versions of the ZEND macros so that
andigutmans authored
48 #define ZEND_MINIT_FUNCTION(module) int ZEND_MINIT(module)(INIT_FUNC_ARGS)
49 #define ZEND_MSHUTDOWN_FUNCTION(module) int ZEND_MSHUTDOWN(module)(SHUTDOWN_FUNC_ARGS)
50 #define ZEND_RINIT_FUNCTION(module) int ZEND_RINIT(module)(INIT_FUNC_ARGS)
51 #define ZEND_RSHUTDOWN_FUNCTION(module) int ZEND_RSHUTDOWN(module)(SHUTDOWN_FUNC_ARGS)
52 #define ZEND_MINFO_FUNCTION(module) void ZEND_MINFO(module)(ZEND_MODULE_INFO_FUNC_ARGS)
53 #define ZEND_GINIT_FUNCTION(module) int ZEND_GINIT(module)(GINIT_FUNC_ARGS)
54 #define ZEND_GSHUTDOWN_FUNCTION(module) int ZEND_GSHUTDOWN(module)(void)
342c6e0 Zeev Suraski Whatnot:
zsuraski authored
55
0b6d923 Add ZEND_GET_MODULE(name). This is a short-cut for the common
Sascha Schumann authored
56 #define ZEND_GET_MODULE(name) \
57 ZEND_DLEXPORT zend_module_entry *get_module(void) { return &name##_module_entry; }
0d21940 Zeev Suraski Generalize some common thread-safety stuff
zsuraski authored
58
59 #define ZEND_BEGIN_MODULE_GLOBALS(module_name) \
60 typedef struct _zend_##module_name##_globals {
61 #define ZEND_END_MODULE_GLOBALS(module_name) \
62 } zend_##module_name##_globals;
63
64 #ifdef ZTS
65
66 #define ZEND_DECLARE_MODULE_GLOBALS(module_name) \
02af513 andigutmans - Patch from Jason Greene.
andigutmans authored
67 ts_rsrc_id module_name##_globals_id;
68 #define ZEND_EXTERN_MODULE_GLOBALS(module_name) \
69 extern ts_rsrc_id module_name##_globals_id;
0d21940 Zeev Suraski Generalize some common thread-safety stuff
zsuraski authored
70 #define ZEND_INIT_MODULE_GLOBALS(module_name, globals_ctor, globals_dtor) \
71 module_name##_globals_id = ts_allocate_id(sizeof(zend_##module_name##_globals), (ts_allocate_ctor) globals_ctor, (ts_allocate_dtor) globals_dtor);
72
73 #else
74
75 #define ZEND_DECLARE_MODULE_GLOBALS(module_name) \
02af513 andigutmans - Patch from Jason Greene.
andigutmans authored
76 zend_##module_name##_globals module_name##_globals;
77 #define ZEND_EXTERN_MODULE_GLOBALS(module_name) \
78 extern zend_##module_name##_globals module_name##_globals;
0d21940 Zeev Suraski Generalize some common thread-safety stuff
zsuraski authored
79 #define ZEND_INIT_MODULE_GLOBALS(module_name, globals_ctor, globals_dtor) \
80 globals_ctor(&module_name##_globals);
81
82 #endif
83
84
85
741b816 Zeev Suraski * Support getThis() for internal functions.
zsuraski authored
86 #define INIT_CLASS_ENTRY(class_container, class_name, functions) \
87 { \
88 class_container.name = strdup(class_name); \
89 class_container.name_length = sizeof(class_name)-1; \
90 class_container.builtin_functions = functions; \
91 class_container.handle_function_call = NULL; \
92 class_container.handle_property_get = NULL; \
93 class_container.handle_property_set = NULL; \
94 }
95
96 #define INIT_OVERLOADED_CLASS_ENTRY(class_container, class_name, functions, handle_fcall, handle_propget, handle_propset) \
97 { \
98 class_container.name = strdup(class_name); \
99 class_container.name_length = sizeof(class_name)-1; \
100 class_container.builtin_functions = functions; \
101 class_container.handle_function_call = handle_fcall; \
102 class_container.handle_property_get = handle_propget; \
103 class_container.handle_property_set = handle_propset; \
104 }
105
106
107
573b460 andigutmans Zend Library
andigutmans authored
108 int zend_next_free_module(void);
109
f77e6a4 Zeev Suraski Generalize macros
zsuraski authored
110 ZEND_API int zend_get_parameters(int ht, int param_count, ...);
cd7d554 Zeev Suraski - Introduce ZEND_NUM_ARGS(), to replace ARG_COUNT(ht)
zsuraski authored
111 ZEND_API int zend_get_parameters_array(int ht, int param_count, zval **argument_array);
f77e6a4 Zeev Suraski Generalize macros
zsuraski authored
112 ZEND_API int zend_get_parameters_ex(int param_count, ...);
cd7d554 Zeev Suraski - Introduce ZEND_NUM_ARGS(), to replace ARG_COUNT(ht)
zsuraski authored
113 ZEND_API int zend_get_parameters_array_ex(int param_count, zval ***argument_array);
39f9487 andigutmans -Tiny patches
andigutmans authored
114
58f8805 Adding new parameter parsing API.
Andrei Zmievski authored
115
116 /* Parameter parsing API -- andrei */
117
118 #define ZEND_PARSE_PARAMS_QUIET 1<<1
119 ZEND_API int zend_parse_parameters(int num_args, char *type_spec, ...);
120 ZEND_API int zend_parse_parameters_ex(int flags, int num_args, char *type_spec, ...);
121
122 /* Parameter parsing API -- andrei */
123
124
9deab41 andigutmans Add a couple of ZEND_API's
andigutmans authored
125 ZEND_API int ParameterPassedByReference(int ht, uint n);
39f9487 andigutmans -Tiny patches
andigutmans authored
126
fce92e3 Zeev Suraski Avoid using E_CORE_* errorlevels in any place which is not in the global...
zsuraski authored
127 int zend_register_functions(zend_function_entry *functions, HashTable *function_table, int type);
741b816 Zeev Suraski * Support getThis() for internal functions.
zsuraski authored
128 void zend_unregister_functions(zend_function_entry *functions, int count, HashTable *function_table);
7a87fcb Zeev Suraski Thread safety patch. We're still not quite there but it compiles again,...
zsuraski authored
129 ZEND_API int zend_register_module(zend_module_entry *module_entry);
eb0e694 andigutmans - Andrei, this is for you!
andigutmans authored
130
6ce07a8 andigutmans - Change register_internal_class to zend_register_internal_class for
andigutmans authored
131 ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *class_entry);
eb0e694 andigutmans - Andrei, this is for you!
andigutmans authored
132 ZEND_API zend_class_entry *zend_register_internal_class_ex(zend_class_entry *class_entry, zend_class_entry *parent_ce, char *parent_name);
133
bfbe861 Zeev Suraski Almost forgot to commit those
zsuraski authored
134 ZEND_API zend_module_entry *zend_get_module(int module_number);
bc7abb3 Zeev Suraski Allow disabling of functions for security reasons
zsuraski authored
135 ZEND_API int zend_disable_function(char *function_name, uint function_name_length);
573b460 andigutmans Zend Library
andigutmans authored
136
137 ZEND_API void wrong_param_count(void);
13148b5 Improve zend_is_callable() to the point where it's actually useful.
Andrei Zmievski authored
138 ZEND_API zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callable_name);
573b460 andigutmans Zend Library
andigutmans authored
139
741b816 Zeev Suraski * Support getThis() for internal functions.
zsuraski authored
140 #define getThis() (this_ptr)
141
131d9cb Zeev Suraski *** empty log message ***
zsuraski authored
142 #define WRONG_PARAM_COUNT ZEND_WRONG_PARAM_COUNT()
143 #define WRONG_PARAM_COUNT_WITH_RETVAL(ret) ZEND_WRONG_PARAM_COUNT_WITH_RETVAL(ret)
a1ad287 Zeev Suraski - The tree compiles again
zsuraski authored
144 #define ARG_COUNT(dummy) (ht)
145 #define ZEND_NUM_ARGS() (ht)
131d9cb Zeev Suraski *** empty log message ***
zsuraski authored
146 #define ZEND_WRONG_PARAM_COUNT() { wrong_param_count(); return; }
147 #define ZEND_WRONG_PARAM_COUNT_WITH_RETVAL(ret) { wrong_param_count(); return ret; }
573b460 andigutmans Zend Library
andigutmans authored
148
80bdd19 Zeev Suraski Fine tune Andi's patch
zsuraski authored
149 #ifndef ZEND_WIN32
573b460 andigutmans Zend Library
andigutmans authored
150 #define DLEXPORT
151 #endif
152
e062843 *** empty log message ***
Andrei Zmievski authored
153 ZEND_API int zend_startup_module(zend_module_entry *module);
573b460 andigutmans Zend Library
andigutmans authored
154
ceba50b Zeev Suraski - Fix a nasty bug in the hash, introduced in the recent migration to mac...
zsuraski authored
155 #define array_init(arg) _array_init((arg) ZEND_FILE_LINE_CC)
156 #define object_init(arg) _object_init((arg) ZEND_FILE_LINE_CC)
157 #define object_init_ex(arg, ce) _object_init_ex((arg), (ce) ZEND_FILE_LINE_CC)
158 ZEND_API int _array_init(zval *arg ZEND_FILE_LINE_DC);
159 ZEND_API int _object_init(zval *arg ZEND_FILE_LINE_DC);
160 ZEND_API int _object_init_ex(zval *arg, zend_class_entry *ce ZEND_FILE_LINE_DC);
6847fef added add_*_resource() and add_*_bool() functions
Thies C. Arntzen authored
161
162 /* no longer supported */
163 ZEND_API int add_assoc_function(zval *arg, char *key,void (*function_ptr)(INTERNAL_FUNCTION_PARAMETERS));
164
ef95a34 andigutmans - Patch from Sterling. Add API calls to add zval's as array indeces/
andigutmans authored
165 ZEND_API int add_assoc_long_ex(zval *arg, char *key, uint key_len, long n);
0611acb andigutmans - Change unset() functions to null(). unset() is legacy
andigutmans authored
166 ZEND_API int add_assoc_null_ex(zval *arg, char *key, uint key_len);
ef95a34 andigutmans - Patch from Sterling. Add API calls to add zval's as array indeces/
andigutmans authored
167 ZEND_API int add_assoc_bool_ex(zval *arg, char *key, uint key_len, int b);
168 ZEND_API int add_assoc_resource_ex(zval *arg, char *key, uint key_len, int r);
169 ZEND_API int add_assoc_double_ex(zval *arg, char *key, uint key_len, double d);
170 ZEND_API int add_assoc_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate);
171 ZEND_API int add_assoc_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate);
172 ZEND_API int add_assoc_zval_ex(zval *arg, char *key, uint key_len, zval *value);
173
174 #define add_assoc_long(__arg, __key, __n) add_assoc_long_ex(__arg, __key, strlen(__key)+1, __n)
0611acb andigutmans - Change unset() functions to null(). unset() is legacy
andigutmans authored
175 #define add_assoc_null(__arg, __key) add_assoc_null_ex(__arg, __key, strlen(__key) + 1)
ef95a34 andigutmans - Patch from Sterling. Add API calls to add zval's as array indeces/
andigutmans authored
176 #define add_assoc_bool(__arg, __key, __b) add_assoc_bool_ex(__arg, __key, strlen(__key)+1, __b)
177 #define add_assoc_resource(__arg, __key, __r) add_assoc_resource_ex(__arg, __key, strlen(__key)+1, __r)
178 #define add_assoc_double(__arg, __key, __d) add_assoc_double_ex(__arg, __key, strlen(__key)+1, __d)
179 #define add_assoc_string(__arg, __key, __str, __duplicate) add_assoc_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate)
180 #define add_assoc_stringl(__arg, __key, __str, __length, __duplicate) add_assoc_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate)
181 #define add_assoc_zval(__arg, __key, __value) add_assoc_zval_ex(__arg, __key, strlen(__key)+1, __value)
6847fef added add_*_resource() and add_*_bool() functions
Thies C. Arntzen authored
182
0611acb andigutmans - Change unset() functions to null(). unset() is legacy
andigutmans authored
183 /* unset() functions are only suported for legacy modules and null() functions should be used */
184 #define add_assoc_unset(__arg, __key) add_assoc_null_ex(__arg, __key, strlen(__key) + 1)
185 #define add_index_unset(__arg, __key) add_index_null(__arg, __key)
186 #define add_next_index_unset(__arg) add_next_index_null(__arg)
187 #define add_property_unset(__arg, __key) add_property_null(__arg, __key)
188
573b460 andigutmans Zend Library
andigutmans authored
189 ZEND_API int add_index_long(zval *arg, uint idx, long n);
0611acb andigutmans - Change unset() functions to null(). unset() is legacy
andigutmans authored
190 ZEND_API int add_index_null(zval *arg, uint idx);
6847fef added add_*_resource() and add_*_bool() functions
Thies C. Arntzen authored
191 ZEND_API int add_index_bool(zval *arg, uint idx, int b);
192 ZEND_API int add_index_resource(zval *arg, uint idx, int r);
573b460 andigutmans Zend Library
andigutmans authored
193 ZEND_API int add_index_double(zval *arg, uint idx, double d);
194 ZEND_API int add_index_string(zval *arg, uint idx, char *str, int duplicate);
195 ZEND_API int add_index_stringl(zval *arg, uint idx, char *str, uint length, int duplicate);
57f9963 Make add_index_zval() available to the outside world.
Andrei Zmievski authored
196 ZEND_API int add_index_zval(zval *arg, uint index, zval *value);
6847fef added add_*_resource() and add_*_bool() functions
Thies C. Arntzen authored
197
573b460 andigutmans Zend Library
andigutmans authored
198 ZEND_API int add_next_index_long(zval *arg, long n);
0611acb andigutmans - Change unset() functions to null(). unset() is legacy
andigutmans authored
199 ZEND_API int add_next_index_null(zval *arg);
6847fef added add_*_resource() and add_*_bool() functions
Thies C. Arntzen authored
200 ZEND_API int add_next_index_bool(zval *arg, int b);
201 ZEND_API int add_next_index_resource(zval *arg, int r);
573b460 andigutmans Zend Library
andigutmans authored
202 ZEND_API int add_next_index_double(zval *arg, double d);
203 ZEND_API int add_next_index_string(zval *arg, char *str, int duplicate);
204 ZEND_API int add_next_index_stringl(zval *arg, char *str, uint length, int duplicate);
ef95a34 andigutmans - Patch from Sterling. Add API calls to add zval's as array indeces/
andigutmans authored
205 ZEND_API int add_next_index_zval(zval *arg, zval *value);
206
207 ZEND_API int add_get_assoc_string_ex(zval *arg, char *key, uint key_len, char *str, void **dest, int duplicate);
208 ZEND_API int add_get_assoc_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, void **dest, int duplicate);
209
210 #define add_get_assoc_string(__arg, __key, __str, __dest, __duplicate) add_get_assoc_string_ex(__arg, __key, strlen(__key)+1, __str, __dest, __duplicate)
211 #define add_get_assoc_stringl(__arg, __key, __str, __length, __dest, __duplicate) add_get_assoc_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __dest, __duplicate)
573b460 andigutmans Zend Library
andigutmans authored
212
213 ZEND_API int add_get_index_long(zval *arg, uint idx, long l, void **dest);
214 ZEND_API int add_get_index_double(zval *arg, uint idx, double d, void **dest);
215 ZEND_API int add_get_index_string(zval *arg, uint idx, char *str, void **dest, int duplicate);
216 ZEND_API int add_get_index_stringl(zval *arg, uint idx, char *str, uint length, void **dest, int duplicate);
217
ef95a34 andigutmans - Patch from Sterling. Add API calls to add zval's as array indeces/
andigutmans authored
218 ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long l);
0611acb andigutmans - Change unset() functions to null(). unset() is legacy
andigutmans authored
219 ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len);
ef95a34 andigutmans - Patch from Sterling. Add API calls to add zval's as array indeces/
andigutmans authored
220 ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b);
221 ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long r);
222 ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d);
223 ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate);
224 ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate);
225 ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value);
226
227 #define add_property_long(__arg, __key, __n) add_property_long_ex(__arg, __key, strlen(__key)+1, __n)
0611acb andigutmans - Change unset() functions to null(). unset() is legacy
andigutmans authored
228 #define add_property_null(__arg, __key) add_property_null_ex(__arg, __key, strlen(__key) + 1)
ef95a34 andigutmans - Patch from Sterling. Add API calls to add zval's as array indeces/
andigutmans authored
229 #define add_property_bool(__arg, __key, __b) add_property_bool_ex(__arg, __key, strlen(__key)+1, __b)
230 #define add_property_resource(__arg, __key, __r) add_property_resource_ex(__arg, __key, strlen(__key)+1, __r)
231 #define add_property_double(__arg, __key, __d) add_property_double_ex(__arg, __key, strlen(__key)+1, __d)
232 #define add_property_string(__arg, __key, __str, __duplicate) add_property_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate)
233 #define add_property_stringl(__arg, __key, __str, __length, __duplicate) add_property_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate)
234 #define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg, __key, strlen(__key)+1, __value)
235
be895bc Zeev Suraski Fix call_user_function() with objects - it could leak under certain circ...
zsuraski authored
236 ZEND_API int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, int param_count, zval *params[]);
237 ZEND_API int call_user_function_ex(HashTable *function_table, zval **object_pp, zval *function_name, zval **retval_ptr_ptr, int param_count, zval **params[], int no_separation, HashTable *symbol_table);
573b460 andigutmans Zend Library
andigutmans authored
238
f962a35 Added zend_set_hash_symbol() function.
Andrei Zmievski authored
239 ZEND_API int zend_set_hash_symbol(zval *symbol, char *name, int name_length,
240 int is_ref, int num_symbol_tables, ...);
241
573b460 andigutmans Zend Library
andigutmans authored
242 #define add_method(arg,key,method) add_assoc_function((arg),(key),(method))
243
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
244 #if ZEND_DEBUG
245 #define CHECK_ZVAL_STRING(z) \
43ebb86 Zeev Suraski Fix bug #10287 - avoid crashing under a bogus usage of list()
zsuraski authored
246 if ((z)->value.str.val[ (z)->value.str.len ] != '\0') zend_error(E_WARNING, "String is not zero-terminated (%s)", (z)->value.str.val);
247 #define CHECK_ZVAL_STRING_REL(z) \
248 if ((z)->value.str.val[ (z)->value.str.len ] != '\0') zend_error(E_WARNING, "String is not zero-terminated (%s) (source: %s:%d)", (z)->value.str.val ZEND_FILE_LINE_RELAY_CC);
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
249 #else
250 #define CHECK_ZVAL_STRING(z)
43ebb86 Zeev Suraski Fix bug #10287 - avoid crashing under a bogus usage of list()
zsuraski authored
251 #define CHECK_ZVAL_STRING_REL(z)
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
252 #endif
253
af22085 added ZVAL_*() macros.
Thies C. Arntzen authored
254 #define ZVAL_RESOURCE(z,l) { \
255 (z)->type = IS_RESOURCE; \
256 (z)->value.lval = l; \
257 }
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
258
af22085 added ZVAL_*() macros.
Thies C. Arntzen authored
259 #define ZVAL_BOOL(z,b) { \
260 (z)->type = IS_BOOL; \
261 (z)->value.lval = b; \
262 }
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
263
af22085 added ZVAL_*() macros.
Thies C. Arntzen authored
264 #define ZVAL_NULL(z) { \
265 (z)->type = IS_NULL; \
266 }
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
267
af22085 added ZVAL_*() macros.
Thies C. Arntzen authored
268 #define ZVAL_LONG(z,l) { \
269 (z)->type = IS_LONG; \
270 (z)->value.lval = l; \
271 }
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
272
af22085 added ZVAL_*() macros.
Thies C. Arntzen authored
273 #define ZVAL_DOUBLE(z,d) { \
274 (z)->type = IS_DOUBLE; \
275 (z)->value.dval = d; \
276 }
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
277
af22085 added ZVAL_*() macros.
Thies C. Arntzen authored
278 #define ZVAL_STRING(z,s,duplicate) { \
279 char *__s=(s); \
280 (z)->value.str.len = strlen(__s); \
281 (z)->value.str.val = (duplicate?estrndup(__s,(z)->value.str.len):__s); \
282 (z)->type = IS_STRING; \
283 }
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
284
af22085 added ZVAL_*() macros.
Thies C. Arntzen authored
285 #define ZVAL_STRINGL(z,s,l,duplicate) { \
286 char *__s=(s); int __l=l; \
287 (z)->value.str.len = __l; \
288 (z)->value.str.val = (duplicate?estrndup(__s,__l):__s); \
289 (z)->type = IS_STRING; \
290 }
291
292 #define ZVAL_EMPTY_STRING(z) { \
293 (z)->value.str.len = 0; \
1f793fd Stanislav Malyshev Fix EMPTY_STRING macros
smalyshev authored
294 (z)->value.str.val = empty_string; \
af22085 added ZVAL_*() macros.
Thies C. Arntzen authored
295 (z)->type = IS_STRING; \
296 }
297
07ea068 fixed ZVAL_FALSE and ZVAL_TRUE
Thies C. Arntzen authored
298 #define ZVAL_FALSE(z) ZVAL_BOOL(z,0)
299 #define ZVAL_TRUE(z) ZVAL_BOOL(z,1)
af22085 added ZVAL_*() macros.
Thies C. Arntzen authored
300
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
301 #define RETVAL_RESOURCE(l) ZVAL_RESOURCE(return_value,l)
302 #define RETVAL_BOOL(b) ZVAL_BOOL(return_value,b)
303 #define RETVAL_NULL() ZVAL_NULL(return_value)
304 #define RETVAL_LONG(l) ZVAL_LONG(return_value,l)
305 #define RETVAL_DOUBLE(d) ZVAL_DOUBLE(return_value,d)
306 #define RETVAL_STRING(s,duplicate) ZVAL_STRING(return_value,s,duplicate)
307 #define RETVAL_STRINGL(s,l,duplicate) ZVAL_STRINGL(return_value,s,l,duplicate)
308 #define RETVAL_EMPTY_STRING() ZVAL_EMPTY_STRING(return_value)
309 #define RETVAL_FALSE ZVAL_BOOL(return_value,0)
310 #define RETVAL_TRUE ZVAL_BOOL(return_value,1)
311
312 #define RETURN_RESOURCE(l) { RETVAL_RESOURCE(l); return; }
313 #define RETURN_BOOL(b) { RETVAL_BOOL(b); return; }
314 #define RETURN_NULL() { RETVAL_NULL(); return;}
315 #define RETURN_LONG(l) { RETVAL_LONG(l); return; }
316 #define RETURN_DOUBLE(d) { RETVAL_DOUBLE(d); return; }
317 #define RETURN_STRING(s,duplicate) { RETVAL_STRING(s,duplicate); return; }
318 #define RETURN_STRINGL(s,l,duplicate) { RETVAL_STRINGL(s,l,duplicate); return; }
319 #define RETURN_EMPTY_STRING() { RETVAL_EMPTY_STRING(); return; }
320 #define RETURN_FALSE { RETVAL_FALSE; return; }
321 #define RETURN_TRUE { RETVAL_TRUE; return; }
1f985ed Zeev Suraski Moved all #define's for SET_ and RETURN_ to zend_API.h
zsuraski authored
322
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
323 #define SET_VAR_STRING(n,v) { \
324 { \
235386b Zeev Suraski Change ALLOC_ZVAL() semantics
zsuraski authored
325 zval *var; \
326 ALLOC_ZVAL(var); \
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
327 ZVAL_STRING(var,v,0); \
6393ab1 Zeev Suraski Now that's an annoying bug.
zsuraski authored
328 ZEND_SET_GLOBAL_VAR(n, var); \
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
329 } \
1f985ed Zeev Suraski Moved all #define's for SET_ and RETURN_ to zend_API.h
zsuraski authored
330 }
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
331
332 #define SET_VAR_STRINGL(n,v,l) { \
333 { \
235386b Zeev Suraski Change ALLOC_ZVAL() semantics
zsuraski authored
334 zval *var; \
335 ALLOC_ZVAL(var); \
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
336 ZVAL_STRINGL(var,v,l,0); \
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
337 ZEND_SET_GLOBAL_VAR(n, var); \
338 } \
1f985ed Zeev Suraski Moved all #define's for SET_ and RETURN_ to zend_API.h
zsuraski authored
339 }
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
340
341 #define SET_VAR_LONG(n,v) { \
342 { \
235386b Zeev Suraski Change ALLOC_ZVAL() semantics
zsuraski authored
343 zval *var; \
344 ALLOC_ZVAL(var); \
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
345 ZVAL_LONG(var,v); \
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
346 ZEND_SET_GLOBAL_VAR(n, var); \
347 } \
1f985ed Zeev Suraski Moved all #define's for SET_ and RETURN_ to zend_API.h
zsuraski authored
348 }
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
349
350 #define SET_VAR_DOUBLE(n,v) { \
351 { \
235386b Zeev Suraski Change ALLOC_ZVAL() semantics
zsuraski authored
352 zval *var; \
353 ALLOC_ZVAL(var); \
bcddfd4 cleaned up the RETVAL_ RETURN_ and ZVAL_ macros
Thies C. Arntzen authored
354 ZVAL_DOUBLE(var,v); \
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
355 ZEND_SET_GLOBAL_VAR(n, var); \
356 } \
1f985ed Zeev Suraski Moved all #define's for SET_ and RETURN_ to zend_API.h
zsuraski authored
357 }
358
359
c34560b andigutmans - Remove _EX and make it the old _LENGTH
andigutmans authored
360 #define ZEND_SET_SYMBOL(symtable, name, var) \
361 { \
362 char *_name = (name); \
363 \
4c8259b andigutmans - Call ZEND_SET_SYMBOL_WITH_LENGTH() with refcount 1 from the standard
andigutmans authored
364 ZEND_SET_SYMBOL_WITH_LENGTH(symtable, _name, strlen(_name)+1, var, 1, 0); \
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
365 }
366
c34560b andigutmans - Remove _EX and make it the old _LENGTH
andigutmans authored
367 #define ZEND_SET_SYMBOL_WITH_LENGTH(symtable, name, name_length, var, _refcount, _is_ref) \
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
368 { \
369 zval **orig_var; \
370 \
620d013 Zeev Suraski Support symbols in any symbol table, not just the active one
zsuraski authored
371 if (zend_hash_find(symtable, (name), (name_length), (void **) &orig_var)==SUCCESS \
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
372 && PZVAL_IS_REF(*orig_var)) { \
158088c Zeev Suraski Allow to set the reference count explicitly for ZEND_SET_SYMBOL_WITH_LEN...
zsuraski authored
373 (var)->refcount = (*orig_var)->refcount; \
52a30fd Be safe, use ().
Andrei Zmievski authored
374 (var)->is_ref = 1; \
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
375 \
2ddc4fe Zeev Suraski Make it possible to explicitly set refcount in ZEND_SET_SYMBOL_WITH_LENG...
zsuraski authored
376 if (_refcount) { \
377 (var)->refcount += _refcount-1; \
378 } \
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
379 zval_dtor(*orig_var); \
158088c Zeev Suraski Allow to set the reference count explicitly for ZEND_SET_SYMBOL_WITH_LEN...
zsuraski authored
380 **orig_var = *(var); \
62b2087 andigutmans - Create two new macro's. ALLOC_ZVAL() and FREE_ZVAL(z) and make Zend us...
andigutmans authored
381 FREE_ZVAL(var); \
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
382 } else { \
2f5efbd andigutmans - Add _EX macro for Andrei
andigutmans authored
383 (var)->is_ref = _is_ref; \
158088c Zeev Suraski Allow to set the reference count explicitly for ZEND_SET_SYMBOL_WITH_LEN...
zsuraski authored
384 if (_refcount) { \
385 (var)->refcount = _refcount; \
386 } \
387 zend_hash_update(symtable, (name), (name_length), &(var), sizeof(zval *), NULL); \
48ffdd7 Zeev Suraski * Setting variables in the global scope wasn't handling is_ref's properl...
zsuraski authored
388 } \
389 }
390
620d013 Zeev Suraski Support symbols in any symbol table, not just the active one
zsuraski authored
391
392 #define ZEND_SET_GLOBAL_VAR(name, var) \
393 ZEND_SET_SYMBOL(&EG(symbol_table), name, var)
394
e345066 *** empty log message ***
Andrei Zmievski authored
395 #define ZEND_SET_GLOBAL_VAR_WITH_LENGTH(name, name_length, var, _refcount, _is_ref) \
396 ZEND_SET_SYMBOL_WITH_LENGTH(&EG(symbol_table), name, name_length, var, _refcount, _is_ref)
fec413c Added ZEND_SET_GLOBAL_VAR_WITH_LENGTH_EX() macro.
Andrei Zmievski authored
397
06a18f1 andigutmans - Add some internal functions to Zend
andigutmans authored
398 #define HASH_OF(p) ((p)->type==IS_ARRAY ? (p)->value.ht : (((p)->type==IS_OBJECT ? (p)->value.obj.properties : NULL)))
af22085 added ZVAL_*() macros.
Thies C. Arntzen authored
399 #define ZVAL_IS_NULL(z) ((z)->type==IS_NULL)
06a18f1 andigutmans - Add some internal functions to Zend
andigutmans authored
400
b982307 Change header protection macros to conform to standard.
Sascha Schumann authored
401 #endif /* ZEND_API_H */
573b460 andigutmans Zend Library
andigutmans authored
402
403 /*
404 * Local variables:
405 * tab-width: 4
406 * c-basic-offset: 4
407 * End:
408 */
Something went wrong with that request. Please try again.