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