root/ext/standard/basic_functions.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. php_putenv_destructor
  2. basic_globals_ctor
  3. basic_globals_dtor
  4. php_get_nan
  5. php_get_inf
  6. PHP_MINIT_FUNCTION
  7. PHP_MSHUTDOWN_FUNCTION
  8. PHP_RINIT_FUNCTION
  9. PHP_RSHUTDOWN_FUNCTION
  10. PHP_MINFO_FUNCTION
  11. PHP_FUNCTION
  12. PHP_NAMED_FUNCTION
  13. PHP_NAMED_FUNCTION
  14. PHP_FUNCTION
  15. PHP_FUNCTION
  16. PHP_FUNCTION
  17. PHP_FUNCTION
  18. free_argv
  19. free_longopts
  20. parse_opts
  21. PHP_FUNCTION
  22. PHP_FUNCTION
  23. PHP_FUNCTION
  24. PHP_FUNCTION
  25. PHP_FUNCTION
  26. PHP_FUNCTION
  27. PHP_FUNCTION
  28. add_config_entry_cb
  29. PHP_FUNCTION
  30. PHP_FUNCTION
  31. PHP_FUNCTION
  32. PHP_FUNCTION
  33. _php_error_log
  34. _php_error_log_ex
  35. PHP_FUNCTION
  36. PHP_FUNCTION
  37. PHP_FUNCTION
  38. PHP_FUNCTION
  39. PHP_FUNCTION
  40. PHP_FUNCTION
  41. user_shutdown_function_dtor
  42. user_tick_function_dtor
  43. user_shutdown_function_call
  44. user_tick_function_call
  45. run_user_tick_functions
  46. user_tick_function_compare
  47. php_call_shutdown_functions
  48. php_free_shutdown_functions
  49. PHP_FUNCTION
  50. register_user_shutdown_function
  51. remove_user_shutdown_function
  52. append_user_shutdown_function
  53. php_get_highlight_struct
  54. PHP_FUNCTION
  55. PHP_FUNCTION
  56. PHP_FUNCTION
  57. PHP_FUNCTION
  58. php_ini_get_option
  59. PHP_FUNCTION
  60. php_ini_check_path
  61. PHP_FUNCTION
  62. PHP_FUNCTION
  63. PHP_FUNCTION
  64. PHP_FUNCTION
  65. PHP_FUNCTION
  66. PHP_FUNCTION
  67. PHP_FUNCTION
  68. PHP_FUNCTION
  69. PHP_FUNCTION
  70. PHP_FUNCTION
  71. PHP_FUNCTION
  72. PHP_FUNCTION
  73. PHP_FUNCTION
  74. PHP_FUNCTION
  75. PHP_FUNCTION
  76. PHP_FUNCTION
  77. PHP_FUNCTION
  78. php_simple_ini_parser_cb
  79. php_ini_parser_cb_with_sections
  80. PHP_FUNCTION
  81. PHP_FUNCTION
  82. PHP_FUNCTION
  83. PHP_FUNCTION

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

/* [<][>][^][v][top][bottom][index][help] */