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