1 /* 2 +----------------------------------------------------------------------+ 3 | Copyright (c) The PHP Group | 4 +----------------------------------------------------------------------+ 5 | This source file is subject to version 3.01 of the PHP license, | 6 | that is bundled with this package in the file LICENSE, and is | 7 | available through the world-wide-web at the following url: | 8 | https://www.php.net/license/3_01.txt | 9 | If you did not receive a copy of the PHP license and are unable to | 10 | obtain it through the world-wide-web, please send a note to | 11 | license@php.net so we can mail you a copy immediately. | 12 +----------------------------------------------------------------------+ 13 | Authors: Andi Gutmans <andi@php.net> | 14 | Zeev Suraski <zeev@php.net> | 15 +----------------------------------------------------------------------+ 16 */ 17 18 #ifndef BASIC_FUNCTIONS_H 19 #define BASIC_FUNCTIONS_H 20 21 #include <sys/stat.h> 22 #include <wchar.h> 23 24 #include "php_filestat.h" 25 26 #include "zend_highlight.h" 27 28 #include "url_scanner_ex.h" 29 30 #if defined(_WIN32) && !defined(__clang__) 31 #include <intrin.h> 32 #endif 33 34 extern zend_module_entry basic_functions_module; 35 #define basic_functions_module_ptr &basic_functions_module 36 37 PHP_MINIT_FUNCTION(basic); 38 PHP_MSHUTDOWN_FUNCTION(basic); 39 PHP_RINIT_FUNCTION(basic); 40 PHP_RSHUTDOWN_FUNCTION(basic); 41 PHP_MINFO_FUNCTION(basic); 42 43 ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highlighter_ini); 44 45 PHP_MINIT_FUNCTION(user_filters); 46 PHP_RSHUTDOWN_FUNCTION(user_filters); 47 PHP_RSHUTDOWN_FUNCTION(browscap); 48 49 /* Left for BC (not binary safe!) */ 50 PHPAPI int _php_error_log(int opt_err, const char *message, const char *opt, const char *headers); 51 PHPAPI int _php_error_log_ex(int opt_err, const char *message, size_t message_len, const char *opt, const char *headers); 52 PHPAPI int php_prefix_varname(zval *result, zend_string *prefix, const char *var_name, size_t var_name_len, bool add_underscore); 53 54 #define MT_N (624) 55 56 /* Deprecated type aliases -- use the standard types instead */ 57 typedef uint32_t php_uint32; 58 typedef int32_t php_int32; 59 60 typedef struct _php_basic_globals { 61 HashTable *user_shutdown_function_names; 62 HashTable putenv_ht; 63 zend_string *strtok_string; 64 zend_string *ctype_string; /* current LC_CTYPE locale (or NULL for 'C') */ 65 bool locale_changed; /* locale was changed and has to be restored */ 66 char *strtok_last; 67 char strtok_table[256]; 68 size_t strtok_len; 69 zend_fcall_info user_compare_fci; 70 zend_fcall_info_cache user_compare_fci_cache; 71 zend_llist *user_tick_functions; 72 73 zval active_ini_file_section; 74 75 /* pageinfo.c */ 76 zend_long page_uid; 77 zend_long page_gid; 78 zend_long page_inode; 79 time_t page_mtime; 80 81 /* filestat.c && main/streams/streams.c */ 82 zend_string *CurrentStatFile, *CurrentLStatFile; 83 php_stream_statbuf ssb, lssb; 84 85 /* mt_rand.c */ 86 uint32_t state[MT_N+1]; /* state vector + 1 extra to not violate ANSI C */ 87 uint32_t *next; /* next random value is computed from here */ 88 int left; /* can *next++ this many times before reloading */ 89 90 bool mt_rand_is_seeded; /* Whether mt_rand() has been seeded */ 91 zend_long mt_rand_mode; 92 93 /* syslog.c */ 94 char *syslog_device; 95 96 /* var.c */ 97 unsigned serialize_lock; /* whether to use the locally supplied var_hash instead (__sleep/__wakeup) */ 98 struct { 99 struct php_serialize_data *data; 100 unsigned level; 101 } serialize; 102 struct { 103 struct php_unserialize_data *data; 104 unsigned level; 105 } unserialize; 106 107 /* url_scanner_ex.re */ 108 url_adapt_state_ex_t url_adapt_session_ex; 109 HashTable url_adapt_session_hosts_ht; 110 url_adapt_state_ex_t url_adapt_output_ex; 111 HashTable url_adapt_output_hosts_ht; 112 HashTable *user_filter_map; 113 114 /* file.c */ 115 #if defined(_REENTRANT) 116 mbstate_t mblen_state; 117 #endif 118 119 int umask; 120 zend_long unserialize_max_depth; 121 } php_basic_globals; 122 123 #ifdef ZTS 124 #define BG(v) ZEND_TSRMG(basic_globals_id, php_basic_globals *, v) 125 PHPAPI extern int basic_globals_id; 126 #else 127 #define BG(v) (basic_globals.v) 128 PHPAPI extern php_basic_globals basic_globals; 129 #endif 130 131 PHPAPI zend_string *php_getenv(const char *str, size_t str_len); 132 133 PHPAPI double php_get_nan(void); 134 PHPAPI double php_get_inf(void); 135 136 typedef struct _php_shutdown_function_entry { 137 zend_fcall_info fci; 138 zend_fcall_info_cache fci_cache; 139 } php_shutdown_function_entry; 140 141 PHPAPI extern bool register_user_shutdown_function(const char *function_name, size_t function_len, php_shutdown_function_entry *shutdown_function_entry); 142 PHPAPI extern bool remove_user_shutdown_function(const char *function_name, size_t function_len); 143 PHPAPI extern bool append_user_shutdown_function(php_shutdown_function_entry *shutdown_function_entry); 144 145 PHPAPI void php_call_shutdown_functions(void); 146 PHPAPI void php_free_shutdown_functions(void); 147 148 149 #endif /* BASIC_FUNCTIONS_H */ 150