xref: /PHP-5.4/ext/standard/basic_functions.c (revision be9b2a95)
1 /*
2    +----------------------------------------------------------------------+
3    | PHP Version 5                                                        |
4    +----------------------------------------------------------------------+
5    | Copyright (c) 1997-2014 The PHP Group                                |
6    +----------------------------------------------------------------------+
7    | This source file is subject to version 3.01 of the PHP license,      |
8    | that is bundled with this package in the file LICENSE, and is        |
9    | available through the world-wide-web at the following url:           |
10    | http://www.php.net/license/3_01.txt                                  |
11    | If you did not receive a copy of the PHP license and are unable to   |
12    | obtain it through the world-wide-web, please send a note to          |
13    | license@php.net so we can mail you a copy immediately.               |
14    +----------------------------------------------------------------------+
15    | Authors: Andi Gutmans <andi@zend.com>                                |
16    |          Zeev Suraski <zeev@zend.com>                                |
17    +----------------------------------------------------------------------+
18  */
19 
20 /* $Id$ */
21 
22 #include "php.h"
23 #include "php_streams.h"
24 #include "php_main.h"
25 #include "php_globals.h"
26 #include "php_ini.h"
27 #include "php_standard.h"
28 #include "php_math.h"
29 #include "php_http.h"
30 #include "php_incomplete_class.h"
31 #include "php_getopt.h"
32 #include "ext/standard/info.h"
33 #include "ext/session/php_session.h"
34 #include "zend_operators.h"
35 #include "ext/standard/php_dns.h"
36 #include "ext/standard/php_uuencode.h"
37 
38 #ifdef PHP_WIN32
39 #include "win32/php_win32_globals.h"
40 #include "win32/time.h"
41 #endif
42 
43 typedef struct yy_buffer_state *YY_BUFFER_STATE;
44 
45 #include "zend.h"
46 #include "zend_ini_scanner.h"
47 #include "zend_language_scanner.h"
48 #include <zend_language_parser.h>
49 
50 #include <stdarg.h>
51 #include <stdlib.h>
52 #include <math.h>
53 #include <time.h>
54 #include <stdio.h>
55 
56 #ifndef PHP_WIN32
57 #include <sys/types.h>
58 #include <sys/stat.h>
59 #endif
60 
61 #ifdef NETWARE
62 #include <netinet/in.h>
63 #endif
64 
65 #ifndef PHP_WIN32
66 # include <netdb.h>
67 #else
68 #include "win32/inet.h"
69 #endif
70 
71 #if HAVE_ARPA_INET_H
72 # include <arpa/inet.h>
73 #endif
74 
75 #if HAVE_UNISTD_H
76 # include <unistd.h>
77 #endif
78 
79 #if HAVE_STRING_H
80 # include <string.h>
81 #else
82 # include <strings.h>
83 #endif
84 
85 #if HAVE_LOCALE_H
86 # include <locale.h>
87 #endif
88 
89 #if HAVE_SYS_MMAN_H
90 # include <sys/mman.h>
91 #endif
92 
93 #if HAVE_SYS_LOADAVG_H
94 # include <sys/loadavg.h>
95 #endif
96 
97 #ifdef PHP_WIN32
98 # include "win32/unistd.h"
99 #endif
100 
101 #ifndef INADDR_NONE
102 #define INADDR_NONE ((unsigned long int) -1)
103 #endif
104 
105 #include "zend_globals.h"
106 #include "php_globals.h"
107 #include "SAPI.h"
108 #include "php_ticks.h"
109 
110 #ifdef ZTS
111 PHPAPI int basic_globals_id;
112 #else
113 PHPAPI php_basic_globals basic_globals;
114 #endif
115 
116 #include "php_fopen_wrappers.h"
117 #include "streamsfuncs.h"
118 
119 static zend_class_entry *incomplete_class_entry = NULL;
120 
121 typedef struct _user_tick_function_entry {
122 	zval **arguments;
123 	int arg_count;
124 	int calling;
125 } user_tick_function_entry;
126 
127 /* some prototypes for local functions */
128 static void user_shutdown_function_dtor(php_shutdown_function_entry *shutdown_function_entry);
129 static void user_tick_function_dtor(user_tick_function_entry *tick_function_entry);
130 
131 #undef sprintf
132 
133 /* {{{ arginfo */
134 /* {{{ main/main.c */
135 ZEND_BEGIN_ARG_INFO(arginfo_set_time_limit, 0)
136 	ZEND_ARG_INFO(0, seconds)
137 ZEND_END_ARG_INFO()
138 /* }}} */
139 
140 /* {{{ main/sapi.c */
141 ZEND_BEGIN_ARG_INFO(arginfo_header_register_callback, 0)
142 	ZEND_ARG_INFO(0, callback)
143 ZEND_END_ARG_INFO()
144 /* }}} */
145 
146 /* {{{ main/output.c */
147 ZEND_BEGIN_ARG_INFO_EX(arginfo_ob_start, 0, 0, 0)
148 	ZEND_ARG_INFO(0, user_function)
149 	ZEND_ARG_INFO(0, chunk_size)
150 	ZEND_ARG_INFO(0, flags)
151 ZEND_END_ARG_INFO()
152 
153 ZEND_BEGIN_ARG_INFO(arginfo_ob_flush, 0)
154 ZEND_END_ARG_INFO()
155 
156 ZEND_BEGIN_ARG_INFO(arginfo_ob_clean, 0)
157 ZEND_END_ARG_INFO()
158 
159 ZEND_BEGIN_ARG_INFO(arginfo_ob_end_flush, 0)
160 ZEND_END_ARG_INFO()
161 
162 ZEND_BEGIN_ARG_INFO(arginfo_ob_end_clean, 0)
163 ZEND_END_ARG_INFO()
164 
165 ZEND_BEGIN_ARG_INFO(arginfo_ob_get_flush, 0)
166 ZEND_END_ARG_INFO()
167 
168 ZEND_BEGIN_ARG_INFO(arginfo_ob_get_clean, 0)
169 ZEND_END_ARG_INFO()
170 
171 ZEND_BEGIN_ARG_INFO(arginfo_ob_get_contents, 0)
172 ZEND_END_ARG_INFO()
173 
174 ZEND_BEGIN_ARG_INFO(arginfo_ob_get_level, 0)
175 ZEND_END_ARG_INFO()
176 
177 ZEND_BEGIN_ARG_INFO(arginfo_ob_get_length, 0)
178 ZEND_END_ARG_INFO()
179 
180 ZEND_BEGIN_ARG_INFO(arginfo_ob_list_handlers, 0)
181 ZEND_END_ARG_INFO()
182 
183 ZEND_BEGIN_ARG_INFO_EX(arginfo_ob_get_status, 0, 0, 0)
184 	ZEND_ARG_INFO(0, full_status)
185 ZEND_END_ARG_INFO()
186 
187 ZEND_BEGIN_ARG_INFO_EX(arginfo_ob_implicit_flush, 0, 0, 0)
188 	ZEND_ARG_INFO(0, flag)
189 ZEND_END_ARG_INFO()
190 
191 ZEND_BEGIN_ARG_INFO(arginfo_output_reset_rewrite_vars, 0)
192 ZEND_END_ARG_INFO()
193 
194 ZEND_BEGIN_ARG_INFO(arginfo_output_add_rewrite_var, 0)
195 	ZEND_ARG_INFO(0, name)
196 	ZEND_ARG_INFO(0, value)
197 ZEND_END_ARG_INFO()
198 /* }}} */
199 /* {{{ main/streams/userspace.c */
200 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_wrapper_register, 0, 0, 2)
201 	ZEND_ARG_INFO(0, protocol)
202 	ZEND_ARG_INFO(0, classname)
203 	ZEND_ARG_INFO(0, flags)
204 ZEND_END_ARG_INFO()
205 
206 ZEND_BEGIN_ARG_INFO(arginfo_stream_wrapper_unregister, 0)
207 	ZEND_ARG_INFO(0, protocol)
208 ZEND_END_ARG_INFO()
209 
210 ZEND_BEGIN_ARG_INFO(arginfo_stream_wrapper_restore, 0)
211 	ZEND_ARG_INFO(0, protocol)
212 ZEND_END_ARG_INFO()
213 /* }}} */
214 /* {{{ array.c */
215 ZEND_BEGIN_ARG_INFO_EX(arginfo_krsort, 0, 0, 1)
216 	ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
217 	ZEND_ARG_INFO(0, sort_flags)
218 ZEND_END_ARG_INFO()
219 
220 ZEND_BEGIN_ARG_INFO_EX(arginfo_ksort, 0, 0, 1)
221 	ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
222 	ZEND_ARG_INFO(0, sort_flags)
223 ZEND_END_ARG_INFO()
224 
225 ZEND_BEGIN_ARG_INFO_EX(arginfo_count, 0, 0, 1)
226 	ZEND_ARG_INFO(0, var)
227 	ZEND_ARG_INFO(0, mode)
228 ZEND_END_ARG_INFO()
229 
230 ZEND_BEGIN_ARG_INFO(arginfo_natsort, 0)
231 	ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
232 ZEND_END_ARG_INFO()
233 
234 ZEND_BEGIN_ARG_INFO(arginfo_natcasesort, 0)
235 	ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
236 ZEND_END_ARG_INFO()
237 
238 ZEND_BEGIN_ARG_INFO_EX(arginfo_asort, 0, 0, 1)
239 	ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
240 	ZEND_ARG_INFO(0, sort_flags)
241 ZEND_END_ARG_INFO()
242 
243 ZEND_BEGIN_ARG_INFO_EX(arginfo_arsort, 0, 0, 1)
244 	ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
245 	ZEND_ARG_INFO(0, sort_flags)
246 ZEND_END_ARG_INFO()
247 
248 ZEND_BEGIN_ARG_INFO_EX(arginfo_sort, 0, 0, 1)
249 	ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
250 	ZEND_ARG_INFO(0, sort_flags)
251 ZEND_END_ARG_INFO()
252 
253 ZEND_BEGIN_ARG_INFO_EX(arginfo_rsort, 0, 0, 1)
254 	ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
255 	ZEND_ARG_INFO(0, sort_flags)
256 ZEND_END_ARG_INFO()
257 
258 ZEND_BEGIN_ARG_INFO(arginfo_usort, 0)
259 	ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
260 	ZEND_ARG_INFO(0, cmp_function)
261 ZEND_END_ARG_INFO()
262 
263 ZEND_BEGIN_ARG_INFO(arginfo_uasort, 0)
264 	ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
265 	ZEND_ARG_INFO(0, cmp_function)
266 ZEND_END_ARG_INFO()
267 
268 ZEND_BEGIN_ARG_INFO(arginfo_uksort, 0)
269 	ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
270 	ZEND_ARG_INFO(0, cmp_function)
271 ZEND_END_ARG_INFO()
272 
273 ZEND_BEGIN_ARG_INFO(arginfo_end, 0)
274 	ZEND_ARG_INFO(1, arg)
275 ZEND_END_ARG_INFO()
276 
277 ZEND_BEGIN_ARG_INFO(arginfo_prev, 0)
278 	ZEND_ARG_INFO(1, arg)
279 ZEND_END_ARG_INFO()
280 
281 ZEND_BEGIN_ARG_INFO(arginfo_next, 0)
282 	ZEND_ARG_INFO(1, arg)
283 ZEND_END_ARG_INFO()
284 
285 ZEND_BEGIN_ARG_INFO(arginfo_reset, 0)
286 	ZEND_ARG_INFO(1, arg)
287 ZEND_END_ARG_INFO()
288 
289 ZEND_BEGIN_ARG_INFO(arginfo_current, ZEND_SEND_PREFER_REF)
290 	ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arg)
291 ZEND_END_ARG_INFO()
292 
293 ZEND_BEGIN_ARG_INFO(arginfo_key, ZEND_SEND_PREFER_REF)
294 	ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arg)
295 ZEND_END_ARG_INFO()
296 
297 ZEND_BEGIN_ARG_INFO_EX(arginfo_min, 0, 0, 1)
298 	ZEND_ARG_INFO(0, arg1)
299 	ZEND_ARG_INFO(0, arg2)
300 	ZEND_ARG_INFO(0, ...)
301 ZEND_END_ARG_INFO()
302 
303 ZEND_BEGIN_ARG_INFO_EX(arginfo_max, 0, 0, 1)
304 	ZEND_ARG_INFO(0, arg1)
305 	ZEND_ARG_INFO(0, arg2)
306 	ZEND_ARG_INFO(0, ...)
307 ZEND_END_ARG_INFO()
308 
309 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_walk, 0, 0, 2)
310 	ZEND_ARG_INFO(1, input) /* ARRAY_INFO(1, arg, 0) */
311 	ZEND_ARG_INFO(0, funcname)
312 	ZEND_ARG_INFO(0, userdata)
313 ZEND_END_ARG_INFO()
314 
315 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_walk_recursive, 0, 0, 2)
316 	ZEND_ARG_INFO(1, input) /* ARRAY_INFO(1, arg, 0) */
317 	ZEND_ARG_INFO(0, funcname)
318 	ZEND_ARG_INFO(0, userdata)
319 ZEND_END_ARG_INFO()
320 
321 ZEND_BEGIN_ARG_INFO_EX(arginfo_in_array, 0, 0, 2)
322 	ZEND_ARG_INFO(0, needle)
323 	ZEND_ARG_INFO(0, haystack) /* ARRAY_INFO(0, haystack, 0) */
324 	ZEND_ARG_INFO(0, strict)
325 ZEND_END_ARG_INFO()
326 
327 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_search, 0, 0, 2)
328 	ZEND_ARG_INFO(0, needle)
329 	ZEND_ARG_INFO(0, haystack) /* ARRAY_INFO(0, haystack, 0) */
330 	ZEND_ARG_INFO(0, strict)
331 ZEND_END_ARG_INFO()
332 
333 ZEND_BEGIN_ARG_INFO_EX(arginfo_extract, 0, 0, 1)
334 	ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arg) /* ARRAY_INFO(0, arg, 0) */
335 	ZEND_ARG_INFO(0, extract_type)
336 	ZEND_ARG_INFO(0, prefix)
337 ZEND_END_ARG_INFO()
338 
339 ZEND_BEGIN_ARG_INFO_EX(arginfo_compact, 0, 0, 1)
340 	ZEND_ARG_INFO(0, var_names)
341 	ZEND_ARG_INFO(0, ...)
342 ZEND_END_ARG_INFO()
343 
344 ZEND_BEGIN_ARG_INFO(arginfo_array_fill, 0)
345 	ZEND_ARG_INFO(0, start_key)
346 	ZEND_ARG_INFO(0, num)
347 	ZEND_ARG_INFO(0, val)
348 ZEND_END_ARG_INFO()
349 
350 ZEND_BEGIN_ARG_INFO(arginfo_array_fill_keys, 0)
351 	ZEND_ARG_INFO(0, keys) /* ARRAY_INFO(0, keys, 0) */
352 	ZEND_ARG_INFO(0, val)
353 ZEND_END_ARG_INFO()
354 
355 ZEND_BEGIN_ARG_INFO_EX(arginfo_range, 0, 0, 2)
356 	ZEND_ARG_INFO(0, low)
357 	ZEND_ARG_INFO(0, high)
358 	ZEND_ARG_INFO(0, step)
359 ZEND_END_ARG_INFO()
360 
361 ZEND_BEGIN_ARG_INFO(arginfo_shuffle, 0)
362 	ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
363 ZEND_END_ARG_INFO()
364 
365 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_push, 0, 0, 2)
366 	ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
367 	ZEND_ARG_INFO(0, var)
368 	ZEND_ARG_INFO(0, ...)
369 ZEND_END_ARG_INFO()
370 
371 ZEND_BEGIN_ARG_INFO(arginfo_array_pop, 0)
372 	ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
373 ZEND_END_ARG_INFO()
374 
375 ZEND_BEGIN_ARG_INFO(arginfo_array_shift, 0)
376 	ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
377 ZEND_END_ARG_INFO()
378 
379 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_unshift, 0, 0, 2)
380 	ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
381 	ZEND_ARG_INFO(0, var)
382 	ZEND_ARG_INFO(0, ...)
383 ZEND_END_ARG_INFO()
384 
385 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_splice, 0, 0, 2)
386 	ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
387 	ZEND_ARG_INFO(0, offset)
388 	ZEND_ARG_INFO(0, length)
389 	ZEND_ARG_INFO(0, replacement) /* ARRAY_INFO(0, arg, 1) */
390 ZEND_END_ARG_INFO()
391 
392 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_slice, 0, 0, 2)
393 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(1, arg, 0) */
394 	ZEND_ARG_INFO(0, offset)
395 	ZEND_ARG_INFO(0, length)
396 	ZEND_ARG_INFO(0, preserve_keys)
397 ZEND_END_ARG_INFO()
398 
399 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_merge, 0, 0, 2)
400 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg, 0) */
401 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg, 0) */
402 	ZEND_ARG_INFO(0, ...)  /* ARRAY_INFO(0, ..., 0) */
403 ZEND_END_ARG_INFO()
404 
405 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_merge_recursive, 0, 0, 2)
406 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg, 0) */
407 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg, 0) */
408 	ZEND_ARG_INFO(0, ...)  /* ARRAY_INFO(0, arg, 0) */
409 ZEND_END_ARG_INFO()
410 
411 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_replace, 0, 0, 2)
412 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg, 0) */
413 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg, 0) */
414 	ZEND_ARG_INFO(0, ...)  /* ARRAY_INFO(0, ..., 0) */
415 ZEND_END_ARG_INFO()
416 
417 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_replace_recursive, 0, 0, 2)
418 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg, 0) */
419 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg, 0) */
420 	ZEND_ARG_INFO(0, ...)  /* ARRAY_INFO(0, arg, 0) */
421 ZEND_END_ARG_INFO()
422 
423 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_keys, 0, 0, 1)
424 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
425 	ZEND_ARG_INFO(0, search_value)
426 	ZEND_ARG_INFO(0, strict)
427 ZEND_END_ARG_INFO()
428 
429 ZEND_BEGIN_ARG_INFO(arginfo_array_values, 0)
430 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
431 ZEND_END_ARG_INFO()
432 
433 ZEND_BEGIN_ARG_INFO(arginfo_array_count_values, 0)
434 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
435 ZEND_END_ARG_INFO()
436 
437 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_reverse, 0, 0, 1)
438 	ZEND_ARG_INFO(0, input) /* ARRAY_INFO(0, arg, 0) */
439 	ZEND_ARG_INFO(0, preserve_keys)
440 ZEND_END_ARG_INFO()
441 
442 ZEND_BEGIN_ARG_INFO(arginfo_array_pad, 0)
443 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
444 	ZEND_ARG_INFO(0, pad_size)
445 	ZEND_ARG_INFO(0, pad_value)
446 ZEND_END_ARG_INFO()
447 
448 ZEND_BEGIN_ARG_INFO(arginfo_array_flip, 0)
449 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
450 ZEND_END_ARG_INFO()
451 
452 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_change_key_case, 0, 0, 1)
453 	ZEND_ARG_INFO(0, input) /* ARRAY_INFO(0, arg, 0) */
454 	ZEND_ARG_INFO(0, case)
455 ZEND_END_ARG_INFO()
456 
457 ZEND_BEGIN_ARG_INFO(arginfo_array_unique, 0)
458 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
459 ZEND_END_ARG_INFO()
460 
461 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_intersect_key, 0, 0, 2)
462 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
463 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
464 	ZEND_ARG_INFO(0, ...)  /* ARRAY_INFO(0, ..., 0) */
465 ZEND_END_ARG_INFO()
466 
467 ZEND_BEGIN_ARG_INFO(arginfo_array_intersect_ukey, 0)
468 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
469 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
470 	ZEND_ARG_INFO(0, callback_key_compare_func)
471 ZEND_END_ARG_INFO()
472 
473 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_intersect, 0, 0, 2)
474 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
475 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
476 	ZEND_ARG_INFO(0, ...)  /* ARRAY_INFO(0, ..., 0) */
477 ZEND_END_ARG_INFO()
478 
479 ZEND_BEGIN_ARG_INFO(arginfo_array_uintersect, 0)
480 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
481 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
482 	ZEND_ARG_INFO(0, callback_data_compare_func)
483 ZEND_END_ARG_INFO()
484 
485 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_intersect_assoc, 0, 0, 2)
486 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
487 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
488 	ZEND_ARG_INFO(0, ...)  /* ARRAY_INFO(0, ..., 0) */
489 ZEND_END_ARG_INFO()
490 
491 ZEND_BEGIN_ARG_INFO(arginfo_array_uintersect_assoc, 0)
492 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
493 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
494 	ZEND_ARG_INFO(0, callback_data_compare_func)
495 ZEND_END_ARG_INFO()
496 
497 ZEND_BEGIN_ARG_INFO(arginfo_array_intersect_uassoc, 0)
498 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
499 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
500 	ZEND_ARG_INFO(0, callback_key_compare_func)
501 ZEND_END_ARG_INFO()
502 
503 ZEND_BEGIN_ARG_INFO(arginfo_array_uintersect_uassoc, 0)
504 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
505 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
506 	ZEND_ARG_INFO(0, callback_data_compare_func)
507 	ZEND_ARG_INFO(0, callback_key_compare_func)
508 ZEND_END_ARG_INFO()
509 
510 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_diff_key, 0, 0, 2)
511 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
512 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
513 	ZEND_ARG_INFO(0, ...)  /* ARRAY_INFO(0, ..., 0) */
514 ZEND_END_ARG_INFO()
515 
516 ZEND_BEGIN_ARG_INFO(arginfo_array_diff_ukey, 0)
517 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
518 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
519 	ZEND_ARG_INFO(0, callback_key_comp_func)
520 ZEND_END_ARG_INFO()
521 
522 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_diff, 0, 0, 2)
523 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
524 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
525 	ZEND_ARG_INFO(0, ...)  /* ARRAY_INFO(0, ..., 0) */
526 ZEND_END_ARG_INFO()
527 
528 ZEND_BEGIN_ARG_INFO(arginfo_array_udiff, 0)
529 	ZEND_ARG_INFO(0, arr1)
530 	ZEND_ARG_INFO(0, arr2)
531 	ZEND_ARG_INFO(0, callback_data_comp_func)
532 ZEND_END_ARG_INFO()
533 
534 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_diff_assoc, 0, 0, 2)
535 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
536 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
537 	ZEND_ARG_INFO(0, ...)  /* ARRAY_INFO(0, ..., 0) */
538 ZEND_END_ARG_INFO()
539 
540 ZEND_BEGIN_ARG_INFO(arginfo_array_diff_uassoc, 0)
541 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
542 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
543 	ZEND_ARG_INFO(0, callback_data_comp_func)
544 ZEND_END_ARG_INFO()
545 
546 ZEND_BEGIN_ARG_INFO(arginfo_array_udiff_assoc, 0)
547 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
548 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
549 	ZEND_ARG_INFO(0, callback_key_comp_func)
550 ZEND_END_ARG_INFO()
551 
552 ZEND_BEGIN_ARG_INFO(arginfo_array_udiff_uassoc, 0)
553 	ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
554 	ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
555 	ZEND_ARG_INFO(0, callback_data_comp_func)
556 	ZEND_ARG_INFO(0, callback_key_comp_func)
557 ZEND_END_ARG_INFO()
558 
559 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_multisort, ZEND_SEND_PREFER_REF, 0, 1)
560 	ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arr1) /* ARRAY_INFO(0, arg1, 0) */
561 	ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, SORT_ASC_or_SORT_DESC)
562 	ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, SORT_REGULAR_or_SORT_NUMERIC_or_SORT_STRING)
563 	ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arr2)
564 	ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, SORT_ASC_or_SORT_DESC)
565 	ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, SORT_REGULAR_or_SORT_NUMERIC_or_SORT_STRING)
566 ZEND_END_ARG_INFO()
567 
568 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_rand, 0, 0, 1)
569 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
570 	ZEND_ARG_INFO(0, num_req)
571 ZEND_END_ARG_INFO()
572 
573 ZEND_BEGIN_ARG_INFO(arginfo_array_sum, 0)
574 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
575 ZEND_END_ARG_INFO()
576 
577 ZEND_BEGIN_ARG_INFO(arginfo_array_product, 0)
578 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
579 ZEND_END_ARG_INFO()
580 
581 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_reduce, 0, 0, 2)
582 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
583 	ZEND_ARG_INFO(0, callback)
584 	ZEND_ARG_INFO(0, initial)
585 ZEND_END_ARG_INFO()
586 
587 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_filter, 0, 0, 1)
588 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
589 	ZEND_ARG_INFO(0, callback)
590 ZEND_END_ARG_INFO()
591 
592 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_map, 0, 0, 2)
593 	ZEND_ARG_INFO(0, callback)
594 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
595 	ZEND_ARG_INFO(0, ...)
596 ZEND_END_ARG_INFO()
597 
598 ZEND_BEGIN_ARG_INFO(arginfo_array_key_exists, 0)
599 	ZEND_ARG_INFO(0, key)
600 	ZEND_ARG_INFO(0, search)
601 ZEND_END_ARG_INFO()
602 
603 ZEND_BEGIN_ARG_INFO_EX(arginfo_array_chunk, 0, 0, 2)
604 	ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
605 	ZEND_ARG_INFO(0, size)
606 	ZEND_ARG_INFO(0, preserve_keys)
607 ZEND_END_ARG_INFO()
608 
609 ZEND_BEGIN_ARG_INFO(arginfo_array_combine, 0)
610 	ZEND_ARG_INFO(0, keys)   /* ARRAY_INFO(0, keys, 0) */
611 	ZEND_ARG_INFO(0, values) /* ARRAY_INFO(0, values, 0) */
612 ZEND_END_ARG_INFO()
613 /* }}} */
614 /* {{{ basic_functions.c */
615 ZEND_BEGIN_ARG_INFO(arginfo_get_magic_quotes_gpc, 0)
616 ZEND_END_ARG_INFO()
617 
618 ZEND_BEGIN_ARG_INFO(arginfo_get_magic_quotes_runtime, 0)
619 ZEND_END_ARG_INFO()
620 
621 ZEND_BEGIN_ARG_INFO_EX(arginfo_set_magic_quotes_runtime, 0, 0, 1)
622 	ZEND_ARG_INFO(0, new_setting)
623 ZEND_END_ARG_INFO()
624 
625 ZEND_BEGIN_ARG_INFO(arginfo_constant, 0)
626 	ZEND_ARG_INFO(0, const_name)
627 ZEND_END_ARG_INFO()
628 
629 #ifdef HAVE_INET_NTOP
630 ZEND_BEGIN_ARG_INFO(arginfo_inet_ntop, 0)
631 	ZEND_ARG_INFO(0, in_addr)
632 ZEND_END_ARG_INFO()
633 #endif
634 
635 #ifdef HAVE_INET_PTON
636 ZEND_BEGIN_ARG_INFO(arginfo_inet_pton, 0)
637 	ZEND_ARG_INFO(0, ip_address)
638 ZEND_END_ARG_INFO()
639 #endif
640 
641 ZEND_BEGIN_ARG_INFO(arginfo_ip2long, 0)
642 	ZEND_ARG_INFO(0, ip_address)
643 ZEND_END_ARG_INFO()
644 
645 ZEND_BEGIN_ARG_INFO(arginfo_long2ip, 0)
646 	ZEND_ARG_INFO(0, proper_address)
647 ZEND_END_ARG_INFO()
648 
649 ZEND_BEGIN_ARG_INFO(arginfo_getenv, 0)
650 	ZEND_ARG_INFO(0, varname)
651 ZEND_END_ARG_INFO()
652 
653 #ifdef HAVE_PUTENV
654 ZEND_BEGIN_ARG_INFO(arginfo_putenv, 0)
655 	ZEND_ARG_INFO(0, setting)
656 ZEND_END_ARG_INFO()
657 #endif
658 
659 ZEND_BEGIN_ARG_INFO_EX(arginfo_getopt, 0, 0, 1)
660 	ZEND_ARG_INFO(0, options)
661 	ZEND_ARG_INFO(0, opts) /* ARRAY_INFO(0, opts, 1) */
662 ZEND_END_ARG_INFO()
663 
664 ZEND_BEGIN_ARG_INFO(arginfo_flush, 0)
665 ZEND_END_ARG_INFO()
666 
667 ZEND_BEGIN_ARG_INFO(arginfo_sleep, 0)
668 	ZEND_ARG_INFO(0, seconds)
669 ZEND_END_ARG_INFO()
670 
671 ZEND_BEGIN_ARG_INFO(arginfo_usleep, 0)
672 	ZEND_ARG_INFO(0, micro_seconds)
673 ZEND_END_ARG_INFO()
674 
675 #if HAVE_NANOSLEEP
676 ZEND_BEGIN_ARG_INFO(arginfo_time_nanosleep, 0)
677 	ZEND_ARG_INFO(0, seconds)
678 	ZEND_ARG_INFO(0, nanoseconds)
679 ZEND_END_ARG_INFO()
680 
681 ZEND_BEGIN_ARG_INFO(arginfo_time_sleep_until, 0)
682 	ZEND_ARG_INFO(0, timestamp)
683 ZEND_END_ARG_INFO()
684 #endif
685 
686 ZEND_BEGIN_ARG_INFO(arginfo_get_current_user, 0)
687 ZEND_END_ARG_INFO()
688 
689 ZEND_BEGIN_ARG_INFO(arginfo_get_cfg_var, 0)
690 	ZEND_ARG_INFO(0, option_name)
691 ZEND_END_ARG_INFO()
692 
693 ZEND_BEGIN_ARG_INFO_EX(arginfo_error_log, 0, 0, 1)
694 	ZEND_ARG_INFO(0, message)
695 	ZEND_ARG_INFO(0, message_type)
696 	ZEND_ARG_INFO(0, destination)
697 	ZEND_ARG_INFO(0, extra_headers)
698 ZEND_END_ARG_INFO()
699 
700 ZEND_BEGIN_ARG_INFO_EX(arginfo_error_get_last, 0, 0, 0)
701 ZEND_END_ARG_INFO()
702 
703 ZEND_BEGIN_ARG_INFO_EX(arginfo_call_user_func, 0, 0, 1)
704 	ZEND_ARG_INFO(0, function_name)
705 	ZEND_ARG_INFO(0, parmeter)
706 	ZEND_ARG_INFO(0, ...)
707 ZEND_END_ARG_INFO()
708 
709 ZEND_BEGIN_ARG_INFO_EX(arginfo_call_user_func_array, 0, 0, 2)
710 	ZEND_ARG_INFO(0, function_name)
711 	ZEND_ARG_INFO(0, parameters) /* ARRAY_INFO(0, parameters, 1) */
712 ZEND_END_ARG_INFO()
713 
714 ZEND_BEGIN_ARG_INFO_EX(arginfo_call_user_method, 0, 0, 2)
715 	ZEND_ARG_INFO(0, method_name)
716 	ZEND_ARG_INFO(1, object)
717 	ZEND_ARG_INFO(0, parameter)
718 	ZEND_ARG_INFO(0, ...)
719 ZEND_END_ARG_INFO()
720 
721 ZEND_BEGIN_ARG_INFO(arginfo_call_user_method_array, 0)
722 	ZEND_ARG_INFO(0, method_name)
723 	ZEND_ARG_INFO(1, object)
724 	ZEND_ARG_INFO(0, params) /* ARRAY_INFO(0, params, 1) */
725 ZEND_END_ARG_INFO()
726 
727 ZEND_BEGIN_ARG_INFO_EX(arginfo_forward_static_call, 0, 0, 1)
728 	ZEND_ARG_INFO(0, function_name)
729 	ZEND_ARG_INFO(0, parameter)
730 	ZEND_ARG_INFO(0, ...)
731 ZEND_END_ARG_INFO()
732 
733 ZEND_BEGIN_ARG_INFO_EX(arginfo_forward_static_call_array, 0, 0, 2)
734 	ZEND_ARG_INFO(0, function_name)
735 	ZEND_ARG_INFO(0, parameters) /* ARRAY_INFO(0, parameters, 1) */
736 ZEND_END_ARG_INFO()
737 
738 ZEND_BEGIN_ARG_INFO(arginfo_register_shutdown_function, 0)
739 	ZEND_ARG_INFO(0, function_name)
740 ZEND_END_ARG_INFO()
741 
742 ZEND_BEGIN_ARG_INFO_EX(arginfo_highlight_file, 0, 0, 1)
743 	ZEND_ARG_INFO(0, file_name)
744 	ZEND_ARG_INFO(0, return)
745 ZEND_END_ARG_INFO()
746 
747 ZEND_BEGIN_ARG_INFO(arginfo_php_strip_whitespace, 0)
748 	ZEND_ARG_INFO(0, file_name)
749 ZEND_END_ARG_INFO()
750 
751 ZEND_BEGIN_ARG_INFO_EX(arginfo_highlight_string, 0, 0, 1)
752 	ZEND_ARG_INFO(0, string)
753 	ZEND_ARG_INFO(0, return)
754 ZEND_END_ARG_INFO()
755 
756 ZEND_BEGIN_ARG_INFO(arginfo_ini_get, 0)
757 	ZEND_ARG_INFO(0, varname)
758 ZEND_END_ARG_INFO()
759 
760 ZEND_BEGIN_ARG_INFO_EX(arginfo_ini_get_all, 0, 0, 0)
761 	ZEND_ARG_INFO(0, extension)
762 ZEND_END_ARG_INFO()
763 
764 ZEND_BEGIN_ARG_INFO(arginfo_ini_set, 0)
765 	ZEND_ARG_INFO(0, varname)
766 	ZEND_ARG_INFO(0, newvalue)
767 ZEND_END_ARG_INFO()
768 
769 ZEND_BEGIN_ARG_INFO(arginfo_ini_restore, 0)
770 	ZEND_ARG_INFO(0, varname)
771 ZEND_END_ARG_INFO()
772 
773 ZEND_BEGIN_ARG_INFO(arginfo_set_include_path, 0)
774 	ZEND_ARG_INFO(0, new_include_path)
775 ZEND_END_ARG_INFO()
776 
777 ZEND_BEGIN_ARG_INFO(arginfo_get_include_path, 0)
778 ZEND_END_ARG_INFO()
779 
780 ZEND_BEGIN_ARG_INFO(arginfo_restore_include_path, 0)
781 ZEND_END_ARG_INFO()
782 
783 ZEND_BEGIN_ARG_INFO_EX(arginfo_print_r, 0, 0, 1)
784 	ZEND_ARG_INFO(0, var)
785 	ZEND_ARG_INFO(0, return)
786 ZEND_END_ARG_INFO()
787 
788 ZEND_BEGIN_ARG_INFO(arginfo_connection_aborted, 0)
789 ZEND_END_ARG_INFO()
790 
791 ZEND_BEGIN_ARG_INFO(arginfo_connection_status, 0)
792 ZEND_END_ARG_INFO()
793 
794 ZEND_BEGIN_ARG_INFO_EX(arginfo_ignore_user_abort, 0, 0, 0)
795 	ZEND_ARG_INFO(0, value)
796 ZEND_END_ARG_INFO()
797 
798 #if HAVE_GETSERVBYNAME
799 ZEND_BEGIN_ARG_INFO(arginfo_getservbyname, 0)
800 	ZEND_ARG_INFO(0, service)
801 	ZEND_ARG_INFO(0, protocol)
802 ZEND_END_ARG_INFO()
803 #endif
804 
805 #if HAVE_GETSERVBYPORT
806 ZEND_BEGIN_ARG_INFO(arginfo_getservbyport, 0)
807 	ZEND_ARG_INFO(0, port)
808 	ZEND_ARG_INFO(0, protocol)
809 ZEND_END_ARG_INFO()
810 #endif
811 
812 #if HAVE_GETPROTOBYNAME
813 ZEND_BEGIN_ARG_INFO(arginfo_getprotobyname, 0)
814 	ZEND_ARG_INFO(0, name)
815 ZEND_END_ARG_INFO()
816 #endif
817 
818 #if HAVE_GETPROTOBYNUMBER
819 ZEND_BEGIN_ARG_INFO(arginfo_getprotobynumber, 0)
820 	ZEND_ARG_INFO(0, proto)
821 ZEND_END_ARG_INFO()
822 #endif
823 
824 ZEND_BEGIN_ARG_INFO_EX(arginfo_register_tick_function, 0, 0, 1)
825 	ZEND_ARG_INFO(0, function_name)
826 	ZEND_ARG_INFO(0, arg)
827 	ZEND_ARG_INFO(0, ...)
828 ZEND_END_ARG_INFO()
829 
830 ZEND_BEGIN_ARG_INFO(arginfo_unregister_tick_function, 0)
831 	ZEND_ARG_INFO(0, function_name)
832 ZEND_END_ARG_INFO()
833 
834 ZEND_BEGIN_ARG_INFO(arginfo_is_uploaded_file, 0)
835 	ZEND_ARG_INFO(0, path)
836 ZEND_END_ARG_INFO()
837 
838 ZEND_BEGIN_ARG_INFO(arginfo_move_uploaded_file, 0)
839 	ZEND_ARG_INFO(0, path)
840 	ZEND_ARG_INFO(0, new_path)
841 ZEND_END_ARG_INFO()
842 
843 ZEND_BEGIN_ARG_INFO_EX(arginfo_parse_ini_file, 0, 0, 1)
844 	ZEND_ARG_INFO(0, filename)
845 	ZEND_ARG_INFO(0, process_sections)
846 	ZEND_ARG_INFO(0, scanner_mode)
847 ZEND_END_ARG_INFO()
848 
849 ZEND_BEGIN_ARG_INFO_EX(arginfo_parse_ini_string, 0, 0, 1)
850     ZEND_ARG_INFO(0, ini_string)
851     ZEND_ARG_INFO(0, process_sections)
852     ZEND_ARG_INFO(0, scanner_mode)
853 ZEND_END_ARG_INFO()
854 
855 #if ZEND_DEBUG
856 ZEND_BEGIN_ARG_INFO(arginfo_config_get_hash, 0)
857 ZEND_END_ARG_INFO()
858 #endif
859 
860 #ifdef HAVE_GETLOADAVG
861 ZEND_BEGIN_ARG_INFO(arginfo_sys_getloadavg, 0)
862 ZEND_END_ARG_INFO()
863 #endif
864 /* }}} */
865 /* {{{ assert.c */
866 ZEND_BEGIN_ARG_INFO(arginfo_assert, 0)
867 	ZEND_ARG_INFO(0, assertion)
868 ZEND_END_ARG_INFO()
869 
870 ZEND_BEGIN_ARG_INFO_EX(arginfo_assert_options, 0, 0, 1)
871 	ZEND_ARG_INFO(0, what)
872 	ZEND_ARG_INFO(0, value)
873 ZEND_END_ARG_INFO()
874 /* }}} */
875 /* {{{ base64.c */
876 ZEND_BEGIN_ARG_INFO(arginfo_base64_encode, 0)
877 	ZEND_ARG_INFO(0, str)
878 ZEND_END_ARG_INFO()
879 
880 ZEND_BEGIN_ARG_INFO_EX(arginfo_base64_decode, 0, 0, 1)
881 	ZEND_ARG_INFO(0, str)
882 	ZEND_ARG_INFO(0, strict)
883 ZEND_END_ARG_INFO()
884 
885 /* }}} */
886 /* {{{ browscap.c */
887 ZEND_BEGIN_ARG_INFO_EX(arginfo_get_browser, 0, 0, 0)
888 	ZEND_ARG_INFO(0, browser_name)
889 	ZEND_ARG_INFO(0, return_array)
890 ZEND_END_ARG_INFO()
891 /* }}} */
892 /* {{{ crc32.c */
893 ZEND_BEGIN_ARG_INFO(arginfo_crc32, 0)
894 	ZEND_ARG_INFO(0, str)
895 ZEND_END_ARG_INFO()
896 
897 /* }}} */
898 /* {{{ crypt.c */
899 #if HAVE_CRYPT
900 ZEND_BEGIN_ARG_INFO_EX(arginfo_crypt, 0, 0, 1)
901 	ZEND_ARG_INFO(0, str)
902 	ZEND_ARG_INFO(0, salt)
903 ZEND_END_ARG_INFO()
904 #endif
905 /* }}} */
906 /* {{{ cyr_convert.c */
907 ZEND_BEGIN_ARG_INFO(arginfo_convert_cyr_string, 0)
908 	ZEND_ARG_INFO(0, str)
909 	ZEND_ARG_INFO(0, from)
910 	ZEND_ARG_INFO(0, to)
911 ZEND_END_ARG_INFO()
912 
913 /* }}} */
914 /* {{{ datetime.c */
915 #if HAVE_STRPTIME
916 ZEND_BEGIN_ARG_INFO(arginfo_strptime, 0)
917 	ZEND_ARG_INFO(0, timestamp)
918 	ZEND_ARG_INFO(0, format)
919 ZEND_END_ARG_INFO()
920 #endif
921 /* }}} */
922 /* {{{ dir.c */
923 ZEND_BEGIN_ARG_INFO_EX(arginfo_opendir, 0, 0, 1)
924 	ZEND_ARG_INFO(0, path)
925 	ZEND_ARG_INFO(0, context)
926 ZEND_END_ARG_INFO()
927 
928 ZEND_BEGIN_ARG_INFO_EX(arginfo_dir, 0, 0, 1)
929 	ZEND_ARG_INFO(0, directory)
930 	ZEND_ARG_INFO(0, context)
931 ZEND_END_ARG_INFO()
932 
933 ZEND_BEGIN_ARG_INFO_EX(arginfo_closedir, 0, 0, 0)
934 	ZEND_ARG_INFO(0, dir_handle)
935 ZEND_END_ARG_INFO()
936 
937 #if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
938 ZEND_BEGIN_ARG_INFO(arginfo_chroot, 0)
939 	ZEND_ARG_INFO(0, directory)
940 ZEND_END_ARG_INFO()
941 #endif
942 
943 ZEND_BEGIN_ARG_INFO(arginfo_chdir, 0)
944 	ZEND_ARG_INFO(0, directory)
945 ZEND_END_ARG_INFO()
946 
947 ZEND_BEGIN_ARG_INFO(arginfo_getcwd, 0)
948 ZEND_END_ARG_INFO()
949 
950 ZEND_BEGIN_ARG_INFO_EX(arginfo_rewinddir, 0, 0, 0)
951 	ZEND_ARG_INFO(0, dir_handle)
952 ZEND_END_ARG_INFO()
953 
954 ZEND_BEGIN_ARG_INFO_EX(arginfo_readdir, 0, 0, 0)
955 	ZEND_ARG_INFO(0, dir_handle)
956 ZEND_END_ARG_INFO()
957 
958 #ifdef HAVE_GLOB
959 ZEND_BEGIN_ARG_INFO_EX(arginfo_glob, 0, 0, 1)
960 	ZEND_ARG_INFO(0, pattern)
961 	ZEND_ARG_INFO(0, flags)
962 ZEND_END_ARG_INFO()
963 #endif
964 
965 ZEND_BEGIN_ARG_INFO_EX(arginfo_scandir, 0, 0, 1)
966 	ZEND_ARG_INFO(0, dir)
967 	ZEND_ARG_INFO(0, sorting_order)
968 	ZEND_ARG_INFO(0, context)
969 ZEND_END_ARG_INFO()
970 /* }}} */
971 /* {{{ arginfo ext/standard/dl.c */
972 ZEND_BEGIN_ARG_INFO(arginfo_dl, 0)
973 	ZEND_ARG_INFO(0, extension_filename)
974 ZEND_END_ARG_INFO()
975 /* }}} */
976 /* {{{ dns.c */
977 ZEND_BEGIN_ARG_INFO(arginfo_gethostbyaddr, 0)
978 	ZEND_ARG_INFO(0, ip_address)
979 ZEND_END_ARG_INFO()
980 
981 ZEND_BEGIN_ARG_INFO(arginfo_gethostbyname, 0)
982 	ZEND_ARG_INFO(0, hostname)
983 ZEND_END_ARG_INFO()
984 
985 ZEND_BEGIN_ARG_INFO(arginfo_gethostbynamel, 0)
986 	ZEND_ARG_INFO(0, hostname)
987 ZEND_END_ARG_INFO()
988 
989 #ifdef HAVE_GETHOSTNAME
990 ZEND_BEGIN_ARG_INFO(arginfo_gethostname, 0)
991 ZEND_END_ARG_INFO()
992 #endif
993 
994 #if defined(PHP_WIN32) || (HAVE_DNS_SEARCH_FUNC && !(defined(__BEOS__) || defined(NETWARE)))
995 ZEND_BEGIN_ARG_INFO_EX(arginfo_dns_check_record, 0, 0, 1)
996 	ZEND_ARG_INFO(0, host)
997 	ZEND_ARG_INFO(0, type)
998 ZEND_END_ARG_INFO()
999 
1000 # if defined(PHP_WIN32) || HAVE_FULL_DNS_FUNCS
1001 ZEND_BEGIN_ARG_INFO_EX(arginfo_dns_get_record, 0, 0, 1)
1002 	ZEND_ARG_INFO(0, hostname)
1003 	ZEND_ARG_INFO(0, type)
1004 	ZEND_ARG_ARRAY_INFO(1, authns, 1)
1005 	ZEND_ARG_ARRAY_INFO(1, addtl, 1)
1006 	ZEND_ARG_INFO(0, raw)
1007 ZEND_END_ARG_INFO()
1008 
1009 ZEND_BEGIN_ARG_INFO_EX(arginfo_dns_get_mx, 0, 0, 2)
1010 	ZEND_ARG_INFO(0, hostname)
1011 	ZEND_ARG_INFO(1, mxhosts) /* ARRAY_INFO(1, mxhosts, 1) */
1012 	ZEND_ARG_INFO(1, weight) /* ARRAY_INFO(1, weight, 1) */
1013 ZEND_END_ARG_INFO()
1014 # endif
1015 
1016 #endif /* defined(PHP_WIN32) || (HAVE_DNS_SEARCH_FUNC && !(defined(__BEOS__) || defined(NETWARE))) */
1017 /* }}} */
1018 
1019 /* {{{ exec.c */
1020 ZEND_BEGIN_ARG_INFO_EX(arginfo_exec, 0, 0, 1)
1021 	ZEND_ARG_INFO(0, command)
1022 	ZEND_ARG_INFO(1, output) /* ARRAY_INFO(1, output, 1) */
1023 	ZEND_ARG_INFO(1, return_value)
1024 ZEND_END_ARG_INFO()
1025 
1026 ZEND_BEGIN_ARG_INFO_EX(arginfo_system, 0, 0, 1)
1027 	ZEND_ARG_INFO(0, command)
1028 	ZEND_ARG_INFO(1, return_value)
1029 ZEND_END_ARG_INFO()
1030 
1031 ZEND_BEGIN_ARG_INFO_EX(arginfo_passthru, 0, 0, 1)
1032 	ZEND_ARG_INFO(0, command)
1033 	ZEND_ARG_INFO(1, return_value)
1034 ZEND_END_ARG_INFO()
1035 
1036 ZEND_BEGIN_ARG_INFO(arginfo_escapeshellcmd, 0)
1037 	ZEND_ARG_INFO(0, command)
1038 ZEND_END_ARG_INFO()
1039 
1040 ZEND_BEGIN_ARG_INFO(arginfo_escapeshellarg, 0)
1041 	ZEND_ARG_INFO(0, arg)
1042 ZEND_END_ARG_INFO()
1043 
1044 ZEND_BEGIN_ARG_INFO(arginfo_shell_exec, 0)
1045 	ZEND_ARG_INFO(0, cmd)
1046 ZEND_END_ARG_INFO()
1047 
1048 #ifdef HAVE_NICE
1049 ZEND_BEGIN_ARG_INFO(arginfo_proc_nice, 0)
1050 	ZEND_ARG_INFO(0, priority)
1051 ZEND_END_ARG_INFO()
1052 #endif
1053 /* }}} */
1054 /* {{{ file.c */
1055 ZEND_BEGIN_ARG_INFO_EX(arginfo_flock, 0, 0, 2)
1056 	ZEND_ARG_INFO(0, fp)
1057 	ZEND_ARG_INFO(0, operation)
1058 	ZEND_ARG_INFO(1, wouldblock)
1059 ZEND_END_ARG_INFO()
1060 
1061 ZEND_BEGIN_ARG_INFO_EX(arginfo_get_meta_tags, 0, 0, 1)
1062 	ZEND_ARG_INFO(0, filename)
1063 	ZEND_ARG_INFO(0, use_include_path)
1064 ZEND_END_ARG_INFO()
1065 
1066 ZEND_BEGIN_ARG_INFO_EX(arginfo_file_get_contents, 0, 0, 1)
1067 	ZEND_ARG_INFO(0, filename)
1068 	ZEND_ARG_INFO(0, flags)
1069 	ZEND_ARG_INFO(0, context)
1070 	ZEND_ARG_INFO(0, offset)
1071 	ZEND_ARG_INFO(0, maxlen)
1072 ZEND_END_ARG_INFO()
1073 
1074 ZEND_BEGIN_ARG_INFO_EX(arginfo_file_put_contents, 0, 0, 2)
1075 	ZEND_ARG_INFO(0, filename)
1076 	ZEND_ARG_INFO(0, data)
1077 	ZEND_ARG_INFO(0, flags)
1078 	ZEND_ARG_INFO(0, context)
1079 ZEND_END_ARG_INFO()
1080 
1081 ZEND_BEGIN_ARG_INFO_EX(arginfo_file, 0, 0, 1)
1082 	ZEND_ARG_INFO(0, filename)
1083 	ZEND_ARG_INFO(0, flags)
1084 	ZEND_ARG_INFO(0, context)
1085 ZEND_END_ARG_INFO()
1086 
1087 ZEND_BEGIN_ARG_INFO(arginfo_tempnam, 0)
1088 	ZEND_ARG_INFO(0, dir)
1089 	ZEND_ARG_INFO(0, prefix)
1090 ZEND_END_ARG_INFO()
1091 
1092 ZEND_BEGIN_ARG_INFO(arginfo_tmpfile, 0)
1093 ZEND_END_ARG_INFO()
1094 
1095 ZEND_BEGIN_ARG_INFO_EX(arginfo_fopen, 0, 0, 2)
1096 	ZEND_ARG_INFO(0, filename)
1097 	ZEND_ARG_INFO(0, mode)
1098 	ZEND_ARG_INFO(0, use_include_path)
1099 	ZEND_ARG_INFO(0, context)
1100 ZEND_END_ARG_INFO()
1101 
1102 ZEND_BEGIN_ARG_INFO(arginfo_fclose, 0)
1103 	ZEND_ARG_INFO(0, fp)
1104 ZEND_END_ARG_INFO()
1105 
1106 ZEND_BEGIN_ARG_INFO(arginfo_popen, 0)
1107 	ZEND_ARG_INFO(0, command)
1108 	ZEND_ARG_INFO(0, mode)
1109 ZEND_END_ARG_INFO()
1110 
1111 ZEND_BEGIN_ARG_INFO(arginfo_pclose, 0)
1112 	ZEND_ARG_INFO(0, fp)
1113 ZEND_END_ARG_INFO()
1114 
1115 ZEND_BEGIN_ARG_INFO(arginfo_feof, 0)
1116 	ZEND_ARG_INFO(0, fp)
1117 ZEND_END_ARG_INFO()
1118 
1119 ZEND_BEGIN_ARG_INFO_EX(arginfo_fgets, 0, 0, 1)
1120 	ZEND_ARG_INFO(0, fp)
1121 	ZEND_ARG_INFO(0, length)
1122 ZEND_END_ARG_INFO()
1123 
1124 ZEND_BEGIN_ARG_INFO(arginfo_fgetc, 0)
1125 	ZEND_ARG_INFO(0, fp)
1126 ZEND_END_ARG_INFO()
1127 
1128 ZEND_BEGIN_ARG_INFO_EX(arginfo_fgetss, 0, 0, 1)
1129 	ZEND_ARG_INFO(0, fp)
1130 	ZEND_ARG_INFO(0, length)
1131 	ZEND_ARG_INFO(0, allowable_tags)
1132 ZEND_END_ARG_INFO()
1133 
1134 ZEND_BEGIN_ARG_INFO_EX(arginfo_fscanf, 1, 0, 2)
1135 	ZEND_ARG_INFO(0, stream)
1136 	ZEND_ARG_INFO(0, format)
1137 	ZEND_ARG_INFO(1, ...)
1138 ZEND_END_ARG_INFO()
1139 
1140 ZEND_BEGIN_ARG_INFO_EX(arginfo_fwrite, 0, 0, 2)
1141 	ZEND_ARG_INFO(0, fp)
1142 	ZEND_ARG_INFO(0, str)
1143 	ZEND_ARG_INFO(0, length)
1144 ZEND_END_ARG_INFO()
1145 
1146 ZEND_BEGIN_ARG_INFO(arginfo_fflush, 0)
1147 	ZEND_ARG_INFO(0, fp)
1148 ZEND_END_ARG_INFO()
1149 
1150 ZEND_BEGIN_ARG_INFO(arginfo_rewind, 0)
1151 	ZEND_ARG_INFO(0, fp)
1152 ZEND_END_ARG_INFO()
1153 
1154 ZEND_BEGIN_ARG_INFO(arginfo_ftell, 0)
1155 	ZEND_ARG_INFO(0, fp)
1156 ZEND_END_ARG_INFO()
1157 
1158 ZEND_BEGIN_ARG_INFO_EX(arginfo_fseek, 0, 0, 2)
1159 	ZEND_ARG_INFO(0, fp)
1160 	ZEND_ARG_INFO(0, offset)
1161 	ZEND_ARG_INFO(0, whence)
1162 ZEND_END_ARG_INFO()
1163 
1164 ZEND_BEGIN_ARG_INFO_EX(arginfo_mkdir, 0, 0, 1)
1165 	ZEND_ARG_INFO(0, pathname)
1166 	ZEND_ARG_INFO(0, mode)
1167 	ZEND_ARG_INFO(0, recursive)
1168 	ZEND_ARG_INFO(0, context)
1169 ZEND_END_ARG_INFO()
1170 
1171 ZEND_BEGIN_ARG_INFO_EX(arginfo_rmdir, 0, 0, 1)
1172 	ZEND_ARG_INFO(0, dirname)
1173 	ZEND_ARG_INFO(0, context)
1174 ZEND_END_ARG_INFO()
1175 
1176 ZEND_BEGIN_ARG_INFO_EX(arginfo_readfile, 0, 0, 1)
1177 	ZEND_ARG_INFO(0, filename)
1178 	ZEND_ARG_INFO(0, flags)
1179 	ZEND_ARG_INFO(0, context)
1180 ZEND_END_ARG_INFO()
1181 
1182 ZEND_BEGIN_ARG_INFO_EX(arginfo_umask, 0, 0, 0)
1183 	ZEND_ARG_INFO(0, mask)
1184 ZEND_END_ARG_INFO()
1185 
1186 ZEND_BEGIN_ARG_INFO(arginfo_fpassthru, 0)
1187 	ZEND_ARG_INFO(0, fp)
1188 ZEND_END_ARG_INFO()
1189 
1190 ZEND_BEGIN_ARG_INFO_EX(arginfo_rename, 0, 0, 2)
1191 	ZEND_ARG_INFO(0, old_name)
1192 	ZEND_ARG_INFO(0, new_name)
1193 	ZEND_ARG_INFO(0, context)
1194 ZEND_END_ARG_INFO()
1195 
1196 ZEND_BEGIN_ARG_INFO_EX(arginfo_unlink, 0, 0, 1)
1197 	ZEND_ARG_INFO(0, filename)
1198 	ZEND_ARG_INFO(0, context)
1199 ZEND_END_ARG_INFO()
1200 
1201 ZEND_BEGIN_ARG_INFO(arginfo_ftruncate, 0)
1202 	ZEND_ARG_INFO(0, fp)
1203 	ZEND_ARG_INFO(0, size)
1204 ZEND_END_ARG_INFO()
1205 
1206 ZEND_BEGIN_ARG_INFO(arginfo_fstat, 0)
1207 	ZEND_ARG_INFO(0, fp)
1208 ZEND_END_ARG_INFO()
1209 ZEND_BEGIN_ARG_INFO_EX(arginfo_copy, 0, 0, 2)
1210 	ZEND_ARG_INFO(0, source_file)
1211 	ZEND_ARG_INFO(0, destination_file)
1212 	ZEND_ARG_INFO(0, context)
1213 ZEND_END_ARG_INFO()
1214 
1215 ZEND_BEGIN_ARG_INFO(arginfo_fread, 0)
1216 	ZEND_ARG_INFO(0, fp)
1217 	ZEND_ARG_INFO(0, length)
1218 ZEND_END_ARG_INFO()
1219 
1220 ZEND_BEGIN_ARG_INFO_EX(arginfo_fputcsv, 0, 0, 2)
1221 	ZEND_ARG_INFO(0, fp)
1222 	ZEND_ARG_INFO(0, fields) /* ARRAY_INFO(0, fields, 1) */
1223 	ZEND_ARG_INFO(0, delimiter)
1224 	ZEND_ARG_INFO(0, enclosure)
1225 ZEND_END_ARG_INFO()
1226 
1227 ZEND_BEGIN_ARG_INFO_EX(arginfo_fgetcsv, 0, 0, 1)
1228 	ZEND_ARG_INFO(0, fp)
1229 	ZEND_ARG_INFO(0, length)
1230 	ZEND_ARG_INFO(0, delimiter)
1231 	ZEND_ARG_INFO(0, enclosure)
1232 	ZEND_ARG_INFO(0, escape)
1233 ZEND_END_ARG_INFO()
1234 
1235 #if (!defined(__BEOS__) && !defined(NETWARE) && HAVE_REALPATH) || defined(ZTS)
1236 ZEND_BEGIN_ARG_INFO(arginfo_realpath, 0)
1237 	ZEND_ARG_INFO(0, path)
1238 ZEND_END_ARG_INFO()
1239 #endif
1240 
1241 #ifdef HAVE_FNMATCH
1242 ZEND_BEGIN_ARG_INFO_EX(arginfo_fnmatch, 0, 0, 2)
1243 	ZEND_ARG_INFO(0, pattern)
1244 	ZEND_ARG_INFO(0, filename)
1245 	ZEND_ARG_INFO(0, flags)
1246 ZEND_END_ARG_INFO()
1247 #endif
1248 
1249 ZEND_BEGIN_ARG_INFO(arginfo_sys_get_temp_dir, 0)
1250 ZEND_END_ARG_INFO()
1251 /* }}} */
1252 /* {{{ filestat.c */
1253 ZEND_BEGIN_ARG_INFO(arginfo_disk_total_space, 0)
1254 	ZEND_ARG_INFO(0, path)
1255 ZEND_END_ARG_INFO()
1256 
1257 ZEND_BEGIN_ARG_INFO(arginfo_disk_free_space, 0)
1258 	ZEND_ARG_INFO(0, path)
1259 ZEND_END_ARG_INFO()
1260 
1261 #ifndef NETWARE
1262 ZEND_BEGIN_ARG_INFO(arginfo_chgrp, 0)
1263 	ZEND_ARG_INFO(0, filename)
1264 	ZEND_ARG_INFO(0, group)
1265 ZEND_END_ARG_INFO()
1266 
1267 ZEND_BEGIN_ARG_INFO(arginfo_chown, 0)
1268 	ZEND_ARG_INFO(0, filename)
1269 	ZEND_ARG_INFO(0, user)
1270 ZEND_END_ARG_INFO()
1271 #endif
1272 
1273 #if HAVE_LCHOWN
1274 ZEND_BEGIN_ARG_INFO(arginfo_lchgrp, 0)
1275 	ZEND_ARG_INFO(0, filename)
1276 	ZEND_ARG_INFO(0, group)
1277 ZEND_END_ARG_INFO()
1278 
1279 ZEND_BEGIN_ARG_INFO(arginfo_lchown, 0)
1280 	ZEND_ARG_INFO(0, filename)
1281 	ZEND_ARG_INFO(0, user)
1282 ZEND_END_ARG_INFO()
1283 #endif
1284 
1285 ZEND_BEGIN_ARG_INFO(arginfo_chmod, 0)
1286 	ZEND_ARG_INFO(0, filename)
1287 	ZEND_ARG_INFO(0, mode)
1288 ZEND_END_ARG_INFO()
1289 
1290 #if HAVE_UTIME
1291 ZEND_BEGIN_ARG_INFO_EX(arginfo_touch, 0, 0, 1)
1292 	ZEND_ARG_INFO(0, filename)
1293 	ZEND_ARG_INFO(0, time)
1294 	ZEND_ARG_INFO(0, atime)
1295 ZEND_END_ARG_INFO()
1296 #endif
1297 
1298 ZEND_BEGIN_ARG_INFO_EX(arginfo_clearstatcache, 0, 0, 0)
1299 	ZEND_ARG_INFO(0, clear_realpath_cache)
1300 	ZEND_ARG_INFO(0, filename)
1301 ZEND_END_ARG_INFO()
1302 
1303 ZEND_BEGIN_ARG_INFO(arginfo_realpath_cache_size, 0)
1304 ZEND_END_ARG_INFO()
1305 
1306 ZEND_BEGIN_ARG_INFO(arginfo_realpath_cache_get, 0)
1307 ZEND_END_ARG_INFO()
1308 
1309 ZEND_BEGIN_ARG_INFO(arginfo_fileperms, 0)
1310 	ZEND_ARG_INFO(0, filename)
1311 ZEND_END_ARG_INFO()
1312 
1313 ZEND_BEGIN_ARG_INFO(arginfo_fileinode, 0)
1314 	ZEND_ARG_INFO(0, filename)
1315 ZEND_END_ARG_INFO()
1316 
1317 ZEND_BEGIN_ARG_INFO(arginfo_filesize, 0)
1318 	ZEND_ARG_INFO(0, filename)
1319 ZEND_END_ARG_INFO()
1320 
1321 ZEND_BEGIN_ARG_INFO(arginfo_fileowner, 0)
1322 	ZEND_ARG_INFO(0, filename)
1323 ZEND_END_ARG_INFO()
1324 
1325 ZEND_BEGIN_ARG_INFO(arginfo_filegroup, 0)
1326 	ZEND_ARG_INFO(0, filename)
1327 ZEND_END_ARG_INFO()
1328 
1329 ZEND_BEGIN_ARG_INFO(arginfo_fileatime, 0)
1330 	ZEND_ARG_INFO(0, filename)
1331 ZEND_END_ARG_INFO()
1332 
1333 ZEND_BEGIN_ARG_INFO(arginfo_filemtime, 0)
1334 	ZEND_ARG_INFO(0, filename)
1335 ZEND_END_ARG_INFO()
1336 
1337 ZEND_BEGIN_ARG_INFO(arginfo_filectime, 0)
1338 	ZEND_ARG_INFO(0, filename)
1339 ZEND_END_ARG_INFO()
1340 
1341 ZEND_BEGIN_ARG_INFO(arginfo_filetype, 0)
1342 	ZEND_ARG_INFO(0, filename)
1343 ZEND_END_ARG_INFO()
1344 
1345 ZEND_BEGIN_ARG_INFO(arginfo_is_writable, 0)
1346 	ZEND_ARG_INFO(0, filename)
1347 ZEND_END_ARG_INFO()
1348 
1349 ZEND_BEGIN_ARG_INFO(arginfo_is_readable, 0)
1350 	ZEND_ARG_INFO(0, filename)
1351 ZEND_END_ARG_INFO()
1352 
1353 ZEND_BEGIN_ARG_INFO(arginfo_is_executable, 0)
1354 	ZEND_ARG_INFO(0, filename)
1355 ZEND_END_ARG_INFO()
1356 
1357 ZEND_BEGIN_ARG_INFO(arginfo_is_file, 0)
1358 	ZEND_ARG_INFO(0, filename)
1359 ZEND_END_ARG_INFO()
1360 
1361 ZEND_BEGIN_ARG_INFO(arginfo_is_dir, 0)
1362 	ZEND_ARG_INFO(0, filename)
1363 ZEND_END_ARG_INFO()
1364 
1365 ZEND_BEGIN_ARG_INFO(arginfo_is_link, 0)
1366 	ZEND_ARG_INFO(0, filename)
1367 ZEND_END_ARG_INFO()
1368 
1369 ZEND_BEGIN_ARG_INFO(arginfo_file_exists, 0)
1370 	ZEND_ARG_INFO(0, filename)
1371 ZEND_END_ARG_INFO()
1372 
1373 ZEND_BEGIN_ARG_INFO(arginfo_lstat, 0)
1374 	ZEND_ARG_INFO(0, filename)
1375 ZEND_END_ARG_INFO()
1376 
1377 ZEND_BEGIN_ARG_INFO(arginfo_stat, 0)
1378 	ZEND_ARG_INFO(0, filename)
1379 ZEND_END_ARG_INFO()
1380 /* }}} */
1381 /* {{{ formatted_print.c */
1382 ZEND_BEGIN_ARG_INFO_EX(arginfo_sprintf, 0, 0, 2)
1383 	ZEND_ARG_INFO(0, format)
1384 	ZEND_ARG_INFO(0, arg1)
1385 	ZEND_ARG_INFO(0, ...)
1386 ZEND_END_ARG_INFO()
1387 
1388 ZEND_BEGIN_ARG_INFO(arginfo_vsprintf, 0)
1389 	ZEND_ARG_INFO(0, format)
1390 	ZEND_ARG_INFO(0, args) /* ARRAY_INFO(0, args, 1) */
1391 ZEND_END_ARG_INFO()
1392 
1393 ZEND_BEGIN_ARG_INFO_EX(arginfo_printf, 0, 0, 1)
1394 	ZEND_ARG_INFO(0, format)
1395 	ZEND_ARG_INFO(0, arg1)
1396 	ZEND_ARG_INFO(0, ...)
1397 ZEND_END_ARG_INFO()
1398 
1399 ZEND_BEGIN_ARG_INFO(arginfo_vprintf, 0)
1400 	ZEND_ARG_INFO(0, format)
1401 	ZEND_ARG_INFO(0, args) /* ARRAY_INFO(0, args, 1) */
1402 ZEND_END_ARG_INFO()
1403 
1404 ZEND_BEGIN_ARG_INFO_EX(arginfo_fprintf, 0, 0, 2)
1405 	ZEND_ARG_INFO(0, stream)
1406 	ZEND_ARG_INFO(0, format)
1407 	ZEND_ARG_INFO(0, arg1)
1408 	ZEND_ARG_INFO(0, ...)
1409 ZEND_END_ARG_INFO()
1410 
1411 ZEND_BEGIN_ARG_INFO(arginfo_vfprintf, 0)
1412 	ZEND_ARG_INFO(0, stream)
1413 	ZEND_ARG_INFO(0, format)
1414 	ZEND_ARG_INFO(0, args) /* ARRAY_INFO(0, args, 1) */
1415 ZEND_END_ARG_INFO()
1416 /* }}} */
1417 /* {{{ fsock.c */
1418 ZEND_BEGIN_ARG_INFO_EX(arginfo_fsockopen, 0, 0, 2)
1419 	ZEND_ARG_INFO(0, hostname)
1420 	ZEND_ARG_INFO(0, port)
1421 	ZEND_ARG_INFO(1, errno)
1422 	ZEND_ARG_INFO(1, errstr)
1423 	ZEND_ARG_INFO(0, timeout)
1424 ZEND_END_ARG_INFO()
1425 
1426 ZEND_BEGIN_ARG_INFO_EX(arginfo_pfsockopen, 0, 0, 2)
1427 	ZEND_ARG_INFO(0, hostname)
1428 	ZEND_ARG_INFO(0, port)
1429 	ZEND_ARG_INFO(1, errno)
1430 	ZEND_ARG_INFO(1, errstr)
1431 	ZEND_ARG_INFO(0, timeout)
1432 ZEND_END_ARG_INFO()
1433 /* }}} */
1434 /* {{{ ftok.c */
1435 #if HAVE_FTOK
1436 ZEND_BEGIN_ARG_INFO(arginfo_ftok, 0)
1437 	ZEND_ARG_INFO(0, pathname)
1438 	ZEND_ARG_INFO(0, proj)
1439 ZEND_END_ARG_INFO()
1440 #endif
1441 /* }}} */
1442 /* {{{ head.c */
1443 ZEND_BEGIN_ARG_INFO_EX(arginfo_header, 0, 0, 1)
1444 	ZEND_ARG_INFO(0, header)
1445 	ZEND_ARG_INFO(0, replace)
1446 	ZEND_ARG_INFO(0, http_response_code)
1447 ZEND_END_ARG_INFO()
1448 
1449 ZEND_BEGIN_ARG_INFO_EX(arginfo_header_remove, 0, 0, 0)
1450 	ZEND_ARG_INFO(0, name)
1451 ZEND_END_ARG_INFO()
1452 
1453 ZEND_BEGIN_ARG_INFO_EX(arginfo_setcookie, 0, 0, 1)
1454 	ZEND_ARG_INFO(0, name)
1455 	ZEND_ARG_INFO(0, value)
1456 	ZEND_ARG_INFO(0, expires)
1457 	ZEND_ARG_INFO(0, path)
1458 	ZEND_ARG_INFO(0, domain)
1459 	ZEND_ARG_INFO(0, secure)
1460 ZEND_END_ARG_INFO()
1461 
1462 ZEND_BEGIN_ARG_INFO_EX(arginfo_setrawcookie, 0, 0, 1)
1463 	ZEND_ARG_INFO(0, name)
1464 	ZEND_ARG_INFO(0, value)
1465 	ZEND_ARG_INFO(0, expires)
1466 	ZEND_ARG_INFO(0, path)
1467 	ZEND_ARG_INFO(0, domain)
1468 	ZEND_ARG_INFO(0, secure)
1469 ZEND_END_ARG_INFO()
1470 
1471 ZEND_BEGIN_ARG_INFO_EX(arginfo_headers_sent, 0, 0, 0)
1472 	ZEND_ARG_INFO(1, file)
1473 	ZEND_ARG_INFO(1, line)
1474 ZEND_END_ARG_INFO()
1475 
1476 ZEND_BEGIN_ARG_INFO(arginfo_headers_list, 0)
1477 ZEND_END_ARG_INFO()
1478 
1479 ZEND_BEGIN_ARG_INFO_EX(arginfo_http_response_code, 0, 0, 0)
1480 	ZEND_ARG_INFO(0, response_code)
1481 ZEND_END_ARG_INFO()
1482 /* }}} */
1483 /* {{{ html.c */
1484 ZEND_BEGIN_ARG_INFO_EX(arginfo_htmlspecialchars, 0, 0, 1)
1485 	ZEND_ARG_INFO(0, string)
1486 	ZEND_ARG_INFO(0, quote_style)
1487 	ZEND_ARG_INFO(0, charset)
1488 	ZEND_ARG_INFO(0, double_encode)
1489 ZEND_END_ARG_INFO()
1490 
1491 ZEND_BEGIN_ARG_INFO_EX(arginfo_htmlspecialchars_decode, 0, 0, 1)
1492 	ZEND_ARG_INFO(0, string)
1493 	ZEND_ARG_INFO(0, quote_style)
1494 ZEND_END_ARG_INFO()
1495 
1496 ZEND_BEGIN_ARG_INFO_EX(arginfo_html_entity_decode, 0, 0, 1)
1497 	ZEND_ARG_INFO(0, string)
1498 	ZEND_ARG_INFO(0, quote_style)
1499 	ZEND_ARG_INFO(0, charset)
1500 ZEND_END_ARG_INFO()
1501 
1502 ZEND_BEGIN_ARG_INFO_EX(arginfo_htmlentities, 0, 0, 1)
1503 	ZEND_ARG_INFO(0, string)
1504 	ZEND_ARG_INFO(0, quote_style)
1505 	ZEND_ARG_INFO(0, charset)
1506 	ZEND_ARG_INFO(0, double_encode)
1507 ZEND_END_ARG_INFO()
1508 
1509 ZEND_BEGIN_ARG_INFO_EX(arginfo_get_html_translation_table, 0, 0, 0)
1510 	ZEND_ARG_INFO(0, table)
1511 	ZEND_ARG_INFO(0, quote_style)
1512 ZEND_END_ARG_INFO()
1513 
1514 /* }}} */
1515 /* {{{ http.c */
1516 ZEND_BEGIN_ARG_INFO_EX(arginfo_http_build_query, 0, 0, 1)
1517 	ZEND_ARG_INFO(0, formdata)
1518 	ZEND_ARG_INFO(0, prefix)
1519 	ZEND_ARG_INFO(0, arg_separator)
1520 	ZEND_ARG_INFO(0, enc_type)
1521 ZEND_END_ARG_INFO()
1522 /* }}} */
1523 /* {{{ image.c */
1524 ZEND_BEGIN_ARG_INFO(arginfo_image_type_to_mime_type, 0)
1525 	ZEND_ARG_INFO(0, imagetype)
1526 ZEND_END_ARG_INFO()
1527 
1528 ZEND_BEGIN_ARG_INFO_EX(arginfo_image_type_to_extension, 0, 0, 1)
1529 	ZEND_ARG_INFO(0, imagetype)
1530 	ZEND_ARG_INFO(0, include_dot)
1531 ZEND_END_ARG_INFO()
1532 
1533 ZEND_BEGIN_ARG_INFO_EX(arginfo_getimagesize, 0, 0, 1)
1534 	ZEND_ARG_INFO(0, imagefile)
1535 	ZEND_ARG_INFO(1, info) /* ARRAY_INFO(1, info, 1) */
1536 ZEND_END_ARG_INFO()
1537 /* }}} */
1538 /* {{{ info.c */
1539 ZEND_BEGIN_ARG_INFO_EX(arginfo_phpinfo, 0, 0, 0)
1540 	ZEND_ARG_INFO(0, what)
1541 ZEND_END_ARG_INFO()
1542 
1543 ZEND_BEGIN_ARG_INFO_EX(arginfo_phpversion, 0, 0, 0)
1544 	ZEND_ARG_INFO(0, extension)
1545 ZEND_END_ARG_INFO()
1546 
1547 ZEND_BEGIN_ARG_INFO_EX(arginfo_phpcredits, 0, 0, 0)
1548 	ZEND_ARG_INFO(0, flag)
1549 ZEND_END_ARG_INFO()
1550 
1551 ZEND_BEGIN_ARG_INFO(arginfo_php_logo_guid, 0)
1552 ZEND_END_ARG_INFO()
1553 
1554 ZEND_BEGIN_ARG_INFO(arginfo_php_real_logo_guid, 0)
1555 ZEND_END_ARG_INFO()
1556 
1557 ZEND_BEGIN_ARG_INFO(arginfo_php_egg_logo_guid, 0)
1558 ZEND_END_ARG_INFO()
1559 
1560 ZEND_BEGIN_ARG_INFO(arginfo_zend_logo_guid, 0)
1561 ZEND_END_ARG_INFO()
1562 
1563 ZEND_BEGIN_ARG_INFO(arginfo_php_sapi_name, 0)
1564 ZEND_END_ARG_INFO()
1565 
1566 ZEND_BEGIN_ARG_INFO(arginfo_php_uname, 0)
1567 ZEND_END_ARG_INFO()
1568 
1569 ZEND_BEGIN_ARG_INFO(arginfo_php_ini_scanned_files, 0)
1570 ZEND_END_ARG_INFO()
1571 
1572 ZEND_BEGIN_ARG_INFO(arginfo_php_ini_loaded_file, 0)
1573 ZEND_END_ARG_INFO()
1574 /* }}} */
1575 /* {{{ iptc.c */
1576 ZEND_BEGIN_ARG_INFO_EX(arginfo_iptcembed, 0, 0, 2)
1577 	ZEND_ARG_INFO(0, iptcdata)
1578 	ZEND_ARG_INFO(0, jpeg_file_name)
1579 	ZEND_ARG_INFO(0, spool)
1580 ZEND_END_ARG_INFO()
1581 
1582 ZEND_BEGIN_ARG_INFO(arginfo_iptcparse, 0)
1583 	ZEND_ARG_INFO(0, iptcdata)
1584 ZEND_END_ARG_INFO()
1585 /* }}} */
1586 /* {{{ lcg.c */
1587 ZEND_BEGIN_ARG_INFO(arginfo_lcg_value, 0)
1588 ZEND_END_ARG_INFO()
1589 /* }}} */
1590 /* {{{ levenshtein.c */
1591 ZEND_BEGIN_ARG_INFO(arginfo_levenshtein, 0)
1592 	ZEND_ARG_INFO(0, str1)
1593 	ZEND_ARG_INFO(0, str2)
1594 	ZEND_ARG_INFO(0, cost_ins)
1595 	ZEND_ARG_INFO(0, cost_rep)
1596 	ZEND_ARG_INFO(0, cost_del)
1597 ZEND_END_ARG_INFO()
1598 /* }}} */
1599 /* {{{ link.c */
1600 #if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
1601 ZEND_BEGIN_ARG_INFO(arginfo_readlink, 0)
1602 	ZEND_ARG_INFO(0, filename)
1603 ZEND_END_ARG_INFO()
1604 
1605 ZEND_BEGIN_ARG_INFO(arginfo_linkinfo, 0)
1606 	ZEND_ARG_INFO(0, filename)
1607 ZEND_END_ARG_INFO()
1608 
1609 ZEND_BEGIN_ARG_INFO(arginfo_symlink, 0)
1610 	ZEND_ARG_INFO(0, target)
1611 	ZEND_ARG_INFO(0, link)
1612 ZEND_END_ARG_INFO()
1613 
1614 ZEND_BEGIN_ARG_INFO(arginfo_link, 0)
1615 	ZEND_ARG_INFO(0, target)
1616 	ZEND_ARG_INFO(0, link)
1617 ZEND_END_ARG_INFO()
1618 #endif
1619 /* }}} */
1620 /* {{{ mail.c */
1621 ZEND_BEGIN_ARG_INFO(arginfo_ezmlm_hash, 0)
1622 	ZEND_ARG_INFO(0, addr)
1623 ZEND_END_ARG_INFO()
1624 
1625 ZEND_BEGIN_ARG_INFO_EX(arginfo_mail, 0, 0, 3)
1626 	ZEND_ARG_INFO(0, to)
1627 	ZEND_ARG_INFO(0, subject)
1628 	ZEND_ARG_INFO(0, message)
1629 	ZEND_ARG_INFO(0, additional_headers)
1630 	ZEND_ARG_INFO(0, additional_parameters)
1631 ZEND_END_ARG_INFO()
1632 /* }}} */
1633 /* {{{ math.c */
1634 ZEND_BEGIN_ARG_INFO(arginfo_abs, 0)
1635 	ZEND_ARG_INFO(0, number)
1636 ZEND_END_ARG_INFO()
1637 
1638 ZEND_BEGIN_ARG_INFO(arginfo_ceil, 0)
1639 	ZEND_ARG_INFO(0, number)
1640 ZEND_END_ARG_INFO()
1641 
1642 ZEND_BEGIN_ARG_INFO(arginfo_floor, 0)
1643 	ZEND_ARG_INFO(0, number)
1644 ZEND_END_ARG_INFO()
1645 
1646 ZEND_BEGIN_ARG_INFO_EX(arginfo_round, 0, 0, 1)
1647 	ZEND_ARG_INFO(0, number)
1648 	ZEND_ARG_INFO(0, precision)
1649 	ZEND_ARG_INFO(0, mode)
1650 ZEND_END_ARG_INFO()
1651 
1652 ZEND_BEGIN_ARG_INFO(arginfo_sin, 0)
1653 	ZEND_ARG_INFO(0, number)
1654 ZEND_END_ARG_INFO()
1655 
1656 ZEND_BEGIN_ARG_INFO(arginfo_cos, 0)
1657 	ZEND_ARG_INFO(0, number)
1658 ZEND_END_ARG_INFO()
1659 
1660 ZEND_BEGIN_ARG_INFO(arginfo_tan, 0)
1661 	ZEND_ARG_INFO(0, number)
1662 ZEND_END_ARG_INFO()
1663 
1664 ZEND_BEGIN_ARG_INFO(arginfo_asin, 0)
1665 	ZEND_ARG_INFO(0, number)
1666 ZEND_END_ARG_INFO()
1667 
1668 ZEND_BEGIN_ARG_INFO(arginfo_acos, 0)
1669 	ZEND_ARG_INFO(0, number)
1670 ZEND_END_ARG_INFO()
1671 
1672 ZEND_BEGIN_ARG_INFO(arginfo_atan, 0)
1673 	ZEND_ARG_INFO(0, number)
1674 ZEND_END_ARG_INFO()
1675 
1676 ZEND_BEGIN_ARG_INFO(arginfo_atan2, 0)
1677 	ZEND_ARG_INFO(0, y)
1678 	ZEND_ARG_INFO(0, x)
1679 ZEND_END_ARG_INFO()
1680 
1681 ZEND_BEGIN_ARG_INFO(arginfo_sinh, 0)
1682 	ZEND_ARG_INFO(0, number)
1683 ZEND_END_ARG_INFO()
1684 
1685 ZEND_BEGIN_ARG_INFO(arginfo_cosh, 0)
1686 	ZEND_ARG_INFO(0, number)
1687 ZEND_END_ARG_INFO()
1688 
1689 ZEND_BEGIN_ARG_INFO(arginfo_tanh, 0)
1690 	ZEND_ARG_INFO(0, number)
1691 ZEND_END_ARG_INFO()
1692 
1693 ZEND_BEGIN_ARG_INFO(arginfo_asinh, 0)
1694 	ZEND_ARG_INFO(0, number)
1695 ZEND_END_ARG_INFO()
1696 
1697 ZEND_BEGIN_ARG_INFO(arginfo_acosh, 0)
1698 	ZEND_ARG_INFO(0, number)
1699 ZEND_END_ARG_INFO()
1700 
1701 ZEND_BEGIN_ARG_INFO(arginfo_atanh, 0)
1702 	ZEND_ARG_INFO(0, number)
1703 ZEND_END_ARG_INFO()
1704 
1705 ZEND_BEGIN_ARG_INFO(arginfo_pi, 0)
1706 ZEND_END_ARG_INFO()
1707 
1708 ZEND_BEGIN_ARG_INFO(arginfo_is_finite, 0)
1709 	ZEND_ARG_INFO(0, val)
1710 ZEND_END_ARG_INFO()
1711 
1712 ZEND_BEGIN_ARG_INFO(arginfo_is_infinite, 0)
1713 	ZEND_ARG_INFO(0, val)
1714 ZEND_END_ARG_INFO()
1715 
1716 ZEND_BEGIN_ARG_INFO(arginfo_is_nan, 0)
1717 	ZEND_ARG_INFO(0, val)
1718 ZEND_END_ARG_INFO()
1719 
1720 ZEND_BEGIN_ARG_INFO(arginfo_pow, 0)
1721 	ZEND_ARG_INFO(0, base)
1722 	ZEND_ARG_INFO(0, exponent)
1723 ZEND_END_ARG_INFO()
1724 
1725 ZEND_BEGIN_ARG_INFO(arginfo_exp, 0)
1726 	ZEND_ARG_INFO(0, number)
1727 ZEND_END_ARG_INFO()
1728 
1729 ZEND_BEGIN_ARG_INFO(arginfo_expm1, 0)
1730 	ZEND_ARG_INFO(0, number)
1731 ZEND_END_ARG_INFO()
1732 
1733 ZEND_BEGIN_ARG_INFO(arginfo_log1p, 0)
1734 	ZEND_ARG_INFO(0, number)
1735 ZEND_END_ARG_INFO()
1736 
1737 ZEND_BEGIN_ARG_INFO_EX(arginfo_log, 0, 0, 1)
1738 	ZEND_ARG_INFO(0, number)
1739 	ZEND_ARG_INFO(0, base)
1740 ZEND_END_ARG_INFO()
1741 
1742 ZEND_BEGIN_ARG_INFO(arginfo_log10, 0)
1743 	ZEND_ARG_INFO(0, number)
1744 ZEND_END_ARG_INFO()
1745 
1746 ZEND_BEGIN_ARG_INFO(arginfo_sqrt, 0)
1747 	ZEND_ARG_INFO(0, number)
1748 ZEND_END_ARG_INFO()
1749 
1750 ZEND_BEGIN_ARG_INFO(arginfo_hypot, 0)
1751 	ZEND_ARG_INFO(0, num1)
1752 	ZEND_ARG_INFO(0, num2)
1753 ZEND_END_ARG_INFO()
1754 
1755 ZEND_BEGIN_ARG_INFO(arginfo_deg2rad, 0)
1756 	ZEND_ARG_INFO(0, number)
1757 ZEND_END_ARG_INFO()
1758 
1759 ZEND_BEGIN_ARG_INFO(arginfo_rad2deg, 0)
1760 	ZEND_ARG_INFO(0, number)
1761 ZEND_END_ARG_INFO()
1762 
1763 ZEND_BEGIN_ARG_INFO(arginfo_bindec, 0)
1764 	ZEND_ARG_INFO(0, binary_number)
1765 ZEND_END_ARG_INFO()
1766 
1767 ZEND_BEGIN_ARG_INFO(arginfo_hexdec, 0)
1768 	ZEND_ARG_INFO(0, hexadecimal_number)
1769 ZEND_END_ARG_INFO()
1770 
1771 ZEND_BEGIN_ARG_INFO(arginfo_octdec, 0)
1772 	ZEND_ARG_INFO(0, octal_number)
1773 ZEND_END_ARG_INFO()
1774 
1775 ZEND_BEGIN_ARG_INFO(arginfo_decbin, 0)
1776 	ZEND_ARG_INFO(0, decimal_number)
1777 ZEND_END_ARG_INFO()
1778 
1779 ZEND_BEGIN_ARG_INFO(arginfo_decoct, 0)
1780 	ZEND_ARG_INFO(0, decimal_number)
1781 ZEND_END_ARG_INFO()
1782 
1783 ZEND_BEGIN_ARG_INFO(arginfo_dechex, 0)
1784 	ZEND_ARG_INFO(0, decimal_number)
1785 ZEND_END_ARG_INFO()
1786 
1787 ZEND_BEGIN_ARG_INFO(arginfo_base_convert, 0)
1788 	ZEND_ARG_INFO(0, number)
1789 	ZEND_ARG_INFO(0, frombase)
1790 	ZEND_ARG_INFO(0, tobase)
1791 ZEND_END_ARG_INFO()
1792 
1793 ZEND_BEGIN_ARG_INFO_EX(arginfo_number_format, 0, 0, 1)
1794 	ZEND_ARG_INFO(0, number)
1795 	ZEND_ARG_INFO(0, num_decimal_places)
1796 	ZEND_ARG_INFO(0, dec_seperator)
1797 	ZEND_ARG_INFO(0, thousands_seperator)
1798 ZEND_END_ARG_INFO()
1799 
1800 ZEND_BEGIN_ARG_INFO(arginfo_fmod, 0)
1801 	ZEND_ARG_INFO(0, x)
1802 	ZEND_ARG_INFO(0, y)
1803 ZEND_END_ARG_INFO()
1804 /* }}} */
1805 /* {{{ md5.c */
1806 ZEND_BEGIN_ARG_INFO_EX(arginfo_md5, 0, 0, 1)
1807 	ZEND_ARG_INFO(0, str)
1808 	ZEND_ARG_INFO(0, raw_output)
1809 ZEND_END_ARG_INFO()
1810 
1811 ZEND_BEGIN_ARG_INFO_EX(arginfo_md5_file, 0, 0, 1)
1812 	ZEND_ARG_INFO(0, filename)
1813 	ZEND_ARG_INFO(0, raw_output)
1814 ZEND_END_ARG_INFO()
1815 /* }}} */
1816 /* {{{ metaphone.c */
1817 ZEND_BEGIN_ARG_INFO_EX(arginfo_metaphone, 0, 0, 1)
1818 	ZEND_ARG_INFO(0, text)
1819 	ZEND_ARG_INFO(0, phones)
1820 ZEND_END_ARG_INFO()
1821 /* }}} */
1822 /* {{{ microtime.c */
1823 #ifdef HAVE_GETTIMEOFDAY
1824 ZEND_BEGIN_ARG_INFO_EX(arginfo_microtime, 0, 0, 0)
1825 	ZEND_ARG_INFO(0, get_as_float)
1826 ZEND_END_ARG_INFO()
1827 
1828 ZEND_BEGIN_ARG_INFO_EX(arginfo_gettimeofday, 0, 0, 0)
1829 	ZEND_ARG_INFO(0, get_as_float)
1830 ZEND_END_ARG_INFO()
1831 #endif
1832 
1833 #ifdef HAVE_GETRUSAGE
1834 ZEND_BEGIN_ARG_INFO_EX(arginfo_getrusage, 0, 0, 0)
1835 	ZEND_ARG_INFO(0, who)
1836 ZEND_END_ARG_INFO()
1837 #endif
1838 /* }}} */
1839 /* {{{ pack.c */
1840 ZEND_BEGIN_ARG_INFO_EX(arginfo_pack, 0, 0, 2)
1841 	ZEND_ARG_INFO(0, format)
1842 	ZEND_ARG_INFO(0, arg1)
1843 	ZEND_ARG_INFO(0, ...)
1844 ZEND_END_ARG_INFO()
1845 
1846 ZEND_BEGIN_ARG_INFO(arginfo_unpack, 0)
1847 	ZEND_ARG_INFO(0, format)
1848 	ZEND_ARG_INFO(0, input)
1849 ZEND_END_ARG_INFO()
1850 /* }}} */
1851 /* {{{ pageinfo.c */
1852 ZEND_BEGIN_ARG_INFO(arginfo_getmyuid, 0)
1853 ZEND_END_ARG_INFO()
1854 
1855 ZEND_BEGIN_ARG_INFO(arginfo_getmygid, 0)
1856 ZEND_END_ARG_INFO()
1857 
1858 ZEND_BEGIN_ARG_INFO(arginfo_getmypid, 0)
1859 ZEND_END_ARG_INFO()
1860 
1861 ZEND_BEGIN_ARG_INFO(arginfo_getmyinode, 0)
1862 ZEND_END_ARG_INFO()
1863 
1864 ZEND_BEGIN_ARG_INFO(arginfo_getlastmod, 0)
1865 ZEND_END_ARG_INFO()
1866 /* }}} */
1867 /* {{{ proc_open.c */
1868 #ifdef PHP_CAN_SUPPORT_PROC_OPEN
1869 ZEND_BEGIN_ARG_INFO_EX(arginfo_proc_terminate, 0, 0, 1)
1870 	ZEND_ARG_INFO(0, process)
1871 	ZEND_ARG_INFO(0, signal)
1872 ZEND_END_ARG_INFO()
1873 
1874 ZEND_BEGIN_ARG_INFO(arginfo_proc_close, 0)
1875 	ZEND_ARG_INFO(0, process)
1876 ZEND_END_ARG_INFO()
1877 
1878 ZEND_BEGIN_ARG_INFO(arginfo_proc_get_status, 0)
1879 	ZEND_ARG_INFO(0, process)
1880 ZEND_END_ARG_INFO()
1881 
1882 ZEND_BEGIN_ARG_INFO_EX(arginfo_proc_open, 0, 0, 3)
1883 	ZEND_ARG_INFO(0, command)
1884 	ZEND_ARG_INFO(0, descriptorspec) /* ARRAY_INFO(0, descriptorspec, 1) */
1885 	ZEND_ARG_INFO(1, pipes) /* ARRAY_INFO(1, pipes, 1) */
1886 	ZEND_ARG_INFO(0, cwd)
1887 	ZEND_ARG_INFO(0, env) /* ARRAY_INFO(0, env, 1) */
1888 	ZEND_ARG_INFO(0, other_options) /* ARRAY_INFO(0, other_options, 1) */
1889 ZEND_END_ARG_INFO()
1890 #endif
1891 /* }}} */
1892 /* {{{ quot_print.c */
1893 ZEND_BEGIN_ARG_INFO(arginfo_quoted_printable_decode, 0)
1894 	ZEND_ARG_INFO(0, str)
1895 ZEND_END_ARG_INFO()
1896 /* }}} */
1897 /* {{{ quot_print.c */
1898 ZEND_BEGIN_ARG_INFO(arginfo_quoted_printable_encode, 0)
1899 	ZEND_ARG_INFO(0, str)
1900 ZEND_END_ARG_INFO()
1901 /* }}} */
1902 /* {{{ rand.c */
1903 ZEND_BEGIN_ARG_INFO_EX(arginfo_srand, 0, 0, 0)
1904 	ZEND_ARG_INFO(0, seed)
1905 ZEND_END_ARG_INFO()
1906 
1907 ZEND_BEGIN_ARG_INFO_EX(arginfo_mt_srand, 0, 0, 0)
1908 	ZEND_ARG_INFO(0, seed)
1909 ZEND_END_ARG_INFO()
1910 
1911 ZEND_BEGIN_ARG_INFO_EX(arginfo_rand, 0, 0, 0)
1912 	ZEND_ARG_INFO(0, min)
1913 	ZEND_ARG_INFO(0, max)
1914 ZEND_END_ARG_INFO()
1915 
1916 ZEND_BEGIN_ARG_INFO_EX(arginfo_mt_rand, 0, 0, 0)
1917 	ZEND_ARG_INFO(0, min)
1918 	ZEND_ARG_INFO(0, max)
1919 ZEND_END_ARG_INFO()
1920 
1921 ZEND_BEGIN_ARG_INFO(arginfo_getrandmax, 0)
1922 ZEND_END_ARG_INFO()
1923 
1924 ZEND_BEGIN_ARG_INFO(arginfo_mt_getrandmax, 0)
1925 ZEND_END_ARG_INFO()
1926 /* }}} */
1927 /* {{{ sha1.c */
1928 ZEND_BEGIN_ARG_INFO_EX(arginfo_sha1, 0, 0, 1)
1929 	ZEND_ARG_INFO(0, str)
1930 	ZEND_ARG_INFO(0, raw_output)
1931 ZEND_END_ARG_INFO()
1932 
1933 ZEND_BEGIN_ARG_INFO_EX(arginfo_sha1_file, 0, 0, 1)
1934 	ZEND_ARG_INFO(0, filename)
1935 	ZEND_ARG_INFO(0, raw_output)
1936 ZEND_END_ARG_INFO()
1937 /* }}} */
1938 /* {{{ soundex.c */
1939 ZEND_BEGIN_ARG_INFO(arginfo_soundex, 0)
1940 	ZEND_ARG_INFO(0, str)
1941 ZEND_END_ARG_INFO()
1942 /* }}} */
1943 /* {{{ streamsfuncs.c */
1944 #if HAVE_SOCKETPAIR
1945 ZEND_BEGIN_ARG_INFO(arginfo_stream_socket_pair, 0)
1946 	ZEND_ARG_INFO(0, domain)
1947 	ZEND_ARG_INFO(0, type)
1948 	ZEND_ARG_INFO(0, protocol)
1949 ZEND_END_ARG_INFO()
1950 #endif
1951 
1952 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_client, 0, 0, 1)
1953 	ZEND_ARG_INFO(0, remoteaddress)
1954 	ZEND_ARG_INFO(1, errcode)
1955 	ZEND_ARG_INFO(1, errstring)
1956 	ZEND_ARG_INFO(0, timeout)
1957 	ZEND_ARG_INFO(0, flags)
1958 	ZEND_ARG_INFO(0, context)
1959 ZEND_END_ARG_INFO()
1960 
1961 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_server, 0, 0, 1)
1962 	ZEND_ARG_INFO(0, localaddress)
1963 	ZEND_ARG_INFO(1, errcode)
1964 	ZEND_ARG_INFO(1, errstring)
1965 	ZEND_ARG_INFO(0, flags)
1966 	ZEND_ARG_INFO(0, context)
1967 ZEND_END_ARG_INFO()
1968 
1969 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_accept, 0, 0, 1)
1970 	ZEND_ARG_INFO(0, serverstream)
1971 	ZEND_ARG_INFO(0, timeout)
1972 	ZEND_ARG_INFO(1, peername)
1973 ZEND_END_ARG_INFO()
1974 
1975 ZEND_BEGIN_ARG_INFO(arginfo_stream_socket_get_name, 0)
1976 	ZEND_ARG_INFO(0, stream)
1977 	ZEND_ARG_INFO(0, want_peer)
1978 ZEND_END_ARG_INFO()
1979 
1980 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_sendto, 0, 0, 2)
1981 	ZEND_ARG_INFO(0, stream)
1982 	ZEND_ARG_INFO(0, data)
1983 	ZEND_ARG_INFO(0, flags)
1984 	ZEND_ARG_INFO(0, target_addr)
1985 ZEND_END_ARG_INFO()
1986 
1987 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_recvfrom, 0, 0, 2)
1988 	ZEND_ARG_INFO(0, stream)
1989 	ZEND_ARG_INFO(0, amount)
1990 	ZEND_ARG_INFO(0, flags)
1991 	ZEND_ARG_INFO(1, remote_addr)
1992 ZEND_END_ARG_INFO()
1993 
1994 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_get_contents, 0, 0, 1)
1995 	ZEND_ARG_INFO(0, source)
1996 	ZEND_ARG_INFO(0, maxlen)
1997 	ZEND_ARG_INFO(0, offset)
1998 ZEND_END_ARG_INFO()
1999 
2000 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_copy_to_stream, 0, 0, 2)
2001 	ZEND_ARG_INFO(0, source)
2002 	ZEND_ARG_INFO(0, dest)
2003 	ZEND_ARG_INFO(0, maxlen)
2004 	ZEND_ARG_INFO(0, pos)
2005 ZEND_END_ARG_INFO()
2006 
2007 ZEND_BEGIN_ARG_INFO(arginfo_stream_get_meta_data, 0)
2008 	ZEND_ARG_INFO(0, fp)
2009 ZEND_END_ARG_INFO()
2010 
2011 ZEND_BEGIN_ARG_INFO(arginfo_stream_get_transports, 0)
2012 ZEND_END_ARG_INFO()
2013 
2014 ZEND_BEGIN_ARG_INFO(arginfo_stream_get_wrappers, 0)
2015 ZEND_END_ARG_INFO()
2016 
2017 ZEND_BEGIN_ARG_INFO(arginfo_stream_resolve_include_path, 0)
2018 	ZEND_ARG_INFO(0, filename)
2019 ZEND_END_ARG_INFO()
2020 
2021 ZEND_BEGIN_ARG_INFO(arginfo_stream_is_local, 0)
2022 	ZEND_ARG_INFO(0, stream)
2023 ZEND_END_ARG_INFO()
2024 
2025 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_supports_lock, 0, 0, 1)
2026     ZEND_ARG_INFO(0, stream)
2027 ZEND_END_ARG_INFO()
2028 
2029 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_select, 0, 0, 4)
2030 	ZEND_ARG_INFO(1, read_streams) /* ARRAY_INFO(1, read_streams, 1) */
2031 	ZEND_ARG_INFO(1, write_streams) /* ARRAY_INFO(1, write_streams, 1) */
2032 	ZEND_ARG_INFO(1, except_streams) /* ARRAY_INFO(1, except_streams, 1) */
2033 	ZEND_ARG_INFO(0, tv_sec)
2034 	ZEND_ARG_INFO(0, tv_usec)
2035 ZEND_END_ARG_INFO()
2036 
2037 ZEND_BEGIN_ARG_INFO(arginfo_stream_context_get_options, 0)
2038 	ZEND_ARG_INFO(0, stream_or_context)
2039 ZEND_END_ARG_INFO()
2040 
2041 ZEND_BEGIN_ARG_INFO(arginfo_stream_context_set_option, 0)
2042 	ZEND_ARG_INFO(0, stream_or_context)
2043 	ZEND_ARG_INFO(0, wrappername)
2044 	ZEND_ARG_INFO(0, optionname)
2045 	ZEND_ARG_INFO(0, value)
2046 ZEND_END_ARG_INFO()
2047 
2048 ZEND_BEGIN_ARG_INFO(arginfo_stream_context_set_params, 0)
2049 	ZEND_ARG_INFO(0, stream_or_context)
2050 	ZEND_ARG_INFO(0, options) /* ARRAY_INFO(0, options, 1) */
2051 ZEND_END_ARG_INFO()
2052 
2053 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_context_get_params, 0, ZEND_RETURN_VALUE, 1)
2054 	ZEND_ARG_INFO(0, stream_or_context)
2055 ZEND_END_ARG_INFO()
2056 
2057 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_context_get_default, 0, 0, 0)
2058 	ZEND_ARG_INFO(0, options) /* ARRAY_INFO(0, options, 1) */
2059 ZEND_END_ARG_INFO()
2060 
2061 ZEND_BEGIN_ARG_INFO(arginfo_stream_context_set_default, 0)
2062 	ZEND_ARG_INFO(0, options)
2063 ZEND_END_ARG_INFO()
2064 
2065 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_context_create, 0, 0, 0)
2066 	ZEND_ARG_INFO(0, options) /* ARRAY_INFO(0, options, 1) */
2067 	ZEND_ARG_INFO(0, params) /* ARRAY_INFO(0, params, 1) */
2068 ZEND_END_ARG_INFO()
2069 
2070 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_filter_prepend, 0, 0, 2)
2071 	ZEND_ARG_INFO(0, stream)
2072 	ZEND_ARG_INFO(0, filtername)
2073 	ZEND_ARG_INFO(0, read_write)
2074 	ZEND_ARG_INFO(0, filterparams)
2075 ZEND_END_ARG_INFO()
2076 
2077 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_filter_append, 0, 0, 2)
2078 	ZEND_ARG_INFO(0, stream)
2079 	ZEND_ARG_INFO(0, filtername)
2080 	ZEND_ARG_INFO(0, read_write)
2081 	ZEND_ARG_INFO(0, filterparams)
2082 ZEND_END_ARG_INFO()
2083 
2084 ZEND_BEGIN_ARG_INFO(arginfo_stream_filter_remove, 0)
2085 	ZEND_ARG_INFO(0, stream_filter)
2086 ZEND_END_ARG_INFO()
2087 
2088 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_get_line, 0, 0, 2)
2089 	ZEND_ARG_INFO(0, stream)
2090 	ZEND_ARG_INFO(0, maxlen)
2091 	ZEND_ARG_INFO(0, ending)
2092 ZEND_END_ARG_INFO()
2093 
2094 ZEND_BEGIN_ARG_INFO(arginfo_stream_set_blocking, 0)
2095 	ZEND_ARG_INFO(0, socket)
2096 	ZEND_ARG_INFO(0, mode)
2097 ZEND_END_ARG_INFO()
2098 
2099 #if HAVE_SYS_TIME_H || defined(PHP_WIN32)
2100 ZEND_BEGIN_ARG_INFO(arginfo_stream_set_timeout, 0)
2101 	ZEND_ARG_INFO(0, stream)
2102 	ZEND_ARG_INFO(0, seconds)
2103 	ZEND_ARG_INFO(0, microseconds)
2104 ZEND_END_ARG_INFO()
2105 #endif
2106 
2107 ZEND_BEGIN_ARG_INFO(arginfo_stream_set_read_buffer, 0)
2108 	ZEND_ARG_INFO(0, fp)
2109 	ZEND_ARG_INFO(0, buffer)
2110 ZEND_END_ARG_INFO()
2111 
2112 ZEND_BEGIN_ARG_INFO(arginfo_stream_set_write_buffer, 0)
2113 	ZEND_ARG_INFO(0, fp)
2114 	ZEND_ARG_INFO(0, buffer)
2115 ZEND_END_ARG_INFO()
2116 
2117 ZEND_BEGIN_ARG_INFO(arginfo_stream_set_chunk_size, 0)
2118 	ZEND_ARG_INFO(0, fp)
2119 	ZEND_ARG_INFO(0, chunk_size)
2120 ZEND_END_ARG_INFO()
2121 
2122 ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_socket_enable_crypto, 0, 0, 2)
2123 	ZEND_ARG_INFO(0, stream)
2124 	ZEND_ARG_INFO(0, enable)
2125 	ZEND_ARG_INFO(0, cryptokind)
2126 	ZEND_ARG_INFO(0, sessionstream)
2127 ZEND_END_ARG_INFO()
2128 
2129 #ifdef HAVE_SHUTDOWN
2130 ZEND_BEGIN_ARG_INFO(arginfo_stream_socket_shutdown, 0)
2131 	ZEND_ARG_INFO(0, stream)
2132 	ZEND_ARG_INFO(0, how)
2133 ZEND_END_ARG_INFO()
2134 #endif
2135 /* }}} */
2136 /* {{{ string.c */
2137 ZEND_BEGIN_ARG_INFO(arginfo_bin2hex, 0)
2138 	ZEND_ARG_INFO(0, data)
2139 ZEND_END_ARG_INFO()
2140 
2141 ZEND_BEGIN_ARG_INFO(arginfo_hex2bin, 0)
2142 	ZEND_ARG_INFO(0, data)
2143 ZEND_END_ARG_INFO()
2144 
2145 ZEND_BEGIN_ARG_INFO_EX(arginfo_strspn, 0, 0, 2)
2146 	ZEND_ARG_INFO(0, str)
2147 	ZEND_ARG_INFO(0, mask)
2148 	ZEND_ARG_INFO(0, start)
2149 	ZEND_ARG_INFO(0, len)
2150 ZEND_END_ARG_INFO()
2151 
2152 ZEND_BEGIN_ARG_INFO_EX(arginfo_strcspn, 0, 0, 2)
2153 	ZEND_ARG_INFO(0, str)
2154 	ZEND_ARG_INFO(0, mask)
2155 	ZEND_ARG_INFO(0, start)
2156 	ZEND_ARG_INFO(0, len)
2157 ZEND_END_ARG_INFO()
2158 
2159 #if HAVE_NL_LANGINFO
2160 ZEND_BEGIN_ARG_INFO(arginfo_nl_langinfo, 0)
2161 	ZEND_ARG_INFO(0, item)
2162 ZEND_END_ARG_INFO()
2163 #endif
2164 
2165 #ifdef HAVE_STRCOLL
2166 ZEND_BEGIN_ARG_INFO(arginfo_strcoll, 0)
2167 	ZEND_ARG_INFO(0, str1)
2168 	ZEND_ARG_INFO(0, str2)
2169 ZEND_END_ARG_INFO()
2170 #endif
2171 
2172 ZEND_BEGIN_ARG_INFO_EX(arginfo_trim, 0, 0, 1)
2173 	ZEND_ARG_INFO(0, str)
2174 	ZEND_ARG_INFO(0, character_mask)
2175 ZEND_END_ARG_INFO()
2176 
2177 ZEND_BEGIN_ARG_INFO_EX(arginfo_rtrim, 0, 0, 1)
2178 	ZEND_ARG_INFO(0, str)
2179 	ZEND_ARG_INFO(0, character_mask)
2180 ZEND_END_ARG_INFO()
2181 
2182 ZEND_BEGIN_ARG_INFO_EX(arginfo_ltrim, 0, 0, 1)
2183 	ZEND_ARG_INFO(0, str)
2184 	ZEND_ARG_INFO(0, character_mask)
2185 ZEND_END_ARG_INFO()
2186 
2187 ZEND_BEGIN_ARG_INFO_EX(arginfo_wordwrap, 0, 0, 1)
2188 	ZEND_ARG_INFO(0, str)
2189 	ZEND_ARG_INFO(0, width)
2190 	ZEND_ARG_INFO(0, break)
2191 	ZEND_ARG_INFO(0, cut)
2192 ZEND_END_ARG_INFO()
2193 
2194 ZEND_BEGIN_ARG_INFO_EX(arginfo_explode, 0, 0, 2)
2195 	ZEND_ARG_INFO(0, separator)
2196 	ZEND_ARG_INFO(0, str)
2197 	ZEND_ARG_INFO(0, limit)
2198 ZEND_END_ARG_INFO()
2199 
2200 ZEND_BEGIN_ARG_INFO(arginfo_implode, 0)
2201 	ZEND_ARG_INFO(0, glue)
2202 	ZEND_ARG_INFO(0, pieces)
2203 ZEND_END_ARG_INFO()
2204 
2205 ZEND_BEGIN_ARG_INFO(arginfo_strtok, 0)
2206 	ZEND_ARG_INFO(0, str)
2207 	ZEND_ARG_INFO(0, token)
2208 ZEND_END_ARG_INFO()
2209 
2210 ZEND_BEGIN_ARG_INFO(arginfo_strtoupper, 0)
2211 	ZEND_ARG_INFO(0, str)
2212 ZEND_END_ARG_INFO()
2213 
2214 ZEND_BEGIN_ARG_INFO(arginfo_strtolower, 0)
2215 	ZEND_ARG_INFO(0, str)
2216 ZEND_END_ARG_INFO()
2217 
2218 ZEND_BEGIN_ARG_INFO_EX(arginfo_basename, 0, 0, 1)
2219 	ZEND_ARG_INFO(0, path)
2220 	ZEND_ARG_INFO(0, suffix)
2221 ZEND_END_ARG_INFO()
2222 
2223 ZEND_BEGIN_ARG_INFO(arginfo_dirname, 0)
2224 	ZEND_ARG_INFO(0, path)
2225 ZEND_END_ARG_INFO()
2226 
2227 ZEND_BEGIN_ARG_INFO_EX(arginfo_pathinfo, 0, 0, 1)
2228 	ZEND_ARG_INFO(0, path)
2229 	ZEND_ARG_INFO(0, options)
2230 ZEND_END_ARG_INFO()
2231 
2232 ZEND_BEGIN_ARG_INFO_EX(arginfo_stristr, 0, 0, 2)
2233 	ZEND_ARG_INFO(0, haystack)
2234 	ZEND_ARG_INFO(0, needle)
2235 	ZEND_ARG_INFO(0, part)
2236 ZEND_END_ARG_INFO()
2237 
2238 ZEND_BEGIN_ARG_INFO_EX(arginfo_strstr, 0, 0, 2)
2239 	ZEND_ARG_INFO(0, haystack)
2240 	ZEND_ARG_INFO(0, needle)
2241 	ZEND_ARG_INFO(0, part)
2242 ZEND_END_ARG_INFO()
2243 
2244 ZEND_BEGIN_ARG_INFO_EX(arginfo_strpos, 0, 0, 2)
2245 	ZEND_ARG_INFO(0, haystack)
2246 	ZEND_ARG_INFO(0, needle)
2247 	ZEND_ARG_INFO(0, offset)
2248 ZEND_END_ARG_INFO()
2249 
2250 ZEND_BEGIN_ARG_INFO_EX(arginfo_stripos, 0, 0, 2)
2251 	ZEND_ARG_INFO(0, haystack)
2252 	ZEND_ARG_INFO(0, needle)
2253 	ZEND_ARG_INFO(0, offset)
2254 ZEND_END_ARG_INFO()
2255 
2256 ZEND_BEGIN_ARG_INFO_EX(arginfo_strrpos, 0, 0, 2)
2257 	ZEND_ARG_INFO(0, haystack)
2258 	ZEND_ARG_INFO(0, needle)
2259 	ZEND_ARG_INFO(0, offset)
2260 ZEND_END_ARG_INFO()
2261 
2262 ZEND_BEGIN_ARG_INFO_EX(arginfo_strripos, 0, 0, 2)
2263 	ZEND_ARG_INFO(0, haystack)
2264 	ZEND_ARG_INFO(0, needle)
2265 	ZEND_ARG_INFO(0, offset)
2266 ZEND_END_ARG_INFO()
2267 
2268 ZEND_BEGIN_ARG_INFO(arginfo_strrchr, 0)
2269 	ZEND_ARG_INFO(0, haystack)
2270 	ZEND_ARG_INFO(0, needle)
2271 ZEND_END_ARG_INFO()
2272 
2273 ZEND_BEGIN_ARG_INFO_EX(arginfo_chunk_split, 0, 0, 1)
2274 	ZEND_ARG_INFO(0, str)
2275 	ZEND_ARG_INFO(0, chunklen)
2276 	ZEND_ARG_INFO(0, ending)
2277 ZEND_END_ARG_INFO()
2278 
2279 ZEND_BEGIN_ARG_INFO_EX(arginfo_substr, 0, 0, 2)
2280 	ZEND_ARG_INFO(0, str)
2281 	ZEND_ARG_INFO(0, start)
2282 	ZEND_ARG_INFO(0, length)
2283 ZEND_END_ARG_INFO()
2284 
2285 ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_replace, 0, 0, 3)
2286 	ZEND_ARG_INFO(0, str)
2287 	ZEND_ARG_INFO(0, replace)
2288 	ZEND_ARG_INFO(0, start)
2289 	ZEND_ARG_INFO(0, length)
2290 ZEND_END_ARG_INFO()
2291 
2292 ZEND_BEGIN_ARG_INFO(arginfo_quotemeta, 0)
2293 	ZEND_ARG_INFO(0, str)
2294 ZEND_END_ARG_INFO()
2295 
2296 ZEND_BEGIN_ARG_INFO(arginfo_ord, 0)
2297 	ZEND_ARG_INFO(0, character)
2298 ZEND_END_ARG_INFO()
2299 
2300 ZEND_BEGIN_ARG_INFO(arginfo_chr, 0)
2301 	ZEND_ARG_INFO(0, codepoint)
2302 ZEND_END_ARG_INFO()
2303 
2304 ZEND_BEGIN_ARG_INFO(arginfo_ucfirst, 0)
2305 	ZEND_ARG_INFO(0, str)
2306 ZEND_END_ARG_INFO()
2307 
2308 ZEND_BEGIN_ARG_INFO(arginfo_lcfirst, 0)
2309 	ZEND_ARG_INFO(0, str)
2310 ZEND_END_ARG_INFO()
2311 
2312 ZEND_BEGIN_ARG_INFO_EX(arginfo_ucwords, 0, 0, 1)
2313 	ZEND_ARG_INFO(0, str)
2314 	ZEND_ARG_INFO(0, delimiters)
2315 ZEND_END_ARG_INFO()
2316 
2317 ZEND_BEGIN_ARG_INFO_EX(arginfo_strtr, 0, 0, 2)
2318 	ZEND_ARG_INFO(0, str)
2319 	ZEND_ARG_INFO(0, from)
2320 	ZEND_ARG_INFO(0, to)
2321 ZEND_END_ARG_INFO()
2322 
2323 ZEND_BEGIN_ARG_INFO(arginfo_strrev, 0)
2324 	ZEND_ARG_INFO(0, str)
2325 ZEND_END_ARG_INFO()
2326 
2327 ZEND_BEGIN_ARG_INFO_EX(arginfo_similar_text, 0, 0, 2)
2328 	ZEND_ARG_INFO(0, str1)
2329 	ZEND_ARG_INFO(0, str2)
2330 	ZEND_ARG_INFO(1, percent)
2331 ZEND_END_ARG_INFO()
2332 
2333 ZEND_BEGIN_ARG_INFO(arginfo_addcslashes, 0)
2334 	ZEND_ARG_INFO(0, str)
2335 	ZEND_ARG_INFO(0, charlist)
2336 ZEND_END_ARG_INFO()
2337 
2338 ZEND_BEGIN_ARG_INFO(arginfo_addslashes, 0)
2339 	ZEND_ARG_INFO(0, str)
2340 ZEND_END_ARG_INFO()
2341 
2342 ZEND_BEGIN_ARG_INFO(arginfo_stripcslashes, 0)
2343 	ZEND_ARG_INFO(0, str)
2344 ZEND_END_ARG_INFO()
2345 
2346 ZEND_BEGIN_ARG_INFO(arginfo_stripslashes, 0)
2347 	ZEND_ARG_INFO(0, str)
2348 ZEND_END_ARG_INFO()
2349 
2350 ZEND_BEGIN_ARG_INFO_EX(arginfo_str_replace, 0, 0, 3)
2351 	ZEND_ARG_INFO(0, search)
2352 	ZEND_ARG_INFO(0, replace)
2353 	ZEND_ARG_INFO(0, subject)
2354 	ZEND_ARG_INFO(1, replace_count)
2355 ZEND_END_ARG_INFO()
2356 
2357 ZEND_BEGIN_ARG_INFO_EX(arginfo_str_ireplace, 0, 0, 3)
2358 	ZEND_ARG_INFO(0, search)
2359 	ZEND_ARG_INFO(0, replace)
2360 	ZEND_ARG_INFO(0, subject)
2361 	ZEND_ARG_INFO(1, replace_count)
2362 ZEND_END_ARG_INFO()
2363 
2364 ZEND_BEGIN_ARG_INFO_EX(arginfo_hebrev, 0, 0, 1)
2365 	ZEND_ARG_INFO(0, str)
2366 	ZEND_ARG_INFO(0, max_chars_per_line)
2367 ZEND_END_ARG_INFO()
2368 
2369 ZEND_BEGIN_ARG_INFO_EX(arginfo_hebrevc, 0, 0, 1)
2370 	ZEND_ARG_INFO(0, str)
2371 	ZEND_ARG_INFO(0, max_chars_per_line)
2372 ZEND_END_ARG_INFO()
2373 
2374 ZEND_BEGIN_ARG_INFO_EX(arginfo_nl2br, 0, 0, 1)
2375 	ZEND_ARG_INFO(0, str)
2376 	ZEND_ARG_INFO(0, is_xhtml)
2377 ZEND_END_ARG_INFO()
2378 
2379 ZEND_BEGIN_ARG_INFO_EX(arginfo_strip_tags, 0, 0, 1)
2380 	ZEND_ARG_INFO(0, str)
2381 	ZEND_ARG_INFO(0, allowable_tags)
2382 ZEND_END_ARG_INFO()
2383 
2384 ZEND_BEGIN_ARG_INFO_EX(arginfo_setlocale, 0, 0, 2)
2385 	ZEND_ARG_INFO(0, category)
2386 	ZEND_ARG_INFO(0, locale)
2387 	ZEND_ARG_INFO(0, ...)
2388 ZEND_END_ARG_INFO()
2389 
2390 ZEND_BEGIN_ARG_INFO_EX(arginfo_parse_str, 0, 0, 1)
2391 	ZEND_ARG_INFO(0, encoded_string)
2392 	ZEND_ARG_INFO(1, result)
2393 ZEND_END_ARG_INFO()
2394 
2395 ZEND_BEGIN_ARG_INFO_EX(arginfo_str_getcsv, 0, 0, 1)
2396 	ZEND_ARG_INFO(0, string)
2397 	ZEND_ARG_INFO(0, delimiter)
2398 	ZEND_ARG_INFO(0, enclosure)
2399 	ZEND_ARG_INFO(0, escape)
2400 ZEND_END_ARG_INFO()
2401 
2402 ZEND_BEGIN_ARG_INFO(arginfo_str_repeat, 0)
2403 	ZEND_ARG_INFO(0, input)
2404 	ZEND_ARG_INFO(0, mult)
2405 ZEND_END_ARG_INFO()
2406 
2407 ZEND_BEGIN_ARG_INFO_EX(arginfo_count_chars, 0, 0, 1)
2408 	ZEND_ARG_INFO(0, input)
2409 	ZEND_ARG_INFO(0, mode)
2410 ZEND_END_ARG_INFO()
2411 
2412 ZEND_BEGIN_ARG_INFO(arginfo_strnatcmp, 0)
2413 	ZEND_ARG_INFO(0, s1)
2414 	ZEND_ARG_INFO(0, s2)
2415 ZEND_END_ARG_INFO()
2416 
2417 ZEND_BEGIN_ARG_INFO(arginfo_localeconv, 0)
2418 ZEND_END_ARG_INFO()
2419 
2420 ZEND_BEGIN_ARG_INFO(arginfo_strnatcasecmp, 0)
2421 	ZEND_ARG_INFO(0, s1)
2422 	ZEND_ARG_INFO(0, s2)
2423 ZEND_END_ARG_INFO()
2424 
2425 ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_count, 0, 0, 2)
2426 	ZEND_ARG_INFO(0, haystack)
2427 	ZEND_ARG_INFO(0, needle)
2428 	ZEND_ARG_INFO(0, offset)
2429 	ZEND_ARG_INFO(0, length)
2430 ZEND_END_ARG_INFO()
2431 
2432 ZEND_BEGIN_ARG_INFO_EX(arginfo_str_pad, 0, 0, 2)
2433 	ZEND_ARG_INFO(0, input)
2434 	ZEND_ARG_INFO(0, pad_length)
2435 	ZEND_ARG_INFO(0, pad_string)
2436 	ZEND_ARG_INFO(0, pad_type)
2437 ZEND_END_ARG_INFO()
2438 
2439 ZEND_BEGIN_ARG_INFO_EX(arginfo_sscanf, 1, 0, 2)
2440 	ZEND_ARG_INFO(0, str)
2441 	ZEND_ARG_INFO(0, format)
2442 	ZEND_ARG_INFO(1, ...)
2443 ZEND_END_ARG_INFO()
2444 
2445 ZEND_BEGIN_ARG_INFO(arginfo_str_rot13, 0)
2446 	ZEND_ARG_INFO(0, str)
2447 ZEND_END_ARG_INFO()
2448 
2449 ZEND_BEGIN_ARG_INFO(arginfo_str_shuffle, 0)
2450 	ZEND_ARG_INFO(0, str)
2451 ZEND_END_ARG_INFO()
2452 
2453 ZEND_BEGIN_ARG_INFO_EX(arginfo_str_word_count, 0, 0, 1)
2454 	ZEND_ARG_INFO(0, str)
2455 	ZEND_ARG_INFO(0, format)
2456 	ZEND_ARG_INFO(0, charlist)
2457 ZEND_END_ARG_INFO()
2458 
2459 #ifdef HAVE_STRFMON
2460 ZEND_BEGIN_ARG_INFO(arginfo_money_format, 0)
2461 	ZEND_ARG_INFO(0, format)
2462 	ZEND_ARG_INFO(0, value)
2463 ZEND_END_ARG_INFO()
2464 #endif
2465 
2466 ZEND_BEGIN_ARG_INFO_EX(arginfo_str_split, 0, 0, 1)
2467 	ZEND_ARG_INFO(0, str)
2468 	ZEND_ARG_INFO(0, split_length)
2469 ZEND_END_ARG_INFO()
2470 
2471 ZEND_BEGIN_ARG_INFO_EX(arginfo_strpbrk, 0, 0, 1)
2472 	ZEND_ARG_INFO(0, haystack)
2473 	ZEND_ARG_INFO(0, char_list)
2474 ZEND_END_ARG_INFO()
2475 
2476 ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_compare, 0, 0, 3)
2477 	ZEND_ARG_INFO(0, main_str)
2478 	ZEND_ARG_INFO(0, str)
2479 	ZEND_ARG_INFO(0, offset)
2480 	ZEND_ARG_INFO(0, length)
2481 	ZEND_ARG_INFO(0, case_sensitivity)
2482 ZEND_END_ARG_INFO()
2483 /* }}} */
2484 /* {{{ syslog.c */
2485 #ifdef HAVE_SYSLOG_H
2486 ZEND_BEGIN_ARG_INFO(arginfo_openlog, 0)
2487 	ZEND_ARG_INFO(0, ident)
2488 	ZEND_ARG_INFO(0, option)
2489 	ZEND_ARG_INFO(0, facility)
2490 ZEND_END_ARG_INFO()
2491 
2492 ZEND_BEGIN_ARG_INFO(arginfo_closelog, 0)
2493 ZEND_END_ARG_INFO()
2494 
2495 ZEND_BEGIN_ARG_INFO(arginfo_syslog, 0)
2496 	ZEND_ARG_INFO(0, priority)
2497 	ZEND_ARG_INFO(0, message)
2498 ZEND_END_ARG_INFO()
2499 #endif
2500 /* }}} */
2501 /* {{{ type.c */
2502 ZEND_BEGIN_ARG_INFO(arginfo_gettype, 0)
2503 	ZEND_ARG_INFO(0, var)
2504 ZEND_END_ARG_INFO()
2505 
2506 ZEND_BEGIN_ARG_INFO(arginfo_settype, 0)
2507 	ZEND_ARG_INFO(1, var)
2508 	ZEND_ARG_INFO(0, type)
2509 ZEND_END_ARG_INFO()
2510 
2511 ZEND_BEGIN_ARG_INFO_EX(arginfo_intval, 0, 0, 1)
2512 	ZEND_ARG_INFO(0, var)
2513 	ZEND_ARG_INFO(0, base)
2514 ZEND_END_ARG_INFO()
2515 
2516 ZEND_BEGIN_ARG_INFO(arginfo_floatval, 0)
2517 	ZEND_ARG_INFO(0, var)
2518 ZEND_END_ARG_INFO()
2519 
2520 ZEND_BEGIN_ARG_INFO(arginfo_strval, 0)
2521 	ZEND_ARG_INFO(0, var)
2522 ZEND_END_ARG_INFO()
2523 
2524 ZEND_BEGIN_ARG_INFO(arginfo_is_null, 0)
2525 	ZEND_ARG_INFO(0, var)
2526 ZEND_END_ARG_INFO()
2527 
2528 ZEND_BEGIN_ARG_INFO(arginfo_is_resource, 0)
2529 	ZEND_ARG_INFO(0, var)
2530 ZEND_END_ARG_INFO()
2531 
2532 ZEND_BEGIN_ARG_INFO(arginfo_is_bool, 0)
2533 	ZEND_ARG_INFO(0, var)
2534 ZEND_END_ARG_INFO()
2535 
2536 ZEND_BEGIN_ARG_INFO(arginfo_is_long, 0)
2537 	ZEND_ARG_INFO(0, var)
2538 ZEND_END_ARG_INFO()
2539 
2540 ZEND_BEGIN_ARG_INFO(arginfo_is_float, 0)
2541 	ZEND_ARG_INFO(0, var)
2542 ZEND_END_ARG_INFO()
2543 
2544 ZEND_BEGIN_ARG_INFO(arginfo_is_string, 0)
2545 	ZEND_ARG_INFO(0, var)
2546 ZEND_END_ARG_INFO()
2547 
2548 ZEND_BEGIN_ARG_INFO(arginfo_is_array, 0)
2549 	ZEND_ARG_INFO(0, var)
2550 ZEND_END_ARG_INFO()
2551 
2552 ZEND_BEGIN_ARG_INFO(arginfo_is_object, 0)
2553 	ZEND_ARG_INFO(0, var)
2554 ZEND_END_ARG_INFO()
2555 
2556 ZEND_BEGIN_ARG_INFO(arginfo_is_numeric, 0)
2557 	ZEND_ARG_INFO(0, value)
2558 ZEND_END_ARG_INFO()
2559 
2560 ZEND_BEGIN_ARG_INFO(arginfo_is_scalar, 0)
2561 	ZEND_ARG_INFO(0, value)
2562 ZEND_END_ARG_INFO()
2563 
2564 ZEND_BEGIN_ARG_INFO_EX(arginfo_is_callable, 0, 0, 1)
2565 	ZEND_ARG_INFO(0, var)
2566 	ZEND_ARG_INFO(0, syntax_only)
2567 	ZEND_ARG_INFO(1, callable_name)
2568 ZEND_END_ARG_INFO()
2569 /* }}} */
2570 /* {{{ uniqid.c */
2571 #ifdef HAVE_GETTIMEOFDAY
2572 ZEND_BEGIN_ARG_INFO_EX(arginfo_uniqid, 0, 0, 0)
2573 	ZEND_ARG_INFO(0, prefix)
2574 	ZEND_ARG_INFO(0, more_entropy)
2575 ZEND_END_ARG_INFO()
2576 #endif
2577 /* }}} */
2578 /* {{{ url.c */
2579 ZEND_BEGIN_ARG_INFO_EX(arginfo_parse_url, 0, 0, 1)
2580 	ZEND_ARG_INFO(0, url)
2581 	ZEND_ARG_INFO(0, component)
2582 ZEND_END_ARG_INFO()
2583 
2584 ZEND_BEGIN_ARG_INFO(arginfo_urlencode, 0)
2585 	ZEND_ARG_INFO(0, str)
2586 ZEND_END_ARG_INFO()
2587 
2588 ZEND_BEGIN_ARG_INFO(arginfo_urldecode, 0)
2589 	ZEND_ARG_INFO(0, str)
2590 ZEND_END_ARG_INFO()
2591 
2592 ZEND_BEGIN_ARG_INFO(arginfo_rawurlencode, 0)
2593 	ZEND_ARG_INFO(0, str)
2594 ZEND_END_ARG_INFO()
2595 
2596 ZEND_BEGIN_ARG_INFO(arginfo_rawurldecode, 0)
2597 	ZEND_ARG_INFO(0, str)
2598 ZEND_END_ARG_INFO()
2599 
2600 ZEND_BEGIN_ARG_INFO_EX(arginfo_get_headers, 0, 0, 1)
2601 	ZEND_ARG_INFO(0, url)
2602 	ZEND_ARG_INFO(0, format)
2603 ZEND_END_ARG_INFO()
2604 /* }}} */
2605 /* {{{ user_filters.c */
2606 ZEND_BEGIN_ARG_INFO(arginfo_stream_bucket_make_writeable, 0)
2607 	ZEND_ARG_INFO(0, brigade)
2608 ZEND_END_ARG_INFO()
2609 
2610 ZEND_BEGIN_ARG_INFO(arginfo_stream_bucket_prepend, 0)
2611 	ZEND_ARG_INFO(0, brigade)
2612 	ZEND_ARG_INFO(0, bucket)
2613 ZEND_END_ARG_INFO()
2614 
2615 ZEND_BEGIN_ARG_INFO(arginfo_stream_bucket_append, 0)
2616 	ZEND_ARG_INFO(0, brigade)
2617 	ZEND_ARG_INFO(0, bucket)
2618 ZEND_END_ARG_INFO()
2619 
2620 ZEND_BEGIN_ARG_INFO(arginfo_stream_bucket_new, 0)
2621 	ZEND_ARG_INFO(0, stream)
2622 	ZEND_ARG_INFO(0, buffer)
2623 ZEND_END_ARG_INFO()
2624 
2625 ZEND_BEGIN_ARG_INFO(arginfo_stream_get_filters, 0)
2626 ZEND_END_ARG_INFO()
2627 
2628 ZEND_BEGIN_ARG_INFO(arginfo_stream_filter_register, 0)
2629 	ZEND_ARG_INFO(0, filtername)
2630 	ZEND_ARG_INFO(0, classname)
2631 ZEND_END_ARG_INFO()
2632 /* }}} */
2633 /* {{{ uuencode.c */
2634 ZEND_BEGIN_ARG_INFO(arginfo_convert_uuencode, 0)
2635 	ZEND_ARG_INFO(0, data)
2636 ZEND_END_ARG_INFO()
2637 
2638 ZEND_BEGIN_ARG_INFO(arginfo_convert_uudecode, 0)
2639 	ZEND_ARG_INFO(0, data)
2640 ZEND_END_ARG_INFO()
2641 /* }}} */
2642 /* {{{ var.c */
2643 ZEND_BEGIN_ARG_INFO_EX(arginfo_var_dump, 0, 0, 1)
2644 	ZEND_ARG_INFO(0, var)
2645 	ZEND_ARG_INFO(0, ...)
2646 ZEND_END_ARG_INFO()
2647 
2648 ZEND_BEGIN_ARG_INFO_EX(arginfo_debug_zval_dump, 0, 0, 1)
2649 	ZEND_ARG_INFO(0, var)
2650 	ZEND_ARG_INFO(0, ...)
2651 ZEND_END_ARG_INFO()
2652 
2653 ZEND_BEGIN_ARG_INFO_EX(arginfo_var_export, 0, 0, 1)
2654 	ZEND_ARG_INFO(0, var)
2655 	ZEND_ARG_INFO(0, return)
2656 ZEND_END_ARG_INFO()
2657 
2658 ZEND_BEGIN_ARG_INFO(arginfo_serialize, 0)
2659 	ZEND_ARG_INFO(0, var)
2660 ZEND_END_ARG_INFO()
2661 
2662 ZEND_BEGIN_ARG_INFO(arginfo_unserialize, 0)
2663 	ZEND_ARG_INFO(0, variable_representation)
2664 ZEND_END_ARG_INFO()
2665 
2666 ZEND_BEGIN_ARG_INFO_EX(arginfo_memory_get_usage, 0, 0, 0)
2667 	ZEND_ARG_INFO(0, real_usage)
2668 ZEND_END_ARG_INFO()
2669 
2670 ZEND_BEGIN_ARG_INFO_EX(arginfo_memory_get_peak_usage, 0, 0, 0)
2671 	ZEND_ARG_INFO(0, real_usage)
2672 ZEND_END_ARG_INFO()
2673 /* }}} */
2674 /* {{{ versioning.c */
2675 ZEND_BEGIN_ARG_INFO_EX(arginfo_version_compare, 0, 0, 2)
2676 	ZEND_ARG_INFO(0, ver1)
2677 	ZEND_ARG_INFO(0, ver2)
2678 	ZEND_ARG_INFO(0, oper)
2679 ZEND_END_ARG_INFO()
2680 /* }}} */
2681 /* }}} */
2682 
2683 const zend_function_entry basic_functions[] = { /* {{{ */
2684 	PHP_FE(constant,														arginfo_constant)
2685 	PHP_FE(bin2hex,															arginfo_bin2hex)
2686 	PHP_FE(hex2bin,															arginfo_hex2bin)
2687 	PHP_FE(sleep,															arginfo_sleep)
2688 	PHP_FE(usleep,															arginfo_usleep)
2689 #if HAVE_NANOSLEEP
2690 	PHP_FE(time_nanosleep,													arginfo_time_nanosleep)
2691 	PHP_FE(time_sleep_until,												arginfo_time_sleep_until)
2692 #endif
2693 
2694 #if HAVE_STRPTIME
2695 	PHP_FE(strptime,														arginfo_strptime)
2696 #endif
2697 
2698 	PHP_FE(flush,															arginfo_flush)
2699 	PHP_FE(wordwrap,														arginfo_wordwrap)
2700 	PHP_FE(htmlspecialchars,												arginfo_htmlspecialchars)
2701 	PHP_FE(htmlentities,													arginfo_htmlentities)
2702 	PHP_FE(html_entity_decode,												arginfo_html_entity_decode)
2703 	PHP_FE(htmlspecialchars_decode,											arginfo_htmlspecialchars_decode)
2704 	PHP_FE(get_html_translation_table,										arginfo_get_html_translation_table)
2705 	PHP_FE(sha1,															arginfo_sha1)
2706 	PHP_FE(sha1_file,														arginfo_sha1_file)
2707 	PHP_NAMED_FE(md5,php_if_md5,											arginfo_md5)
2708 	PHP_NAMED_FE(md5_file,php_if_md5_file,									arginfo_md5_file)
2709 	PHP_NAMED_FE(crc32,php_if_crc32,										arginfo_crc32)
2710 
2711 	PHP_FE(iptcparse,														arginfo_iptcparse)
2712 	PHP_FE(iptcembed,														arginfo_iptcembed)
2713 	PHP_FE(getimagesize,													arginfo_getimagesize)
2714 	PHP_FE(getimagesizefromstring,											arginfo_getimagesize)
2715 	PHP_FE(image_type_to_mime_type,											arginfo_image_type_to_mime_type)
2716 	PHP_FE(image_type_to_extension,											arginfo_image_type_to_extension)
2717 
2718 	PHP_FE(phpinfo,															arginfo_phpinfo)
2719 	PHP_FE(phpversion,														arginfo_phpversion)
2720 	PHP_FE(phpcredits,														arginfo_phpcredits)
2721 	PHP_FE(php_logo_guid,													arginfo_php_logo_guid)
2722 	PHP_FE(php_real_logo_guid,												arginfo_php_real_logo_guid)
2723 	PHP_FE(php_egg_logo_guid,												arginfo_php_egg_logo_guid)
2724 	PHP_FE(zend_logo_guid,													arginfo_zend_logo_guid)
2725 	PHP_FE(php_sapi_name,													arginfo_php_sapi_name)
2726 	PHP_FE(php_uname,														arginfo_php_uname)
2727 	PHP_FE(php_ini_scanned_files,											arginfo_php_ini_scanned_files)
2728 	PHP_FE(php_ini_loaded_file,												arginfo_php_ini_loaded_file)
2729 
2730 	PHP_FE(strnatcmp,														arginfo_strnatcmp)
2731 	PHP_FE(strnatcasecmp,													arginfo_strnatcasecmp)
2732 	PHP_FE(substr_count,													arginfo_substr_count)
2733 	PHP_FE(strspn,															arginfo_strspn)
2734 	PHP_FE(strcspn,															arginfo_strcspn)
2735 	PHP_FE(strtok,															arginfo_strtok)
2736 	PHP_FE(strtoupper,														arginfo_strtoupper)
2737 	PHP_FE(strtolower,														arginfo_strtolower)
2738 	PHP_FE(strpos,															arginfo_strpos)
2739 	PHP_FE(stripos,															arginfo_stripos)
2740 	PHP_FE(strrpos,															arginfo_strrpos)
2741 	PHP_FE(strripos,														arginfo_strripos)
2742 	PHP_FE(strrev,															arginfo_strrev)
2743 	PHP_FE(hebrev,															arginfo_hebrev)
2744 	PHP_FE(hebrevc,															arginfo_hebrevc)
2745 	PHP_FE(nl2br,															arginfo_nl2br)
2746 	PHP_FE(basename,														arginfo_basename)
2747 	PHP_FE(dirname,															arginfo_dirname)
2748 	PHP_FE(pathinfo,														arginfo_pathinfo)
2749 	PHP_FE(stripslashes,													arginfo_stripslashes)
2750 	PHP_FE(stripcslashes,													arginfo_stripcslashes)
2751 	PHP_FE(strstr,															arginfo_strstr)
2752 	PHP_FE(stristr,															arginfo_stristr)
2753 	PHP_FE(strrchr,															arginfo_strrchr)
2754 	PHP_FE(str_shuffle,														arginfo_str_shuffle)
2755 	PHP_FE(str_word_count,													arginfo_str_word_count)
2756 	PHP_FE(str_split,														arginfo_str_split)
2757 	PHP_FE(strpbrk,															arginfo_strpbrk)
2758 	PHP_FE(substr_compare,													arginfo_substr_compare)
2759 
2760 #ifdef HAVE_STRCOLL
2761 	PHP_FE(strcoll,															arginfo_strcoll)
2762 #endif
2763 
2764 #ifdef HAVE_STRFMON
2765 	PHP_FE(money_format,													arginfo_money_format)
2766 #endif
2767 
2768 	PHP_FE(substr,															arginfo_substr)
2769 	PHP_FE(substr_replace,													arginfo_substr_replace)
2770 	PHP_FE(quotemeta,														arginfo_quotemeta)
2771 	PHP_FE(ucfirst,															arginfo_ucfirst)
2772 	PHP_FE(lcfirst,															arginfo_lcfirst)
2773 	PHP_FE(ucwords,															arginfo_ucwords)
2774 	PHP_FE(strtr,															arginfo_strtr)
2775 	PHP_FE(addslashes,														arginfo_addslashes)
2776 	PHP_FE(addcslashes,														arginfo_addcslashes)
2777 	PHP_FE(rtrim,															arginfo_rtrim)
2778 	PHP_FE(str_replace,														arginfo_str_replace)
2779 	PHP_FE(str_ireplace,													arginfo_str_ireplace)
2780 	PHP_FE(str_repeat,														arginfo_str_repeat)
2781 	PHP_FE(count_chars,														arginfo_count_chars)
2782 	PHP_FE(chunk_split,														arginfo_chunk_split)
2783 	PHP_FE(trim,															arginfo_trim)
2784 	PHP_FE(ltrim,															arginfo_ltrim)
2785 	PHP_FE(strip_tags,														arginfo_strip_tags)
2786 	PHP_FE(similar_text,													arginfo_similar_text)
2787 	PHP_FE(explode,															arginfo_explode)
2788 	PHP_FE(implode,															arginfo_implode)
2789 	PHP_FALIAS(join,				implode,								arginfo_implode)
2790 	PHP_FE(setlocale,														arginfo_setlocale)
2791 	PHP_FE(localeconv,														arginfo_localeconv)
2792 
2793 #if HAVE_NL_LANGINFO
2794 	PHP_FE(nl_langinfo,														arginfo_nl_langinfo)
2795 #endif
2796 
2797 	PHP_FE(soundex,															arginfo_soundex)
2798 	PHP_FE(levenshtein,														arginfo_levenshtein)
2799 	PHP_FE(chr,																arginfo_chr)
2800 	PHP_FE(ord,																arginfo_ord)
2801 	PHP_FE(parse_str,														arginfo_parse_str)
2802 	PHP_FE(str_getcsv,														arginfo_str_getcsv)
2803 	PHP_FE(str_pad,															arginfo_str_pad)
2804 	PHP_FALIAS(chop,				rtrim,									arginfo_rtrim)
2805 	PHP_FALIAS(strchr,				strstr,									arginfo_strstr)
2806 	PHP_NAMED_FE(sprintf,			PHP_FN(user_sprintf),					arginfo_sprintf)
2807 	PHP_NAMED_FE(printf,			PHP_FN(user_printf),					arginfo_printf)
2808 	PHP_FE(vprintf,															arginfo_vprintf)
2809 	PHP_FE(vsprintf,														arginfo_vsprintf)
2810 	PHP_FE(fprintf,															arginfo_fprintf)
2811 	PHP_FE(vfprintf,														arginfo_vfprintf)
2812 	PHP_FE(sscanf,															arginfo_sscanf)
2813 	PHP_FE(fscanf,															arginfo_fscanf)
2814 	PHP_FE(parse_url,														arginfo_parse_url)
2815 	PHP_FE(urlencode,														arginfo_urlencode)
2816 	PHP_FE(urldecode,														arginfo_urldecode)
2817 	PHP_FE(rawurlencode,													arginfo_rawurlencode)
2818 	PHP_FE(rawurldecode,													arginfo_rawurldecode)
2819 	PHP_FE(http_build_query,												arginfo_http_build_query)
2820 
2821 #if defined(HAVE_SYMLINK) || defined(PHP_WIN32)
2822 	PHP_FE(readlink,														arginfo_readlink)
2823 	PHP_FE(linkinfo,														arginfo_linkinfo)
2824 	PHP_FE(symlink,															arginfo_symlink)
2825 	PHP_FE(link,															arginfo_link)
2826 #endif
2827 
2828 	PHP_FE(unlink,															arginfo_unlink)
2829 	PHP_FE(exec,															arginfo_exec)
2830 	PHP_FE(system,															arginfo_system)
2831 	PHP_FE(escapeshellcmd,													arginfo_escapeshellcmd)
2832 	PHP_FE(escapeshellarg,													arginfo_escapeshellarg)
2833 	PHP_FE(passthru,														arginfo_passthru)
2834 	PHP_FE(shell_exec,														arginfo_shell_exec)
2835 #ifdef PHP_CAN_SUPPORT_PROC_OPEN
2836 	PHP_FE(proc_open,														arginfo_proc_open)
2837 	PHP_FE(proc_close,														arginfo_proc_close)
2838 	PHP_FE(proc_terminate,													arginfo_proc_terminate)
2839 	PHP_FE(proc_get_status,													arginfo_proc_get_status)
2840 #endif
2841 
2842 #ifdef HAVE_NICE
2843 	PHP_FE(proc_nice,														arginfo_proc_nice)
2844 #endif
2845 
2846 	PHP_FE(rand,															arginfo_rand)
2847 	PHP_FE(srand,															arginfo_srand)
2848 	PHP_FE(getrandmax,													arginfo_getrandmax)
2849 	PHP_FE(mt_rand,														arginfo_mt_rand)
2850 	PHP_FE(mt_srand,														arginfo_mt_srand)
2851 	PHP_FE(mt_getrandmax,													arginfo_mt_getrandmax)
2852 
2853 #if HAVE_GETSERVBYNAME
2854 	PHP_FE(getservbyname,													arginfo_getservbyname)
2855 #endif
2856 
2857 #if HAVE_GETSERVBYPORT
2858 	PHP_FE(getservbyport,													arginfo_getservbyport)
2859 #endif
2860 
2861 #if HAVE_GETPROTOBYNAME
2862 	PHP_FE(getprotobyname,													arginfo_getprotobyname)
2863 #endif
2864 
2865 #if HAVE_GETPROTOBYNUMBER
2866 	PHP_FE(getprotobynumber,												arginfo_getprotobynumber)
2867 #endif
2868 
2869 	PHP_FE(getmyuid,														arginfo_getmyuid)
2870 	PHP_FE(getmygid,														arginfo_getmygid)
2871 	PHP_FE(getmypid,														arginfo_getmypid)
2872 	PHP_FE(getmyinode,														arginfo_getmyinode)
2873 	PHP_FE(getlastmod,														arginfo_getlastmod)
2874 
2875 	PHP_FE(base64_decode,													arginfo_base64_decode)
2876 	PHP_FE(base64_encode,													arginfo_base64_encode)
2877 
2878 	PHP_FE(convert_uuencode,												arginfo_convert_uuencode)
2879 	PHP_FE(convert_uudecode,												arginfo_convert_uudecode)
2880 
2881 	PHP_FE(abs,																arginfo_abs)
2882 	PHP_FE(ceil,															arginfo_ceil)
2883 	PHP_FE(floor,															arginfo_floor)
2884 	PHP_FE(round,															arginfo_round)
2885 	PHP_FE(sin,																arginfo_sin)
2886 	PHP_FE(cos,																arginfo_cos)
2887 	PHP_FE(tan,																arginfo_tan)
2888 	PHP_FE(asin,															arginfo_asin)
2889 	PHP_FE(acos,															arginfo_acos)
2890 	PHP_FE(atan,															arginfo_atan)
2891 	PHP_FE(atanh,															arginfo_atanh)
2892 	PHP_FE(atan2,															arginfo_atan2)
2893 	PHP_FE(sinh,															arginfo_sinh)
2894 	PHP_FE(cosh,															arginfo_cosh)
2895 	PHP_FE(tanh,															arginfo_tanh)
2896 	PHP_FE(asinh,															arginfo_asinh)
2897 	PHP_FE(acosh,															arginfo_acosh)
2898 	PHP_FE(expm1,															arginfo_expm1)
2899 	PHP_FE(log1p,															arginfo_log1p)
2900 	PHP_FE(pi,																arginfo_pi)
2901 	PHP_FE(is_finite,														arginfo_is_finite)
2902 	PHP_FE(is_nan,															arginfo_is_nan)
2903 	PHP_FE(is_infinite,														arginfo_is_infinite)
2904 	PHP_FE(pow,																arginfo_pow)
2905 	PHP_FE(exp,																arginfo_exp)
2906 	PHP_FE(log,																arginfo_log)
2907 	PHP_FE(log10,															arginfo_log10)
2908 	PHP_FE(sqrt,															arginfo_sqrt)
2909 	PHP_FE(hypot,															arginfo_hypot)
2910 	PHP_FE(deg2rad,															arginfo_deg2rad)
2911 	PHP_FE(rad2deg,															arginfo_rad2deg)
2912 	PHP_FE(bindec,															arginfo_bindec)
2913 	PHP_FE(hexdec,															arginfo_hexdec)
2914 	PHP_FE(octdec,															arginfo_octdec)
2915 	PHP_FE(decbin,															arginfo_decbin)
2916 	PHP_FE(decoct,															arginfo_decoct)
2917 	PHP_FE(dechex,															arginfo_dechex)
2918 	PHP_FE(base_convert,													arginfo_base_convert)
2919 	PHP_FE(number_format,													arginfo_number_format)
2920 	PHP_FE(fmod,															arginfo_fmod)
2921 #ifdef HAVE_INET_NTOP
2922 	PHP_RAW_NAMED_FE(inet_ntop,		php_inet_ntop,								arginfo_inet_ntop)
2923 #endif
2924 #ifdef HAVE_INET_PTON
2925 	PHP_RAW_NAMED_FE(inet_pton,		php_inet_pton,								arginfo_inet_pton)
2926 #endif
2927 	PHP_FE(ip2long,															arginfo_ip2long)
2928 	PHP_FE(long2ip,															arginfo_long2ip)
2929 
2930 	PHP_FE(getenv,															arginfo_getenv)
2931 #ifdef HAVE_PUTENV
2932 	PHP_FE(putenv,															arginfo_putenv)
2933 #endif
2934 
2935 	PHP_FE(getopt,															arginfo_getopt)
2936 
2937 #ifdef HAVE_GETLOADAVG
2938 	PHP_FE(sys_getloadavg,													arginfo_sys_getloadavg)
2939 #endif
2940 #ifdef HAVE_GETTIMEOFDAY
2941 	PHP_FE(microtime,														arginfo_microtime)
2942 	PHP_FE(gettimeofday,													arginfo_gettimeofday)
2943 #endif
2944 
2945 #ifdef HAVE_GETRUSAGE
2946 	PHP_FE(getrusage,														arginfo_getrusage)
2947 #endif
2948 
2949 #ifdef HAVE_GETTIMEOFDAY
2950 	PHP_FE(uniqid,															arginfo_uniqid)
2951 #endif
2952 
2953 	PHP_FE(quoted_printable_decode,											arginfo_quoted_printable_decode)
2954 	PHP_FE(quoted_printable_encode,											arginfo_quoted_printable_encode)
2955 	PHP_FE(convert_cyr_string,												arginfo_convert_cyr_string)
2956 	PHP_FE(get_current_user,												arginfo_get_current_user)
2957 	PHP_FE(set_time_limit,													arginfo_set_time_limit)
2958 	PHP_FE(header_register_callback,										arginfo_header_register_callback)
2959 	PHP_FE(get_cfg_var,														arginfo_get_cfg_var)
2960 
2961 	PHP_DEP_FALIAS(magic_quotes_runtime,	set_magic_quotes_runtime,		arginfo_set_magic_quotes_runtime)
2962 	PHP_DEP_FE(set_magic_quotes_runtime,									arginfo_set_magic_quotes_runtime)
2963 	PHP_FE(get_magic_quotes_gpc,										arginfo_get_magic_quotes_gpc)
2964 	PHP_FE(get_magic_quotes_runtime,									arginfo_get_magic_quotes_runtime)
2965 
2966 	PHP_FE(error_log,														arginfo_error_log)
2967 	PHP_FE(error_get_last,													arginfo_error_get_last)
2968 	PHP_FE(call_user_func,													arginfo_call_user_func)
2969 	PHP_FE(call_user_func_array,											arginfo_call_user_func_array)
2970 	PHP_DEP_FE(call_user_method,											arginfo_call_user_method)
2971 	PHP_DEP_FE(call_user_method_array,										arginfo_call_user_method_array)
2972 	PHP_FE(forward_static_call,											arginfo_forward_static_call)
2973 	PHP_FE(forward_static_call_array,										arginfo_forward_static_call_array)
2974 	PHP_FE(serialize,														arginfo_serialize)
2975 	PHP_FE(unserialize,														arginfo_unserialize)
2976 
2977 	PHP_FE(var_dump,														arginfo_var_dump)
2978 	PHP_FE(var_export,														arginfo_var_export)
2979 	PHP_FE(debug_zval_dump,													arginfo_debug_zval_dump)
2980 	PHP_FE(print_r,															arginfo_print_r)
2981 	PHP_FE(memory_get_usage,												arginfo_memory_get_usage)
2982 	PHP_FE(memory_get_peak_usage,											arginfo_memory_get_peak_usage)
2983 
2984 	PHP_FE(register_shutdown_function,										arginfo_register_shutdown_function)
2985 	PHP_FE(register_tick_function,											arginfo_register_tick_function)
2986 	PHP_FE(unregister_tick_function,										arginfo_unregister_tick_function)
2987 
2988 	PHP_FE(highlight_file,													arginfo_highlight_file)
2989 	PHP_FALIAS(show_source,			highlight_file,							arginfo_highlight_file)
2990 	PHP_FE(highlight_string,												arginfo_highlight_string)
2991 	PHP_FE(php_strip_whitespace,											arginfo_php_strip_whitespace)
2992 
2993 	PHP_FE(ini_get,															arginfo_ini_get)
2994 	PHP_FE(ini_get_all,														arginfo_ini_get_all)
2995 	PHP_FE(ini_set,															arginfo_ini_set)
2996 	PHP_FALIAS(ini_alter,			ini_set,								arginfo_ini_set)
2997 	PHP_FE(ini_restore,														arginfo_ini_restore)
2998 	PHP_FE(get_include_path,												arginfo_get_include_path)
2999 	PHP_FE(set_include_path,												arginfo_set_include_path)
3000 	PHP_FE(restore_include_path,											arginfo_restore_include_path)
3001 
3002 	PHP_FE(setcookie,														arginfo_setcookie)
3003 	PHP_FE(setrawcookie,													arginfo_setrawcookie)
3004 	PHP_FE(header,															arginfo_header)
3005 	PHP_FE(header_remove,													arginfo_header_remove)
3006 	PHP_FE(headers_sent,													arginfo_headers_sent)
3007 	PHP_FE(headers_list,													arginfo_headers_list)
3008 	PHP_FE(http_response_code,												arginfo_http_response_code)
3009 
3010 	PHP_FE(connection_aborted,												arginfo_connection_aborted)
3011 	PHP_FE(connection_status,												arginfo_connection_status)
3012 	PHP_FE(ignore_user_abort,												arginfo_ignore_user_abort)
3013 	PHP_FE(parse_ini_file,													arginfo_parse_ini_file)
3014 	PHP_FE(parse_ini_string,												arginfo_parse_ini_string)
3015 #if ZEND_DEBUG
3016 	PHP_FE(config_get_hash,													arginfo_config_get_hash)
3017 #endif
3018 	PHP_FE(is_uploaded_file,												arginfo_is_uploaded_file)
3019 	PHP_FE(move_uploaded_file,												arginfo_move_uploaded_file)
3020 
3021 	/* functions from dns.c */
3022 	PHP_FE(gethostbyaddr,													arginfo_gethostbyaddr)
3023 	PHP_FE(gethostbyname,													arginfo_gethostbyname)
3024 	PHP_FE(gethostbynamel,													arginfo_gethostbynamel)
3025 
3026 #ifdef HAVE_GETHOSTNAME
3027 	PHP_FE(gethostname,													arginfo_gethostname)
3028 #endif
3029 
3030 #if defined(PHP_WIN32) || (HAVE_DNS_SEARCH_FUNC && !(defined(__BEOS__) || defined(NETWARE)))
3031 
3032 	PHP_FE(dns_check_record,												arginfo_dns_check_record)
3033 	PHP_FALIAS(checkdnsrr,			dns_check_record,						arginfo_dns_check_record)
3034 
3035 # if defined(PHP_WIN32) || HAVE_FULL_DNS_FUNCS
3036 	PHP_FE(dns_get_mx,														arginfo_dns_get_mx)
3037 	PHP_FALIAS(getmxrr,				dns_get_mx,					arginfo_dns_get_mx)
3038 	PHP_FE(dns_get_record,													arginfo_dns_get_record)
3039 # endif
3040 #endif
3041 
3042 	/* functions from type.c */
3043 	PHP_FE(intval,															arginfo_intval)
3044 	PHP_FE(floatval,														arginfo_floatval)
3045 	PHP_FALIAS(doubleval,			floatval,								arginfo_floatval)
3046 	PHP_FE(strval,															arginfo_strval)
3047 	PHP_FE(gettype,															arginfo_gettype)
3048 	PHP_FE(settype,															arginfo_settype)
3049 	PHP_FE(is_null,															arginfo_is_null)
3050 	PHP_FE(is_resource,														arginfo_is_resource)
3051 	PHP_FE(is_bool,															arginfo_is_bool)
3052 	PHP_FE(is_long,															arginfo_is_long)
3053 	PHP_FE(is_float,														arginfo_is_float)
3054 	PHP_FALIAS(is_int,				is_long,								arginfo_is_long)
3055 	PHP_FALIAS(is_integer,			is_long,								arginfo_is_long)
3056 	PHP_FALIAS(is_double,			is_float,								arginfo_is_float)
3057 	PHP_FALIAS(is_real,				is_float,								arginfo_is_float)
3058 	PHP_FE(is_numeric,														arginfo_is_numeric)
3059 	PHP_FE(is_string,														arginfo_is_string)
3060 	PHP_FE(is_array,														arginfo_is_array)
3061 	PHP_FE(is_object,														arginfo_is_object)
3062 	PHP_FE(is_scalar,														arginfo_is_scalar)
3063 	PHP_FE(is_callable,														arginfo_is_callable)
3064 
3065 	/* functions from file.c */
3066 	PHP_FE(pclose,															arginfo_pclose)
3067 	PHP_FE(popen,															arginfo_popen)
3068 	PHP_FE(readfile,														arginfo_readfile)
3069 	PHP_FE(rewind,															arginfo_rewind)
3070 	PHP_FE(rmdir,															arginfo_rmdir)
3071 	PHP_FE(umask,															arginfo_umask)
3072 	PHP_FE(fclose,															arginfo_fclose)
3073 	PHP_FE(feof,															arginfo_feof)
3074 	PHP_FE(fgetc,															arginfo_fgetc)
3075 	PHP_FE(fgets,															arginfo_fgets)
3076 	PHP_FE(fgetss,															arginfo_fgetss)
3077 	PHP_FE(fread,															arginfo_fread)
3078 	PHP_NAMED_FE(fopen,				php_if_fopen,							arginfo_fopen)
3079 	PHP_FE(fpassthru,														arginfo_fpassthru)
3080 	PHP_NAMED_FE(ftruncate,			php_if_ftruncate,						arginfo_ftruncate)
3081 	PHP_NAMED_FE(fstat,				php_if_fstat,							arginfo_fstat)
3082 	PHP_FE(fseek,															arginfo_fseek)
3083 	PHP_FE(ftell,															arginfo_ftell)
3084 	PHP_FE(fflush,															arginfo_fflush)
3085 	PHP_FE(fwrite,															arginfo_fwrite)
3086 	PHP_FALIAS(fputs,				fwrite,									arginfo_fwrite)
3087 	PHP_FE(mkdir,															arginfo_mkdir)
3088 	PHP_FE(rename,															arginfo_rename)
3089 	PHP_FE(copy,															arginfo_copy)
3090 	PHP_FE(tempnam,															arginfo_tempnam)
3091 	PHP_NAMED_FE(tmpfile,			php_if_tmpfile,							arginfo_tmpfile)
3092 	PHP_FE(file,															arginfo_file)
3093 	PHP_FE(file_get_contents,												arginfo_file_get_contents)
3094 	PHP_FE(file_put_contents,												arginfo_file_put_contents)
3095 	PHP_FE(stream_select,													arginfo_stream_select)
3096 	PHP_FE(stream_context_create,											arginfo_stream_context_create)
3097 	PHP_FE(stream_context_set_params,										arginfo_stream_context_set_params)
3098 	PHP_FE(stream_context_get_params,										arginfo_stream_context_get_params)
3099 	PHP_FE(stream_context_set_option,										arginfo_stream_context_set_option)
3100 	PHP_FE(stream_context_get_options,										arginfo_stream_context_get_options)
3101 	PHP_FE(stream_context_get_default,										arginfo_stream_context_get_default)
3102 	PHP_FE(stream_context_set_default,										arginfo_stream_context_set_default)
3103 	PHP_FE(stream_filter_prepend,											arginfo_stream_filter_prepend)
3104 	PHP_FE(stream_filter_append,											arginfo_stream_filter_append)
3105 	PHP_FE(stream_filter_remove,											arginfo_stream_filter_remove)
3106 	PHP_FE(stream_socket_client,											arginfo_stream_socket_client)
3107 	PHP_FE(stream_socket_server,											arginfo_stream_socket_server)
3108 	PHP_FE(stream_socket_accept,											arginfo_stream_socket_accept)
3109 	PHP_FE(stream_socket_get_name,											arginfo_stream_socket_get_name)
3110 	PHP_FE(stream_socket_recvfrom,											arginfo_stream_socket_recvfrom)
3111 	PHP_FE(stream_socket_sendto,											arginfo_stream_socket_sendto)
3112 	PHP_FE(stream_socket_enable_crypto,										arginfo_stream_socket_enable_crypto)
3113 #ifdef HAVE_SHUTDOWN
3114 	PHP_FE(stream_socket_shutdown,											arginfo_stream_socket_shutdown)
3115 #endif
3116 #if HAVE_SOCKETPAIR
3117 	PHP_FE(stream_socket_pair,												arginfo_stream_socket_pair)
3118 #endif
3119 	PHP_FE(stream_copy_to_stream,											arginfo_stream_copy_to_stream)
3120 	PHP_FE(stream_get_contents,												arginfo_stream_get_contents)
3121 	PHP_FE(stream_supports_lock,											arginfo_stream_supports_lock)
3122 	PHP_FE(fgetcsv,															arginfo_fgetcsv)
3123 	PHP_FE(fputcsv,															arginfo_fputcsv)
3124 	PHP_FE(flock,															arginfo_flock)
3125 	PHP_FE(get_meta_tags,													arginfo_get_meta_tags)
3126 	PHP_FE(stream_set_read_buffer,											arginfo_stream_set_read_buffer)
3127 	PHP_FE(stream_set_write_buffer,											arginfo_stream_set_write_buffer)
3128 	PHP_FALIAS(set_file_buffer, stream_set_write_buffer,					arginfo_stream_set_write_buffer)
3129 	PHP_FE(stream_set_chunk_size,											arginfo_stream_set_chunk_size)
3130 
3131 	PHP_DEP_FALIAS(set_socket_blocking, stream_set_blocking,				arginfo_stream_set_blocking)
3132 	PHP_FE(stream_set_blocking,												arginfo_stream_set_blocking)
3133 	PHP_FALIAS(socket_set_blocking, stream_set_blocking,					arginfo_stream_set_blocking)
3134 
3135 	PHP_FE(stream_get_meta_data,											arginfo_stream_get_meta_data)
3136 	PHP_FE(stream_get_line,													arginfo_stream_get_line)
3137 	PHP_FE(stream_wrapper_register,											arginfo_stream_wrapper_register)
3138 	PHP_FALIAS(stream_register_wrapper, stream_wrapper_register,			arginfo_stream_wrapper_register)
3139 	PHP_FE(stream_wrapper_unregister,										arginfo_stream_wrapper_unregister)
3140 	PHP_FE(stream_wrapper_restore,											arginfo_stream_wrapper_restore)
3141 	PHP_FE(stream_get_wrappers,												arginfo_stream_get_wrappers)
3142 	PHP_FE(stream_get_transports,											arginfo_stream_get_transports)
3143 	PHP_FE(stream_resolve_include_path,										arginfo_stream_resolve_include_path)
3144 	PHP_FE(stream_is_local,												arginfo_stream_is_local)
3145 	PHP_FE(get_headers,														arginfo_get_headers)
3146 
3147 #if HAVE_SYS_TIME_H || defined(PHP_WIN32)
3148 	PHP_FE(stream_set_timeout,												arginfo_stream_set_timeout)
3149 	PHP_FALIAS(socket_set_timeout, stream_set_timeout,						arginfo_stream_set_timeout)
3150 #endif
3151 
3152 	PHP_FALIAS(socket_get_status, stream_get_meta_data,						arginfo_stream_get_meta_data)
3153 
3154 #if (!defined(__BEOS__) && !defined(NETWARE) && HAVE_REALPATH) || defined(ZTS)
3155 	PHP_FE(realpath,														arginfo_realpath)
3156 #endif
3157 
3158 #ifdef HAVE_FNMATCH
3159 	PHP_FE(fnmatch,															arginfo_fnmatch)
3160 #endif
3161 
3162 	/* functions from fsock.c */
3163 	PHP_FE(fsockopen,														arginfo_fsockopen)
3164 	PHP_FE(pfsockopen,														arginfo_pfsockopen)
3165 
3166 	/* functions from pack.c */
3167 	PHP_FE(pack,															arginfo_pack)
3168 	PHP_FE(unpack,															arginfo_unpack)
3169 
3170 	/* functions from browscap.c */
3171 	PHP_FE(get_browser,														arginfo_get_browser)
3172 
3173 #if HAVE_CRYPT
3174 	/* functions from crypt.c */
3175 	PHP_FE(crypt,															arginfo_crypt)
3176 #endif
3177 
3178 	/* functions from dir.c */
3179 	PHP_FE(opendir,															arginfo_opendir)
3180 	PHP_FE(closedir,														arginfo_closedir)
3181 	PHP_FE(chdir,															arginfo_chdir)
3182 
3183 #if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC
3184 	PHP_FE(chroot,															arginfo_chroot)
3185 #endif
3186 
3187 	PHP_FE(getcwd,															arginfo_getcwd)
3188 	PHP_FE(rewinddir,														arginfo_rewinddir)
3189 	PHP_NAMED_FE(readdir,			php_if_readdir,							arginfo_readdir)
3190 	PHP_FALIAS(dir,					getdir,									arginfo_dir)
3191 	PHP_FE(scandir,															arginfo_scandir)
3192 #ifdef HAVE_GLOB
3193 	PHP_FE(glob,															arginfo_glob)
3194 #endif
3195 	/* functions from filestat.c */
3196 	PHP_FE(fileatime,														arginfo_fileatime)
3197 	PHP_FE(filectime,														arginfo_filectime)
3198 	PHP_FE(filegroup,														arginfo_filegroup)
3199 	PHP_FE(fileinode,														arginfo_fileinode)
3200 	PHP_FE(filemtime,														arginfo_filemtime)
3201 	PHP_FE(fileowner,														arginfo_fileowner)
3202 	PHP_FE(fileperms,														arginfo_fileperms)
3203 	PHP_FE(filesize,														arginfo_filesize)
3204 	PHP_FE(filetype,														arginfo_filetype)
3205 	PHP_FE(file_exists,														arginfo_file_exists)
3206 	PHP_FE(is_writable,														arginfo_is_writable)
3207 	PHP_FALIAS(is_writeable,		is_writable,							arginfo_is_writable)
3208 	PHP_FE(is_readable,														arginfo_is_readable)
3209 	PHP_FE(is_executable,													arginfo_is_executable)
3210 	PHP_FE(is_file,															arginfo_is_file)
3211 	PHP_FE(is_dir,															arginfo_is_dir)
3212 	PHP_FE(is_link,															arginfo_is_link)
3213 	PHP_NAMED_FE(stat,				php_if_stat,							arginfo_stat)
3214 	PHP_NAMED_FE(lstat,				php_if_lstat,							arginfo_lstat)
3215 #ifndef NETWARE
3216 	PHP_FE(chown,															arginfo_chown)
3217 	PHP_FE(chgrp,															arginfo_chgrp)
3218 #endif
3219 #if HAVE_LCHOWN
3220 	PHP_FE(lchown,															arginfo_lchown)
3221 #endif
3222 #if HAVE_LCHOWN
3223 	PHP_FE(lchgrp,															arginfo_lchgrp)
3224 #endif
3225 	PHP_FE(chmod,															arginfo_chmod)
3226 #if HAVE_UTIME
3227 	PHP_FE(touch,															arginfo_touch)
3228 #endif
3229 	PHP_FE(clearstatcache,													arginfo_clearstatcache)
3230 	PHP_FE(disk_total_space,												arginfo_disk_total_space)
3231 	PHP_FE(disk_free_space,													arginfo_disk_free_space)
3232 	PHP_FALIAS(diskfreespace,		disk_free_space,						arginfo_disk_free_space)
3233 	PHP_FE(realpath_cache_size,												arginfo_realpath_cache_size)
3234 	PHP_FE(realpath_cache_get,												arginfo_realpath_cache_get)
3235 
3236 	/* functions from mail.c */
3237 	PHP_FE(mail,															arginfo_mail)
3238 	PHP_FE(ezmlm_hash,														arginfo_ezmlm_hash)
3239 
3240 	/* functions from syslog.c */
3241 #ifdef HAVE_SYSLOG_H
3242 	PHP_FE(openlog,															arginfo_openlog)
3243 	PHP_FE(syslog,															arginfo_syslog)
3244 	PHP_FE(closelog,														arginfo_closelog)
3245 #endif
3246 
3247 	/* functions from lcg.c */
3248 	PHP_FE(lcg_value,														arginfo_lcg_value)
3249 
3250 	/* functions from metaphone.c */
3251 	PHP_FE(metaphone,														arginfo_metaphone)
3252 
3253 	/* functions from output.c */
3254 	PHP_FE(ob_start,														arginfo_ob_start)
3255 	PHP_FE(ob_flush,														arginfo_ob_flush)
3256 	PHP_FE(ob_clean,														arginfo_ob_clean)
3257 	PHP_FE(ob_end_flush,													arginfo_ob_end_flush)
3258 	PHP_FE(ob_end_clean,													arginfo_ob_end_clean)
3259 	PHP_FE(ob_get_flush,													arginfo_ob_get_flush)
3260 	PHP_FE(ob_get_clean,													arginfo_ob_get_clean)
3261 	PHP_FE(ob_get_length,													arginfo_ob_get_length)
3262 	PHP_FE(ob_get_level,													arginfo_ob_get_level)
3263 	PHP_FE(ob_get_status,													arginfo_ob_get_status)
3264 	PHP_FE(ob_get_contents,													arginfo_ob_get_contents)
3265 	PHP_FE(ob_implicit_flush,												arginfo_ob_implicit_flush)
3266 	PHP_FE(ob_list_handlers,												arginfo_ob_list_handlers)
3267 
3268 	/* functions from array.c */
3269 	PHP_FE(ksort,															arginfo_ksort)
3270 	PHP_FE(krsort,															arginfo_krsort)
3271 	PHP_FE(natsort,															arginfo_natsort)
3272 	PHP_FE(natcasesort,														arginfo_natcasesort)
3273 	PHP_FE(asort,															arginfo_asort)
3274 	PHP_FE(arsort,															arginfo_arsort)
3275 	PHP_FE(sort,															arginfo_sort)
3276 	PHP_FE(rsort,															arginfo_rsort)
3277 	PHP_FE(usort,															arginfo_usort)
3278 	PHP_FE(uasort,															arginfo_uasort)
3279 	PHP_FE(uksort,															arginfo_uksort)
3280 	PHP_FE(shuffle,															arginfo_shuffle)
3281 	PHP_FE(array_walk,														arginfo_array_walk)
3282 	PHP_FE(array_walk_recursive,											arginfo_array_walk_recursive)
3283 	PHP_FE(count,															arginfo_count)
3284 	PHP_FE(end,																arginfo_end)
3285 	PHP_FE(prev,															arginfo_prev)
3286 	PHP_FE(next,															arginfo_next)
3287 	PHP_FE(reset,															arginfo_reset)
3288 	PHP_FE(current,															arginfo_current)
3289 	PHP_FE(key,																arginfo_key)
3290 	PHP_FE(min,																arginfo_min)
3291 	PHP_FE(max,																arginfo_max)
3292 	PHP_FE(in_array,														arginfo_in_array)
3293 	PHP_FE(array_search,													arginfo_array_search)
3294 	PHP_FE(extract,															arginfo_extract)
3295 	PHP_FE(compact,															arginfo_compact)
3296 	PHP_FE(array_fill,														arginfo_array_fill)
3297 	PHP_FE(array_fill_keys,													arginfo_array_fill_keys)
3298 	PHP_FE(range,															arginfo_range)
3299 	PHP_FE(array_multisort,													arginfo_array_multisort)
3300 	PHP_FE(array_push,														arginfo_array_push)
3301 	PHP_FE(array_pop,														arginfo_array_pop)
3302 	PHP_FE(array_shift,														arginfo_array_shift)
3303 	PHP_FE(array_unshift,													arginfo_array_unshift)
3304 	PHP_FE(array_splice,													arginfo_array_splice)
3305 	PHP_FE(array_slice,														arginfo_array_slice)
3306 	PHP_FE(array_merge,														arginfo_array_merge)
3307 	PHP_FE(array_merge_recursive,											arginfo_array_merge_recursive)
3308 	PHP_FE(array_replace,													arginfo_array_replace)
3309 	PHP_FE(array_replace_recursive,											arginfo_array_replace_recursive)
3310 	PHP_FE(array_keys,														arginfo_array_keys)
3311 	PHP_FE(array_values,													arginfo_array_values)
3312 	PHP_FE(array_count_values,												arginfo_array_count_values)
3313 	PHP_FE(array_reverse,													arginfo_array_reverse)
3314 	PHP_FE(array_reduce,													arginfo_array_reduce)
3315 	PHP_FE(array_pad,														arginfo_array_pad)
3316 	PHP_FE(array_flip,														arginfo_array_flip)
3317 	PHP_FE(array_change_key_case,											arginfo_array_change_key_case)
3318 	PHP_FE(array_rand,														arginfo_array_rand)
3319 	PHP_FE(array_unique,													arginfo_array_unique)
3320 	PHP_FE(array_intersect,													arginfo_array_intersect)
3321 	PHP_FE(array_intersect_key,												arginfo_array_intersect_key)
3322 	PHP_FE(array_intersect_ukey,											arginfo_array_intersect_ukey)
3323 	PHP_FE(array_uintersect,												arginfo_array_uintersect)
3324 	PHP_FE(array_intersect_assoc,											arginfo_array_intersect_assoc)
3325 	PHP_FE(array_uintersect_assoc,											arginfo_array_uintersect_assoc)
3326 	PHP_FE(array_intersect_uassoc,											arginfo_array_intersect_uassoc)
3327 	PHP_FE(array_uintersect_uassoc,											arginfo_array_uintersect_uassoc)
3328 	PHP_FE(array_diff,														arginfo_array_diff)
3329 	PHP_FE(array_diff_key,													arginfo_array_diff_key)
3330 	PHP_FE(array_diff_ukey,													arginfo_array_diff_ukey)
3331 	PHP_FE(array_udiff,														arginfo_array_udiff)
3332 	PHP_FE(array_diff_assoc,												arginfo_array_diff_assoc)
3333 	PHP_FE(array_udiff_assoc,												arginfo_array_udiff_assoc)
3334 	PHP_FE(array_diff_uassoc,												arginfo_array_diff_uassoc)
3335 	PHP_FE(array_udiff_uassoc,												arginfo_array_udiff_uassoc)
3336 	PHP_FE(array_sum,														arginfo_array_sum)
3337 	PHP_FE(array_product,													arginfo_array_product)
3338 	PHP_FE(array_filter,													arginfo_array_filter)
3339 	PHP_FE(array_map,														arginfo_array_map)
3340 	PHP_FE(array_chunk,														arginfo_array_chunk)
3341 	PHP_FE(array_combine,													arginfo_array_combine)
3342 	PHP_FE(array_key_exists,												arginfo_array_key_exists)
3343 
3344 	/* aliases from array.c */
3345 	PHP_FALIAS(pos,					current,								arginfo_current)
3346 	PHP_FALIAS(sizeof,				count,									arginfo_count)
3347 	PHP_FALIAS(key_exists,			array_key_exists,						arginfo_array_key_exists)
3348 
3349 	/* functions from assert.c */
3350 	PHP_FE(assert,															arginfo_assert)
3351 	PHP_FE(assert_options,													arginfo_assert_options)
3352 
3353 	/* functions from versioning.c */
3354 	PHP_FE(version_compare,													arginfo_version_compare)
3355 
3356 	/* functions from ftok.c*/
3357 #if HAVE_FTOK
3358 	PHP_FE(ftok,															arginfo_ftok)
3359 #endif
3360 
3361 	PHP_FE(str_rot13,														arginfo_str_rot13)
3362 	PHP_FE(stream_get_filters,												arginfo_stream_get_filters)
3363 	PHP_FE(stream_filter_register,											arginfo_stream_filter_register)
3364 	PHP_FE(stream_bucket_make_writeable,									arginfo_stream_bucket_make_writeable)
3365 	PHP_FE(stream_bucket_prepend,											arginfo_stream_bucket_prepend)
3366 	PHP_FE(stream_bucket_append,											arginfo_stream_bucket_append)
3367 	PHP_FE(stream_bucket_new,												arginfo_stream_bucket_new)
3368 
3369 	PHP_FE(output_add_rewrite_var,											arginfo_output_add_rewrite_var)
3370 	PHP_FE(output_reset_rewrite_vars,										arginfo_output_reset_rewrite_vars)
3371 
3372 	PHP_FE(sys_get_temp_dir,												arginfo_sys_get_temp_dir)
3373 
3374 	PHP_FE_END
3375 };
3376 /* }}} */
3377 
3378 static const zend_module_dep standard_deps[] = { /* {{{ */
3379 	ZEND_MOD_OPTIONAL("session")
3380 	ZEND_MOD_END
3381 };
3382 /* }}} */
3383 
3384 zend_module_entry basic_functions_module = { /* {{{ */
3385 	STANDARD_MODULE_HEADER_EX,
3386 	NULL,
3387 	standard_deps,
3388 	"standard",					/* extension name */
3389 	basic_functions,			/* function list */
3390 	PHP_MINIT(basic),			/* process startup */
3391 	PHP_MSHUTDOWN(basic),		/* process shutdown */
3392 	PHP_RINIT(basic),			/* request startup */
3393 	PHP_RSHUTDOWN(basic),		/* request shutdown */
3394 	PHP_MINFO(basic),			/* extension info */
3395 	PHP_VERSION,				/* extension version */
3396 	STANDARD_MODULE_PROPERTIES
3397 };
3398 /* }}} */
3399 
3400 #if defined(HAVE_PUTENV)
php_putenv_destructor(putenv_entry * pe)3401 static void php_putenv_destructor(putenv_entry *pe) /* {{{ */
3402 {
3403 	if (pe->previous_value) {
3404 #if _MSC_VER >= 1300
3405 		/* VS.Net has a bug in putenv() when setting a variable that
3406 		 * is already set; if the SetEnvironmentVariable() API call
3407 		 * fails, the Crt will double free() a string.
3408 		 * We try to avoid this by setting our own value first */
3409 		SetEnvironmentVariable(pe->key, "bugbug");
3410 #endif
3411 		putenv(pe->previous_value);
3412 # if defined(PHP_WIN32)
3413 		efree(pe->previous_value);
3414 # endif
3415 	} else {
3416 # if HAVE_UNSETENV
3417 		unsetenv(pe->key);
3418 # elif defined(PHP_WIN32)
3419 		SetEnvironmentVariable(pe->key, NULL);
3420 # else
3421 		char **env;
3422 
3423 		for (env = environ; env != NULL && *env != NULL; env++) {
3424 			if (!strncmp(*env, pe->key, pe->key_len) && (*env)[pe->key_len] == '=') {	/* found it */
3425 				*env = "";
3426 				break;
3427 			}
3428 		}
3429 # endif
3430 	}
3431 #ifdef HAVE_TZSET
3432 	/* don't forget to reset the various libc globals that
3433 	 * we might have changed by an earlier call to tzset(). */
3434 	if (!strncmp(pe->key, "TZ", pe->key_len)) {
3435 		tzset();
3436 	}
3437 #endif
3438 
3439 	efree(pe->putenv_string);
3440 	efree(pe->key);
3441 }
3442 /* }}} */
3443 #endif
3444 
basic_globals_ctor(php_basic_globals * basic_globals_p TSRMLS_DC)3445 static void basic_globals_ctor(php_basic_globals *basic_globals_p TSRMLS_DC) /* {{{ */
3446 {
3447 	BG(rand_is_seeded) = 0;
3448 	BG(mt_rand_is_seeded) = 0;
3449 	BG(umask) = -1;
3450 	BG(next) = NULL;
3451 	BG(left) = -1;
3452 	BG(user_tick_functions) = NULL;
3453 	BG(user_filter_map) = NULL;
3454 	BG(serialize_lock) = 0;
3455 
3456 	memset(&BG(serialize), 0, sizeof(BG(serialize)));
3457 	memset(&BG(unserialize), 0, sizeof(BG(unserialize)));
3458 
3459 	memset(&BG(url_adapt_state_ex), 0, sizeof(BG(url_adapt_state_ex)));
3460 
3461 #if defined(_REENTRANT) && defined(HAVE_MBRLEN) && defined(HAVE_MBSTATE_T)
3462 	memset(&BG(mblen_state), 0, sizeof(BG(mblen_state)));
3463 #endif
3464 
3465 	BG(incomplete_class) = incomplete_class_entry;
3466 	BG(page_uid) = -1;
3467 	BG(page_gid) = -1;
3468 }
3469 /* }}} */
3470 
basic_globals_dtor(php_basic_globals * basic_globals_p TSRMLS_DC)3471 static void basic_globals_dtor(php_basic_globals *basic_globals_p TSRMLS_DC) /* {{{ */
3472 {
3473 	if (BG(url_adapt_state_ex).tags) {
3474 		zend_hash_destroy(BG(url_adapt_state_ex).tags);
3475 		free(BG(url_adapt_state_ex).tags);
3476 	}
3477 }
3478 /* }}} */
3479 
3480 #define PHP_DOUBLE_INFINITY_HIGH       0x7ff00000
3481 #define PHP_DOUBLE_QUIET_NAN_HIGH      0xfff80000
3482 
php_get_nan(void)3483 PHPAPI double php_get_nan(void) /* {{{ */
3484 {
3485 #if HAVE_HUGE_VAL_NAN
3486 	return HUGE_VAL + -HUGE_VAL;
3487 #elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha)
3488 	double val = 0.0;
3489 	((php_uint32*)&val)[1] = PHP_DOUBLE_QUIET_NAN_HIGH;
3490 	((php_uint32*)&val)[0] = 0;
3491 	return val;
3492 #elif HAVE_ATOF_ACCEPTS_NAN
3493 	return atof("NAN");
3494 #else
3495 	return 0.0/0.0;
3496 #endif
3497 }
3498 /* }}} */
3499 
php_get_inf(void)3500 PHPAPI double php_get_inf(void) /* {{{ */
3501 {
3502 #if HAVE_HUGE_VAL_INF
3503 	return HUGE_VAL;
3504 #elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha)
3505 	double val = 0.0;
3506 	((php_uint32*)&val)[1] = PHP_DOUBLE_INFINITY_HIGH;
3507 	((php_uint32*)&val)[0] = 0;
3508 	return val;
3509 #elif HAVE_ATOF_ACCEPTS_INF
3510 	return atof("INF");
3511 #else
3512 	return 1.0/0.0;
3513 #endif
3514 }
3515 /* }}} */
3516 
PHP_MINIT_FUNCTION(basic)3517 PHP_MINIT_FUNCTION(basic) /* {{{ */
3518 {
3519 #ifdef ZTS
3520 	ts_allocate_id(&basic_globals_id, sizeof(php_basic_globals), (ts_allocate_ctor) basic_globals_ctor, (ts_allocate_dtor) basic_globals_dtor);
3521 #ifdef PHP_WIN32
3522 	ts_allocate_id(&php_win32_core_globals_id, sizeof(php_win32_core_globals), (ts_allocate_ctor)php_win32_core_globals_ctor, (ts_allocate_dtor)php_win32_core_globals_dtor );
3523 #endif
3524 #else
3525 	basic_globals_ctor(&basic_globals TSRMLS_CC);
3526 #ifdef PHP_WIN32
3527 	php_win32_core_globals_ctor(&the_php_win32_core_globals TSRMLS_CC);
3528 #endif
3529 #endif
3530 
3531 	BG(incomplete_class) = incomplete_class_entry = php_create_incomplete_class(TSRMLS_C);
3532 
3533 	REGISTER_LONG_CONSTANT("CONNECTION_ABORTED", PHP_CONNECTION_ABORTED, CONST_CS | CONST_PERSISTENT);
3534 	REGISTER_LONG_CONSTANT("CONNECTION_NORMAL",  PHP_CONNECTION_NORMAL,  CONST_CS | CONST_PERSISTENT);
3535 	REGISTER_LONG_CONSTANT("CONNECTION_TIMEOUT", PHP_CONNECTION_TIMEOUT, CONST_CS | CONST_PERSISTENT);
3536 
3537 	REGISTER_LONG_CONSTANT("INI_USER",   ZEND_INI_USER,   CONST_CS | CONST_PERSISTENT);
3538 	REGISTER_LONG_CONSTANT("INI_PERDIR", ZEND_INI_PERDIR, CONST_CS | CONST_PERSISTENT);
3539 	REGISTER_LONG_CONSTANT("INI_SYSTEM", ZEND_INI_SYSTEM, CONST_CS | CONST_PERSISTENT);
3540 	REGISTER_LONG_CONSTANT("INI_ALL",    ZEND_INI_ALL,    CONST_CS | CONST_PERSISTENT);
3541 
3542 	REGISTER_LONG_CONSTANT("INI_SCANNER_NORMAL", ZEND_INI_SCANNER_NORMAL, CONST_CS | CONST_PERSISTENT);
3543 	REGISTER_LONG_CONSTANT("INI_SCANNER_RAW",    ZEND_INI_SCANNER_RAW,    CONST_CS | CONST_PERSISTENT);
3544 
3545 	REGISTER_LONG_CONSTANT("PHP_URL_SCHEME", PHP_URL_SCHEME, CONST_CS | CONST_PERSISTENT);
3546 	REGISTER_LONG_CONSTANT("PHP_URL_HOST", PHP_URL_HOST, CONST_CS | CONST_PERSISTENT);
3547 	REGISTER_LONG_CONSTANT("PHP_URL_PORT", PHP_URL_PORT, CONST_CS | CONST_PERSISTENT);
3548 	REGISTER_LONG_CONSTANT("PHP_URL_USER", PHP_URL_USER, CONST_CS | CONST_PERSISTENT);
3549 	REGISTER_LONG_CONSTANT("PHP_URL_PASS", PHP_URL_PASS, CONST_CS | CONST_PERSISTENT);
3550 	REGISTER_LONG_CONSTANT("PHP_URL_PATH", PHP_URL_PATH, CONST_CS | CONST_PERSISTENT);
3551 	REGISTER_LONG_CONSTANT("PHP_URL_QUERY", PHP_URL_QUERY, CONST_CS | CONST_PERSISTENT);
3552 	REGISTER_LONG_CONSTANT("PHP_URL_FRAGMENT", PHP_URL_FRAGMENT, CONST_CS | CONST_PERSISTENT);
3553 	REGISTER_LONG_CONSTANT("PHP_QUERY_RFC1738", PHP_QUERY_RFC1738, CONST_CS | CONST_PERSISTENT);
3554 	REGISTER_LONG_CONSTANT("PHP_QUERY_RFC3986", PHP_QUERY_RFC3986, CONST_CS | CONST_PERSISTENT);
3555 
3556 #define REGISTER_MATH_CONSTANT(x)  REGISTER_DOUBLE_CONSTANT(#x, x, CONST_CS | CONST_PERSISTENT)
3557 	REGISTER_MATH_CONSTANT(M_E);
3558 	REGISTER_MATH_CONSTANT(M_LOG2E);
3559 	REGISTER_MATH_CONSTANT(M_LOG10E);
3560 	REGISTER_MATH_CONSTANT(M_LN2);
3561 	REGISTER_MATH_CONSTANT(M_LN10);
3562 	REGISTER_MATH_CONSTANT(M_PI);
3563 	REGISTER_MATH_CONSTANT(M_PI_2);
3564 	REGISTER_MATH_CONSTANT(M_PI_4);
3565 	REGISTER_MATH_CONSTANT(M_1_PI);
3566 	REGISTER_MATH_CONSTANT(M_2_PI);
3567 	REGISTER_MATH_CONSTANT(M_SQRTPI);
3568 	REGISTER_MATH_CONSTANT(M_2_SQRTPI);
3569 	REGISTER_MATH_CONSTANT(M_LNPI);
3570 	REGISTER_MATH_CONSTANT(M_EULER);
3571 	REGISTER_MATH_CONSTANT(M_SQRT2);
3572 	REGISTER_MATH_CONSTANT(M_SQRT1_2);
3573 	REGISTER_MATH_CONSTANT(M_SQRT3);
3574 	REGISTER_DOUBLE_CONSTANT("INF", php_get_inf(), CONST_CS | CONST_PERSISTENT);
3575 	REGISTER_DOUBLE_CONSTANT("NAN", php_get_nan(), CONST_CS | CONST_PERSISTENT);
3576 
3577 	REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_UP", PHP_ROUND_HALF_UP, CONST_CS | CONST_PERSISTENT);
3578 	REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_DOWN", PHP_ROUND_HALF_DOWN, CONST_CS | CONST_PERSISTENT);
3579 	REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_EVEN", PHP_ROUND_HALF_EVEN, CONST_CS | CONST_PERSISTENT);
3580 	REGISTER_LONG_CONSTANT("PHP_ROUND_HALF_ODD", PHP_ROUND_HALF_ODD, CONST_CS | CONST_PERSISTENT);
3581 
3582 #if ENABLE_TEST_CLASS
3583 	test_class_startup();
3584 #endif
3585 
3586 	register_phpinfo_constants(INIT_FUNC_ARGS_PASSTHRU);
3587 	register_html_constants(INIT_FUNC_ARGS_PASSTHRU);
3588 	register_string_constants(INIT_FUNC_ARGS_PASSTHRU);
3589 
3590 	PHP_MINIT(file)(INIT_FUNC_ARGS_PASSTHRU);
3591 	PHP_MINIT(pack)(INIT_FUNC_ARGS_PASSTHRU);
3592 	PHP_MINIT(browscap)(INIT_FUNC_ARGS_PASSTHRU);
3593 	PHP_MINIT(standard_filters)(INIT_FUNC_ARGS_PASSTHRU);
3594 	PHP_MINIT(user_filters)(INIT_FUNC_ARGS_PASSTHRU);
3595 
3596 #if defined(HAVE_LOCALECONV) && defined(ZTS)
3597 	PHP_MINIT(localeconv)(INIT_FUNC_ARGS_PASSTHRU);
3598 #endif
3599 
3600 #if defined(HAVE_NL_LANGINFO)
3601 	PHP_MINIT(nl_langinfo)(INIT_FUNC_ARGS_PASSTHRU);
3602 #endif
3603 
3604 #if HAVE_CRYPT
3605 	PHP_MINIT(crypt)(INIT_FUNC_ARGS_PASSTHRU);
3606 #endif
3607 
3608 	PHP_MINIT(lcg)(INIT_FUNC_ARGS_PASSTHRU);
3609 
3610 	PHP_MINIT(dir)(INIT_FUNC_ARGS_PASSTHRU);
3611 #ifdef HAVE_SYSLOG_H
3612 	PHP_MINIT(syslog)(INIT_FUNC_ARGS_PASSTHRU);
3613 #endif
3614 	PHP_MINIT(array)(INIT_FUNC_ARGS_PASSTHRU);
3615 	PHP_MINIT(assert)(INIT_FUNC_ARGS_PASSTHRU);
3616 	PHP_MINIT(url_scanner_ex)(INIT_FUNC_ARGS_PASSTHRU);
3617 #ifdef PHP_CAN_SUPPORT_PROC_OPEN
3618 	PHP_MINIT(proc_open)(INIT_FUNC_ARGS_PASSTHRU);
3619 #endif
3620 
3621 	PHP_MINIT(user_streams)(INIT_FUNC_ARGS_PASSTHRU);
3622 	PHP_MINIT(imagetypes)(INIT_FUNC_ARGS_PASSTHRU);
3623 
3624 	php_register_url_stream_wrapper("php", &php_stream_php_wrapper TSRMLS_CC);
3625 	php_register_url_stream_wrapper("file", &php_plain_files_wrapper TSRMLS_CC);
3626 #ifdef HAVE_GLOB
3627 	php_register_url_stream_wrapper("glob", &php_glob_stream_wrapper TSRMLS_CC);
3628 #endif
3629 	php_register_url_stream_wrapper("data", &php_stream_rfc2397_wrapper TSRMLS_CC);
3630 #ifndef PHP_CURL_URL_WRAPPERS
3631 	php_register_url_stream_wrapper("http", &php_stream_http_wrapper TSRMLS_CC);
3632 	php_register_url_stream_wrapper("ftp", &php_stream_ftp_wrapper TSRMLS_CC);
3633 #endif
3634 
3635 #if defined(PHP_WIN32) || (HAVE_DNS_SEARCH_FUNC && !(defined(__BEOS__) || defined(NETWARE)))
3636 # if defined(PHP_WIN32) || HAVE_FULL_DNS_FUNCS
3637 	PHP_MINIT(dns)(INIT_FUNC_ARGS_PASSTHRU);
3638 # endif
3639 #endif
3640 
3641 	return SUCCESS;
3642 }
3643 /* }}} */
3644 
PHP_MSHUTDOWN_FUNCTION(basic)3645 PHP_MSHUTDOWN_FUNCTION(basic) /* {{{ */
3646 {
3647 #ifdef HAVE_SYSLOG_H
3648 	PHP_MSHUTDOWN(syslog)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3649 #endif
3650 #ifdef ZTS
3651 	ts_free_id(basic_globals_id);
3652 #ifdef PHP_WIN32
3653 	ts_free_id(php_win32_core_globals_id);
3654 #endif
3655 #else
3656 	basic_globals_dtor(&basic_globals TSRMLS_CC);
3657 #ifdef PHP_WIN32
3658 	php_win32_core_globals_dtor(&the_php_win32_core_globals TSRMLS_CC);
3659 #endif
3660 #endif
3661 
3662 	php_unregister_url_stream_wrapper("php" TSRMLS_CC);
3663 #ifndef PHP_CURL_URL_WRAPPERS
3664 	php_unregister_url_stream_wrapper("http" TSRMLS_CC);
3665 	php_unregister_url_stream_wrapper("ftp" TSRMLS_CC);
3666 #endif
3667 
3668 	PHP_MSHUTDOWN(browscap)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3669 	PHP_MSHUTDOWN(array)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3670 	PHP_MSHUTDOWN(assert)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3671 	PHP_MSHUTDOWN(url_scanner_ex)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3672 	PHP_MSHUTDOWN(file)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3673 	PHP_MSHUTDOWN(standard_filters)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3674 #if defined(HAVE_LOCALECONV) && defined(ZTS)
3675 	PHP_MSHUTDOWN(localeconv)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3676 #endif
3677 #if HAVE_CRYPT
3678 	PHP_MSHUTDOWN(crypt)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3679 #endif
3680 
3681 	return SUCCESS;
3682 }
3683 /* }}} */
3684 
PHP_RINIT_FUNCTION(basic)3685 PHP_RINIT_FUNCTION(basic) /* {{{ */
3686 {
3687 	memset(BG(strtok_table), 0, 256);
3688 
3689 	BG(serialize_lock) = 0;
3690 	memset(&BG(serialize), 0, sizeof(BG(serialize)));
3691 	memset(&BG(unserialize), 0, sizeof(BG(unserialize)));
3692 
3693 	BG(strtok_string) = NULL;
3694 	BG(strtok_zval) = NULL;
3695 	BG(strtok_last) = NULL;
3696 	BG(locale_string) = NULL;
3697 	BG(array_walk_fci) = empty_fcall_info;
3698 	BG(array_walk_fci_cache) = empty_fcall_info_cache;
3699 	BG(user_compare_fci) = empty_fcall_info;
3700 	BG(user_compare_fci_cache) = empty_fcall_info_cache;
3701 	BG(page_uid) = -1;
3702 	BG(page_gid) = -1;
3703 	BG(page_inode) = -1;
3704 	BG(page_mtime) = -1;
3705 #ifdef HAVE_PUTENV
3706 	if (zend_hash_init(&BG(putenv_ht), 1, NULL, (void (*)(void *)) php_putenv_destructor, 0) == FAILURE) {
3707 		return FAILURE;
3708 	}
3709 #endif
3710 	BG(user_shutdown_function_names) = NULL;
3711 
3712 	PHP_RINIT(filestat)(INIT_FUNC_ARGS_PASSTHRU);
3713 #ifdef HAVE_SYSLOG_H
3714 	PHP_RINIT(syslog)(INIT_FUNC_ARGS_PASSTHRU);
3715 #endif
3716 	PHP_RINIT(dir)(INIT_FUNC_ARGS_PASSTHRU);
3717 	PHP_RINIT(url_scanner_ex)(INIT_FUNC_ARGS_PASSTHRU);
3718 
3719 	/* Setup default context */
3720 	FG(default_context) = NULL;
3721 
3722 	/* Default to global wrappers only */
3723 	FG(stream_wrappers) = NULL;
3724 
3725 	/* Default to global filters only */
3726 	FG(stream_filters) = NULL;
3727 
3728 	return SUCCESS;
3729 }
3730 /* }}} */
3731 
PHP_RSHUTDOWN_FUNCTION(basic)3732 PHP_RSHUTDOWN_FUNCTION(basic) /* {{{ */
3733 {
3734 	if (BG(strtok_zval)) {
3735 		zval_ptr_dtor(&BG(strtok_zval));
3736 	}
3737 	BG(strtok_string) = NULL;
3738 	BG(strtok_zval) = NULL;
3739 #ifdef HAVE_PUTENV
3740 	zend_hash_destroy(&BG(putenv_ht));
3741 #endif
3742 
3743 	if (BG(umask) != -1) {
3744 		umask(BG(umask));
3745 	}
3746 
3747 	/* Check if locale was changed and change it back
3748 	 * to the value in startup environment */
3749 	if (BG(locale_string) != NULL) {
3750 		setlocale(LC_ALL, "C");
3751 		setlocale(LC_CTYPE, "");
3752 		zend_update_current_locale();
3753 	}
3754 	STR_FREE(BG(locale_string));
3755 	BG(locale_string) = NULL;
3756 
3757 	/* FG(stream_wrappers) and FG(stream_filters) are destroyed
3758 	 * during php_request_shutdown() */
3759 
3760 	PHP_RSHUTDOWN(filestat)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3761 #ifdef HAVE_SYSLOG_H
3762 #ifdef PHP_WIN32
3763 	PHP_RSHUTDOWN(syslog)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3764 #endif
3765 #endif
3766 	PHP_RSHUTDOWN(assert)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3767 	PHP_RSHUTDOWN(url_scanner_ex)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3768 	PHP_RSHUTDOWN(streams)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3769 #ifdef PHP_WIN32
3770 	PHP_RSHUTDOWN(win32_core_globals)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3771 #endif
3772 
3773 	if (BG(user_tick_functions)) {
3774 		zend_llist_destroy(BG(user_tick_functions));
3775 		efree(BG(user_tick_functions));
3776 		BG(user_tick_functions) = NULL;
3777 	}
3778 
3779 	PHP_RSHUTDOWN(user_filters)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3780 	PHP_RSHUTDOWN(browscap)(SHUTDOWN_FUNC_ARGS_PASSTHRU);
3781 
3782  	BG(page_uid) = -1;
3783  	BG(page_gid) = -1;
3784 	return SUCCESS;
3785 }
3786 /* }}} */
3787 
PHP_MINFO_FUNCTION(basic)3788 PHP_MINFO_FUNCTION(basic) /* {{{ */
3789 {
3790 	php_info_print_table_start();
3791 	PHP_MINFO(dl)(ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU);
3792 	PHP_MINFO(mail)(ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU);
3793 	php_info_print_table_end();
3794 	PHP_MINFO(assert)(ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU);
3795 }
3796 /* }}} */
3797 
3798 /* {{{ proto mixed constant(string const_name)
3799    Given the name of a constant this function will return the constant's associated value */
PHP_FUNCTION(constant)3800 PHP_FUNCTION(constant)
3801 {
3802 	char *const_name;
3803 	int const_name_len;
3804 
3805 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &const_name, &const_name_len) == FAILURE) {
3806 		return;
3807 	}
3808 
3809 	if (!zend_get_constant_ex(const_name, const_name_len, return_value, NULL, ZEND_FETCH_CLASS_SILENT TSRMLS_CC)) {
3810 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't find constant %s", const_name);
3811 		RETURN_NULL();
3812 	}
3813 }
3814 /* }}} */
3815 
3816 #ifdef HAVE_INET_NTOP
3817 /* {{{ proto string inet_ntop(string in_addr)
3818    Converts a packed inet address to a human readable IP address string */
PHP_NAMED_FUNCTION(php_inet_ntop)3819 PHP_NAMED_FUNCTION(php_inet_ntop)
3820 {
3821 	char *address;
3822 	int address_len, af = AF_INET;
3823 	char buffer[40];
3824 
3825 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &address, &address_len) == FAILURE) {
3826 		RETURN_FALSE;
3827 	}
3828 
3829 #ifdef HAVE_IPV6
3830 	if (address_len == 16) {
3831 		af = AF_INET6;
3832 	} else
3833 #endif
3834 	if (address_len != 4) {
3835 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid in_addr value");
3836 		RETURN_FALSE;
3837 	}
3838 
3839 	if (!inet_ntop(af, address, buffer, sizeof(buffer))) {
3840 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "An unknown error occurred");
3841 		RETURN_FALSE;
3842 	}
3843 
3844 	RETURN_STRING(buffer, 1);
3845 }
3846 /* }}} */
3847 #endif /* HAVE_INET_NTOP */
3848 
3849 #ifdef HAVE_INET_PTON
3850 /* {{{ proto string inet_pton(string ip_address)
3851    Converts a human readable IP address to a packed binary string */
PHP_NAMED_FUNCTION(php_inet_pton)3852 PHP_NAMED_FUNCTION(php_inet_pton)
3853 {
3854 	int ret, af = AF_INET;
3855 	char *address;
3856 	int address_len;
3857 	char buffer[17];
3858 
3859 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &address, &address_len) == FAILURE) {
3860 		RETURN_FALSE;
3861 	}
3862 
3863 	memset(buffer, 0, sizeof(buffer));
3864 
3865 #ifdef HAVE_IPV6
3866 	if (strchr(address, ':')) {
3867 		af = AF_INET6;
3868 	} else
3869 #endif
3870 	if (!strchr(address, '.')) {
3871 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unrecognized address %s", address);
3872 		RETURN_FALSE;
3873 	}
3874 
3875 	ret = inet_pton(af, address, buffer);
3876 
3877 	if (ret <= 0) {
3878 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unrecognized address %s", address);
3879 		RETURN_FALSE;
3880 	}
3881 
3882 	RETURN_STRINGL(buffer, af == AF_INET ? 4 : 16, 1);
3883 }
3884 /* }}} */
3885 #endif /* HAVE_INET_PTON */
3886 
3887 /* {{{ proto int ip2long(string ip_address)
3888    Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address */
PHP_FUNCTION(ip2long)3889 PHP_FUNCTION(ip2long)
3890 {
3891 	char *addr;
3892 	int addr_len;
3893 #ifdef HAVE_INET_PTON
3894 	struct in_addr ip;
3895 #else
3896 	unsigned long int ip;
3897 #endif
3898 
3899 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &addr, &addr_len) == FAILURE) {
3900 		return;
3901 	}
3902 
3903 #ifdef HAVE_INET_PTON
3904 	if (addr_len == 0 || inet_pton(AF_INET, addr, &ip) != 1) {
3905 		RETURN_FALSE;
3906 	}
3907 	RETURN_LONG(ntohl(ip.s_addr));
3908 #else
3909 	if (addr_len == 0 || (ip = inet_addr(addr)) == INADDR_NONE) {
3910 		/* The only special case when we should return -1 ourselves,
3911 		 * because inet_addr() considers it wrong. We return 0xFFFFFFFF and
3912 		 * not -1 or ~0 because of 32/64bit issues. */
3913 		if (addr_len == sizeof("255.255.255.255") - 1 &&
3914 			!memcmp(addr, "255.255.255.255", sizeof("255.255.255.255") - 1)
3915 		) {
3916 			RETURN_LONG(0xFFFFFFFF);
3917 		}
3918 		RETURN_FALSE;
3919 	}
3920 	RETURN_LONG(ntohl(ip));
3921 #endif
3922 }
3923 /* }}} */
3924 
3925 /* {{{ proto string long2ip(int proper_address)
3926    Converts an (IPv4) Internet network address into a string in Internet standard dotted format */
PHP_FUNCTION(long2ip)3927 PHP_FUNCTION(long2ip)
3928 {
3929 	/* "It's a long but it's not, PHP ints are signed */
3930 	char *ip;
3931 	int ip_len;
3932 	unsigned long n;
3933 	struct in_addr myaddr;
3934 #ifdef HAVE_INET_PTON
3935 	char str[40];
3936 #endif
3937 
3938 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &ip, &ip_len) == FAILURE) {
3939 		return;
3940 	}
3941 
3942 	n = strtoul(ip, NULL, 0);
3943 
3944 	myaddr.s_addr = htonl(n);
3945 #ifdef HAVE_INET_PTON
3946 	if (inet_ntop(AF_INET, &myaddr, str, sizeof(str))) {
3947 		RETURN_STRING(str, 1);
3948 	} else {
3949 		RETURN_FALSE;
3950 	}
3951 #else
3952 	RETURN_STRING(inet_ntoa(myaddr), 1);
3953 #endif
3954 }
3955 /* }}} */
3956 
3957 /********************
3958  * System Functions *
3959  ********************/
3960 
3961 /* {{{ proto string getenv(string varname)
3962    Get the value of an environment variable */
PHP_FUNCTION(getenv)3963 PHP_FUNCTION(getenv)
3964 {
3965 	char *ptr, *str;
3966 	int str_len;
3967 
3968 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) {
3969 		RETURN_FALSE;
3970 	}
3971 
3972 	/* SAPI method returns an emalloc()'d string */
3973 	ptr = sapi_getenv(str, str_len TSRMLS_CC);
3974 	if (ptr) {
3975 		RETURN_STRING(ptr, 0);
3976 	}
3977 #ifdef PHP_WIN32
3978 	{
3979 		char dummybuf;
3980 		int size;
3981 
3982 		SetLastError(0);
3983 		/*If the given bugger is not large enough to hold the data, the return value is
3984 		the buffer size,  in characters, required to hold the string and its terminating
3985 		null character. We use this return value to alloc the final buffer. */
3986 		size = GetEnvironmentVariableA(str, &dummybuf, 0);
3987 		if (GetLastError() == ERROR_ENVVAR_NOT_FOUND) {
3988 				/* The environment variable doesn't exist. */
3989 				RETURN_FALSE;
3990 		}
3991 
3992 		if (size == 0) {
3993 				/* env exists, but it is empty */
3994 				RETURN_EMPTY_STRING();
3995 		}
3996 
3997 		ptr = emalloc(size);
3998 		size = GetEnvironmentVariableA(str, ptr, size);
3999 		if (size == 0) {
4000 				/* has been removed between the two calls */
4001 				efree(ptr);
4002 				RETURN_EMPTY_STRING();
4003 		} else {
4004 			RETURN_STRING(ptr, 0);
4005 		}
4006 	}
4007 #else
4008 	/* system method returns a const */
4009 	ptr = getenv(str);
4010 	if (ptr) {
4011 		RETURN_STRING(ptr, 1);
4012 	}
4013 #endif
4014 	RETURN_FALSE;
4015 }
4016 /* }}} */
4017 
4018 #ifdef HAVE_PUTENV
4019 /* {{{ proto bool putenv(string setting)
4020    Set the value of an environment variable */
PHP_FUNCTION(putenv)4021 PHP_FUNCTION(putenv)
4022 {
4023 	char *setting;
4024 	int setting_len;
4025 	char *p, **env;
4026 	putenv_entry pe;
4027 #ifdef PHP_WIN32
4028 	char *value = NULL;
4029 	int equals = 0;
4030 	int error_code;
4031 #endif
4032 
4033 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &setting, &setting_len) == FAILURE) {
4034 		return;
4035 	}
4036 
4037     if(setting_len == 0 || setting[0] == '=') {
4038     	php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter syntax");
4039     	RETURN_FALSE;
4040     }
4041 
4042 	pe.putenv_string = estrndup(setting, setting_len);
4043 	pe.key = estrndup(setting, setting_len);
4044 	if ((p = strchr(pe.key, '='))) {	/* nullify the '=' if there is one */
4045 		*p = '\0';
4046 #ifdef PHP_WIN32
4047 		equals = 1;
4048 #endif
4049 	}
4050 
4051 	pe.key_len = strlen(pe.key);
4052 #ifdef PHP_WIN32
4053 	if (equals) {
4054 		if (pe.key_len < setting_len - 1) {
4055 			value = p + 1;
4056 		} else {
4057 			/* empty string*/
4058 			value = p;
4059 		}
4060 	}
4061 #endif
4062 
4063 	zend_hash_del(&BG(putenv_ht), pe.key, pe.key_len+1);
4064 
4065 	/* find previous value */
4066 	pe.previous_value = NULL;
4067 	for (env = environ; env != NULL && *env != NULL; env++) {
4068 		if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') {	/* found it */
4069 #if defined(PHP_WIN32)
4070 			/* must copy previous value because MSVCRT's putenv can free the string without notice */
4071 			pe.previous_value = estrdup(*env);
4072 #else
4073 			pe.previous_value = *env;
4074 #endif
4075 			break;
4076 		}
4077 	}
4078 
4079 #if HAVE_UNSETENV
4080 	if (!p) { /* no '=' means we want to unset it */
4081 		unsetenv(pe.putenv_string);
4082 	}
4083 	if (!p || putenv(pe.putenv_string) == 0) { /* success */
4084 #else
4085 # ifndef PHP_WIN32
4086 	if (putenv(pe.putenv_string) == 0) { /* success */
4087 # else
4088 	error_code = SetEnvironmentVariable(pe.key, value);
4089 #  if _MSC_VER < 1500
4090 	/* Yet another VC6 bug, unset may return env not found */
4091 	if (error_code != 0 ||
4092 		(error_code == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)) {
4093 #  else
4094 	if (error_code != 0) { /* success */
4095 #  endif
4096 # endif
4097 #endif
4098 		zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len + 1, (void **) &pe, sizeof(putenv_entry), NULL);
4099 #ifdef HAVE_TZSET
4100 		if (!strncmp(pe.key, "TZ", pe.key_len)) {
4101 			tzset();
4102 		}
4103 #endif
4104 		RETURN_TRUE;
4105 	} else {
4106 		efree(pe.putenv_string);
4107 		efree(pe.key);
4108 		RETURN_FALSE;
4109 	}
4110 }
4111 /* }}} */
4112 #endif
4113 
4114 /* {{{ free_argv()
4115    Free the memory allocated to an argv array. */
4116 static void free_argv(char **argv, int argc)
4117 {
4118 	int i;
4119 
4120 	if (argv) {
4121 		for (i = 0; i < argc; i++) {
4122 			if (argv[i]) {
4123 				efree(argv[i]);
4124 			}
4125 		}
4126 		efree(argv);
4127 	}
4128 }
4129 /* }}} */
4130 
4131 /* {{{ free_longopts()
4132    Free the memory allocated to an longopt array. */
4133 static void free_longopts(opt_struct *longopts)
4134 {
4135 	opt_struct *p;
4136 
4137 	if (longopts) {
4138 		for (p = longopts; p && p->opt_char != '-'; p++) {
4139 			if (p->opt_name != NULL) {
4140 				efree((char *)(p->opt_name));
4141 			}
4142 		}
4143 	}
4144 }
4145 /* }}} */
4146 
4147 /* {{{ parse_opts()
4148    Convert the typical getopt input characters to the php_getopt struct array */
4149 static int parse_opts(char * opts, opt_struct ** result)
4150 {
4151 	opt_struct * paras = NULL;
4152 	unsigned int i, count = 0;
4153 
4154 	for (i = 0; i < strlen(opts); i++) {
4155 		if ((opts[i] >= 48 && opts[i] <= 57) ||
4156 			(opts[i] >= 65 && opts[i] <= 90) ||
4157 			(opts[i] >= 97 && opts[i] <= 122)
4158 		) {
4159 			count++;
4160 		}
4161 	}
4162 
4163 	paras = safe_emalloc(sizeof(opt_struct), count, 0);
4164 	memset(paras, 0, sizeof(opt_struct) * count);
4165 	*result = paras;
4166 	while ( (*opts >= 48 && *opts <= 57) || /* 0 - 9 */
4167 			(*opts >= 65 && *opts <= 90) || /* A - Z */
4168 			(*opts >= 97 && *opts <= 122)   /* a - z */
4169 	) {
4170 		paras->opt_char = *opts;
4171 		paras->need_param = (*(++opts) == ':') ? 1 : 0;
4172 		paras->opt_name = NULL;
4173 		if (paras->need_param == 1) {
4174 			opts++;
4175 			if (*opts == ':') {
4176 				paras->need_param++;
4177 				opts++;
4178 			}
4179 		}
4180 		paras++;
4181 	}
4182 	return count;
4183 }
4184 /* }}} */
4185 
4186 /* {{{ proto array getopt(string options [, array longopts])
4187    Get options from the command line argument list */
4188 PHP_FUNCTION(getopt)
4189 {
4190 	char *options = NULL, **argv = NULL;
4191 	char opt[2] = { '\0' };
4192 	char *optname;
4193 	int argc = 0, options_len = 0, len, o;
4194 	char *php_optarg = NULL;
4195 	int php_optind = 1;
4196 	zval *val, **args = NULL, *p_longopts = NULL;
4197 	int optname_len = 0;
4198 	opt_struct *opts, *orig_opts;
4199 
4200 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|a", &options, &options_len, &p_longopts) == FAILURE) {
4201 		RETURN_FALSE;
4202 	}
4203 
4204 	/* Get argv from the global symbol table. We calculate argc ourselves
4205 	 * in order to be on the safe side, even though it is also available
4206 	 * from the symbol table. */
4207 	if (PG(http_globals)[TRACK_VARS_SERVER] &&
4208 		(zend_hash_find(HASH_OF(PG(http_globals)[TRACK_VARS_SERVER]), "argv", sizeof("argv"), (void **) &args) != FAILURE ||
4209 		zend_hash_find(&EG(symbol_table), "argv", sizeof("argv"), (void **) &args) != FAILURE) && Z_TYPE_PP(args) == IS_ARRAY
4210 	) {
4211 		int pos = 0;
4212 		zval **entry;
4213 
4214 		argc = zend_hash_num_elements(Z_ARRVAL_PP(args));
4215 
4216 		/* Attempt to allocate enough memory to hold all of the arguments
4217 		 * and a trailing NULL */
4218 		argv = (char **) safe_emalloc(sizeof(char *), (argc + 1), 0);
4219 
4220 		/* Reset the array indexes. */
4221 		zend_hash_internal_pointer_reset(Z_ARRVAL_PP(args));
4222 
4223 		/* Iterate over the hash to construct the argv array. */
4224 		while (zend_hash_get_current_data(Z_ARRVAL_PP(args), (void **)&entry) == SUCCESS) {
4225 			zval arg, *arg_ptr = *entry;
4226 
4227 			if (Z_TYPE_PP(entry) != IS_STRING) {
4228 				arg = **entry;
4229 				zval_copy_ctor(&arg);
4230 				convert_to_string(&arg);
4231 				arg_ptr = &arg;
4232 			}
4233 
4234 			argv[pos++] = estrdup(Z_STRVAL_P(arg_ptr));
4235 
4236 			if (arg_ptr != *entry) {
4237 				zval_dtor(&arg);
4238 			}
4239 
4240 			zend_hash_move_forward(Z_ARRVAL_PP(args));
4241 		}
4242 
4243 		/* The C Standard requires argv[argc] to be NULL - this might
4244 		 * keep some getopt implementations happy. */
4245 		argv[argc] = NULL;
4246 	} else {
4247 		/* Return false if we can't find argv. */
4248 		RETURN_FALSE;
4249 	}
4250 
4251 	len = parse_opts(options, &opts);
4252 
4253 	if (p_longopts) {
4254 		int count;
4255 		zval **entry;
4256 
4257 		count = zend_hash_num_elements(Z_ARRVAL_P(p_longopts));
4258 
4259 		/* the first <len> slots are filled by the one short ops
4260 		 * we now extend our array and jump to the new added structs */
4261 		opts = (opt_struct *) erealloc(opts, sizeof(opt_struct) * (len + count + 1));
4262 		orig_opts = opts;
4263 		opts += len;
4264 
4265 		memset(opts, 0, count * sizeof(opt_struct));
4266 
4267 		/* Reset the array indexes. */
4268 		zend_hash_internal_pointer_reset(Z_ARRVAL_P(p_longopts));
4269 
4270 		/* Iterate over the hash to construct the argv array. */
4271 		while (zend_hash_get_current_data(Z_ARRVAL_P(p_longopts), (void **)&entry) == SUCCESS) {
4272 			zval arg, *arg_ptr = *entry;
4273 
4274 			if (Z_TYPE_PP(entry) != IS_STRING) {
4275 				arg = **entry;
4276 				zval_copy_ctor(&arg);
4277 				convert_to_string(&arg);
4278 				arg_ptr = &arg;
4279 			}
4280 
4281 			opts->need_param = 0;
4282 			opts->opt_name = estrdup(Z_STRVAL_P(arg_ptr));
4283 			len = strlen(opts->opt_name);
4284 			if ((len > 0) && (opts->opt_name[len - 1] == ':')) {
4285 				opts->need_param++;
4286 				opts->opt_name[len - 1] = '\0';
4287 				if ((len > 1) && (opts->opt_name[len - 2] == ':')) {
4288 					opts->need_param++;
4289 					opts->opt_name[len - 2] = '\0';
4290 				}
4291 			}
4292 			opts->opt_char = 0;
4293 			opts++;
4294 
4295 			if (arg_ptr != *entry) {
4296 				zval_dtor(&arg);
4297 			}
4298 
4299 			zend_hash_move_forward(Z_ARRVAL_P(p_longopts));
4300 		}
4301 	} else {
4302 		opts = (opt_struct*) erealloc(opts, sizeof(opt_struct) * (len + 1));
4303 		orig_opts = opts;
4304 		opts += len;
4305 	}
4306 
4307 	/* php_getopt want to identify the last param */
4308 	opts->opt_char   = '-';
4309 	opts->need_param = 0;
4310 	opts->opt_name   = NULL;
4311 
4312 	/* Initialize the return value as an array. */
4313 	array_init(return_value);
4314 
4315 	/* after our pointer arithmetic jump back to the first element */
4316 	opts = orig_opts;
4317 
4318 	while ((o = php_getopt(argc, argv, opts, &php_optarg, &php_optind, 0, 1)) != -1) {
4319 		/* Skip unknown arguments. */
4320 		if (o == '?') {
4321 			continue;
4322 		}
4323 
4324 		/* Prepare the option character and the argument string. */
4325 		if (o == 0) {
4326 			optname = opts[php_optidx].opt_name;
4327 		} else {
4328 			if (o == 1) {
4329 				o = '-';
4330 			}
4331 			opt[0] = o;
4332 			optname = opt;
4333 		}
4334 
4335 		MAKE_STD_ZVAL(val);
4336 		if (php_optarg != NULL) {
4337 			/* keep the arg as binary, since the encoding is not known */
4338 			ZVAL_STRING(val, php_optarg, 1);
4339 		} else {
4340 			ZVAL_FALSE(val);
4341 		}
4342 
4343 		/* Add this option / argument pair to the result hash. */
4344 		optname_len = strlen(optname);
4345 		if (!(optname_len > 1 && optname[0] == '0') && is_numeric_string(optname, optname_len, NULL, NULL, 0) == IS_LONG) {
4346 			/* numeric string */
4347 			int optname_int = atoi(optname);
4348 			if (zend_hash_index_find(HASH_OF(return_value), optname_int, (void **)&args) != FAILURE) {
4349 				if (Z_TYPE_PP(args) != IS_ARRAY) {
4350 					convert_to_array_ex(args);
4351 				}
4352 				zend_hash_next_index_insert(HASH_OF(*args), (void *)&val, sizeof(zval *), NULL);
4353 			} else {
4354 				zend_hash_index_update(HASH_OF(return_value), optname_int, &val, sizeof(zval *), NULL);
4355 			}
4356 		} else {
4357 			/* other strings */
4358 			if (zend_hash_find(HASH_OF(return_value), optname, strlen(optname)+1, (void **)&args) != FAILURE) {
4359 				if (Z_TYPE_PP(args) != IS_ARRAY) {
4360 					convert_to_array_ex(args);
4361 				}
4362 				zend_hash_next_index_insert(HASH_OF(*args), (void *)&val, sizeof(zval *), NULL);
4363 			} else {
4364 				zend_hash_add(HASH_OF(return_value), optname, strlen(optname)+1, (void *)&val, sizeof(zval *), NULL);
4365 			}
4366 		}
4367 
4368 		php_optarg = NULL;
4369 	}
4370 
4371 	free_longopts(orig_opts);
4372 	efree(orig_opts);
4373 	free_argv(argv, argc);
4374 }
4375 /* }}} */
4376 
4377 /* {{{ proto void flush(void)
4378    Flush the output buffer */
4379 PHP_FUNCTION(flush)
4380 {
4381 	sapi_flush(TSRMLS_C);
4382 }
4383 /* }}} */
4384 
4385 /* {{{ proto void sleep(int seconds)
4386    Delay for a given number of seconds */
4387 PHP_FUNCTION(sleep)
4388 {
4389 	long num;
4390 
4391 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &num) == FAILURE) {
4392 		RETURN_FALSE;
4393 	}
4394 	if (num < 0) {
4395 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of seconds must be greater than or equal to 0");
4396 		RETURN_FALSE;
4397 	}
4398 #ifdef PHP_SLEEP_NON_VOID
4399 	RETURN_LONG(php_sleep(num));
4400 #else
4401 	php_sleep(num);
4402 #endif
4403 
4404 }
4405 /* }}} */
4406 
4407 /* {{{ proto void usleep(int micro_seconds)
4408    Delay for a given number of micro seconds */
4409 PHP_FUNCTION(usleep)
4410 {
4411 #if HAVE_USLEEP
4412 	long num;
4413 
4414 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &num) == FAILURE) {
4415 		return;
4416 	}
4417 	if (num < 0) {
4418 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of microseconds must be greater than or equal to 0");
4419 		RETURN_FALSE;
4420 	}
4421 	usleep(num);
4422 #endif
4423 }
4424 /* }}} */
4425 
4426 #if HAVE_NANOSLEEP
4427 /* {{{ proto mixed time_nanosleep(long seconds, long nanoseconds)
4428    Delay for a number of seconds and nano seconds */
4429 PHP_FUNCTION(time_nanosleep)
4430 {
4431 	long tv_sec, tv_nsec;
4432 	struct timespec php_req, php_rem;
4433 
4434 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &tv_sec, &tv_nsec) == FAILURE) {
4435 		return;
4436 	}
4437 
4438 	if (tv_sec < 0) {
4439 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "The seconds value must be greater than 0");
4440 		RETURN_FALSE;
4441 	}
4442 	if (tv_nsec < 0) {
4443 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "The nanoseconds value must be greater than 0");
4444 		RETURN_FALSE;
4445 	}
4446 
4447 	php_req.tv_sec = (time_t) tv_sec;
4448 	php_req.tv_nsec = tv_nsec;
4449 	if (!nanosleep(&php_req, &php_rem)) {
4450 		RETURN_TRUE;
4451 	} else if (errno == EINTR) {
4452 		array_init(return_value);
4453 		add_assoc_long_ex(return_value, "seconds", sizeof("seconds"), php_rem.tv_sec);
4454 		add_assoc_long_ex(return_value, "nanoseconds", sizeof("nanoseconds"), php_rem.tv_nsec);
4455 		return;
4456 	} else if (errno == EINVAL) {
4457 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "nanoseconds was not in the range 0 to 999 999 999 or seconds was negative");
4458 	}
4459 
4460 	RETURN_FALSE;
4461 }
4462 /* }}} */
4463 
4464 /* {{{ proto mixed time_sleep_until(float timestamp)
4465    Make the script sleep until the specified time */
4466 PHP_FUNCTION(time_sleep_until)
4467 {
4468 	double d_ts, c_ts;
4469 	struct timeval tm;
4470 	struct timespec php_req, php_rem;
4471 
4472 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "d", &d_ts) == FAILURE) {
4473 		return;
4474 	}
4475 
4476 	if (gettimeofday((struct timeval *) &tm, NULL) != 0) {
4477 		RETURN_FALSE;
4478 	}
4479 
4480 	c_ts = (double)(d_ts - tm.tv_sec - tm.tv_usec / 1000000.00);
4481 	if (c_ts < 0) {
4482 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sleep until to time is less than current time");
4483 		RETURN_FALSE;
4484 	}
4485 
4486 	php_req.tv_sec = (time_t) c_ts;
4487 	if (php_req.tv_sec > c_ts) { /* rounding up occurred */
4488 		php_req.tv_sec--;
4489 	}
4490 	/* 1sec = 1000000000 nanoseconds */
4491 	php_req.tv_nsec = (long) ((c_ts - php_req.tv_sec) * 1000000000.00);
4492 
4493 	while (nanosleep(&php_req, &php_rem)) {
4494 		if (errno == EINTR) {
4495 			php_req.tv_sec = php_rem.tv_sec;
4496 			php_req.tv_nsec = php_rem.tv_nsec;
4497 		} else {
4498 			RETURN_FALSE;
4499 		}
4500 	}
4501 
4502 	RETURN_TRUE;
4503 }
4504 /* }}} */
4505 #endif
4506 
4507 /* {{{ proto string get_current_user(void)
4508    Get the name of the owner of the current PHP script */
4509 PHP_FUNCTION(get_current_user)
4510 {
4511 	if (zend_parse_parameters_none() == FAILURE) {
4512 		return;
4513 	}
4514 
4515 	RETURN_STRING(php_get_current_user(TSRMLS_C), 1);
4516 }
4517 /* }}} */
4518 
4519 /* {{{ add_config_entry_cb
4520  */
4521 static int add_config_entry_cb(zval *entry TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key)
4522 {
4523 	zval *retval = (zval *)va_arg(args, zval*);
4524 	zval *tmp;
4525 
4526 	if (Z_TYPE_P(entry) == IS_STRING) {
4527 		if (hash_key->nKeyLength > 0) {
4528 			add_assoc_stringl_ex(retval, hash_key->arKey, hash_key->nKeyLength, Z_STRVAL_P(entry), Z_STRLEN_P(entry), 1);
4529 		} else {
4530 			add_index_stringl(retval, hash_key->h, Z_STRVAL_P(entry), Z_STRLEN_P(entry), 1);
4531 		}
4532 	} else if (Z_TYPE_P(entry) == IS_ARRAY) {
4533 		MAKE_STD_ZVAL(tmp);
4534 		array_init(tmp);
4535 		zend_hash_apply_with_arguments(Z_ARRVAL_P(entry) TSRMLS_CC, (apply_func_args_t) add_config_entry_cb, 1, tmp);
4536 		add_assoc_zval_ex(retval, hash_key->arKey, hash_key->nKeyLength, tmp);
4537 	}
4538 	return 0;
4539 }
4540 /* }}} */
4541 
4542 /* {{{ proto mixed get_cfg_var(string option_name)
4543    Get the value of a PHP configuration option */
4544 PHP_FUNCTION(get_cfg_var)
4545 {
4546 	char *varname;
4547 	int varname_len;
4548 	zval *retval;
4549 
4550 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &varname, &varname_len) == FAILURE) {
4551 		return;
4552 	}
4553 
4554 	retval = cfg_get_entry(varname, varname_len + 1);
4555 
4556 	if (retval) {
4557 		if (Z_TYPE_P(retval) == IS_ARRAY) {
4558 			array_init(return_value);
4559 			zend_hash_apply_with_arguments(Z_ARRVAL_P(retval) TSRMLS_CC, (apply_func_args_t) add_config_entry_cb, 1, return_value);
4560 			return;
4561 		} else {
4562 			RETURN_STRING(Z_STRVAL_P(retval), 1);
4563 		}
4564 	} else {
4565 		RETURN_FALSE;
4566 	}
4567 }
4568 /* }}} */
4569 
4570 /* {{{ proto bool set_magic_quotes_runtime(int new_setting)
4571    magic_quotes_runtime is not supported anymore */
4572 PHP_FUNCTION(set_magic_quotes_runtime)
4573 {
4574 	zend_bool new_setting;
4575 
4576 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "b", &new_setting) == FAILURE) {
4577 		return;
4578 	}
4579 
4580 	if (new_setting) {
4581 		php_error_docref(NULL TSRMLS_CC, E_CORE_ERROR, "magic_quotes_runtime is not supported anymore");
4582 	}
4583 	RETURN_FALSE;
4584 }
4585 /* }}} */
4586 
4587 /* {{{ proto int get_magic_quotes_runtime(void)
4588    Get the current active configuration setting of magic_quotes_runtime */
4589 PHP_FUNCTION(get_magic_quotes_runtime)
4590 {
4591 	if (zend_parse_parameters_none() == FAILURE) {
4592 		return;
4593 	}
4594 	RETURN_FALSE;
4595 }
4596 /* }}} */
4597 
4598 /* {{{ proto int get_magic_quotes_gpc(void)
4599    Get the current active configuration setting of magic_quotes_gpc */
4600 PHP_FUNCTION(get_magic_quotes_gpc)
4601 {
4602 	if (zend_parse_parameters_none() == FAILURE) {
4603 		return;
4604 	}
4605 	RETURN_FALSE;
4606 }
4607 /* }}} */
4608 
4609 /*
4610 	1st arg = error message
4611 	2nd arg = error option
4612 	3rd arg = optional parameters (email address or tcp address)
4613 	4th arg = used for additional headers if email
4614 
4615 error options:
4616 	0 = send to php_error_log (uses syslog or file depending on ini setting)
4617 	1 = send via email to 3rd parameter 4th option = additional headers
4618 	2 = send via tcp/ip to 3rd parameter (name or ip:port)
4619 	3 = save to file in 3rd parameter
4620 	4 = send to SAPI logger directly
4621 */
4622 
4623 /* {{{ proto bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])
4624    Send an error message somewhere */
4625 PHP_FUNCTION(error_log)
4626 {
4627 	char *message, *opt = NULL, *headers = NULL;
4628 	int message_len, opt_len = 0, headers_len = 0;
4629 	int opt_err = 0, argc = ZEND_NUM_ARGS();
4630 	long erropt = 0;
4631 
4632 	if (zend_parse_parameters(argc TSRMLS_CC, "s|lps", &message, &message_len, &erropt, &opt, &opt_len, &headers, &headers_len) == FAILURE) {
4633 		return;
4634 	}
4635 
4636 	if (argc > 1) {
4637 		opt_err = erropt;
4638 	}
4639 
4640 	if (_php_error_log_ex(opt_err, message, message_len, opt, headers TSRMLS_CC) == FAILURE) {
4641 		RETURN_FALSE;
4642 	}
4643 
4644 	RETURN_TRUE;
4645 }
4646 /* }}} */
4647 
4648 /* For BC (not binary-safe!) */
4649 PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers TSRMLS_DC) /* {{{ */
4650 {
4651 	return _php_error_log_ex(opt_err, message, (opt_err == 3) ? strlen(message) : 0, opt, headers TSRMLS_CC);
4652 }
4653 /* }}} */
4654 
4655 PHPAPI int _php_error_log_ex(int opt_err, char *message, int message_len, char *opt, char *headers TSRMLS_DC) /* {{{ */
4656 {
4657 	php_stream *stream = NULL;
4658 
4659 	switch (opt_err)
4660 	{
4661 		case 1:		/*send an email */
4662 			if (!php_mail(opt, "PHP error_log message", message, headers, NULL TSRMLS_CC)) {
4663 				return FAILURE;
4664 			}
4665 			break;
4666 
4667 		case 2:		/*send to an address */
4668 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "TCP/IP option not available!");
4669 			return FAILURE;
4670 			break;
4671 
4672 		case 3:		/*save to a file */
4673 			stream = php_stream_open_wrapper(opt, "a", IGNORE_URL_WIN | REPORT_ERRORS, NULL);
4674 			if (!stream) {
4675 				return FAILURE;
4676 			}
4677 			php_stream_write(stream, message, message_len);
4678 			php_stream_close(stream);
4679 			break;
4680 
4681 		case 4: /* send to SAPI */
4682 			if (sapi_module.log_message) {
4683 				sapi_module.log_message(message TSRMLS_CC);
4684 			} else {
4685 				return FAILURE;
4686 			}
4687 			break;
4688 
4689 		default:
4690 			php_log_err(message TSRMLS_CC);
4691 			break;
4692 	}
4693 	return SUCCESS;
4694 }
4695 /* }}} */
4696 
4697 /* {{{ proto array error_get_last()
4698    Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet. */
4699 PHP_FUNCTION(error_get_last)
4700 {
4701 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
4702 		return;
4703 	}
4704 
4705 	if (PG(last_error_message)) {
4706 		array_init(return_value);
4707 		add_assoc_long_ex(return_value, "type", sizeof("type"), PG(last_error_type));
4708 		add_assoc_string_ex(return_value, "message", sizeof("message"), PG(last_error_message), 1);
4709 		add_assoc_string_ex(return_value, "file", sizeof("file"), PG(last_error_file)?PG(last_error_file):"-", 1 );
4710 		add_assoc_long_ex(return_value, "line", sizeof("line"), PG(last_error_lineno));
4711 	}
4712 }
4713 /* }}} */
4714 
4715 /* {{{ proto mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])
4716    Call a user function which is the first parameter */
4717 PHP_FUNCTION(call_user_func)
4718 {
4719 	zval *retval_ptr = NULL;
4720 	zend_fcall_info fci;
4721 	zend_fcall_info_cache fci_cache;
4722 
4723 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "f*", &fci, &fci_cache, &fci.params, &fci.param_count) == FAILURE) {
4724 		return;
4725 	}
4726 
4727 	fci.retval_ptr_ptr = &retval_ptr;
4728 
4729 	if (zend_call_function(&fci, &fci_cache TSRMLS_CC) == SUCCESS && fci.retval_ptr_ptr && *fci.retval_ptr_ptr) {
4730 		COPY_PZVAL_TO_ZVAL(*return_value, *fci.retval_ptr_ptr);
4731 	}
4732 
4733 	if (fci.params) {
4734 		efree(fci.params);
4735 	}
4736 }
4737 /* }}} */
4738 
4739 /* {{{ proto mixed call_user_func_array(string function_name, array parameters)
4740    Call a user function which is the first parameter with the arguments contained in array */
4741 PHP_FUNCTION(call_user_func_array)
4742 {
4743 	zval *params, *retval_ptr = NULL;
4744 	zend_fcall_info fci;
4745 	zend_fcall_info_cache fci_cache;
4746 
4747 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "fa/", &fci, &fci_cache, &params) == FAILURE) {
4748 		return;
4749 	}
4750 
4751 	zend_fcall_info_args(&fci, params TSRMLS_CC);
4752 	fci.retval_ptr_ptr = &retval_ptr;
4753 
4754 	if (zend_call_function(&fci, &fci_cache TSRMLS_CC) == SUCCESS && fci.retval_ptr_ptr && *fci.retval_ptr_ptr) {
4755 		COPY_PZVAL_TO_ZVAL(*return_value, *fci.retval_ptr_ptr);
4756 	}
4757 
4758 	zend_fcall_info_args_clear(&fci, 1);
4759 }
4760 /* }}} */
4761 
4762 /* {{{ proto mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])
4763    Call a user method on a specific object or class */
4764 PHP_FUNCTION(call_user_method)
4765 {
4766 	zval ***params = NULL;
4767 	int n_params = 0;
4768 	zval *retval_ptr;
4769 	zval *callback, *object;
4770 
4771 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/z*", &callback, &object, &params, &n_params) == FAILURE) {
4772 		return;
4773 	}
4774 
4775 	if (Z_TYPE_P(object) != IS_OBJECT &&
4776 		Z_TYPE_P(object) != IS_STRING
4777 	) {
4778 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Second argument is not an object or class name");
4779 		if (params) {
4780 			efree(params);
4781 		}
4782 		RETURN_FALSE;
4783 	}
4784 
4785 	convert_to_string(callback);
4786 
4787 	if (call_user_function_ex(EG(function_table), &object, callback, &retval_ptr, n_params, params, 0, NULL TSRMLS_CC) == SUCCESS) {
4788 		if (retval_ptr) {
4789 			COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr);
4790 		}
4791 	} else {
4792 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s()", Z_STRVAL_P(callback));
4793 	}
4794 	if (n_params) {
4795 		efree(params);
4796 	}
4797 }
4798 /* }}} */
4799 
4800 /* {{{ proto mixed call_user_method_array(string method_name, mixed object, array params)
4801    Call a user method on a specific object or class using a parameter array */
4802 PHP_FUNCTION(call_user_method_array)
4803 {
4804 	zval *params, ***method_args = NULL, *retval_ptr;
4805 	zval *callback, *object;
4806 	HashTable *params_ar;
4807 	int num_elems, element = 0;
4808 
4809 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/zA/", &callback, &object, &params) == FAILURE) {
4810 		return;
4811 	}
4812 
4813 	if (Z_TYPE_P(object) != IS_OBJECT &&
4814 		Z_TYPE_P(object) != IS_STRING
4815 	) {
4816 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Second argument is not an object or class name");
4817 		RETURN_FALSE;
4818 	}
4819 
4820 	convert_to_string(callback);
4821 
4822 	params_ar = HASH_OF(params);
4823 	num_elems = zend_hash_num_elements(params_ar);
4824 	method_args = (zval ***) safe_emalloc(sizeof(zval **), num_elems, 0);
4825 
4826 	for (zend_hash_internal_pointer_reset(params_ar);
4827 		zend_hash_get_current_data(params_ar, (void **) &(method_args[element])) == SUCCESS;
4828 		zend_hash_move_forward(params_ar)
4829 	) {
4830 		element++;
4831 	}
4832 
4833 	if (call_user_function_ex(EG(function_table), &object, callback, &retval_ptr, num_elems, method_args, 0, NULL TSRMLS_CC) == SUCCESS) {
4834 		if (retval_ptr) {
4835 			COPY_PZVAL_TO_ZVAL(*return_value, retval_ptr);
4836 		}
4837 	} else {
4838 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s()", Z_STRVAL_P(callback));
4839 	}
4840 
4841 	efree(method_args);
4842 }
4843 /* }}} */
4844 
4845 /* {{{ proto mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...]) U
4846    Call a user function which is the first parameter */
4847 PHP_FUNCTION(forward_static_call)
4848 {
4849 	zval *retval_ptr = NULL;
4850 	zend_fcall_info fci;
4851 	zend_fcall_info_cache fci_cache;
4852 
4853 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "f*", &fci, &fci_cache, &fci.params, &fci.param_count) == FAILURE) {
4854 		return;
4855 	}
4856 
4857 	if (!EG(active_op_array)->scope) {
4858 		zend_error(E_ERROR, "Cannot call forward_static_call() when no class scope is active");
4859 	}
4860 
4861 	fci.retval_ptr_ptr = &retval_ptr;
4862 
4863 	if (EG(called_scope) &&
4864 		instanceof_function(EG(called_scope), fci_cache.calling_scope TSRMLS_CC)) {
4865 			fci_cache.called_scope = EG(called_scope);
4866 	}
4867 
4868 	if (zend_call_function(&fci, &fci_cache TSRMLS_CC) == SUCCESS && fci.retval_ptr_ptr && *fci.retval_ptr_ptr) {
4869 		COPY_PZVAL_TO_ZVAL(*return_value, *fci.retval_ptr_ptr);
4870 	}
4871 
4872 	if (fci.params) {
4873 		efree(fci.params);
4874 	}
4875 }
4876 /* }}} */
4877 
4878 /* {{{ proto mixed call_user_func_array(string function_name, array parameters) U
4879    Call a user function which is the first parameter with the arguments contained in array */
4880 PHP_FUNCTION(forward_static_call_array)
4881 {
4882 	zval *params, *retval_ptr = NULL;
4883 	zend_fcall_info fci;
4884 	zend_fcall_info_cache fci_cache;
4885 
4886 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "fa/", &fci, &fci_cache, &params) == FAILURE) {
4887 		return;
4888 	}
4889 
4890 	zend_fcall_info_args(&fci, params TSRMLS_CC);
4891 	fci.retval_ptr_ptr = &retval_ptr;
4892 
4893 	if (EG(called_scope) &&
4894 		instanceof_function(EG(called_scope), fci_cache.calling_scope TSRMLS_CC)) {
4895 			fci_cache.called_scope = EG(called_scope);
4896 	}
4897 
4898 	if (zend_call_function(&fci, &fci_cache TSRMLS_CC) == SUCCESS && fci.retval_ptr_ptr && *fci.retval_ptr_ptr) {
4899 		COPY_PZVAL_TO_ZVAL(*return_value, *fci.retval_ptr_ptr);
4900 	}
4901 
4902 	zend_fcall_info_args_clear(&fci, 1);
4903 }
4904 /* }}} */
4905 
4906 void user_shutdown_function_dtor(php_shutdown_function_entry *shutdown_function_entry) /* {{{ */
4907 {
4908 	int i;
4909 
4910 	for (i = 0; i < shutdown_function_entry->arg_count; i++) {
4911 		zval_ptr_dtor(&shutdown_function_entry->arguments[i]);
4912 	}
4913 	efree(shutdown_function_entry->arguments);
4914 }
4915 /* }}} */
4916 
4917 void user_tick_function_dtor(user_tick_function_entry *tick_function_entry) /* {{{ */
4918 {
4919 	int i;
4920 
4921 	for (i = 0; i < tick_function_entry->arg_count; i++) {
4922 		zval_ptr_dtor(&tick_function_entry->arguments[i]);
4923 	}
4924 	efree(tick_function_entry->arguments);
4925 }
4926 /* }}} */
4927 
4928 static int user_shutdown_function_call(php_shutdown_function_entry *shutdown_function_entry TSRMLS_DC) /* {{{ */
4929 {
4930 	zval retval;
4931 	char *function_name;
4932 
4933 	if (!zend_is_callable(shutdown_function_entry->arguments[0], 0, &function_name TSRMLS_CC)) {
4934 		php_error(E_WARNING, "(Registered shutdown functions) Unable to call %s() - function does not exist", function_name);
4935 		if (function_name) {
4936 			efree(function_name);
4937 		}
4938 		return 0;
4939 	}
4940 	if (function_name) {
4941 		efree(function_name);
4942 	}
4943 
4944 	if (call_user_function(EG(function_table), NULL,
4945 				shutdown_function_entry->arguments[0],
4946 				&retval,
4947 				shutdown_function_entry->arg_count - 1,
4948 				shutdown_function_entry->arguments + 1
4949 				TSRMLS_CC ) == SUCCESS)
4950 	{
4951 		zval_dtor(&retval);
4952 	}
4953 	return 0;
4954 }
4955 /* }}} */
4956 
4957 static void user_tick_function_call(user_tick_function_entry *tick_fe TSRMLS_DC) /* {{{ */
4958 {
4959 	zval retval;
4960 	zval *function = tick_fe->arguments[0];
4961 
4962 	/* Prevent reentrant calls to the same user ticks function */
4963 	if (! tick_fe->calling) {
4964 		tick_fe->calling = 1;
4965 
4966 		if (call_user_function(	EG(function_table), NULL,
4967 								function,
4968 								&retval,
4969 								tick_fe->arg_count - 1,
4970 								tick_fe->arguments + 1
4971 								TSRMLS_CC) == SUCCESS) {
4972 			zval_dtor(&retval);
4973 
4974 		} else {
4975 			zval **obj, **method;
4976 
4977 			if (Z_TYPE_P(function) == IS_STRING) {
4978 				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s() - function does not exist", Z_STRVAL_P(function));
4979 			} else if (	Z_TYPE_P(function) == IS_ARRAY
4980 						&& zend_hash_index_find(Z_ARRVAL_P(function), 0, (void **) &obj) == SUCCESS
4981 						&& zend_hash_index_find(Z_ARRVAL_P(function), 1, (void **) &method) == SUCCESS
4982 						&& Z_TYPE_PP(obj) == IS_OBJECT
4983 						&& Z_TYPE_PP(method) == IS_STRING) {
4984 				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s::%s() - function does not exist", Z_OBJCE_PP(obj)->name, Z_STRVAL_PP(method));
4985 			} else {
4986 				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call tick function");
4987 			}
4988 		}
4989 
4990 		tick_fe->calling = 0;
4991 	}
4992 }
4993 /* }}} */
4994 
4995 static void run_user_tick_functions(int tick_count) /* {{{ */
4996 {
4997 	TSRMLS_FETCH();
4998 
4999 	zend_llist_apply(BG(user_tick_functions), (llist_apply_func_t) user_tick_function_call TSRMLS_CC);
5000 }
5001 /* }}} */
5002 
5003 static int user_tick_function_compare(user_tick_function_entry * tick_fe1, user_tick_function_entry * tick_fe2) /* {{{ */
5004 {
5005 	zval *func1 = tick_fe1->arguments[0];
5006 	zval *func2 = tick_fe2->arguments[0];
5007 	int ret;
5008 	TSRMLS_FETCH();
5009 
5010 	if (Z_TYPE_P(func1) == IS_STRING && Z_TYPE_P(func2) == IS_STRING) {
5011 		ret = (zend_binary_zval_strcmp(func1, func2) == 0);
5012 	} else if (Z_TYPE_P(func1) == IS_ARRAY && Z_TYPE_P(func2) == IS_ARRAY) {
5013 		zval result;
5014 		zend_compare_arrays(&result, func1, func2 TSRMLS_CC);
5015 		ret = (Z_LVAL(result) == 0);
5016 	} else if (Z_TYPE_P(func1) == IS_OBJECT && Z_TYPE_P(func2) == IS_OBJECT) {
5017 		zval result;
5018 		zend_compare_objects(&result, func1, func2 TSRMLS_CC);
5019 		ret = (Z_LVAL(result) == 0);
5020 	} else {
5021 		ret = 0;
5022 	}
5023 
5024 	if (ret && tick_fe1->calling) {
5025 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to delete tick function executed at the moment");
5026 		return 0;
5027 	}
5028 	return ret;
5029 }
5030 /* }}} */
5031 
5032 void php_call_shutdown_functions(TSRMLS_D) /* {{{ */
5033 {
5034 	if (BG(user_shutdown_function_names)) {
5035 		zend_try {
5036 			zend_hash_apply(BG(user_shutdown_function_names), (apply_func_t) user_shutdown_function_call TSRMLS_CC);
5037 		}
5038 		zend_end_try();
5039 		php_free_shutdown_functions(TSRMLS_C);
5040 	}
5041 }
5042 /* }}} */
5043 
5044 void php_free_shutdown_functions(TSRMLS_D) /* {{{ */
5045 {
5046 	if (BG(user_shutdown_function_names))
5047 		zend_try {
5048 			zend_hash_destroy(BG(user_shutdown_function_names));
5049 			FREE_HASHTABLE(BG(user_shutdown_function_names));
5050 			BG(user_shutdown_function_names) = NULL;
5051 		} zend_catch {
5052 			/* maybe shutdown method call exit, we just ignore it */
5053 			FREE_HASHTABLE(BG(user_shutdown_function_names));
5054 			BG(user_shutdown_function_names) = NULL;
5055 		} zend_end_try();
5056 }
5057 /* }}} */
5058 
5059 /* {{{ proto void register_shutdown_function(string function_name) U
5060    Register a user-level function to be called on request termination */
5061 PHP_FUNCTION(register_shutdown_function)
5062 {
5063 	php_shutdown_function_entry shutdown_function_entry;
5064 	char *function_name = NULL;
5065 	int i;
5066 
5067 	shutdown_function_entry.arg_count = ZEND_NUM_ARGS();
5068 
5069 	if (shutdown_function_entry.arg_count < 1) {
5070 		WRONG_PARAM_COUNT;
5071 	}
5072 
5073 	shutdown_function_entry.arguments = (zval **) safe_emalloc(sizeof(zval *), shutdown_function_entry.arg_count, 0);
5074 
5075 	if (zend_get_parameters_array(ht, shutdown_function_entry.arg_count, shutdown_function_entry.arguments) == FAILURE) {
5076 		efree(shutdown_function_entry.arguments);
5077 		RETURN_FALSE;
5078 	}
5079 
5080 	/* Prevent entering of anything but valid callback (syntax check only!) */
5081 	if (!zend_is_callable(shutdown_function_entry.arguments[0], 0, &function_name TSRMLS_CC)) {
5082 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid shutdown callback '%s' passed", function_name);
5083 		efree(shutdown_function_entry.arguments);
5084 		RETVAL_FALSE;
5085 	} else {
5086 		if (!BG(user_shutdown_function_names)) {
5087 			ALLOC_HASHTABLE(BG(user_shutdown_function_names));
5088 			zend_hash_init(BG(user_shutdown_function_names), 0, NULL, (void (*)(void *)) user_shutdown_function_dtor, 0);
5089 		}
5090 
5091 		for (i = 0; i < shutdown_function_entry.arg_count; i++) {
5092 			Z_ADDREF_P(shutdown_function_entry.arguments[i]);
5093 		}
5094 		zend_hash_next_index_insert(BG(user_shutdown_function_names), &shutdown_function_entry, sizeof(php_shutdown_function_entry), NULL);
5095 	}
5096 	if (function_name) {
5097 		efree(function_name);
5098 	}
5099 }
5100 /* }}} */
5101 
5102 PHPAPI zend_bool register_user_shutdown_function(char *function_name, size_t function_len, php_shutdown_function_entry *shutdown_function_entry TSRMLS_DC) /* {{{ */
5103 {
5104 	if (!BG(user_shutdown_function_names)) {
5105 		ALLOC_HASHTABLE(BG(user_shutdown_function_names));
5106 		zend_hash_init(BG(user_shutdown_function_names), 0, NULL, (void (*)(void *)) user_shutdown_function_dtor, 0);
5107 	}
5108 
5109 	return zend_hash_update(BG(user_shutdown_function_names), function_name, function_len, shutdown_function_entry, sizeof(php_shutdown_function_entry), NULL) != FAILURE;
5110 }
5111 /* }}} */
5112 
5113 PHPAPI zend_bool remove_user_shutdown_function(char *function_name, size_t function_len TSRMLS_DC) /* {{{ */
5114 {
5115 	if (BG(user_shutdown_function_names)) {
5116 		return zend_hash_del_key_or_index(BG(user_shutdown_function_names), function_name, function_len, 0, HASH_DEL_KEY) != FAILURE;
5117 	}
5118 
5119 	return 0;
5120 }
5121 /* }}} */
5122 
5123 PHPAPI zend_bool append_user_shutdown_function(php_shutdown_function_entry shutdown_function_entry TSRMLS_DC) /* {{{ */
5124 {
5125 	if (!BG(user_shutdown_function_names)) {
5126 		ALLOC_HASHTABLE(BG(user_shutdown_function_names));
5127 		zend_hash_init(BG(user_shutdown_function_names), 0, NULL, (void (*)(void *)) user_shutdown_function_dtor, 0);
5128 	}
5129 
5130 	return zend_hash_next_index_insert(BG(user_shutdown_function_names), &shutdown_function_entry, sizeof(php_shutdown_function_entry), NULL) != FAILURE;
5131 }
5132 /* }}} */
5133 
5134 ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highlighter_ini) /* {{{ */
5135 {
5136 	syntax_highlighter_ini->highlight_comment = INI_STR("highlight.comment");
5137 	syntax_highlighter_ini->highlight_default = INI_STR("highlight.default");
5138 	syntax_highlighter_ini->highlight_html    = INI_STR("highlight.html");
5139 	syntax_highlighter_ini->highlight_keyword = INI_STR("highlight.keyword");
5140 	syntax_highlighter_ini->highlight_string  = INI_STR("highlight.string");
5141 }
5142 /* }}} */
5143 
5144 /* {{{ proto bool highlight_file(string file_name [, bool return] )
5145    Syntax highlight a source file */
5146 PHP_FUNCTION(highlight_file)
5147 {
5148 	char *filename;
5149 	int filename_len, ret;
5150 	zend_syntax_highlighter_ini syntax_highlighter_ini;
5151 	zend_bool i = 0;
5152 
5153 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "p|b", &filename, &filename_len, &i) == FAILURE) {
5154 		RETURN_FALSE;
5155 	}
5156 
5157 	if (php_check_open_basedir(filename TSRMLS_CC)) {
5158 		RETURN_FALSE;
5159 	}
5160 
5161 	if (i) {
5162 		php_output_start_default(TSRMLS_C);
5163 	}
5164 
5165 	php_get_highlight_struct(&syntax_highlighter_ini);
5166 
5167 	ret = highlight_file(filename, &syntax_highlighter_ini TSRMLS_CC);
5168 
5169 	if (ret == FAILURE) {
5170 		if (i) {
5171 			php_output_end(TSRMLS_C);
5172 		}
5173 		RETURN_FALSE;
5174 	}
5175 
5176 	if (i) {
5177 		php_output_get_contents(return_value TSRMLS_CC);
5178 		php_output_discard(TSRMLS_C);
5179 	} else {
5180 		RETURN_TRUE;
5181 	}
5182 }
5183 /* }}} */
5184 
5185 /* {{{ proto string php_strip_whitespace(string file_name)
5186    Return source with stripped comments and whitespace */
5187 PHP_FUNCTION(php_strip_whitespace)
5188 {
5189 	char *filename;
5190 	int filename_len;
5191 	zend_lex_state original_lex_state;
5192 	zend_file_handle file_handle = {0};
5193 
5194 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "p", &filename, &filename_len) == FAILURE) {
5195 		RETURN_FALSE;
5196 	}
5197 
5198 	php_output_start_default(TSRMLS_C);
5199 
5200 	file_handle.type = ZEND_HANDLE_FILENAME;
5201 	file_handle.filename = filename;
5202 	file_handle.free_filename = 0;
5203 	file_handle.opened_path = NULL;
5204 	zend_save_lexical_state(&original_lex_state TSRMLS_CC);
5205 	if (open_file_for_scanning(&file_handle TSRMLS_CC) == FAILURE) {
5206 		zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
5207 		php_output_end(TSRMLS_C);
5208 		RETURN_EMPTY_STRING();
5209 	}
5210 
5211 	zend_strip(TSRMLS_C);
5212 
5213 	zend_destroy_file_handle(&file_handle TSRMLS_CC);
5214 	zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
5215 
5216 	php_output_get_contents(return_value TSRMLS_CC);
5217 	php_output_discard(TSRMLS_C);
5218 }
5219 /* }}} */
5220 
5221 /* {{{ proto bool highlight_string(string string [, bool return] )
5222    Syntax highlight a string or optionally return it */
5223 PHP_FUNCTION(highlight_string)
5224 {
5225 	zval **expr;
5226 	zend_syntax_highlighter_ini syntax_highlighter_ini;
5227 	char *hicompiled_string_description;
5228 	zend_bool i = 0;
5229 	int old_error_reporting = EG(error_reporting);
5230 
5231 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|b", &expr, &i) == FAILURE) {
5232 		RETURN_FALSE;
5233 	}
5234 	convert_to_string_ex(expr);
5235 
5236 	if (i) {
5237 		php_output_start_default(TSRMLS_C);
5238 	}
5239 
5240 	EG(error_reporting) = E_ERROR;
5241 
5242 	php_get_highlight_struct(&syntax_highlighter_ini);
5243 
5244 	hicompiled_string_description = zend_make_compiled_string_description("highlighted code" TSRMLS_CC);
5245 
5246 	if (highlight_string(*expr, &syntax_highlighter_ini, hicompiled_string_description TSRMLS_CC) == FAILURE) {
5247 		efree(hicompiled_string_description);
5248 		EG(error_reporting) = old_error_reporting;
5249 		if (i) {
5250 			php_output_end(TSRMLS_C);
5251 		}
5252 		RETURN_FALSE;
5253 	}
5254 	efree(hicompiled_string_description);
5255 
5256 	EG(error_reporting) = old_error_reporting;
5257 
5258 	if (i) {
5259 		php_output_get_contents(return_value TSRMLS_CC);
5260 		php_output_discard(TSRMLS_C);
5261 	} else {
5262 		RETURN_TRUE;
5263 	}
5264 }
5265 /* }}} */
5266 
5267 /* {{{ proto string ini_get(string varname)
5268    Get a configuration option */
5269 PHP_FUNCTION(ini_get)
5270 {
5271 	char *varname, *str;
5272 	int varname_len;
5273 
5274 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &varname, &varname_len) == FAILURE) {
5275 		return;
5276 	}
5277 
5278 	str = zend_ini_string(varname, varname_len + 1, 0);
5279 
5280 	if (!str) {
5281 		RETURN_FALSE;
5282 	}
5283 
5284 	RETURN_STRING(str, 1);
5285 }
5286 /* }}} */
5287 
5288 static int php_ini_get_option(zend_ini_entry *ini_entry TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */
5289 {
5290 	zval *ini_array = va_arg(args, zval *);
5291 	int module_number = va_arg(args, int);
5292 	int details = va_arg(args, int);
5293 	zval *option;
5294 
5295 	if (module_number != 0 && ini_entry->module_number != module_number) {
5296 		return 0;
5297 	}
5298 
5299 	if (hash_key->nKeyLength == 0 ||
5300 		hash_key->arKey[0] != 0
5301 	) {
5302 		if (details) {
5303 			MAKE_STD_ZVAL(option);
5304 			array_init(option);
5305 
5306 			if (ini_entry->orig_value) {
5307 				add_assoc_stringl(option, "global_value", ini_entry->orig_value, ini_entry->orig_value_length, 1);
5308 			} else if (ini_entry->value) {
5309 				add_assoc_stringl(option, "global_value", ini_entry->value, ini_entry->value_length, 1);
5310 			} else {
5311 				add_assoc_null(option, "global_value");
5312 			}
5313 
5314 			if (ini_entry->value) {
5315 				add_assoc_stringl(option, "local_value", ini_entry->value, ini_entry->value_length, 1);
5316 			} else {
5317 				add_assoc_null(option, "local_value");
5318 			}
5319 
5320 			add_assoc_long(option, "access", ini_entry->modifiable);
5321 
5322 			add_assoc_zval_ex(ini_array, ini_entry->name, ini_entry->name_length, option);
5323 		} else {
5324 			if (ini_entry->value) {
5325 				add_assoc_stringl(ini_array, ini_entry->name, ini_entry->value, ini_entry->value_length, 1);
5326 			} else {
5327 				add_assoc_null(ini_array, ini_entry->name);
5328 			}
5329 		}
5330 	}
5331 	return 0;
5332 }
5333 /* }}} */
5334 
5335 /* {{{ proto array ini_get_all([string extension[, bool details = true]])
5336    Get all configuration options */
5337 PHP_FUNCTION(ini_get_all)
5338 {
5339 	char *extname = NULL;
5340 	int extname_len = 0, extnumber = 0;
5341 	zend_module_entry *module;
5342 	zend_bool details = 1;
5343 
5344 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!b", &extname, &extname_len, &details) == FAILURE) {
5345 		return;
5346 	}
5347 
5348 	zend_ini_sort_entries(TSRMLS_C);
5349 
5350 	if (extname) {
5351 		if (zend_hash_find(&module_registry, extname, extname_len+1, (void **) &module) == FAILURE) {
5352 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to find extension '%s'", extname);
5353 			RETURN_FALSE;
5354 		}
5355 		extnumber = module->module_number;
5356 	}
5357 
5358 	array_init(return_value);
5359 	zend_hash_apply_with_arguments(EG(ini_directives) TSRMLS_CC, (apply_func_args_t) php_ini_get_option, 2, return_value, extnumber, details);
5360 }
5361 /* }}} */
5362 
5363 static int php_ini_check_path(char *option_name, int option_len, char *new_option_name, int new_option_len) /* {{{ */
5364 {
5365 	if (option_len != (new_option_len - 1)) {
5366 		return 0;
5367 	}
5368 
5369 	return !strncmp(option_name, new_option_name, option_len);
5370 }
5371 /* }}} */
5372 
5373 /* {{{ proto string ini_set(string varname, string newvalue)
5374    Set a configuration option, returns false on error and the old value of the configuration option on success */
5375 PHP_FUNCTION(ini_set)
5376 {
5377 	char *varname, *new_value;
5378 	int varname_len, new_value_len;
5379 	char *old_value;
5380 
5381 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &varname, &varname_len, &new_value, &new_value_len) == FAILURE) {
5382 		return;
5383 	}
5384 
5385 	old_value = zend_ini_string(varname, varname_len + 1, 0);
5386 
5387 	/* copy to return here, because alter might free it! */
5388 	if (old_value) {
5389 		RETVAL_STRING(old_value, 1);
5390 	} else {
5391 		RETVAL_FALSE;
5392 	}
5393 
5394 #define _CHECK_PATH(var, var_len, ini) php_ini_check_path(var, var_len, ini, sizeof(ini))
5395 	/* open basedir check */
5396 	if (PG(open_basedir)) {
5397 		if (_CHECK_PATH(varname, varname_len, "error_log") ||
5398 			_CHECK_PATH(varname, varname_len, "java.class.path") ||
5399 			_CHECK_PATH(varname, varname_len, "java.home") ||
5400 			_CHECK_PATH(varname, varname_len, "mail.log") ||
5401 			_CHECK_PATH(varname, varname_len, "java.library.path") ||
5402 			_CHECK_PATH(varname, varname_len, "vpopmail.directory")) {
5403 			if (php_check_open_basedir(new_value TSRMLS_CC)) {
5404 				zval_dtor(return_value);
5405 				RETURN_FALSE;
5406 			}
5407 		}
5408 	}
5409 
5410 	if (zend_alter_ini_entry_ex(varname, varname_len + 1, new_value, new_value_len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0 TSRMLS_CC) == FAILURE) {
5411 		zval_dtor(return_value);
5412 		RETURN_FALSE;
5413 	}
5414 }
5415 /* }}} */
5416 
5417 /* {{{ proto void ini_restore(string varname)
5418    Restore the value of a configuration option specified by varname */
5419 PHP_FUNCTION(ini_restore)
5420 {
5421 	char *varname;
5422 	int varname_len;
5423 
5424 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &varname, &varname_len) == FAILURE) {
5425 		return;
5426 	}
5427 
5428 	zend_restore_ini_entry(varname, varname_len+1, PHP_INI_STAGE_RUNTIME);
5429 }
5430 /* }}} */
5431 
5432 /* {{{ proto string set_include_path(string new_include_path)
5433    Sets the include_path configuration option */
5434 PHP_FUNCTION(set_include_path)
5435 {
5436 	char *new_value;
5437 	int new_value_len;
5438 	char *old_value;
5439 
5440 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "p", &new_value, &new_value_len) == FAILURE) {
5441 		return;
5442 	}
5443 
5444 	old_value = zend_ini_string("include_path", sizeof("include_path"), 0);
5445 	/* copy to return here, because alter might free it! */
5446 	if (old_value) {
5447 		RETVAL_STRING(old_value, 1);
5448 	} else {
5449 		RETVAL_FALSE;
5450 	}
5451 
5452 	if (zend_alter_ini_entry_ex("include_path", sizeof("include_path"), new_value, new_value_len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0 TSRMLS_CC) == FAILURE) {
5453 		zval_dtor(return_value);
5454 		RETURN_FALSE;
5455 	}
5456 }
5457 /* }}} */
5458 
5459 /* {{{ proto string get_include_path()
5460    Get the current include_path configuration option */
5461 PHP_FUNCTION(get_include_path)
5462 {
5463 	char *str;
5464 
5465 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
5466 		return;
5467 	}
5468 
5469 	str = zend_ini_string("include_path", sizeof("include_path"), 0);
5470 
5471 	if (str == NULL) {
5472 		RETURN_FALSE;
5473 	}
5474 
5475 	RETURN_STRING(str, 1);
5476 }
5477 /* }}} */
5478 
5479 /* {{{ proto void restore_include_path()
5480    Restore the value of the include_path configuration option */
5481 PHP_FUNCTION(restore_include_path)
5482 {
5483 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "") == FAILURE) {
5484 		return;
5485 	}
5486 	zend_restore_ini_entry("include_path", sizeof("include_path"), PHP_INI_STAGE_RUNTIME);
5487 }
5488 /* }}} */
5489 
5490 /* {{{ proto mixed print_r(mixed var [, bool return])
5491    Prints out or returns information about the specified variable */
5492 PHP_FUNCTION(print_r)
5493 {
5494 	zval *var;
5495 	zend_bool do_return = 0;
5496 
5497 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &var, &do_return) == FAILURE) {
5498 		RETURN_FALSE;
5499 	}
5500 
5501 	if (do_return) {
5502 		php_output_start_default(TSRMLS_C);
5503 	}
5504 
5505 	zend_print_zval_r(var, 0 TSRMLS_CC);
5506 
5507 	if (do_return) {
5508 		php_output_get_contents(return_value TSRMLS_CC);
5509 		php_output_discard(TSRMLS_C);
5510 	} else {
5511 		RETURN_TRUE;
5512 	}
5513 }
5514 /* }}} */
5515 
5516 /* {{{ proto int connection_aborted(void)
5517    Returns true if client disconnected */
5518 PHP_FUNCTION(connection_aborted)
5519 {
5520 	RETURN_LONG(PG(connection_status) & PHP_CONNECTION_ABORTED);
5521 }
5522 /* }}} */
5523 
5524 /* {{{ proto int connection_status(void)
5525    Returns the connection status bitfield */
5526 PHP_FUNCTION(connection_status)
5527 {
5528 	RETURN_LONG(PG(connection_status));
5529 }
5530 /* }}} */
5531 
5532 /* {{{ proto int ignore_user_abort([string value])
5533    Set whether we want to ignore a user abort event or not */
5534 PHP_FUNCTION(ignore_user_abort)
5535 {
5536 	char *arg = NULL;
5537 	int arg_len = 0;
5538 	int old_setting;
5539 
5540 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &arg, &arg_len) == FAILURE) {
5541 		return;
5542 	}
5543 
5544 	old_setting = PG(ignore_user_abort);
5545 
5546 	if (arg) {
5547 		zend_alter_ini_entry_ex("ignore_user_abort", sizeof("ignore_user_abort"), arg, arg_len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0 TSRMLS_CC);
5548 	}
5549 
5550 	RETURN_LONG(old_setting);
5551 }
5552 /* }}} */
5553 
5554 #if HAVE_GETSERVBYNAME
5555 /* {{{ proto int getservbyname(string service, string protocol)
5556    Returns port associated with service. Protocol must be "tcp" or "udp" */
5557 PHP_FUNCTION(getservbyname)
5558 {
5559 	char *name, *proto;
5560 	int name_len, proto_len;
5561 	struct servent *serv;
5562 
5563 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name, &name_len, &proto, &proto_len) == FAILURE) {
5564 		return;
5565 	}
5566 
5567 
5568 /* empty string behaves like NULL on windows implementation of
5569    getservbyname. Let be portable instead. */
5570 #ifdef PHP_WIN32
5571 	if (proto_len == 0) {
5572 		RETURN_FALSE;
5573 	}
5574 #endif
5575 
5576 	serv = getservbyname(name, proto);
5577 
5578 	if (serv == NULL) {
5579 		RETURN_FALSE;
5580 	}
5581 
5582 	RETURN_LONG(ntohs(serv->s_port));
5583 }
5584 /* }}} */
5585 #endif
5586 
5587 #if HAVE_GETSERVBYPORT
5588 /* {{{ proto string getservbyport(int port, string protocol)
5589    Returns service name associated with port. Protocol must be "tcp" or "udp" */
5590 PHP_FUNCTION(getservbyport)
5591 {
5592 	char *proto;
5593 	int proto_len;
5594 	long port;
5595 	struct servent *serv;
5596 
5597 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ls", &port, &proto, &proto_len) == FAILURE) {
5598 		return;
5599 	}
5600 
5601 	serv = getservbyport(htons((unsigned short) port), proto);
5602 
5603 	if (serv == NULL) {
5604 		RETURN_FALSE;
5605 	}
5606 
5607 	RETURN_STRING(serv->s_name, 1);
5608 }
5609 /* }}} */
5610 #endif
5611 
5612 #if HAVE_GETPROTOBYNAME
5613 /* {{{ proto int getprotobyname(string name)
5614    Returns protocol number associated with name as per /etc/protocols */
5615 PHP_FUNCTION(getprotobyname)
5616 {
5617 	char *name;
5618 	int name_len;
5619 	struct protoent *ent;
5620 
5621 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
5622 		return;
5623 	}
5624 
5625 	ent = getprotobyname(name);
5626 
5627 	if (ent == NULL) {
5628 		RETURN_FALSE;
5629 	}
5630 
5631 	RETURN_LONG(ent->p_proto);
5632 }
5633 /* }}} */
5634 #endif
5635 
5636 #if HAVE_GETPROTOBYNUMBER
5637 /* {{{ proto string getprotobynumber(int proto)
5638    Returns protocol name associated with protocol number proto */
5639 PHP_FUNCTION(getprotobynumber)
5640 {
5641 	long proto;
5642 	struct protoent *ent;
5643 
5644 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &proto) == FAILURE) {
5645 		return;
5646 	}
5647 
5648 	ent = getprotobynumber(proto);
5649 
5650 	if (ent == NULL) {
5651 		RETURN_FALSE;
5652 	}
5653 
5654 	RETURN_STRING(ent->p_name, 1);
5655 }
5656 /* }}} */
5657 #endif
5658 
5659 /* {{{ proto bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])
5660    Registers a tick callback function */
5661 PHP_FUNCTION(register_tick_function)
5662 {
5663 	user_tick_function_entry tick_fe;
5664 	int i;
5665 	char *function_name = NULL;
5666 
5667 	tick_fe.calling = 0;
5668 	tick_fe.arg_count = ZEND_NUM_ARGS();
5669 
5670 	if (tick_fe.arg_count < 1) {
5671 		WRONG_PARAM_COUNT;
5672 	}
5673 
5674 	tick_fe.arguments = (zval **) safe_emalloc(sizeof(zval *), tick_fe.arg_count, 0);
5675 
5676 	if (zend_get_parameters_array(ht, tick_fe.arg_count, tick_fe.arguments) == FAILURE) {
5677 		efree(tick_fe.arguments);
5678 		RETURN_FALSE;
5679 	}
5680 
5681 	if (!zend_is_callable(tick_fe.arguments[0], 0, &function_name TSRMLS_CC)) {
5682 		efree(tick_fe.arguments);
5683 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid tick callback '%s' passed", function_name);
5684 		efree(function_name);
5685 		RETURN_FALSE;
5686 	} else if (function_name) {
5687 		efree(function_name);
5688 	}
5689 
5690 	if (Z_TYPE_P(tick_fe.arguments[0]) != IS_ARRAY && Z_TYPE_P(tick_fe.arguments[0]) != IS_OBJECT) {
5691 		convert_to_string_ex(&tick_fe.arguments[0]);
5692 	}
5693 
5694 	if (!BG(user_tick_functions)) {
5695 		BG(user_tick_functions) = (zend_llist *) emalloc(sizeof(zend_llist));
5696 		zend_llist_init(BG(user_tick_functions),
5697 						sizeof(user_tick_function_entry),
5698 						(llist_dtor_func_t) user_tick_function_dtor, 0);
5699 		php_add_tick_function(run_user_tick_functions);
5700 	}
5701 
5702 	for (i = 0; i < tick_fe.arg_count; i++) {
5703 		Z_ADDREF_P(tick_fe.arguments[i]);
5704 	}
5705 
5706 	zend_llist_add_element(BG(user_tick_functions), &tick_fe);
5707 
5708 	RETURN_TRUE;
5709 }
5710 /* }}} */
5711 
5712 /* {{{ proto void unregister_tick_function(string function_name)
5713    Unregisters a tick callback function */
5714 PHP_FUNCTION(unregister_tick_function)
5715 {
5716 	zval *function;
5717 	user_tick_function_entry tick_fe;
5718 
5719 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/", &function) == FAILURE) {
5720 		return;
5721 	}
5722 
5723 	if (!BG(user_tick_functions)) {
5724 		return;
5725 	}
5726 
5727 	if (Z_TYPE_P(function) != IS_ARRAY && Z_TYPE_P(function) != IS_OBJECT) {
5728 		convert_to_string(function);
5729 	}
5730 
5731 	tick_fe.arguments = (zval **) emalloc(sizeof(zval *));
5732 	tick_fe.arguments[0] = function;
5733 	tick_fe.arg_count = 1;
5734 	zend_llist_del_element(BG(user_tick_functions), &tick_fe, (int (*)(void *, void *)) user_tick_function_compare);
5735 	efree(tick_fe.arguments);
5736 }
5737 /* }}} */
5738 
5739 /* {{{ proto bool is_uploaded_file(string path)
5740    Check if file was created by rfc1867 upload */
5741 PHP_FUNCTION(is_uploaded_file)
5742 {
5743 	char *path;
5744 	int path_len;
5745 
5746 	if (!SG(rfc1867_uploaded_files)) {
5747 		RETURN_FALSE;
5748 	}
5749 
5750 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &path, &path_len) == FAILURE) {
5751 		return;
5752 	}
5753 
5754 	if (zend_hash_exists(SG(rfc1867_uploaded_files), path, path_len + 1)) {
5755 		RETURN_TRUE;
5756 	} else {
5757 		RETURN_FALSE;
5758 	}
5759 }
5760 /* }}} */
5761 
5762 /* {{{ proto bool move_uploaded_file(string path, string new_path)
5763    Move a file if and only if it was created by an upload */
5764 PHP_FUNCTION(move_uploaded_file)
5765 {
5766 	char *path, *new_path;
5767 	int path_len, new_path_len;
5768 	zend_bool successful = 0;
5769 
5770 #ifndef PHP_WIN32
5771 	int oldmask; int ret;
5772 #endif
5773 
5774 	if (!SG(rfc1867_uploaded_files)) {
5775 		RETURN_FALSE;
5776 	}
5777 
5778 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sp", &path, &path_len, &new_path, &new_path_len) == FAILURE) {
5779 		return;
5780 	}
5781 
5782 	if (!zend_hash_exists(SG(rfc1867_uploaded_files), path, path_len + 1)) {
5783 		RETURN_FALSE;
5784 	}
5785 
5786 	if (php_check_open_basedir(new_path TSRMLS_CC)) {
5787 		RETURN_FALSE;
5788 	}
5789 
5790 	if (VCWD_RENAME(path, new_path) == 0) {
5791 		successful = 1;
5792 #ifndef PHP_WIN32
5793 		oldmask = umask(077);
5794 		umask(oldmask);
5795 
5796 		ret = VCWD_CHMOD(new_path, 0666 & ~oldmask);
5797 
5798 		if (ret == -1) {
5799 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
5800 		}
5801 #endif
5802 	} else if (php_copy_file_ex(path, new_path, STREAM_DISABLE_OPEN_BASEDIR TSRMLS_CC) == SUCCESS) {
5803 		VCWD_UNLINK(path);
5804 		successful = 1;
5805 	}
5806 
5807 	if (successful) {
5808 		zend_hash_del(SG(rfc1867_uploaded_files), path, path_len + 1);
5809 	} else {
5810 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to move '%s' to '%s'", path, new_path);
5811 	}
5812 
5813 	RETURN_BOOL(successful);
5814 }
5815 /* }}} */
5816 
5817 /* {{{ php_simple_ini_parser_cb
5818  */
5819 static void php_simple_ini_parser_cb(zval *arg1, zval *arg2, zval *arg3, int callback_type, zval *arr TSRMLS_DC)
5820 {
5821 	zval *element;
5822 
5823 	switch (callback_type) {
5824 
5825 		case ZEND_INI_PARSER_ENTRY:
5826 			if (!arg2) {
5827 				/* bare string - nothing to do */
5828 				break;
5829 			}
5830 			ALLOC_ZVAL(element);
5831 			MAKE_COPY_ZVAL(&arg2, element);
5832 			zend_symtable_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1) + 1, &element, sizeof(zval *), NULL);
5833 			break;
5834 
5835 		case ZEND_INI_PARSER_POP_ENTRY:
5836 		{
5837 			zval *hash, **find_hash;
5838 
5839 			if (!arg2) {
5840 				/* bare string - nothing to do */
5841 				break;
5842 			}
5843 
5844 			if (!(Z_STRLEN_P(arg1) > 1 && Z_STRVAL_P(arg1)[0] == '0') && is_numeric_string(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1), NULL, NULL, 0) == IS_LONG) {
5845 				ulong key = (ulong) zend_atol(Z_STRVAL_P(arg1), Z_STRLEN_P(arg1));
5846 				if (zend_hash_index_find(Z_ARRVAL_P(arr), key, (void **) &find_hash) == FAILURE) {
5847 					ALLOC_ZVAL(hash);
5848 					INIT_PZVAL(hash);
5849 					array_init(hash);
5850 
5851 					zend_hash_index_update(Z_ARRVAL_P(arr), key, &hash, sizeof(zval *), NULL);
5852 				} else {
5853 					hash = *find_hash;
5854 				}
5855 			} else {
5856 				if (zend_hash_find(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1) + 1, (void **) &find_hash) == FAILURE) {
5857 					ALLOC_ZVAL(hash);
5858 					INIT_PZVAL(hash);
5859 					array_init(hash);
5860 
5861 					zend_hash_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1) + 1, &hash, sizeof(zval *), NULL);
5862 				} else {
5863 					hash = *find_hash;
5864 				}
5865 			}
5866 
5867 			if (Z_TYPE_P(hash) != IS_ARRAY) {
5868 				zval_dtor(hash);
5869 				INIT_PZVAL(hash);
5870 				array_init(hash);
5871 			}
5872 
5873 			ALLOC_ZVAL(element);
5874 			MAKE_COPY_ZVAL(&arg2, element);
5875 
5876 			if (arg3 && Z_STRLEN_P(arg3) > 0) {
5877 				add_assoc_zval_ex(hash, Z_STRVAL_P(arg3), Z_STRLEN_P(arg3) + 1, element);
5878 			} else {
5879 				add_next_index_zval(hash, element);
5880 			}
5881 		}
5882 		break;
5883 
5884 		case ZEND_INI_PARSER_SECTION:
5885 			break;
5886 	}
5887 }
5888 /* }}} */
5889 
5890 /* {{{ php_ini_parser_cb_with_sections
5891  */
5892 static void php_ini_parser_cb_with_sections(zval *arg1, zval *arg2, zval *arg3, int callback_type, zval *arr TSRMLS_DC)
5893 {
5894 	if (callback_type == ZEND_INI_PARSER_SECTION) {
5895 		MAKE_STD_ZVAL(BG(active_ini_file_section));
5896 		array_init(BG(active_ini_file_section));
5897 		zend_symtable_update(Z_ARRVAL_P(arr), Z_STRVAL_P(arg1), Z_STRLEN_P(arg1) + 1, &BG(active_ini_file_section), sizeof(zval *), NULL);
5898 	} else if (arg2) {
5899 		zval *active_arr;
5900 
5901 		if (BG(active_ini_file_section)) {
5902 			active_arr = BG(active_ini_file_section);
5903 		} else {
5904 			active_arr = arr;
5905 		}
5906 
5907 		php_simple_ini_parser_cb(arg1, arg2, arg3, callback_type, active_arr TSRMLS_CC);
5908 	}
5909 }
5910 /* }}} */
5911 
5912 /* {{{ proto array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])
5913    Parse configuration file */
5914 PHP_FUNCTION(parse_ini_file)
5915 {
5916 	char *filename = NULL;
5917 	int filename_len = 0;
5918 	zend_bool process_sections = 0;
5919 	long scanner_mode = ZEND_INI_SCANNER_NORMAL;
5920 	zend_file_handle fh;
5921 	zend_ini_parser_cb_t ini_parser_cb;
5922 
5923 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "p|bl", &filename, &filename_len, &process_sections, &scanner_mode) == FAILURE) {
5924 		RETURN_FALSE;
5925 	}
5926 
5927 	if (filename_len == 0) {
5928 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Filename cannot be empty!");
5929 		RETURN_FALSE;
5930 	}
5931 
5932 	/* Set callback function */
5933 	if (process_sections) {
5934 		BG(active_ini_file_section) = NULL;
5935 		ini_parser_cb = (zend_ini_parser_cb_t) php_ini_parser_cb_with_sections;
5936 	} else {
5937 		ini_parser_cb = (zend_ini_parser_cb_t) php_simple_ini_parser_cb;
5938 	}
5939 
5940 	/* Setup filehandle */
5941 	memset(&fh, 0, sizeof(fh));
5942 	fh.filename = filename;
5943 	fh.type = ZEND_HANDLE_FILENAME;
5944 
5945 	array_init(return_value);
5946 	if (zend_parse_ini_file(&fh, 0, scanner_mode, ini_parser_cb, return_value TSRMLS_CC) == FAILURE) {
5947 		zend_hash_destroy(Z_ARRVAL_P(return_value));
5948 		efree(Z_ARRVAL_P(return_value));
5949 		RETURN_FALSE;
5950 	}
5951 }
5952 /* }}} */
5953 
5954 /* {{{ proto array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])
5955    Parse configuration string */
5956 PHP_FUNCTION(parse_ini_string)
5957 {
5958 	char *string = NULL, *str = NULL;
5959 	int str_len = 0;
5960 	zend_bool process_sections = 0;
5961 	long scanner_mode = ZEND_INI_SCANNER_NORMAL;
5962 	zend_ini_parser_cb_t ini_parser_cb;
5963 
5964 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|bl", &str, &str_len, &process_sections, &scanner_mode) == FAILURE) {
5965 		RETURN_FALSE;
5966 	}
5967 
5968 	if (INT_MAX - str_len < ZEND_MMAP_AHEAD) {
5969 		RETVAL_FALSE;
5970 	}
5971 
5972 	/* Set callback function */
5973 	if (process_sections) {
5974 		BG(active_ini_file_section) = NULL;
5975 		ini_parser_cb = (zend_ini_parser_cb_t) php_ini_parser_cb_with_sections;
5976 	} else {
5977 		ini_parser_cb = (zend_ini_parser_cb_t) php_simple_ini_parser_cb;
5978 	}
5979 
5980 	/* Setup string */
5981 	string = (char *) emalloc(str_len + ZEND_MMAP_AHEAD);
5982 	memcpy(string, str, str_len);
5983 	memset(string + str_len, 0, ZEND_MMAP_AHEAD);
5984 
5985 	array_init(return_value);
5986 	if (zend_parse_ini_string(string, 0, scanner_mode, ini_parser_cb, return_value TSRMLS_CC) == FAILURE) {
5987 		zend_hash_destroy(Z_ARRVAL_P(return_value));
5988 		efree(Z_ARRVAL_P(return_value));
5989 		RETVAL_FALSE;
5990 	}
5991 	efree(string);
5992 }
5993 /* }}} */
5994 
5995 #if ZEND_DEBUG
5996 /* This function returns an array of ALL valid ini options with values and
5997  *  is not the same as ini_get_all() which returns only registered ini options. Only useful for devs to debug php.ini scanner/parser! */
5998 PHP_FUNCTION(config_get_hash) /* {{{ */
5999 {
6000 	HashTable *hash = php_ini_get_configuration_hash();
6001 
6002 	array_init(return_value);
6003 	zend_hash_apply_with_arguments(hash TSRMLS_CC, (apply_func_args_t) add_config_entry_cb, 1, return_value);
6004 }
6005 /* }}} */
6006 #endif
6007 
6008 #ifdef HAVE_GETLOADAVG
6009 /* {{{ proto array sys_getloadavg()
6010 */
6011 PHP_FUNCTION(sys_getloadavg)
6012 {
6013 	double load[3];
6014 
6015 	if (zend_parse_parameters_none() == FAILURE) {
6016 		return;
6017 	}
6018 
6019 	if (getloadavg(load, 3) == -1) {
6020 		RETURN_FALSE;
6021 	} else {
6022 		array_init(return_value);
6023 		add_index_double(return_value, 0, load[0]);
6024 		add_index_double(return_value, 1, load[1]);
6025 		add_index_double(return_value, 2, load[2]);
6026 	}
6027 }
6028 /* }}} */
6029 #endif
6030 
6031 /*
6032  * Local variables:
6033  * tab-width: 4
6034  * c-basic-offset: 4
6035  * End:
6036  * vim600: fdm=marker
6037  * vim: noet sw=4 ts=4
6038  */
6039