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