2000-12-18 19:23:50 +00:00
|
|
|
/*
|
1999-04-17 00:37:12 +00:00
|
|
|
+----------------------------------------------------------------------+
|
2014-09-19 16:33:14 +00:00
|
|
|
| PHP Version 7 |
|
1999-04-17 00:37:12 +00:00
|
|
|
+----------------------------------------------------------------------+
|
2015-01-15 15:27:30 +00:00
|
|
|
| Copyright (c) 1997-2015 The PHP Group |
|
1999-04-17 00:37:12 +00:00
|
|
|
+----------------------------------------------------------------------+
|
2006-01-01 12:51:34 +00:00
|
|
|
| This source file is subject to version 3.01 of the PHP license, |
|
2000-07-24 01:40:02 +00:00
|
|
|
| that is bundled with this package in the file LICENSE, and is |
|
2003-06-10 20:04:29 +00:00
|
|
|
| available through the world-wide-web at the following url: |
|
2006-01-01 12:51:34 +00:00
|
|
|
| http://www.php.net/license/3_01.txt |
|
2000-07-24 01:40:02 +00:00
|
|
|
| If you did not receive a copy of the PHP license and are unable to |
|
|
|
|
| obtain it through the world-wide-web, please send a note to |
|
|
|
|
| license@php.net so we can mail you a copy immediately. |
|
1999-04-17 00:37:12 +00:00
|
|
|
+----------------------------------------------------------------------+
|
|
|
|
| Authors: Andi Gutmans <andi@zend.com> |
|
|
|
|
| Zeev Suraski <zeev@zend.com> |
|
|
|
|
+----------------------------------------------------------------------+
|
2000-07-24 01:40:02 +00:00
|
|
|
*/
|
1999-04-17 00:37:12 +00:00
|
|
|
|
|
|
|
/* $Id$ */
|
|
|
|
|
2000-07-02 23:46:51 +00:00
|
|
|
#ifndef BASIC_FUNCTIONS_H
|
|
|
|
#define BASIC_FUNCTIONS_H
|
1999-04-17 00:37:12 +00:00
|
|
|
|
1999-12-12 16:48:54 +00:00
|
|
|
#include <sys/stat.h>
|
|
|
|
|
2003-10-04 02:51:19 +00:00
|
|
|
#ifdef HAVE_WCHAR_H
|
|
|
|
#include <wchar.h>
|
|
|
|
#endif
|
|
|
|
|
2003-11-07 09:26:18 +00:00
|
|
|
#include "php_filestat.h"
|
|
|
|
|
1999-04-17 00:37:12 +00:00
|
|
|
#include "zend_highlight.h"
|
|
|
|
|
2001-08-25 16:09:23 +00:00
|
|
|
#include "url_scanner_ex.h"
|
2000-08-01 07:45:14 +00:00
|
|
|
|
2014-11-06 19:42:46 +00:00
|
|
|
#if defined(_WIN32) && defined(__clang__)
|
|
|
|
#include <intrin.h>
|
|
|
|
#endif
|
|
|
|
|
1999-12-17 20:55:31 +00:00
|
|
|
extern zend_module_entry basic_functions_module;
|
1999-04-17 00:37:12 +00:00
|
|
|
#define basic_functions_module_ptr &basic_functions_module
|
|
|
|
|
1999-07-26 20:09:08 +00:00
|
|
|
PHP_MINIT_FUNCTION(basic);
|
|
|
|
PHP_MSHUTDOWN_FUNCTION(basic);
|
|
|
|
PHP_RINIT_FUNCTION(basic);
|
|
|
|
PHP_RSHUTDOWN_FUNCTION(basic);
|
2000-03-06 20:37:11 +00:00
|
|
|
PHP_MINFO_FUNCTION(basic);
|
1999-07-26 20:09:08 +00:00
|
|
|
|
2000-11-24 21:05:25 +00:00
|
|
|
PHP_FUNCTION(constant);
|
1999-05-16 11:19:26 +00:00
|
|
|
PHP_FUNCTION(sleep);
|
|
|
|
PHP_FUNCTION(usleep);
|
2003-11-12 23:43:46 +00:00
|
|
|
#if HAVE_NANOSLEEP
|
2003-11-14 22:55:54 +00:00
|
|
|
PHP_FUNCTION(time_nanosleep);
|
2005-04-10 16:25:11 +00:00
|
|
|
PHP_FUNCTION(time_sleep_until);
|
2003-11-12 23:43:46 +00:00
|
|
|
#endif
|
1999-05-16 11:19:26 +00:00
|
|
|
PHP_FUNCTION(flush);
|
2004-08-07 04:50:24 +00:00
|
|
|
#ifdef HAVE_INET_NTOP
|
2004-08-07 15:59:59 +00:00
|
|
|
PHP_NAMED_FUNCTION(php_inet_ntop);
|
2004-08-07 04:50:24 +00:00
|
|
|
#endif
|
|
|
|
#ifdef HAVE_INET_PTON
|
2004-08-07 15:59:59 +00:00
|
|
|
PHP_NAMED_FUNCTION(php_inet_pton);
|
2004-08-07 04:50:24 +00:00
|
|
|
#endif
|
2000-03-04 17:28:16 +00:00
|
|
|
PHP_FUNCTION(ip2long);
|
|
|
|
PHP_FUNCTION(long2ip);
|
1999-04-17 00:37:12 +00:00
|
|
|
|
|
|
|
/* system functions */
|
1999-05-16 11:19:26 +00:00
|
|
|
PHP_FUNCTION(getenv);
|
|
|
|
PHP_FUNCTION(putenv);
|
1999-04-17 00:37:12 +00:00
|
|
|
|
2002-09-30 03:02:52 +00:00
|
|
|
PHP_FUNCTION(getopt);
|
|
|
|
|
1999-05-16 11:19:26 +00:00
|
|
|
PHP_FUNCTION(get_current_user);
|
|
|
|
PHP_FUNCTION(set_time_limit);
|
1999-04-17 00:37:12 +00:00
|
|
|
|
2011-02-03 16:47:28 +00:00
|
|
|
PHP_FUNCTION(header_register_callback);
|
|
|
|
|
1999-05-16 11:19:26 +00:00
|
|
|
PHP_FUNCTION(get_cfg_var);
|
|
|
|
PHP_FUNCTION(get_magic_quotes_runtime);
|
|
|
|
PHP_FUNCTION(get_magic_quotes_gpc);
|
1999-04-17 00:37:12 +00:00
|
|
|
|
1999-05-16 11:19:26 +00:00
|
|
|
PHP_FUNCTION(error_log);
|
2006-07-19 12:25:46 +00:00
|
|
|
PHP_FUNCTION(error_get_last);
|
2015-03-03 09:48:03 +00:00
|
|
|
PHP_FUNCTION(error_clear_last);
|
1999-04-17 00:37:12 +00:00
|
|
|
|
1999-05-16 11:19:26 +00:00
|
|
|
PHP_FUNCTION(call_user_func);
|
2000-11-24 21:05:25 +00:00
|
|
|
PHP_FUNCTION(call_user_func_array);
|
2008-04-07 10:44:59 +00:00
|
|
|
PHP_FUNCTION(forward_static_call);
|
|
|
|
PHP_FUNCTION(forward_static_call_array);
|
1999-04-17 00:37:12 +00:00
|
|
|
|
|
|
|
PHP_FUNCTION(register_shutdown_function);
|
|
|
|
PHP_FUNCTION(highlight_file);
|
|
|
|
PHP_FUNCTION(highlight_string);
|
2003-11-24 01:17:27 +00:00
|
|
|
PHP_FUNCTION(php_strip_whitespace);
|
1999-04-26 14:00:49 +00:00
|
|
|
ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highlighter_ini);
|
1999-04-17 00:37:12 +00:00
|
|
|
|
|
|
|
PHP_FUNCTION(ini_get);
|
2001-08-30 17:47:04 +00:00
|
|
|
PHP_FUNCTION(ini_get_all);
|
2000-02-26 14:53:18 +00:00
|
|
|
PHP_FUNCTION(ini_set);
|
1999-04-17 00:37:12 +00:00
|
|
|
PHP_FUNCTION(ini_restore);
|
2002-11-05 06:05:48 +00:00
|
|
|
PHP_FUNCTION(get_include_path);
|
|
|
|
PHP_FUNCTION(set_include_path);
|
|
|
|
PHP_FUNCTION(restore_include_path);
|
1999-04-17 00:37:12 +00:00
|
|
|
|
|
|
|
PHP_FUNCTION(print_r);
|
2003-01-09 17:29:31 +00:00
|
|
|
PHP_FUNCTION(fprintf);
|
|
|
|
PHP_FUNCTION(vfprintf);
|
1999-04-17 00:37:12 +00:00
|
|
|
|
1999-09-04 21:10:39 +00:00
|
|
|
PHP_FUNCTION(connection_aborted);
|
|
|
|
PHP_FUNCTION(connection_status);
|
|
|
|
PHP_FUNCTION(ignore_user_abort);
|
|
|
|
|
1999-11-01 01:07:51 +00:00
|
|
|
PHP_FUNCTION(getservbyname);
|
|
|
|
PHP_FUNCTION(getservbyport);
|
1999-11-02 03:47:09 +00:00
|
|
|
PHP_FUNCTION(getprotobyname);
|
|
|
|
PHP_FUNCTION(getprotobynumber);
|
1999-11-01 01:07:51 +00:00
|
|
|
|
2000-06-21 22:51:29 +00:00
|
|
|
PHP_NAMED_FUNCTION(php_if_crc32);
|
|
|
|
|
2000-09-01 16:10:17 +00:00
|
|
|
PHP_FUNCTION(register_tick_function);
|
|
|
|
PHP_FUNCTION(unregister_tick_function);
|
2006-02-16 22:49:13 +00:00
|
|
|
#ifdef HAVE_GETLOADAVG
|
2006-02-18 05:41:59 +00:00
|
|
|
PHP_FUNCTION(sys_getloadavg);
|
2006-02-16 22:49:13 +00:00
|
|
|
#endif
|
2000-05-29 16:13:38 +00:00
|
|
|
|
2000-09-08 22:26:07 +00:00
|
|
|
PHP_FUNCTION(is_uploaded_file);
|
2000-09-09 11:41:14 +00:00
|
|
|
PHP_FUNCTION(move_uploaded_file);
|
2000-09-08 21:56:47 +00:00
|
|
|
|
2000-03-04 02:59:14 +00:00
|
|
|
/* From the INI parser */
|
|
|
|
PHP_FUNCTION(parse_ini_file);
|
2008-11-05 21:35:02 +00:00
|
|
|
PHP_FUNCTION(parse_ini_string);
|
2008-04-15 08:44:21 +00:00
|
|
|
#if ZEND_DEBUG
|
|
|
|
PHP_FUNCTION(config_get_hash);
|
|
|
|
#endif
|
2000-03-04 02:59:14 +00:00
|
|
|
|
2001-12-06 21:39:01 +00:00
|
|
|
PHP_FUNCTION(str_rot13);
|
2003-01-05 03:24:38 +00:00
|
|
|
PHP_FUNCTION(stream_get_filters);
|
2003-05-19 15:35:06 +00:00
|
|
|
PHP_FUNCTION(stream_filter_register);
|
2003-02-24 21:56:19 +00:00
|
|
|
PHP_FUNCTION(stream_bucket_make_writeable);
|
|
|
|
PHP_FUNCTION(stream_bucket_prepend);
|
|
|
|
PHP_FUNCTION(stream_bucket_append);
|
|
|
|
PHP_FUNCTION(stream_bucket_new);
|
2002-12-31 18:39:36 +00:00
|
|
|
PHP_MINIT_FUNCTION(user_filters);
|
2003-08-07 19:53:31 +00:00
|
|
|
PHP_RSHUTDOWN_FUNCTION(user_filters);
|
2011-05-01 18:37:20 +00:00
|
|
|
PHP_RSHUTDOWN_FUNCTION(browscap);
|
2001-12-06 19:02:27 +00:00
|
|
|
|
2009-11-22 18:31:01 +00:00
|
|
|
/* Left for BC (not binary safe!) */
|
2014-12-13 22:06:14 +00:00
|
|
|
PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers);
|
|
|
|
PHPAPI int _php_error_log_ex(int opt_err, char *message, size_t message_len, char *opt, char *headers);
|
|
|
|
PHPAPI int php_prefix_varname(zval *result, zval *prefix, char *var_name, size_t var_name_len, zend_bool add_underscore);
|
2000-08-21 09:50:53 +00:00
|
|
|
|
1999-12-13 18:31:29 +00:00
|
|
|
#if SIZEOF_INT == 4
|
|
|
|
/* Most 32-bit and 64-bit systems have 32-bit ints */
|
1999-12-26 00:18:44 +00:00
|
|
|
typedef unsigned int php_uint32;
|
2001-07-18 22:54:55 +00:00
|
|
|
typedef signed int php_int32;
|
1999-12-13 18:31:29 +00:00
|
|
|
#elif SIZEOF_LONG == 4
|
|
|
|
/* 16-bit systems? */
|
1999-12-26 00:18:44 +00:00
|
|
|
typedef unsigned long php_uint32;
|
2006-11-14 14:42:42 +00:00
|
|
|
typedef signed long php_int32;
|
1999-12-13 18:31:29 +00:00
|
|
|
#else
|
|
|
|
#error Need type which holds 32 bits
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define MT_N (624)
|
|
|
|
|
2003-08-05 10:29:03 +00:00
|
|
|
typedef struct _php_basic_globals {
|
1999-11-28 00:31:02 +00:00
|
|
|
HashTable *user_shutdown_function_names;
|
|
|
|
HashTable putenv_ht;
|
2014-02-10 08:18:01 +00:00
|
|
|
zval strtok_zval;
|
1999-11-28 00:31:02 +00:00
|
|
|
char *strtok_string;
|
2015-01-08 22:41:13 +00:00
|
|
|
zend_string *locale_string; /* current LC_CTYPE locale (or NULL for 'C') */
|
|
|
|
zend_bool locale_changed; /* locale was changed and has to be restored */
|
2001-08-03 08:49:19 +00:00
|
|
|
char *strtok_last;
|
|
|
|
char strtok_table[256];
|
2014-08-25 17:24:55 +00:00
|
|
|
zend_ulong strtok_len;
|
1999-11-28 00:31:02 +00:00
|
|
|
char str_ebuf[40];
|
2007-11-02 19:40:39 +00:00
|
|
|
zend_fcall_info array_walk_fci;
|
|
|
|
zend_fcall_info_cache array_walk_fci_cache;
|
|
|
|
zend_fcall_info user_compare_fci;
|
2003-08-05 10:29:03 +00:00
|
|
|
zend_fcall_info_cache user_compare_fci_cache;
|
2000-09-01 16:10:17 +00:00
|
|
|
zend_llist *user_tick_functions;
|
2000-10-29 23:34:33 +00:00
|
|
|
|
2014-02-10 08:18:01 +00:00
|
|
|
zval active_ini_file_section;
|
2015-01-03 09:22:58 +00:00
|
|
|
|
1999-12-12 16:48:54 +00:00
|
|
|
/* pageinfo.c */
|
2014-08-25 17:24:55 +00:00
|
|
|
zend_long page_uid;
|
|
|
|
zend_long page_gid;
|
|
|
|
zend_long page_inode;
|
2007-11-02 19:40:39 +00:00
|
|
|
time_t page_mtime;
|
1999-12-12 16:48:54 +00:00
|
|
|
|
2003-11-28 23:25:28 +00:00
|
|
|
/* filestat.c && main/streams/streams.c */
|
|
|
|
char *CurrentStatFile, *CurrentLStatFile;
|
2004-02-23 21:03:58 +00:00
|
|
|
php_stream_statbuf ssb, lssb;
|
1999-12-13 18:31:29 +00:00
|
|
|
|
|
|
|
/* rand.c */
|
1999-12-26 00:18:44 +00:00
|
|
|
php_uint32 state[MT_N+1]; /* state vector + 1 extra to not violate ANSI C */
|
|
|
|
php_uint32 *next; /* next random value is computed from here */
|
1999-12-13 18:31:29 +00:00
|
|
|
int left; /* can *next++ this many times before reloading */
|
2000-05-28 16:19:45 +00:00
|
|
|
|
2001-10-07 11:52:09 +00:00
|
|
|
unsigned int rand_seed; /* Seed for rand(), in ts version */
|
|
|
|
|
|
|
|
zend_bool rand_is_seeded; /* Whether rand() has been seeded */
|
|
|
|
zend_bool mt_rand_is_seeded; /* Whether mt_rand() has been seeded */
|
2015-01-03 09:22:58 +00:00
|
|
|
|
2000-05-28 16:19:45 +00:00
|
|
|
/* syslog.c */
|
|
|
|
char *syslog_device;
|
2000-06-23 16:21:31 +00:00
|
|
|
|
|
|
|
/* var.c */
|
|
|
|
zend_class_entry *incomplete_class;
|
2011-10-19 10:09:24 +00:00
|
|
|
unsigned serialize_lock; /* whether to use the locally supplied var_hash instead (__sleep/__wakeup) */
|
2010-05-26 07:24:37 +00:00
|
|
|
struct {
|
2014-09-21 21:42:55 +00:00
|
|
|
struct php_serialize_data *data;
|
2010-05-26 07:24:37 +00:00
|
|
|
unsigned level;
|
|
|
|
} serialize;
|
|
|
|
struct {
|
2014-09-21 21:42:55 +00:00
|
|
|
struct php_unserialize_data *data;
|
2010-05-26 07:24:37 +00:00
|
|
|
unsigned level;
|
|
|
|
} unserialize;
|
2000-08-01 07:45:14 +00:00
|
|
|
|
2000-09-19 17:32:27 +00:00
|
|
|
/* url_scanner_ex.re */
|
2000-12-18 19:23:50 +00:00
|
|
|
url_adapt_state_ex_t url_adapt_state_ex;
|
2001-05-18 23:38:46 +00:00
|
|
|
|
|
|
|
#ifdef HAVE_MMAP
|
|
|
|
void *mmap_file;
|
|
|
|
size_t mmap_len;
|
|
|
|
#endif
|
2002-02-21 03:32:42 +00:00
|
|
|
|
2002-12-31 18:39:36 +00:00
|
|
|
HashTable *user_filter_map;
|
2003-10-04 02:51:19 +00:00
|
|
|
|
|
|
|
/* file.c */
|
|
|
|
#if defined(_REENTRANT) && defined(HAVE_MBRLEN) && defined(HAVE_MBSTATE_T)
|
|
|
|
mbstate_t mblen_state;
|
|
|
|
#endif
|
2006-05-14 16:06:48 +00:00
|
|
|
|
|
|
|
int umask;
|
1999-11-28 00:31:02 +00:00
|
|
|
} php_basic_globals;
|
|
|
|
|
|
|
|
#ifdef ZTS
|
2014-10-05 17:49:41 +00:00
|
|
|
#define BG(v) ZEND_TSRMG(basic_globals_id, php_basic_globals *, v)
|
reworked the patch, less new stuff but worky
TLS is already used in TSRM, the way exporting the tsrm cache through
a thread local variable is not portable. Additionally, the current
patch suffers from bugs which are hard to find, but prevent it to
be worky with apache. What is done here is mainly uses the idea
from the RFC patch, but
- __thread variable is removed
- offset math and declarations are removed
- extra macros and definitions are removed
What is done merely is
- use an inline function to access the tsrm cache. The function uses
the portable tsrm_tls_get macro which is cheap
- all the TSRM_* macros are set to placebo. Thus this opens the way
remove them later
Except that, the logic is old. TSRMLS_FETCH will have to be done once
per thread, then tsrm_get_ls_cache() can be used. Things seeming to be
worky are cli, cli server and apache. I also tried to enable bz2
shared and it has worked out of the box. The change is yet minimal
diffing to the current master bus is a worky start, IMHO. Though will
have to recheck the other previously done SAPIs - embed and cgi.
The offsets can be added to the tsrm_resource_type struct, then
it'll not be needed to declare them in the userspace. Even the
"done" member type can be changed to int16 or smaller, then adding
the offset as int16 will not change the struct size. As well on the
todo might be removing the hashed storage, thread_id != thread_id and
linked list logic in favour of the explicit TLS operations.
2014-09-25 16:48:27 +00:00
|
|
|
PHPAPI extern int basic_globals_id;
|
1999-11-28 00:31:02 +00:00
|
|
|
#else
|
|
|
|
#define BG(v) (basic_globals.v)
|
2006-01-28 06:18:01 +00:00
|
|
|
PHPAPI extern php_basic_globals basic_globals;
|
1999-11-28 00:31:02 +00:00
|
|
|
#endif
|
|
|
|
|
1999-04-17 00:37:12 +00:00
|
|
|
#if HAVE_PUTENV
|
|
|
|
typedef struct {
|
|
|
|
char *putenv_string;
|
|
|
|
char *previous_value;
|
|
|
|
char *key;
|
|
|
|
int key_len;
|
|
|
|
} putenv_entry;
|
|
|
|
#endif
|
|
|
|
|
2007-07-21 01:24:26 +00:00
|
|
|
PHPAPI double php_get_nan(void);
|
|
|
|
PHPAPI double php_get_inf(void);
|
2004-03-27 00:50:41 +00:00
|
|
|
|
2011-09-13 22:28:15 +00:00
|
|
|
typedef struct _php_shutdown_function_entry {
|
2014-02-10 08:18:01 +00:00
|
|
|
zval *arguments;
|
2011-09-13 22:28:15 +00:00
|
|
|
int arg_count;
|
|
|
|
} php_shutdown_function_entry;
|
|
|
|
|
2014-12-13 22:06:14 +00:00
|
|
|
PHPAPI extern zend_bool register_user_shutdown_function(char *function_name, size_t function_len, php_shutdown_function_entry *shutdown_function_entry);
|
|
|
|
PHPAPI extern zend_bool remove_user_shutdown_function(char *function_name, size_t function_len);
|
|
|
|
PHPAPI extern zend_bool append_user_shutdown_function(php_shutdown_function_entry shutdown_function_entry);
|
2011-09-13 22:28:15 +00:00
|
|
|
|
2014-12-13 22:06:14 +00:00
|
|
|
PHPAPI void php_call_shutdown_functions(void);
|
|
|
|
PHPAPI void php_free_shutdown_functions(void);
|
2014-10-29 18:32:52 +00:00
|
|
|
|
|
|
|
|
2000-07-02 23:46:51 +00:00
|
|
|
#endif /* BASIC_FUNCTIONS_H */
|