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