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