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