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