Compare commits

...
Author SHA1 Message Date
Gwynne Raskind 899ad830b6 one more attempt at ridding us of some of those annoying mime types 2009-07-16 08:10:50 +00:00
Ilia Alshanetsky b0bb882cd3 Fixed bug #24313 (file_exist() warning on non-existent files when
open_basedir is used).
2003-06-24 13:42:48 +00:00
foobar 22eb8d9421 Synced PHP_SETUP_OPENSSL with PHP_SETUP_ICONV and PHP_SETUP_LIBXML macros. 2003-06-24 03:41:42 +00:00
Melvyn Sopacua 797fc138fb MFH 2002-10-07 00:34:04 +00:00
SVN Migration 212e49bc38 This commit was manufactured by cvs2svn to create branch 'unlabeled-1.1.2'. 2002-10-06 23:58:52 +00:00
Melvyn Sopacua 9eb5ddd32a MFH 2002-10-06 15:53:18 +00:00
SVN Migration bba9773649 This commit was manufactured by cvs2svn to create branch 'unlabeled-1.1.2'. 2002-10-06 15:51:34 +00:00
Rasmus Lerdorf 7630261713 MFH the read-only GIF support 2002-10-06 06:07:30 +00:00
SVN Migration 65c73c1a2d This commit was manufactured by cvs2svn to create branch 'unlabeled-1.1.2'. 2002-10-06 06:03:18 +00:00
Rasmus Lerdorf 72d90fc41c As discussed a while ago, decoding GIF images is not considered a Unisys
LZW patent violation so we can distribute read-only GIF support with
our bundled GD2.  The patent also expires in 2003, which is quickly
approaching, so we can roll in write support soon unless things change.
2002-10-06 06:03:17 +00:00
Frank M. Kromann 797a0dc33c Adding missing include path's to non TS projects 2002-10-06 02:14:22 +00:00
Frank M. Kromann 0d23670b30 Fixing comment allowing the module to compile again 2002-10-06 02:10:19 +00:00
a6166bf96b ChangeLog update 2002-10-06 00:33:38 +00:00
Andrei Zmievski f7ef0ccd17 Change HEAD version to 4.4.0-dev. 2002-10-05 20:37:12 +00:00
Derick Rethans b007bd0696 - Add parse_url() tests (expect will follow later)url_t.phpt 2002-10-05 20:28:35 +00:00
Andrei Zmievski 3d99d4fd37 *** empty log message *** 2002-10-05 20:07:44 +00:00
Melvyn Sopacua 9bb526c283 (xslt tests) Add test for new backend API (005.phpt), new function
(006.phpt) and a crash test (007.phpt)
             006.phpt also tests handling of public entities, which is in
             essence new to the extension, since there was no way to turn
             it on.
# These new functions and backend will be added shortly.
# TODO: test for xslt_set_object
2002-10-05 19:44:26 +00:00
Wez Furlong 778615bd6c sp 2002-10-05 16:25:55 +00:00
Melvyn Sopacua b83d7bbf8a (xslt tests) Test for reference to a non-existing scheme handler. 2002-10-05 16:11:46 +00:00
Melvyn Sopacua 1fbef62ae9 (xslt: error_print) Fixes a leak when multiple error messages are issued
during a transformation.
# It's probably better to wrap this in an internal function, since it's
# easily forgotten.
2002-10-05 14:04:19 +00:00
Derick Rethans cdc3b6d652 - Whitspace 2002-10-05 11:34:02 +00:00
David Reid 2a0fbded3d Add BeOS thread support to TSRM. This should not impact on any other OS's
but allows us to build PHP with threading support and therefore we can
build as an Apache 2 module.

The locking is currently done using benaphores but this may be reviewed.
2002-10-05 11:26:17 +00:00
Melvyn Sopacua 4ca381aacf remove tests entry. Fix patch entry to contain function name 2002-10-05 11:00:56 +00:00
Wez Furlong 9d5bab5a0d EOF related fixes. 2002-10-05 10:59:35 +00:00
Wez Furlong 93f9eea77d Revert. The problem lies elsewhere. 2002-10-05 10:58:55 +00:00
Wez Furlong ae36c08b54 Fix Win32 build as PHP_CONFIG_FILE_SCAN_DIR is not #defined. 2002-10-05 10:55:54 +00:00
Wez Furlong 077fe52d8b This seems to resolve the issues with fgets.
I've moved EOF detection into the streams layer; a stream reader
implementation should set stream->eof when it detects EOF.
Fixed test for user streams - it still fails but that is due to an output
buffering bug.
2002-10-05 10:35:13 +00:00
Markus Fischer 945ccfa76a - Remove superfluous E_WARNING if mysql_connect() fails; there's already
an E_WARNING a few lines above.
2002-10-05 00:54:31 +00:00
6b6fb53d86 NEWS update 2002-10-05 00:34:31 +00:00
23a68c448a ChangeLog update 2002-10-05 00:33:20 +00:00
David Viner 4f98cc5a55 adding the xslt_set_object function (as per discussion on php-dev and
the newly created sab-php@gingerall.cz)
--dviner
2002-10-04 23:06:10 +00:00
David Viner 1665272cee adding segfault detection as proposed by Lenar Lõhmus [lenar@vision.ee]
--dviner
2002-10-04 22:43:55 +00:00
Stefan Esser 4368b8e4ac some FTP servers return 32bit port numbers. 2002-10-04 22:20:08 +00:00
Brian France 3340e82508 Fixed a problem where opendir with <path>/ and having <path>/ in
open_basedir ini option didn't work.  It was removing the trailing
        slashes and then addeding it back to only one of the string,
        now it adds it back to to both if needed.
2002-10-04 22:16:16 +00:00
Stefan Esser 87c0577a0c some broken ftp servers return 32bit port numbers. 2002-10-04 21:58:39 +00:00
Ilia Alshanetsky 29be52fbfb A slightly better content-type check. 2002-10-04 21:31:34 +00:00
Ilia Alshanetsky 5f67f05d92 Added a note on how to enable .phps support. 2002-10-04 21:22:13 +00:00
Marcus Boerger 2e90bbe3c2 Return to old counting where every test is counted (even those of skipped
extensions). Inform about the number of extensions tested and skipped.
This makes the test summary more compareable.

Maybe i'll add a parameter/env-var to skip extension tests. That way we
could fasten tests for changes in the core. But it has to wait some days.
2002-10-04 21:19:51 +00:00
Ilia Alshanetsky 9f2b70d507 Added .phps support to Apache 2. It can be enabled by adding
AddType application/x-httpd-php-source .phps
to httpd.conf
2002-10-04 21:15:59 +00:00
Sterling Hughes df837e67c7 have implode use the smart_str_*() functions, this should speed things up
quite a bit...
2002-10-04 20:44:19 +00:00
Martin Jansen 1fe42e10b7 * Nuke warning when $php_errormsg is not set. 2002-10-04 20:00:51 +00:00
Sascha Schumann bfd2a857b2 Fix EOF cases
Noticed by: Ilia
2002-10-04 19:48:59 +00:00
Sascha Schumann 1918011c01 Interrupt loop, if the stream op fails. 2002-10-04 19:36:09 +00:00
Sascha Schumann 5e97e66abb Nuke warning 2002-10-04 19:20:13 +00:00
Sascha Schumann a4ec211e9e Add a few notes 2002-10-04 19:08:43 +00:00
Wez Furlong c429805e0b Make that error message more meaningful for systems like my SuSE 7.0 with
an apparently broken magic file.
2002-10-04 19:01:34 +00:00
Wez Furlong 9c5883bdf6 replace dont_block with a flag. 2002-10-04 18:59:34 +00:00
Ilia Alshanetsky 08645d53c0 Fixed bug #19746 2002-10-04 18:44:47 +00:00
Sascha Schumann 4f7e6dadd8 Improve the general behaviour of stream_gets and fix its semantics
with regard to sockets. The behaviour should be aligned with PHP 4.2 now.
This has been verified to some degree.

If the underlying stream operations block when no new data is readable,
we need to take extra precautions.

If there is buffered data available, we check for a EOL. If it exists,
we pass the data immediately back to the caller. This saves a call
to the read implementation and will not block where blocking
is not necessary at all.

If the stream buffer contains more data than the caller requested,
we can also avoid that costly step and simply return that data.
2002-10-04 18:21:40 +00:00
Rasmus Lerdorf 5610e348ec Kill a few more warnings 2002-10-04 18:03:29 +00:00
Rasmus Lerdorf 2ca6f26918 Kill warning 2002-10-04 18:01:52 +00:00
foobar 189ce6a308 combine those ob_* entries and keep the attention line on top 2002-10-04 17:28:48 +00:00
Marcus Boerger 3d6ecdeff0 return FALSE on error 2002-10-04 17:17:01 +00:00
Marcus Boerger 518e61de97 suggest paranthesis around || and && 2002-10-04 17:11:35 +00:00
Sander Roobol e6e2c1c70d Fixed a bug in the new implementation of str_repeat() 2002-10-04 17:10:51 +00:00
Derick Rethans ec6713f1ca - dot :) 2002-10-04 16:55:46 +00:00
Sterling Hughes 5605dcf7b6 fix a memory leak in implode()
# kept seperate from last commit on purpose.. ;)
2002-10-04 16:54:56 +00:00
Sterling Hughes abc9991925 @ Make the glue argument to implode() optional, if it is not specified
@ default to using "". (Sterling)
2002-10-04 16:53:14 +00:00
Andrei Zmievski 03823d4336 that was reverted for now 2002-10-04 14:12:13 +00:00
Melvyn Sopacua c4805ffeb1 Improve testkit for xslt.
002.phpt and 003.phpt are regression tests for reported bugs.
 004.phpt has been known to cause problems in some Sab/PHP combinations.
 No known reports in bug db for that one.
 Added skip mechanism
@- Added regression test for bugs #17791 and #17931 (Melvyn)
2002-10-04 11:41:34 +00:00
Melvyn Sopacua 7f1ad2395d (xslt_set_error_handler) Fixes array 'fields' argument to contain correct
information.
                         Patch by Lenar Lohmus.
@- Fixed fields argument to contain correct info. (Lenar Lohmus)
2002-10-04 09:22:03 +00:00
Sebastian Bergmann 1014d78515 Add PHP_CONFIG_FILE_SCAN_DIR. 2002-10-04 05:22:13 +00:00
Rasmus Lerdorf 989a61ed98 As discussed, add --with-config-file-scan-dir compile-time switch defining
a directory which will be scanned for *.ini files after the main php.ini
file has been parsed.  This makes it much easier to automatically deploy
a modular PHP since adding extensions which have their own ini switches can
now be done by simply dropping a foo.ini file in the right directory and
restarting.  A list of parsed ini files is maintained and shown on the
phpinfo page.
2002-10-04 04:47:35 +00:00
Sean Bright 114dff39ce Add missing ?> 2002-10-04 02:34:15 +00:00
Sascha Schumann df0ea33d2b peek at freebsd's libc and fix _php_math_basetozval
PR: #19733
2002-10-04 02:21:33 +00:00
Sascha Schumann cfaffd2185 overflow check for _php_math_basetozval 2002-10-04 02:20:41 +00:00
Sascha Schumann 397277b8c3 Fix php_stat brokenness. 2002-10-04 01:05:03 +00:00
Sascha Schumann db3f7448a1 Add VCWD_ACCESS 2002-10-04 01:04:00 +00:00
4f05796a75 NEWS update 2002-10-04 00:35:27 +00:00
d42349737f ChangeLog update 2002-10-04 00:34:21 +00:00
Sascha Schumann fb84b3e1d0 remove trans_sid=1 2002-10-03 23:13:36 +00:00
Sascha Schumann 5db24fbb7b 20: rewriter uses arg_seperator.output for modifying URLs
21: rewriter handles <form> and <fieldset> correctly
2002-10-03 23:12:16 +00:00
Sascha Schumann 47cc29c9d1 19: serializing references test case using globals
18: rewriter correctly handles attribute names which contain dashes
2002-10-03 22:54:15 +00:00
foobar 0c66e1ccf6 sigh..is this so hard? 2002-10-03 22:26:43 +00:00
Andrei Zmievski a38123e756 Revert the patch for now. We'll be branching on Saturday the way it's
implemented is a bit half-baked. We can always merge it into the branch
at a later point.
2002-10-03 18:30:27 +00:00
Marcus Boerger ad120d2e28 $val not in first param to sprintf 2002-10-03 18:25:30 +00:00
Andrey Hristov 52c529c5af ws fixes.
#again :)
2002-10-03 18:15:18 +00:00
Sascha Schumann eab0f5965f code from ancient bug #5271
setting $_SESSION before session_start() should not cause segfault
2002-10-03 16:55:08 +00:00
Sascha Schumann 3998374a0d invalid session.save_path should not cause a segfault 2002-10-03 16:49:52 +00:00
Sascha Schumann 61e47a342e use_trans_sid should not affect SID 2002-10-03 16:43:44 +00:00
Sascha Schumann 8882b28e60 editing 2002-10-03 16:14:55 +00:00
Marcus Boerger 3ee8172674 fix position handling 2002-10-03 16:06:41 +00:00
Sascha Schumann d661fa4b46 A script should not be able to modify session.use_trans_sid 2002-10-03 15:58:10 +00:00
Sascha Schumann bb4f911035 There should not be any warning with regard to redefining SID 2002-10-03 15:52:36 +00:00
Sascha Schumann dba3e4c7ad Registering _SESSION should not segfault. 2002-10-03 15:48:18 +00:00
Sascha Schumann d4e1ac6c26 Mini test cases for fixed segfaults 2002-10-03 15:39:29 +00:00
Sascha Schumann 5fe046c4c3 session_decode should not segfault 2002-10-03 15:33:00 +00:00
Sascha Schumann e24247e632 Remove ob_start() 2002-10-03 15:19:55 +00:00
Sascha Schumann 16f54aaca8 Add test for unset($_SESSION["x"]); behaviour 2002-10-03 15:19:43 +00:00
Sascha Schumann c4adf94fbd make tests work with CLI 2002-10-03 15:11:01 +00:00
Sascha Schumann 7e03310a6a Don't emit warning, if there is nothing to send 2002-10-03 15:10:36 +00:00
Ilia Alshanetsky 2ea2b662a4 Optimized str_repeat() function, it is now 10x faster on 1 byte multipliers
and 5-6x faster on multi-byte multipliers.
2002-10-03 13:59:31 +00:00
Yasuo Ohgaki 39b0eb9b22 Fixed broken code by Derick.
ob_implicit_flush() and ob_flush_all() are stopped working.
var_dump() and hightlisht_string() outputs buffer contents wrongly
with ob_implicit_flush().

Everyone should be happy now.
It was only OG(implicit_flush) interpretation issue after all.
2002-10-03 13:32:01 +00:00
Andrey Hristov 76a104feb8 colon written instead of semi-colon. 2002-10-03 13:03:21 +00:00
Stefan Esser 8fae3d7a49 swapped conditions to correct the logic 2002-10-03 12:16:44 +00:00
Andrey Hristov ae70a4e458 few ws fixes. 2002-10-03 12:06:52 +00:00
James Moore df431074de Keep comments and code in sync. 2002-10-03 11:56:10 +00:00
Stefan Esser 7b7c45dda2 Tell everyone that I am the ext/ftp maintainer... 2002-10-03 11:40:05 +00:00
Stefan Esser 4381225c1b Added news entry about ftp_ssl_connect() 2002-10-03 11:38:03 +00:00
Stefan Esser b220b7113f Added ftp_ssl_connect() for FTP over SSL. 2002-10-03 11:33:05 +00:00
Zeev Suraski d58c3dda96 Guys, please keep K&R. 2002-10-03 11:18:39 +00:00
Sebastian Bergmann b169932d1c Fix warnings. 2002-10-03 11:08:09 +00:00
Derick Rethans dbc6935c16 - Fix descriptions 2002-10-03 11:00:13 +00:00
Derick Rethans 7ad71ed442 - Add highlight_string buffering test 2002-10-03 10:47:47 +00:00
Marcus Boerger 9f8b57fb57 typing 2002-10-03 10:44:13 +00:00
Derick Rethans b6323ef5e2 - Add tests 2002-10-03 10:43:43 +00:00
Andrey Hristov cebb0f76b8 ws fixes. 2002-10-03 10:42:57 +00:00
Derick Rethans 9b517c4b93 - Revert changed to implicit_flush behavior. The new behavior was not
intended in the first place.
2002-10-03 10:35:33 +00:00
Andrey Hristov 5084c5ecfc Added some info about new functions and changed functionality in old ones. 2002-10-03 10:25:21 +00:00
Yasuo Ohgaki b52edbddf9 Shouldn't enable implicit_flush like this.
Most problems are fixed. If you find internal function that does
not follow my comment, please fix it or let me know.
2002-10-03 09:57:53 +00:00
Yasuo Ohgaki b0fcd61207 Fixed broken higlight_string() 2002-10-03 09:19:31 +00:00
Stefan Esser 8827f8eca9 renamed ftp_async_* into ftp_nb_* 2002-10-03 09:10:24 +00:00
Jan Lehnardt aadb0c910b - Added wddx_serialize_type(). Allows users to cast values to WDDX types
@- Added wddx_serialize_type(). Allows users to cast values to WDDX types (jan)
2002-10-03 08:56:10 +00:00
Yasuo Ohgaki 1731767272 Prevent unwanted fluhsing. 2002-10-03 08:54:45 +00:00
Yasuo Ohgaki 6c7202e116 Added comment for php_output_set_status().
Please use this function if you would like to prevent unwanted flush
by implicit_flush=On or ob_implicit_flush().
2002-10-03 08:54:13 +00:00
Sascha Schumann 114c544b9b Purge ini_set calls and replace through INI sections. 2002-10-03 08:07:21 +00:00
Andi Gutmans b276a96f4b - Fix ZTS build 2002-10-03 07:23:50 +00:00
Yasuo Ohgaki 0a6f5f9996 Update test 2002-10-03 07:19:27 +00:00
Yasuo Ohgaki 66a50c5373 Added ob_flush_all() that flushes bufferred contents until it actually
sent/printed.
@ Added ob_flush_all() that flushes all buffers. (Yasuo)
2002-10-03 07:17:14 +00:00
Sascha Schumann 4fbf3f77c0 move gc_maxlifetime one up 2002-10-03 06:52:23 +00:00
Sascha Schumann 04b66595a7 Add recommened entries, including disabling the session bug/feature 2002-10-03 06:51:38 +00:00
Sascha Schumann 0ccb5d98b4 Add new session options 2002-10-03 06:49:33 +00:00
Sascha Schumann 13f5db1b67 Make the interpretation of gc_probability configurable by adding
session.gc_dividend. The probability of running gc on each request is then
gc_probability/gc_dividend.
2002-10-03 06:45:15 +00:00
Sascha Schumann be319c721a Reenable E_WARNING and test session.bug_compat_warn in addition. 2002-10-03 06:41:25 +00:00
Sascha Schumann afb1458910 session_destroy resets the sid, so we need to set it again here 2002-10-03 06:33:19 +00:00
Sascha Schumann 356ea7ffbd Verify PHP 4.2 compatibility: global is used albeit register_globals=0 2002-10-03 06:32:45 +00:00
Sascha Schumann 0ed434a13b Use ZEND_SET_SYMBOL_WITH_LENGTH correctly (hopefully)
It strikes me as awkward that a Zend API user needs to take care of
doing the engine's reference counting.

This fixes a memory overrun in a testcase.  All ZEND_SET_* calls
should be correct now.
2002-10-03 06:29:58 +00:00
Sascha Schumann 15b23945ad (track_init) Use is_ref/refcount parameters of SET_SYMBOL macros
(save_current_state) Prevent a possible deadlock which occurs when
the track vars are inaccessible
2002-10-03 05:53:45 +00:00
Sascha Schumann d4ef4079de Verify PHP 4.2 compatibility: unset($c) with enabled register_globals 2002-10-03 05:06:01 +00:00
Yasuo Ohgaki f6dfd6b184 Forgot 1 byte for \0 2002-10-03 04:56:54 +00:00
Yasuo Ohgaki 5f1bb18c36 Save memory 2002-10-03 04:54:01 +00:00
Sascha Schumann 8a586103fc Align behaviour with 4.2 with regard to register_globals=1
session_register("c");
unset($c);
$c = time();

If a user unsets a global session variable, it is not a reference
to a $_SESSION slot anymore.

During serialization, PHP 4.2 will not find the respective entry in
$_SESSION and fall back to the global sym table.
2002-10-03 04:53:05 +00:00
Yasuo Ohgaki f534dc8f47 Added missing proto and foldings. 2002-10-03 04:17:41 +00:00
Yasuo Ohgaki 22bf29384e Move wrong output buffer usage check to ob_gzhandler init.
Export some output buffer functions.
2002-10-03 03:58:12 +00:00
Sascha Schumann b9077e5a9d Nuke PS(vars), we keep the state of registered session variables now
completely in PS(http_session_vars). This avoids bugs which are caused
by a lack of synchronization between the two hashes. We also don't need
to worry about prioritizing one of them.

Add session.bug_compat_42 and session.bug_compat_warn which are enabled
by default. The logic behind bug_compat_42:

IF bug_compat_42 is on, and
IF register_globals is off, and
IF any value of $_SESSION["key"] is NULL, and
IF there is a global variable $key, then
$_SESSION["key"] is set to $key.

The extension emits this warning once per script, unless told otherwise.

"Your script possibly relies on a session side-effect which existed until
PHP 4.2.3. Please be advised that the session extension does not consider
global variables as a source of data, unless register_globals is enabled.
You can disable this functionality and this warning by setting
session.bug_compat_42 or session.bug_compat_warn.
2002-10-03 03:23:02 +00:00
Yasuo Ohgaki bec4574f57 Made some functions inline.
Added static for unexported functions.
2002-10-03 02:55:19 +00:00
Yasuo Ohgaki 22220d8983 Rename pg_data_seek() to pg_result_seek().
Give a correct credit for Marcus and Wez.
2002-10-03 02:41:19 +00:00
Yasuo Ohgaki 1b675aa690 Rename pg_data_seek() to pg_result_seek().
Added mysql_result_seek() which is alias of mysql_data_seek().
2002-10-03 02:32:09 +00:00
Yasuo Ohgaki bd177ce7c1 Added ob_get_clean() and ob_get_flush().
Someone requested this feature before.
@ Added ob_get_clean() and og_get_flush(). (Yasuo)
2002-10-03 01:36:44 +00:00
Ilia Alshanetsky 01830c0d27 Added missing TSRMLS_DC to php_apache_lookup_uri() 2002-10-03 01:28:04 +00:00
8babbff1f7 ChangeLog update 2002-10-03 00:35:16 +00:00
David Reid 9b10843481 Add more BeOS support... 2002-10-02 23:52:08 +00:00
David Reid cf2e12a01e Add some more BeOS support. 2002-10-02 23:48:58 +00:00
Daniela Mariaschi 69a6289e8c syntax to avoid error while reading data from file in ibase_blob_import 2002-10-02 23:05:06 +00:00
foobar 822e342739 stylissimo 2002-10-02 22:34:40 +00:00
foobar ac1254a59c unify these files to conform with the new files created by run-tests.php 2002-10-02 22:31:37 +00:00
Sascha Schumann 4ea4f294b6 Fix harmless memory leaks and simplify track_vars_init. 2002-10-02 21:51:32 +00:00
Ilia Alshanetsky e4e71fe5ca Notes about additions to Apache 2 sapi. 2002-10-02 21:34:01 +00:00
Stig Bakken 0a51b3e871 * we're releasing 1.0 along with PHP 4.3, so this is 1.0RC1 2002-10-02 21:33:35 +00:00
Stig Bakken 01daca5e10 * add support for http proxy authorization (thanks Arnaud) 2002-10-02 21:27:25 +00:00
Ilia Alshanetsky ca0aced7c9 Added apache_response_headers(), apache_note(), apache_getenv() and
apache_setenv() functions.
The getallheaders() is renamed to apache_request_headers() and an
getallheaders() is aliased to it.
Added a better error reporting mechanism to apache_lookup_uri() and virtual().
2002-10-02 21:22:44 +00:00
Andrey Hristov 83a0f20381 Making strrchr() binary safe.
Test case added.
2002-10-02 18:58:09 +00:00
Andrey Hristov 2092d80230 Making strstr() binary safe. 2002-10-02 18:41:55 +00:00
Andrey Hristov b2d93b67fc Ws fix. Forgot to add this in the previous commit. 2002-10-02 18:13:56 +00:00
Andrey Hristov f02b1507dc ws fixes. 2002-10-02 17:56:04 +00:00
Derick Rethans f85e6fe51d - Added CURLOPT_FTP_USE_EPSV option. (Patch by Alex Howansky
<alex@wankwood.com>)
2002-10-02 16:44:48 +00:00
Marcus Boerger 84fa2fd9a8 Better... 2002-10-02 15:40:57 +00:00
Marcus Boerger 1e6557f664 Fix implicit_flush 2002-10-02 15:36:29 +00:00
Marcus Boerger ff51ed7c6f Modified get_status(): Display chunk_size allways and size which is in
most cases initial_size as well as block_size only when used.
2002-10-02 15:10:11 +00:00
Marcus Boerger d4bba6d158 Revisted Wez patch: chunk_size 0 means cahce the whole output. So
we must apply the default before calling php_enable_output_compression().
I have left the default setting in the rinit function even though i do think
it is not necessary.
2002-10-02 15:02:16 +00:00
Colin Viebrock f871f3870d Fix for SRM module (and maybe others). Header rows are now not HTML
escaped, so make sure you do this yourself in the modules.
2002-10-02 14:27:32 +00:00
Marcus Boerger 4a1d83aa8c Another missing variable init
#Wez shouldn't "stream->filterhead->fops->flush()" affect return value also?
2002-10-02 13:25:38 +00:00
Marcus Boerger efec24d22d Missing variable init 2002-10-02 13:18:01 +00:00
Harald Radi afb75a45e9 fixes bugs #19156 and #19544 2002-10-02 12:53:51 +00:00
Marcus Boerger 614d10a8cb Check for C99 conformance of snprintf.
#This way we force using internal version if a broken library is used.
#E.g. length parameter is broken, return value or default precision wrong.
2002-10-02 12:52:53 +00:00
Sascha Schumann 6683334066 Another Linux x86 system returns ELIMIT so we need to check errno as well
before assuming that pread/pwrite work.
2002-10-02 08:32:26 +00:00
Sascha Schumann 875c1da58e Reflect actual stance wrt cli/cgi 2002-10-02 08:14:47 +00:00
Yasuo Ohgaki 2300bddb9c Fixed pg_escape_typea() 2002-10-02 06:30:40 +00:00
Yasuo Ohgaki 520486e8b1 Clean up a little. 2002-10-02 06:22:52 +00:00
Sascha Schumann e1dd35bddb The pread/pwrite macros check for a bug in the Linux glibc now.
The bug causes the kernel not to return -1/EAGAIN. The new test case
has been borrowed from the Linux Test Project.

This also fixes a bug which apparently caused HAVE_PREAD/WRITE to be
defined even if the more complex checks failed (ac_cv_func_NAME=no
was set albeit with no difference).
2002-10-02 06:05:16 +00:00
Yasuo Ohgaki d4c7e8bbaf Improve test to show output bufferring bypass bug clearly. 2002-10-02 05:29:06 +00:00
Yasuo Ohgaki 69957c56b3 Added pg_unescape_bytea(). Fixed pg_data_seek().
php_pgsql_unescape_bytea(PQunescapeBytea) is shamelessly stolen from PostgreSQL 7.3 :)
2002-10-02 04:03:21 +00:00
Yasuo Ohgaki 2745e8b9b2 Add some example functions for mysql users. 2002-10-02 03:32:27 +00:00
Yasuo Ohgaki 82e7bea504 pg_data_seek() 2002-10-02 03:17:30 +00:00
Yasuo Ohgaki b8fdd3c7ae Added pg_data_seek().
pg_result_seek() woudl be better name, but there is mysql_data_seek()...
2002-10-02 03:16:35 +00:00
Yasuo Ohgaki 2728440fdc Added pg_ping() 2002-10-02 02:41:21 +00:00
Yasuo Ohgaki f8f11ac0a2 Rename pg_metadata() to pg_meta_data() to confirm naming standard 2002-10-02 02:11:27 +00:00
foobar fc721174c8 - Run ext/* tests only for those modules that are actually compiled
into the php binary. (faster)
- Skip search of .phpt files if they are passed as parameters
2002-10-02 01:52:25 +00:00
0662a009db ChangeLog update 2002-10-02 00:33:32 +00:00
Stefan Esser a87f4afc35 repairing the chaos
utime("filename", NULL) is not only valid but a MUST on linux if you are
not the owner...
2002-10-01 21:53:25 +00:00
Andi Gutmans aa7bffeec6 - Fix problem when crashing on illegal tokens in class name during class
- definition.
2002-10-01 20:00:45 +00:00
Sascha Schumann 8b78c78973 Disable pread/pwrite for now until we can clarify why it should be
impossible to write a check for a broken OS feature.
2002-10-01 19:19:10 +00:00
Sascha Schumann 856cd5e17a The session extension ensures now that get_session_var can rely
on the state of $_SESSION/$HTTP_SESSION_VARS. It does not look up
symbols in the global symbol table anymore.

This was achieved by actually planting references between every
$_SESSION["x"] and $x, not only when restoring a session, but also
when registering a session variable (in a register_globals=1 context).

Upon registering a new variable, this memory leak continues to show
up, regardless of register_globals.

ext/session/session.c(272) :  Freeing 0x0818F01C (12 bytes), script=test

Obviously, the newly allocated empty zval is not properly freed.  If anyone
has any idea on how to fix that, please step forward.
2002-10-01 11:59:45 +00:00
Yasuo Ohgaki 7cacf9713d WS and added missing output.
It seems this bug is fixed in latest version at least.
2002-10-01 11:18:31 +00:00
Zeev Suraski 2c4b6fff6d Fix warnings 2002-10-01 10:16:40 +00:00
Yasuo Ohgaki 2c7440537d Bug fix 2002-10-01 10:04:04 +00:00
Yasuo Ohgaki e92abff88b Fixed bug #17825. Double zval_ptr_dtor(). 2002-10-01 10:01:56 +00:00
Yasuo Ohgaki 2ecf6161b8 Implicit flush fix 2002-10-01 02:54:30 +00:00
foobar 47ca8127bb - Revert the removal of dlopen check here.
# Left HAVE_LIBDL undefined for some reason
2002-10-01 02:47:52 +00:00
Yasuo Ohgaki 3d8e33f06a Fixed implicit flush. 2002-10-01 02:43:33 +00:00
foobar 8634346e73 - Removed unnecessary dlopen checks. (this is done in Zend.m4 already) 2002-10-01 01:47:09 +00:00
foobar c12bd04609 some typos fixed.. 2002-10-01 01:40:07 +00:00
6896ba5d8a NEWS update 2002-10-01 00:35:04 +00:00
b9cb4f9442 ChangeLog update 2002-10-01 00:34:05 +00:00
Yasuo Ohgaki ecf146cbce Users can shoot themselves by their own output handler always.
Therefore, this check is overkill and it should be documented
limitation, IMO.

Anyway, a little optimization.
2002-09-30 23:46:43 +00:00
David Reid 6477b0b5d8 Use the built in autoconf test for fnmatch. Simply using the
AC_CHECK_FUNCS seems to give false positives on beos and reading
the comments on other systems as well.
2002-09-30 23:31:13 +00:00
Derick Rethans d23c9b24ca - No tabs :) 2002-09-30 10:34:40 +00:00
Wez Furlong 7bcc97c82e Add header file required for pread/pwrite (on my system at least). 2002-09-30 10:18:57 +00:00
Wez Furlong 4356932dfe Fix infinite recursion bug when using zlib output compression.
Cause: the chunk size is taken from the zlib.output_compression setting,
which is 0 or 1.  This causes the block_size for output buffer to be set
to 0 (1 / 2) and thus causes infinite recursion in php_ob_allocate().
Solution: use a value of 0 for the chunk size which will use the default
sizes.  Also add a sanity check which will default the block_size to 1
if it ends up as 0.
2002-09-30 10:18:06 +00:00
Edin Kadribasic 6e0c5d0fdc Those can be safely ignored. 2002-09-30 09:48:54 +00:00
Derick Rethans 3b99744f0b - Fix ZE2 build when overload is enabled 2002-09-30 09:40:12 +00:00
Yasuo Ohgaki 3053ba7b9c Fixed typo.
# Thanks to Andrey Hristov.
2002-09-30 09:35:04 +00:00
Uwe Steinmann 86e3e1ac85 - make_objrec_from_array() gets a second parameter to handle key/pairs of
the form key=value and key:value.
- Proper treatment of the attribute SQLStmt
2002-09-30 09:27:56 +00:00
Yasuo Ohgaki d378a2c959 Remove space 2002-09-30 09:15:23 +00:00
Yasuo Ohgaki 545f894524 Added pg_fetch_assoc(). Fixed proto. Added/fixed comments.
# It seems last attempt was failed. Try committing again.
2002-09-30 09:07:57 +00:00
Wez Furlong 81684ed0f2 Even better. 2002-09-30 09:07:10 +00:00
Wez Furlong 5de7ae1fc7 Slight grammar fix. 2002-09-30 09:04:48 +00:00
Yasuo Ohgaki 9049e7547c Consolidate some entries. 2002-09-30 08:32:03 +00:00
Yasuo Ohgaki 6dbe013b9e Fixed my name :) 2002-09-30 08:26:54 +00:00
Yasuo Ohgaki 95ed0fb2d5 Added pg_fetch_assoc() 2002-09-30 08:26:23 +00:00
Yasuo Ohgaki 5a6703484d Use PGSQL_CONV_FORCE_NULL as it is supposed.
PGSQL_CONV_FORCE_NULL inserts NULL to field instead of
NULL string for string type tuples.
2002-09-30 07:35:41 +00:00
Yasuo Ohgaki 788e4070b6 Use of PGSQL_CONV_INGORE_NOT_NULL as it is supposed. Change comment a little. 2002-09-30 07:24:41 +00:00
Tim Toohey 6a952f0856 fix gdImageCopyResampled() for non-constant alpha layer 2002-09-30 07:23:34 +00:00
Derick Rethans 4cd4878fc6 - Rewording 2002-09-30 05:20:17 +00:00
Sascha Schumann 21300f5e5a sync 2002-09-30 04:59:01 +00:00
Sascha Schumann aa9bb5aefa Fix my stupid mistake which broke <form> handling 2002-09-30 04:56:38 +00:00
Sascha Schumann 2405fcf38c Apparently, Solaris 2.6's find is overwhelmed with more than 2 -names per
invocation (add some parantheses and it segfaults).  And thus, we split
the clean target up.
2002-09-30 04:42:11 +00:00
Yasuo Ohgaki dbd1a45d70 Fix TODO desc 2002-09-30 04:15:39 +00:00
Yasuo Ohgaki b7d1a58e25 Remove unused def. Add TODO. 2002-09-30 04:15:01 +00:00
Yasuo Ohgaki 90fc47f4d1 Improve error message. Fix proto. 2002-09-30 03:51:54 +00:00
Jon Parise 033224784b @ - Added getopt() for parsing command line options and arguments. (Jon) 2002-09-30 03:02:52 +00:00
Jason Greene 06ad8620db Fix thread safety issue 2002-09-30 02:09:42 +00:00
Yasuo Ohgaki 6e91aed069 Added warning for CLI and CGI SAPI changes. Fixed wrong description for 4.2.0. 2002-09-30 00:47:43 +00:00
a599bb0f98 ChangeLog update 2002-09-30 00:34:59 +00:00
Sascha Schumann d9655f8c68 remove unused lines 2002-09-30 00:03:09 +00:00
Wez Furlong 388bfe5ffe Prevent possible problems with two resource ids referencing the same
panel.
2002-09-29 22:55:09 +00:00
foobar 350340241c Possible fix for #19290 2002-09-29 22:24:20 +00:00
Ilia Alshanetsky 7f18442882 Fixed a mem leak inside the path resolving code. 2002-09-29 22:16:29 +00:00
Markus Fischer 0fb5efd59b - Update 2002-09-29 22:13:16 +00:00
Ilia Alshanetsky 0454bf2d0d Removed the ceil(-0.5); test. The return value is depedant on system's
libc and even when proper value '-0' is returned, var_dump() converts
it to 0 anyway.
2002-09-29 21:45:54 +00:00
foobar 5346391d16 ws fix 2002-09-29 19:28:12 +00:00
foobar 7aaa6bd77d ws fix 2002-09-29 19:22:39 +00:00
Ilia Alshanetsky 0e7e7ae961 Corrected ceil(-0.5) output value, it is 0 not -0. 2002-09-29 19:21:10 +00:00
foobar 3cf681c1d9 Make it compile with the latest _release_ too.. 2002-09-29 18:53:19 +00:00
Ilia Alshanetsky 4c4d5a617b Fixed a crash, which would occur when save_handler is invalid. 2002-09-29 18:33:14 +00:00
Sascha Schumann 5c35fad893 Fix some typos 2002-09-29 16:25:23 +00:00
Sascha Schumann e6e54605b7 Follow Yasuo's suggestion and build sapi program's under the sapi-specific
directory.

Move sapi-specific makefile fragments to their respective directory.

Create an embed sapi module which resides in its own dir now.
2002-09-29 16:22:49 +00:00
Ilia Alshanetsky 2af630f87d Fixed bug #17281 2002-09-29 15:55:11 +00:00
Ilia Alshanetsky 1142e16075 Fixed bugs #16995 and #19392 2002-09-29 15:26:50 +00:00
Ilia Alshanetsky db92853cc9 Bug fixing news. 2002-09-29 14:48:10 +00:00
Ilia Alshanetsky fba852e16b Fixed bug #19366 2002-09-29 14:45:57 +00:00
Derick Rethans 57b11623b9 - Fix Edin's name 2002-09-29 10:00:07 +00:00
Edin Kadribasic 946206f0d2 Added php/embed toolkit for embedding PHP engine into C/C++ applications.
See my post to php-dev on the subject.
2002-09-29 02:45:25 +00:00
0166a14916 ChangeLog update 2002-09-29 00:34:45 +00:00
Ilia Alshanetsky 678c10e67c Bug fixing news 2002-09-28 23:39:59 +00:00
Wez Furlong 18f94ecea4 Added ncurses_getyx(). 2002-09-28 22:50:23 +00:00
Wez Furlong 4f43b74fb8 WS 2002-09-28 22:37:51 +00:00
Wez Furlong 042fdde5aa More streams related news. 2002-09-28 22:37:11 +00:00
Wez Furlong 7694770304 Rename streams functions to fit with naming conventions, adding aliases
for old functions where required.
Make use of recent changes to chunk size and timeout setting code.
2002-09-28 22:14:21 +00:00
Wez Furlong 9509c20941 remove chunk size setting code (it's now in streams.c).
Move timeout setting code.
2002-09-28 22:12:23 +00:00
Wez Furlong 393d57d5be Differentiate between write buffer and streams read buffer sizes.
Add options for timeout and chunk size; previously these were only
set-able for socket streams.
2002-09-28 22:10:47 +00:00
Stig Bakken 04bb45cf4b * added --libs option 2002-09-28 21:58:19 +00:00
Ilia Alshanetsky 3f8ec7e764 Fixed bug #13936 2002-09-28 20:13:28 +00:00
Derick Rethans 52bd901eb4 - Fix for defines... 2002-09-28 19:02:21 +00:00
Sergey Kartashoff 074d6c7607 - Site mirror detection and popularity rank has been added to mnogosearch
extension
2002-09-28 17:52:18 +00:00
Wez Furlong 0b5aae65f1 Fix crash bug and return value. 2002-09-28 17:03:02 +00:00
Rasmus Lerdorf 5a239ab059 Uh, this is what I meant to do. Fix for #19292 2002-09-28 16:27:10 +00:00
Rasmus Lerdorf 5eab8abd35 Probable fix for bug #19292 2002-09-28 16:10:43 +00:00
Tal Peer 37b31b3e08 - Eliminated LFs 2002-09-28 15:41:57 +00:00
James Moore 523274d311 Make ext/fribidi compile against latest fribidi CVS 2002-09-28 15:37:21 +00:00
Derick Rethans 34f5bd514c - Fix build in non-ZTS mode 2002-09-28 15:12:41 +00:00
Marcus Boerger 9be7455fe0 Synch with README.TESTING 2002-09-28 13:59:17 +00:00
Wez Furlong 84e0df3dfe Allow user streams/wrappers to implement fstat(), opendir() and stat(). 2002-09-28 13:05:47 +00:00
Wez Furlong 8aae36aecb Add missing folding marker. 2002-09-28 13:04:47 +00:00
Derick Rethans 3c90139cfa - Consistency 2002-09-28 09:14:59 +00:00
Yasuo Ohgaki ec340e039a It must be GLOB_NOCHECK instead of GLOB_NOMATCH.
GLOB_NOMATCH does not make sense at all.
2002-09-28 09:14:45 +00:00
Markus Fischer 5f61955c95 - Don't forget whom to blame ... ;) 2002-09-28 08:56:33 +00:00
de04d72df7 NEWS update 2002-09-28 00:34:07 +00:00
60069233a4 ChangeLog update 2002-09-28 00:33:08 +00:00
Wez Furlong 315e0a599b Implement stream_select() which works just like socket_select, but only on
streams.
@ - Added stream_select() which works like socket_select but only works on
@   streams returned by fopen(), fsockopen() and pfsockopen(). (Wez)
2002-09-27 23:42:38 +00:00
Wez Furlong 65d3e611f9 More ncurses functions and constants. 2002-09-27 22:33:14 +00:00
Wez Furlong dd6d22b6a1 Implement some more window routines, add pad functions.
Add panel functions when libpanel is also detected.
Register STDSCR constant during ncurses_init().
2002-09-27 17:03:53 +00:00
Colin Viebrock 69e677cda7 fix formating by breaking on to separate lines 2002-09-27 16:05:47 +00:00
Edin Kadribasic 0a0c6a49f5 @- Fixed bug #19595 (Missing functions for GD2 format handling).
(Edin)
Fixed bug #19595 (Missing functions for GD2 format handling).
2002-09-27 13:31:43 +00:00
foobar 08d3ad407c ws 2002-09-27 13:15:56 +00:00
Hartmut Holzgraefe 5797668cc3 /tmp/cvsmLUuXQ 2002-09-27 12:40:31 +00:00
Edin Kadribasic bf094736b7 Update credits.
# Updated by scripts/credits. For some reason it put "Java" and "Win32 COM"
# twice. I removed the duplicates manually.
2002-09-27 12:23:49 +00:00
Edin Kadribasic 4be735db9e Those two have enough credits already :) 2002-09-27 12:15:13 +00:00
Tal Peer 85648dd059 - Fixed case in extension name 2002-09-27 12:12:06 +00:00
foobar b24ed08833 style polizei 2002-09-27 11:52:38 +00:00
Yasuo Ohgaki 7dae78b7f5 No need to define GLOB_NOMATCH. 2002-09-27 11:44:42 +00:00
Derick Rethans e646304c1f @- Fix for bug #19633 (wrong directories in ext/ldap/config.m4). (Derick)
- Fix for bug #19633 (wrong directories in ext/ldap/config.m4).
2002-09-27 10:38:08 +00:00
Wez Furlong 4279f74e5a Really *really* fix the segfault bug #17274 and bug #19627 this time.
@ - Fixed bugs #17274 and #19627 (segfault in sem_remove). (Wez)
2002-09-27 10:24:54 +00:00
Jan Lehnardt bcb3067d34 - be more conservative ;) 2002-09-27 10:17:52 +00:00
Wez Furlong e9dd2a6d03 And a couple more. 2002-09-27 09:26:39 +00:00
Wez Furlong 43e3e7e35a Add some bug #'s to make Markus happier :-) 2002-09-27 09:21:04 +00:00
Wez Furlong da2593ce79 Typo 2002-09-27 09:03:44 +00:00
Markus Fischer 2e97487687 - Update. 2002-09-27 07:02:12 +00:00
Dan Kalowsky b42ec8a984 They seem to be working... 2002-09-27 02:09:35 +00:00
03803bf412 ChangeLog update 2002-09-27 00:34:13 +00:00
Colin Viebrock 219a978c54 document changes 2002-09-26 20:54:55 +00:00
Derick Rethans a346564418 - Added Sambar install notes (patch by Steffen <com@sambarserver.info>) 2002-09-26 19:49:34 +00:00
Sebastian Bergmann cb6ef08e8c Fix ZTS build. 2002-09-26 19:48:56 +00:00
Colin Viebrock 982c510cd9 update credits page with proper HTML, fix HTML escaping, and a few tweaks 2002-09-26 19:33:23 +00:00
Sebastian Bergmann fd7326395b Fix warning. 2002-09-26 19:18:35 +00:00
Ilia Alshanetsky ee7b8f906d MFZE1 2002-09-26 18:56:11 +00:00
Sebastian Bergmann b5d4b5496d Fix ZTS build. 2002-09-26 18:13:32 +00:00
Ilia Alshanetsky 57c91b571e Fixed bug #11643 2002-09-26 18:12:27 +00:00
Colin Viebrock c7c275b741 fix phpinfo() output for better browser BC 2002-09-26 17:54:54 +00:00
foobar 6b8480fab6 Fix bug: #14991 (changing session.use_trans_sid does not work in scripts) 2002-09-26 16:46:21 +00:00
Wez Furlong a95fb6bfd6 Fix for #19580. (Incorrectly warning about lost data when that is not the
case on systems without fopencookie).
2002-09-26 16:22:28 +00:00
Wez Furlong 4d9d06c874 Emit a warning when an unsupported charset is requested in htmlentities.
Fixed #18521.
2002-09-26 16:07:14 +00:00
foobar a89a2b3c84 style,consistency.. 2002-09-26 13:51:04 +00:00
Derick Rethans 9a0dae80f6 - Cleaning up 2002-09-26 13:48:46 +00:00
Tal Peer 1e9a373602 - Fixed fatal error 2002-09-26 12:58:31 +00:00
Wez Furlong c484eb8c97 Fix segfault in wrapper error log mechanism when errors are logged on
second and subsequent events.
Implement very simple recursion protection for user streams written
like this:
class urlEncodeStream {
    var $fp = NULL;

    function stream_open($path, $mode, $options, &$opened_path)
    {
        $this->fp = fopen($path, $mode); // <-- this recurses infinitely
        return is_resource($this->fp);
    }
}

file_register_wrapper('urlencode', 'urlEncodeStream');
$fp = fopen('urlencode:///tmp/outputfile.txt', 'w');

Noticed by: Yasuo.
2002-09-26 12:12:27 +00:00
Jan Lehnardt 1f227cd2e3 - GLOB_NOMATCH and GLOB_NOESCAPE are only defined in win32/glob.h
- fixes build on FreeBSD 4.6
2002-09-26 11:19:26 +00:00
Tal Peer 372b1fae01 - Reverted back to old param parsing api (and eliminated a segfault by doing that)
- Added the CapRTL charset -- should be used for testing on machines without Hebrew/Arabic/Persian
 fonts
- Changed the note about deprecated behaviour from E_WARNING to E_NOTICE
2002-09-26 10:43:42 +00:00
Wez Furlong 4c2a9c091b Remove an unused variable and a now-unused function. 2002-09-26 10:17:41 +00:00
Wez Furlong 3a67c67737 Rename file_get_wrapper_data -> file_get_meta_data.
It now always returns useful information for all streams.
Unified that data with socket_get_status and made socket_get_status
an alias for file_get_meta_data.

Fix Location header following which was broken in this commit:
http://cvs.php.net/diff.php/php4/ext/standard/http_fopen_wrapper.c?r1=1.41&r2=1.42&ty=h
2002-09-26 10:14:41 +00:00
Yasuo Ohgaki 7d87babada Remove dup 2002-09-26 07:55:59 +00:00
Hartmut Holzgraefe 6daad95d11 temporarily giving some orphands a new home 2002-09-26 07:55:41 +00:00
Georg Richter 27cab17165 maintainers for the famous mysql extension 2002-09-26 07:45:06 +00:00
Markus Fischer fa5910e77c - Add missing bug fixes.
# Please always add a NEWS entry for fixed bugs.
# The NEWS entry are added to http://php.net/ChangeLog-4.php after every
# released and the fixed bugs are auto(vi)matically linked to the BTS.
# So please also conform to the #<number> style (no one violated this, but
# just in case ;).
2002-09-26 07:38:02 +00:00
Sebastian Bergmann f5426838f9 Fix ZTS build. Fix warning. 2002-09-26 07:30:16 +00:00
Hartmut Holzgraefe 1a2df34d9d fix windows build 2002-09-26 07:15:33 +00:00
Markus Fischer 0a9c94e4af - Merge url_rewriter.tags description from Sascha. 2002-09-26 07:05:17 +00:00
Sebastian Bergmann d6e24f21f9 Sync MSVC project files. 2002-09-26 06:10:22 +00:00
Tal Peer a77763facc - Initial commit 2002-09-26 05:47:56 +00:00
Wez Furlong 53e6def02b Note that the GD functions now also work with remote files. 2002-09-26 01:20:38 +00:00
Wez Furlong 1a87c6b5bf (PHP mb_convert_case) Add function that will convert the case of a string
Respecting it's encoding (or the internal encoding).
2002-09-26 00:53:47 +00:00
2f418a1fdb ChangeLog update 2002-09-26 00:35:59 +00:00
Hartmut Holzgraefe 0d815b5713 glob should now be ZTS/open_basedir/safe_mode aware (finally) 2002-09-26 00:27:52 +00:00
Hartmut Holzgraefe 419efa6eeb symbolic constants for fnmatch flags added 2002-09-26 00:27:13 +00:00
Yasuo Ohgaki b437a23ada on -> On 2002-09-25 23:36:27 +00:00
Yasuo Ohgaki a85ed54e88 Merge changes from php.ini-dist 2002-09-25 23:34:50 +00:00
Andrey Hristov 7badd563cb Test case for strspn()/strcspn(). 2002-09-25 19:08:38 +00:00
Andrey Hristov f80a817f7c Added common handler for strspn() and strcspn(). Almost of the code is
identical. Modified to accept up to 4 params. Last 2 optional start & len.
They are analogic to start & len of substr(). So the behavior when start &
len are used is like
strspn(substr($s,$start,$len),$good_chars) and
strcspn(substr($s,$start,$len), $bad_chars)
2002-09-25 19:06:29 +00:00
Sascha Schumann 21adf62204 add note about url_rewriter.tags 2002-09-25 18:08:58 +00:00
Andrey Hristov fc46a46b06 str_shuffle() function added. Like shuffle() for arrays - however the
algorithm for creating the permutation is quite simple. More like
the implementation of shuffle() for 4.2.1 .
2002-09-25 18:06:05 +00:00
Andrei Zmievski c9b9e63ea3 *** empty log message *** 2002-09-25 17:48:10 +00:00
Martin Jansen 64a31beb6a * Fix bug #19269.
This patch makes popErrorHandling() pop the first _two_ elements
    from the error handler stack to prevent un-necessary memory
    consumption.

# Patch by: jrust (at) rustyparts (dot) com
2002-09-25 17:36:24 +00:00
Sterling Hughes 9368a91f6d add two extensions - and orphan them. 2002-09-25 17:07:12 +00:00
Stanislav Malyshev 3fb0dc7b05 Propmote API NO year, so that it will never be the same as ZE1 API NO 2002-09-25 16:54:04 +00:00
Sascha Schumann 6816ba4b32 We are about to enter 2003, sending two-digit years does not make too
much sense anymore.  According to an article from '98, only Netscape 3.x was
affected anyway.
2002-09-25 16:11:31 +00:00
Sascha Schumann bc4253f73a style police 2002-09-25 16:06:40 +00:00
Wez Furlong 0141e97052 Make these all work with persistent streams too. 2002-09-25 15:46:47 +00:00
Wez Furlong 696e0a2301 Implement persistent streams. (for pfsockopen).
Juggle some includes/definitions.
Tidy up streams use in ext/standard/file.c
2002-09-25 15:25:12 +00:00
Sterling Hughes 8e635cf0bc if this makes people happier about me not working on these anymore, so be
it :)
2002-09-25 14:07:57 +00:00
Andrei Zmievski 27255d7419 Fix bug #17570. 2002-09-25 14:02:34 +00:00
Tal Peer 0c5538d077 - Update proto 2002-09-25 13:49:55 +00:00
Ilia Alshanetsky 7ae2196852 Fixed bugs #18167 & #16859 2002-09-25 13:26:03 +00:00
Sascha Schumann 03c07308d3 Improve error messages 2002-09-25 12:38:45 +00:00
Ilia Alshanetsky 322a24a526 prevent segv on Windows with negative localtime values. 2002-09-25 12:20:56 +00:00
Sascha Schumann c57d419925 Sync 2002-09-25 12:15:42 +00:00
Sascha Schumann 41c0b43772 Allow - as part of an attribute
PR: #19573
2002-09-25 12:15:22 +00:00
Sascha Schumann 7af64ef531 Fix #13472 by making it possible to append the <input> stuff after
<fieldset> for xhtml compliance.
2002-09-25 11:06:24 +00:00
Sascha Schumann 91bbb302c1 Sync with .re 2002-09-25 10:36:19 +00:00
Sascha Schumann 3cadecec1b Allow malformed HTML such as
<a onClick=window.open("/hardware/somevar.php?hinfoid=","chgti") ..>

where ["'] are part of the attribute value.
2002-09-25 10:35:28 +00:00
c8114d7f31 ChangeLog update 2002-09-25 00:36:04 +00:00
Andi Gutmans 974b502199 - Fix leak 2002-09-24 19:32:01 +00:00
Andi Gutmans f78fa50423 - Megapatch to try and support inheritance from sub-classes. Things might
- be *very* buggy now so don't get too upset if that happens.
- I still need to improve some stuff but it's a good step (hopefully).
2002-09-24 19:05:53 +00:00
Ilia Alshanetsky f91b3d5c6d Fixed bug #17957 2002-09-24 16:34:54 +00:00
Zeev Suraski 5f1bffe0cd Fix indirection 2002-09-24 10:55:56 +00:00
Wez Furlong a12423f959 Fix for #19570: last character in translation table is omitted. 2002-09-24 10:05:45 +00:00
Sascha Schumann 75c9efc08a Fix typo 2002-09-24 06:39:43 +00:00
Sascha Schumann 8f81e9ad23 Replace underscores with dashes in --enable-mime-magic 2002-09-24 06:37:17 +00:00
Wez Furlong 4cdf8c7c36 Fix EOL markers for file() so that Mac EOL work correctly. 2002-09-24 02:46:38 +00:00
ff9039e1d4 NEWS update 2002-09-24 00:35:14 +00:00
46b4e9c0f9 ChangeLog update 2002-09-24 00:34:06 +00:00
foobar b7cd711b0d yadda yadda.. 2002-09-23 23:41:54 +00:00
Wez Furlong ba2dc46117 Correct a buglet in the newly introduced buffer code.
# Andi: this might have been the cause of that problem you mentioned.
2002-09-23 23:39:46 +00:00
Tal Peer 6eb8b0dcf2 - Fixed build on Win32 (and made the ext use a newer API)
- Various CS fixes
- Converted the parameter parsing to the new API
2002-09-23 20:24:29 +00:00
Wez Furlong d96a7ba3f6 include(URL). 2002-09-23 19:16:03 +00:00
Wez Furlong a2c344fa67 Ensure that the seekable stream returned for include("http://") under win32
is based on a temporary file rather than a memory stream.
2002-09-23 19:10:33 +00:00
Wez Furlong 031f019351 Enable include("http://....") under win32 by downloading to a temporary
stream so that flex will get on nicely with the content.
# untested; theoretically it should work just fine.
2002-09-23 19:07:38 +00:00
Ilia Alshanetsky 44d42b8e13 Fixed bug #17466 2002-09-23 18:51:34 +00:00
Wez Furlong 3f6a884fa6 Reflect recent streams changes. 2002-09-23 18:35:22 +00:00
Wez Furlong c6fdce6891 Remove allow_url_fopen checks from the user streams code.
Rationale: user streams might not be implementing network access,
and the administrator can disable the file_register_wrapper function
and other network access functions if s/he does not want to allow
this functionality.
2002-09-23 18:18:40 +00:00
Wez Furlong d14a7e0c19 WS 2002-09-23 18:13:31 +00:00
Wez Furlong c74b9faca5 Implement a default_socket_timeout and auto_detect_line_endings ini options.
Also move user_agent from BG to FG.
2002-09-23 18:12:39 +00:00
David Reid 8dde690042 Allow this to build on beos with it's bizarre linking. 2002-09-23 17:40:04 +00:00
Wez Furlong 35d29fb69e basic_functions.c 2002-09-23 17:27:37 +00:00
Andi Gutmans 8831b9cfd0 - MFZE1. 2002-09-23 17:20:59 +00:00
Sascha Schumann 1f18eaadee Force /nocache/ entities to be delivered completely, even if a
broken proxy ignores our anti-cache headers and sends an IMS request.
2002-09-23 15:41:44 +00:00
Wez Furlong a3cda3b32d Hopefully fix the other warnings that my last warning-fixing commit caused. 2002-09-23 15:21:16 +00:00
Sascha Schumann 7915f83342 (PHP touch) Remove an extraneous time() call.
Yasuo added this line in rev 1.90 for no apparent reason.
2002-09-23 14:59:24 +00:00
Wez Furlong ad4afdf827 fix some warnings. 2002-09-23 14:50:21 +00:00
Sebastian Bergmann fd329d2cd1 Fix warning. 2002-09-23 14:20:02 +00:00
Zeev Suraski 85f4abfdac Fix bug #19525 2002-09-23 14:18:42 +00:00
Sascha Schumann ff12826fc1 (php_get_session_var) Always return FAILURE if no data source was found.
Noticed by: Sebastian Bergmann
2002-09-23 14:04:50 +00:00
Wez Furlong 9e84b3d5b5 Revise buffer/seek code a little.
Tidy up user streams even more.
Make test case quite aggressive.
2002-09-23 13:22:10 +00:00
Zeev Suraski 2f4ed252de Compat fix 2002-09-23 12:10:07 +00:00
Zeev Suraski d31604997b We leak quite a few things intentionally, if you want to debug it - enable
explicitly please..
2002-09-23 11:35:22 +00:00
Ilia Alshanetsky 8a1556b3a1 Fixed bug #17662 2002-09-23 04:10:25 +00:00
Jason Greene a8ca9932f4 Implement contstants on win32
@Implement platform independant socket error constants, which benefits error handling
2002-09-23 03:34:21 +00:00
Wez Furlong 4d8a07d529 Implement read buffering in streams.
Eliminate similar code from network.c.
Implement fgets equivalent at the streams level, which can detect
the mac, dos and unix line endings and handle them appropriately.
The default behaviour is unix (and dos) line endings.
An ini option to control this behaviour will follow.
# Don't forget to make clean!
# I've done some testing but would appreciate feedback from
# people with scripts/extensions that seek around a lot.
2002-09-23 01:47:04 +00:00
Sascha Schumann 625e7b202b Use generic getnameinfo for address-to-name translation, if available.
This adds support for IPv6 addresses.
2002-09-23 00:49:12 +00:00
1664a7c18f ChangeLog update 2002-09-23 00:33:28 +00:00
Ilia Alshanetsky e489ee946e Fixed bug #19395 2002-09-22 18:30:38 +00:00
Derick Rethans 9e9e7c677a - update project file (no precompiled headers) 2002-09-22 18:09:27 +00:00
Derick Rethans d52983dfab - Unbreak build 2002-09-22 16:23:44 +00:00
James Cox b1b0230e6d typo 2002-09-22 16:14:11 +00:00
46d144fe80 NEWS update 2002-09-22 00:35:39 +00:00
f3a0c7e34b ChangeLog update 2002-09-22 00:34:53 +00:00
Derick Rethans 9c6f744649 - Fix ZTS build 2002-09-21 18:25:04 +00:00
Ilia Alshanetsky 9951582e48 news about various strip_tags() fixes. 2002-09-21 17:48:53 +00:00
Ilia Alshanetsky fda169417f Added a test script for strip_tags() function. 2002-09-21 17:34:45 +00:00
Ilia Alshanetsky 8fc94a082f Fixed bug #7472 as well as many other bugs with strip_tags implementation. 2002-09-21 17:34:06 +00:00
Sascha Schumann c74f96333f Immediately unmap /nocache/ entries, so that the mmc cache does not get
polluted too much.
2002-09-21 17:23:15 +00:00
Andrey Hristov 9ee1ce156f ws fixes.
#hope not to be flamed :)  what a wonderful day.
2002-09-21 16:10:33 +00:00
Ilia Alshanetsky fd094b5b1e Fixed bug #15038, original patch by: phpman@toowards.com 2002-09-21 15:42:33 +00:00
Ilia Alshanetsky 78f3ad40a8 Fixed bug #12934
locatime() now returns an error message when passed a negative value.
2002-09-21 15:41:20 +00:00
Sascha Schumann 30f038be18 Add '+' modifier.
+      A sign (+ or -) always be placed  before  a  number
              produced by a signed conversion.  By default a sign
              is used only for negative numbers. A + overrides  a
              space if both are used.
2002-09-21 15:08:59 +00:00
Markus Fischer bcadd534ee - Forgot to add an extra space. 2002-09-21 15:03:24 +00:00
Andrey Hristov 9980cf5f53 Test case for array_intersect() and array_intersect_assoc() 2002-09-21 14:50:55 +00:00
Andrey Hristov a920f00479 New function added - array_intersect_assoc() similar to array_intersect()
but the keys are also used in the comparison. So the result is a subset of
the result of array_intersect().
Test will be committed too.
2002-09-21 14:50:04 +00:00
Andi Gutmans 21e9bc0fb3 - Someone screwed this up. 2002-09-21 13:01:08 +00:00
Tal Peer 12ef3d3f6b Changed version from NO_VERSION_YET to 0.1
@ - Fixed compilation errors when compiling with the fribidi extension (Bug #16414) (Tal)
2002-09-21 10:58:46 +00:00
Sascha Schumann e20c6c8e9c Because track vars are always initialized, get_session_var failed
to work in the register_globals=1 case.

It is now possible again to store session variables in global vars.
2002-09-21 05:46:32 +00:00
Zeev Suraski b23adfb43b Fix double initialization 2002-09-21 01:53:15 +00:00
46fa29dcdd ChangeLog update 2002-09-21 00:33:33 +00:00
Derick Rethans a4734a1b29 - Fix line-endings
- Changed afxres.h to winres.h to make it compile when MFC is not installed
  (see http://www.winprog.org/tutorial/errors.html,
  "Fatal error RC1015: cannot open include file 'afxres.h'.")
2002-09-20 20:15:24 +00:00
Sander Roobol 90407dbf3e Changing the magic_quotes_gpc setting has no effect at USER level
# this partially fixes the #19526 shit
2002-09-20 18:07:48 +00:00
foobar a45e53b02d fix typo 2002-09-20 15:42:23 +00:00
Martin Kraemer c54b79bdd9 Since the cyrus extension prints only one line, and no subsequent info,
it should have a similar appearance as the other one-liners.
Use php_info_print_table_row() instead of php_info_print_table_header(),
as in the other extensions.
2002-09-20 15:39:50 +00:00
Ilia Alshanetsky bc8eda5385 Fixed bugs #12989 and #12120 2002-09-20 11:48:47 +00:00
Sebastian Bergmann 31fe6743d4 Sync MSVC project files. 2002-09-20 05:39:16 +00:00
foobar 26fb2879d5 Added check for yaz version into configure. 2002-09-20 02:46:38 +00:00
Ilia Alshanetsky f119fd6498 Fixed bug #19487 2002-09-20 01:25:55 +00:00
foobar 4a39f70a9a Added missing convert_to_* funcs. (should fix some crashes) 2002-09-20 00:47:00 +00:00
c2d899e0dd ChangeLog update 2002-09-20 00:35:19 +00:00
Derick Rethans 5acf8709c2 - Make Colin happy 2002-09-19 22:23:56 +00:00
Colin Viebrock 14a6cc8847 Change phpinfo() to use CSS styling instead of HTML code.
It doesn't render as nicely as it used to on older browsers, but it
does result in smaller files, and opens the door to using your own CSS
to style it differently.

There is a patch to Zend/zend_ini.c, but I don't have enough Karma, so
Derick has the patch.
2002-09-19 21:57:25 +00:00
Colin Viebrock cd47bf286f change my email address 2002-09-19 21:51:34 +00:00
Ilia Alshanetsky ae5222ac23 Fixed bug #19504
Alligned 'Enable sysvmsg support' message.
2002-09-19 20:14:58 +00:00
Derick Rethans cf07c698d1 - Align configure --help messages 2002-09-19 20:14:35 +00:00
Ilia Alshanetsky a694fa9ca7 Fixed bug #19313
Fixed argument count check for system/exec/passthru functions
Added a check to system/exec/passthru functions to make sure execution
parameter is not blank before attempting to execute it.
2002-09-19 18:59:32 +00:00
Ilia Alshanetsky 9259c4e598 Fixed bug #19414 2002-09-19 18:22:51 +00:00
Derick Rethans 6f0db0889f - Add fribidi extension 2002-09-19 17:11:59 +00:00
Zeev Suraski aaf8d48fc3 Fix the last part of bug #13982 (ignore_user_abort() settings were 'leaking'
between requests)
2002-09-19 16:01:53 +00:00
Zeev Suraski bd115087e3 MFZE1 - connection_status() fix 2002-09-19 15:58:01 +00:00
Zeev Suraski 3ae3eb06e9 Fix connection_status() 2002-09-19 15:54:23 +00:00
Zeev Suraski 8a003f8021 Fix non ZTS build 2002-09-19 15:15:39 +00:00
Zeev Suraski c29f5d6e9d Fix that obscure crash in Debug_TS mode 2002-09-19 15:12:20 +00:00
Dan Kalowsky f585f6b5d7 adding ODBC todo's 2002-09-19 12:49:23 +00:00
Adam Dickmeiss 05aa5e6193 Remove compatibility for old YAZ versions (use ZOOM API only) 2002-09-19 12:20:07 +00:00
Adam Dickmeiss a9b2e812df New option for yaz_connect: charset 2002-09-19 10:18:44 +00:00
Sebastian Bergmann 4cdd5b4f73 Remove obsolete directory. 2002-09-19 09:09:28 +00:00
Sascha Schumann d964e73160 Add support for cdb-0.75
The install_cdb.sh script fills the gap of installing header files and
creating a cdb library which programs can link against.
2002-09-19 04:18:20 +00:00
Dan Kalowsky 25a908f41a white space fix 2002-09-19 02:32:48 +00:00
532362e7f4 ChangeLog update 2002-09-19 00:34:48 +00:00
Zeev Suraski 5fcae67e9d Fix the thread-safe initialization of the ZE2. This should solve some
sporadic crashes, as well as the problem with the built-in constants.
2002-09-18 22:16:22 +00:00
Zeev Suraski f2aa45d234 Remove dead code 2002-09-18 22:15:02 +00:00
Zeev Suraski 6e9f24cf6a Fix debug build options (looks like VC doesn't maintain indentation in the
.dsp...  Sorry Sebastian :)
2002-09-18 22:08:35 +00:00
Zeev Suraski 76312b4508 another startup initialization fix - only ISAPI and CGI SAPI's tested,
minor compile buglets might occur in other SAPIs, but should be trivial
to fix...
2002-09-18 21:57:42 +00:00
James Cox 70f17979fb white background please 2002-09-18 21:56:00 +00:00
Ilia Alshanetsky 0dddad02fa Fixed bug #19446 2002-09-18 21:34:30 +00:00
Ilia Alshanetsky 869c42a511 Added additional handlers for compressed swf files, which require
entire file to be downloaded for successful decompression.
2002-09-18 20:37:24 +00:00
Zeev Suraski 7dfa439185 Add useful debugging function 2002-09-18 14:08:07 +00:00
Dan Kalowsky 3ae9127b46 Patch for Bug #19402 provided by Kevin Way (kevin.way@overtone.org) 2002-09-18 11:57:17 +00:00
Wez Furlong ff7bece5bb Tidy up some user stream code.
Add a small test case (not yet complete).
2002-09-18 10:15:40 +00:00
Hartmut Holzgraefe f8358b44d1 setlocale() will now accept multiple locale arguments, first match wins 2002-09-18 07:55:30 +00:00
01f9c2ad14 ChangeLog update 2002-09-18 00:34:20 +00:00
Tal Peer 21ceacc487 # err.. fix comment 2002-09-17 19:30:06 +00:00
Tal Peer 10cabf5259 # Fixed proto and header of log2vis() 2002-09-17 18:08:45 +00:00
Tal Peer e9ccb81903 * The second argument of
fribidi_log2vis now accepts a constant.
The old way (using strings) is still available
but deprecated.
2002-09-17 16:27:27 +00:00
Zeev Suraski 91b0d03346 Add tracking for hashtable allocation 2002-09-17 14:04:37 +00:00
Hartmut Holzgraefe 4e6635742d it should not only work for the failure case
but also not fail (segfault) on the working case
2002-09-17 13:54:40 +00:00
Hartmut Holzgraefe c5d4be214c stupid lino-typo .... :( 2002-09-17 12:59:36 +00:00
Zeev Suraski 71126a21bc ZE2 fix 2002-09-17 12:44:10 +00:00
Zeev Suraski aa07082a5c whitespace 2002-09-17 12:42:58 +00:00
Zeev Suraski 711be83d49 MFZE1 - threading fix 2002-09-17 12:42:11 +00:00
Hartmut Holzgraefe 0c7d9c3742 headers_sent() may now return information about where output started
using the optional $file and $line reference parameters
2002-09-17 12:37:26 +00:00
Zeev Suraski 31429c60db Call zend_post_startup() - use local copies of the function, class and
constant tables in the startup thread
2002-09-17 09:07:10 +00:00
cab024e411 ChangeLog update 2002-09-17 00:33:53 +00:00
Tal Peer 10a460622f oops. 2002-09-16 19:08:45 +00:00
Tal Peer d2969d4e3d Added myself 2002-09-16 18:35:26 +00:00
foobar 33b827d35f tuning 2002-09-16 15:49:18 +00:00
foobar aef1c680bc - Require Fribidi 0.10.4 -> no more glib needed.
- Cleaned up a bit.
2002-09-16 15:31:32 +00:00
foobar 55362251c8 Should fix #19425 2002-09-16 13:13:52 +00:00
Anantha Kesari H Y 697e0009c8 Updatation of symbols exported for NetWare 2002-09-16 11:48:48 +00:00
Andrei Zmievski a35c61af3c MFZE1 2002-09-16 01:36:48 +00:00
78a17be5e5 ChangeLog update 2002-09-16 00:35:19 +00:00
Ilia Alshanetsky 94aaba773c Make zend actually strip comments. Bug #18151 2002-09-15 23:37:26 +00:00
Ilia Alshanetsky 1074fca0ae Make zend return a proper exit error code when it encounters a parse error. 2002-09-15 23:34:03 +00:00
Shane Caraveo 9f85d17f81 fix line endings 2002-09-15 20:45:46 +00:00
Tal Peer f574e7cffa * More work on returning errors properly and freeing resources 2002-09-15 09:58:35 +00:00
Sebastian Bergmann cd4261a723 For a change, Sebastian makes Andi happy. :-) 2002-09-15 09:52:51 +00:00
Tal Peer e0247cbd6e *Fixed compilation errors and enhanced the code 2002-09-15 09:32:29 +00:00
Andi Gutmans f8ebfe7c51 - Hopefully fix problem with __autoload not working well with inherited classes.
- There might still be some weird situations I haven't thought of.
2002-09-15 07:54:01 +00:00
Andi Gutmans 7f6c2da50a - WS fix - "while (" instead of "while(" 2002-09-15 07:46:20 +00:00
Andi Gutmans 43139dc755 - WS - Always use "if (" and not "if(" 2002-09-15 07:45:26 +00:00
Andi Gutmans fcc0ce7eec - WS 2002-09-15 07:41:23 +00:00
Jon Parise 26e6252e43 Line up the 'configure --help' output. 2002-09-15 01:39:30 +00:00
3830726207 ChangeLog update 2002-09-15 00:33:27 +00:00
Wez Furlong 348b31f1df PCRE news 2002-09-15 00:07:01 +00:00
Wez Furlong a2c6a6c186 Update bundled pcrelib to 3.9.
# Tested under Linux only
2002-09-14 14:45:35 +00:00
Jan Lehnardt 53b0623878 - fix typo in comment 2002-09-14 12:09:47 +00:00
Andi Gutmans 288e9b1793 - Don't think we need the do { } while (0) here 2002-09-14 06:38:48 +00:00
f40ef54081 ChangeLog update 2002-09-14 00:35:56 +00:00
Andrei Zmievski a92e347e53 Let's take Console_Getopt to stable release. 2002-09-13 23:34:21 +00:00
Ilia Alshanetsky 687312be41 Do not create the destination file, if opening of the source file failed
during copy().
2002-09-13 13:34:06 +00:00
61043c0cdf NEWS update 2002-09-13 00:35:48 +00:00
a146ec218e ChangeLog update 2002-09-13 00:34:26 +00:00
Stefan Esser 714eb8069a made new ssl activate function the default. 2002-09-12 21:52:09 +00:00
foobar fb9bd8d20a ws fix 2002-09-12 21:42:33 +00:00
Sebastian Bergmann c7606f1285 Meaningful Custom Build Step information. 2002-09-12 17:11:55 +00:00
Sebastian Bergmann cb69b62d6d Fix logic. 2002-09-12 17:02:12 +00:00
Marcus Boerger 96f7bccebd Update info and synch example test. 2002-09-12 14:25:30 +00:00
Derick Rethans 861f68834a - Fixed linker error when HAVE_STRFTIME was not set 2002-09-12 11:18:47 +00:00
Thies C. Arntzen b905e40e92 @- OCIResult() could return garbage if called on empty result-sets. (thies)
# fix #19364
2002-09-12 09:48:03 +00:00
Andrey Hristov 23d3cd79c1 Fixing my zts fix.
#Sorry Edin
2002-09-12 08:20:37 +00:00
Andrey Hristov ad92434638 Removed magic numbers about the behavior of php_array_diff - proposed by
Andi and Jon Parise.
#It is strange that I commited ZTS code but after that Edin fixed ZTS build
#when I updated - it wasn't ZTS. hmmm. anyway fixing ZTS build.
2002-09-12 08:04:42 +00:00
e1d0acc1f5 NEWS update 2002-09-12 00:34:41 +00:00
95dd538219 ChangeLog update 2002-09-12 00:33:37 +00:00
Edin Kadribasic ad34142e97 My compiler likes it like this. 2002-09-11 23:10:58 +00:00
Edin Kadribasic 705e72f363 Fix ZTS build. 2002-09-11 23:09:11 +00:00
Sterling Hughes 9f4658427f virtual filepath fix, don't know why i bother, the module isn't threadsafe
and never will be, but still...
2002-09-11 22:43:58 +00:00
Sterling Hughes b34bec20a7 max this use the virtual_filepath() function and feel all threadsafe and
wholesome inside
2002-09-11 22:40:56 +00:00
Derick Rethans c57b3c6533 - Un-deprecating mysql_escape_string
#- This will remove the annoying notices, while this function is used in
#  a lot of scripts. There is not reason why we should discontinue it's use
#  as it works perfect for about 99% of the time.
2002-09-11 21:06:52 +00:00
Marcus Boerger 54e066b20b Unlink output files even if test is skipped. 2002-09-11 19:42:59 +00:00
Derick Rethans aaf920f9d5 - Little whitespace changes 2002-09-11 18:40:56 +00:00
Andrey Hristov 2b710f7e5c Regression test for array_diff() and array_diff_assoc(). The latter is newly
introduced.
2002-09-11 18:16:11 +00:00
Andrey Hristov afdfe38ef3 New function added : array_diff_assoc() . Like array_diff() but does
additional checks on key values. Test script will be added too.
#My first patch . it feels strange :)
2002-09-11 18:13:48 +00:00
foobar eb3b486f21 For now, check only when not using bundled GD lib. 2002-09-11 16:40:35 +00:00
Sander Roobol 1715acfdc4 Fix configure 2002-09-11 16:17:33 +00:00
foobar e54bc671dd Added build test. Bug: #19345 2002-09-11 15:34:44 +00:00
Dan Kalowsky 6fe296aa69 Patch for Bug #19341 submitted by list@firehawksystems.com 2002-09-11 15:05:06 +00:00
foobar 746c147670 tok tok.. 2002-09-11 14:51:09 +00:00
Andrei Zmievski 3f4a2b1b6a @- Added ability to use Perl-style ${n} subpattern references in the
@  replacement string for preg_replace(). Takes care of bug #18442. (Andrei)
2002-09-11 14:41:25 +00:00
foobar daf6a5ab1a ws fix 2002-09-11 14:40:52 +00:00
foobar be52343850 fix proto 2002-09-11 14:24:27 +00:00
foobar a254506a3c ws fix 2002-09-11 14:21:39 +00:00
Anantha Kesari H Y e75aae81fc Removed unnecessary code that was added for NetWare 2002-09-11 10:28:22 +00:00
Anantha Kesari H Y a819349c61 Changed the licence to the one used by PHP Group 2002-09-11 10:16:08 +00:00
Anantha Kesari H Y d3642b5488 NetWare related changes/modifications 2002-09-11 09:30:01 +00:00
fdf1c12195 NEWS update 2002-09-11 00:34:28 +00:00
a0620f711d ChangeLog update 2002-09-11 00:33:52 +00:00
Edin Kadribasic 333b01b041 Fixed ZTS build. 2002-09-10 22:36:43 +00:00
Andrei Zmievski dd7cf22443 @- Fixed array_merge_recursive() to avoid problems with merging cyclical
@  arrays (bug #16064). (Andrei)
2002-09-10 18:34:16 +00:00
Andrei Zmievski 1f6770ddae *** empty log message *** 2002-09-10 17:12:53 +00:00
James Cox 022e83908f moved vpopmail to pecl.
# with original authors permission, and i am working on it a bit now.
2002-09-10 13:48:13 +00:00
Wez Furlong 49d77dbc01 Patch for BSD-ish systems from Melvyn Sopacua <msopacua@idg.nl>,
slightly modified.
2002-09-10 13:04:08 +00:00
Stanislav Malyshev 7fe216e27b MFZE1 2002-09-10 08:37:18 +00:00
Stanislav Malyshev ca6717e348 MFZE1 2002-09-10 08:35:50 +00:00
Stanislav Malyshev 7fca47f1cf MFZE1 2002-09-10 08:18:53 +00:00
Stefan Esser 184323cbe5 php_url_parse() replaces controlchars with '_' now. This stops fopen wrapper
CR/LF injection issues.
2002-09-10 08:06:25 +00:00
Jason Greene 565492248a Fix crash bug and memory leak in vectors
#still need to revisit how these are done, i.e. they are not binary safe
2002-09-10 04:12:55 +00:00
e94b325e90 NEWS update 2002-09-10 00:34:15 +00:00
513a15b219 ChangeLog update 2002-09-10 00:33:44 +00:00
foobar f1d88bbec3 consistent.. 2002-09-09 22:28:16 +00:00
Stig Bakken 48f28ac0b3 * upgrade DB and Mail packages 2002-09-09 22:11:13 +00:00
Stig Bakken 91a97eec5d * 0.91 changelog 2002-09-09 21:56:54 +00:00
Stig Bakken e42c5142c3 * no longer needed 2002-09-09 21:50:58 +00:00
Stig Bakken b5df9f32de * more consistent output 2002-09-09 21:45:40 +00:00
Stig Bakken d4c4836f05 * remove debug output 2002-09-09 21:42:32 +00:00
Stig Bakken f73c1eb137 * how did those DOS newlines get here? 2002-09-09 21:41:32 +00:00
Dan Kalowsky e1fe1e189c missed one section for #15630 2002-09-09 21:01:33 +00:00
Christian Stocker ab40c954fb chregu: Can you please use the new php_error_docref in new code? 2002-09-09 20:32:49 +00:00
Christian Stocker 2375745ab4 Fix for bug 19266 (don't allow appending nodes from 2 different documents) 2002-09-09 20:21:31 +00:00
Andrei Zmievski 2c6154d7aa @- Added ability to extract() variables as references via OR'able EXTR_REFS
@  flag. (Andrei)
2002-09-09 20:05:20 +00:00
Wez Furlong 8a85e0f614 put that back... 2002-09-09 19:11:35 +00:00
Wez Furlong 6bc7e97161 Revert Dericks accidental commit :-)
Add an Id tag so we can see at a glance who is to blame.
2002-09-09 19:09:23 +00:00
Dan Kalowsky bd7144a803 Updated for OCI8 patch 2002-09-09 19:06:41 +00:00
Dan Kalowsky 32a03b3aed Patch for Bug #18640 (submitted by michael.mauch@gmx.de) 2002-09-09 19:03:51 +00:00
foobar faf9934272 Version check for Sablotron. 2002-09-09 18:17:12 +00:00
Georg Richter a9c64d174b - renamed rollback function to _restore_connection_default
- in _restore_connection_default:
  - unset the selected database (thx to Paul DuBois)
  - set session variable autocommit to default (=1)
2002-09-09 15:53:05 +00:00
foobar bdcd8e3f03 Added the 4.2.3 entries. 2002-09-09 14:08:20 +00:00
Anantha Kesari H Y 3313593ff3 NetWare related changes/modifications 2002-09-09 12:03:36 +00:00
Anantha Kesari H Y 3798528753 NetWare related changes/modifications 2002-09-09 11:43:50 +00:00
Anantha Kesari H Y 1b18be126d NetWare related changes/modifications 2002-09-09 11:31:03 +00:00
Anantha Kesari H Y 1e09610f45 NetWare related changes/modifications 2002-09-09 11:23:11 +00:00
Anantha Kesari H Y fa94fc6384 NetWare related changes/modifications 2002-09-09 11:17:40 +00:00
Anantha Kesari H Y e4b9df9585 NetWare related changes/modifications 2002-09-09 10:56:28 +00:00
Anantha Kesari H Y 97a601fc15 NetWare related changes/modifications 2002-09-09 10:12:44 +00:00
Derick Rethans c1f6b2efbd - Consistent use of macros 2002-09-09 09:44:52 +00:00
Stanislav Malyshev 44c2c39188 remove comment 2002-09-09 08:59:18 +00:00
Derick Rethans 612d5b99bc - spaces instead of tabs 2002-09-09 07:54:11 +00:00
Derick Rethans 8e7147a1cb - Use PHP_ instead of ZEND_ 2002-09-09 07:52:39 +00:00
e15e0336de ChangeLog update 2002-09-09 00:33:41 +00:00
Jon Parise d6b4462a80 Reword item 10 for greater clarity. 2002-09-08 23:00:31 +00:00
Yasuo Ohgaki ab0da7dc33 It seems we're better to mention about missing functions.
PHP_FUNCTION -> ZEND_FUNCTION
2002-09-08 22:38:57 +00:00
Stefan Esser cbf5e3ca06 Added possibility to reuse an old SSL session id.
Ugly but needed for f.e.: debians ftpd-ssl
2002-09-08 22:26:11 +00:00
foobar bba274b9e1 s/send/sent/ 2002-09-08 21:48:59 +00:00
foobar 16f793f876 nice..nice.. 2002-09-08 21:06:22 +00:00
Jon Parise dc056bf2d0 Capitalization 2002-09-08 20:59:53 +00:00
Shane Caraveo 2c6dca5a6e someone missed code requiring ssl 2002-09-08 20:52:03 +00:00
Stefan Esser 8dbcb26fd0 ftp(s) fopen() wrapper does no longer ignore the ip returned by PASV. 2002-09-08 19:35:42 +00:00
Stefan Esser 77f750e7b4 Added ftps:// fopen() wrapper to NEWS. 2002-09-08 19:15:45 +00:00
Stefan Esser 9fca868f90 Control connection gets closed in ssl mode now, too. 2002-09-08 19:11:07 +00:00
Dan Kalowsky 7dd7d39385 Fix for bug #19290
# Untested
2002-09-08 18:13:56 +00:00
Stefan Esser ec4a3fa68e Added EXPERIMENTAL ftps fopen wrapper.
For now this leaks the control connection stream because you cannot
close the control connection in ssl mode before you read the data.
2002-09-08 16:45:32 +00:00
Andi Gutmans 2b3ba02719 - Simplify makedist 2002-09-08 15:38:44 +00:00
Andi Gutmans e3ca0ff0b8 - Prepare for alpha 3 2002-09-08 15:33:54 +00:00
Sander Roobol 8a9820331c Fix typo 2002-09-08 08:08:35 +00:00
Yasuo Ohgaki 71fb0299d1 Added missing charset. 2002-09-08 01:06:29 +00:00
b6c2275353 NEWS update 2002-09-08 00:34:55 +00:00
a37e35e9b3 ChangeLog update 2002-09-08 00:33:57 +00:00
Yasuo Ohgaki b83255aab0 Fix last commit. This line isn't supposed to be replaced. 2002-09-08 00:27:05 +00:00
Wez Furlong 505044f0af Mention php://output wrapper. 2002-09-07 23:30:47 +00:00
Jan Lehnardt de3b5c3631 - cosmetics 2002-09-07 23:14:22 +00:00
Yasuo Ohgaki 16125ec2bf This should fix var handling problems finally. 2002-09-07 22:51:39 +00:00
Ilia Alshanetsky 407088509f Added a check to ensure user_agent header is not sent if user_agent value
if blank.
2002-09-07 21:57:11 +00:00
Yasuo Ohgaki 69cc47358e Fixed errno hanlding. Patch by Moriyoshi Koizumi <readjust@deneb.freemail.ne.jp> 2002-09-07 21:08:47 +00:00
Yasuo Ohgaki 17e0d9c642 MFB 2002-09-07 21:04:14 +00:00
Wez Furlong 3df412cf9b Fix a couple of bad pointer indirections (oops).
Lets stick to a single category of "http" for the "user_agent"
context override.
2002-09-07 20:58:30 +00:00
Wez Furlong 97f134cb45 fix warning 2002-09-07 20:54:14 +00:00
foobar cb8493b2fb This was not a good idea. 2002-09-07 19:09:09 +00:00
Wez Furlong 30082fdb68 Implement php://output wrapper, which can be used to write to the output
buffer via PHPWRITE.
2002-09-07 19:00:46 +00:00
Wez Furlong 759a0068aa Tag user streams as being URLs, so that safe mode restrictions
will come into play.
2002-09-07 18:59:18 +00:00
Hartmut Holzgraefe 431b903e97 WebDAV MKCOL can have post data body, see rfc2518 8.3.1 2002-09-07 17:48:51 +00:00
Sterling Hughes ce686a63de commit the correct/up-to-date version 2002-09-07 15:55:04 +00:00
Sterling Hughes 91df221ab7 @ Made the User-Agent that php's fopen wrappers send, configurable via
@ php.ini or via a stream context. (Sterling)

The stream context is untested, but it should/could work :)  Either way it
doesn't make the rest of the code bad. Wez -- please take a looksie for me
:)
2002-09-07 15:45:29 +00:00
Sterling Hughes c0ed6edf41 add the user_agent ini option. 2002-09-07 15:43:08 +00:00
Sergey Kartashoff d96a5d8c5c - New mnogosearch extension features has been added to group results
by site.
- Mnogosearch module fixes and cleanups.
2002-09-07 14:19:52 +00:00
Yasuo Ohgaki b65073d3ea Fixed array var handling. Patch by Moriyoshi Koizumi <readjust@deneb.freemail.ne.jp> 2002-09-07 14:07:05 +00:00
Sander Roobol 86e68f34f5 Fix build with bundled gd when builddir!=srcdir 2002-09-07 12:53:05 +00:00
Yasuo Ohgaki 27ce2cfa24 Fixed trancated value bug when array is used 2002-09-07 09:23:39 +00:00
Ilia Alshanetsky 3c95ac6b4f Fixed a massive memory leak that occurs when an opened webpage returns
a non 200 return code.
2002-09-07 07:13:43 +00:00
6c72328bfc ChangeLog update 2002-09-07 00:33:46 +00:00
foobar 1a747ada4f Fix the errors reported by Melvyn 2002-09-06 17:18:16 +00:00
Georg Richter 0797d5f989 fixed typo 2002-09-06 12:11:30 +00:00
James Cox 5d4080ec38 remove uneeded def 2002-09-06 10:34:30 +00:00
Sascha Schumann 702d7afc3c Reenable pwrite/pread support
The old checks supposed that pread/pwrite worked, if a declaration was
found in <unistd.h>.  We now actually check whether they work successfully
before using them.
2002-09-06 10:27:26 +00:00
Anantha Kesari H Y 8f14aafe97 NetWare related changes/modifications 2002-09-06 10:20:39 +00:00
Derick Rethans 828c2a9c46 - argh... this is getting annoying 2002-09-06 07:47:49 +00:00
Anantha Kesari H Y 338332c799 NetWare related changes/modifications 2002-09-06 07:44:30 +00:00
Anantha Kesari H Y 15bf7382c2 Main functions declarations for NetWare 2002-09-06 07:32:34 +00:00
Anantha Kesari H Y a270b1829e Main functions for NetWare 2002-09-06 07:31:07 +00:00
Derick Rethans dc3ea09991 - Please do not use spaces for indentation!
- Removed redundend ifdefs
2002-09-06 07:30:51 +00:00
Anantha Kesari H Y dc5d3f5585 NetWare related additions/modifications 2002-09-06 07:27:27 +00:00
Anantha Kesari H Y 0ea12a47ab NetWare related additions/modifications 2002-09-06 06:39:57 +00:00
5800ae1db2 ChangeLog update 2002-09-06 00:36:15 +00:00
Joseph Tate 59ac50171b #Added positions files 2002-09-05 22:38:07 +00:00
Dan Kalowsky e560822fa7 silence a windows build warning 2002-09-05 21:29:39 +00:00
foobar 71ecad8fbe Remove unnecessarily commented code. 2002-09-05 21:16:34 +00:00
foobar d94758bec2 Remove unnecessary commented code. 2002-09-05 21:12:55 +00:00
foobar d1009fe707 Using --with-zlib-dir should work now with phpized builds too. 2002-09-05 20:13:20 +00:00
Derick Rethans 2b6ba50601 - Unbreak build 2002-09-05 18:11:33 +00:00
Stanislav Malyshev c2af55fb18 quick-n-dirty inheritance support for __handlers 2002-09-05 17:34:16 +00:00
Derick Rethans 99850fcc28 - Tabs for indentation 2002-09-05 14:36:33 +00:00
Derick Rethans 5c0b6f7fa8 - Please use tabs for indentation 2002-09-05 14:32:47 +00:00
Anantha Kesari H Y 8b8f1e0590 NetWare related additions/modifications 2002-09-05 14:25:07 +00:00
Ilia Alshanetsky eb58557e1c Fixed a buffer overflow that occurs when wordwrap is unable to calculate
the correct number of times the multi-byte break needs to be inserted into
the string.
2002-09-05 14:00:28 +00:00
Edin Kadribasic d24705125d Added UTF-8 support to pcre on windows as suggested by Wez Furlong. 2002-09-05 13:36:32 +00:00
Anantha Kesari H Y 96a4626b68 NetWare related additions/modifications 2002-09-05 12:09:57 +00:00
Anantha Kesari H Y 3e867bfdb1 NetWare related additions/modifications 2002-09-05 12:03:43 +00:00
Anantha Kesari H Y bbc162d164 NetWare related additions/modifications 2002-09-05 11:50:43 +00:00
Anantha Kesari H Y 76d94e57ab NetWare related additions/modifications 2002-09-05 11:35:10 +00:00
Anantha Kesari H Y 233e06fb0d File used by extensions like LDAP, MySQL etc. 2002-09-05 11:30:14 +00:00
Derick Rethans 60dcc761ac - php_error -> php_error_docref
- corrected proto of implode() (to match the docs)
2002-09-05 11:29:31 +00:00
Anantha Kesari H Y 98a1d774df NetWare makefile for LDAP Extension 2002-09-05 11:26:05 +00:00
Anantha Kesari H Y ad844f0b1b NetWare related additions/modifications 2002-09-05 11:22:20 +00:00
Hartmut Holzgraefe 101d155baa in stristr:
this check was in the wrong place, the real version was some lines
below, this one assumed the type was 'string' in any case
now it looks like strstr
2002-09-05 11:12:01 +00:00
Anantha Kesari H Y 77e2ed4834 NetWare related additions/modifications into FTP files 2002-09-05 10:13:27 +00:00
Anantha Kesari H Y 6c51af03e5 Batch file to set build type (Release/Debug) and Apache version to be built 2002-09-05 09:00:57 +00:00
7855332177 NEWS update 2002-09-05 00:35:39 +00:00
e5fd005fa9 ChangeLog update 2002-09-05 00:34:49 +00:00
foobar c40262ef99 This _should_ fix those builds where gd.h might be in many places in
the system. Not guaranteed, but now the path for the found gd.h is always
first in the includes.
2002-09-05 00:24:33 +00:00
foobar ba057e9bf3 Fix build with GD < 2.0.x 2002-09-05 00:22:40 +00:00
Yasuo Ohgaki 9e252a9616 php_error -> php_error_docref 2002-09-04 22:25:13 +00:00
Stefan Esser 27e2bc2f55 This 2 lines should have been removed when the header() code was rewritten. 2002-09-04 20:27:35 +00:00
foobar 3bf7519210 @- Added --disable-all configure option. (Jani) 2002-09-04 18:47:28 +00:00
foobar dcf995c648 ws fix 2002-09-04 17:41:51 +00:00
foobar 25e91506cb Fix the shared build (nobody ever build this as shared?) 2002-09-04 17:40:36 +00:00
Sebastian Bergmann af4243b908 Whitespace fixes. 2002-09-04 16:50:01 +00:00
Marcus Boerger 0b25d07f15 Fix headers when default content type is used.
#THIS fixes the problems with error_log()
2002-09-04 15:30:56 +00:00
Stanislav Malyshev e8f6654663 remove dead code 2002-09-04 15:04:39 +00:00
Stanislav Malyshev 36c60cea38 Fix __call and add some docs 2002-09-04 15:03:41 +00:00
Martin Kraemer 20f85627f5 The sasl.h file is in .../include/sasl/ (at least in cyrus-sasl-2.1.6) 2002-09-04 14:41:29 +00:00
foobar f05db43a68 Fix bug: #19212 2002-09-04 14:30:36 +00:00
Zeev Suraski e32757ef4c This is way too verbose... Please enable it in your local .dsp settings if
you like it :)
2002-09-04 14:14:59 +00:00
Sebastian Bergmann 419321979d Don't build ext/overload with Zend Engine 2. 2002-09-04 13:55:52 +00:00
Dan Kalowsky e5324723d0 sniper claims its safe to take these out as well. 2002-09-04 13:52:41 +00:00
Dan Kalowsky 65df9d5127 taking out the PWRITE calls too 2002-09-04 13:51:08 +00:00
Dan Kalowsky 31fe6a549f This fixes Bug #19022 and #15983 2002-09-04 13:42:59 +00:00
Martin Kraemer ab2df38f3d Fix bogus test 2002-09-04 12:50:41 +00:00
Sebastian Bergmann 2711976f56 Fix ZTS build. 2002-09-04 12:49:30 +00:00
Sebastian Bergmann 42eebfc81a TBD: __call(), __get(), __set(). 2002-09-04 12:49:15 +00:00
Anantha Kesari H Y c3ff90aac2 Makefile to build for NetWare: extensions, main, netware & regex files 2002-09-04 12:22:57 +00:00
Anantha Kesari H Y a081452fee Batch file to build extensions and files under main, netware and regex folders 2002-09-04 12:13:27 +00:00
Anantha Kesari H Y 06e2fabc02 To include the NetWare config file 2002-09-04 11:20:18 +00:00
Stanislav Malyshev d8651c82cd Support for __get, __set and __call in classes.
This should work as follows: if class hasn't member with given name,
__get/__set is called. If class has no method with given name, __call is called.
__get/__set are not recursive, __call can be.
2002-09-04 09:07:58 +00:00
Yasuo Ohgaki 1f49fb1bcd Fixed mbstring.func_overload description. 2002-09-04 06:21:58 +00:00
Sebastian Bergmann 84c1bee585 Workaround for superfluous comma in var_export() result. 2002-09-04 05:46:16 +00:00
Sebastian Bergmann 7d85d01834 Let debug_backtrace() example print out the class name, if applicable, and the function/method arguments. 2002-09-04 05:35:20 +00:00
Yasuo Ohgaki 38ef35e5b0 Fixed undefiend referece at build time.
Fixed transilit test script.
Make fixes available on Windows.
Patch by Yoshimori Koizumi<readjust@deneb.freemail.ne.jp>
2002-09-04 05:17:16 +00:00
Dan Kalowsky 610b2b76d7 Fix for bug #19155 UNTESTED. Unfortunately I don't have a way to test it
hopefully the user will.
2002-09-04 04:24:54 +00:00
Dan Kalowsky 21e5f8ed77 No C++ comments, again! 2002-09-04 04:03:20 +00:00
Dan Kalowsky 4efc96d575 No C++ Comments 2002-09-04 03:57:59 +00:00
3c820b39d3 NEWS update 2002-09-04 00:35:09 +00:00
05d52abd27 ChangeLog update 2002-09-04 00:34:17 +00:00
foobar 639221694f Use zend_ini_string instead of the 'alias'. 2002-09-03 22:54:02 +00:00
Rasmus Lerdorf 86c4c1730e Check for uppercase function names in .def files - patch from David Viner 2002-09-03 20:57:20 +00:00
Thies C. Arntzen ca0a7c4323 nuke warning 2002-09-03 14:14:44 +00:00
Thies C. Arntzen db92641e32 nuke unneeded stuff 2002-09-03 13:53:05 +00:00
foobar 1c52f18fa2 This does not belong here as it was MFHd.. 2002-09-03 12:52:03 +00:00
Markus Fischer 472b2f0737 - Update 2002-09-03 11:41:29 +00:00
Zeev Suraski e801a99a50 MFZE1 2002-09-03 10:25:06 +00:00
Zeev Suraski 5f3e75a725 MFZE1 2002-09-03 10:06:13 +00:00
Derick Rethans 45a203b411 - Revert
#- Sorry... was too busy with it to notice discussion on php.dev
2002-09-03 09:57:27 +00:00
Derick Rethans 74049eb191 - MFH for: Apply rest of html errors fix (Patch by Jan Lehnardt <jan@php.net>) 2002-09-03 09:56:20 +00:00
Sebastian Bergmann cfad3c664f Add html_errors to zend_utility_values. Patch by Jan Lehnardt <jan@php.net>. 2002-09-03 09:41:41 +00:00
Rui Hirokawa ee2e4ed41f removed #ifdef for mbstring.encoding_translation. 2002-09-03 09:11:33 +00:00
Yasuo Ohgaki 582026fd64 Added mbstring.encoding_translation to php.ini-dist|recommended 2002-09-03 07:38:08 +00:00
Rui Hirokawa 9b33531910 *** empty log message *** 2002-09-03 05:20:40 +00:00
Rui Hirokawa 7678ada2b8 --enable-mbstr-enc-trans is abolished to prevent some problems about POST/GET/Cookie variables. the same functionality is controllable in php.ini option mbstring.encoding_translation (default:Off). 2002-09-03 05:18:20 +00:00
Andi Gutmans 1c5841d376 - Fix typo 2002-09-03 04:19:04 +00:00
3df0df50f4 ChangeLog update 2002-09-03 00:32:58 +00:00
Jan Lehnardt 298ae37e8c - prepare non-html phpinfo output for zend extensions 2002-09-02 20:44:01 +00:00
Markus Fischer f07b724620 - Enable strcoll() for win32 build
# Maybe I'm missing something. PHP has strcoll() since 4.0.5 but HAVE_STRCOLL
# was always only available under Unix, no one activated it for Win32 since
# then?
#
# Test to show it works:
# <? $a=array("a", "z", "ä"); setlocale(LC_ALL, "German"); usort($a, "strcoll"); var_dump($a); ?>
#
# Output:
# array(3) {
#   [0]=>
#   string(1) "a"
#   [1]=>
#   string(1) "ä"
#   [2]=>
#   string(1) "z"
# }
#
# Thanks to a comment found on the usort() page and to a dlcp post about a
# similar issue.
#
# Worth for a MFH for 4.2.3, anyone ?
2002-09-02 18:03:24 +00:00
Thies C. Arntzen 96ab23981c refine last patch. if the argument-stack is not consistent don't try to show
arguments. no call to zend_error is made as we might end up in an infinite
recursion if called from an error_handler.
so: if the arguments to functions aren't shown in debug_backtrace this is 'cause
the arument stack was not consistent when debug_backtrace was called.
2002-09-02 12:26:09 +00:00
Thies C. Arntzen 9afea7175c debug_backtrace() now checks the complete argument-stack for consistency. 2002-09-02 12:20:09 +00:00
Stanislav Malyshev c8a659f8f6 MFZE1 2002-09-02 09:13:53 +00:00
bf220ce104 ChangeLog update 2002-09-02 00:31:53 +00:00
Andi Gutmans f4e8b2c4e9 - Fix leak reported by "l0t3k" <cshmoove@hotmail.com> 2002-09-01 19:19:50 +00:00
Sergey Kartashoff e32f35eb4e - Udm_Cat_Path, Udm_Cat_List, Udm_Get_Doc_Count functions have been fixed
to work with mnogosearch-3.2.6 and later.
- Removed search words highlighting while getting document URL in
  mnogosearch extention
2002-09-01 14:11:46 +00:00
Sebastian Bergmann 714c19fe66 Per discussion on #php.bugs (+1 from at least Derick and Jani), revert double_buffering. 2002-09-01 11:33:19 +00:00
Stanislav Malyshev 73cf316a53 MFZE1 2002-09-01 08:30:39 +00:00
29e033cbb1 ChangeLog update 2002-09-01 00:31:23 +00:00
Jan Lehnardt 2334abeff4 - cosmetics 2002-08-31 21:43:54 +00:00
foobar c0d345ea5c Fix it back..(what was that commit????) 2002-08-31 14:04:29 +00:00
a2f44a409d ChangeLog update 2002-08-31 00:34:06 +00:00
80a76b4b12 Fixing up Changelog and NEWS for the past few days. 2002-08-30 15:45:12 +00:00
Adam Dickmeiss b18b6f3691 Bug fix: dont cache connection if proxy setting have changed 2002-08-30 13:26:41 +00:00
foobar 06fe943795 Fix shared build 2002-08-30 03:52:41 +00:00
foobar 4e34d6ce27 Fix bug: #19124, xmlrpc extension builds ok now as shared extension. 2002-08-30 02:57:13 +00:00
foobar 55b22b16a2 xpm.h is sometimes in /usr/include/X11 (or /usr/X11R6/include/X11) 2002-08-30 02:44:45 +00:00
foobar bda34955db Fix the build when bundled gd library is used 2002-08-30 02:41:52 +00:00
Jan Lehnardt 81dcd62bc2 - seperate registered streams.
#read: make sebastian happy ;)
2002-08-29 18:28:11 +00:00
Ilia Alshanetsky 7a7497e21b Fixed the \0 check in previous patch. 2002-08-29 15:58:33 +00:00
Ilia Alshanetsky 337448322f Fixed bug #18966 2002-08-29 15:44:00 +00:00
foobar e040302807 Remove unnecessary whitespace 2002-08-29 15:28:09 +00:00
Jan Lehnardt d6497fc96e - reenable "no value" output. thanks to sebastian for pointing that out. 2002-08-29 10:24:02 +00:00
Pierre Joye a00f439ff0 Hope to finnally got it, fixes notice (Thx to Sebastian) 2002-08-29 10:08:37 +00:00
Jan Lehnardt e1cac684df - fix ZTS build. thanks to edin. 2002-08-29 09:11:22 +00:00
Marcus Boerger 38247a7993 One zero to much 2002-08-29 08:32:41 +00:00
Derick Rethans 9d31d92712 - EXIF is about meta data from images, not for digital cameras 2002-08-29 05:36:42 +00:00
foobar 04bbf46957 Fix bug: #19159, mysql_field_count was available since 3.22.24 2002-08-29 01:17:24 +00:00
foobar 5911a581e0 I would have thought this was clear to everyone already.. 2002-08-29 00:56:13 +00:00
foobar 715615ea6b revert that undiscussed change until it is really agreed upon. 2002-08-29 00:55:24 +00:00
1bbfe1058b NEWS update 2002-08-29 00:17:56 +00:00
3324e38e8a ChangeLog update 2002-08-29 00:17:29 +00:00
Ilia Alshanetsky f387972a97 Fixed compile warning (unused variable)
Added a \n separator between Addition Modules
2002-08-28 23:19:59 +00:00
Jan Lehnardt 6676617693 - add phpinfo() support for CLI.
@phpinfo() support for CLI (jan)
2002-08-28 22:31:51 +00:00
Rasmus Lerdorf 89651dabde Description didn't match the function here 2002-08-28 22:14:42 +00:00
Marcus Boerger 562b78f422 Enable EXIF by default as discussed with Rasmus
@Made EXIF (digital camera) extension enabled by default. (Marcus)
2002-08-28 19:31:01 +00:00
Thies C. Arntzen eef3e66f1f debug_backtrace()
- make args passed to functions called vy call_user_function available again.
2002-08-28 15:05:15 +00:00
Christian Stocker 7f62a0c972 correct entry about XsltObject->result_dump_*() 2002-08-28 15:02:54 +00:00
Thies C. Arntzen b72069e859 debug_backtrace():
- make args work if called from the error_handler
- fix refcount for args
2002-08-28 14:49:15 +00:00
Thies C. Arntzen bdc35c9f2e clear current_execute_data on bailout as it would point into some freed area
on the stack.
2002-08-28 14:43:32 +00:00
Derick Rethans a235002eeb - Let's make this a little bit more professional :) 2002-08-28 12:10:00 +00:00
Derick Rethans a9d819818b - MFZE1 2002-08-28 09:49:40 +00:00
Derick Rethans 5b9a26da81 - Whitespace 2002-08-28 09:28:06 +00:00
Jason Greene b3a1998386 @socket_recvfrom is now binary safe (Jason)
Zero the structure so that when the tcp layer of the OS decides to ignore it,
we do not think we are getting a value
2002-08-28 06:15:13 +00:00
Dan Kalowsky 936df3c34f silence build warning, added default case 2002-08-28 06:13:49 +00:00
foobar d102e54d5b This extension is not forced to be compiled as shared. 2002-08-28 02:44:40 +00:00
foobar 3410e25b17 Added the header and removed some commented out stuff (wrong place anyway) 2002-08-28 02:43:46 +00:00
foobar 73f43e35f0 ws fixes 2002-08-28 02:38:17 +00:00
foobar 1939764d98 Fix ZTS build 2002-08-28 02:08:57 +00:00
Brad House 77208efb26 Adding a left-out command 2002-08-27 20:55:48 +00:00
Marcus Boerger 1ab90386cf Some requirements engineering: today necessary defines exists where
needed.
2002-08-27 20:10:46 +00:00
Marcus Boerger d1b56bf810 php_error_docref
BUT didn't we decide to disable those functions when not supported
instead of displaying an error?
2002-08-27 19:40:55 +00:00
Marcus Boerger 965ecdb3a6 php_error_docref 2002-08-27 15:32:04 +00:00
Marcus Boerger a8027c1428 Remove this nonsense - this makes the module unpredicable since we do
not have default values in ini and more encodings will follow.
2002-08-27 14:57:09 +00:00
Christian Stocker e8b3e2abe7 fix some to long property strings 2002-08-27 08:40:44 +00:00
Christian Stocker b29110dd3d argh, domxml_doc_free is not yet ready for CVS :) 2002-08-27 07:33:55 +00:00
Christian Stocker 567c4bbe4b stupid typo 2002-08-27 07:25:53 +00:00
Christian Stocker e0b4533eeb fix memleak in php_domxslt_string_to_xpathexpr 2002-08-27 06:54:21 +00:00
Derick Rethans 61f70a3cb7 - "Use" is not a name :) 2002-08-27 05:30:38 +00:00
Marcus Boerger a3c5628f82 -php_error_docref
-nuke unused variable
2002-08-27 00:44:57 +00:00
Marcus Boerger f06fcbd59a header for last commit 2002-08-27 00:44:07 +00:00
foobar 070516010d cleanup 2002-08-27 00:25:39 +00:00
276e0472e2 NEWS update 2002-08-27 00:21:34 +00:00
Marcus Boerger 36ede8b86f -fix memory leak on failure
-only use one function for nearly identical things
-fix stripslashes not working on input directly
2002-08-27 00:20:37 +00:00
9cf662e1a2 ChangeLog update 2002-08-27 00:20:32 +00:00
Marcus Boerger 9ede240057 -reimplemented old style output (.exp, .out)
-implemented diff format output
-delete error logs on success
@Changed regression tests produce selectable error reports. The tests now
@recognize environment variable TEST_PHP_LOG_FORMAT which can
@contain O and E for old style .out and .exp files, L for new .log format and
@D for an internal diff format that does not require systems diff. (Marcus)
#diff output makes it easier to detect the failure on huge or combined tests.
#It was discussed that the php function's diff output has the advantage that
#it is available on every system. Everyone insisting on systems diff may
#use diff on .exp and .out files.
2002-08-26 23:26:46 +00:00
Marcus Boerger 6063c8c478 fix fwrite to no longer apply stripslashes on input string when
magic_quotes_runtime is set On.
2002-08-26 23:18:59 +00:00
Marcus Boerger f0b492b88d fix proto and tweak error message 2002-08-26 23:16:51 +00:00
Thies C. Arntzen 4d931b9888 debug_backtrace(): show name of included file for include and require calls
plus some small fixes suggested by andi.
# now it's perfect;-)
2002-08-26 16:40:34 +00:00
Wez Furlong cfb5002e0b Implement com_invoke_ex, which allows the user to specify the invoke kind
flags, so that custom invocations can be made.
Tidy up code for com_propget and com_propset, so that it can work with
objects as well as resources.
# This code is from a couple of months ago, and has been hanging around
# on my windows dev box; I'm not entirely sure where I needed com_invoke_ex,
# but the additions to propget and propset are useful.
2002-08-26 13:36:35 +00:00
Derick Rethans fc7eb838fc - Whitespace 2002-08-26 09:47:46 +00:00
Derick Rethans 7edb660af9 @- Use escape_shell_cmd() to allow multiple extra parameters to the
@  invocation of the mailer as used in the fifth parameter to mail(). (Derick)
- Use escape_shell_cmd() to allow multiple extra parameters to the invocation
  of the mailer as used in the fifth parameter to mail().
2002-08-26 09:44:31 +00:00
Marcus Boerger 60a866d977 that propably wasn't a good idea and thus already removed 2002-08-26 02:07:47 +00:00
Pierre Joye 3f27a08b66 Set 'defaultuser' if 'USER' env not found 2002-08-26 00:39:56 +00:00
Pierre Joye 219624293b Replace horrendous code :) 2002-08-26 00:37:25 +00:00
91fe1a846c NEWS update 2002-08-26 00:18:29 +00:00
Pierre Joye 5ea6a5b807 Rule 1: Never quickly fix a thing in cvs
Rule 2: follow rule 1
Thx rasmus :)
2002-08-26 00:18:00 +00:00
Jason Greene 1ce75e3a63 Implement socket errno values for UNIX based platforms.
They are all prefixed with SOCKET_ to preserve name space
Win32 will follow...
2002-08-25 23:28:42 +00:00
Sebastian Bergmann e8b50bc834 Fix ZTS build. 2002-08-25 22:17:56 +00:00
Wez Furlong ddddf398af WS 2002-08-25 19:44:25 +00:00
Ilia Alshanetsky 64ef43ecd4 Slight optimization of php_strtoupper & php_strtoupper functions. 2002-08-25 19:08:07 +00:00
Marcus Boerger 412c2ba7a3 MFB 2002-08-25 18:48:46 +00:00
Marcus Boerger a1f7bb12f1 use php_error_docref() 2002-08-25 18:45:02 +00:00
Pierre Joye 4bbe4c703c Remove $_ENV usages, getenv() is used instead
'MAKE' and 'USER' are used, if 'USER' not found I set user to 'defaultuser'
2002-08-25 18:29:32 +00:00
Marcus Boerger ba40963985 improoved error messages 2002-08-25 18:21:40 +00:00
Pierre Joye 19dacf18a1 Remove $_ENV usages
Remove $env arg in all functions and uses getenv instead
Note only 'USER' env var is used
2002-08-25 18:21:10 +00:00
Pierre Joye 9870f455ff Remove $_ENV usages, this causes problems with recommanded php.ini files
Replace by getenv()
2002-08-25 18:11:24 +00:00
Marcus Boerger 8638bb882f Removed __output_handler as everybody seems against such implicit
behaviour. Instead supply error message.
2002-08-25 14:20:37 +00:00
foobar ba45e2ea58 Fix long line..and typo 2002-08-25 12:50:15 +00:00
Derick Rethans 8218b5838c @- PHP's cURL extention now requires cURL version 7.9.8 (Derick)
- Bump up required version number of cURL to 7.9.8
2002-08-25 12:24:40 +00:00
Marcus Boerger 6d97e0c3eb Use zend_is_callable() instead of php_check_object_method_array() and
drop the latter. THX to Markus Fischer - i did not recognize this function.

@Expanded ob_start() to allow object parameters without methodnames and
@use default method __output_handler(). (Marcus)
2002-08-25 12:16:48 +00:00
Wez Furlong 95ffc663d9 Fix open_basedir. 2002-08-25 12:10:17 +00:00
Wez Furlong 5c6ad38c31 Prevent possible problems with include_path. 2002-08-25 12:09:57 +00:00
Marcus Boerger 08ab630dc7 Reenable array(object,method) in ob_start() 2002-08-25 11:50:25 +00:00
Wez Furlong e286b286ae Hopefully really fix #18022 this time. 2002-08-25 11:23:19 +00:00
Wez Furlong 6d2fb45328 Potential fix for Bug#18022:
Streams that are pipes on systems that HAVE_FLUSHIO should not be seeked
as is required for plain files on those systems.
2002-08-25 11:02:05 +00:00
Wez Furlong 509ad5ec0f Unify error messages. 2002-08-25 10:36:08 +00:00
Wez Furlong c7be7b55d1 Add a "closing" parameter for filters to determine if a flush is the last
flush before the stream is closed.  This allows filters to finish a chunk
and write footers etc.
2002-08-25 10:26:58 +00:00
Wez Furlong 27adb75585 Remove php_stream_error as discussed with Rasmus.
Unify error messages for ext/ftp. (which was using php_stream_error).
2002-08-25 10:10:23 +00:00
dd0d03885d NEWS update 2002-08-25 00:19:53 +00:00
6218e98046 ChangeLog update 2002-08-25 00:18:44 +00:00
Yasuo Ohgaki 798236bc93 Changed pg_connection_info()/pg_connection_reset()/pg_connection_busy()/pg_result_status()/pg_result_error() silently return FALSE when resource is not passed to them.
@ Changed pg_connection_info()/pg_connection_reset()/pg_connection_busy()/pg_result_status()/pg_result_error() silently return FALSE when resource is not passed to them. (Yasuo)
2002-08-24 22:28:28 +00:00
Yasuo Ohgaki d23cb1686d Rename mysql_character_set_name() to mysql_client_encoding(). pg_client_encoding() is available from PHP4.0.3 and this function is available from PHP 4.3.0 2002-08-24 21:41:25 +00:00
Andi Gutmans c651dd962f - Whitespace 2002-08-24 20:57:54 +00:00
Andi Gutmans 8a02b43073 - Whitespace and better variable name 2002-08-24 20:52:52 +00:00
Marcus Boerger a0f7922863 Convert to unix, related to bug 18588 2002-08-24 13:28:53 +00:00
Zeev Suraski 4b81d04210 Undeprecate mysql_db_query() 2002-08-24 13:15:35 +00:00
foobar 4e8d521cb4 Make this entry a little bit easier for eyes to catch. 2002-08-24 13:00:42 +00:00
Stefan Esser 3efb925931 Overwrite control chars in parameters with whitespace instead of truncating. 2002-08-24 11:37:50 +00:00
Georg Richter 11bd3c08b6 changed zend_error -> php_error_docref() 2002-08-24 10:53:40 +00:00
Derick Rethans 4d283352a0 - Also make bz2 archives 2002-08-24 09:56:51 +00:00
Den V. Tsopa a1e0e5c859 convert encoding to cp1251,cp866 was not working, fixed 2002-08-24 09:48:00 +00:00
Georg Richter 3bd2a54064 changed error messages according to CODING_STANDARDS 2002-08-24 09:27:51 +00:00
Georg Richter 8a9632842a MySQL changes 2002-08-24 09:26:58 +00:00
Thies C. Arntzen 800c67a166 fix warning 2002-08-24 09:05:44 +00:00
Yasuo Ohgaki e4f9053061 Fixed typo 2002-08-24 07:19:40 +00:00
Yasuo Ohgaki 488a1e7399 Make pg_result_status() a little more useufl by ignoring invalid
parameter and return FALSE.
(i.e. pg_query() may return FALSE instead of result resource)
2002-08-24 07:18:15 +00:00
Marcus Boerger 149ad05b4f php_error_docref
#New conversion available at: http://docref.txt.marcus-boerger.de
2002-08-24 01:19:28 +00:00
foobar 928c4ad41d Remove relic from PHP3 days which is not useful anymore. 2002-08-24 00:56:00 +00:00
Zeev Suraski 5a5e206ec2 Fix import_request_variables() 2002-08-24 00:45:09 +00:00
89f8b5ad79 ChangeLog update 2002-08-24 00:20:37 +00:00
foobar 135a1c64c4 Made this extension to use the resource stuff 2002-08-23 22:24:02 +00:00
Andi Gutmans f976590420 - Add \n to configure fprintf 2002-08-23 22:11:10 +00:00
Andi Gutmans 3844b6af97 - dlerror -> DL_ERROR 2002-08-23 22:07:59 +00:00
foobar 06c6a96721 ws fix 2002-08-23 20:57:30 +00:00
Rasmus Lerdorf 53e6c07907 stream closing bug here too 2002-08-23 17:53:03 +00:00
Wez Furlong 533c16e21e Fix segfault reported by Rasmus. 2002-08-23 17:45:46 +00:00
Wez Furlong 2a71d7d5bb Respect safe mode setting when opening scripts and things for the ZE. 2002-08-23 17:39:20 +00:00
Georg Richter 6650761f9b fixed bug #18643 2002-08-23 15:56:34 +00:00
Christian Stocker 064fb5c3cb renamed xslt_dump_* to xslt_result_dump_* to avoid confusion
# will adjust NEWS file later
2002-08-23 15:26:19 +00:00
Christian Stocker 9278d9bf1a fix memleak in xslt->dump_mem() 2002-08-23 15:19:16 +00:00
Thies C. Arntzen eea1a0b296 debug_backtrace: show include/require/eval as normal functions on the stack
# the hard bit is to find out the args for those
2002-08-23 14:44:58 +00:00
Derick Rethans 8feda5cb6a - No spaces :) 2002-08-23 14:28:56 +00:00
Thies C. Arntzen 280809189b - debug_backtrace now also returns an array containing the arguments of the
called function.

zeev, andi - is knowing the structure of the stack considered a bad thing in
zend_builtin_function? if yes i would have to create a new function in
zend_ptr_stack.c (but i think we are save this way)
2002-08-23 14:22:25 +00:00
Georg Richter 0c386174db fixed bug #19016
SSL is only available for MYSQL_VERSION_ID >= 40000
2002-08-23 14:10:27 +00:00
Thies C. Arntzen 7ed2d363c8 - debug_backtrace:
added "type" ('->' or '::') for object calls.
	made calls done thru call_user_func show-up correct in backtraces.

andi,
does this look correct to you?
2002-08-23 13:50:42 +00:00
Thies C. Arntzen 10b58f2110 those are set by RETURN_FROM_EXECUTE 2002-08-23 12:18:54 +00:00
Georg Richter 8153dfc877 fixed bug #16965 2002-08-23 10:16:19 +00:00
Zeev Suraski a6e8e72372 Fix ob_gzhandler()'s handling of requests w/o compression but that do have
the Accept-Encoding header
2002-08-23 08:37:35 +00:00
foobar 03b1204a8a Update/cleanup.
# Everyone, check the entries under 4.3.0 which have been MFH'd into
# the PHP_4_2_0 branch.
2002-08-23 01:17:48 +00:00
9a7c38c148 NEWS update 2002-08-23 00:18:45 +00:00
Wez Furlong 3d8b6c2d52 Add a configure check to see if the seeker function in an fopencookie
uses off_t or the newer, more portable "fpos_t *".
The check could perhaps be more refined, as the test program will segfault
on older systems (like mine) that use off_t.
2002-08-22 22:28:19 +00:00
Ilia Alshanetsky 081e420c18 Fixed a typo 2002-08-22 19:19:37 +00:00
Marcus Boerger 17743955d0 more php_error_docref 2002-08-22 19:14:27 +00:00
Marcus Boerger 727067f59c php_error_docref... 2002-08-22 18:38:44 +00:00
Wez Furlong 5718112088 Fix compile warnings under win32 2002-08-22 17:42:18 +00:00
Wez Furlong 62b7b412e2 *cough* 2002-08-22 17:40:25 +00:00
Wez Furlong a388ab6205 Fix error messages. 2002-08-22 17:37:46 +00:00
Marcus Boerger 902c17e05a fiw warnings 2002-08-22 16:21:32 +00:00
Christian Stocker 8e52350a49 - moved xslt_dump_ to better place
- removed unused variables
2002-08-22 16:04:28 +00:00
Christian Stocker 1a486b6676 @- Added XsltObject->dump_file($result,$filename[,$compression]) for dumping
@  xslt-result directly into a file. (chregu)
2002-08-22 15:54:23 +00:00
Christian Stocker 1f57dec2bf @- Added XsltObject->dump_mem($result) for returning xslt-result directly
@  into a string (morus.walter@web.de, chregu)

- XsltObject->dump_file() will follow
- bumped up needed libxslt version to 1.0.18
2002-08-22 15:02:41 +00:00
Christian Stocker 2ce44cd99c return version number of linked libxml2, not of the one, which it was
compiled against
2002-08-22 14:32:43 +00:00
Marcus Boerger 6ce08f7382 fix examples
#did i write those? shame on me for not knowing my own functions
2002-08-22 14:04:01 +00:00
Marcus Boerger 9b9052f27a fix zts build 2002-08-22 14:02:08 +00:00
Mark L. Woodward 7711aac1d8 Removed C++ comments 2002-08-22 13:30:03 +00:00
Edin Kadribasic 3c4c2926d0 magic.mime seems to be more common name for the file. 2002-08-22 13:23:51 +00:00
Edin Kadribasic 55173781b5 @- Made mime_magic extension available on win32 platform. (Edin)
Mime_magic extensions builds on windows now.
2002-08-22 13:16:03 +00:00
Ilia Alshanetsky 848bcf7527 Instead of hardcoding the path of magic.mime file, try to find the file
inside common paths for the file.
2002-08-22 12:21:25 +00:00
Ilia Alshanetsky 484d7793e0 Fixed a number of compile warnings. 2002-08-22 12:15:20 +00:00
Marcus Boerger 28970b9260 fix warning 2002-08-22 10:52:40 +00:00
Marcus Boerger 4c1f3dec65 fix php_error_docref parameters 2002-08-22 10:16:03 +00:00
Christian Stocker 47d8e08b11 @ - Added xslt_backend_version() and xslt_backend_name() for getting
@   information about the processor backend. (chregu)
2002-08-22 09:54:06 +00:00
Stefan Roehrich 0ea1dda8cd Fixed prototype.
Fixed double printing of function name in docref error messages.
2002-08-22 09:38:55 +00:00
Christian Stocker 2069410f57 add allow_webdav_methods as option 2002-08-22 07:59:11 +00:00
Christian Stocker 55f3ec1af4 do not check for POST twice 2002-08-22 07:56:39 +00:00
Christian Stocker 9495fb9d7d @ - Added php.ini option "allow_webdav_methods" to allow handling of
@   WebDAV http requests within PHP scripts. (chregu)
# More methods (for DeltaV) will follow.
2002-08-22 07:48:23 +00:00
Tim Toohey 266193159b (PHP imagecolormatch) makes a palette image match the colours in the
true-color version.
(PHP imagelayereffect) extended alpha-channel mixing effects for the
                       bundled GD library
@Added ImageColorMatch() and ImageLayerEffect() functions
@which work with the bundled GD library (ttoohey)
2002-08-22 07:28:26 +00:00
Jason Greene 261a60a360 @Made major improvents to the pcntl extension(Jason):
@ - Greatly improved performance, by switching the signal callback mechanism
@   to use ticks
@ - Implemented object signal callback ability by using array($obj, $method)
@ - Added a restart parameter to pcntl_signal, which allows you to disable
@   the default of system call restarting
Changed callback hash table to be initialized and destroyed per reqeust
(allows the ability to use request life zvals as handles)
Nuked warnings
Modified test script to adjust to new ticks backend
Some slight WS fixes
2002-08-22 04:20:10 +00:00
foobar faff3a6e8a kill some compile warnings 2002-08-22 01:25:52 +00:00
foobar ff5ed789bc style fix 2002-08-22 01:20:50 +00:00
foobar 0d4776625a comment out unused variable 2002-08-22 01:06:14 +00:00
foobar 7796bc12dd kill compiler warning (unused variable) 2002-08-22 00:43:18 +00:00
foobar b9d4067001 Fix typo. 2002-08-22 00:34:07 +00:00
foobar 91b3644a72 These functions are not used elsewhere. 2002-08-22 00:19:54 +00:00
f35c4b5138 ChangeLog update 2002-08-22 00:17:15 +00:00
foobar 8beb1e2237 Fix ZTS build 2002-08-21 23:51:12 +00:00
Marcus Boerger d104d08a84 These require exif and mbstring 2002-08-21 23:14:40 +00:00
Marcus Boerger eb6e31f802 Test argument passing for CLI 2002-08-21 23:10:44 +00:00
Marcus Boerger 9cec8a13bd This does not work for CLI 2002-08-21 23:08:21 +00:00
Marcus Boerger 28ebb82c41 Added ARGS section to allow passing arguments to CLI tests 2002-08-21 23:06:38 +00:00
Thies C. Arntzen d88ca858aa zend_execute: make sure that current_execute_data points to the right thing
after coming back from recursion.
2002-08-21 13:58:20 +00:00
Ilia Alshanetsky ea1bb5e172 Added monetary.h to prevent compile warning.
Fixed a memory leak inside money_format function, which occures if the
parameters to the function are not valid.
Fixed a segmentation fault inside money_format in the event the value
to be formated is >1024 bytes.
Made the return value of money_format be null terminated.
2002-08-21 13:14:57 +00:00
Ilia Alshanetsky 116b06d6a5 Added a check for monetary.h needed for strfmon inside string.c 2002-08-21 12:40:40 +00:00
Marcus Boerger 3b24fc1c5a Reflect recent changes to exif.c 2002-08-21 11:37:22 +00:00
Marcus Boerger 95e933fc99 Fixes array test 004.phpt. Nice copy paste error. 2002-08-21 11:23:44 +00:00
Marcus Boerger a70640480a Patch from Melvyn Sopacua <msopacua@idg.nl> finally fixes it (bug 19006). 2002-08-21 10:42:55 +00:00
Sebastian Bergmann 090e30a863 Fix ZTS build. 2002-08-21 06:22:19 +00:00
Derick Rethans ccf51590b3 - Proper format for CREDITS files 2002-08-21 05:41:49 +00:00
Uwe Steinmann 6a79e354c1 - gave overdue credits to christian 2002-08-21 05:39:28 +00:00
Dan Kalowsky 4809e8ebbc This final change enables the ext/java to compile on OSX.
# now to do testing and ensure that it works as stated... weeee...
2002-08-21 04:42:58 +00:00
Ilia Alshanetsky a86b1fc275 Fixed compile warning. 2002-08-21 03:59:27 +00:00
Marcus Boerger d3d12daec4 add ini setting precision - this does not fix the real problem here 2002-08-21 03:13:33 +00:00
Marcus Boerger e0c967508a more ini settings 2002-08-21 03:10:55 +00:00
Marcus Boerger 5e7a9af062 full decopling of size parameters of ob_start() and internal buffer handlers
#intended behaviour is now fully implemented,
2002-08-21 03:04:17 +00:00
Dan Kalowsky a832091a2c One more patch up towards OSX compatibility...
# it compiles now with the ObjC files (Finlay Doobie rocks the casbah)
2002-08-21 01:41:22 +00:00
Marcus Boerger be1e23cbc9 Add var_dump float format test 2002-08-21 01:27:56 +00:00
Marcus Boerger 534a63b5af Add combined base64 and md5 test 2002-08-21 01:26:21 +00:00
Marcus Boerger 9607a482b2 fix array tests
someone must have changed precision in php.ini-dist from 14 to 12
2002-08-21 01:22:02 +00:00
Marcus Boerger b6cf2bb4bc make snprintf and f,g,G converions of snprintf/spprintf C99 complient 2002-08-21 01:11:50 +00:00
Marcus Boerger b98c26382f Ignore double_buffering for ob_start(). 2002-08-21 01:00:56 +00:00
d887ea3c3d NEWS update 2002-08-21 00:23:33 +00:00
9f2abde460 ChangeLog update 2002-08-21 00:21:15 +00:00
Marcus Boerger 0e065f6b36 speling - thanks (Masaki Fujimoto), acually this wasn't my best piece of doc 2002-08-20 23:29:39 +00:00
Marcus Boerger 8e10659648 Revert ob_start() defaults to 40K/10K until i find a better solution. 2002-08-20 23:23:25 +00:00
Dan Kalowsky 7ac1397636 Correcting english in config 2002-08-20 23:08:24 +00:00
Dan Kalowsky 57a1181b9a Fix for Bug #18999 2002-08-20 23:04:53 +00:00
Wez Furlong 03b8214b9d Fix newly introduced leak in the debug build. 2002-08-20 22:08:55 +00:00
Wez Furlong 9d348ea800 Implement filter API for streams.
Filters can be stacked onto a stream; more details will follow in docs and
on php-dev.

Implement "string.rot13" filter

Allows the following script:

$fp = fopen("file.txt", "r");
stream_filter_prepend($fp, "string.rot13");

// File contents will be subject to a rot13 transformation before
// being output.
fpassthru($fp);
fclose($fp);
2002-08-20 20:47:47 +00:00
Wez Furlong a9ba30cd89 fix vim modeline 2002-08-20 20:43:45 +00:00
Marcus Boerger 9f86e70e8d speling - thanks derick 2002-08-20 20:27:18 +00:00
Marcus Boerger f15b4c1e30 change to php_error_docref()
#documentation about output relevant ini settings will be in ref.outcontrol
2002-08-20 20:22:30 +00:00
Marcus Boerger cbe9f80d44 note about double_buffering 2002-08-20 20:09:57 +00:00
Marcus Boerger 0f8681fc69 Changed handling of output buffer sizes. 2002-08-20 20:07:00 +00:00
Marcus Boerger 7bd7e14e4c Changed handling of output buffer sizes.
#.c to follow
2002-08-20 20:01:14 +00:00
Marcus Boerger fdf514f45c Changed handling of output buffer sizes. 2002-08-20 19:51:00 +00:00
Marcus Boerger 2a443b2e77 Changed handling of output buffer sizes.
@Added php.ini option "double_buffering" that forces an additional first
@output buffer and improved handling of buffer sizes. (Marcus)
2002-08-20 19:49:37 +00:00
foobar c4d424254a remove tabs 2002-08-20 12:01:24 +00:00
Derick Rethans c20c3fc610 - Fix for the compiler on Compaq Tru64 4.0F PK3 (bug #18974) 2002-08-20 11:18:18 +00:00
Marcus Boerger bb258468fc NO C++ comments 2002-08-20 10:00:28 +00:00
Edin Kadribasic e632758b19 Windows build supports returning the sql statement which failed. 2002-08-20 09:15:11 +00:00
Edin Kadribasic 48389cc2a6 Fixed build with Oracle 8.0.x (bug #18973). 2002-08-20 07:26:50 +00:00
e321742383 ChangeLog update 2002-08-20 00:19:08 +00:00
Wez Furlong 5f9a5a7c8e Remove php_stream_sock_set_blocking and replace with
php_stream_set_option which can be used in a similar way as ioctl()
to set options for streams.

Current options include buffering and blocking support.

o Buffer control is support for stdio based streams.
o Blocking/non-blocking is supported for stdio and socket based streams.
2002-08-19 22:59:10 +00:00
Ilia Alshanetsky 6dbc0e5483 Convert the value of tz_minuteswest inside struct timezone on Windows to
minutes from seconds.
2002-08-19 21:59:46 +00:00
foobar 7ea1e2d511 Fix the build when using --with-java without any path 2002-08-19 21:49:37 +00:00
Adam Dickmeiss e1a8983287 Make options piggyback and timeout work with ZOOM 2002-08-19 21:15:59 +00:00
Zeev Suraski 91f585744f MFZE1 2002-08-19 20:58:22 +00:00
Zeev Suraski bc906117bb Fix a few warnings 2002-08-19 20:47:55 +00:00
Zeev Suraski df4fdeb54e Fix a warning 2002-08-19 20:47:42 +00:00
Sander Roobol bed405cce4 Sync with var_unserializer.re 2002-08-19 20:02:59 +00:00
Sander Roobol 47ae4068bb Made unserialize handle floats with an E notation - bug #18654
Patch by Christophe Sollet <csollet@coleebris.com>.
(I'll commit a new var_unserializer.c in a second)
2002-08-19 19:45:46 +00:00
Sander Roobol ef9014d95d Don't know what this line was supposed to DO!?!? 2002-08-19 19:42:20 +00:00
Marcus Boerger 8b30aeacd8 -use of php_error_docref
-some more information in ob_get_status()
2002-08-19 18:47:23 +00:00
Marcus Boerger 3408366776 -allow changing html_errors any time changing display_errors is already
-use sizeof for strftime call
-removed unused #define
-mention CODING_STANDARDS as documentation
2002-08-19 18:40:28 +00:00
Rasmus Lerdorf f5630aa246 Fix xbithack bug finally (see bug #16515) 2002-08-19 15:52:21 +00:00
Christian Stocker 9698d5da45 w3c adjustments :)
- has_attributes returns empty string if attribute is not there
- parent_node returns null, if no parent
2002-08-19 14:01:04 +00:00
Edin Kadribasic 1fb6a30f0f Debug functions should only work in debug mode. 2002-08-19 13:46:39 +00:00
Stanislav Malyshev 2282ac6074 ZE2 compatibility fix
## In ZE2 the hash contains zend_class_entry *!
2002-08-19 10:58:18 +00:00
295ff60648 ChangeLog update 2002-08-19 00:17:41 +00:00
Holger Zimmermann b79415334e Some minor changes related to Pi3Web 2.0.1. 2002-08-18 15:46:48 +00:00
Stefan Esser 8d2bc70752 make POST requests work again 2002-08-18 13:05:44 +00:00
Stanislav Malyshev 05156fa349 ZE2 compatibility fix
## In ZE2 the hash contains zend_class_entry *!
2002-08-18 12:22:28 +00:00
Holger Zimmermann 93bbc5e531 Removed unused local variable header_line. 2002-08-18 11:05:28 +00:00
Ilia Alshanetsky 1aea030cf2 Corrected if() syntax in previous patch. 2002-08-18 07:54:33 +00:00
Ilia Alshanetsky d42dbfce8e Fixed a segmentation fault that would occur if an entry contained a
non-terminated enclosure. Bug #12556
2002-08-18 06:55:32 +00:00
Anil Madhavapeddy d5fd43be37 include PDFLIB_SHARED_LIBADD in the pdflib test, or it fails with
unresolved symbols on OpenBSD
2002-08-18 05:13:05 +00:00
James Cox aad8f14739 reverting to 1.73 for steph (sfox@php.net)
#is it just me or reverting using cvs just suck?
2002-08-18 05:05:44 +00:00
Dan Kalowsky 4e3cb1d3c5 Bug Fix #18960 - Submitted by alan_k@php.net 2002-08-18 04:33:10 +00:00
2d2250c520 ChangeLog update 2002-08-18 00:18:19 +00:00
Zeev Suraski 3b646f0e5d Use mtime instead of atime, as we always update the session file anyway. 2002-08-17 20:32:26 +00:00
Andi Gutmans 2372caf57e MFZE1 2002-08-17 20:20:36 +00:00
foobar 2ff107075e AFAIK, 4.3.0 will not contain ZE2.. 2002-08-17 17:10:13 +00:00
Zeev Suraski b66561c44a MFZE1 2002-08-17 16:22:40 +00:00
Zeev Suraski 88fd5f3f5d MFZE1 2002-08-17 16:07:26 +00:00
Stig Venaas c0be355cec Default is enable, so better --disable-ipv6 I guess 2002-08-17 15:53:02 +00:00
Stig Venaas fcc0380588 Added --enable-ipv6 and only look up AAAA in DNS when enabled 2002-08-17 13:56:39 +00:00
Stefan Esser 20693c1ad4 IE does not use quotes but now we are safe... 2002-08-17 11:48:21 +00:00
Christian Stocker 6cbb350607 More W3C conformance stuff (they returned all false before..)
- DomNode->attributes() returns NULL, if not found.
- DomNode->first_child() returns NULL, if not found
- DomNode->last_child() returns NULL, if not found.
- DomNode->namespace_uri() returns NULL, if not found.
2002-08-17 11:47:21 +00:00
Stefan Esser ecaa0a091a fixed the user supplied patch for bug #18792 2002-08-17 11:31:06 +00:00
Rasmus Lerdorf b16eb792ab Add warning about atime requirement for session gc 2002-08-17 01:14:53 +00:00
5d881cd07d NEWS update 2002-08-17 00:20:13 +00:00
f32baf54b6 ChangeLog update 2002-08-17 00:19:19 +00:00
foobar 2ae84184d3 ws fixes 2002-08-16 23:25:53 +00:00
Dan Kalowsky 6c22f90b4a Fix for bug #18792 submitted by t.bubeck@reinform.de
# talked this over with sterling and he believes it shouldn't break anything
# although there might be a need/desire to check for both ',' and ';'
2002-08-16 19:34:43 +00:00
Dan Kalowsky 26e044a143 Silence a compiler warning, and returns the SUCCESS value on PHP_MINIT 2002-08-16 16:56:55 +00:00
Andi Gutmans f7096fb8fc - Use tabs instead of spaces for indentation!
- Fix all sorts of ugly whitespace things.
- People, please write code according to our standards even if you don't
- like them.
2002-08-16 15:45:22 +00:00
Ilia Alshanetsky 3bd899ea43 Fixed a compile failure in Win32 caused by previous patch.
Changed else statement to comply with PHP coding standards.
2002-08-16 15:04:00 +00:00
Jason Greene 980feb5e98 Nuke warnings on strict compilers 2002-08-16 14:23:27 +00:00
Ilia Alshanetsky f11c3a4095 Added a handler for php -r '' for SAFE_MODE 2002-08-16 12:47:56 +00:00
Wez Furlong 2e4b6ef181 Fix a little leak. 2002-08-16 12:02:42 +00:00
Stig Bakken 5a41ced0d7 * append emacs footer 2002-08-16 10:12:17 +00:00
Stig Bakken bd7105f731 * remove builtin exception class 2002-08-16 10:11:32 +00:00
Sterling Hughes 88c1d8983f clean this up a bit 2002-08-16 10:08:32 +00:00
Wez Furlong c2cbae6dd3 Enhance Ilia's recent patch to query the wrapper subsystem to determine
if a filename is a URL and thus if safe-mode checks should be skipped.
2002-08-16 09:50:24 +00:00
Wez Furlong 613871d403 Fix: remove CVS output from Changelog. 2002-08-16 09:18:56 +00:00
Christian Stocker 9c20c7c9ba More on the way to W3C coformance:
@- Changed DomNode->next_sibling and DomNode->previous_sibling to return NULL
@  instead of false (W3C specs). (chregu)
@- Changed DomNode->insert_before() and DomNode->append_child() to conform to
@  W3C specs (moving not copying nodes, accepting NULL as 2nd param). (chregu)
2002-08-16 08:42:41 +00:00
Andi Gutmans 38eea2e817 - Fix whitespace 2002-08-16 07:11:37 +00:00
Ilia Alshanetsky a643ae656a Make https:// be exempt from safe_mode checks, just like http:// & ftp:// are. 2002-08-16 03:52:37 +00:00
Ilia Alshanetsky b284497eaf Added safe_mode & open_basedir check when a user is chaning ini options
that specify file system paths. Fixes bug #17168.
2002-08-16 01:39:10 +00:00
Stig Bakken 04788f9503 @- Added set_exception_handler() function for registering a global,
@  catch-all exception handling function (Stig)
- Added set_exception_handler() function for registering a global,
  catch-all exception handling function (Stig)
2002-08-16 00:41:37 +00:00
Stig Bakken 197c300860 * allow using the TESTS make variable again to determine which tests are run 2002-08-16 00:36:05 +00:00
412e1d91db NEWS update 2002-08-16 00:18:49 +00:00
87d86ad21d ChangeLog update 2002-08-16 00:18:07 +00:00
Zeev Suraski 9e743e83a5 Fix a NASTY multithreading bug with in the Apache module 2002-08-15 23:59:47 +00:00
Zeev Suraski 900651b7ab Make unset($_SESSION['foo']) actually remove the variable from the session,
if register_globals is off.
2002-08-15 21:44:44 +00:00
Zeev Suraski cc287d4c21 Update email address 2002-08-15 21:43:41 +00:00
Dan Kalowsky 26986164b4 Correcting some english in the comment... 2002-08-15 19:32:08 +00:00
Dan Kalowsky 443363dece marking the fix for Bug #18401 in NEWS 2002-08-15 19:13:14 +00:00
Dan Kalowsky dee21adc3d Fix for bug #18401, makes shuffle() properly generate all possibilities.
Patch provided by Adam Trachtenberg <adam@trachtenberg.com>
2002-08-15 19:09:05 +00:00
Christian Stocker 993d235c07 include libxml/xinclude.h to make some compilers happy 2002-08-15 18:02:25 +00:00
Martin Jansen 1936c5c7a6 * Fix bug #18918.
* Add some PHPdoc comments.
2002-08-15 17:07:12 +00:00
Dan Kalowsky 1462813bfd A fix suggested by chregu (who doesn't have karma) to re-enable older java
JDKs to work.
2002-08-15 14:18:09 +00:00
Christian Stocker 2126f799b9 proto fixes 2002-08-15 13:26:32 +00:00
Christian Stocker c0f4035116 @ - Added DomNode->set_namespace(uri[,prefix]) (chregu)
- Added third optional parameter (prefix) to DomDocument->create_element_ns()
- generate prefix from random number, if not provided.
2002-08-15 12:43:44 +00:00
foobar 3ff741df93 be more verbose 2002-08-15 11:19:40 +00:00
Alan Knowles d46bdbde66 changed default stop bits to a valid value 2002-08-15 09:39:35 +00:00
Alan Knowles 08887eaaf2 changed default stop bits 2002-08-15 09:37:26 +00:00
Alan Knowles 0dc8cdd4c7 adding dio_tcsetattr and ASYNC support 2002-08-15 09:23:41 +00:00
Yasuo Ohgaki 6adcd3d353 news for disabling trans-sid by default.
but no entry for depreciation of --enable-trans-sid :(
(from 4.2.0)
2002-08-15 03:13:46 +00:00
Dan Kalowsky 1b8dd7f355 silencing some windows build warnings 2002-08-15 00:41:35 +00:00
Zeev Suraski 0e6b647741 coming to think of it, it shouldn't be necessary at all (thanks Jani :) 2002-08-15 00:37:21 +00:00
Zeev Suraski f4196d9bd2 Fix build 2002-08-15 00:35:36 +00:00
foobar 6b0ca6074d hot, damn hot. 2002-08-15 00:26:03 +00:00
Zeev Suraski 0bb780b384 MFZE1 2002-08-15 00:25:27 +00:00
43f17d4c9b NEWS update 2002-08-15 00:19:22 +00:00
d823e3fe41 ChangeLog update 2002-08-15 00:18:40 +00:00
Marcus Boerger 18ef76e361 do not include "php_have_iconv.h" 2002-08-14 23:48:52 +00:00
Yasuo Ohgaki 13a3dd7b77 Forgot to update source default. 2002-08-14 22:31:39 +00:00
Dan Kalowsky c55d024c29 Comming a fix for a compile error found in Bug #15630
# NOTE this is NOT the supplied patch in said bug for fixing imap_utf7_decode
2002-08-14 20:55:11 +00:00
Dan Kalowsky 161e279981 Silencing a compilier warning on windows 2002-08-14 20:40:48 +00:00
Dan Kalowsky f3fc7fe2fd Updating the error message to state a difference between libraries and
include.  Also restoring old for search to keep BC on configure
2002-08-14 17:49:41 +00:00
Christian Stocker 5c935cb372 - let DomNode->replace_child always behave correctly (acc. to W3C specs)
if the newchild had the same parent as the old child, nothing happened,
which seemed strange behaviout to me...
2002-08-14 17:38:20 +00:00
Dan Kalowsky b22a1eb935 Giving Ilia his props 2002-08-14 17:17:16 +00:00
Dan Kalowsky 0917902b92 Fix for Bug #9280 with regards to an Expect header. patch submitted by
Ilia <ilia@prohost.org>
# someone just give the man his php4 karma please!
2002-08-14 17:15:49 +00:00
Dan Kalowsky 4b691d154a Adding a check for the binaries rather than just the directories. 2002-08-14 17:04:05 +00:00
Christian Stocker ce71fe0288 DomNode->replace_node moves instead of copies node. 2002-08-14 16:53:56 +00:00
Dan Kalowsky d10bf42029 JavaC doesn't take flags like this, Java jar does, pay attention kalowsky 2002-08-14 16:53:49 +00:00
Dan Kalowsky 00b467bd6a cleaning up the displayed path (removing the ./ in the middle) 2002-08-14 16:49:22 +00:00
Dan Kalowsky 398288f236 Fix for Bug #18794, and probably various others with nsapi 2002-08-14 16:39:26 +00:00
Dan Kalowsky 38a6873f20 correcting these to be only docref's not docref1's 2002-08-14 16:23:16 +00:00
Dan Kalowsky 73557f5b52 Adding in MSG_RESULT check and \n for configure output viewing 2002-08-14 16:22:20 +00:00
Christian Stocker c0a79401fd - fix for bug #17771 (insert_before misbeaviour (DOM L2 spec.))
@ - DomNode->insert_before behaves now according to W3C spec
@   ie. new_child is moved, not copied. (chregu)
2002-08-14 16:12:18 +00:00
Dan Kalowsky 9f597d2dd1 Correcting mis-versioned comment 2002-08-14 16:11:49 +00:00
Dan Kalowsky 8d9487c00e JAVA_INCLUDE, not JAVE_INCLUDE 2002-08-14 16:01:13 +00:00
Dan Kalowsky 49dd85c460 A little more clean up on the error messages, with a sample JDK 1.3 path to libjava.so 2002-08-14 15:29:48 +00:00
Dan Kalowsky 8b1e7744c1 correcting the AC_MSG_RESULT line 2002-08-14 14:37:04 +00:00
Dan Kalowsky ba07aa06d8 adding in PATH check for JavaJar as well... 2002-08-14 14:36:08 +00:00
Christian Stocker 63874f9017 @ - Added some namespace support with DomNode->add_namespace(uri, prefix)
@   and DomDocument->create_element_ns(uri, nodename) (chregu)
2002-08-14 14:23:44 +00:00
Dan Kalowsky 6be8fb6a2e Fix a bug for a user provided path as eru. 2002-08-14 13:48:44 +00:00
Christian Stocker 780c1605c8 bump up api version number 2002-08-14 09:20:19 +00:00
Christian Stocker 280cb97fef fix for bug #18196
@ - DomElement->node_name() takes optional boolean argument for retrieving
@ -  full qualified name (ie namespace prefix) (chregu)
2002-08-14 09:07:34 +00:00
Christian Stocker 323765cc17 fix for bug #18395 (DOMXML crash on removing previously created attributes) 2002-08-14 08:27:36 +00:00
Christian Stocker 43bdd6ed73 @ - DomNode->child_nodes() returns empty array instead of false, if no
@ - child nodes are found (chregu)
2002-08-14 07:29:46 +00:00
Marcus Boerger 3df8889c0b -remove corrupt entry until change has been completed
-minor fixes
-honor Derick for his idea error messages to point to the manual
2002-08-14 07:05:57 +00:00
Yasuo Ohgaki 699ccceaa4 Added trans_sid security risk examples. 2002-08-14 06:45:23 +00:00
Den V. Tsopa e139decdea Revert from patch added mb_guess_encoding to previous version 2002-08-14 06:38:07 +00:00
Yasuo Ohgaki 8c020d357f Add warning... It seems posting message to php-dev/php-cvs does not work! 2002-08-14 06:28:16 +00:00
Den V. Tsopa 4f5743582e Added new function mb_guess_encoding, based on symbols rating 2002-08-14 05:41:40 +00:00
Brad LaFountain 7c1d2ff2e4 some more doc/lit stuff
some more wsdl stuff
2002-08-14 05:26:25 +00:00
Jason Greene b806a8e247 MFZE1 (use token instead of global for opcode counting) 2002-08-14 01:40:59 +00:00
Dan Kalowsky 14a8c395af Adding in updates for the fixes to ODBC, and markers for the pack/unpack
memory leaks
2002-08-14 00:42:02 +00:00
8ef237f669 NEWS update 2002-08-14 00:18:47 +00:00
fa626babf2 ChangeLog update 2002-08-14 00:18:10 +00:00
Dan Kalowsky 2f1b6397bc Fix for Bug #17572 2002-08-13 23:48:05 +00:00
Dan Kalowsky 19e42a2ed3 Fixed another memory leak, patch provided by Ilia <ilia@prohost.org> 2002-08-13 23:12:54 +00:00
Dan Kalowsky ed135034a9 Fixes a memory leak which results when an invalid format code is
specified.  Patch by Ilia <ilia@prohost.org>
#Someone give him php4 karma :)
2002-08-13 21:56:39 +00:00
Dan Kalowsky 2e6d771139 As per the suggestion on php-dev, now please #ifdef 0_<username here> 2002-08-13 21:44:59 +00:00
Dan Kalowsky e5240d0b78 Updating to reflect ODBC additons and default timeout 2002-08-13 21:43:14 +00:00
Dan Kalowsky ce160f1bde fixing my misunderstanding of the php_error_docref 2002-08-13 21:39:36 +00:00
Dan Kalowsky 4fcca0167b Removing the PHP_31 tag...
# I'm not sure if the rest of this define can go or not...
2002-08-13 21:35:54 +00:00
Marcus Boerger 0a845714b7 -better use external example
-say NULL is intended
-correct example
#hope this is a bit easier to understand and clears it a bit
2002-08-13 20:55:42 +00:00
Andi Gutmans 17d1c75b8b - Fix crash when exception is raised in __autoload function 2002-08-13 16:46:40 +00:00
Marcus Boerger d2418b11f8 docref_root and docref_ext for php_error_docref()
@Added clickable error messages that direct to a page describing the
@error or function causing the error in detail. (Yasuo, Wez, Marcus)
2002-08-13 15:29:34 +00:00
Zeev Suraski 88d3154b68 MFZE1 2002-08-13 15:14:45 +00:00
Dan Kalowsky 4feff54879 Correcting as per discussion with Iliaa and Edin on efnet://#php.bugs 2002-08-13 14:56:50 +00:00
Dan Kalowsky 1027dfcdd1 Bug Fix #16113, as reflective of a php-dev convo between wez and iliaa 2002-08-13 14:39:03 +00:00
Dan Kalowsky ea6ed5b8a5 Fixing the php_error_docref's to be compliant with the standard.
# Can't we just compress all these docrefs down to one function?!?
2002-08-13 13:26:31 +00:00
Marcus Boerger 6d10159eac comments & php_error_docref 2002-08-13 09:42:51 +00:00
Marcus Boerger 6474731f91 some work on the messages 2002-08-13 09:41:30 +00:00
Marcus Boerger 968721bc55 allow target anchor only for docref parameter 2002-08-13 09:37:51 +00:00
Masaki Fujimoto 2eaa0f6ea1 cleaning up include files created by PHP_DEFINE when 'make distclean'ed 2002-08-13 06:51:28 +00:00
Dan Kalowsky e9dcdd12aa Fix for Bug #18873 2002-08-13 05:12:32 +00:00
Rasmus Lerdorf b025bb1023 Missing proto 2002-08-13 05:08:47 +00:00
Rasmus Lerdorf 7a8330acd9 Single-line comments please 2002-08-13 05:00:11 +00:00
Dan Kalowsky 039902b912 spelling error 2002-08-13 04:52:50 +00:00
Dan Kalowsky aed9e2355c Added more folding markers.... 2002-08-13 04:47:02 +00:00
Rasmus Lerdorf f50df31d7f bool not boolean 2002-08-13 04:44:45 +00:00
Rasmus Lerdorf 3ffe4cb1ff bool not boolean 2002-08-13 04:37:28 +00:00
Rasmus Lerdorf 34362341e9 Use int, not integer. 2002-08-13 04:31:59 +00:00
Rasmus Lerdorf d820c177bf dir() returns an instantiated object, not a class. 2002-08-13 04:24:15 +00:00
Rasmus Lerdorf 87ddcef3c3 Don't use long as a type 2002-08-13 04:20:34 +00:00
Rasmus Lerdorf fb0c9122c1 Fix typo 2002-08-13 04:19:25 +00:00
Rasmus Lerdorf 0779da509b Don't use long as a type 2002-08-13 04:11:51 +00:00
Dan Kalowsky f9e8a5701b Fix for Bug #18746 by sfox and I
#What is the GDBM_FIX for anyways, we can find it anywhere?
2002-08-13 04:10:31 +00:00
Rasmus Lerdorf cd9bb8e555 Fix proto 2002-08-13 04:03:20 +00:00
Dan Kalowsky 099d7df2e5 Let to php_error_docref revolution begin 2002-08-13 00:45:08 +00:00
c57679a322 NEWS update 2002-08-13 00:19:02 +00:00
05c238ccb2 ChangeLog update 2002-08-13 00:18:11 +00:00
Marcus Boerger 4294f2a93d use of php_error_docref 2002-08-12 20:18:25 +00:00
Marcus Boerger 1134977baf fix for extension = ""
make php_verror available
2002-08-12 20:12:31 +00:00
Marcus Boerger ac9991a245 -wrong fabsf define for MSVC.6
-MIN and MAX only if undefined
#should be last commit to fix all warnings (-:
2002-08-12 19:09:26 +00:00
Dan Kalowsky 7d5d00bf81 Point corrected by Markus 2002-08-12 18:21:33 +00:00
Dan Kalowsky 8d2d105cff Umm forgot to clean up the error messages, and add a stop for looping. 2002-08-12 16:17:18 +00:00
Dan Kalowsky ee240f5e4b cleaned up to work with OpenLink iODBC better 2002-08-12 16:04:48 +00:00
Wez Furlong fc1ef270ce Implement curl based wrappers.
Currently read-only, and http is the only thing tested.
Because of this, using them can be controlled by configure:

--with-curlwrappers     Use CURL for url streams

Not for production use...

This enables http, https, ftp and ldap protocols as streams.
2002-08-12 15:56:13 +00:00
Marcus Boerger bdaae34cb9 ups wrong include committed
#if anybody objects we would need config stuuf in ligd otherwise but
#this way we can use other php functions...for example we could use
#php_error_docref....
2002-08-12 15:29:05 +00:00
Marcus Boerger 11611d0781 increase allocation chunks 2002-08-12 14:02:51 +00:00
Marcus Boerger 2df2e24a54 check for fabsf and floorf in config.m4
msvc.6 needs a define, msvc.net needs special treatment
2002-08-12 13:59:01 +00:00
Christian Stocker c0f12111ba @ - Added $DomDocument->xinclude() for substitution of XIncludes in
a DomDocument (chregu)
2002-08-12 13:11:50 +00:00
Marcus Boerger 9d03c0bdf0 more conversion fixes 2002-08-12 09:58:51 +00:00
Edin Kadribasic 553b7d27bf Export spprintf() so that extension can link properly on win32. 2002-08-12 09:07:26 +00:00
Preston L. Bannister e1658ed6c4 Minor cleanups to path building and php*.ini search logic.
Made path_seperator string static (which solves the lookup problems Sebastian saw).
2002-08-12 05:37:03 +00:00
bd726f9172 NEWS update 2002-08-12 00:19:01 +00:00
ed3c2d37f5 ChangeLog update 2002-08-12 00:18:07 +00:00
Dan Kalowsky 7b9de90061 okay confirmation they don't exist in another driver... they're gone 2002-08-12 00:00:54 +00:00
Marcus Boerger 0dcbf7e375 -quick hack to allow compilation under windows again
-correct solution to follow tomorrow
2002-08-11 23:56:11 +00:00
Dan Kalowsky 663a457eb8 Added the php_odbc_includes.h file 2002-08-11 23:40:34 +00:00
Dan Kalowsky 6b31498d09 The start of adding odbc_data_source() functionality 2002-08-11 23:39:03 +00:00
Marcus Boerger 251882de7d missed to commit this fix: correct since this is only a flag 2002-08-11 19:19:35 +00:00
Marcus Boerger b9c0c918cc try even more to fix those warnings.....
#repeat: this code must come from hell
2002-08-11 19:13:07 +00:00
Wez Furlong 3fe62cf0fb Missing word... 2002-08-11 18:51:40 +00:00
Dan Kalowsky 299494ea5e The start of adding in MacOSX compatibility. No objections on the
php-dev list from the sent patch for a week.  Test and fix.
2002-08-11 15:33:25 +00:00
Dan Kalowsky db8bf2647a removing the TODOs done already. 2002-08-11 15:26:46 +00:00
Wez Furlong bcef712ad6 Properly implement TSRM parameters to the new log_error
function... (Thanks Marcus!)
Add a convenience macro for importing a stream from a zval.
2002-08-11 14:29:01 +00:00
Marcus Boerger f9b6bac2a8 try to get this work ... 2002-08-11 14:05:30 +00:00
Marcus Boerger 1723861618 try to fix those warnings.....
#this code must come from hell: will we change code to our coding-scheme?
2002-08-11 13:50:27 +00:00
Wez Furlong 94be838dc1 More verbosity when activating SSL on a socket fails. 2002-08-11 11:25:24 +00:00
Wez Furlong 5a21ab42cb Introduce an error stack for wrappers, to help prevent multiple errors
and warnings (some of which are bogus) when there are problems opening
streams.
Implement sanity check on the mode used to open ftp and http connections.
This fixes Bug 12004.
2002-08-11 10:53:10 +00:00
Wez Furlong 1861f1bae3 Minor fix for html_errors=on in php_error_docref. 2002-08-11 09:52:06 +00:00
Yasuo Ohgaki 42355837c1 Changed my mind.
Let users decided whether users want larger chunk size or not.
@ Changed zlib.output_compression behavior. If larger chunk is preferred,
  enable output_buffering also. (Marcus, Yasuo)
2002-08-11 02:32:49 +00:00
Yasuo Ohgaki 02ed705818 Generally speaking, sending packets less than 1KB is not efficient.
We're better to take some benchmarks see if removing extra buffer
is actually a good idea or not.
2002-08-11 01:11:11 +00:00
7aa98ff852 ChangeLog update 2002-08-11 00:17:35 +00:00
Marcus Boerger 8e7acaca47 change order of initialisation to allow making filename available
through $_SERVER variables (Bug #18657)
2002-08-10 22:42:38 +00:00
Wez Furlong 1144bdb04d remove obsolete TSRMLS_FETCH 2002-08-10 20:20:55 +00:00
Wez Furlong 0c7a386b3e correct proto 2002-08-10 20:19:49 +00:00
Tomas V.V.Cox b8bace1e0a ZE2 fix on calls to mkdir() (thanks Brad Bulger <tater@potatoe.com>) 2002-08-10 16:33:08 +00:00
Marcus Boerger 21903dfc7e corrected handling of internal output buffers
minor fixs
2002-08-10 16:12:36 +00:00
Marcus Boerger ff63bf2a4f no need to start additional first buffer when output compression is first buffer 2002-08-10 12:58:46 +00:00
Marcus Boerger 289607970c should fix all windows warnings 2002-08-10 10:40:59 +00:00
Sebastian Bergmann 7c08781d50 Fix ZTS builds. 2002-08-10 03:03:03 +00:00
a9b66569b8 NEWS update 2002-08-10 00:17:51 +00:00
bff5368f1d ChangeLog update 2002-08-10 00:16:53 +00:00
Marcus Boerger 9c8ba935d6 Improved handling of output buffers (see news)\n#No trim for the string parameter... 2002-08-09 22:29:58 +00:00
Marcus Boerger 2e29e53e00 docref shall either be NULL or a reference to a manual page without an
extension or an external reference starting with 'http://'.
2002-08-09 21:57:03 +00:00
Georg Richter 0019a842b4 forgot to remove another LOCAL_INFILE opion call 2002-08-09 21:13:00 +00:00
Wez Furlong ccb5c84b6c Centralize some blocking socket related code.
# It's been a while since I wrote this!
2002-08-09 21:02:36 +00:00
Wez Furlong 9eb215511f syntax highlighting for vim 2002-08-09 20:56:52 +00:00
Marcus Boerger 783fddeb0f possible memoryleak 2002-08-09 20:53:37 +00:00
Georg Richter 34b166579c fixed bug #18815 2002-08-09 20:38:12 +00:00
Yasuo Ohgaki 872e0b0c71 Move unserialize_callback_func description a little 2002-08-09 06:18:46 +00:00
Yasuo Ohgaki e300506be6 Add unserialize_callback_func to php.ini-recommended. 2002-08-09 06:17:06 +00:00
Yasuo Ohgaki 70ef3f67f3 Added note for output_handler usage. (with Marcus and Adam's fix) 2002-08-09 06:14:33 +00:00
James Cox 1ae29d455c @Copy() fixed to return 1 on 0 byte files. Patch by Ilia A <ilia@prohost.org>. 2002-08-09 00:33:06 +00:00
4097df12c6 ChangeLog update 2002-08-09 00:18:23 +00:00
Yasuo Ohgaki c528157123 Remove duplicated checks. 2002-08-08 22:59:41 +00:00
Marcus Boerger e11e0b0ec0 No missleading 2002-08-08 22:11:24 +00:00
James Cox 073d7a483f thunder seems to have stopped 2002-08-08 21:26:49 +00:00
Hartmut Holzgraefe 1059312f37 reverting ' to \" to stop stupid discussions
although i still do not believe the arguments are reasonable ...
2002-08-08 20:19:33 +00:00
Marcus Boerger 976a91a55b Say FIXME to non function calls and non TSRM builds. Both will currentls
not show a default reference.
2002-08-08 19:36:49 +00:00
Marcus Boerger 88c385e817 rename php_error_func<n> to php_error_docref and support Wez idea
that solves ToDo requirement to point to PHP Manual in error messages.
2002-08-08 19:12:27 +00:00
Sebastian Bergmann 9abdbd9c29 Fix warnings. 2002-08-08 18:55:19 +00:00
Sebastian Bergmann 646292e08b Fix warning. 2002-08-08 18:50:46 +00:00
Marcus Boerger 9cf0c30968 those are allways defined -> fixes warning in basic_functions.c 2002-08-08 17:53:52 +00:00
Stanislav Malyshev 11fb07a360 Add ZEND_API to functions 2002-08-08 17:53:32 +00:00
Andi Gutmans 52406cb37c - Make new 'is' operator work with classes only and return false when
- the object isn't of the said class or the value isn't an object.
2002-08-08 16:32:34 +00:00
Andi Gutmans 7904787f95 - Bad Harald! :) 2002-08-08 16:07:09 +00:00
James Cox 66e78004c1 Reverting patch. after more investigation this doesn't help in all that many cases, and with Wez's better patch, sometimes degrade's quality. 2002-08-08 15:02:14 +00:00
Hartmut Holzgraefe e539c5564d the order to do things is save-compile-commit
no variations and make sure editor and shell are in the same dir :(
2002-08-08 13:59:19 +00:00
Hartmut Holzgraefe 83586a6c06 fix for #18782 (setting background color without making sure the text
crtmut in /new/php/php4untouched on hartmut
php4untouched > cvs update ext/standard/info.
cvs [update aborted]: received interrupt signal

hartmut in /new/php/php4untouched on hartmut
php4untouched > cvs update ext/standard/info.c
RCS file: /repository/php4/ext/standard/info.c,v
retrieving revision 1.184
retrieving revision 1.188
Merging differences between 1.184 and 1.188 into info.c
rcsmerge: warning: conflicts during merge
cvs server: conflicts found in ext/standard/info.c
C ext/standard/info.c

hartmut in /new/php/php4untouched on hartmut
php4untouched > cvs log ext/standard/info.c

RCS file: /repository/php4/ext/standard/info.c,v
Working file: ext/standard/info.c
head: 1.188
branch:
locks: strict
access list:
symbolic names:
        dev/: 1.188
				        php_4_2_2: 1.167.2.1
								        PHP_4_2_2: 1.167.2.1.0.2
												        php_4_3_0_dev_zend2_alpha2: 1.183
																        php5_5_0: 1.182
																				        php_4_3_0dev: 1.182
																								        php_4_3_0_dev_zend2_alpha1: 1.181
																												        php_4_2_1: 1.167.2.1
																																        php_4_2_1RC2: 1.167.2.1
																																				        php_4_2_1RC1: 1.167.2.1
																																								        php_4_2_0: 1.167.2.1
																																												        php_4_2_0RC4: 1.167.2.1
																																																        php_4_2_0RC3: 1.167.2.1
																																																				        php_4_2_0RC2: 1.167.2.1
																																																								        php_4_2_0RC1: 1.167.2.1
																																																												        PHP_4_2_0: 1.167.0.2
																																																																        php_4_1_2: 1.153.2.1
																																																																				        php_4_1_1: 1.153.2.1
																																																																								        ChangeLog: 1.161
																																																																												        php_4_1_0: 1.153.2.1
																																																																																        php_4_1_0RC5: 1.153.2.1
																																																																																				        php_4_1_0RC4: 1.153.2.1
																																																																																								        php_4_1_0RC3: 1.153.2.1
																																																																																												        php_4_1_0RC2: 1.153.2.1
																																																																																																        php_4_1_0RC1: 1.153.2.1
																																																																																																				        php_4_0_7RC3: 1.153
																																																																																																								        php4: 1.157
																																																																																																												        POST_SUBST_Z_MACROS: 1.157
																																																																																																																        PRE_SUBST_Z_MACROS: 1.155
																																																																																																																				        php_4_0_7RC2: 1.153
																																																																																																																								        RAND_REDESIGN: 1.154.0.2
																																																																																																																												        php_4_0_7RC1: 1.153
																																																																																																																																        PHP_4_0_7: 1.153.0.2
																																																																																																																																				        PRE_TSRM_MERGE_PATCH: 1.142
																																																																																																																																								        php_4_0_6: 1.137.2.1
																																																																																																																																												        php_4_0_6RC4: 1.137.2.1
																																																																																																																																																        php_4_0_6RC3: 1.137.2.1
																																																																																																																																																				        php_4_0_6RC2: 1.137.2.1
																																																																																																																																																								        php_4_0_6RC1: 1.137
																																																																																																																																																												        PHP_4_0_6: 1.137.0.2
																																																																																																																																																																        php_4_0_5: 1.132
																																																																																																																																																																				        php_4_0_5RC8: 1.132
																																																																																																																																																																								        php_4_0_5RC7: 1.132
																																																																																																																																																																												        php_4_0_5RC6: 1.132
																																																																																																																																																																																        php_4_0_5RC5: 1.132
																																																																																																																																																																																				        php_4_0_5RC4: 1.132
																																																																																																																																																																																								        php_4_0_5RC3: 1.132
																																																																																																																																																																																												        php_4_0_5RC2: 1.132
																																																																																																																																																																																																        php_4_0_5RC1: 1.132
																																																																																																																																																																																																				        PHP_4_0_5: 1.132.0.2
																																																																																																																																																																																																								        php_4_0_4pl1: 1.124
																																																																																																																																																																																																												        php_4_0_4pl1RC2: 1.124
																																																																																																																																																																																																																        php_4_0_4pl1RC1: 1.124
																																																																																																																																																																																																																				        php_4_0_4REL: 1.124
																																																																																																																																																																																																																								        php_4_0_4RC6: 1.124
																																																																																																																																																																																																																												        php_4_0_4RC5: 1.124
																																																																																																																																																																																																																																        php_4_0_4RC4: 1.124
																																																																																																																																																																																																																																				        php_4_0_4RC3: 1.124
																																																																																																																																																																																																																																								        php_4_0_4: 1.124.0.2
																																																																																																																																																																																																																																												        php_4_0_3: 1.116
																																																																																																																																																																																																																																																        php_4_0_3RC2: 1.114
																																																																																																																																																																																																																																																				        php_4_0_3RC1: 1.114
																																																																																																																																																																																																																																																								        php_4_0_2: 1.113
																																																																																																																																																																																																																																																												        php_4_0_2RC1: 1.110
																																																																																																																																																																																																																																																																        PRE_FILE_COMPILE_API_CHANGE: 1.108
																																																																																																																																																																																																																																																																				        php_4_0_1pl1: 1.104
																																																																																																																																																																																																																																																																								        php_4_0_1: 1.104
																																																																																																																																																																																																																																																																												        php_4_0_1RC2: 1.104
																																																																																																																																																																																																																																																																																        php_4_0_1RC: 1.101
																																																																																																																																																																																																																																																																																				        php_4_0_0: 1.93
																																																																																																																																																																																																																																																																																								        php_4_0RC2: 1.89
																																																																																																																																																																																																																																																																																												        php_4_0RC1: 1.70
																																																																																																																																																																																																																																																																																																        php_4_0b4pl1: 1.67
																																																																																																																																																																																																																																																																																																				        php_4_0b4: 1.65
																																																																																																																																																																																																																																																																																																								        php_4_0b4_rc1: 1.65
																																																																																																																																																																																																																																																																																																												        BEFORE_SAPI_POST_PATCH_17_FEB_2000: 1.62
																																																																																																																																																																																																																																																																																																																        BEFORE_SAPIFICATION_FEB_10_2000: 1.60
																																																																																																																																																																																																																																																																																																																				        BEFORE_PRE_SHUTDOWN_REVERSE_PATCH: 1.57
																																																																																																																																																																																																																																																																																																																								        PRE_ISSET_TYPE: 1.55
																																																																																																																																																																																																																																																																																																																												        PRE_LIBZEND_TO_ZEND: 1.51
																																																																																																																																																																																																																																																																																																																																        PRE_USED_RETURN_VALUE_PATCH: 1.39
																																																																																																																																																																																																																																																																																																																																				        php_4_0b3: 1.39
																																																																																																																																																																																																																																																																																																																																								        php_4_0b3_RC5: 1.39
																																																																																																																																																																																																																																																																																																																																												        php_4_0b3_RC4: 1.39
																																																																																																																																																																																																																																																																																																																																																        php_4_0b3_RC3: 1.39
																																																																																																																																																																																																																																																																																																																																																				        php_4_0b3_RC2: 1.39
																																																																																																																																																																																																																																																																																																																																																								        before-sapi-split: 1.36
																																																																																																																																																																																																																																																																																																																																																												        php_4_0b2: 1.30
																																																																																																																																																																																																																																																																																																																																																																        php_4_0b2-2: 1.27
																																																																																																																																																																																																																																																																																																																																																																				        php_4_0b2-1: 1.27
																																																																																																																																																																																																																																																																																																																																																																								        BEFORE_NEW_OPERATOR_FIX: 1.26
																																																																																																																																																																																																																																																																																																																																																																												        newoperator: 1.26.0.2
																																																																																																																																																																																																																																																																																																																																																																																        BEFORE_BIG_SYMBOL_CHANGE: 1.26
																																																																																																																																																																																																																																																																																																																																																																																				        php_4_0b1: 1.25
																																																																																																																																																																																																																																																																																																																																																																																								        BEFORE_REMOVING_AI_COUNT_FINAL_STEP: 1.14
																																																																																																																																																																																																																																																																																																																																																																																												        BEFORE_REMOVING_GC_STEP1: 1.14
																																																																																																																																																																																																																																																																																																																																																																																																        BEFORE_PHP4_APACHE_MODULE_CHANGE: 1.14
																																																																																																																																																																																																																																																																																																																																																																																																				keyword substitution: kv
																																																																																																																																																																																																																																																																																																																																																																																																				total revisions: 191;   selected revisions: 191
																																																																																																																																																																																																																																																																																																																																																																																																				description:
																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.188
																																																																																																																																																																																																																																																																																																																																																																																																				date: 2002/08/05 19:00:09;  author: helly;  state: Exp;  lines: +16 -2
																																																																																																																																																																																																																																																																																																																																																																																																				Correct carset if iconv is active
																																																																																																																																																																																																																																																																																																																																																																																																				#Same solution would work for mbstring - but that must wait
																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.187
																																																																																																																																																																																																																																																																																																																																																																																																				date: 2002/08/04 22:49:48;  author: helly;  state: Exp;  lines: +9 -3
																																																																																																																																																																																																																																																																																																																																																																																																				-Send charset US-ASCII or ini setting default_charset.
																																																																																																																																																																																																																																																																																																																																																																																																				#After some discussion with Ilia Alshanetsky
																																																																																																																																																																																																																																																																																																																																																																																																				#But perhaps we should have a look for a mbstring solution...
																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.186
																																																																																																																																																																																																																																																																																																																																																																																																				date: 2002/08/04 18:59:16;  author: georg;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																				ups.. :)
																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.185
																																																																																																																																																																																																																																																																																																																																																																																																				date: 2002/08/04 18:57:02;  author: georg;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																				added meta tag (w3c compliance)
																																																																																																																																																																																																																																																																																																																																																																																																				Thx to Ilia Alshanetsky (ilia@prohost.org)
																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.184
																																																																																																																																																																																																																																																																																																																																																																																																				date: 2002/07/01 18:52:30;  author: derick;  state: Exp;  lines: +8 -8
																																																																																																																																																																																																																																																																																																																																																																																																				- No C++ comments
																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.183
																																																																																																																																																																																																																																																																																																																																																																																																				date: 2002/06/19 13:24:01;  author: sander;  state: Exp;  lines: +7 -12
																																																																																																																																																																																																																																																																																																																																																																																																				Made the API versions appear better on phpinfo();
																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.182
																																																																																																																																																																																																																																																																																																																																																																																																				date: 2002/06/08 10:25:44;  author: mfischer;  state: Exp;  lines: +32 -2
																																																																																																																																																																																																																																																																																																																																																																																																				- Since streams are always enabled, instead of just printing 'enabled' we tell
																																																																																																																																																																																																																																																																																																																																																																																																				  what streams are currently registered.
																																																																																																																																																																																																																																																																																																																																																																																																					----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																					revision 1.181
																																																																																																																																																																																																																																																																																																																																																																																																					date: 2002/05/24 17:25:40;  author: sander;  state: Exp;  lines: +4 -4
																																																																																																																																																																																																																																																																																																																																																																																																					Fix <head> and <body> tags in phpinfo() output (#17411)
																																																																																																																																																																																																																																																																																																																																																																																																					----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																					revision 1.180
																																																																																																																																																																																																																																																																																																																																																																																																					date: 2002/05/13 17:43:04;  author: zeev;  state: Exp;  lines: +6 -6
																																																																																																																																																																																																																																																																																																																																																																																																					- Fix a buglet in printing of GPCSE arrays
																																																																																																																																																																																																																																																																																																																																																																																																					- Remove indirect access
																																																																																																																																																																																																																																																																																																																																																																																																					----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																					revision 1.179
																																																																																																																																																																																																																																																																																																																																																																																																					date: 2002/05/13 08:46:21;  author: zeev;  state: Exp;  lines: +4 -1
																																																																																																																																																																																																																																																																																																																																																																																																					- Centralize html_puts() again
																																																																																																																																																																																																																																																																																																																																																																																																					- Revolutionize phpinfo()'s speed
																																																																																																																																																																																																																																																																																																																																																																																																					----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																					revision 1.178
																																																																																																																																																																																																																																																																																																																																																																																																					date: 2002/05/12 14:50:54;  author: sas;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																					Use string_len information
																																																																																																																																																																																																																																																																																																																																																																																																					----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																					revision 1.177
																																																																																																																																																																																																																																																																																																																																																																																																					date: 2002/05/12 14:48:22;  author: sas;  state: Exp;  lines: +7 -6
																																																																																																																																																																																																																																																																																																																																																																																																					reenable php_html_puts
																																																																																																																																																																																																																																																																																																																																																																																																					----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																					revision 1.176
																																																																																																																																																																																																																																																																																																																																																																																																					date: 2002/05/11 12:41:32;  author: zeev;  state: Exp;  lines: +6 -6
																																																																																																																																																																																																																																																																																																																																																																																																					Centralize html_puts() logic - php_html_puts() remains as an API wrapper
																																																																																																																																																																																																																																																																																																																																																																																																					----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																					revision 1.175
																																																																																																																																																																																																																																																																																																																																																																																																					date: 2002/05/09 11:56:52;  author: derick;  state: Exp;  lines: +4 -1
																																																																																																																																																																																																																																																																																																																																																																																																					- Add PHP_API_VERSION too
																																																																																																																																																																																																																																																																																																																																																																																																					----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																					revision 1.174
																																																																																																																																																																																																																																																																																																																																																																																																					date: 2002/05/09 11:47:37;  author: derick;  state: Exp;  lines: +7 -4
																																																																																																																																																																																																																																																																																																																																																																																																					- Show both API nos
																																																																																																																																																																																																																																																																																																																																																																																																					----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																					revision 1.173
																																																																																																																																																																																																																																																																																																																																																																																																					date: 2002/05/02 17:36:00;  author: fmk;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																					Fixing wrong pointer
																																																																																																																																																																																																																																																																																																																																																																																																					----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																					revision 1.172
																																																																																																																																																																																																																																																																																																																																																																																																					date: 2002/05/02 12:33:03;  author: derick;  state: Exp;  lines: +7 -1
																																																																																																																																																																																																																																																																																																																																																																																																					- Add Zend API No. to phpinofo() output
																																																																																																																																																																																																																																																																																																																																																																																																					----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																					revision 1.171
																																																																																																																																																																																																																																																																																																																																																																																																					date: 2002/03/29 10:19:23;  author: ssb;  state: Exp;  lines: +71 -17
																																																																																																																																																																																																																																																																																																																																																																																																					(PHP php_uname) display runtime uname rather than compile-time uname, added
																																																																																																																																																																																																																																																																																																																																																																																																					                an optional parameter to get single fields (like uname(1))
																																																																																																																																																																																																																																																																																																																																																																																																													# Windows version is not tested, and I didn't know how to get
																																																																																																																																																																																																																																																																																																																																																																																																													# `uname -n` on Windows, so it's hardcoded to "localhost" for now.
																																																																																																																																																																																																																																																																																																																																																																																																													# Windows gurus feel free to fix. :-)
																																																																																																																																																																																																																																																																																																																																																																																																													----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																													revision 1.170
																																																																																																																																																																																																																																																																																																																																																																																																													date: 2002/03/15 21:03:05;  author: wez;  state: Exp;  lines: +2 -4
																																																																																																																																																																																																																																																																																																																																																																																																													New PHP streams...
																																																																																																																																																																																																																																																																																																																																																																																																													----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																													revision 1.169
																																																																																																																																																																																																																																																																																																																																																																																																													date: 2002/03/14 18:39:53;  author: zeev;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																													Change case for consistency
																																																																																																																																																																																																																																																																																																																																																																																																													----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																													revision 1.168
																																																																																																																																																																																																																																																																																																																																																																																																													date: 2002/03/14 13:35:19;  author: zeev;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																													Make it clearer what this entry means
																																																																																																																																																																																																																																																																																																																																																																																																													----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																													revision 1.167
																																																																																																																																																																																																																																																																																																																																																																																																													date: 2002/03/04 20:14:52;  author: sas;  state: Exp;  lines: +2 -1
																																																																																																																																																																																																																																																																																																																																																																																																													branches:  1.167.2;
																																																																																																																																																																																																																																																																																																																																																																																																													Add apparently missing include
																																																																																																																																																																																																																																																																																																																																																																																																													----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																													revision 1.166
																																																																																																																																																																																																																																																																																																																																																																																																													date: 2002/03/04 18:46:53;  author: sas;  state: Exp;  lines: +7 -6
																																																																																																																																																																																																																																																																																																																																																																																																													Supply php_html_puts which escapes a whole string.. now fully works in ZTS
																																																																																																																																																																																																																																																																																																																																																																																																													mode, too.
																																																																																																																																																																																																																																																																																																																																																																																																													----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																													revision 1.165
																																																																																																																																																																																																																																																																																																																																																																																																													date: 2002/03/04 18:12:55;  author: sas;  state: Exp;  lines: +5 -5
																																																																																																																																																																																																																																																																																																																																																																																																													revert last commit, puts does more through putc.
																																																																																																																																																																																																																																																																																																																																																																																																													----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																													revision 1.164
																																																																																																																																																																																																																																																																																																																																																																																																													date: 2002/03/04 17:48:20;  author: sas;  state: Exp;  lines: +6 -6
																																																																																																																																																																																																																																																																																																																																																																																																													Use PHPWRITE to output data.  Because this just outputs diagnostic
																																																																																																																																																																																																																																																																																																																																																																																																													information, a few spaces won't hurt (and multiple ones are rendered
																																																																																																																																																																																																																																																																																																																																																																																																													as one by browsers anyway).  Micro-benchmarks which use phpinfo()
																																																																																																																																																																																																																																																																																																																																																																																																													as a mean to generate output will yield more through-put now
																																																																																																																																																																																																																																																																																																																																																																																																													(35 req/s vs. 83 req/s in tux).
																																																																																																																																																																																																																																																																																																																																																																																																													----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																													revision 1.163
																																																																																																																																																																																																																																																																																																																																																																																																													date: 2002/02/28 08:26:45;  author: sebastian;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																													Maintain headers.
																																																																																																																																																																																																																																																																																																																																																																																																													----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																													revision 1.162
																																																																																																																																																																																																																																																																																																																																																																																																													date: 2001/12/29 14:23:58;  author: sebastian;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																													PHP 4.0 -> PHP 4. Patch by Martin Jansen <mail@martin-jansen.de>.
																																																																																																																																																																																																																																																																																																																																																																																																													----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																													revision 1.161
																																																																																																																																																																																																																																																																																																																																																																																																													date: 2001/12/11 15:30:32;  author: sebastian;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																													Update headers.
																																																																																																																																																																																																																																																																																																																																																																																																													----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																													revision 1.160
																																																																																																																																																																																																																																																																																																																																																																																																													date: 2001/12/06 13:31:34;  author: sterling;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																													use PHP_INFO_ALL and PHP_CREDITS_ALL instead of hardcoding them
																																																																																																																																																																																																																																																																																																																																																																																																													----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																													revision 1.159
																																																																																																																																																																																																																																																																																																																																																																																																													date: 2001/10/11 23:33:49;  author: ssb;  state: Exp;  lines: +17 -6
																																																																																																																																																																																																																																																																																																																																																																																																													* zend_module_entry change: apino, debug and zts are moved first,
																																																																																																																																																																																																																																																																																																																																																																																																													  see README.EXTENSIONS file for upgrade help.
																																																																																																																																																																																																																																																																																																																																																																																																														@Introduced extension version numbers (Stig)
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.158
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/10/06 20:13:37;  author: derick;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																														- <br> -> <br />
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.157
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/09/25 22:48:43;  author: jeroen;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																														2nd phase in back-substitution those macro's

																																																																																																																																																																																																																																																																																																																																																																																																														I've got pretty much everything now...
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.156
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/09/25 21:58:23;  author: jeroen;  state: Exp;  lines: +13 -13
																																																																																																																																																																																																																																																																																																																																																																																																														Back-substitute for Z_* macro's. If it breaks some extension (the script isn't optimal, it parses for example var->zval.value incorrect) please let me know.
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.155
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/09/09 13:29:18;  author: derick;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																														- Don't wrap lines... this is annoying while coding.
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.154
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/08/15 22:37:31;  author: sniper;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																														Add the build time too. Bug: #12774
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.153
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/08/13 19:31:16;  author: zeev;  state: Exp;  lines: +5 -3
																																																																																																																																																																																																																																																																																																																																																																																																														branches:  1.153.2;
																																																																																																																																																																																																																																																																																																																																																																																																														Fix crashes in parse_parameters calls
																																																																																																																																																																																																																																																																																																																																																																																																														HEADS UP:  Make sure you supply TSRMLS_CC for this function!
																																																																																																																																																																																																																																																																																																																																																																																																														I'll try to think of a way that'd allow us to find this issue using
																																																																																																																																																																																																																																																																																																																																																																																																														the compiler.
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.152
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/08/13 07:55:38;  author: rasmus;  state: Exp;  lines: +19 -13
																																																																																																																																																																																																																																																																																																																																																																																																														Track down a few more functions that don't check for 0 args and use
																																																																																																																																																																																																																																																																																																																																																																																																														faster mechanism
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.151
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/08/13 07:28:57;  author: rasmus;  state: Exp;  lines: +3 -1
																																																																																																																																																																																																																																																																																																																																																																																																														Oops, a little too much simplification there.. ;)
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.150
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/08/13 06:43:47;  author: rasmus;  state: Exp;  lines: +34 -36
																																																																																																																																																																																																																																																																																																																																																																																																														We don't consistently check for args passed to functions that don't
																																																																																																																																																																																																																																																																																																																																																																																																														take any args.  In some cases we probably want to skip the check for
																																																																																																																																																																																																																																																																																																																																																																																																														performance reasons, but in other cases where performance is unlikely
																																																																																																																																																																																																																																																																																																																																																																																																														to be a factor, not throwing a warning on the wrong number of args passed
																																																																																																																																																																																																																																																																																																																																																																																																														to a function is at best inconsistent, and at worst it could hide a bug.
																																																																																																																																																																																																																																																																																																																																																																																																														So, add a few such checks.  There are still lots of cases out there.
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.149
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/08/11 17:03:37;  author: zeev;  state: Exp;  lines: +11 -11
																																																																																																																																																																																																																																																																																																																																																																																																														Whitespace
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.148
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/08/08 17:16:20;  author: zeev;  state: Exp;  lines: +8 -7
																																																																																																																																																																																																																																																																																																																																																																																																														- Implement $_FORM
																																																																																																																																																																																																																																																																																																																																																																																																														- Update phpinfo()
																																																																																																																																																																																																																																																																																																																																																																																																														- Update NEWS
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.147
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/07/31 04:53:50;  author: zeev;  state: Exp;  lines: +4 -5
																																																																																																																																																																																																																																																																																																																																																																																																														More TSRMLS_FETCH work
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.146
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/07/30 09:16:44;  author: zeev;  state: Exp;  lines: +3 -4
																																																																																																																																																																																																																																																																																																																																																																																																														More TSRMLS_FETCH work
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.145
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/07/30 06:18:06;  author: zeev;  state: Exp;  lines: +3 -2
																																																																																																																																																																																																																																																																																																																																																																																																														More TSRMLS_FETCH work, and a bit of cleanup
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.144
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/07/28 11:36:17;  author: zeev;  state: Exp;  lines: +1 -2
																																																																																																																																																																																																																																																																																																																																																																																																														Redesigned thread safety mechanism - nua nua
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.143
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/07/27 10:16:30;  author: zeev;  state: Exp;  lines: +10 -10
																																																																																																																																																																																																																																																																																																																																																																																																														- Get rid of ELS_*(), and use TSRMLS_*() instead.
																																																																																																																																																																																																																																																																																																																																																																																																														- Move to the new ts_allocate_id() API
																																																																																																																																																																																																																																																																																																																																																																																																														This patch is *bound* to break some files, as I must have had typos somewhere.
																																																																																																																																																																																																																																																																																																																																																																																																														If you use any uncommon extension, please try to build it...
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.142
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/06/19 15:21:28;  author: sbergmann;  state: Exp;  lines: +12 -12
																																																																																																																																																																																																																																																																																																																																																																																																														Finish phpinfo() HTML 4.01 tweaking.
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.141
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/06/15 18:34:09;  author: sbergmann;  state: Exp;  lines: +38 -40
																																																																																																																																																																																																																																																																																																																																																																																																														Make output of phpinfo() compliant with HTML 4.01.
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.140
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/06/06 13:05:51;  author: rasmus;  state: Exp;  lines: +27 -13
																																																																																																																																																																																																																																																																																																																																																																																																														Fix folding and clean up some extensions
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.139
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/06/05 13:12:04;  author: rasmus;  state: Exp;  lines: +2 -1
																																																																																																																																																																																																																																																																																																																																																																																																														vim-6 does folding - clean up a bunch of missing folding tags plus
																																																																																																																																																																																																																																																																																																																																																																																																														some misguided RINIT and RSHUTDOWN calls in a few fringe extensions
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.138
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/05/20 01:31:53;  author: sniper;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																														This looks better.
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.137
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/05/11 13:34:49;  author: derick;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																														branches:  1.137.2;
																																																																																																																																																																																																																																																																																																																																																																																																														Tabs please...
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.136
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/05/11 13:32:10;  author: sbergmann;  state: Exp;  lines: +3 -1
																																																																																																																																																																																																																																																																																																																																																																																																														Fix for bug #10815.
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.135
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/05/06 15:20:56;  author: sniper;  state: Exp;  lines: +14 -14
																																																																																																																																																																																																																																																																																																																																																																																																														Fix bug: #10323. Every value outputted is now escaped.
																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.134
																																																																																																																																																																																																																																																																																																																																																																																																														date: 2001/04/22 01:09:13;  author: ssb;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																														* expanded the following constants and made them available in PHP:
																																																																																																																																																																																																																																																																																																																																																																																																														  DEFAULT_INCLUDE_PATH
																																																																																																																																																																																																																																																																																																																																																																																																															  PEAR_INSTALL_DIR
																																																																																																																																																																																																																																																																																																																																																																																																																  PHP_EXTENSION_DIR
																																																																																																																																																																																																																																																																																																																																																																																																																	  PHP_BINDIR
																																																																																																																																																																																																																																																																																																																																																																																																																		  PHP_LIBDIR
																																																																																																																																																																																																																																																																																																																																																																																																																			  PHP_DATADIR
																																																																																																																																																																																																																																																																																																																																																																																																																				  PHP_SYSCONFDIR
																																																																																																																																																																																																																																																																																																																																																																																																																					  PHP_LOCALSTATEDIR
																																																																																																																																																																																																																																																																																																																																																																																																																						  PHP_CONFIG_FILE_PATH
																																																																																																																																																																																																																																																																																																																																																																																																																							* no longer generating pear/PEAR.php
																																																																																																																																																																																																																																																																																																																																																																																																																							* fixed some tests
																																																																																																																																																																																																																																																																																																																																																																																																																							* some more installer work
																																																																																																																																																																																																																																																																																																																																																																																																																							----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																							revision 1.133
																																																																																																																																																																																																																																																																																																																																																																																																																							date: 2001/04/17 17:06:06;  author: wez;  state: Exp;  lines: +6 -1
																																																																																																																																																																																																																																																																																																																																																																																																																							Changes for streams.  Added temporary fopenstream function to PHP so that
																																																																																																																																																																																																																																																																																																																																																																																																																							the streams can be tested.
																																																																																																																																																																																																																																																																																																																																																																																																																							----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																							revision 1.132
																																																																																																																																																																																																																																																																																																																																																																																																																							date: 2001/03/04 22:03:23;  author: zeev;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																							I don't know German, but I imagine that was the problem :)
																																																																																																																																																																																																																																																																																																																																																																																																																							----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																							revision 1.131
																																																																																																																																																																																																																																																																																																																																																																																																																							date: 2001/03/04 15:49:38;  author: zeev;  state: Exp;  lines: +7 -8
																																																																																																																																																																																																																																																																																																																																																																																																																							Fix phpinfo() bug that crept in
																																																																																																																																																																																																																																																																																																																																																																																																																							----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																							revision 1.130
																																																																																																																																																																																																																																																																																																																																																																																																																							date: 2001/03/04 02:41:27;  author: fmk;  state: Exp;  lines: +9 -15
																																																																																																																																																																																																																																																																																																																																																																																																																							Changed code layout to remove PHP warning when running php as a CGI.
																																																																																																																																																																																																																																																																																																																																																																																																																							----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																							revision 1.129
																																																																																																																																																																																																																																																																																																																																																																																																																							date: 2001/02/26 06:07:17;  author: andi;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																							- Fix copyright notices with 2001
																																																																																																																																																																																																																																																																																																																																																																																																																							----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																							revision 1.128
																																																																																																																																																																																																																																																																																																																																																																																																																							date: 2001/01/02 22:49:26;  author: zeev;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																																							Many patches.  I hope I remember them all:

																																																																																																																																																																																																																																																																																																																																																																																																																							- Make sapi_module available to external modules (PHPAPI)
																																																																																																																																																																																																																																																																																																																																																																																																																							- Make the php.ini path reported in phpinfo() always point to
																																																																																																																																																																																																																																																																																																																																																																																																																							  real full path of the php.ini file
																																																																																																																																																																																																																																																																																																																																																																																																																								- Optimized the ISAPI module not to read unnecessary server
																																																																																																																																																																																																																																																																																																																																																																																																																								  variables and read necessary variables at most once.
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.127
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/12/27 15:43:05;  author: zeev;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																									- Make the INI mechanism thread safe (fix necessary API changes from Zend)
																																																																																																																																																																																																																																																																																																																																																																																																																									- Make the Win32 non-TS configuration build again
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.126
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/12/22 12:57:08;  author: zeev;  state: Exp;  lines: +2 -3
																																																																																																																																																																																																																																																																																																																																																																																																																									Heads up people!

																																																																																																																																																																																																																																																																																																																																																																																																																									Updated the get_current_key() API - the relevant authors, please take
																																																																																																																																																																																																																																																																																																																																																																																																																									a look at the updated code and make sure it's ok...
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.125
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/12/19 22:59:14;  author: zeev;  state: Exp;  lines: +2 -1
																																																																																																																																																																																																																																																																																																																																																																																																																									Add the QA team to the credits
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.124
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/11/20 10:05:57;  author: hholzgra;  state: Exp;  lines: +1 -146
																																																																																																																																																																																																																																																																																																																																																																																																																									first step towards auto-generated credits
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.123
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/11/19 19:18:12;  author: hholzgra;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																									typo fix (copy/paste bug?)
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.122
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/11/11 18:38:26;  author: sas;  state: Exp;  lines: +7 -6
																																																																																																																																																																																																																																																																																																																																																																																																																									Add Apache 2.0 sapi module and sort alphabetically.
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.121
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/11/06 22:53:11;  author: derick;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																									- Added myself to the credits...
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.120
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/11/05 23:34:49;  author: jdonagher;  state: Exp;  lines: +25 -5
																																																																																																																																																																																																																																																																																																																																																																																																																									Bring phpcredits() up to date
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.119
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/11/02 19:07:15;  author: neotron;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																									Added Caudium to credit line.
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.118
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/10/31 17:21:52;  author: hholzgra;  state: Exp;  lines: +4 -4
																																																																																																																																																																																																																																																																																																																																																																																																																									generalization of image handling in phpinfo
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.117
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/10/29 11:38:24;  author: zeev;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																									Initial steps to move the INI mechanism to the Zend engine
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.116
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/10/11 13:51:32;  author: hholzgra;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																																									proto typo fixes
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.115
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/10/11 11:40:29;  author: hholzgra;  state: Exp;  lines: +10 -1
																																																																																																																																																																																																																																																																																																																																																																																																																									added missing protos
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.114
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/09/30 16:12:54;  author: andi;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																									- Cleanup some output functions
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.113
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/08/27 22:46:40;  author: rasmus;  state: Exp;  lines: +17 -20
																																																																																																																																																																																																																																																																																																																																																																																																																									Some minor cleanup to make W3C's tidy validator happy
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.112
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/08/27 19:42:45;  author: ssb;  state: Exp;  lines: +35 -19
																																																																																																																																																																																																																																																																																																																																																																																																																									@Added php_uname() function (Stig)
																																																																																																																																																																																																																																																																																																																																																																																																																									Added php_uname() function.
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.111
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/08/26 12:53:13;  author: rubys;  state: Exp;  lines: +2 -1
																																																																																																																																																																																																																																																																																																																																																																																																																									Add ***EXPERIMENTAL*** Zend OO Extension support for Microsoft.Net
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.110
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/08/21 09:50:52;  author: sas;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																									Cleaning up some mess
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.109
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/08/20 14:43:56;  author: sas;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																									Fix numerus of SAPI Modules title
																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.108
																																																																																																																																																																																																																																																																																																																																																																																																																									date: 2000/07/26 05:41:38;  author: sterling;  state: Exp;  lines: +2 -1
																																																																																																																																																																																																																																																																																																																																																																																																																									* EXTENSIONS -- update status on CURL & SWF
																																																																																																																																																																																																																																																																																																																																																																																																																									* NEWS --
																																																																																																																																																																																																																																																																																																																																																																																																																									  1.  Change wording for the ibase and sybase DB announcement.
																																																																																																																																																																																																																																																																																																																																																																																																																										  2.  Remove second pfpro announcement, if pfpro is being released with 4.0.2
																																																																																																																																																																																																																																																																																																																																																																																																																											  entries about new features before 4.0.2 shouldn't be in there.
																																																																																																																																																																																																																																																																																																																																																																																																																												  3.  Joey, that entry just doesn't seem incredibly relevant to the NEWS file,
																																																																																																																																																																																																																																																																																																																																																																																																																													  I'll backport it if you want (or add a new entry).
																																																																																																																																																																																																																																																																																																																																																																																																																														* ext/standard/info.c -- Add a CREDIT_LINE() for CURL.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.107
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/07/25 10:54:07;  author: stas;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																																														Report configuration path that is really used, not that is compiled in
																																																																																																																																																																																																																																																																																																																																																																																																																														# it does matter when using -c option
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.106
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/07/24 01:39:49;  author: david;  state: Exp;  lines: +3 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														Changed lots of PHP 3 licence headers to PHP 4, mainly in .h files.
																																																																																																																																																																																																																																																																																																																																																																																																																														Added a few RCS $Id$ tags.

																																																																																																																																																																																																																																																																																																																																																																																																																														# Note: I have avoided changing any .h files if the corresponding .c file
																																																																																																																																																																																																																																																																																																																																																																																																																														# had not already been changed as I am not sure if there are any legal
																																																																																																																																																																																																																																																																																																																																																																																																																														# issues here. So some extensions still have PHP 3 headers.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.105
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/07/08 19:31:16;  author: eschmid;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														Uncomplete proto.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.104
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/06/26 18:05:49;  author: andrei;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																														Separate plain name returned by php_sapi_module() and pretty name
																																																																																																																																																																																																																																																																																																																																																																																																																														used for output.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.103
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/06/26 14:55:38;  author: kk;  state: Exp;  lines: +3 -2
																																																																																																																																																																																																																																																																																																																																																																																																																														Corrected a syntax error: Macro requires braces.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.102
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/06/26 14:43:37;  author: kk;  state: Exp;  lines: +12 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														Added function php_sapi_name() as written by Stefan Livieratos.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.101
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/06/17 07:08:53;  author: hholzgra;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														changed default cell alignment to "left" (see bug id #5048)
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.100
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/06/16 18:23:57;  author: hholzgra;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																														C++ // comments are evil ...
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.99
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/06/09 01:50:44;  author: zeev;  state: Exp;  lines: +9 -7
																																																																																																																																																																																																																																																																																																																																																																																																																														Move back everything to where it belongs...
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.98
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/06/06 17:26:15;  author: hholzgra;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														added missing '/' to closing <center> tag (BUG ID #4416)
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.97
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/06/05 19:47:44;  author: andi;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																														- ARG_COUNT(ht) -> ZEND_NUM_ARGS() mega patch
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.96
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/06/03 03:05:29;  author: zeev;  state: Exp;  lines: +1 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														- Make the INI entries sorted in phpinfo()
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.95
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/05/27 00:24:03;  author: zeev;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														Add Sam Ruby
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.94
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/05/25 11:01:31;  author: kk;  state: Exp;  lines: +2 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														- Added credits.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.93
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/05/19 08:28:53;  author: zeev;  state: Exp;  lines: +6 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														Minor output mods
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.92
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/05/18 15:34:35;  author: zeev;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																														Update the license with the new clause 6
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.91
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/05/12 20:49:26;  author: sterling;  state: Exp;  lines: +1 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														Add Meself for LibSWF.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.90
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/05/12 20:11:14;  author: jah;  state: Exp;  lines: +3 -3

																																																																																																																																																																																																																																																																																																																																																																																																																														# Correct spelling, adding Andrew because half the code in that module is
																																																																																																																																																																																																																																																																																																																																																																																																																														# his, removing myself from Informix because I don't think my influence to
																																																																																																																																																																																																																																																																																																																																																																																																																														# that module was big enough worth mentioning, adding myself to GD because
																																																																																																																																																																																																																																																																																																																																																																																																																														# I think T1lib is worth mentioning. BTW, who wrote the TTF extension? I think
																																																																																																																																																																																																																																																																																																																																																																																																																														# he is missing credits here.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.89
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/05/04 10:38:14;  author: sas;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														Change reentrancy API to always use the php prefix.

																																																																																																																																																																																																																																																																																																																																																																																																																														Check for the declaration of reentrant functions, so that we can use
																																																																																																																																																																																																																																																																																																																																																																																																																														them in non-ZTS mode on all platforms.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.88
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/27 18:37:02;  author: zeev;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														More error handling work (still completely disabled)
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.87
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/21 16:20:11;  author: thies;  state: Exp;  lines: +6 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														add VDIR info
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.86
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/19 23:46:26;  author: zeev;  state: Exp;  lines: +2 -5
																																																																																																																																																																																																																																																																																																																																																																																																																														Fix Win32 compilation.  Hillarious April 1st joke!
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.85
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/19 23:17:02;  author: cmv;  state: Exp;  lines: +17 -2
																																																																																																																																																																																																																																																																																																																																																																																																																														A little easter egg for April 1st ... :)
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.84
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/19 12:43:54;  author: zeev;  state: Exp;  lines: +6 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														phpcredits() update.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.83
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/17 18:57:40;  author: eschmid;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														Have forgotten myself.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.82
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/14 21:12:21;  author: eschmid;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														Small corrections.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.81
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/14 18:22:43;  author: zeev;  state: Exp;  lines: +5 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														Add the documentation team to the credits page
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.80
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/10 20:21:01;  author: zeev;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																														Object overloading API changed slightly (llist is now a pointer)
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.79
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/07 16:41:19;  author: cmv;  state: Exp;  lines: +11 -10
																																																																																																																																																																																																																																																																																																																																																																																																																														more prettiness
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.78
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/07 15:30:47;  author: zeev;  state: Exp;  lines: +8 -6
																																																																																																																																																																																																																																																																																																																																																																																																																														Unify
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.77
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/06 22:54:33;  author: andi;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														- ZEND_DEBUG is always defined
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.76
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/05 22:30:19;  author: cmv;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														phpinfo() prettying

																																																																																																																																																																																																																																																																																																																																																																																																																														I will get to the rest of the functions later tonight or tomorrow
																																																																																																																																																																																																																																																																																																																																																																																																																														(i.e. from hyperwave to snmp)
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.75
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/05 21:03:30;  author: cmv;  state: Exp;  lines: +5 -3
																																																																																																																																																																																																																																																																																																																																																																																																																														finally (thanks Andreas)
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.74
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/05 21:00:35;  author: cmv;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																																														still cant get this
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.73
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/05 20:48:46;  author: cmv;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																														phpinfo() prettying
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.72
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/05 20:29:20;  author: cmv;  state: Exp;  lines: +5 -3
																																																																																																																																																																																																																																																																																																																																																																																																																														fixed the segfault problem (probably not the prettiest way, but)
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.71
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/04/05 20:17:02;  author: cmv;  state: Exp;  lines: +132 -62
																																																																																																																																																																																																																																																																																																																																																																																																																														Prettying up the output of phpinfo().  Someone has to tell me how
																																																																																																																																																																																																																																																																																																																																																																																																																														to get a new .gif logo in there, and why the ZEND_DEBUG output is
																																																																																																																																																																																																																																																																																																																																																																																																																														causing seg faults.

																																																																																																																																																																																																																																																																																																																																																																																																																														I also need to go through all the modules and fix up the output they
																																																																																																																																																																																																																																																																																																																																																																																																																														create.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.70
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/03/16 02:18:24;  author: thies;  state: Exp;  lines: +2 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														*** empty log message ***
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.69
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/02/26 03:20:54;  author: zeev;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														- Convert 'PHP3' to 'PHP'
																																																																																																																																																																																																																																																																																																																																																																																																																														- Avoid declaring crypt() related salt types twice
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.68
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/02/24 08:07:29;  author: eschmid;  state: Exp;  lines: +0 -2
																																																																																																																																																																																																																																																																																																																																																																																																																														More protos.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.67
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/02/21 14:50:41;  author: chagenbu;  state: Exp;  lines: +2 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														being accountable for the imap and mcal work that I've done (and adding an
																																																																																																																																																																																																																																																																																																																																																																																																																														MCAL credits line)
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.66
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/02/21 14:35:28;  author: askalski;  state: Exp;  lines: +2 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														added myself to the FTP/IMAP credits
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.65
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/02/19 23:41:21;  author: zeev;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																														the pipe is breaking all the time
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.64
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/02/19 20:12:26;  author: zeev;  state: Exp;  lines: +1 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														Worked on beautifying rfc1867.c a bit
																																																																																																																																																																																																																																																																																																																																																																																																																														@- Introduced $HTTP_POST_FILES[], that contains information about files uploaded
																																																																																																																																																																																																																																																																																																																																																																																																																														@  through HTTP upload (Zeev)
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.63
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/02/18 17:59:44;  author: zeev;  state: Exp;  lines: +35 -9
																																																																																																																																																																																																																																																																																																																																																																																																																														- Fix some issues with the ISAPI module, made it friendlier to non Win32 platforms
																																																																																																																																																																																																																																																																																																																																																																																																																														- Added .reg file for PWS setup
																																																																																																																																																																																																																																																																																																																																																																																																																														- Reordered some stuff in phpinfo()
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.62
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/02/11 15:59:29;  author: zeev;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																																														Fine tune Andi's patch
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.61
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/02/10 21:53:56;  author: andi;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																																														- Get rid of some more evil MSVC5's and switch standard/ to use PHP_WIN32
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.60
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/02/05 22:58:59;  author: zeev;  state: Exp;  lines: +56 -84
																																																																																																																																																																																																																																																																																																																																																																																																																														Standardize
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.59
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/02/05 15:16:11;  author: zeev;  state: Exp;  lines: +0 -2
																																																																																																																																																																																																																																																																																																																																																																																																																														Cleanup patches
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.58
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/02/02 14:15:33;  author: andrei;  state: Exp;  lines: +2 -3
																																																																																																																																																																																																																																																																																																																																																																																																																														Some rearranging.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.57
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/01/09 18:32:13;  author: zeev;  state: Exp;  lines: +6 -3
																																																																																																																																																																																																																																																																																																																																																																																																																														@- Fixed a possible crash in phpinfo() (Zeev)
																																																																																																																																																																																																																																																																																																																																																																																																																														phpinfo() now ensures that HTTP_*_VARS[] are actually arrays before it tries
																																																																																																																																																																																																																																																																																																																																																																																																																														to access them...
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.56
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 2000/01/01 01:31:52;  author: sas;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														Happy Y2K patch! Happy new year (or the new millennium, depending on whether
																																																																																																																																																																																																																																																																																																																																																																																																																														you start counting at 0 or 1).
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.55
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/12/21 20:35:43;  author: zeev;  state: Exp;  lines: +12 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														@- Fixed a bug in ODBC error reporting (Zeev)
																																																																																																																																																																																																																																																																																																																																																																																																																														@- Added PHP_Logo_GUID() and Zend_Logo_GUID() functions, that return the GUIDs
																																																																																																																																																																																																																																																																																																																																																																																																																														@  of the PHP and Zend logos used in phpinfo() (Zeev)
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.54
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/12/20 23:09:49;  author: sas;  state: Exp;  lines: +2 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														Use sapi_module_struct to contain SAPI module name
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.53
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/12/20 15:38:44;  author: zeev;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														Make the Win32 tree compile again
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.52
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/12/20 07:12:27;  author: sas;  state: Exp;  lines: +2 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														Add information about chosen SAPI module to phpinfo()
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.51
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/12/18 22:35:27;  author: zeev;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																														- The tree compiles again
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.50
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/12/18 04:01:14;  author: zeev;  state: Exp;  lines: +7 -7
																																																																																																																																																																																																																																																																																																																																																																																																																														More php3_ annihilation
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.49
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/12/14 03:48:46;  author: thies;  state: Exp;  lines: +12 -8
																																																																																																																																																																																																																																																																																																																																																																																																																														use _ex-API
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.48
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/12/07 02:49:03;  author: evan;  state: Exp;  lines: +1 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														Mention CyberCash.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.47
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/12/03 20:08:24;  author: rubys;  state: Exp;  lines: +2 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														windows build errors
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.46
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/12/03 17:10:18;  author: neotron;  state: Exp;  lines: +1 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														Added credit notes for Roxen SAPI module
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.45
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/12/03 13:31:41;  author: ssb;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														Add configure command to phpinfo() output (Stig)
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.44
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/11/29 15:36:24;  author: rubys;  state: Exp;  lines: +1 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														Initial alpha-level of sapi/servlet.  See README for details.
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.43
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/11/24 17:56:31;  author: sas;  state: Exp;  lines: +0 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														Killing some unused variable warnings
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.42
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/11/22 19:10:14;  author: fmk;  state: Exp;  lines: +1 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														add MS SQL module to credit info
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.41
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/11/18 03:03:24;  author: rubys;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														arg!  alphabetize correctly!
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.40
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/11/18 02:40:52;  author: rubys;  state: Exp;  lines: +1 -0
																																																																																																																																																																																																																																																																																																																																																																																																																														add Java module to credit info
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.39
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/10/20 16:16:58;  author: sas;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														(_display_module_info): Add anchor for module names
																																																																																																																																																																																																																																																																																																																																																																																																																														----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																														revision 1.38
																																																																																																																																																																																																																																																																																																																																																																																																																														date: 1999/10/04 15:18:19;  author: sas;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																														        * archive-based convenience libraries completely replaced
																																																																																																																																																																																																																																																																																																																																																																																																																																		          with libtool components

																																																																																																																																																																																																																																																																																																																																																																																																																																							        * SAPI targets can enable thread-safe mode and define
																																																																																																																																																																																																																																																																																																																																																																																																																																											          shared/static/program build target

																																																																																																																																																																																																																																																																																																																																																																																																																																																        * all configure scripts use the same config.cache

																																																																																																																																																																																																																																																																																																																																																																																																																																																				        * phplibdir is $(top_builddir)/modules to avoid
																																																																																																																																																																																																																																																																																																																																																																																																																																																								          permission problems

																																																																																																																																																																																																																																																																																																																																																																																																																																																													        * sapi/*/Makefile.inc are gone

																																																																																																																																																																																																																																																																																																																																																																																																																																																																	        * runpath handling cleaned up

																																																																																																																																																																																																																																																																																																																																																																																																																																																																					        * top-level Makefile.in obsoleted through Makefile.am

																																																																																																																																																																																																																																																																																																																																																																																																																																																																									        * --enable-versioning uses libtool's cleaner and more
																																																																																																																																																																																																																																																																																																																																																																																																																																																																													          portable -export-symbols feature
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																		----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																		revision 1.37
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																		date: 1999/10/01 14:54:55;  author: andrei;  state: Exp;  lines: +4 -4
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																		rename.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																		----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																		revision 1.36
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																		date: 1999/09/25 15:41:51;  author: sas;  state: Exp;  lines: +1 -0
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																		    Add entry for AOLserver.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.35
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/09/24 18:02:58;  author: thies;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				updated XML (only partly tested)
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.34
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/09/16 22:15:43;  author: zeev;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				Generalize SAPI a bit
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.33
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/09/13 01:11:41;  author: zeev;  state: Exp;  lines: +7 -1
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				Modified phpinfo() to show the contents of arrays in HTTP_*_VARS[]
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.32
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/09/13 00:35:03;  author: zeev;  state: Exp;  lines: +14 -2
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				Fix a buglet, and avoid crashing in phpinfo() (fixes an elusive legacy bug too)
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.31
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/09/11 16:32:08;  author: zeev;  state: Exp;  lines: +4 -4
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				Rename allow_builtin_links to expose_php
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.30
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/08/07 18:21:35;  author: zeev;  state: Exp;  lines: +18 -10
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				Built-in phpinfo() links are now turned off by default.  They can be
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				turned on using the allow_builtin_links INI directive
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.29
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/08/07 17:52:11;  author: zeev;  state: Exp;  lines: +18 -3
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				- Changed phpinfo() to list modules that have no info function
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.28
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/08/07 15:50:26;  author: sr;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				Corrected spelling.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.27
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/08/02 19:16:50;  author: zeev;  state: Exp;  lines: +38 -38
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				Removed '3' from key functions in PHP (maintained compatibility through
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				php3_compat.h)
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.26
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/07/19 20:27:49;  author: andrey;  state: Exp;  lines: +1 -0
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				Updated status
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.25
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/07/19 18:37:42;  author: zeev;  state: Exp;  lines: +10 -10
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				*** empty log message ***
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.24
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/07/19 14:07:10;  author: sas;  state: Exp;  lines: +1 -0
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				update
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.23
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/07/19 13:35:13;  author: andrey;  state: Exp;  lines: +3 -1
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				More credits.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.22
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/07/17 20:38:14;  author: andrey;  state: Exp;  lines: +2 -1
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				Update credits a bit.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				"Overall Work" line should probably be extended.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.21
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/07/17 19:22:27;  author: zeev;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				*** empty log message ***
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.20
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/07/17 19:17:42;  author: zeev;  state: Exp;  lines: +115 -60
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				I was sure I committed these already.  Weird
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.19
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/07/17 17:33:42;  author: zeev;  state: Exp;  lines: +44 -2
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				*** empty log message ***
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.18
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/07/16 13:12:56;  author: zeev;  state: Exp;  lines: +9 -20
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				License update
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.17
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/07/14 23:34:30;  author: zeev;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				php3.ini -> php.ini
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.16
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/07/14 23:33:00;  author: zeev;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				* Update logos
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				* Move from PreAlpha 1 to Beta 1.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.15
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/07/14 16:02:10;  author: andi;  state: Exp;  lines: +129 -151
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				- Add a bitwise flag to phpinfo()
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				- Import a draft of the new PHP license
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.14
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/05/20 12:06:45;  author: andi;  state: Exp;  lines: +6 -0
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				- Small fixes
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.13
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/05/16 11:19:26;  author: sas;  state: Exp;  lines: +2 -2
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				conv_proto *.[ch]
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.12
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/05/11 00:43:46;  author: zeev;  state: Exp;  lines: +13 -17
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				beatify Apache's info func
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				revision 1.11
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				date: 1999/05/09 08:48:01;  author: zeev;  state: Exp;  lines: +100 -159
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				* Finalizing the PHP version of SAPI.  Support POST and cookies among other things.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				* Fully implement ISAPI support - POST and cookies among other things.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				* Almost completely rewrote phpinfo().  Allow modules to easily display their
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				  information in phpinfo() without modifying phpinfo() itself (prototype for
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																					  the module info function was changed, thus the large amount of updated module
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																						  files).
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							* Initial extended SAPI support for Apache, completely untested.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							* CGI now uses SAPI fully as well.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							revision 1.10
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							date: 1999/05/06 18:09:50;  author: zeev;  state: Exp;  lines: +3 -0
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							* Optimize _php3_parse_gpc_data() and clean it up, plus fix a couple of Zend related memory leaks in it
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							revision 1.9
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							date: 1999/05/02 19:54:02;  author: zeev;  state: Exp;  lines: +7 -2
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							Move path_info to the SAPI structure
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							revision 1.8
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							date: 1999/04/26 17:26:36;  author: zeev;  state: Exp;  lines: +19 -10
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							* Get the Apache module to compile again
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							* Get rid of php3_rqst, use SG(server_context) instead (there's still Apache-specific code,
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																							  but it nuked a global)
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																								----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																								revision 1.7
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																								date: 1999/04/26 14:00:49;  author: zeev;  state: Exp;  lines: +1 -3
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																								* Plenty of thread safety and Win32 work.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																								* Changed PHP4 to compile as a DLL, both ISAPI and the the CGI run with the same DLL.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																								* Switched to using the DLL runtime library under Win32.  PHP will NOT work if
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																								  compiled against the static library!
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									* Removed yesterday's php4libts project (with php4dllts, it's obsolete).

																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									This *does* affect thread-unsafe Windows as well - the thread unsafe CGI is also
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									dependant on the thread-unsafe DLL.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.6
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									date: 1999/04/24 00:11:56;  author: zeev;  state: Exp;  lines: +8 -12
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									A lot of cleanups...  Removed old thread-safe code and other redundant code and files
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.5
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									date: 1999/04/23 20:05:59;  author: zeev;  state: Exp;  lines: +1 -3
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									Remove tls.[ch]
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.4
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									date: 1999/04/22 00:25:57;  author: ssb;  state: Exp;  lines: +1 -1
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									moved fdf, hyperwave, informix and some smaller files
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.3
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									date: 1999/04/18 15:58:26;  author: zeev;  state: Exp;  lines: +3 -3
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									Make Win32 happy with the recent changes.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.2
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									date: 1999/04/17 01:52:58;  author: ssb;  state: Exp;  lines: +6 -2
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									make sure the images on the phpinfo() page point to PHP-enabled pages
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									----------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									revision 1.1
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									date: 1999/04/17 00:37:06;  author: ssb;  state: Exp;
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									First commit of re-structuring phase one.  We have started using automake in
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									sub-directories and started to move extension code into ext/<name>.  For now,
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									I have moved the "standard" extension (which is quite a mix of everything
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									right now) and the GD extension into their own subdirs in ext/.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									The configure script now also runs configure in the libzend directory
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									automatically and makes sure php4 and libzend use the same config.cache file.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									To avoid running configure in libzend, use the --no-recursion option.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									"make" in php4 also builds libzend now.
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									The Apache module doesn't compile right now, but a fix for that is
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									coming up.

																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									CVS: ----------------------------------------------------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									CVS: Enter Log.  Lines beginning with `CVS:' are removed automatically
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									CVS:
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									CVS: Committing in .
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									CVS:
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									CVS: Modified Files:
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									CVS:  ext/standard/info.c
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									CVS: ----------------------------------------------------------------------
																																																																																																																																																																																																																																																																																																																																																																																																																																																																																									~                                               olor is readable on it)

someone should change all this to make use of CSS as we already have
a CSS block in there, but i do not know enough about it

oh, btw: changed all the ugly uses of \" in tag attriutes to '
as i was already on it ;)
2002-08-08 13:31:49 +00:00
Stefan Esser 6f822fdcb7 A full hard disk is no reason to leak memory... 2002-08-08 12:40:51 +00:00
Markus Fischer 652baa710e - Add note how php_error() messages SHOULD (rfc2119) look like. 2002-08-08 11:22:18 +00:00
Zeev Suraski 0e50ac4b2c MFZE1 2002-08-08 08:42:22 +00:00
Georg Richter f9e5ba3446 Ups, forgot to remove load_infile tests. Thx to Brad Bulgar 2002-08-08 08:17:24 +00:00
Dan Kalowsky 9b7cc76300 fix for bug #18794, not checking for actual files 2002-08-08 05:52:15 +00:00
Yasuo Ohgaki 6ad0dbf5fa Add some assertion 2002-08-08 03:08:54 +00:00
Yasuo Ohgaki 4b7ad8104e Forgot this one. Fix build 2002-08-08 01:50:23 +00:00
Yasuo Ohgaki 19df86f388 Fix build 2002-08-08 01:46:07 +00:00
c4b11d2447 ChangeLog update 2002-08-08 00:18:02 +00:00
Georg Richter 8f7792a769 added zend_error messages for deprecated functions
inserted zak and me in author list/credits
2002-08-07 22:02:11 +00:00
Georg Richter f4b4797aa8 removed unsued constants (MYSQL_USE_RESULT and MYSQL_STORE_RESULT) 2002-08-07 21:21:46 +00:00
Marcus Boerger e50228ab5b -new functions php_error_func<0> to support unified error messages
#read followup
2002-08-07 18:29:36 +00:00
Harald Radi e84bddf76a dump memory leaks on shutdown 2002-08-07 18:16:44 +00:00
Joseph Tate 3001ecc948 #Stupid. Sorry. 2002-08-07 17:03:42 +00:00
Joseph Tate 17d94ed821 #Don't use C++ Comments bug #18783 2002-08-07 16:52:00 +00:00
Marcus Boerger abb280e9f7 left on debug infos
#overlooked that in diff
2002-08-07 16:35:48 +00:00
Marcus Boerger 36986742ae Ignore additional thumbnails
#anybody interested in expansion to support multiple thumbnails?
2002-08-07 16:19:43 +00:00
Harald Radi 99c90db11a make win32 debug output more verbose 2002-08-07 14:47:42 +00:00
Brad House a77c0a13f7 more syncing with libmcve-3.0 2002-08-07 14:29:16 +00:00
Yasuo Ohgaki 885d8073e4 Fixed crash. Patch by <kilbi@rad.rwth-aachen.de> 2002-08-07 11:50:49 +00:00
Brad LaFountain a8326d6f62 Sync with Sourceforge CVS 2002-08-07 03:03:09 +00:00
f7ac5069b3 ChangeLog update 2002-08-07 00:18:32 +00:00
Dan Kalowsky e47f69532f A folding we will go, a folding we will go,
adding the fold and vim lines to make this easier to follow
2002-08-06 22:08:23 +00:00
Marko Karppinen 107a9efbd9 Fix the framework support 2002-08-06 22:05:38 +00:00
Marko Karppinen 7498f56852 Updated proto to match the function (fix compile bustage on osx) 2002-08-06 19:39:12 +00:00
Marko Karppinen 6d80c191bb The link lines don't need any of $DEFS, $INCLUDES, $EXTRA_INCLUDES or
$CPPFLAGS, right? Removed them. Added frameworks to $COMMON_FLAGS.
2002-08-06 17:51:24 +00:00
2091 changed files with 622 additions and 624480 deletions

No files matched your search

-233
View File
@@ -1,233 +0,0 @@
PHP Coding Standards
====================
This file lists several standards that any programmer, adding or changing
code in PHP, should follow. Since this file was added at a very late
stage of the development of PHP v3.0, the code base does not (yet) fully
follow it, but it's going in that general direction. Since we are now
well into the version 4 releases, many sections have been recoded to use
these rules.
Code Implementation
-------------------
[1] Functions that are given pointers to resources should not free them
For instance, function int mail(char *to, char *from) should NOT free
to and/or from.
Exceptions:
- The function's designated behavior is freeing that resource. E.g. efree()
- The function is given a boolean argument, that controls whether or not
the function may free its arguments (if true - the function must free its
arguments, if false - it must not)
- Low-level parser routines, that are tightly integrated with the token
cache and the bison code for minimum memory copying overhead.
[2] Functions that are tightly integrated with other functions within the
same module, and rely on each other non-trivial behavior, should be
documented as such and declared 'static'. They should be avoided if
possible.
[3] Use definitions and macros whenever possible, so that constants have
meaningful names and can be easily manipulated. The only exceptions
to this rule are 0 and 1, when used as false and true (respectively).
Any other use of a numeric constant to specify different behavior
or actions should be done through a #define.
[4] When writing functions that deal with strings, be sure to remember
that PHP holds the length property of each string, and that it
shouldn't be calculated with strlen(). Write your functions in a such
a way so that they'll take advantage of the length property, both
for efficiency and in order for them to be binary-safe.
Functions that change strings and obtain their new lengths while
doing so, should return that new length, so it doesn't have to be
recalculated with strlen() (e.g. php_addslashes())
[5] Use php_error() to report any errors/warnings during code execution.
Use descriptive error messages, and try to avoid using identical
error strings for different stages of an error. For example,
if in order to obtain a URL you have to parse the URL, connect,
and retreive the text, assuming something can go wrong at each
of these stages, don't report an error "Unable to get URL"
on all of them, but instead, write something like "Unable
to parse URL", "Unable to connect to URL server" and "Unable
to fetch URL text", respectively.
[6] NEVER USE strncat(). If you're absolutely sure you know what you're doing,
check its man page again, and only then, consider using it, and even then,
try avoiding it.
[7] Use ZEND_* macros instead of PHP_* macros. Use of PHP_* macros is not
recommended. Since most of the PHP_* macros are ZEND_* macro aliases, using
the PHP_* macros makes browsing the source code with a tag search harder.
[8] Use assert(). assert.h is included in php.h if it is available. Not only
does good assertion catch bugs, but it also helps with code readability.
- Do not use assert for error handling. Use assert only for the
condition that must be always true.
- Do not use assignments in assert conditions. If you assign inside an
assert condition, you risk an elusive bug that would be very difficult
to spot in a debug build, due to the side effect of the assignment.
Function calls in assert conditions may also cause this problem, if
they modify one of their arguments or global variables.
Naming Conventions
------------------
[1] Function names for user-level functions should be enclosed with in
the PHP_FUNCTION() macro. They should be in lowercase, with words
underscore delimited, with care taken to minimize the letter count.
Abbreviations should not be used when they greatly decrease the
readability of the function name itself.
Good:
'mcrypt_enc_self_test'
'mysql_list_fields'
Ok:
'mcrypt_module_get_algo_supported_key_sizes'
(could be 'mcrypt_mod_get_algo_sup_key_sizes'?)
'get_html_translation_table'
(could be 'html_get_trans_table'?)
Bad:
'hw_GetObjectByQueryCollObj'
'pg_setclientencoding'
'jf_n_s_i'
[2] If they are part of a "parent set" of functions, that parent should
be included in the user function name, and should be clearly related
to the parent program or function family. This should be in the form
of parent_*.
A family of 'foo' functions, for example:
Good:
'foo_select_bar'
'foo_insert_baz'
'foo_delete_baz'
Bad:
'fooselect_bar'
'fooinsertbaz'
'delete_foo_baz'
[3] Function names used by user functions should be prefixed
with "_php_", and followed by a word or an underscore-delimited list of
words, in lowercase letters, that describes the function. If applicable,
they should be declared 'static'.
[4] Variable names must be meaningful. One letter variable names must be
avoided, except for places where the variable has no real meaning or
a trivial meaning (e.g. for (i=0; i<100; i++) ...).
[5] Variable names should be in lowercase. Use underscores to separate
between words.
Syntax and indentation
----------------------
[1] Never use C++ style comments (i.e. // comment). Always use C-style
comments instead. PHP is written in C, and is aimed at compiling
under any ANSI-C compliant compiler. Even though many compilers
accept C++-style comments in C code, you have to ensure that your
code would compile with other compilers as well.
The only exception to this rule is code that is Win32-specific,
because the Win32 port is MS-Visual C++ specific, and this compiler
is known to accept C++-style comments in C code.
[2] Use K&R-style. Of course, we can't and don't want to
force anybody to use a style he or she is not used to, but,
at the very least, when you write code that goes into the core
of PHP or one of its standard modules, please maintain the K&R
style. This applies to just about everything, starting with
indentation and comment styles and up to function declaration
syntax.
(see also http://www.tuxedo.org/~esr/jargon/html/entry/indent-style.html)
[3] Be generous with whitespace and braces. Always prefer:
if (foo) {
bar;
}
to:
if(foo)bar;
Keep one empty line between the variable declaration section and
the statements in a block, as well as between logical statement
groups in a block. Maintain at least one empty line between
two functions, preferably two.
[4] When indenting, use the tab character. A tab is expected to represent
four spaces. It is important to maintain consistency in indenture so
that definitions, comments, and control structures line up correctly.
Documentation and Folding Hooks
-------------------------------
In order to make sure that the online documentation stays in line with
the code, each user-level function should have its user-level function
prototype before it along with a brief one-line description of what the
function does. It would look like this:
/* {{{ proto int abs(int number)
Returns the absolute value of the number */
PHP_FUNCTION(abs)
{
...
}
/* }}} */
The {{{ symbols are the default folding symbols for the folding mode in
Emacs and vim (set fdm=marker). Folding is very useful when dealing with
large files because you can scroll through the file quickly and just unfold
the function you wish to work on. The }}} at the end of each function marks
the end of the fold, and should be on a separate line.
The "proto" keyword there is just a helper for the doc/genfuncsummary script
which generates a full function summary. Having this keyword in front of the
function prototypes allows us to put folds elsewhere in the code without
messing up the function summary.
Optional arguments are written like this:
/* {{{ proto object imap_header(int stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])
Returns a header object with the defined parameters */
And yes, please keep the prototype on a single line, even if that line
is massive.
New and Experimental Functions
-----------------------------------
To reduce the problems normally associated with the first public
implementation of a new set of functions, it has been suggested
that the first implementation include a file labeled 'EXPERIMENTAL'
in the function directory, and that the functions follow the
standard prefixing conventions during their initial implementation.
The file labelled 'EXPERIMENTAL' should include the following
information:
Any authoring information (known bugs, future directions of the module).
Ongoing status notes which may not be appropriate for CVS comments.
Aliases & Legacy Documentation
-----------------------------------
You may also have some deprecated aliases with close to duplicate
names, for example, somedb_select_result and somedb_selectresult. For
documentation purposes, these will only be documented by the most
current name, with the aliases listed in the documentation for
the parent function. For ease of reference, user-functions with
completely different names, that alias to the same function (such as
highlight_file and show_source), will be separately documented. The
proto should still be included, describing which function is aliased.
Backwards compatible functions and names should be maintained as long
as the code can be reasonably be kept as part of the codebase. See
/phpdoc/README for more information on documentation.
-2
View File
@@ -1,2 +0,0 @@
For the list of people who've put work into PHP, please see
http://www.php.net/credits.php
-17796
View File
File diff suppressed because it is too large. Load diff
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
-473
View File
@@ -1,473 +0,0 @@
List of PHP maintainers
=======================
Maintenance legend
------------------
Supported: Someone is actually paid to look after this.
Maintained: Someone actually looks after it.
Odd Fixes: It has a maintainer but they don't have time to do
much other than throw the odd patch in. See below.
Orphan: No current maintainer [but maybe you could take the
role as you write your new code].
Obsolete: Old code. Something tagged obsolete generally means
it has been replaced by a better system and you
should be using that.
Unknown: Not known at this time.
Status legend
-------------
Working: Working under both Windows and Unix.
Windows: Working only under Windows.
Unix: Working only under Unix.
Experimental: Under development or initial release.
Not Working: Not working.
Unknown: Status unknown.
== Server APIs ==
-------------------------------------------------------------------------------
EXTENSION: aolserver
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: apache
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: apache2
PRIMARY MAINTAINER: Aaron Bannert <aaron@php.net>
MAINTENANCE: Maintained
STATUS: Experimental
-------------------------------------------------------------------------------
EXTENSION: cgi
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: fhttpd
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: isapi
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: nsapi
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: phttpd
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: pi3web
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: roxen
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: servlet
PRIMARY MAINTAINER: Sam Ruby <rubys@us.ibm.com>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: thttpd
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: webjames
PRIMARY MAINTAINER: Alex Waugh <alex@alexwaugh.com>
MAINTENANCE: Maintained
STATUS: Experimental
-------------------------------------------------------------------------------
== Database extensions ==
-------------------------------------------------------------------------------
EXTENSION: dba
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: dbase
PRIMARY MAINTAINER: Jim Winstead <jimw@php.net>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: dbx
PRIMARY MAINTAINER: Marc Boeren <M.Boeren@guidance.nl>
MAINTENANCE: Maintained
STATUS: Working
SINCE: 4.0.6
COMMENT: DB abstraction for odbc, mysql, pgsql, mssql, fbsql and more, see documentation
-------------------------------------------------------------------------------
EXTENSION: filepro
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: hyperwave
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: informix
PRIMARY MAINTAINER: Danny Heijl <Danny.Heijl@cevi.be>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: ingres_ii
PRIMARY MAINTAINER: David Hénot <henot@php.net>
MAINTENANCE: Maintained
STATUS: Experimental
SINCE: 4.0.2
-------------------------------------------------------------------------------
EXTENSION: interbase
PRIMARY MAINTAINER: Jouni Ahto <jouni.ahto@exdec.fi>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: msql
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: msession
PRIMARY MAINTAINER Mark L. Woodward mlwmohawk@mohawksoft.com
MAINTENANCE: Maintained
STATUS: Working/Experimental
COMMENT: Tested on Linux, should work on other UNIX platforms. Backend server code can compile under Windows.
-------------------------------------------------------------------------------
EXTENSION: mssql
PRIMARY MAINTAINER: Frank M. Kromann <fmk@swwwing.com>
MAINTENANCE: Maintained
STATUS: Working
COMMENT: Tested on phpts and isapi versions
-------------------------------------------------------------------------------
EXTENSION: mysql
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: pgsql
PRIMARY MAINTAINER: Yasuo Ohgaki <yohgaki@php.net>
MAINTENANCE: Maintained
STATUS: Working
COMMENT: Use PostgreSQL 7.0.x or later. PostgreSQL 6.5.3 or less have fatal bug.
-------------------------------------------------------------------------------
EXTENSION: sybase
MAINTENANCE: Unknown
STATUS: Not Working
-------------------------------------------------------------------------------
EXTENSION: sybase_ct
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: oci8
PRIMARY MAINTAINER: Thies C. Arntzen <thies@thieso.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: odbc
PRIMARY MAINTAINER: Daniel R. Kalowsky <kalowsky@php.net>
MAINTENANCE: Maintained
STATUS: Working
COMMENT: Working except for persistent connections
-------------------------------------------------------------------------------
EXTENSION: oracle
PRIMARY MAINTAINER: Thies C. Arntzen <thies@thieso.net>
MAINTENANCE: Maintained
STATUS: Working
COMMENT: Using the new OCI8 driver is encouraged where possible.
-------------------------------------------------------------------------------
== Other extensions ==
-------------------------------------------------------------------------------
EXTENSION: aspell
MAINTENANCE: Unknown
STATUS: Working
COMMENT: For aspell .27 and greater, check out the pspell extension
-------------------------------------------------------------------------------
EXTENSION: bcmath
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: bz2
PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
MAINTENANCE: Maintained
STATUS: Working
SINCE: 4.0.3
-------------------------------------------------------------------------------
EXTENSION: calendar
PRIMARY MAINTAINER: Hartmut Holzgraefe <hartmut@six.de>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: com
PRIMARY MAINTAINER: Harald Radi <h.radi@nme.at>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: cpdf
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: crack
MAINTENANCE: Unknown
STATUS: Experimental
SINCE: 4.0.5
-------------------------------------------------------------------------------
EXTENSION: ctype
PRIMARY MAINTAINER: Hartmut Holzgraefe <hartmut@six.de>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: curl
PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
MAINTENANCE: Maintained
STATUS: Working
SINCE: 4.0.2
-------------------------------------------------------------------------------
EXTENSION: cybercash
PRIMARY MAINTAINER: Evan Klinger <evan715@sirius.com>
MAINTENANCE: Maintained
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: domxml
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
MAINTENANCE: Maintained
STATUS: Experimental
-------------------------------------------------------------------------------
EXTENSION: dotnet
PRIMARY MAINTAINER: Sam Ruby <rubys@us.ibm.com>
MAINTENANCE: Maintained
STATUS: Experimental
-------------------------------------------------------------------------------
EXTENSION: exif
PRIMARY MAINTAINER: Marcus Boerger <helly@php.net>
MAINTENANCE: Maintained
STATUS: Working
SINCE: 4.2
-------------------------------------------------------------------------------
EXTENSION: fdf
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
MAINTENANCE: Maintained
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: ftp
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: gd
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: gettext
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: gmp
MAINTENANCE: Unknown
STATUS: Unknown
SINCE: 4.0.4
-------------------------------------------------------------------------------
EXTENSION: icap
MAINTENANCE: Unknown
STATUS: Obsolete
-------------------------------------------------------------------------------
EXTENSION: imap
PRIMARY MAINTAINER: Chuck Hagenbuch <chuck@horde.org>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: java
PRIMARY MAINTAINER: Sam Ruby <rubys@us.ibm.com>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: ldap
PRIMARY MAINTAINER: Stig Venaas <venaas@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: mbstring
PRIMARY MAINTAINER: Rui Hirokawa <hirokawa@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: mcal
PRIMARY MAINTAINER: Chuck Hagenbuch <chuck@horde.org>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: mcrypt
PRIMARY MAINTAINER: Derick Rethans <d.rethans@jdimedia.nl>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: mhash
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: muscat
PRIMARY MAINTAINER: Sam Liddicott <sam@ananova.com>
MAINTENANCE: Maintained
STATUS: Working
SINCE: 4.0.5
COMMENT: Not tested against windows, only core API completed, rest under development
-------------------------------------------------------------------------------
EXTENSION: openssl
PRIMARY MAINTAINER: Wez Furlong <wez@php.net>
MAINTENANCE: Maintained
STATUS: Experimental
SINCE: 4.0.4
-------------------------------------------------------------------------------
EXTENSION: overload
PRIMARY MAINTAINER: Andrei Zmievski <andrei@php.net>
MAINTENANCE: Maintained
STATUS: Experimental
-------------------------------------------------------------------------------
EXTENSION: pcre
PRIMARY MAINTAINER: Andrei Zmievski <andrei@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: pdf
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: pfpro
PRIMARY MAINTAINER: David Croft <david@infotrek.co.uk>
MAINTENANCE: Maintained
STATUS: Working
SINCE: 4.0.2
-------------------------------------------------------------------------------
EXTENSION: posix
PRIMARY MAINTAINER: Kristian Köhntopp <kris@koehntopp.de>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: printer
PRIMARY MAINTAINER: Daniel Beulshausen <daniel@php4win.de>
MAINTENANCE: Maintained
STATUS: Working
SINCE: 4.0.4
COMMENT: Only for Win32
-------------------------------------------------------------------------------
EXTENSION: pspell
PRIMARY MAINTAINER: Vlad Krupin <phpdevel@echospace.com>
MAINTENANCE: Unknown
STATUS: Unknown
SINCE: 4.0.2
-------------------------------------------------------------------------------
EXTENSION: qtdom
MAINTENANCE: Unknown
STATUS: Experimental
SINCE: 4.0.4
-------------------------------------------------------------------------------
EXTENSION: readline
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: recode
PRIMARY MAINTAINER: Kristian Köhntopp <kris@koehntopp.de>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: sablot
PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
MAINTENANCE: Obsolete
STATUS: Experimental
SINCE: 4.0.3
-------------------------------------------------------------------------------
EXTENSION: satellite
PRIMARY MAINTAINER: David Eriksson <eriksson@php.net>
MAINTENANCE: Odd Fixes
STATUS: Experimental
SINCE: 4.0.3
-------------------------------------------------------------------------------
EXTENSION: session
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: shmop
PRIMARY MAINTAINER: Ilia Alshanetsky <iliaa@php.net>
MAINTENANCE: Maintained
STATUS: Experimental
SINCE: 4.0.3
-------------------------------------------------------------------------------
EXTENSION: snmp
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: sockets
PRIMARY MAINTAINER: Chris Vandomelen <chrisv@b0rked.dhs.org>
MAINTENANCE: Maintained
STATUS: Experimental
SINCE: 4.0.2
-------------------------------------------------------------------------------
EXTENSION: swf
PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
MAINTENANCE: Maintained
STATUS: Depreciated (Use the ming swf extension instead)
COMMENT: Only for Unix (won't change)
-------------------------------------------------------------------------------
EXTENSION: sysvsem
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: sysvshm
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: vpopmail
MAINTENANCE: Unknown
STATUS: Experimental
SINCE: 4.0.5
-------------------------------------------------------------------------------
EXTENSION: wddx
PRIMARY MAINTAINER: Andrei Zmievski <andrei@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: xml
PRIMARY MAINTAINER: Thies C. Arntzen <thies@thieso.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: xslt
PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
MAINTENANC: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: yaz
PRIMARY MAINTAINER: Adam Dickmeiss <adam@indexdata.dk>
MAINTENANCE: Maintained
STATUS: Unknown
SINCE: 4.0.1
-------------------------------------------------------------------------------
EXTENSION: yp
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: zlib
PRIMARY MAINTAINER: Stefan Roehrich <sr@linux.de>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: zziplib
PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
MAINTENANCE: Maintained
STATUS: Experimental
SINCE: 4.0.5
-------------------------------------------------------------------------------
# iptc?
-417
View File
@@ -1,417 +0,0 @@
Installation Instructions for PHP 4
-----------------------------------
STOP!
Before going any further, please remember you are going to find more
up to date instructions in the online manual, located here:
http://www.php.net/manual/en/install.apache.php
It is strongly recommended that you read the manual page before going
further. However, for the impatient, here is a quick set of steps that
will build PHP as (first) a dynamic Apache module (DSO) for Apache 1.3.x
with MySQL support and then a static module. A more verbose explanation follows.
For installing PHP on other web servers, refer to one of the following
files:
sapi/aolserver/README
sapi/pi3web/README
sapi/servlet/README
sapi/thttpd/README
README.Zeus
Some notes:
1: Only install either the static module or the dynamic one. Do not
install both.
2: If you are recompiling PHP to add new extensions or upgrading
something like GD, remove the config.cache file before you re-run
configure.
3: If you are on Linux and have installed shared libraries, make
sure the location of these shared libraries are listed in your
/etc/ld.so.conf file. For example, if you have:
/usr/local/lib/mysql/libmysqlclient.so
Make sure /etc/ld.so.conf contains:
/usr/local/lib/mysql
Then run ldconfig.
If you want both PHP 3 and 4 modules in the same Apache server, check the
bottom of this file for instructions.
INSTALLATION WITH THE ZEUS WEB SERVER:
--Please see the 'README.Zeus' file included in this distribution
QUICK INSTALL (DSO)
For this to work your Apache httpd must have mod_so enabled.
Check using httpd -l. You should see something like:
Compiled-in modules:
http_core.c
mod_so.c
Chances are you will see a lot more modules than these two. That's ok,
as long as mod_so.c shows up you can proceed with the following steps:
$ gunzip -c php-4.x.y.tar.gz | tar xf -
$ cd php-4.x.y
$ ./configure --with-mysql --with-apxs
$ make
$ make install
If you get an error telling you that the apxs script could not be found,
look for it on your system and if you find it, provide the full path to it
as: --with-apxs=/path/to/apxs
Make sure you specify the version of apxs that is actually installed on
your system and NOT the one that is in the apache source tarball.
Next you must copy php.ini-dist to the appropriate place (normally
/usr/local/lib/php.ini) and edit it as necessary to set PHP options.
The only thing left to do is to edit your httpd.conf file and make sure the
PHP 4 mime type is there and uncommented. You need a line that looks like
this:
AddType application/x-httpd-php .php
Then restart your server (apachectl restart) and you should be able to
serve up PHP files now. Make a test file called test.php and put some
PHP tags in it. Like <?phpinfo()?>, for example.
QUICK INSTALL (Static)
$ gunzip -c apache_1.3.x.tar.gz | tar xf -
$ cd apache_1.3.x
$ ./configure
$ cd ..
$ gunzip -c php-4.x.y.tar.gz | tar xf -
$ cd php-4.x.y
$ ./configure --with-mysql --with-apache=../apache_1.3.x
$ make
$ make install
$ cd ../apache_1.3.x
$ ./configure --prefix=/www --activate-module=src/modules/php4/libphp4.a
(The above line is correct! Yes, we know libphp4.a does not exist at this
stage. It isn't supposed to. It will be created.)
$ make
(you should now have an httpd binary which you can copy to your Apache bin dir if
is is your first install then you need to "make install" as well)
$ cd ../php-4.x.y
$ cp php.ini-dist /usr/local/lib/php.ini
You can edit /usr/local/lib/php.ini file to set PHP options.
Edit your httpd.conf or srm.conf file and add:
AddType application/x-httpd-php .php
VERBOSE INSTALL
Chances are you are reading this because the quick install steps above
did not work for you. If this is the case, congratulations, you are
among the elite few that actually reads documentation. It really is
not a difficult install and once you have done it once you will fly
through it.
Installing PHP can be done in four simple steps:
1. Unpack your distribution file.
You will have downloaded a file named something like php-4.x.y.tar.gz.
Unzip this file with a command like: gunzip php-4.x.y.tar.gz
Next you have to untar it with: tar -xvf php-4.x.y.tar
This will create a php-4.x.y directory. cd into this new directory.
2a. Configure PHP (Dynamic Module) - Skip to 2b if you wish to build
a static module
You now have to choose the options you would like. There are quite
a few of them. To see a list, type: ./configure --help
The only options that you are likely to want to use are the ones in
the last section entitled, "--enable and --with options recognized:"
A popular choice is to build the Apache module version. In order to
build PHP as a dynamic module for Apache-1.3.x you have to first have
Apache installed. Assuming Apache is already installed, make sure
the shared object module is enabled. To check this, type: httpd -l
You should see something like:
Compiled-in modules:
http_core.c
mod_so.c
You will most likely have a lot more modules than what is shown here.
As long as mod_so.c shows up in the list, PHP should be happy.
Now, type: ./configure --with-mysql --with-apxs
If you get an error telling you that the apxs script could not be found,
look for it on your system and if you find it, provide the full path to it
as: --with-apxs=/path/to/apxs
Make sure you specify the version of apxs that is actually installed on
your system and NOT the one that is in the apache source tarball.
You might also want other flags on this configure line. --with-mysql
is just an example.
There are a few things that can go wrong during this configure step.
The most common is that you have asked for an option and that the
configure script can not find the files required to enable this
option in PHP. Chances are you can provide the full path to the
base directory under which the related files were installed. For
example, if you have installed the GD library in /opt/gd which means
that /opt/gd/include has your GD header files and /opt/gd/lib contains
your GD library files, you would use --with-gd=/opt/gd
Skip to step 3 for compilation and installation instructions.
2b. Configure PHP (Static Module) - Skip if you performed 2a
You now have to choose the options you would like. There are quite
a few of them. To see a list, type: ./configure --help
The only options that you are likely to want to use are the ones in
the last section entitled, "--enable and --with options recognized:"
A popular choice is to build the Apache module version. You need
to know where the source code directory for your Apache server is
located. Then use an option like: --with-apache=/usr/local/src/apache
if that is your Apache source code directory. If you only specify
--with-apache, then it will default to look for your Apache source
in /usr/local/etc/httpd.
NOTE: The directory you specify should be the top-level of the
unpacked Apache (or Stronghold) distribution. The configure program
will automatically look for httpd.h in different directories under that
location depending on which version of Apache, including Stronghold,
you are running.
For MySQL support, since newer versions of MySQL installs its various
components under /usr/local, this is the default. If you have
changed the location you can specify it with: --with-mysql=/opt/local
for example. Otherwise just use: --with-mysql
*NOTE* If you are using Apache 1.3b6 or later, you should run the
Apache Configure script at least once before compiling PHP. It
doesn't matter how you have Apache configured at this point.
Skip to step 3b at this point.
3. Compile and install the files. Simply type: make install
3a. Dynamic Module Installation
Nothing else is needed here. Proceed to step 4a.
3b. Static Module Installation
For the Apache module version this will copy the appropriate files
to the src/modules/php4 directory in your Apache distribution if
you are using Apache 1.3.x. If you are still running Apache 1.2.x
these files will be copied directly to the main src directory.
For Apache 1.3b6 and later, you can use the new APACI configuration
mechanism. To automatically build Apache with PHP support, use:
cd apache_1.3.x
./configure --prefix=/<path>/apache \
--activate-module=src/modules/php4/libphp4.a
make
make install
If you do not wish to use this new configuration tool, the old
install procedure (src/Configure) will work fine.
If you are using the old Apache ./Configure script, you will have to
edit the Apache src/Configuration file manually. If you do not have
this file, copy Configuration.tmpl to Configuration.
For Apache 1.3.x add:
AddModule modules/php4/libphp4.a
For Apache 1.3.x don't do anything else. Just add this line and then
run "./Configure" followed by "make".
For Apache 1.2.x add:
Module php4_module mod_php4.o
For Apache 1.2.x you will also have to look in the libphp4.module file,
which was copied to the src directory. The EXTRA_LIBS line in the Apache
Configuration file needs to be set to use the same libs as specified on
the LIBS line in libphp4.module. You also need to make sure to add
"-L." to the beginning of the EXTRA_LIBS line.
So, as an example, your EXTRA_LIBS line might look like:
EXTRA_LIBS=-L. -lphp4 -lgdbm -ldb -L/usr/local/mysql/lib -lmysqlclient
NOTE: You should not enclose the EXTRA_LIBS line in double-quotes, as it
is in the libphp4.module file.
Also, look at the RULE_WANTHSREGEX setting in the libphp4.module file
and set the WANTHSREGEX directive accordingly in your Configuration file.
This last step applies to versions of Apache prior to 1.3b3.
This is a bit of a hassle, but should serve as incentive to move to
Apache 1.3.x where this step has been eliminated.
Once you are satisfied with your Configuration settings, type: ./Configure
If you get errors, chances are that you forgot a library or made a typo
somewhere. Re-edit Configuration and try again. If it goes well,
type: make
Assuming it compiles without errors, proceed to step 4b.
4a. Setting up the server. (Dynamic Module)
The make install command in step 3 should have done most of your
work for you. It actually edits your httpd.conf file and tries to
enable the dynamic PHP module. To verify this, look for a line that
looks like this:
LoadModule php4_module libexec/libphp4.so
The actual path before the libphp4.so part might differ slightly. This
is likely fine. If you are paranoid you can examine the output from the
make install step to see where the libphp4.so file was actually put and
place the full path to this file on this LoadModule line.
If somewhere in your httpd.conf file you have a ClearModuleList line
then you also need this line:
AddModule mod_php4.c
And finally you need to tell Apache which file extension should trigger
PHP. You do this by creating a special mime type and associating it
with an extension. We suggest using:
AddType application/x-httpd-php .php
You are however free to use any extension you wish, including .html.
Note! If a line has a # at the beginning, then it is commented out
and you need to remove the # for that line to take effect.
Finally you need to copy php.ini-dist to the appropriate place
(normally /usr/local/lib/php.ini) and edit if necessary.
Once you have made these changes you should be ready to restart your
server and try it out. Type: apachectl restart
4b. Setting up the server. (Static Module)
You should now have a new httpd binary. Shut down your existing server,
if you have one, and copy this new binary overtop of it. Perhaps make
a backup of your previous one first. Then edit your conf/httpd.conf file
and add the line:
AddType application/x-httpd-php .php
There is also an interesting feature which can be quite instructive and
helpful while debugging. That is the option of having colour syntax
highlighting. To enable this, add the following line:
AddType application/x-httpd-php-source .phps
Any file ending in .phps will now be displayed with full colour syntax
highlighting instead of being executed.
Note that on some older server setups, the AddType lines are in the
conf/srm.conf file instead of conf/httpd.conf.
Note! If a line has a # at the beginning, then it is commented out
and you need to remove the # for that line to take effect.
When you are finished making changes to your httpd.conf file, you need
to copy php.ini-dist to the appropriate place (normally
/usr/local/lib/php.ini) and edit if necessary. You can then
start up your server.
5. Testing it all worked
Create a test file named test.php in your web tree somewhere and
put some test PHP tags in it. <?phpinfo()?> is a good first test.
This tag tells PHP to do a braindump and tells you all sorts of things
about itself.
WHY DISABLING -fPIC WORKS ON LINUX
From: Martin v. Loewis <martin@loewis.home.cs.tu-berlin.de>
To: glibc-linux@ricardo.ecn.wfu.edu
Subject: Re: Shared library -shared vs. -fpic
[In reply to Kaz Kylheku <kaz@ashi.footprints.net>]
> PIC stands for Position-Independent Code.
Correct.
> Code isn't position-independent (or ``relocatable'') cannot be
> loaded at an arbitrary address;
Wrong.
> it requires some references to be patched at load time.
Correct.
> Shared libraries need to be relocatable because it's not known
> beforehand what address they will be loaded at
Correct, depending on the meaning of "relocatable". PIC code typically
does not contain relocations; that's why its position-independent.
> Just because you don't specify -fPIC doesn't mean that the compiler
> won't emit position-independent code; the option prevents it from
> emitting position-dependent code in situations where it otherwise
> would.
Correct. However, a non-trivial shared library typically won't be
position-independent unless explicitly compiled with
-fPIC. Linux/glibc indeed does not require a shared library to be
position-independent; instead, it will perform the relocations in the
binary, even if they refer to code pages. As a result, those relocated
pages won't be shared across processes, anymore.
Regards,
Martin
USING PHP 3 AND PHP 4 AS CONCURRENT APACHE MODULES
With some (newer) installations of Apache, it's possible to compile both
PHP 3 and PHP 4, and run them concurrently.
Note, it's only really wise to do this if you need to use the PHP 3 engine
to maintain backwards compatibility.
To enable it, configure PHP 3 and PHP 4 to use APXS (--with-apxs) and the
necessary link extensions (--enable-versioning). Otherwise, all standard
installations instructions apply. For example:
$ ./configure \
--with-apxs=/apache/bin/apxs \
--enable-versioning \
--with-mysql \
-68
View File
@@ -1,68 +0,0 @@
--------------------------------------------------------------------
The PHP License, version 3.0
Copyright (c) 1999 - 2002 The PHP Group. All rights reserved.
--------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, is permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
3. The name "PHP" must not be used to endorse or promote products
derived from this software without prior written permission. For
written permission, please contact group@php.net.
4. Products derived from this software may not be called "PHP", nor
may "PHP" appear in their name, without prior written permission
from group@php.net. You may indicate that your software works in
conjunction with PHP by saying "Foo for PHP" instead of calling
it "PHP Foo" or "phpfoo"
5. The PHP Group may publish revised and/or new versions of the
license from time to time. Each version will be given a
distinguishing version number.
Once covered code has been published under a particular version
of the license, you may always continue to use it under the terms
of that version. You may also choose to use such covered code
under the terms of any subsequent version of the license
published by the PHP Group. No one other than the PHP Group has
the right to modify the terms applicable to covered code created
under this License.
6. Redistributions of any form whatsoever must retain the following
acknowledgment:
"This product includes PHP, freely available from
<http://www.php.net/>".
THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND
ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP
DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------
This software consists of voluntary contributions made by many
individuals on behalf of the PHP Group.
The PHP Group can be contacted via Email at group@php.net.
For more information on the PHP Group and the PHP project,
please see <http://www.php.net>.
This product includes the Zend Engine, freely available at
<http://www.zend.com>.
-18
View File
@@ -1,18 +0,0 @@
$(builddir)/zend_language_scanner.lo: $(builddir)/zend_language_parser.h
$(builddir)/zend_ini_scanner.lo: $(builddir)/zend_ini_parser.h
$(builddir)/zend_language_scanner.c: $(srcdir)/zend_language_scanner.l
$(LEX) -Pzend -S$(srcdir)/flex.skl -o$@ -i $(srcdir)/zend_language_scanner.l
$(builddir)/zend_language_parser.h: $(builddir)/zend_language_parser.c
$(builddir)/zend_language_parser.c: $(srcdir)/zend_language_parser.y
$(YACC) -p zend -v -d $(srcdir)/zend_language_parser.y -o $@
$(builddir)/zend_ini_parser.h: $(builddir)/zend_ini_parser.c
$(builddir)/zend_ini_parser.c: $(srcdir)/zend_ini_parser.y
$(YACC) -p ini_ -v -d $(srcdir)/zend_ini_parser.y -o $@
$(builddir)/zend_ini_scanner.c: $(srcdir)/zend_ini_scanner.l
$(LEX) -Pini_ -S$(srcdir)/flex.skl -o$@ -i $(srcdir)/zend_ini_scanner.l
$(builddir)/zend_indent.lo $(builddir)/zend_highlight.lo $(builddir)/zend_compile.lo: $(builddir)/zend_language_parser.h
-74
View File
@@ -1,74 +0,0 @@
mkinstalldirs = $(top_srcdir)/build/shtool mkdir -p
INSTALL = $(top_srcdir)/build/shtool install -c
INSTALL_DATA = $(INSTALL) -m 644
DEFS = -DPHP_ATOM_INC -I$(top_builddir)/include -I$(top_builddir)/main -I$(top_srcdir)
COMMON_FLAGS = $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS)
all: $(all_targets)
build-modules: $(PHP_MODULES)
libphp4.la: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
$(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -rpath $(phptempdir) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@
libs/libphp4.bundle: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
$(CC) $(MH_BUNDLE_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(PHP_GLOBAL_OBJS:.lo=.o) $(PHP_SAPI_OBJS:.lo=.o) $(PHP_FRAMEWORKS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@ && cp $@ libs/libphp4.so
php: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
$(BUILD_CGI)
sapi/cli/php: $(PHP_GLOBAL_OBJS) $(PHP_CLI_OBJS)
$(BUILD_CLI)
install: $(install_targets)
install-cli: sapi/cli/php
@echo "Installing PHP CLI binary: $(INSTALL_ROOT)$(bindir)/"
@$(INSTALL_CLI)
install-sapi: libphp4.la
@echo "Installing PHP SAPI module"
-@$(LIBTOOL) --silent --mode=install cp libphp4.la $(phptempdir)/libphp4.la >/dev/null 2>&1
-@$(mkinstalldirs) $(INSTALL_ROOT)$(bindir)
-@if test ! -r $(phptempdir)/libphp4.$(SHLIB_SUFFIX_NAME); then \
for i in 0.0.0 0.0 0; do \
if test -r $(phptempdir)/libphp4.$(SHLIB_SUFFIX_NAME).$$i; then \
$(LN_S) $(phptempdir)/libphp4.$(SHLIB_SUFFIX_NAME).$$i $(phptempdir)/libphp4.$(SHLIB_SUFFIX_NAME); \
break; \
fi; \
done; \
fi
@$(INSTALL_IT)
install-modules: build-modules
@test -d modules && \
$(mkinstalldirs) $(INSTALL_ROOT)$(EXTENSION_DIR) && \
echo "Installing shared extensions: $(INSTALL_ROOT)$(EXTENSION_DIR)/" && \
rm -f modules/*.la && \
cp modules/* $(INSTALL_ROOT)$(EXTENSION_DIR) >/dev/null 2>&1 || true
install-tester:
@echo "Installing regression tester: $(INSTALL_ROOT)$(PEAR_INSTALLDIR)/"
@$(mkinstalldirs) $(PEAR_INSTALLDIR)
@$(INSTALL) -m 755 $(top_srcdir)/run-tests.php $(INSTALL_ROOT)$(PEAR_INSTALLDIR)
install-su: install-pear install-tester
test: sapi/cli/php
@TEST_PHP_EXECUTABLE=$(top_builddir)/sapi/cli/php \
$(top_builddir)/sapi/cli/php -c php.ini-dist $(top_srcdir)/run-tests.php
clean:
find . -name \*.lo -o -name \*.o -o -name \*.la -o -name \*.a| xargs rm -f
find . -name .libs -a -type d|xargs rm -rf
rm -f libphp4.la php sapi/cli/php modules/* libs/*
distclean: clean
rm -f config.cache config.log config.status Makefile.objects Makefile.fragments libtool main/php_config.h stamp-h php4.spec sapi/apache/libphp4.module buildmk.stamp
find . -name Makefile | xargs rm -f
.PHONY: all clean install distclean test
.NOEXPORT:
-2124
View File
File diff suppressed because it is too large. Load diff
-115
View File
@@ -1,115 +0,0 @@
This is the first file you should be reading after you get your CVS account.
We'll assume you're basically familiar with CVS, but feel free to post
your questions on the mailing list. Please have a look at
http://cvsbook.red-bean.com/ for more detailed information on CVS.
PHP is developed through the efforts of a large number of people.
Collaboration is a Good Thing(tm), and CVS lets us do this. Thus, following
some basic rules with regards to CVS usage will:
a. Make everybody happier, especially those responsible for maintaining
the CVS itself.
b. Keep the changes consistently well documented and easily trackable.
c. Prevent some of those 'Oops' moments.
d. Increase the general level of good will on planet Earth.
Having said that, here are the organizational rules:
1. Respect other people working on the project.
2. Discuss any significant changes on the list before committing.
3. Look at EXTENSIONS file to see who is the primary maintainer of
the code you want to contribute to.
4. If you "strongly disagree" about something another person did, don't
start fighting publicly - take it up in private email.
5. If you don't know how to do something, ask first!
6. Test your changes before committing them. We mean it. Really.
The next few rules are more of a technical nature.
1. DO NOT TOUCH ChangeLog! It is automagically updated from the commit
messages every day. Woe be to those who attempt to mess with it.
2. All news updates intended for public viewing, such as new features,
bug fixes, improvements, etc., should go into the NEWS file. Also see
the note below about automatically updating NEWS in your commit message.
3. Do not commit multiple file and dump all messages in one commit. If you
modified several unrelated files, commit each group separately and
provide a nice commit message for each one. See example below.
4. Do write your commit message in such a way that it makes sense even
without the corresponding diff. One should be able to look at it, and
immediately know what was modified. Definitely include the function name
in the message as shown below.
5. In your commit messages, keep each line shorter than 80 characters. And
try to align your lines vertically, if they wrap. It looks bad otherwise.
6. If you modified a function that is callable from PHP, prepend PHP to
the function name as shown below.
The format of the commit messages is pretty simple.
If a line begins with #, it is taken to be a comment and will not appear
in the ChangeLog. If the line begins with @, it will be redirected to the
NEWS file. Everything else goes into the ChangeLog.
It is important to note that if your comment or news logline spans multiple
lines, you have to put # or @ at the beginning of _every_ such line. Every
entry in NEWS has to have a name after it, so if you did it with someone's
help, put both your names there. Your name WILL NOT be automatically put
at the end of the NEWS entry - so, please provide it yourself.
Example. Say you modified two files, datetime.c and string.c. In datetime.c
you added a new format option for date() function, and in string.c you fixed
a memory leak in php_trim(). Don't commit both of these at once. Commit them
separately and try to make sure your commit messages look something like the
following.
For datetime.c:
(PHP date) Added new 'K' format modifier for printing out number of
days until New Year's Eve.
@- Added new 'K' format modifier that will output the number of days
@ until New Year's Eve. (Bob)
For string.c:
(php_trim) Fixed a memory leak resulting from improper use of zval_dtor().
# Man, that thing was leaking all over the place!
@- Fixed memory leak in trim(). (Bob)
The lines above marked with @ will go into NEWS file automagically, and the
# lines will be omitted from the ChangeLog. Alternatively, you might want
to modify NEWS file directly and not use the @ lines.
If you fix some bugs, you should note the bug ID numbers in your
commit message. Bug ID should be prefixed by "#" for easier access to
bug report when developers are browsing CVS via. LXR or Bonsai.
Example:
Fixed pgsql notice handler double free crash bug. Bug #14016
@ Fixed pgsql notice handler double free crash bug. Bug #14016
If you don't see your messages in ChangeLog and NEWS right away, don't worry!
These files are updated once a day, so your stuff will not show up until
somewhat later. Don't go adding stuff to NEWS by hand if you already put @
lines in the commit message.
You can use LXR (http://lxr.php.net/) and Bonsai (http://bonsai.php.net/)
to look at PHP CVS repository in various ways.
To receive daily updates to ChangeLog and NEWS, send an empty message to
php-cvs-daily-subscribe@lists.php.net.
Happy hacking,
PHP Team
-39
View File
@@ -1,39 +0,0 @@
Between PHP 4.0.6 and 4.1.0, the Zend module struct changed in a way
that broke both source and binary compatibility. If you are
maintaining a third party extension, here's how to update it:
If this was your old module entry:
zend_module_entry foo_module_entry = {
"foo", /* extension name */
foo_functions, /* extension function list */
NULL, /* extension-wide startup function */
NULL, /* extension-wide shutdown function */
PHP_RINIT(foo), /* per-request startup function */
PHP_RSHUTDOWN(foo), /* per-request shutdown function */
PHP_MINFO(foo), /* information function */
STANDARD_MODULE_PROPERTIES
};
Here's how it should look if you want your code to build with PHP
4.1.0 and up:
zend_module_entry foo_module_entry = {
#if ZEND_MODULE_API_NO >= 20010901
STANDARD_MODULE_HEADER,
#endif
"foo", /* extension name */
foo_functions, /* extension function list */
NULL, /* extension-wide startup function */
NULL, /* extension-wide shutdown function */
PHP_RINIT(foo), /* per-request startup function */
PHP_RSHUTDOWN(foo), /* per-request shutdown function */
PHP_MINFO(foo), /* information function */
#if ZEND_MODULE_API_NO >= 20010901
FOO_VERSION, /* extension version number (string) */
#endif
STANDARD_MODULE_PROPERTIES
};
If you don't care about source compatibility with earlier PHP releases
than 4.1.0, you can drop the #if/#endif lines.
-189
View File
@@ -1,189 +0,0 @@
WHAT IT IS
It's a tool for automatically creating the basic framework for a PHP module
and writing C code handling arguments passed to your functions from a simple
configuration file. See an example at the end of this file.
HOW TO USE IT
Very simple. First, cd do directory ext/ in PHP 4 sources. If you just need
the basic framework and will be writing all the code in your functions
yourself, you can now do
./ext_skel --extname=module_name
and everything you need is placed in directory module_name.
[ Note that GNU awk is likely required for this script to work. Debian
systems seem to default to using mawk, so you may need to change the
#! line in skeleton/create_stubs to use gawk explicitly. ]
If you don't need to test the existence of any external header files,
libraries or functions in them, the module is already almost ready to be
compiled in PHP. Just remove 3 comments in your_module_name/config.m4,
cd back up to PHP sources top directory, and do
./buildconf; ./configure --enable-module_name; make
But if you already have planned the overall scheme of your module, what
functions it will contain, their return types and the arguments they take
(a very good idea) and don't want to bother yourself with creating function
definitions and handling arguments passed yourself, it's time to create a
function definitions file, which you will give as an argument to ext_skel
with option
--proto=filename.
FORMAT OF FUNCTION DEFINITIONS FILE
All the definitions must be on one line. In it's simplest form, it's just
the function name, ie.
my_function
but then you'll be left with an almost empty function body without any
argument handling.
Arguments are given in parenthesis after the function name, and are of
the form 'argument_type argument_name'. Arguments are separated from each
other with a comma and optional space. Argument_type can be one of int,
bool, double, float, string, array, object or mixed.
An optional argument is separated from the previous by an optional space,
then '[' and of course comma and optional space, like all the other
arguments. You should close a row of optional arguments with same amount of
']'s as there where '['s. Currently, it does not harm if you forget to do it
or there is a wrong amount of ']'s, but this may change in the future.
An additional short description may be added after the parameters.
If present it will be filled into the 'proto' header comments in the stubs
code and the <refpurpose> tag in the XML documentation.
An example:
my_function(int arg1, int arg2 [, int arg3 [, int arg4]]) this is my 1st
Arguments arg3 and arg4 are optional.
If possible, the function definition should also contain it's return type
in front of the definition. It's not actually used for any C code generating
purposes but PHP in-source documentation instead, and as such, very useful.
It can be any of int, double, string, bool, array, object, resource, mixed
or void.
The file must contain nothing else but function definitions, no comments or
empty lines.
OTHER OPTIONS
--no-help
By default, ext_skel creates both comments in the source code and a test
function to help first time module writers to get started and testing
configuring and compiling their module. This option turns off all such things
which may just annoy experienced PHP module coders. Especially useful with
--stubs=file
which will leave out also all module specific stuff and write just function
stubs with function value declarations and passed argument handling, and
function entries and definitions at the end of the file, for copying and
pasting into an already existing module.
--assign-params
--string-lens
By default, function proto 'void foo(string bar)' creates the following:
...
zval **bar;
... (zend_get_parameters_ex() called in the middle...)
convert_to_string_ex(bar);
Specifying both of these options changes the generated code to:
...
zval **bar_arg;
int bar_len;
char *bar = NULL;
... (zend_get_parameters_ex() called in the middle...)
convert_to_string_ex(bar_arg);
bar = Z_STRVAL_PP(bar_arg);
bar_len = Z_STRLEN_PP(bar_arg);
You shouldn't have to ask what happens if you leave --string-lens out. If you
have to, it's questionable whether you should be reading this document.
--with-xml[=file]
Creates the basics for phpdoc .xml file.
--full-xml
Not implemented yet. When or if there will ever be created a framework for
self-contained extensions to use phpdoc system for their documentation, this
option enables it on the created xml file.
CURRENT LIMITATIONS, BUGS AND OTHER ODDITIES
Only arguments of types int, bool, double, float, string and array are
handled. For other types you must write the code yourself. And for type
mixed, it wouldn't even be possible to write anything, because only you
know what to expect.
It can't handle correctly, and probably never will, variable list of
of arguments. (void foo(int bar [, ...])
Don't trust the generated code too much. It tries to be useful in most of
the situations you might encounter, but automatic code generation will never
beat a programmer who knows the real situation at hand. ext_skel is generally
best suited for quickly generating a wrapper for c-library functions you
might want to have available in PHP too.
This program doesn't have a --help option. It has --no-help instead.
EXAMPLE
The following _one_ line
bool my_drawtext(resource image, string text, resource font, int x, int y [, int color])
will create this function definition for you (note that there are a few
question marks to be replaced by you, and you must of course add your own
value definitions too):
/* {{{ proto bool my_drawtext(resource image, string text, resource font, int x, int y[, int color])
*/
PHP_FUNCTION(my_drawtext)
{
zval **image, **text, **font, **x, **y, **color;
int argc;
int image_id = -1;
int font_id = -1;
argc = ZEND_NUM_ARGS();
if (argc < 5 || argc > 6 || zend_get_parameters_ex(argc, &image, &text, &font, &x, &y, &color) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(???, ???, image, image_id, "???", ???_rsrc_id);
ZEND_FETCH_RESOURCE(???, ???, font, font_id, "???", ???_rsrc_id);
switch (argc) {
case 6:
convert_to_long_ex(color);
/* Fall-through. */
case 5:
convert_to_long_ex(y);
convert_to_long_ex(x);
/* font: fetching resources already handled. */
convert_to_string_ex(text);
/* image: fetching resources already handled. */
break;
default:
WRONG_PARAM_COUNT;
}
php_error(E_WARNING, "my_drawtext: not yet implemented");
}
/* }}} */
-127
View File
@@ -1,127 +0,0 @@
New parameter parsing functions
===============================
It should be easier to parse input parameters to an extension function.
Hence, borrowing from Python's example, there are now a set of functions
that given the string of type specifiers, can parse the input parameters
and store the results in the user specified variables. This avoids most
of the IS_* checks and convert_to_* conversions. The functions also
check for the appropriate number of parameters, and try to output
meaningful error messages.
Prototypes
----------
/* Implemented. */
int zend_parse_parameters(int num_args TSRMLS_DC, char *type_spec, ...);
int zend_parse_parameters_ex(int flags, int num_args TSRMLS_DC, char *type_spec, ...);
The zend_parse_parameters() function takes the number of parameters
passed to the extension function, the type specifier string, and the
list of pointers to variables to store the results in. The _ex() version
also takes 'flags' argument -- current only ZEND_PARSE_PARAMS_QUIET can
be used as 'flags' to specify that the function should operate quietly
and not output any error messages.
Both functions return SUCCESS or FAILURE depending on the result.
The auto-conversions are performed as necessary. Arrays, objects, and
resources cannot be autoconverted.
Type specifiers
---------------
l - long
d - double
s - string (with possible null bytes) and its length
b - boolean, stored in zend_bool
r - resource (stored in zval)
a - array
o - object (of any type)
O - object (of specific type, specified by class entry)
z - the actual zval
The following characters also have a meaning in the specifier string:
| - indicates that the remaining parameters are optional, they
should be initialized to default values by the extension since they
will not be touched by the parsing function if they are not
passed to it.
/ - use SEPARATE_ZVAL_IF_NOT_REF() on the parameter it follows
! - the parameter it follows can be of specified type or NULL (only applies
to 'a', 'o', 'O', 'r', and 'z'). If NULL is passed, the results
pointer is set to NULL as well.
Examples
--------
/* Gets a long, a string and its length, and a zval */
long l;
char *s;
int s_len;
zval *param;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsz",
&l, &s, &s_len, &param) == FAILURE) {
return;
}
/* Gets an object of class specified by my_ce, and an optional double. */
zval *obj;
double d = 0.5;
zend_class_entry my_ce;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O|d",
&obj, my_ce, &d) == FAILURE) {
return;
}
/* Gets an object or null, and an array.
If null is passed for object, obj will be set to NULL. */
zval *obj;
zval *arr;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o!a",
&obj, &arr) == FAILURE) {
return;
}
/* Gets a separated array which can also be null. */
zval *arr;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a/!",
&arr) == FAILURE) {
return;
}
/* Get only the first three parameters (useful for varargs functions). */
zval *z;
zend_bool b;
zval *r;
if (zend_parse_parameters(3 TSRMLS_CC, "zbr!",
&z, &b, &r) == FAILURE) {
return;
}
/* Get either a set of 3 longs or a string. */
long l1, l2, l3;
char *s;
/*
* The function expects a pointer to a integer in this case, not a long
* or any other type. If you specify a type which is larger
* than a 'int', the upper bits might not be initialized
* properly, leading to random crashes on platforms like
* Tru64 or Linux/Alpha.
*/
int length;
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC,
"lll", &l1, &l2, &l3) == SUCCESS) {
/* manipulate longs */
} else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC,
"s", &s, &length) == SUCCESS) {
/* manipulate string */
} else {
/* output error */
return;
}
-57
View File
@@ -1,57 +0,0 @@
QNX4 Installation Notes
-----------------------
NOTE: General installation instructions are in the INSTALL file
1. To compile and test PHP3 you have to grab, compile and install:
- GNU dbm library or another db library;
- GNU bison (1.25 or later; 1.25 tested);
- GNU flex (any version supporting -o and -P options; 2.5.4 tested);
- GNU diffutils (any version supporting -w option; 2.7 tested);
2. To use CVS version you may need also:
- GNU CVS (1.9 tested);
- GNU autoconf (2.12 tested);
- GNU m4 (1.3 or later preferable; 1.4 tested);
3. To run configure define -lunix in command line:
LDFLAGS=-lunix ./configure
4. To use Sybase SQL Anywhere define ODBC_QNX and CUSTOM_ODBC_LIBS in
command line and run configure with --with-custom-odbc:
CFLAGS=-DODBC_QNX LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure --with-custom-odbc=/usr/lib/sqlany50
If you have SQL Anywhere version 5.5.00, then you have to add
CFLAGS=-DSQLANY_BUG
to workaround its SQLFreeEnv() bug. Other versions has not been tested,
so try without this flag first.
5. To build the Apache module, you may have to hardcode an include path for
alloc.h in your Apache base directory:
- APACHE_DIRECTORY/src/httpd.h:
change #include "alloc.h"
to #include "APACHE_DIRECTORY/src/alloc.h"
Unless you want to use system regex library, you have to hardcode also
a path to regex.h:
- APACHE_DIRECTORY/src/conf.h:
change #include <regex.h>
to #include "APACHE_DIRECTORY/src/regex/regex.h"
I don't know so far why this required for QNX, may be it is Watcom
compiler problem.
If you building Apache module with SQL Anywhere support, you'll get
symbol conflict with BOOL. It is defined in Apache (httpd.h) and in
SQL Anywhere (odbc.h). This has nothing to do with PHP, so you have to
fix it yourself someway.
6. With above precautions, it should compile as is and pass regression
tests completely:
make
make check
make install
Don't bother me unless you really sure you made that all but it
still doesn't work.
June 28, 1998
Igor Kovalenko -- owl@infomarket.ru
-154
View File
@@ -1,154 +0,0 @@
$Id$
=============================================================================
HOW TO CREATE A SELF-CONTAINED PHP EXTENSION
A self-contained extension can be distributed independently of
the PHP source. To create such an extension, three things are
required:
- Configuration file (config.m4)
- Source code for your module
We will describe now how to create these and how to put things
together.
PREPARING YOUR SYSTEM
While the result will run on any system, a developer's setup needs these
tools:
GNU autoconf
GNU automake
GNU libtool
GNU m4
All of these are available from
ftp://ftp.gnu.org/pub/gnu/
CONVERTING AN EXISTING EXTENSION
Just to show you how easy it is to create a self-contained
extension, we will convert an embedded extension into a
self-contained one. Install PHP and execute the following
commands.
$ mkdir /tmp/newext
$ cd /tmp/newext
You now have an empty directory. We will copy the files from
the mysql extension:
$ cp -rp php-4.0.X/ext/mysql/* .
It is time to finish the module. Run:
$ phpize
You can now ship the contents of the directory - the extension
can live completely on its own.
The user instructions boil down to
$ ./configure \
[--with-php-config=/path/to/php-config] \
[--with-mysql=MYSQL-DIR]
$ make install
The MySQL module will either use the embedded MySQL client
library or the MySQL installation in MYSQL-DIR.
DEFINING THE NEW EXTENSION
Our demo extension is called "foobar".
It consists of two source files "foo.c" and "bar.c"
(and any arbitrary amount of header files, but that is not
important here).
The demo extension does not reference any external
libraries (that is important, because the user does not
need to specify anything).
LTLIBRARY_SOURCES specifies the names of the sources files. You can
name an arbitrary number of source files here.
CREATING THE M4 CONFIGURATION FILE
The m4 configuration can perform additional checks. For a
self-contained extension, you do not need more than a few
macro calls.
------------------------------------------------------------------------------
PHP_ARG_ENABLE(foobar,whether to enable foobar,
[ --enable-foobar Enable foobar])
if test "$PHP_FOOBAR" != "no"; then
PHP_NEW_EXTENSION(foobar, foo.c bar.c, $ext_shared)
fi
------------------------------------------------------------------------------
PHP_ARG_ENABLE will automatically set the correct variables, so
that the extension will be enabled by PHP_NEW_EXTENSION in shared mode.
The first argument of PHP_NEW_EXTENSION describes the name of the
extension. The second names the source-code files. The third passes
$ext_shared which is set by PHP_ARG_ENABLE/WITH to PHP_NEW_EXTENSION.
Please use always PHP_ARG_ENABLE or PHP_ARG_WITH. Even if you do not
plan to distribute your module with PHP, these facilities allow you
to integrate your module easily into the main PHP module framework.
CREATING SOURCE FILES
ext_skel can be of great help when creating the common code for all modules
in PHP for you and also writing basic function definitions and C code for
handling arguments passed to your functions. See README.EXT_SKEL for further
information.
As for the rest, you are currently alone here. There are a lot of existing
modules, use a simple module as a starting point and add your own code.
CREATING THE SELF-CONTAINED EXTENSION
Put config.m4 and the source files into one directory. Afterwards,
run phpize (this is installed during make install by PHP 4.0).
For example, if you configured PHP with --prefix=/php, you would run
$ /php/bin/phpize
This will automatically copy the necessary build files and create
configure from your config.m4.
And that's it. You now have a self-contained extension.
INSTALLING A SELF-CONTAINED EXTENSION
An extension can be installed by running:
$ ./configure \
[--with-php-config=/path/to/php-config]
$ make install
ADDING SHARED MODULE SUPPORT TO A MODULE
In order to be useful, a self-contained extension must be loadable
as a shared module. I will explain now how you can add shared module
support to an existing module called foo.
1. In config.m4, use PHP_ARG_WITH/PHP_ARG_ENABLE. Then you will
automatically be able to use --with-foo=shared[,..] or
--enable-foo=shared[,..].
2. In config.m4, use PHP_NEW_EXTENSION(foo,.., $ext_shared) to enable
building the extension.
3. Add the following lines to your C source file:
#ifdef COMPILE_DL_FOO
ZEND_GET_MODULE(foo)
#endif
-367
View File
@@ -1,367 +0,0 @@
An Overview of the PHP Streams abstraction
==========================================
$Id$
Please send comments to: Wez Furlong <wez@thebrainroom.com>
Why Streams?
============
You may have noticed a shed-load of issock parameters flying around the PHP
code; we don't want them - they are ugly and cumbersome and force you to
special case sockets and files everytime you need to work with a "user-level"
PHP file pointer.
Streams take care of that and present the PHP extension coder with an ANSI
stdio-alike API that looks much nicer and can be extended to support non file
based data sources.
Using Streams
=============
Streams use a php_stream* parameter just as ANSI stdio (fread etc.) use a
FILE* parameter.
The main functions are:
PHPAPI size_t php_stream_read(php_stream * stream, char * buf, size_t count);
PHPAPI size_t php_stream_write(php_stream * stream, const char * buf, size_t
count);
PHPAPI int php_stream_eof(php_stream * stream);
PHPAPI int php_stream_getc(php_stream * stream);
PHPAPI char *php_stream_gets(php_stream * stream, char *buf, size_t maxlen);
PHPAPI int php_stream_close(php_stream * stream);
PHPAPI int php_stream_flush(php_stream * stream);
PHPAPI int php_stream_seek(php_stream * stream, off_t offset, int whence);
PHPAPI off_t php_stream_tell(php_stream * stream);
These (should) behave in the same way as the ANSI stdio functions with similar
names: fread, fwrite, feof, fgetc, fgets, fclose, fflush, fseek, ftell.
Opening Streams
===============
In most cases, you should use this API:
PHPAPI php_stream *php_stream_open_wrapper(char *path, char *mode,
int options, char **opened_path TSRMLS_DC);
Where:
path is the file or resource to open.
mode is the stdio compatible mode eg: "wb", "rb" etc.
options is a combination of the following values:
IGNORE_PATH (default) - don't use include path to search for the file
USE_PATH - use include path to search for the file
IGNORE_URL - do not use plugin wrappers
REPORT_ERRORS - show errors in a standard format if something
goes wrong.
STREAM_MUST_SEEK - If you really need to be able to seek the stream
and don't need to be able to write to the original
file/URL, use this option to arrange for the stream
to be copied (if needed) into a stream that can
be seek()ed.
opened_path is used to return the path of the actual file opened,
but if you used STREAM_MUST_SEEK, may not be valid. You are
responsible for efree()ing opened_path. opened_path may be (and usually
is) NULL.
If you need to open a specific stream, or convert standard resources into
streams there are a range of functions to do this defined in php_streams.h.
A brief list of the most commonly used functions:
PHPAPI php_stream *php_stream_fopen_from_file(FILE *file, const char *mode);
Convert a FILE * into a stream.
PHPAPI php_stream *php_stream_fopen_tmpfile(void);
Open a FILE * with tmpfile() and convert into a stream.
PHPAPI php_stream *php_stream_fopen_temporary_file(const char *dir,
const char *pfx, char **opened_path TSRMLS_DC);
Generate a temporary file name and open it.
There are some network enabled relatives in php_network.h:
PHPAPI php_stream *php_stream_sock_open_from_socket(int socket, int persistent);
Convert a socket into a stream.
PHPAPI php_stream *php_stream_sock_open_host(const char *host, unsigned short port,
int socktype, int timeout, int persistent);
Open a connection to a host and return a stream.
PHPAPI php_stream *php_stream_sock_open_unix(const char *path, int persistent,
struct timeval *timeout);
Open a UNIX domain socket.
Stream Utilities
================
If you need to copy some data from one stream to another, you will be please
to know that the streams API provides a standard way to do this:
PHPAPI size_t php_stream_copy_to_stream(php_stream *src,
php_stream *dest, size_t maxlen);
If you want to copy all remaining data from the src stream, pass
PHP_STREAM_COPY_ALL as the maxlen parameter, otherwise maxlen indicates the
number of bytes to copy.
This function will try to use mmap where available to make the copying more
efficient.
If you want to read the contents of a stream into an allocated memory buffer,
you should use:
PHPAPI size_t php_stream_copy_to_mem(php_stream *src, char **buf,
size_t maxlen, int persistent);
This function will set buf to the address of the buffer that it allocated,
which will be maxlen bytes in length, or will be the entire length of the
data remaining on the stream if you set maxlen to PHP_STREAM_COPY_ALL.
The buffer is allocated using pemalloc(); you need to call pefree() to
release the memory when you are done.
As with copy_to_stream, this function will try use mmap where it can.
If you have an existing stream and need to be able to seek() it, you
can use this function to copy the contents into a new stream that can
be seek()ed:
PHPAPI int php_stream_make_seekable(php_stream *origstream, php_stream **newstream);
It returns one of the following values:
#define PHP_STREAM_UNCHANGED 0 /* orig stream was seekable anyway */
#define PHP_STREAM_RELEASED 1 /* newstream should be used; origstream is no longer valid */
#define PHP_STREAM_FAILED 2 /* an error occurred while attempting conversion */
#define PHP_STREAM_CRITICAL 3 /* an error occurred; origstream is in an unknown state; you should close origstream */
make_seekable will always set newstream to be the stream that is valid
if the function succeeds.
When you have finished, remember to close the stream.
NOTE: If you only need to seek forwards, there is no need to call this
function, as the php_stream_seek can emulate forward seeking when the
whence parameter is SEEK_CUR.
NOTE: Writing to the stream may not affect the original source, so it
only makes sense to use this for read-only use.
NOTE: If the origstream is network based, this function will block
until the whole contents have been downloaded.
NOTE: Never call this function with an origstream that is referenced
as a resource! It will close the origstream on success, and this
can lead to a crash when the resource is later used/released.
NOTE: If you are opening a stream and need it to be seekable, use the
STREAM_MUST_SEEK option to php_stream_open_wrapper();
Casting Streams
===============
What if your extension needs to access the FILE* of a user level file pointer?
You need to "cast" the stream into a FILE*, and this is how you do it:
FILE * fp;
php_stream * stream; /* already opened */
if (php_stream_cast(stream, PHP_STREAM_AS_STDIO, (void*)&fp, REPORT_ERRORS) == FAILURE) {
RETURN_FALSE;
}
The prototype is:
PHPAPI int php_stream_cast(php_stream * stream, int castas, void ** ret, int
show_err);
The show_err parameter, if non-zero, will cause the function to display an
appropriate error message of type E_WARNING if the cast fails.
castas can be one of the following values:
PHP_STREAM_AS_STDIO - a stdio FILE*
PHP_STREAM_AS_FD - a generic file descriptor
PHP_STREAM_AS_SOCKETD - a socket descriptor
If you ask a socket stream for a FILE*, the abstraction will use fdopen to
create it for you. Be warned that doing so may cause buffered data to be lost
if you mix ANSI stdio calls on the FILE* with php stream calls on the stream.
If your system has the fopencookie function, php streams can synthesize a
FILE* on top of any stream, which is useful for SSL sockets, memory based
streams, data base streams etc. etc.
In situations where this is not desireable, you should query the stream
to see if it naturally supports FILE *. You can use this code snippet
for this purpose:
if (php_stream_is(stream, PHP_STREAM_IS_STDIO)) {
/* can safely cast to FILE* with no adverse side effects */
}
You can use:
PHPAPI int php_stream_can_cast(php_stream * stream, int castas)
to find out if a stream can be cast, without actually performing the cast, so
to check if a stream is a socket you might use:
if (php_stream_can_cast(stream, PHP_STREAM_AS_SOCKETD) == SUCCESS) {
/* it can be a socket */
}
Please note the difference between php_stream_is and php_stream_can_cast;
stream_is tells you if the stream is a particular type of stream, whereas
can_cast tells you if the stream can be forced into the form you request.
The former doesn't change anything, while the later *might* change some
state in the stream.
Stream Internals
================
There are two main structures associated with a stream - the php_stream
itself, which holds some state information (and possibly a buffer) and a
php_stream_ops structure, which holds the "virtual method table" for the
underlying implementation.
The php_streams ops struct consists of pointers to methods that implement
read, write, close, flush, seek, gets and cast operations. Of these, an
implementation need only implement write, read, close and flush. The gets
method is intended to be used for streams if there is an underlying method
that can efficiently behave as fgets. The ops struct also contains a label
for the implementation that will be used when printing error messages - the
stdio implementation has a label of "STDIO" for example.
The idea is that a stream implementation defines a php_stream_ops struct, and
associates it with a php_stream using php_stream_alloc.
As an example, the php_stream_fopen() function looks like this:
PHPAPI php_stream * php_stream_fopen(const char * filename, const char * mode)
{
FILE * fp = fopen(filename, mode);
php_stream * ret;
if (fp) {
ret = php_stream_alloc(&php_stream_stdio_ops, fp, 0, 0, mode);
if (ret)
return ret;
fclose(fp);
}
return NULL;
}
php_stream_stdio_ops is a php_stream_ops structure that can be used to handle
FILE* based streams.
A socket based stream would use code similar to that above to create a stream
to be passed back to fopen_wrapper (or it's yet to be implemented successor).
The prototype for php_stream_alloc is this:
PHPAPI php_stream * php_stream_alloc(php_stream_ops * ops, void * abstract,
size_t bufsize, int persistent, const char * mode)
ops is a pointer to the implementation,
abstract holds implementation specific data that is relevant to this instance
of the stream,
bufsize is the size of the buffer to use - if 0, then buffering at the stream
level will be disabled (recommended for underlying sources that implement
their own buffering - such a FILE*),
persistent controls how the memory is to be allocated - persistently so that
it lasts across requests, or non-persistently so that it is freed at the end
of a request (it uses pemalloc),
mode is the stdio-like mode of operation - php streams places no real meaning
in the mode parameter, except that it checks for a 'w' in the string when
attempting to write (this may change).
The mode parameter is passed on to fdopen/fopencookie when the stream is cast
into a FILE*, so it should be compatible with the mode parameter of fopen().
Writing your own stream implementation
======================================
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
RULE #1: when writing your own streams: make sure you have configured PHP with
--enable-debug.
I've taken some great pains to hook into the zend memory manager to help track
down allocation problems. It will also help you spot incorrect use of the
STREAMS_DC, STREAMS_CC and the semi-private STREAMS_REL_CC macros for function
definitions.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
RULE #2: Please use the stdio stream as a reference; it will help you
understand the semantics of the stream operations, and it will always
be more up to date than these docs :-)
First, you need to figure out what data you need to associate with the
php_stream. For example, you might need a pointer to some memory for memory
based streams, or if you were making a stream to read data from an RDBMS like
mysql, you might want to store the connection and rowset handles.
The stream has a field called abstract that you can use to hold this data.
If you need to store more than a single field of data, define a structure to
hold it, allocate it (use pemalloc with the persistent flag set
appropriately), and use the abstract pointer to refer to it.
For structured state you might have this:
struct my_state {
MYSQL conn;
MYSQL_RES * result;
};
struct my_state * state = pemalloc(sizeof(struct my_state), persistent);
/* initialize the connection, and run a query, using the fields in state to
* hold the results */
state->result = mysql_use_result(&state->conn);
/* now allocate the stream itself */
stream = php_stream_alloc(&my_ops, state, 0, persistent, "r");
/* now stream->abstract == state */
Once you have that part figured out, you can write your implementation and
define the your own php_stream_ops struct (we called it my_ops in the above
example).
For example, for reading from this wierd mysql stream:
static size_t php_mysqlop_read(php_stream * stream, char * buf, size_t count)
{
struct my_state * state = (struct my_state*)stream->abstract;
if (buf == NULL && count == 0) {
/* in this special case, php_streams is asking if we have reached the
* end of file */
if (... at end of file ...)
return EOF;
else
return 0;
}
/* pull out some data from the stream and put it in buf */
... mysql_fetch_row(state->result) ...
/* we could do something strange, like format the data as XML here,
and place that in the buf, but that brings in some complexities,
such as coping with a buffer size too small to hold the data,
so I won't even go in to how to do that here */
}
Implement the other operations - remember that write, read, close and flush
are all mandatory. The rest are optional. Declare your stream ops struct:
php_stream_ops my_ops = {
php_mysqlop_write, php_mysqlop_read, php_mysqlop_close,
php_mysqlop_flush, NULL, NULL, NULL,
"Strange mySQL example"
}
Thats it!
Take a look at the STDIO implementation in streams.c for more information
about how these operations work.
The main thing to remember is that in your close operation you need to release
and free the resources you allocated for the abstract field. In the case of
the example above, you need to use mysql_free_result on the rowset, close the
connection and then use pefree to dispose of the struct you allocated.
You may read the stream->persistent field to determine if your struct was
allocated in persistent mode or not.
vim:tw=78:et
-121
View File
@@ -1,121 +0,0 @@
Submitting Patch for PHP
========================
This document describes how to submit a patch for PHP. Since you are
reading this document, you are willing to submit a patch for PHP.
Please keep reading! Submitting a patch for PHP is easy. The hard
part is making it acceptable for inclusion into our repository. :-)
How to create patch?
--------------------
We are working with CVS. You need to get CVS source to create a patch
that we accept. Visit http://www.php.net/anoncvs.php to get CVS
source. You can check out older versions, but make sure you get
the default branch (i.e. Do not use -r option when you check out the
CVS source)
Read CODING_STANDARDS file before you start working.
Now you are ready to create a patch. Modify source to fix a bug in PHP or
add a new feature to PHP. After you finished editing, please test your
patch. Read README.TESTING for testing.
After you finish testing your patch, take diff file using
"cvs diff > your.patch" command.
Read README.TESTING for submitting a test script for your patch. This is
not strictly required, but it is preferred to submit a test script along
with your patch. Making new test script is very easy. It also helps us
to understand what you have been fixed or added to PHP.
Tips for creating patch
-----------------------
If you would like to fix multiple bugs. It is easier for us if you
could create 1 patch for 1 bug, but this is not strictly required.
Note though that you might get little response, if your patch is
too hard to review.
If you would like change/add many lines, it is better to ask module
maintainer and/or php-dev@lists.php.net, or pear-dev@lists.php.net if
you are patching PEAR. Official module maintainers can be found in
EXTENSIONS file in PHP source.
If you are new to CVS (Concurrent Versions System), visit
http://cvshome.org/ for details.
Recommended CVS client settings for creating patch file
------------------------------------------------------
Recommended ~/.cvsrc file setting is:
------
cvs -z3
update -d -P
checkout -P
diff -u
------
diff -u means:
-u Use the unified output format.
With this CVS setting, you don't have to worry about adding/deleting
newlines and spaces.
Check list for submitting patch
-------------------------------
- Did you run "make test" to check if your patch didn't break
other features?
- Did you compile PHP with --enable-debug and check php/webserver
error logs when you test your patch?
- Did you build PHP for multi-threaded web servers. (Optional)
- Did you create test script for "make test"? (Recommended)
- Did you check your patch is unified format and it does not
contain white space changes? (If you are not using recommended
cvs setting)
- Did you update CVS source before you take final patch?
- Did you read the patch again?
Where to send your patch?
-------------------------
If you are patching C source, send the patch to php-dev@lists.php.net.
If you are patching a module, you should also send the patch to the
maintainer. Official module maintainers are listed in EXTENSION file
in source.
If you are patching PEAR, send the patch to pear-dev@lists.php.net.
Please add the prefix "[PATCH]" to your email subject and make sure
to include the patch as a MIME attachment even if it is short.
Test scripts should be included in the same email.
Explain what has been fixed/added/changed by your patch.
Finally, add the bug Id(s) which can be closed by your patch, if any.
What happens after you submit your patch
--------------------------------------
If your patch is easy to review and has obviously no side-effects,
it might take up to a few hours until someone commits it.
Because this is a volunteer-driven effort, more complex patches will
require more patience on your side.
If you did not receive any feedback in a few days, please consider
resubmitting the description of your patch, along-side with
these questions:
- Is my patch too hard to review? Because of which factors?
- Should I split it up in multiple parts?
- Are there any unwanted whitespace changes?
What happens when your patch is applied?
----------------------------------------
Your name will be included together with your email address in the CVS
commit log. If your patch affects end-users, a brief description
and your name might be added to the NEWS file.
Thank you for submitting patch for PHP!
-175
View File
@@ -1,175 +0,0 @@
[IMPORTANT NOTICE]
------------------
Do _not_ ask to developers why some or all tests are failed under
your environment! Let us know if you find why it fails. Thank you.
[Testing Basics]
----------------
To execute test scripts, you must build PHP with some SAPI, then you
type "make test" to execute all or some test scripts saved under
"tests" directory under source root directory.
Usage:
make test
"make test" basically executes "run-tests.php" script
under source root. Therefore you can execute the script
as follows
./sapi/cli/php -c /path/to/php.ini/ run-tests.php [ext/some_extension_name]
[Which "php" executable "make test" look for]
---------------------------------------------
"make test" executes "run-tests.php" script with "php" binary. Some
test scripts such as session must be executed by CGI SAPI. Therefore,
you must build PHP with CGI SAPI to perform all tests.
If PHP is not build with CGI SAPI, "run-tests.php" script uses CLI
SAPI. Tests that may not executed by CLI SAPI will be skipped.
NOTE: PHP binary executing "run-tests.php" and php binary used for
executing test scripts may differ. If you use different PHP binary for
executing "run-tests.php" script, you may get errors.
[Which php.ini is used]
-----------------------
"make test" force to use php.ini-dist as default config file. If
you would like to test with other configuration file, user
"run-tests.php" script.
Example:
./sapi/cli/php -c /path/to/php.ini/ ext/standard
If you use php.ini other than php.ini-dist, you may see more failed
tests.
[Which test scripts are executed]
---------------------------------
"run-tests.php" ("make test") executes all test scripts by default
by looking all directory named "tests". If there are files have "phpt"
extension, "run-tests.php" takes test php code from the file and
executes it.
Tester can easily executes tests selectively with as follows.
Example:
./sapi/cli/php -c /path/to/php.ini/ run-tests.php ext/mbstring
[Test results]
--------------
Test results are printed to standard output. If there is a failed test,
"run-tests.php" script saves the result, expected result and code
executed to the test script directory. For example, if
ext/myext/tests/myext.phpt is failed to pass, following files are
created:
ext/myext/tests/myext.out - output from test script
ext/myext/tests/myext.exp - expected output
ext/myext/tests/myext.php - test script executed
Tester can verify these files, if failed test is actually a bug
or not.
[Creating new test files]
-------------------------
Writing test file is very easy if you are used to PHP. Test file
has following format. Here is a actual test file from iconv module.
===== ext/iconv/002.phpt =======
--TEST--
UCS4BE to ASCII
--SKIPIF--
<?php include('skipif.inc'); ?>
--POST--
--GET--
--FILE--
<?php include('002.inc'); ?>
--EXPECT--
&#97;&#98;&#99;&#100;
abcd
===== end of ext/iconv/002.phpt =======
"--TEST--" is title of the test.
"--SKIPIF--" is condition when to skip this test.
"--POST--" is POST variable passed to test script.
"--GET--" is GET variable passed to test script.
"--FILE--" is the test script.
"--EXPECT--" is the expected output from the test script.
ext/iconv/002.phpt uses 2 files. "skipif.inc" is used to skip
test when test cannot be performed such as iconv module is not
compiled or loaded.
==== ext/iconv/skipif.inc ====
<?php
// This script prints "skip" if condition does not meet.
if (!extension_loaded("iconv") && ini_get("enable_dl")) {
$dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so";
@dl("iconv$dlext");
}
if (!extension_loaded("iconv")) {
die("skip\n");
}
?>
==== end of ext/iconv/skipif.inc ====
ext/inconv/002.inc is the test script. "run-tests.php" script
executes test script with CGI executable.
==== ext/iconv/002.inc ===
<?php
/*
Expected output:
&#97;&#98;&#99;&#100;
abcd
*/
$s = unpack("V*", iconv("ascii","UCS-4LE", "abcd"));
foreach($s as $c) { print "&#$c;"; } print "\n";
$s = pack("NNNN", 97, 98, 99, 100);
$q = iconv("UCS-4BE", "ascii", $s);
print $q; print "\n";
?>
=== end of ext/iconv/002.inc ===
Test script and skipif code may be directly write into *.phpt.
However, it is recommended to use other files for ease of writing
test script. For instance, you can execute test script under
ext/iconv as follows:
./sapi/cli/php -c /path/to/php.ini/ ext/iconv
[How to help us]
----------------
If you find bug in PHP, you can submit bug report AND test script
for us. You don't have to write complete script, just give us test
script with following format. Please test the script and make sure
you write the correct ACTUAL OUTPUT and EXPECTED OUTPUT before you
submit.
<?php
/*
Bug #12345
substr() bug. Do not return expected string.
ACTUAL OUTPUT
XYXA
EXPECTED OUTPUT
ABCD
*/
$str = "XYZABCD";
echo substr($str,3,7);
?>
-123
View File
@@ -1,123 +0,0 @@
PHP Build System V5 Overview
- supports Makefile.ins during transition phase
- not-really-portable Makefile includes have been eliminated
- supports seperate build directories without VPATH by using
explicit rules only
- does not waste disk-space/CPU-time for building temporary libraries
=> especially noticeable on slower systems
- slow recursive make replaced with one global Makefile
- eases integration of proper dependencies
- adds PHP_DEFINE(what[, value]) which creates a single include-file
per what. This will allow more fine-grained dependencies.
- abandoning the "one library per directory" concept
- improved integration of the CLI
- several new targets
build-modules: builds and copies dynamic modules into modules/
install-cli: installs the CLI only, so that the install-sapi
target does only what its name says
- finally abandoned automake (still requires aclocal at this time)
- changed some configure-time constructs to run at buildconf-time
- upgraded shtool to 1.5.4
- removed $(moduledir) (use EXTENSION_DIR)
The Reason For a New System
It became more and more apparent that there is a severe need
for addressing the portability concerns and improving the chance
that your build is correct (how often have you been told to
"make clean"? When this is done, you won't need to anymore).
If You Build PHP on a Unix System
You, as a user of PHP, will notice no changes. Of course, the build
system will be faster, look better and work smarter.
If You Are Developing PHP
Extension developers:
Makefile.ins are abandoned. The files which are to be compiled
are specified in the config.m4 now using the following macro:
PHP_NEW_EXTENSION(foo, foo.c bar.c baz.cpp, $ext_shared)
E.g. this enables the extension foo which consists of three source-code
modules, two in C and one in C++. And dependending on the user's
wishes, the extension will even be built as a dynamic module.
The full syntax:
PHP_NEW_EXTENSION(extname, sources [, shared [,sapi_class[, extra-cflags]]])
Please have a look at acinclude.m4 for the gory details and meanings
of the other parameters.
And that's basically it for the extension side.
If you previously built sub-libraries for this module, add
the source-code files here as well. If you need to specify
separate include directories, do it this way:
PHP_NEW_EXTENSION(foo, foo.c mylib/bar.c mylib/gregor.c,,,-I@ext_srcdir@/lib)
E.g. this builds the three files which are located relative to the
extension source directory and compiles all three files with the
special include directive (@ext_srcdir@ is automatically replaced).
Now, you need to tell the build system that you want to build files
in a directory called $ext_builddir/lib:
PHP_ADD_BUILD_DIR($ext_builddir/lib)
Make sure to call this after PHP_NEW_EXTENSION, because $ext_builddir
is only set by the latter.
If you have a complex extension, you might to need add special
Make rules. You can do this by calling PHP_ADD_MAKEFILE_FRAGMENT
in your config.m4 after PHP_NEW_EXTENSION.
This will read a file in the source-dir of your extension called
Makefile.frag. In this file, $(builddir) and $(srcdir) will be
replaced by the values which are correct for your extension
and which are again determined by the PHP_NEW_EXTENSION macro.
Make sure to prefix *all* relative paths correctly with either
$(builddir) or $(srcdir). Because the build system does not
change the working directory anymore, we must use either
absolute paths or relative ones to the top build-directory.
Correct prefixing ensures that.
SAPI developers:
Instead of using PHP_SAPI=foo/PHP_BUILD_XYZ, you will need to type
PHP_SELECT_SAPI(name, type, sources.c)
I.e. specify the source-code files as above and also pass the
information regarding how PHP is supposed to be built (shared
module, program, etc).
For example for APXS:
PHP_SELECT_SAPI(apache, shared, sapi_apache.c mod_php4.c php_apache.c)
General info
The foundation for the new system is the flexible handling of
sources and their contexts. With the help of macros you
can define special flags for each source-file, where it is
located, in which target context it can work, etc.
Have a look at the well documented macros
PHP_ADD_SOURCES(_X) in acinclude.m4.
-126
View File
@@ -1,126 +0,0 @@
Using PHP4 with the Zeus Web Server
-----------------------------------
Zeus fully supports running PHP in combination with our
webserver. There are three different interfaces that can be used to
enable PHP:
* CGI
* ISAPI
* FastCGI
Of the three, we recommend using FastCGI, which has been tested and
benchmarked as providing the best performance and reliability.
Full details of how to install PHP are available from our
website, at:
http://support.zeus.com/products/php.html
If you have any problems, please check the support site for more
up-to-date information and advice.
Quick guide to installing FastCGI with Zeus
-------------------------------------------
Step 1 - obtain and install FastCGI development kit.
Grab the package from:
http://www.fastcgi.com/dist/devkit_2.2.0.tar.gz
Extract the package and follow the instructions:
./configure
make
make export
(run the last as root)
This will install to /usr/local/lib/libfcgi.a
and /usr/local/include/*fcgi*
Step 2 - Compile PHP as FastCGI.
Compile as follows:
./configure --with-fastcgi
make
Note that PHP has many options to the configure script -
e.g. --with-mysql. You will probably want to select your usual options
before compiling; the above is just a bare minimum, for illustration.
After compilation finishes, you will be left with an executable
program called 'php'. Copy this into your document root, under a
dedicated FastCGI directory (e.g. $DOCROOT/fcgi-bin/php)
Step 3 - configure Zeus
Four stages:
- enable FastCGI
- configure FastCGI
- setup alias for FastCGI
- setup alias for PHP
1) Using the admin server, go to the 'module configuration' page for
your virtual server, and ensure that 'fastcgi' is enabled (select the
tickbox to the left).
2) While we can run FastCGI's locally, there are known problems with
some OS's (specifically, the communication between web server and
FastCGI happens over a unix domain socket, and some OS's have trouble
sustaining high connection rates over these sockets). So instead, we
are going to set up the PHP FastCGI to run 'remotely' over localhost
(this uses TCP sockets, which do not suffer this problem). Go to the
'fastcgi configuration' page, and under 'add remote fastcgi':
Add Remote FastCGI
Docroot path /fcgi-bin/php
Remote machine localhost:8002
The first entry is where you saved PHP, above.
The second entry is localhost:<any unused port>
We will start the FastCGI listening on this port shortly.
Click 'update' to commit these changes.
3) Go to the path mapping module and add an alias for FastCGI:
Add Alias
Docroot path /fcgi-bin
Filesystem directory /path/to/docroot/fcgi-bin
Alias type fastcgi
Click 'update' to commit these changes
4) Also on the path mapping module, add a handler for PHP:
Add handler
File extension php
Handler /fcgi-bin/php
Click 'update' to commit these changes
Finally restart your virtual server for these changes to take effect.
Step 4 - start PHP as a FastCGI runner
When you start PHP, it will pre-fork a given number of child processes
to handle incoming PHP requests. Each process will handle a given
number of requests before exiting (and being replaced by a newly
forked process). You can control these two parameters by setting the
following environment variables BEFORE starting the FastCGI runner:
PHP_FCGI_CHILDREN - the number of child processes to pre-fork. If not
set, defaults to 8.
PHP_FCGI_MAX_REQUESTS - the number of requests each PHP child process
handles before exiting. If not set, defaults to 500.
To start the FastCGI runner, execute '$ZEUSHOME/web/bin/fcgirunner
8002 $DOCROOT/fcgi-bin/php'. Substitute the appropriate values for
$ZEUSHOME and $DOCROOT; also substitute for 8002 the port you chose,
above.
To stop the runner (e.g. to experiment with the above environment
variables) you will need to manually stop and running PHP
processes. (Use 'ps' and 'kill'). As it is PHP which is forking lots
of children and not the runner, Zeus unfortunately cannot keep track
of what processes are running, sorry. A typical command line may look
like 'ps -efl | grep $DOCROOT/fcgi-bin/php | grep -v grep | awk
'{print $4}' | xargs kill'
-170
View File
@@ -1,170 +0,0 @@
Things to do or at least think about doing in the future. Name in
parenthesis means that person has taken on this project.
Zend
----
For PHP 4.3.0:
* Allow foreach ($array as $k => &$val) syntax. right now we cannot
traverse an array without copying each element.
* Allow foreach ($array as $k => list($a, $b)) syntax for multi
dimensional arrays.
* Look at replacing c-lib call tolower().
* Make hash API functions work with HASH_OF() to save time.
* Allow to set a default value for call-by-reference-parameters.
eg: function hello (&$pallo = NULL) {}
* Disallow function(method) redefinition in class.
* Add configure test to determine if dlsym() requires underscore and set
DLSYM_NEEDS_UNDERSCORE accordingly. Perl and zsh have it in configure,
for example. (DONE?)
For PHP 5.0.0:
* Native large number support (probably with GNU GMP)
* Const'ify APIs. Right now, many functions leave parameters untouched,
but don't declare those as const. This makes interaction with other
interfaces difficult which pass const parameters to us.
global
------
For PHP 4.3.0:
* Add aliases to functions to conform to new naming conventions, e.g.
str_to_upper().
* Make all extensions thread-safe.
* Make everything on the language-level independent of your locale
settings.
* Change PHP error messages, so that they point to pages or sections
in the PHP Manual.
* Make sure that all ZTS globals get destructed. Most ts_allocate_id()
calls should have a dtor entry.
* Activate all extensions by default that don't rely on external
dependencies. (eg ftp) (DONE?)
* on some platforms unimplemented function will just do nothing
(e.g. symlink) they should print a warning or not even be defined!
(DONE ?)
* Use arg_separator.input to implode args in the CGI sapi extension
and arg_separator.input to explode in php_build_argv(). (DONE?)
* Change the odbc_fetch_into() function to require ALWAYS the first two
parameters ($conn_id and $array), and make the third (row) be optional.
* Remove --with-openlink configure option (--with-iodbc replaces it).
* Implement flush feature suitable for nested output buffers.
For PHP 5.0.0
* bundle and use curl lib for fopen wrapper.
* --enable-all in configure. (--enable-shared=max ...)
* make configure print out a summary when it's done (like XEmacs)
* replace standard functions which work on static data with
reentrancy-safe functions (DONE?).
* make SAPI conform to CGI/1.1. Currently, all SAPI modules
define REMOTE_ADDR etc. themselves and reach only various level
of compliance.
* see what functions might need to be changed to use HashPosition, so
that the internal array pointer is not affected.
* Move most extensions and PEAR packages out of the PHP CVS tree,
include them again during release packaging.
Other
* use thread-safe resolver functions (either require BIND 8 or adns).
* implement javadoc based function docs template system.
* provide optional IPv6 support.
* find a better way to implement script timeouts. SIGVTALRM is used
by some POSIX threads implementations (i.e. OpenBSD) and is not
available in ZTS mode.
documentation
-------------
* Add remarks in the documentation which functions are not implemented
on win32.
* Add remarks in the documentation which functions are not binary-safe.
* Update curl documentation (DONE?)
* Add developer documentation.
* Add detailed documentation for Java extension.
ext/bz2
-------
* Add ini setting for decompression buffer size. The default 4k is to small
for big files and takes ages to decompress. However, 40k which perform
quite good with big files may be to much under certain environments as
default setting. There should be consideren different default sizes for
different SAPIS (e.g. apache and cli).
ext/curl
--------
* Have a warning scheme for when people use unsupported features.
ext/oci8
--------
* All OCIFetch*() functions should return 0 for no more data and false on
error.
* Have a flag that trims trailing spaces from CHAR fields on retrieval.
* Make allow_call_time_pass_reference=Off working.
* For additional todo information, see oci8.c, in ext/oci8
ext/pcre
--------
* Allow user to set PCRE_NOTEMPTY, PCRE_ANCHORED at execution time, maybe
ext/pcntl
---------
* Change internal callback handler to use TICKS
* Remove all zend_extension code
* Add object callback support to pcntl_signal()
ext/pgsql
---------
For PHP 4.3.0:
* Add pg_metadata() with metadata cache feature.
* Add pg_convert() to check and convert array value for query.
* Add pg_insert/pg_update/pg_delete/pg_select for simple query.
ext/session
-----------
For PHP 4.3.0:
* session_abort() to abort session. ie: Do not save session data.
* Allow unset($_SESSION) or unset($HTTP_SESSION_VARS) to unset
session vars regardless of register_globals setting.
Other:
* Maybe implement finer-grained session variables that could be
locked individually.
* Write a network-transparent storage back-end with fallover
facilities
* Provide a callback facility which is executed upon encountering
an unknown class name during deserialization
ext/sockets
-----------
* Implement IPv6
* Review/Fix vectors
ext/standard
------------
* Add a version number to data serialized via serialize().
* Possibly modify parsing of GPC data to automatically create arrays if
variable name is seen more than once.
* Implement regex-cache for url-functions.
* stri_replace(). (Andrei)
* Move socket related functions to fsock.c.
* NOT binary safe:
strtok()
basename()
dirname()
strrpos()
strrchr()
strip_tags()
ext/wddx
--------
* See if we can support the remaining data types:
dateTime
binary
http://www.wddx.org/WDDX_SDK_10a/7__References/WDDX_DTD.htm
(Andrei)
* implement wddx_packet_as_javascript(). (Andrei)
other cool stuff
----------------
* PVM extension
-3
View File
@@ -1,3 +0,0 @@
- clean up .cvsignores
- purge Makefile.ins and replace PHP_EXTENSION in config.m4s
with appropiate calls to PHP_NEW_EXTENSION
-26
View File
@@ -1,26 +0,0 @@
Copyright (c) 1999, 2000, Andi Gutmans, Sascha Schumann, Zeev Suraski.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
- Neither name of the copyright holders nor the names of their contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-6
View File
@@ -1,6 +0,0 @@
## process this file with automake to produce Makefile.am
AUTOMAKE_OPTIONS=foreign
noinst_LTLIBRARIES=libtsrm.la
libtsrm_la_SOURCES = TSRM.c tsrm_strtok_r.c tsrm_virtual_cwd.c
depend:
-2
View File
@@ -1,2 +0,0 @@
- Improve the lock in ts_resource_ex() in order to cover less code.
This can probably be done by more careful hash table access
-603
View File
@@ -1,603 +0,0 @@
/*
+----------------------------------------------------------------------+
| Thread Safe Resource Manager |
+----------------------------------------------------------------------+
| Copyright (c) 1999, 2000, Andi Gutmans, Sascha Schumann, Zeev Suraski|
| This source file is subject to the TSRM license, that is bundled |
| with this package in the file LICENSE |
+----------------------------------------------------------------------+
| Authors: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#include "TSRM.h"
#ifdef ZTS
#include <stdio.h>
#include <stdlib.h>
#if HAVE_STDARG_H
#include <stdarg.h>
#endif
typedef struct _tsrm_tls_entry tsrm_tls_entry;
struct _tsrm_tls_entry {
void **storage;
int count;
THREAD_T thread_id;
tsrm_tls_entry *next;
};
typedef struct {
size_t size;
ts_allocate_ctor ctor;
ts_allocate_dtor dtor;
} tsrm_resource_type;
/* The memory manager table */
static tsrm_tls_entry **tsrm_tls_table=NULL;
static int tsrm_tls_table_size;
static ts_rsrc_id id_count;
/* The resource sizes table */
static tsrm_resource_type *resource_types_table=NULL;
static int resource_types_table_size;
static MUTEX_T tsmm_mutex; /* thread-safe memory manager mutex */
/* New thread handlers */
static tsrm_thread_begin_func_t tsrm_new_thread_begin_handler;
static tsrm_thread_end_func_t tsrm_new_thread_end_handler;
/* Debug support */
int tsrm_error(int level, const char *format, ...);
/* Read a resource from a thread's resource storage */
static int tsrm_error_level;
static FILE *tsrm_error_file;
#if TSRM_DEBUG
#define TSRM_ERROR(args) tsrm_error args
#define TSRM_SAFE_RETURN_RSRC(array, offset, range) \
{ \
int unshuffled_offset = TSRM_UNSHUFFLE_RSRC_ID(offset); \
\
if (offset==0) { \
return &array; \
} else if ((unshuffled_offset)>=0 && (unshuffled_offset)<(range)) { \
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Successfully fetched resource id %d for thread id %ld - 0x%0.8X", \
unshuffled_offset, (long) thread_resources->thread_id, array[unshuffled_offset])); \
return array[unshuffled_offset]; \
} else { \
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Resource id %d is out of range (%d..%d)", \
unshuffled_offset, TSRM_SHUFFLE_RSRC_ID(0), TSRM_SHUFFLE_RSRC_ID(thread_resources->count-1))); \
return NULL; \
} \
}
#else
#define TSRM_ERROR
#define TSRM_SAFE_RETURN_RSRC(array, offset, range) \
if (offset==0) { \
return &array; \
} else { \
return array[TSRM_UNSHUFFLE_RSRC_ID(offset)]; \
}
#endif
#if defined(PTHREADS)
/* Thread local storage */
static pthread_key_t tls_key;
#elif defined(TSRM_ST)
static int tls_key;
#elif defined(TSRM_WIN32)
static DWORD tls_key;
#endif
/* Startup TSRM (call once for the entire process) */
TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_level, char *debug_filename)
{
#if defined(GNUPTH)
pth_init();
#elif defined(PTHREADS)
pthread_key_create( &tls_key, 0 );
#elif defined(TSRM_ST)
st_init();
st_key_create(&tls_key, 0);
#elif defined(TSRM_WIN32)
tls_key = TlsAlloc();
#endif
tsrm_error_file = stderr;
tsrm_error_set(debug_level, debug_filename);
tsrm_tls_table_size = expected_threads;
tsrm_tls_table = (tsrm_tls_entry **) calloc(tsrm_tls_table_size, sizeof(tsrm_tls_entry *));
if (!tsrm_tls_table) {
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate TLS table"));
return 0;
}
id_count=0;
resource_types_table_size = expected_resources;
resource_types_table = (tsrm_resource_type *) calloc(resource_types_table_size, sizeof(tsrm_resource_type));
if (!resource_types_table) {
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate resource types table"));
free(tsrm_tls_table);
tsrm_tls_table = NULL;
return 0;
}
tsmm_mutex = tsrm_mutex_alloc();
tsrm_new_thread_begin_handler = tsrm_new_thread_end_handler = NULL;
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Started up TSRM, %d expected threads, %d expected resources", expected_threads, expected_resources));
return 1;
}
/* Shutdown TSRM (call once for the entire process) */
TSRM_API void tsrm_shutdown(void)
{
int i;
if (tsrm_tls_table) {
for (i=0; i<tsrm_tls_table_size; i++) {
tsrm_tls_entry *p = tsrm_tls_table[i], *next_p;
while (p) {
int j;
next_p = p->next;
for (j=0; j<id_count; j++) {
free(p->storage[j]);
}
free(p->storage);
free(p);
p = next_p;
}
}
free(tsrm_tls_table);
tsrm_tls_table = NULL;
}
if (resource_types_table) {
free(resource_types_table);
resource_types_table=NULL;
}
tsrm_mutex_free(tsmm_mutex);
tsmm_mutex = NULL;
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Shutdown TSRM"));
if (tsrm_error_file!=stderr) {
fclose(tsrm_error_file);
}
#if defined(GNUPTH)
pth_kill();
#elif defined(PTHREADS)
pthread_key_delete(tls_key);
#elif defined(TSRM_WIN32)
TlsFree(tls_key);
#endif
}
/* allocates a new thread-safe-resource id */
TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor)
{
int i;
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Obtaining a new resource id, %d bytes", size));
tsrm_mutex_lock(tsmm_mutex);
/* obtain a resource id */
*rsrc_id = TSRM_SHUFFLE_RSRC_ID(id_count++);
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Obtained resource id %d", *rsrc_id));
/* store the new resource type in the resource sizes table */
if (resource_types_table_size < id_count) {
resource_types_table = (tsrm_resource_type *) realloc(resource_types_table, sizeof(tsrm_resource_type)*id_count);
if (!resource_types_table) {
tsrm_mutex_unlock(tsmm_mutex);
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate storage for resource"));
*rsrc_id = 0;
return 0;
}
resource_types_table_size = id_count;
}
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].size = size;
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].ctor = ctor;
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].dtor = dtor;
/* enlarge the arrays for the already active threads */
for (i=0; i<tsrm_tls_table_size; i++) {
tsrm_tls_entry *p = tsrm_tls_table[i];
while (p) {
if (p->count < id_count) {
int j;
p->storage = (void *) realloc(p->storage, sizeof(void *)*id_count);
for (j=p->count; j<id_count; j++) {
p->storage[j] = (void *) malloc(resource_types_table[j].size);
if (resource_types_table[j].ctor) {
resource_types_table[j].ctor(p->storage[j], &p->storage);
}
}
p->count = id_count;
}
p = p->next;
}
}
tsrm_mutex_unlock(tsmm_mutex);
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Successfully allocated new resource id %d", *rsrc_id));
return *rsrc_id;
}
static void allocate_new_resource(tsrm_tls_entry **thread_resources_ptr, THREAD_T thread_id)
{
int i;
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Creating data structures for thread %x", thread_id));
(*thread_resources_ptr) = (tsrm_tls_entry *) malloc(sizeof(tsrm_tls_entry));
(*thread_resources_ptr)->storage = (void **) malloc(sizeof(void *)*id_count);
(*thread_resources_ptr)->count = id_count;
(*thread_resources_ptr)->thread_id = thread_id;
(*thread_resources_ptr)->next = NULL;
#if defined(PTHREADS)
/* Set thread local storage to this new thread resources structure */
pthread_setspecific(tls_key, (void *) *thread_resources_ptr);
#elif defined(TSRM_ST)
st_thread_setspecific(tls_key, (void *) *thread_resources_ptr);
#elif defined(TSRM_WIN32)
TlsSetValue(tls_key, (void *) *thread_resources_ptr);
#endif
if (tsrm_new_thread_begin_handler) {
tsrm_new_thread_begin_handler(thread_id, &((*thread_resources_ptr)->storage));
}
for (i=0; i<id_count; i++) {
(*thread_resources_ptr)->storage[i] = (void *) malloc(resource_types_table[i].size);
if (resource_types_table[i].ctor) {
resource_types_table[i].ctor((*thread_resources_ptr)->storage[i], &(*thread_resources_ptr)->storage);
}
}
tsrm_mutex_unlock(tsmm_mutex);
if (tsrm_new_thread_end_handler) {
tsrm_new_thread_end_handler(thread_id, &((*thread_resources_ptr)->storage));
}
}
/* fetches the requested resource for the current thread */
TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id)
{
THREAD_T thread_id;
int hash_value;
tsrm_tls_entry *thread_resources;
if (!th_id) {
#if defined(PTHREADS)
/* Fast path for looking up the resources for the current
* thread. Its used by just about every call to
* ts_resource_ex(). This avoids the need for a mutex lock
* and our hashtable lookup.
*/
thread_resources = pthread_getspecific(tls_key);
#elif defined(TSRM_ST)
thread_resources = st_thread_getspecific(tls_key);
#elif defined(TSRM_WIN32)
thread_resources = TlsGetValue(tls_key);
#else
thread_resources = NULL;
#endif
if (thread_resources) {
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Fetching resource id %d for current thread %d", id, (long) thread_resources->thread_id));
/* Read a specific resource from the thread's resources.
* This is called outside of a mutex, so have to be aware about external
* changes to the structure as we read it.
*/
TSRM_SAFE_RETURN_RSRC(thread_resources->storage, id, thread_resources->count);
}
thread_id = tsrm_thread_id();
} else {
thread_id = *th_id;
}
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Fetching resource id %d for thread %ld", id, (long) thread_id));
tsrm_mutex_lock(tsmm_mutex);
hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
thread_resources = tsrm_tls_table[hash_value];
if (!thread_resources) {
allocate_new_resource(&tsrm_tls_table[hash_value], thread_id);
return ts_resource_ex(id, &thread_id);
} else {
do {
if (thread_resources->thread_id == thread_id) {
break;
}
if (thread_resources->next) {
thread_resources = thread_resources->next;
} else {
allocate_new_resource(&thread_resources->next, thread_id);
return ts_resource_ex(id, &thread_id);
/*
* thread_resources = thread_resources->next;
* break;
*/
}
} while (thread_resources);
}
tsrm_mutex_unlock(tsmm_mutex);
/* Read a specific resource from the thread's resources.
* This is called outside of a mutex, so have to be aware about external
* changes to the structure as we read it.
*/
TSRM_SAFE_RETURN_RSRC(thread_resources->storage, id, thread_resources->count);
}
/* frees all resources allocated for the current thread */
void ts_free_thread(void)
{
tsrm_tls_entry *thread_resources;
int i;
THREAD_T thread_id = tsrm_thread_id();
int hash_value;
tsrm_tls_entry *last=NULL;
tsrm_mutex_lock(tsmm_mutex);
hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
thread_resources = tsrm_tls_table[hash_value];
while (thread_resources) {
if (thread_resources->thread_id == thread_id) {
for (i=0; i<thread_resources->count; i++) {
if (resource_types_table[i].dtor) {
resource_types_table[i].dtor(thread_resources->storage[i], &thread_resources->storage);
}
}
for (i=0; i<thread_resources->count; i++) {
free(thread_resources->storage[i]);
}
free(thread_resources->storage);
if (last) {
last->next = thread_resources->next;
} else {
tsrm_tls_table[hash_value] = thread_resources->next;
}
#if defined(PTHREADS)
pthread_setspecific(tls_key, 0);
#elif defined(TSRM_WIN32)
TlsSetValue(tls_key, 0);
#endif
free(thread_resources);
break;
}
if (thread_resources->next) {
last = thread_resources;
}
thread_resources = thread_resources->next;
}
tsrm_mutex_unlock(tsmm_mutex);
}
/* deallocates all occurrences of a given id */
void ts_free_id(ts_rsrc_id id)
{
}
/*
* Utility Functions
*/
/* Obtain the current thread id */
TSRM_API THREAD_T tsrm_thread_id(void)
{
#ifdef TSRM_WIN32
return GetCurrentThreadId();
#elif defined(NETWARE)
return NXThreadGetId();
#elif defined(GNUPTH)
return pth_self();
#elif defined(PTHREADS)
return pthread_self();
#elif defined(NSAPI)
return systhread_current();
#elif defined(PI3WEB)
return PIThread_getCurrent();
#elif defined(TSRM_ST)
return st_thread_self();
#endif
}
/* Allocate a mutex */
TSRM_API MUTEX_T tsrm_mutex_alloc(void)
{
MUTEX_T mutexp;
#ifdef NETWARE
long flags = 0; /* Don't require NX_MUTEX_RECURSIVE, I guess */
NXHierarchy_t order = 0;
NX_LOCK_INFO_ALLOC (lockInfo, "PHP-TSRM", 0);
#endif
#ifdef TSRM_WIN32
mutexp = malloc(sizeof(CRITICAL_SECTION));
InitializeCriticalSection(mutexp);
#elif defined(NETWARE)
mutexp = NXMutexAlloc(flags, order, &lockInfo); /* return value ignored for now */
#elif defined(GNUPTH)
mutexp = (MUTEX_T) malloc(sizeof(*mutexp));
pth_mutex_init(mutexp);
#elif defined(PTHREADS)
mutexp = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
pthread_mutex_init(mutexp,NULL);
#elif defined(NSAPI)
mutexp = crit_init();
#elif defined(PI3WEB)
mutexp = PIPlatform_allocLocalMutex();
#elif defined(TSRM_ST)
mutexp = st_mutex_new();
#endif
#ifdef THR_DEBUG
printf("Mutex created thread: %d\n",mythreadid());
#endif
return( mutexp );
}
/* Free a mutex */
TSRM_API void tsrm_mutex_free(MUTEX_T mutexp)
{
if (mutexp) {
#ifdef TSRM_WIN32
DeleteCriticalSection(mutexp);
#elif defined(NETWARE)
NXMutexFree(mutexp);
#elif defined(GNUPTH)
free(mutexp);
#elif defined(PTHREADS)
pthread_mutex_destroy(mutexp);
free(mutexp);
#elif defined(NSAPI)
crit_terminate(mutexp);
#elif defined(PI3WEB)
PISync_delete(mutexp);
#elif defined(TSRM_ST)
st_mutex_destroy(mutexp);
#endif
}
#ifdef THR_DEBUG
printf("Mutex freed thread: %d\n",mythreadid());
#endif
}
/* Lock a mutex */
TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp)
{
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Mutex locked thread: %ld", tsrm_thread_id()));
#ifdef TSRM_WIN32
EnterCriticalSection(mutexp);
return 1;
#elif defined(NETWARE)
return NXLock(mutexp);
#elif defined(GNUPTH)
return pth_mutex_acquire(mutexp, 0, NULL);
#elif defined(PTHREADS)
return pthread_mutex_lock(mutexp);
#elif defined(NSAPI)
return crit_enter(mutexp);
#elif defined(PI3WEB)
return PISync_lock(mutexp);
#elif defined(TSRM_ST)
return st_mutex_lock(mutexp);
#endif
}
/* Unlock a mutex */
TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp)
{
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Mutex unlocked thread: %ld", tsrm_thread_id()));
#ifdef TSRM_WIN32
LeaveCriticalSection(mutexp);
return 1;
#elif defined(NETWARE)
return NXUnlock(mutexp);
#elif defined(GNUPTH)
return pth_mutex_release(mutexp);
#elif defined(PTHREADS)
return pthread_mutex_unlock(mutexp);
#elif defined(NSAPI)
return crit_exit(mutexp);
#elif defined(PI3WEB)
return PISync_unlock(mutexp);
#elif defined(TSRM_ST)
return st_mutex_unlock(mutexp);
#endif
}
TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler)
{
void *retval = (void *) tsrm_new_thread_begin_handler;
tsrm_new_thread_begin_handler = new_thread_begin_handler;
return retval;
}
TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler)
{
void *retval = (void *) tsrm_new_thread_end_handler;
tsrm_new_thread_end_handler = new_thread_end_handler;
return retval;
}
/*
* Debug support
*/
#if TSRM_DEBUG
int tsrm_error(int level, const char *format, ...)
{
if (level<=tsrm_error_level) {
va_list args;
int size;
fprintf(tsrm_error_file, "TSRM: ");
va_start(args, format);
size = vfprintf(tsrm_error_file, format, args);
va_end(args);
fprintf(tsrm_error_file, "\n");
fflush(tsrm_error_file);
return size;
} else {
return 0;
}
}
#endif
void tsrm_error_set(int level, char *debug_filename)
{
tsrm_error_level = level;
#if TSRM_DEBUG
if (tsrm_error_file!=stderr) { /* close files opened earlier */
fclose(tsrm_error_file);
}
if (debug_filename) {
tsrm_error_file = fopen(debug_filename, "w");
if (!tsrm_error_file) {
tsrm_error_file = stderr;
}
} else {
tsrm_error_file = stderr;
}
#endif
}
#endif /* ZTS */
-186
View File
@@ -1,186 +0,0 @@
# Microsoft Developer Studio Project File - Name="TSRM" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=TSRM - Win32 Debug_TS
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "TSRM.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "TSRM.mak" CFG="TSRM - Win32 Debug_TS"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "TSRM - Win32 Debug_TS" (based on "Win32 (x86) Static Library")
!MESSAGE "TSRM - Win32 Release_TS" (based on "Win32 (x86) Static Library")
!MESSAGE "TSRM - Win32 Release_TS_inline" (based on "Win32 (x86) Static Library")
!MESSAGE "TSRM - Win32 Release_TSDbg" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "TSRM - Win32 Debug_TS"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "TSRM___Win32_Debug_TS"
# PROP BASE Intermediate_Dir "TSRM___Win32_Debug_TS"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug_TS"
# PROP Intermediate_Dir "Debug_TS"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "C:\Projects\TSRM" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_DEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=1 /YX /FD /GZ /c
# ADD BASE RSC /l 0x40d /d "_DEBUG"
# ADD RSC /l 0x40d /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TS"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "TSRM___Win32_Release_TS"
# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TS"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release_TS"
# PROP Intermediate_Dir "Release_TS"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
# ADD BASE RSC /l 0x40d /d "NDEBUG"
# ADD RSC /l 0x40d /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TS_inline"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "TSRM___Win32_Release_TS_inline"
# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TS_inline"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release_TS_inline"
# PROP Intermediate_Dir "Release_TS_inline"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "TSRM_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
# ADD BASE RSC /l 0x40d /d "NDEBUG"
# ADD RSC /l 0x40d /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TSDbg"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "TSRM___Win32_Release_TSDbg"
# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TSDbg"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release_TSDbg"
# PROP Intermediate_Dir "Release_TSDbg"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
# ADD BASE RSC /l 0x40d /d "NDEBUG"
# ADD RSC /l 0x40d /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ENDIF
# Begin Target
# Name "TSRM - Win32 Debug_TS"
# Name "TSRM - Win32 Release_TS"
# Name "TSRM - Win32 Release_TS_inline"
# Name "TSRM - Win32 Release_TSDbg"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\TSRM.c
# End Source File
# Begin Source File
SOURCE=.\tsrm_strtok_r.c
# End Source File
# Begin Source File
SOURCE=.\tsrm_virtual_cwd.c
# End Source File
# Begin Source File
SOURCE=.\tsrm_win32.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\readdir.h
# End Source File
# Begin Source File
SOURCE=.\TSRM.h
# End Source File
# Begin Source File
SOURCE=.\tsrm_config.w32.h
# End Source File
# Begin Source File
SOURCE=.\tsrm_config_common.h
# End Source File
# Begin Source File
SOURCE=.\tsrm_strtok_r.h
# End Source File
# Begin Source File
SOURCE=.\tsrm_virtual_cwd.h
# End Source File
# Begin Source File
SOURCE=.\tsrm_win32.h
# End Source File
# End Group
# End Target
# End Project
-150
View File
@@ -1,150 +0,0 @@
/*
+----------------------------------------------------------------------+
| Thread Safe Resource Manager |
+----------------------------------------------------------------------+
| Copyright (c) 1999, 2000, Andi Gutmans, Sascha Schumann, Zeev Suraski|
| This source file is subject to the TSRM license, that is bundled |
| with this package in the file LICENSE |
+----------------------------------------------------------------------+
| Authors: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef TSRM_H
#define TSRM_H
/* #ifndef WIN32 */
#if !defined(WIN32) && !defined(NETWARE)
# include "tsrm_config.h"
#endif
#ifdef WIN32
# define TSRM_WIN32
#endif
#ifdef TSRM_WIN32
# ifdef TSRM_EXPORTS
# define TSRM_API __declspec(dllexport)
# else
# define TSRM_API __declspec(dllimport)
# endif
#else
# define TSRM_API
#endif
/* Only compile multi-threading functions if we're in ZTS mode */
#ifdef ZTS
#ifdef TSRM_WIN32
# include <windows.h>
#elif defined(NETWARE)
# include <nks/thread.h>
# include <nks/synch.h>
#elif defined(GNUPTH)
# include <pth.h>
#elif defined(PTHREADS)
# include <pthread.h>
#elif defined(TSRM_ST)
# include <st.h>
#endif
typedef int ts_rsrc_id;
/* Define THREAD_T and MUTEX_T */
#ifdef TSRM_WIN32
# define THREAD_T DWORD
# define MUTEX_T CRITICAL_SECTION *
#elif defined(NETWARE)
# define THREAD_T NXThreadId_t
# define MUTEX_T NXMutex_t *
#elif defined(GNUPTH)
# define THREAD_T pth_t
# define MUTEX_T pth_mutex_t *
#elif defined(PTHREADS)
# define THREAD_T pthread_t
# define MUTEX_T pthread_mutex_t *
#elif defined(NSAPI)
# define THREAD_T SYS_THREAD
# define MUTEX_T CRITICAL
#elif defined(PI3WEB)
# define THREAD_T PIThread *
# define MUTEX_T PISync *
#elif defined(TSRM_ST)
# define THREAD_T st_thread_t
# define MUTEX_T st_mutex_t
#endif
typedef void (*ts_allocate_ctor)(void *, void ***);
typedef void (*ts_allocate_dtor)(void *, void ***);
#define THREAD_HASH_OF(thr,ts) (unsigned long)thr%(unsigned long)ts
#ifdef __cplusplus
extern "C" {
#endif
/* startup/shutdown */
TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_level, char *debug_filename);
TSRM_API void tsrm_shutdown(void);
/* allocates a new thread-safe-resource id */
TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor);
/* fetches the requested resource for the current thread */
TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id);
#define ts_resource(id) ts_resource_ex(id, NULL)
/* frees all resources allocated for the current thread */
TSRM_API void ts_free_thread(void);
/* deallocates all occurrences of a given id */
TSRM_API void ts_free_id(ts_rsrc_id id);
/* Debug support */
#define TSRM_ERROR_LEVEL_ERROR 1
#define TSRM_ERROR_LEVEL_CORE 2
#define TSRM_ERROR_LEVEL_INFO 3
typedef void (*tsrm_thread_begin_func_t)(THREAD_T thread_id, void ***tsrm_ls);
typedef void (*tsrm_thread_end_func_t)(THREAD_T thread_id, void ***tsrm_ls);
TSRM_API int tsrm_error(int level, const char *format, ...);
TSRM_API void tsrm_error_set(int level, char *debug_filename);
/* utility functions */
TSRM_API THREAD_T tsrm_thread_id(void);
TSRM_API MUTEX_T tsrm_mutex_alloc(void);
TSRM_API void tsrm_mutex_free(MUTEX_T mutexp);
TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp);
TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp);
TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler);
TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler);
#define TSRM_SHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)+1)
#define TSRM_UNSHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)-1)
#define TSRMLS_FETCH() void ***tsrm_ls = (void ***) ts_resource_ex(0, NULL)
#define TSRMG(id, type, element) (((type) (*((void ***) tsrm_ls))[TSRM_UNSHUFFLE_RSRC_ID(id)])->element)
#define TSRMLS_D void ***tsrm_ls
#define TSRMLS_DC , TSRMLS_D
#define TSRMLS_C tsrm_ls
#define TSRMLS_CC , TSRMLS_C
#ifdef __cplusplus
}
#endif
#else /* non ZTS */
#define TSRMLS_FETCH()
#define TSRMLS_D void
#define TSRMLS_DC
#define TSRMLS_C
#define TSRMLS_CC
#endif /* ZTS */
#endif /* TSRM_H */
-1
View File
@@ -1 +0,0 @@
#undef PTHREADS
-5
View File
@@ -1,5 +0,0 @@
AC_DEFUN(AM_SET_LIBTOOL_VARIABLE,[
LIBTOOL='$(SHELL) $(top_builddir)/libtool $1'
])
-43
View File
@@ -1,43 +0,0 @@
# Makefile to generate build tools
#
# Standard usage:
# make -f build.mk
#
# Written by Sascha Schumann
#
# $Id$
LT_TARGETS = ltmain.sh ltconfig
config_h_in = tsrm_config.h.in
makefile_am_files = Makefile.am
makefile_in_files = $(makefile_am_files:.am=.in)
makefile_files = $(makefile_am_files:e.am=e)
targets = $(makefile_in_files) $(LT_TARGETS) configure $(config_h_in)
all: $(targets)
clean:
rm -f $(targets)
$(LT_TARGETS):
rm -f $(LT_TARGETS)
libtoolize --automake $(AMFLAGS) -f
$(makefile_in_files): $(makefile_am_files)
automake -a -i $(AMFLAGS) $(makefile_files)
aclocal.m4: configure.in acinclude.m4
aclocal
$(config_h_in): configure.in acconfig.h
# explicitly remove target since autoheader does not seem to work
# correctly otherwise (timestamps are not updated)
@rm -f $@
autoheader
configure: aclocal.m4 configure.in
autoconf
-33
View File
@@ -1,33 +0,0 @@
#!/bin/sh
case "$1" in
--copy)
automake_flags=--copy
shift
;;
esac
libtoolize --force --automake $automake_flags
mv aclocal.m4 aclocal.m4.old 2>/dev/null
aclocal
if cmp aclocal.m4.old aclocal.m4 > /dev/null 2>&1; then
echo "buildconf: keeping ${1}aclocal.m4"
mv aclocal.m4.old aclocal.m4
else
echo "buildconf: created or modified ${1}aclocal.m4"
fi
autoheader
automake --add-missing --include-deps $automake_flags
mv configure configure.old 2>/dev/null
autoconf
if cmp configure.old configure > /dev/null 2>&1; then
echo "buildconf: keeping ${1}configure"
mv configure.old configure
else
echo "buildconf: created or modified ${1}configure"
fi
-31
View File
@@ -1,31 +0,0 @@
dnl $Id$
dnl
dnl Minimalistic configure.in for TSRM.
dnl
AC_INIT(TSRM.c)
AM_INIT_AUTOMAKE(TSRM, 1.0, nodefine)
AM_CONFIG_HEADER(tsrm_config.h)
sinclude(tsrm.m4)
TSRM_BASIC_CHECKS
TSRM_THREADS_CHECKS
AM_PROG_LIBTOOL
if test "$enable_debug" != "yes"; then
AM_SET_LIBTOOL_VARIABLE([--silent])
fi
dnl TSRM_PTHREAD
AC_CHECK_HEADERS(
utime.h \
dirent.h \
stdarg.h \
alloca.h \
unistd.h \
limits.h
)
AC_OUTPUT(Makefile)
-44
View File
@@ -1,44 +0,0 @@
#ifndef READDIR_H
#define READDIR_H
/*
* Structures and types used to implement opendir/readdir/closedir
* on Windows 95/NT.
*/
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
/* struct dirent - same as Unix */
struct dirent {
long d_ino; /* inode (always 1 in WIN32) */
off_t d_off; /* offset to this dirent */
unsigned short d_reclen; /* length of d_name */
char d_name[_MAX_FNAME + 1]; /* filename (null terminated) */
};
/* typedef DIR - not the same as Unix */
typedef struct {
long handle; /* _findfirst/_findnext handle */
short offset; /* offset into directory */
short finished; /* 1 if there are not more files */
struct _finddata_t fileinfo; /* from _findfirst/_findnext */
char *dir; /* the dir we are reading */
struct dirent dent; /* the dirent to return */
} DIR;
/* Function prototypes */
DIR *opendir(const char *);
struct dirent *readdir(DIR *);
int readdir_r(DIR *, struct dirent *, struct dirent **);
int closedir(DIR *);
void rewinddir(DIR *);
#endif /* READDIR_H */
-160
View File
@@ -1,160 +0,0 @@
dnl Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
dnl
dnl Redistribution and use in source and binary forms, with or without
dnl modification, are permitted provided that the following conditions
dnl are met:
dnl
dnl 1. Redistributions of source code must retain the above copyright
dnl notice, this list of conditions and the following disclaimer.
dnl
dnl 2. Redistributions in binary form must reproduce the above copyright
dnl notice, this list of conditions and the following disclaimer in
dnl the documentation and/or other materials provided with the
dnl distribution.
dnl
dnl THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``AS IS'' AND ANY
dnl EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
dnl IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
dnl PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SASCHA SCHUMANN OR
dnl HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dnl SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
dnl NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
dnl LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
dnl HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
dnl STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
dnl ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
dnl OF THE POSSIBILITY OF SUCH DAMAGE.
dnl
dnl PTHREADS_FLAGS
dnl
dnl Set some magic defines to achieve POSIX threads conformance
dnl
AC_DEFUN(PTHREADS_FLAGS,[
if test -z "$host_alias" && test -n "$host"; then
host_alias=$host
fi
if test -z "$host_alias"; then
AC_MSG_ERROR(host_alias is not set. Make sure to run config.guess)
fi
case $host_alias in
*solaris*)
PTHREAD_FLAGS="-D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT";;
*freebsd*)
PTHREAD_FLAGS="-D_REENTRANT -D_THREAD_SAFE";;
*linux*)
PTHREAD_FLAGS=-D_REENTRANT;;
*aix*)
PTHREAD_FLAGS=-D_THREAD_SAFE;;
*irix*)
PTHREAD_FLAGS=-D_POSIX_THREAD_SAFE_FUNCTIONS;;
*hpux*)
PTHREAD_FLAGS=-D_REENTRANT;;
*sco*)
PTHREAD_FLAGS=-D_REENTRANT;;
dnl Solves sigwait() problem, creates problems with u_long etc.
dnl PTHREAD_FLAGS="-D_REENTRANT -D_XOPEN_SOURCE=500 -D_POSIX_C_SOURCE=199506 -D_XOPEN_SOURCE_EXTENDED=1";;
esac
if test -n "$PTHREAD_FLAGS"; then
CPPFLAGS="$CPPFLAGS $PTHREAD_FLAGS"
fi
])dnl
dnl
dnl PTHREADS_CHECK_COMPILE
dnl
dnl Check whether the current setup can use POSIX threads calls
dnl
AC_DEFUN(PTHREADS_CHECK_COMPILE, [
AC_TRY_RUN( [
#include <pthread.h>
#include <stddef.h>
void *thread_routine(void *data) {
return data;
}
int main() {
pthread_t thd;
pthread_mutexattr_t mattr;
int data = 1;
pthread_mutexattr_init(&mattr);
return pthread_create(&thd, NULL, thread_routine, &data);
} ], [
pthreads_working=yes
], [
pthreads_working=no
], pthreads_working=no ) ] )dnl
dnl
dnl PTHREADS_CHECK()
dnl
dnl Try to find a way to enable POSIX threads
dnl
dnl Magic flags
dnl -kthread gcc (FreeBSD)
dnl -Kthread UDK cc (UnixWare)
dnl -mt WorkShop cc (Solaris)
dnl -mthreads gcc (AIX)
dnl -pthread gcc (Linux, FreeBSD, NetBSD, OpenBSD)
dnl -pthreads gcc (Solaris)
dnl -qthreaded AIX cc V5
dnl -threads gcc (HP-UX)
dnl
AC_DEFUN(PTHREADS_CHECK,[
save_CFLAGS=$CFLAGS
save_LIBS=$LIBS
PTHREADS_ASSIGN_VARS
PTHREADS_CHECK_COMPILE
LIBS=$save_LIBS
CFLAGS=$save_CFLAGS
AC_CACHE_CHECK(for pthreads_cflags,ac_cv_pthreads_cflags,[
ac_cv_pthreads_cflags=
if test "$pthreads_working" != "yes"; then
for flag in -kthread -pthread -pthreads -mthreads -Kthread -threads -mt -qthreaded; do
ac_save=$CFLAGS
CFLAGS="$CFLAGS $flag"
PTHREADS_CHECK_COMPILE
CFLAGS=$ac_save
if test "$pthreads_working" = "yes"; then
ac_cv_pthreads_cflags=$flag
break
fi
done
fi
])
AC_CACHE_CHECK(for pthreads_lib, ac_cv_pthreads_lib,[
ac_cv_pthreads_lib=
if test "$pthreads_working" != "yes"; then
for lib in pthread pthreads c_r; do
ac_save=$LIBS
LIBS="$LIBS -l$lib"
PTHREADS_CHECK_COMPILE
LIBS=$ac_save
if test "$pthreads_working" = "yes"; then
ac_cv_pthreads_lib=$lib
break
fi
done
fi
])
if test "$pthreads_working" = "yes"; then
threads_result="POSIX-Threads found"
else
threads_result="POSIX-Threads not found"
fi
])dnl
dnl
dnl
AC_DEFUN(PTHREADS_ASSIGN_VARS,[
if test -n "$ac_cv_pthreads_lib"; then
LIBS="$LIBS -l$ac_cv_pthreads_lib"
fi
if test -n "$ac_cv_pthreads_cflags"; then
CFLAGS="$CFLAGS $ac_cv_pthreads_cflags"
fi
])dnl
-124
View File
@@ -1,124 +0,0 @@
dnl TSRM_CHECK_GCC_ARG(ARG, ACTION-IF-FOUND, ACTION-IF-NOT_FOUND)
AC_DEFUN(TSRM_CHECK_GCC_ARG,[
gcc_arg_name=[ac_cv_gcc_arg]translit($1,A-Z-,a-z_)
AC_CACHE_CHECK([whether $CC supports $1], [ac_cv_gcc_arg]translit($1,A-Z-,a-z_), [
echo 'void somefunc() { };' > conftest.c
cmd='$CC $1 -c conftest.c'
if eval $cmd 2>&1 | egrep -e $1 >/dev/null ; then
ac_result=no
else
ac_result=yes
fi
eval $gcc_arg_name=$ac_result
rm -f conftest.*
])
if eval test "\$$gcc_arg_name" = "yes"; then
$2
else
:
$3
fi
])
AC_DEFUN(TSRM_BASIC_CHECKS,[
AC_REQUIRE([AC_PROG_CC])dnl
dnl AC_REQUIRE([AM_PROG_CC_STDC])dnl
AC_REQUIRE([AC_PROG_CC_C_O])dnl
AC_REQUIRE([AC_PROG_RANLIB])dnl
AC_CHECK_HEADERS(stdarg.h)
])
AC_DEFUN(TSRM_CHECK_PTH,[
AC_MSG_CHECKING(for GNU Pth)
PTH_PREFIX="`$1 --prefix`"
if test -z "$PTH_PREFIX"; then
AC_MSG_RESULT(Please check your Pth installation)
fi
CPPFLAGS="$CPPFLAGS `$1 --cflags`"
LDFLAGS="$LDFLAGS `$1 --ldflags`"
LIBS="$LIBS `$1 --libs`"
AC_DEFINE(GNUPTH, 1, [Whether you use GNU Pth])
AC_MSG_RESULT(yes - installed in $PTH_PREFIX)
])
AC_DEFUN(TSRM_CHECK_ST,[
if test -r "$1/include/st.h"; then
CPPFLAGS="$CPPFLAGS -I$1/include"
LDFLAGS="$LDFLAGS -L$1/lib"
elif test -r "$1/st.h"; then
CPPFLAGS="$CPPFLAGS -I$1"
LDFLAGS="$LDFLAGS -L$1"
fi
AC_CHECK_HEADERS(st.h,[],[
AC_MSG_ERROR([Sorry[,] I was unable to locate the State Threads header file. Please specify the prefix using --with-tsrm-st=/prefix])
])
LIBS="$LIBS -lst"
AC_MSG_CHECKING(for SGI's State Threads)
AC_MSG_RESULT(yes)
AC_DEFINE(TSRM_ST, 1, [ ])
])
sinclude(threads.m4)
sinclude(TSRM/threads.m4)
AC_DEFUN(TSRM_CHECK_PTHREADS,[
PTHREADS_CHECK
if test "$pthreads_working" != "yes"; then
AC_MSG_ERROR(Your system seems to lack POSIX threads.)
fi
AC_DEFINE(PTHREADS, 1, Whether to use Pthreads)
AC_MSG_CHECKING(for POSIX threads)
AC_MSG_RESULT(yes)
])
AC_DEFUN(TSRM_THREADS_CHECKS,[
dnl For the thread implementations, we always use --with-*
dnl to maintain consistency
AC_ARG_WITH(tsrm-pth,
[ --with-tsrm-pth[=pth-config] Use GNU Pth.],[
TSRM_PTH=$withval
],[
TSRM_PTH=no
])
AC_ARG_WITH(tsrm-st,
[ --with-tsrm-st],[
TSRM_ST=$withval
],[
TSRM_ST=no
])
AC_ARG_WITH(tsrm-pthreads,
[ --with-tsrm-pthreads Use POSIX threads (default)],[
TSRM_PTHREADS=$withval
],[
TSRM_PTHREADS=yes
])
test "$TSRM_PTH" = "yes" && TSRM_PTH=pth-config
if test "$TSRM_PTH" != "no"; then
TSRM_CHECK_PTH($TSRM_PTH)
elif test "$TSRM_ST" != "no"; then
TSRM_CHECK_ST($TSRM_ST)
elif test "$TSRM_PTHREADS" != "no"; then
TSRM_CHECK_PTHREADS
fi
])
-9
View File
@@ -1,9 +0,0 @@
#ifndef TSRM_CONFIG_NW_H
#define TSRM_CONFIG_NW_H
#define HAVE_UTIME 1
/* Though we have alloca(), this seems to be causing some problem with the stack pointer -- hence not using it */
/* #define HAVE_ALLOCA 1 */
#endif
-15
View File
@@ -1,15 +0,0 @@
#ifndef TSRM_CONFIG_W32_H
#define TSRM_CONFIG_W32_H
#define HAVE_UTIME 1
#define HAVE_ALLOCA 1
#undef inline
#ifdef ZEND_WIN32_FORCE_INLINE
# define inline __forceinline
#else
# define inline
#endif
#endif
-60
View File
@@ -1,60 +0,0 @@
#ifndef TSRM_CONFIG_COMMON_H
#define TSRM_CONFIG_COMMON_H
#if WINNT|WIN32
# define TSRM_WIN32
#endif
#ifdef TSRM_WIN32
# include "tsrm_config.w32.h"
#elif defined(NETWARE)
# include "tsrm_config.nw.h"
#else
# include "tsrm_config.h"
# include <sys/param.h>
#endif
#ifdef TSRM_WIN32
#include <malloc.h>
#endif
/* AIX requires this to be the first thing in the file. */
#ifndef __GNUC__
# if HAVE_ALLOCA_H
# include <alloca.h>
# else
# ifdef _AIX
#pragma alloca
# else
# ifndef alloca /* predefined by HP cc +Olibcalls */
char *alloca ();
# endif
# endif
# endif
#endif
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
#if HAVE_LIMITS_H
#include <limits.h>
#endif
#ifndef MAXPATHLEN
# ifdef PATH_MAX
# define MAXPATHLEN PATH_MAX
# else
# define MAXPATHLEN 256
# endif
#endif
#if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2))
# define tsrm_do_alloca(p) alloca(p)
# define tsrm_free_alloca(p)
#else
# define tsrm_do_alloca(p) malloc(p)
# define tsrm_free_alloca(p) free(p)
#endif
#endif /* TSRM_CONFIG_COMMON_H */
-260
View File
@@ -1,260 +0,0 @@
/*
+----------------------------------------------------------------------+
| PHP Version 4 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2002 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| 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. |
+----------------------------------------------------------------------+
| Authors: Venkat Raghavan S <rvenkat@novell.com> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include "TSRM.h"
#ifdef NETWARE
#ifdef USE_MKFIFO
#include <sys/stat.h>
#elif !defined(USE_PIPE_OPEN) /* NXFifoOpen */
#include <nks/fsio.h>
#endif
#include <nks/vm.h>
#include <nks/memory.h>
#include <string.h>
#include "mktemp.h"
/* strtok() call in LibC is abending when used in a different address space -- hence using
PHP's version itself for now : Venkat (30/4/02) */
#include "tsrm_strtok_r.h"
#define tsrm_strtok_r(a,b,c) strtok((a),(b))
#define WHITESPACE " \t"
#define MAX_ARGS 10
TSRM_API FILE* popen(const char *commandline, const char *type)
{
char *command = NULL, *argv[MAX_ARGS] = {'\0'}, **env = NULL;
char *tempName = "sys:/php/temp/phpXXXXXX.tmp";
char *filePath = NULL;
char *ptr = NULL;
int ptrLen = 0, argc = 0, i = 0, envCount = 0, err = 0;
FILE *stream = NULL;
#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
int pipe_handle;
int mode = O_RDONLY;
#else
NXHandle_t pipe_handle;
NXMode_t mode = NX_O_RDONLY;
#endif
NXExecEnvSpec_t envSpec;
NXNameSpec_t nameSpec;
NXVmId_t newVM = 0;
/* Check for validity of input parameters */
if (!commandline || !type)
return NULL;
/* Get temporary file name */
filePath = mktemp(tempName);
/*consoleprintf ("PHP | popen: file path = %s, mode = %s\n", filePath, type);*/
if (!filePath)
return NULL;
/* Set pipe mode according to type -- for now allow only "r" or "w" */
if (strcmp(type, "r") == 0)
#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
mode = O_RDONLY;
#else
mode = NX_O_RDONLY;
#endif
else if (strcmp(type, "w") == 0)
#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
mode = O_WRONLY;
#else
mode = NX_O_WRONLY;
#endif
else
return NULL;
#ifdef USE_PIPE_OPEN
pipe_handle = pipe_open(filePath, mode);
/*consoleprintf ("PHP | popen: pipe_open() returned %d\n", pipe_handle);*/
if (pipe_handle == -1)
return NULL;
#elif defined(USE_MKFIFO)
pipe_handle = mkfifo(filePath, mode);
consoleprintf ("PHP | popen: mkfifo() returned %d\n", pipe_handle);
if (pipe_handle == -1)
return NULL;
#else
/*
- NetWare doesn't require first parameter
- Allowing LibC to choose the buffer size for now
*/
err = NXFifoOpen(0, filePath, mode, 0, &pipe_handle);
/*consoleprintf ("PHP | popen: NXFifoOpen() returned %d\n", err);*/
if (err)
return NULL;
#endif
/* Copy the environment variables in preparation for the spawn call */
envCount = NXGetEnvCount() + 1; /* add one for NULL */
env = (char**)NXMemAlloc(sizeof(char*) * envCount, 0);
if (!env)
return NULL;
err = NXCopyEnv(env, envCount);
consoleprintf ("PHP | popen: NXCopyEnv() returned %d\n", err);
if (err)
{
NXMemFree (env);
return NULL;
}
/* Separate commandline string into words */
consoleprintf ("PHP | popen: commandline = %s\n", commandline);
ptr = tsrm_strtok_r((char*)commandline, WHITESPACE, NULL);
ptrLen = strlen(ptr);
command = (char*)malloc(ptrLen + 1);
if (!command)
{
NXMemFree (env);
return NULL;
}
strcpy (command, ptr);
ptr = tsrm_strtok_r(NULL, WHITESPACE, NULL);
while (ptr && (argc < MAX_ARGS))
{
ptrLen = strlen(ptr);
argv[argc] = (char*)malloc(ptrLen + 1);
if (!argv[argc])
{
NXMemFree (env);
if (command)
free (command);
for (i = 0; i < argc; i++)
{
if (argv[i])
free (argv[i]);
}
return NULL;
}
strcpy (argv[argc], ptr);
argc++;
ptr = tsrm_strtok_r(NULL, WHITESPACE, NULL);
}
consoleprintf ("PHP | popen: commandline string parsed into tokens\n");
/* Setup the execution environment and spawn new process */
envSpec.esFlags = 0; /* Not used */
envSpec.esArgc = argc;
envSpec.esArgv = (void**)argv;
envSpec.esEnv = (void**)env;
envSpec.esStdin.ssType =
envSpec.esStdout.ssType = NX_OBJ_FIFO;
envSpec.esStderr.ssType = NX_OBJ_FILE;
/*
envSpec.esStdin.ssHandle =
envSpec.esStdout.ssHandle =
envSpec.esStderr.ssHandle = -1;
*/
envSpec.esStdin.ssPathCtx =
envSpec.esStdout.ssPathCtx =
envSpec.esStderr.ssPathCtx = NULL;
#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
if (mode == O_RDONLY)
#else
if (mode == NX_O_RDONLY)
#endif
{
envSpec.esStdin.ssPath = filePath;
envSpec.esStdout.ssPath = stdout;
}
else /* Write Only */
{
envSpec.esStdin.ssPath = stdin;
envSpec.esStdout.ssPath = filePath;
}
envSpec.esStderr.ssPath = stdout;
nameSpec.ssType = NX_OBJ_FIFO;
/* nameSpec.ssHandle = 0; */ /* Not used */
nameSpec.ssPathCtx = NULL; /* Not used */
nameSpec.ssPath = argv[0];
consoleprintf ("PHP | popen: environment setup\n");
err = NXVmSpawn(&nameSpec, &envSpec, 0, &newVM);
consoleprintf ("PHP | popen: NXVmSpawn() returned %d\n", err);
if (!err)
/* Get file pointer corresponding to the pipe (file) opened */
stream = fdopen(pipe_handle, type);
/* Clean-up */
if (env)
NXMemFree (env);
if (pipe_handle)
#if defined(USE_PIPE_OPEN) || defined(USE_MKFIFO)
close(pipe_handle);
#else
NXClose(pipe_handle);
#endif
if (command)
free (command);
for (i = 0; i < argc; i++)
{
if (argv[i])
free (argv[i]);
}
consoleprintf ("PHP | popen: all clean-up done, returning...\n");
return stream;
}
TSRM_API int pclose(FILE* stream)
{
int err = 0;
NXHandle_t fd = 0;
/* Get the process associated with this pipe (file) handle and terminate it */
fd = fileno(stream);
NXClose (fd);
err = fclose(stream);
return err;
}
#endif
-28
View File
@@ -1,28 +0,0 @@
/*
+----------------------------------------------------------------------+
| PHP Version 4 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2002 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| 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. |
+----------------------------------------------------------------------+
| Authors: Venkat Raghavan S <rvenkat@novell.com> |
+----------------------------------------------------------------------+
*/
#ifndef TSRM_NW_H
#define TSRM_NW_H
#include "TSRM.h"
TSRM_API FILE* popen(const char *command, const char *type);
TSRM_API int pclose(FILE* stream);
#endif
-63
View File
@@ -1,63 +0,0 @@
#include <stdio.h>
#include "tsrm_config_common.h"
#include "tsrm_strtok_r.h"
static inline int in_character_class(char ch, const char *delim)
{
while (*delim) {
if (*delim == ch) {
return 1;
}
delim++;
}
return 0;
}
char *tsrm_strtok_r(char *s, const char *delim, char **last)
{
char *token;
if (s == NULL) {
s = *last;
}
while (*s && in_character_class(*s, delim)) {
s++;
}
if (!*s) {
return NULL;
}
token = s;
while (*s && !in_character_class(*s, delim)) {
s++;
}
if (!*s) {
*last = s;
} else {
*s = '\0';
*last = s + 1;
}
return token;
}
#if 0
main()
{
char foo[] = "/foo/bar//\\barbara";
char *last;
char *token;
token = tsrm_strtok_r(foo, "/\\", &last);
while (token) {
printf ("Token = '%s'\n", token);
token = tsrm_strtok_r(NULL, "/\\", &last);
}
return 0;
}
#endif
-6
View File
@@ -1,6 +0,0 @@
#ifndef TSRM_STRTOK_R
#define TSRM_STRTOK_R
char *tsrm_strtok_r(char *s, const char *delim, char **last);
#endif
-864
View File
@@ -1,864 +0,0 @@
/*
+----------------------------------------------------------------------+
| PHP Version 4 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2002 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| 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. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Sascha Schumann <sascha@schumann.cx> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <stdio.h>
#include <limits.h>
#include <errno.h>
#include <stdlib.h>
#include <fcntl.h>
#include "tsrm_virtual_cwd.h"
#include "tsrm_strtok_r.h"
#ifdef TSRM_WIN32
#include <io.h>
#include "tsrm_win32.h"
#endif
#ifdef NETWARE
/*#include "pipe.h"*/
#include "tsrm_nw.h"
#endif
#define VIRTUAL_CWD_DEBUG 0
#include "TSRM.h"
/* Only need mutex for popen() in Windows and NetWare, because it doesn't chdir() on UNIX */
#if (defined(TSRM_WIN32) || defined(NETWARE)) && defined(ZTS)
MUTEX_T cwd_mutex;
#endif
#ifdef ZTS
static ts_rsrc_id cwd_globals_id;
#else
static virtual_cwd_globals cwd_globals;
#endif
cwd_state main_cwd_state; /* True global */
#ifndef TSRM_WIN32
#include <unistd.h>
#else
#include <direct.h>
#endif
#ifndef S_ISDIR
#define S_ISDIR(mode) ((mode) & _S_IFDIR)
#endif
#ifndef S_ISREG
#define S_ISREG(mode) ((mode) & _S_IFREG)
#endif
#ifdef TSRM_WIN32
#include <tchar.h>
#define tsrm_strtok_r(a,b,c) _tcstok((a),(b))
#define TOKENIZER_STRING "/\\"
static int php_check_dots(const char *element, int n)
{
while (n-- > 0) if (element[n] != '.') break;
return (n != -1);
}
#define IS_DIRECTORY_UP(element, len) \
(len >= 2 && !php_check_dots(element, len))
#define IS_DIRECTORY_CURRENT(element, len) \
(len == 1 && ptr[0] == '.')
#elif defined(NETWARE)
/* NetWare has strtok() (in LibC) and allows both slashes in paths, like Windows --
but rest of the stuff is like Unix */
/* strtok() call in LibC is abending when used in a different address space -- hence using
PHP's version itself for now */
/*#define tsrm_strtok_r(a,b,c) strtok((a),(b))*/
#define TOKENIZER_STRING "/\\"
#else
#define TOKENIZER_STRING "/"
#endif
/* default macros */
#ifndef IS_DIRECTORY_UP
#define IS_DIRECTORY_UP(element, len) \
(len == 2 && memcmp(element, "..", 2) == 0)
#endif
#ifndef IS_DIRECTORY_CURRENT
#define IS_DIRECTORY_CURRENT(element, len) \
(len == 1 && ptr[0] == '.')
#endif
/* define this to check semantics */
#define IS_DIR_OK(s) (1)
#ifndef IS_DIR_OK
#define IS_DIR_OK(state) (php_is_dir_ok(state) == 0)
#endif
#define CWD_STATE_COPY(d, s) \
(d)->cwd_length = (s)->cwd_length; \
(d)->cwd = (char *) malloc((s)->cwd_length+1); \
memcpy((d)->cwd, (s)->cwd, (s)->cwd_length+1);
#define CWD_STATE_FREE(s) \
free((s)->cwd);
static int php_is_dir_ok(const cwd_state *state)
{
#if !(defined(NETWARE) && defined(CLIB_STAT_PATCH))
struct stat buf;
if (stat(state->cwd, &buf) == 0 && S_ISDIR(buf.st_mode))
#else
struct stat_libc buf;
if (stat(state->cwd, (struct stat*)(&buf)) == 0 && S_ISDIR(buf.st_mode))
#endif
return (0);
return (1);
}
static int php_is_file_ok(const cwd_state *state)
{
#if !(defined(NETWARE) && defined(CLIB_STAT_PATCH))
struct stat buf;
if (stat(state->cwd, &buf) == 0 && S_ISREG(buf.st_mode))
#else
struct stat_libc buf;
if (stat(state->cwd, (struct stat*)(&buf)) == 0 && S_ISREG(buf.st_mode))
#endif
return (0);
return (1);
}
static void cwd_globals_ctor(virtual_cwd_globals *cwd_globals TSRMLS_DC)
{
CWD_STATE_COPY(&cwd_globals->cwd, &main_cwd_state);
}
static void cwd_globals_dtor(virtual_cwd_globals *cwd_globals TSRMLS_DC)
{
CWD_STATE_FREE(&cwd_globals->cwd);
}
static char *tsrm_strndup(const char *s, size_t length)
{
char *p;
p = (char *) malloc(length+1);
if (!p) {
return (char *)NULL;
}
if (length) {
memcpy(p,s,length);
}
p[length]=0;
return p;
}
CWD_API void virtual_cwd_startup(void)
{
char cwd[MAXPATHLEN];
char *result;
result = getcwd(cwd, sizeof(cwd));
if (!result) {
cwd[0] = '\0';
}
main_cwd_state.cwd = strdup(cwd);
main_cwd_state.cwd_length = strlen(cwd);
#ifdef ZTS
ts_allocate_id(&cwd_globals_id, sizeof(virtual_cwd_globals), (ts_allocate_ctor) cwd_globals_ctor, (ts_allocate_dtor) cwd_globals_dtor);
#else
cwd_globals_ctor(&cwd_globals TSRMLS_CC);
#endif
#if defined(TSRM_WIN32) && defined(ZTS)
cwd_mutex = tsrm_mutex_alloc();
#endif
}
CWD_API void virtual_cwd_shutdown(void)
{
#ifndef ZTS
cwd_globals_dtor(&cwd_globals TSRMLS_CC);
#endif
#if defined(TSRM_WIN32) && defined(ZTS)
tsrm_mutex_free(cwd_mutex);
#endif
free(main_cwd_state.cwd); /* Don't use CWD_STATE_FREE because the non global states will probably use emalloc()/efree() */
}
CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC)
{
cwd_state *state;
state = &CWDG(cwd);
if (state->cwd_length == 0) {
char *retval;
*length = 1;
retval = (char *) malloc(2);
retval[0] = DEFAULT_SLASH;
retval[1] = '\0';
return retval;
}
#ifdef TSRM_WIN32
/* If we have something like C: */
if (state->cwd_length == 2 && state->cwd[state->cwd_length-1] == ':') {
char *retval;
*length = state->cwd_length+1;
retval = (char *) malloc(*length+1);
memcpy(retval, state->cwd, *length);
retval[*length-1] = DEFAULT_SLASH;
retval[*length] = '\0';
return retval;
}
#endif
*length = state->cwd_length;
return strdup(state->cwd);
}
/* Same semantics as UNIX getcwd() */
CWD_API char *virtual_getcwd(char *buf, size_t size TSRMLS_DC)
{
size_t length;
char *cwd;
cwd = virtual_getcwd_ex(&length TSRMLS_CC);
if (buf == NULL) {
return cwd;
}
if (length > size-1) {
free(cwd);
errno = ERANGE; /* Is this OK? */
return NULL;
}
memcpy(buf, cwd, length+1);
free(cwd);
return buf;
}
/* Resolve path relatively to state and put the real path into state */
/* returns 0 for ok, 1 for error */
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path)
{
int path_length = strlen(path);
char *ptr, *path_copy;
char *tok = NULL;
int ptr_length;
cwd_state *old_state;
int ret = 0;
int copy_amount = -1;
char *free_path;
unsigned char is_absolute = 0;
#ifndef TSRM_WIN32
char resolved_path[MAXPATHLEN];
#endif
if (path_length == 0)
return (0);
#if !defined(TSRM_WIN32) && !defined(__BEOS__) && !defined(NETWARE)
if (IS_ABSOLUTE_PATH(path, path_length)) {
if (realpath(path, resolved_path)) {
path = resolved_path;
path_length = strlen(path);
}
} else { /* Concat current directory with relative path and then run realpath() on it */
char *tmp;
char *ptr;
ptr = tmp = (char *) malloc(state->cwd_length+path_length+sizeof("/"));
if (!tmp) {
return 1;
}
memcpy(ptr, state->cwd, state->cwd_length);
ptr += state->cwd_length;
*ptr++ = DEFAULT_SLASH;
memcpy(ptr, path, path_length);
ptr += path_length;
*ptr = '\0';
if (realpath(tmp, resolved_path)) {
path = resolved_path;
path_length = strlen(path);
}
free(tmp);
}
#endif
free_path = path_copy = tsrm_strndup(path, path_length);
old_state = (cwd_state *) malloc(sizeof(cwd_state));
CWD_STATE_COPY(old_state, state);
#if VIRTUAL_CWD_DEBUG
fprintf(stderr,"cwd = %s path = %s\n", state->cwd, path);
#endif
if (IS_ABSOLUTE_PATH(path_copy, path_length)) {
/* COPY_WHEN_ABSOLUTE needs to account for volume name that is unique to NetWare absolute paths */
#ifndef NETWARE
copy_amount = COPY_WHEN_ABSOLUTE;
#else
copy_amount = COPY_WHEN_ABSOLUTE(path_copy);
#endif
is_absolute = 1;
#ifdef TSRM_WIN32
} else if (IS_UNC_PATH(path_copy, path_length)) {
copy_amount = 2;
is_absolute = 1;
} else if (IS_SLASH(path_copy[0])) {
copy_amount = 2;
#endif
}
if (copy_amount != -1) {
state->cwd = (char *) realloc(state->cwd, copy_amount + 1);
if (copy_amount) {
if (is_absolute) {
memcpy(state->cwd, path_copy, copy_amount);
path_copy += copy_amount;
} else {
memcpy(state->cwd, old_state->cwd, copy_amount);
}
}
state->cwd[copy_amount] = '\0';
state->cwd_length = copy_amount;
}
ptr = tsrm_strtok_r(path_copy, TOKENIZER_STRING, &tok);
while (ptr) {
ptr_length = strlen(ptr);
if (IS_DIRECTORY_UP(ptr, ptr_length)) {
char save;
save = DEFAULT_SLASH;
#define PREVIOUS state->cwd[state->cwd_length - 1]
while (IS_ABSOLUTE_PATH(state->cwd, state->cwd_length) &&
!IS_SLASH(PREVIOUS)) {
save = PREVIOUS;
PREVIOUS = '\0';
state->cwd_length--;
}
if (!IS_ABSOLUTE_PATH(state->cwd, state->cwd_length)) {
state->cwd[state->cwd_length++] = save;
state->cwd[state->cwd_length] = '\0';
} else {
PREVIOUS = '\0';
state->cwd_length--;
}
} else if (!IS_DIRECTORY_CURRENT(ptr, ptr_length)) {
state->cwd = (char *) realloc(state->cwd, state->cwd_length+ptr_length+1+1);
#ifdef TSRM_WIN32
/* Windows 9x will consider C:\\Foo as a network path. Avoid it. */
if ((state->cwd[state->cwd_length-1]!='\\' && state->cwd[state->cwd_length-1]!='/') ||
IsDBCSLeadByte(state->cwd[state->cwd_length-2])) {
state->cwd[state->cwd_length++] = DEFAULT_SLASH;
}
#elif defined(NETWARE)
/* If the token is a volume name, it will have colon at the end -- so, no slash before it */
if (ptr[ptr_length-1] != ':') {
state->cwd[state->cwd_length++] = DEFAULT_SLASH;
}
#else
state->cwd[state->cwd_length++] = DEFAULT_SLASH;
#endif
memcpy(&state->cwd[state->cwd_length], ptr, ptr_length+1);
state->cwd_length += ptr_length;
}
ptr = tsrm_strtok_r(NULL, TOKENIZER_STRING, &tok);
}
/* COPY_WHEN_ABSOLUTE needs to account for volume name that is unique to NetWare absolute paths */
#ifndef NETWARE
if (state->cwd_length == COPY_WHEN_ABSOLUTE) {
#else
if (state->cwd_length == COPY_WHEN_ABSOLUTE(state->cwd)) {
#endif
state->cwd = (char *) realloc(state->cwd, state->cwd_length+1+1);
state->cwd[state->cwd_length] = DEFAULT_SLASH;
state->cwd[state->cwd_length+1] = '\0';
state->cwd_length++;
}
if (verify_path && verify_path(state)) {
CWD_STATE_FREE(state);
*state = *old_state;
ret = 1;
} else {
CWD_STATE_FREE(old_state);
ret = 0;
}
free(old_state);
free(free_path);
#if VIRTUAL_CWD_DEBUG
fprintf (stderr, "virtual_file_ex() = %s\n",state->cwd);
#endif
return (ret);
}
CWD_API int virtual_chdir(const char *path TSRMLS_DC)
{
return virtual_file_ex(&CWDG(cwd), path, php_is_dir_ok)?-1:0;
}
CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path TSRMLS_DC) TSRMLS_DC)
{
int length = strlen(path);
char *temp;
int retval;
if (length == 0) {
return 1; /* Can't cd to empty string */
}
while(--length >= 0 && !IS_SLASH(path[length])) {
}
if (length == -1) {
/* No directory only file name */
errno = ENOENT;
return -1;
}
/* COPY_WHEN_ABSOLUTE needs to account for volume name that is unique to NetWare absolute paths */
#ifndef NETWARE
if (length == COPY_WHEN_ABSOLUTE && IS_ABSOLUTE_PATH(path, length+1)) { /* Also use trailing slash if this is absolute */
#else
if (length == COPY_WHEN_ABSOLUTE(path) && IS_ABSOLUTE_PATH(path, length+1)) { /* Also use trailing slash if this is absolute */
#endif
length++;
}
temp = (char *) tsrm_do_alloca(length+1);
memcpy(temp, path, length);
temp[length] = 0;
#if VIRTUAL_CWD_DEBUG
fprintf (stderr, "Changing directory to %s\n", temp);
#endif
retval = p_chdir(temp TSRMLS_CC);
tsrm_free_alloca(temp);
return retval;
}
CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
retval = virtual_file_ex(&new_state, path, NULL);
if (!retval) {
int len = new_state.cwd_length>MAXPATHLEN-1?MAXPATHLEN-1:new_state.cwd_length;
memcpy(real_path, new_state.cwd, len);
real_path[len] = '\0';
return real_path;
}
return NULL;
}
CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_func verify_path TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
retval = virtual_file_ex(&new_state, path, verify_path);
*filepath = new_state.cwd;
return retval;
}
CWD_API int virtual_filepath(const char *path, char **filepath TSRMLS_DC)
{
return virtual_filepath_ex(path, filepath, php_is_file_ok TSRMLS_CC);
}
CWD_API FILE *virtual_fopen(const char *path, const char *mode TSRMLS_DC)
{
cwd_state new_state;
FILE *f;
if (path[0] == '\0') { /* Fail to open empty path */
return NULL;
}
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
f = fopen(new_state.cwd, mode);
CWD_STATE_FREE(&new_state);
return f;
}
#if HAVE_UTIME
CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC)
{
cwd_state new_state;
int ret;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, filename, NULL);
ret = utime(new_state.cwd, buf);
CWD_STATE_FREE(&new_state);
return ret;
}
#endif
CWD_API int virtual_chmod(const char *filename, mode_t mode TSRMLS_DC)
{
cwd_state new_state;
int ret;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, filename, NULL);
ret = chmod(new_state.cwd, mode);
CWD_STATE_FREE(&new_state);
return ret;
}
#if !defined(TSRM_WIN32) && !defined(NETWARE)
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group TSRMLS_DC)
{
cwd_state new_state;
int ret;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, filename, NULL);
ret = chown(new_state.cwd, owner, group);
CWD_STATE_FREE(&new_state);
return ret;
}
#endif
CWD_API int virtual_open(const char *path TSRMLS_DC, int flags, ...)
{
cwd_state new_state;
int f;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
if (flags & O_CREAT) {
mode_t mode;
va_list arg;
va_start(arg, flags);
mode = (mode_t) va_arg(arg, int);
va_end(arg);
f = open(new_state.cwd, flags, mode);
} else {
f = open(new_state.cwd, flags);
}
CWD_STATE_FREE(&new_state);
return f;
}
CWD_API int virtual_creat(const char *path, mode_t mode TSRMLS_DC)
{
cwd_state new_state;
int f;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
f = creat(new_state.cwd, mode);
CWD_STATE_FREE(&new_state);
return f;
}
CWD_API int virtual_rename(char *oldname, char *newname TSRMLS_DC)
{
cwd_state old_state;
cwd_state new_state;
int retval;
CWD_STATE_COPY(&old_state, &CWDG(cwd));
virtual_file_ex(&old_state, oldname, NULL);
oldname = old_state.cwd;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, newname, NULL);
newname = new_state.cwd;
retval = rename(oldname, newname);
CWD_STATE_FREE(&old_state);
CWD_STATE_FREE(&new_state);
return retval;
}
#if !(defined(NETWARE) && defined(CLIB_STAT_PATCH))
CWD_API int virtual_stat(const char *path, struct stat *buf TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
retval = stat(new_state.cwd, buf);
CWD_STATE_FREE(&new_state);
return retval;
}
#else
CWD_API int virtual_stat(const char *path, struct stat_libc *buf TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
retval = stat(new_state.cwd, (struct stat*)buf);
CWD_STATE_FREE(&new_state);
return retval;
}
#endif
#if !defined(TSRM_WIN32) && !defined(NETWARE)
CWD_API int virtual_lstat(const char *path, struct stat *buf TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
retval = lstat(new_state.cwd, buf);
CWD_STATE_FREE(&new_state);
return retval;
}
#endif
CWD_API int virtual_unlink(const char *path TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
retval = unlink(new_state.cwd);
CWD_STATE_FREE(&new_state);
return retval;
}
CWD_API int virtual_mkdir(const char *pathname, mode_t mode TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, pathname, NULL);
#ifdef TSRM_WIN32
retval = mkdir(new_state.cwd);
#else
retval = mkdir(new_state.cwd, mode);
#endif
CWD_STATE_FREE(&new_state);
return retval;
}
CWD_API int virtual_rmdir(const char *pathname TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, pathname, NULL);
retval = rmdir(new_state.cwd);
CWD_STATE_FREE(&new_state);
return retval;
}
#ifdef TSRM_WIN32
DIR *opendir(const char *name);
#endif
CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC)
{
cwd_state new_state;
DIR *retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, pathname, NULL);
retval = opendir(new_state.cwd);
CWD_STATE_FREE(&new_state);
return retval;
}
#ifdef TSRM_WIN32
/* On Windows the trick of prepending "cd cwd; " doesn't work so we need to perform
a real chdir() and mutex it
*/
CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC)
{
char prev_cwd[MAXPATHLEN];
char *getcwd_result;
FILE *retval;
getcwd_result = getcwd(prev_cwd, MAXPATHLEN);
if (!getcwd_result) {
return NULL;
}
#ifdef ZTS
tsrm_mutex_lock(cwd_mutex);
#endif
chdir(CWDG(cwd).cwd);
retval = popen(command, type);
chdir(prev_cwd);
#ifdef ZTS
tsrm_mutex_unlock(cwd_mutex);
#endif
return retval;
}
#elif defined(NETWARE)
/* On NetWare, the trick of prepending "cd cwd; " doesn't work so we need to perform
a VCWD_CHDIR() and mutex it
*/
CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC)
{
char prev_cwd[MAXPATHLEN];
char *getcwd_result;
FILE *retval;
getcwd_result = VCWD_GETCWD(prev_cwd, MAXPATHLEN);
if (!getcwd_result) {
return NULL;
}
#ifdef ZTS
tsrm_mutex_lock(cwd_mutex);
#endif
VCWD_CHDIR(CWDG(cwd).cwd);
retval = popen(command, type);
VCWD_CHDIR(prev_cwd);
#ifdef ZTS
tsrm_mutex_unlock(cwd_mutex);
#endif
return retval;
}
#else /* Unix */
CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC)
{
int command_length;
char *command_line;
char *ptr;
FILE *retval;
command_length = strlen(command);
ptr = command_line = (char *) malloc(command_length + sizeof("cd ; ") + CWDG(cwd).cwd_length+1);
if (!command_line) {
return NULL;
}
memcpy(ptr, "cd ", sizeof("cd ")-1);
ptr += sizeof("cd ")-1;
if (CWDG(cwd).cwd_length == 0) {
*ptr++ = DEFAULT_SLASH;
} else {
memcpy(ptr, CWDG(cwd).cwd, CWDG(cwd).cwd_length);
ptr += CWDG(cwd).cwd_length;
}
*ptr++ = ' ';
*ptr++ = ';';
*ptr++ = ' ';
memcpy(ptr, command, command_length+1);
retval = popen(command_line, type);
free(command_line);
return retval;
}
#endif
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
-241
View File
@@ -1,241 +0,0 @@
/*
+----------------------------------------------------------------------+
| PHP Version 4 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2002 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| 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. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Sascha Schumann <sascha@schumann.cx> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
#ifndef VIRTUAL_CWD_H
#define VIRTUAL_CWD_H
#include "TSRM.h"
#include "tsrm_config_common.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <ctype.h>
#ifdef HAVE_UTIME_H
#include <utime.h>
#endif
#ifdef HAVE_STDARG_H
#include <stdarg.h>
#endif
#ifndef TSRM_WIN32
#include <unistd.h>
#endif
#ifdef TSRM_WIN32
#include "readdir.h"
#include <sys/utime.h>
/* mode_t isn't defined on Windows */
typedef unsigned short mode_t;
#define DEFAULT_SLASH '\\'
#define DEFAULT_DIR_SEPARATOR ';'
#define IS_SLASH(c) ((c) == '/' || (c) == '\\')
#define IS_SLASH_P(c) (*(c) == '/' || \
(*(c) == '\\' && !IsDBCSLeadByte(*(c-1))))
#define COPY_WHEN_ABSOLUTE 2
#define IS_ABSOLUTE_PATH(path, len) \
(len >= 2 && isalpha(path[0]) && path[1] == ':')
#define IS_UNC_PATH(path, len) \
(len >= 2 && IS_SLASH(path[0]) && IS_SLASH(path[1]))
#elif defined(NETWARE)
#ifdef HAVE_DIRENT_H
#include <dirent.h>
#endif
#define DEFAULT_SLASH '/'
#define DEFAULT_DIR_SEPARATOR ';'
#define IS_SLASH(c) ((c) == '/' || (c) == '\\')
#define COPY_WHEN_ABSOLUTE(path) \
(strchr(path, ':') - path + 1) /* Take the volume name which ends with a colon */
#define IS_ABSOLUTE_PATH(path, len) \
(strchr(path, ':') != NULL) /* Colon indicates volume name */
#else
#ifdef HAVE_DIRENT_H
#include <dirent.h>
#endif
#define DEFAULT_SLASH '/'
#ifdef __riscos__
#define DEFAULT_DIR_SEPARATOR ';'
#else
#define DEFAULT_DIR_SEPARATOR ':'
#endif
#define IS_SLASH(c) ((c) == '/')
#define IS_SLASH_P(c) (*(c) == '/')
#endif
#ifndef COPY_WHEN_ABSOLUTE
#define COPY_WHEN_ABSOLUTE 0
#endif
#ifndef IS_ABSOLUTE_PATH
#define IS_ABSOLUTE_PATH(path, len) \
(IS_SLASH(path[0]))
#endif
#ifdef TSRM_EXPORTS
#define CWD_EXPORTS
#endif
#ifdef TSRM_WIN32
# ifdef CWD_EXPORTS
# define CWD_API __declspec(dllexport)
# else
# define CWD_API __declspec(dllimport)
# endif
#else
#define CWD_API
#endif
typedef struct _cwd_state {
char *cwd;
int cwd_length;
} cwd_state;
typedef int (*verify_path_func)(const cwd_state *);
CWD_API void virtual_cwd_startup(void);
CWD_API void virtual_cwd_shutdown(void);
CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC);
CWD_API char *virtual_getcwd(char *buf, size_t size TSRMLS_DC);
CWD_API int virtual_chdir(const char *path TSRMLS_DC);
CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path TSRMLS_DC) TSRMLS_DC);
CWD_API int virtual_filepath(const char *path, char **filepath TSRMLS_DC);
CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_func verify_path TSRMLS_DC);
CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC);
CWD_API FILE *virtual_fopen(const char *path, const char *mode TSRMLS_DC);
CWD_API int virtual_open(const char *path TSRMLS_DC, int flags, ...);
CWD_API int virtual_creat(const char *path, mode_t mode TSRMLS_DC);
CWD_API int virtual_rename(char *oldname, char *newname TSRMLS_DC);
#if !(defined(NETWARE) && defined(CLIB_STAT_PATCH))
CWD_API int virtual_stat(const char *path, struct stat *buf TSRMLS_DC);
#else
CWD_API int virtual_stat(const char *path, struct stat_libc *buf TSRMLS_DC);
#endif
#if !defined(TSRM_WIN32) && !defined(NETWARE)
CWD_API int virtual_lstat(const char *path, struct stat *buf TSRMLS_DC);
#endif
CWD_API int virtual_unlink(const char *path TSRMLS_DC);
CWD_API int virtual_mkdir(const char *pathname, mode_t mode TSRMLS_DC);
CWD_API int virtual_rmdir(const char *pathname TSRMLS_DC);
CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC);
CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC);
#if HAVE_UTIME
CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC);
#endif
CWD_API int virtual_chmod(const char *filename, mode_t mode TSRMLS_DC);
#if !defined(TSRM_WIN32) && !defined(NETWARE)
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group TSRMLS_DC);
#endif
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path);
typedef struct _virtual_cwd_globals {
cwd_state cwd;
} virtual_cwd_globals;
#ifdef ZTS
# define CWDG(v) TSRMG(cwd_globals_id, virtual_cwd_globals *, v)
#else
# define CWDG(v) (cwd_globals.v)
#endif
/* The actual macros to be used in programs using TSRM
* If the program defines VIRTUAL_DIR it will use the
* virtual_* functions
*/
#ifdef VIRTUAL_DIR
#define VCWD_GETCWD(buff, size) virtual_getcwd(buff, size TSRMLS_CC)
#define VCWD_FOPEN(path, mode) virtual_fopen(path, mode TSRMLS_CC)
/* Because open() has two modes, we have to macros to replace it */
#define VCWD_OPEN(path, flags) virtual_open(path TSRMLS_CC, flags)
#define VCWD_OPEN_MODE(path, flags, mode) virtual_open(path TSRMLS_CC, flags, mode)
#define VCWD_CREAT(path, mode) virtual_creat(path, mode TSRMLS_CC)
#define VCWD_CHDIR(path) virtual_chdir(path TSRMLS_CC)
#define VCWD_CHDIR_FILE(path) virtual_chdir_file(path, virtual_chdir TSRMLS_CC)
#define VCWD_GETWD(buf)
#define VCWD_REALPATH(path, real_path) virtual_realpath(path, real_path TSRMLS_CC)
#define VCWD_RENAME(oldname, newname) virtual_rename(oldname, newname TSRMLS_CC)
#define VCWD_STAT(path, buff) virtual_stat(path, buff TSRMLS_CC)
#if !defined(TSRM_WIN32) && !defined(NETWARE)
#define VCWD_LSTAT(path, buff) virtual_stat(path, buff TSRMLS_CC)
#else
#define VCWD_LSTAT(path, buff) virtual_lstat(path, buff TSRMLS_CC)
#endif
#define VCWD_UNLINK(path) virtual_unlink(path TSRMLS_CC)
#define VCWD_MKDIR(pathname, mode) virtual_mkdir(pathname, mode TSRMLS_CC)
#define VCWD_RMDIR(pathname) virtual_rmdir(pathname TSRMLS_CC)
#define VCWD_OPENDIR(pathname) virtual_opendir(pathname TSRMLS_CC)
#define VCWD_POPEN(command, type) virtual_popen(command, type TSRMLS_CC)
#if HAVE_UTIME
#define VCWD_UTIME(path, time) virtual_utime(path, time TSRMLS_CC)
#endif
#define VCWD_CHMOD(path, mode) virtual_chmod(path, mode TSRMLS_CC)
#if !defined(TSRM_WIN32) && !defined(NETWARE)
#define VCWD_CHOWN(path, owner, group) virtual_chown(path, owner, group TSRMLS_CC)
#endif
#else
#define VCWD_GETCWD(buff, size) getcwd(buff, size)
#define VCWD_FOPEN(path, mode) fopen(path, mode)
#define VCWD_OPEN(path, flags) open(path, flags)
#define VCWD_OPEN_MODE(path, flags, mode) open(path, flags, mode)
#define VCWD_CREAT(path, mode) creat(path, mode)
#define VCWD_RENAME(oldname, newname) rename(oldname, newname)
#define VCWD_CHDIR(path) chdir(path)
#define VCWD_CHDIR_FILE(path) virtual_chdir_file(path, chdir)
#define VCWD_GETWD(buf) getwd(buf)
#define VCWD_STAT(path, buff) stat(path, buff)
#define VCWD_LSTAT(path, buff) lstat(path, buff)
#define VCWD_UNLINK(path) unlink(path)
#define VCWD_MKDIR(pathname, mode) mkdir(pathname, mode)
#define VCWD_RMDIR(pathname) rmdir(pathname)
#define VCWD_OPENDIR(pathname) opendir(pathname)
#define VCWD_POPEN(command, type) popen(command, type)
#if !defined(TSRM_WIN32) && !defined(NETWARE)
#define VCWD_REALPATH(path, real_path) realpath(path, real_path)
#else
#define VCWD_REALPATH(path, real_path) strcpy(real_path, path)
#endif
#if HAVE_UTIME
#define VCWD_UTIME(path, time) utime(path, time)
#endif
#define VCWD_CHMOD(path, mode) chmod(path, mode)
#if !defined(TSRM_WIN32) && !defined(NETWARE)
#define VCWD_CHOWN(path, owner, group) chown(path, owner, group)
#endif
#endif
#endif /* VIRTUAL_CWD_H */
-359
View File
@@ -1,359 +0,0 @@
/*
+----------------------------------------------------------------------+
| PHP Version 4 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2002 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| 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. |
+----------------------------------------------------------------------+
| Authors: Daniel Beulshausen <daniel@php4win.de> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <process.h>
#include <time.h>
#include "TSRM.h"
#ifdef TSRM_WIN32
#include <windows.h>
#include "tsrm_win32.h"
#ifdef ZTS
static ts_rsrc_id win32_globals_id;
#else
static tsrm_win32_globals win32_globals;
#endif
static void tsrm_win32_ctor(tsrm_win32_globals *globals TSRMLS_DC)
{
globals->process = NULL;
globals->shm = NULL;
globals->process_size = 0;
globals->shm_size = 0;
globals->comspec = _strdup((GetVersion()<0x80000000)?"cmd.exe":"command.com");
}
static void tsrm_win32_dtor(tsrm_win32_globals *globals TSRMLS_DC)
{
shm_pair *ptr;
if (globals->process) {
free(globals->process);
}
if (globals->shm) {
for (ptr = globals->shm; ptr < (globals->shm + globals->shm_size); ptr++) {
UnmapViewOfFile(ptr->addr);
CloseHandle(ptr->segment);
UnmapViewOfFile(ptr->descriptor);
CloseHandle(ptr->info);
}
free(globals->shm);
}
free(globals->comspec);
}
TSRM_API void tsrm_win32_startup(void)
{
#ifdef ZTS
ts_allocate_id(&win32_globals_id, sizeof(tsrm_win32_globals), (ts_allocate_ctor)tsrm_win32_ctor, (ts_allocate_ctor)tsrm_win32_dtor);
#else
tsrm_win32_ctor(&win32_globals TSRMLS_CC);
#endif
}
TSRM_API void tsrm_win32_shutdown(void)
{
#ifndef ZTS
tsrm_win32_dtor(&win32_globals TSRMLS_CC);
#endif
}
static process_pair *process_get(FILE *stream TSRMLS_DC)
{
process_pair *ptr;
process_pair *newptr;
for (ptr = TWG(process); ptr < (TWG(process) + TWG(process_size)); ptr++) {
if (ptr->stream == stream) {
break;
}
}
if (ptr < (TWG(process) + TWG(process_size))) {
return ptr;
}
newptr = (process_pair*)realloc((void*)TWG(process), (TWG(process_size)+1)*sizeof(process_pair));
if (newptr == NULL) {
return NULL;
}
TWG(process) = newptr;
ptr = newptr + TWG(process_size);
TWG(process_size)++;
return ptr;
}
static shm_pair *shm_get(int key, void *addr)
{
shm_pair *ptr;
shm_pair *newptr;
TSRMLS_FETCH();
for (ptr = TWG(shm); ptr < (TWG(shm) + TWG(shm_size)); ptr++) {
if (!ptr->descriptor) {
continue;
}
if (!addr && ptr->descriptor->shm_perm.key == key) {
break;
} else if (ptr->addr == addr) {
break;
}
}
if (ptr < (TWG(shm) + TWG(shm_size))) {
return ptr;
}
newptr = (shm_pair*)realloc((void*)TWG(shm), (TWG(shm_size)+1)*sizeof(shm_pair));
if (newptr == NULL) {
return NULL;
}
TWG(shm) = newptr;
ptr = newptr + TWG(shm_size);
TWG(shm_size)++;
return ptr;
}
static HANDLE dupHandle(HANDLE fh, BOOL inherit) {
HANDLE copy, self = GetCurrentProcess();
if (!DuplicateHandle(self, fh, self, &copy, 0, inherit, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE)) {
return NULL;
}
return copy;
}
TSRM_API FILE *popen(const char *command, const char *type)
{
FILE *stream = NULL;
int fno, str_len = strlen(type), read, mode;
STARTUPINFO startup;
PROCESS_INFORMATION process;
SECURITY_ATTRIBUTES security;
HANDLE in, out;
char *cmd;
process_pair *proc;
TSRMLS_FETCH();
security.nLength = sizeof(SECURITY_ATTRIBUTES);
security.bInheritHandle = TRUE;
security.lpSecurityDescriptor = NULL;
if (!str_len || !CreatePipe(&in, &out, &security, 2048L)) {
return NULL;
}
memset(&startup, 0, sizeof(STARTUPINFO));
memset(&process, 0, sizeof(PROCESS_INFORMATION));
startup.cb = sizeof(STARTUPINFO);
startup.dwFlags = STARTF_USESTDHANDLES;
startup.hStdError = GetStdHandle(STD_ERROR_HANDLE);
read = (type[0] == 'r') ? TRUE : FALSE;
mode = ((str_len == 2) && (type[1] == 'b')) ? O_BINARY : O_TEXT;
if (read) {
in = dupHandle(in, FALSE);
startup.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startup.hStdOutput = out;
} else {
out = dupHandle(out, FALSE);
startup.hStdInput = in;
startup.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
}
cmd = (char*)malloc(strlen(command)+strlen(TWG(comspec))+sizeof(" /c "));
sprintf(cmd, "%s /c %s", TWG(comspec), command);
if (!CreateProcess(NULL, cmd, &security, &security, security.bInheritHandle, NORMAL_PRIORITY_CLASS, NULL, NULL, &startup, &process)) {
return NULL;
}
free(cmd);
CloseHandle(process.hThread);
proc = process_get(NULL TSRMLS_CC);
if (read) {
fno = _open_osfhandle((long)in, _O_RDONLY | mode);
CloseHandle(out);
} else {
fno = _open_osfhandle((long)out, _O_WRONLY | mode);
CloseHandle(in);
}
stream = _fdopen(fno, type);
proc->prochnd = process.hProcess;
proc->stream = stream;
return stream;
}
TSRM_API int pclose(FILE *stream)
{
DWORD termstat = 0;
process_pair *process;
TSRMLS_FETCH();
if ((process = process_get(stream TSRMLS_CC)) == NULL) {
return 0;
}
fflush(process->stream);
fclose(process->stream);
WaitForSingleObject(process->prochnd, INFINITE);
GetExitCodeProcess(process->prochnd, &termstat);
process->stream = NULL;
CloseHandle(process->prochnd);
return termstat;
}
TSRM_API int shmget(int key, int size, int flags)
{
shm_pair *shm;
char shm_segment[26], shm_info[29];
HANDLE shm_handle, info_handle;
BOOL created = FALSE;
if (size < 0) {
return -1;
}
sprintf(shm_segment, "TSRM_SHM_SEGMENT:%d", key);
sprintf(shm_info, "TSRM_SHM_DESCRIPTOR:%d", key);
shm_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_segment);
info_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_info);
if ((!shm_handle && !info_handle)) {
if (flags & IPC_EXCL) {
return -1;
}
if (flags & IPC_CREAT) {
shm_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, shm_segment);
info_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(shm->descriptor), shm_info);
created = TRUE;
}
if ((!shm_handle || !info_handle)) {
return -1;
}
}
shm = shm_get(key, NULL);
shm->segment = shm_handle;
shm->info = info_handle;
shm->descriptor = MapViewOfFileEx(shm->info, FILE_MAP_ALL_ACCESS, 0, 0, 0, NULL);
if (created) {
shm->descriptor->shm_perm.key = key;
shm->descriptor->shm_segsz = size;
shm->descriptor->shm_ctime = time(NULL);
shm->descriptor->shm_cpid = getpid();
shm->descriptor->shm_perm.mode = flags;
shm->descriptor->shm_perm.cuid = shm->descriptor->shm_perm.cgid= 0;
shm->descriptor->shm_perm.gid = shm->descriptor->shm_perm.uid = 0;
shm->descriptor->shm_atime = shm->descriptor->shm_dtime = 0;
shm->descriptor->shm_lpid = shm->descriptor->shm_nattch = 0;
shm->descriptor->shm_perm.mode = shm->descriptor->shm_perm.seq = 0;
}
if (shm->descriptor->shm_perm.key != key || size > shm->descriptor->shm_segsz ) {
CloseHandle(shm->segment);
UnmapViewOfFile(shm->descriptor);
CloseHandle(shm->info);
return -1;
}
return key;
}
TSRM_API void *shmat(int key, const void *shmaddr, int flags)
{
shm_pair *shm = shm_get(key, NULL);
if (!shm->segment) {
return (void*)-1;
}
shm->descriptor->shm_atime = time(NULL);
shm->descriptor->shm_lpid = getpid();
shm->descriptor->shm_nattch++;
shm->addr = MapViewOfFileEx(shm->segment, FILE_MAP_ALL_ACCESS, 0, 0, 0, NULL);
return shm->addr;
}
TSRM_API int shmdt(const void *shmaddr)
{
shm_pair *shm = shm_get(0, (void*)shmaddr);
if (!shm->segment) {
return -1;
}
shm->descriptor->shm_dtime = time(NULL);
shm->descriptor->shm_lpid = getpid();
shm->descriptor->shm_nattch--;
return UnmapViewOfFile(shm->addr) ? 0 : -1;
}
TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf) {
shm_pair *shm = shm_get(key, NULL);
if (!shm->segment) {
return -1;
}
switch (cmd) {
case IPC_STAT:
memcpy(buf, shm->descriptor, sizeof(struct shmid_ds));
return 0;
case IPC_SET:
shm->descriptor->shm_ctime = time(NULL);
shm->descriptor->shm_perm.uid = buf->shm_perm.uid;
shm->descriptor->shm_perm.gid = buf->shm_perm.gid;
shm->descriptor->shm_perm.mode = buf->shm_perm.mode;
return 0;
case IPC_RMID:
if (shm->descriptor->shm_nattch < 1) {
shm->descriptor->shm_perm.key = -1;
}
return 0;
default:
return -1;
}
}
#endif
-107
View File
@@ -1,107 +0,0 @@
/*
+----------------------------------------------------------------------+
| PHP Version 4 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2002 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| 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. |
+----------------------------------------------------------------------+
| Authors: Daniel Beulshausen <daniel@php4win.de> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
#ifndef TSRM_WIN32_H
#define TSRM_WIN32_H
#include "TSRM.h"
#ifdef TSRM_WIN32
#include <windows.h>
struct ipc_perm {
int key;
unsigned short uid;
unsigned short gid;
unsigned short cuid;
unsigned short cgid;
unsigned short mode;
unsigned short seq;
};
struct shmid_ds {
struct ipc_perm shm_perm;
int shm_segsz;
time_t shm_atime;
time_t shm_dtime;
time_t shm_ctime;
unsigned short shm_cpid;
unsigned short shm_lpid;
short shm_nattch;
};
typedef struct {
FILE *stream;
HANDLE prochnd;
} process_pair;
typedef struct {
void *addr;
HANDLE info;
HANDLE segment;
struct shmid_ds *descriptor;
} shm_pair;
typedef struct {
process_pair *process;
shm_pair *shm;
int process_size;
int shm_size;
char *comspec;
} tsrm_win32_globals;
#ifdef ZTS
# define TWG(v) TSRMG(win32_globals_id, tsrm_win32_globals *, v)
#else
# define TWG(v) (win32_globals.v)
#endif
#endif
#define IPC_PRIVATE 0
#define IPC_CREAT 00001000
#define IPC_EXCL 00002000
#define IPC_NOWAIT 00004000
#define IPC_RMID 0
#define IPC_SET 1
#define IPC_STAT 2
#define IPC_INFO 3
#define SHM_R PAGE_READONLY
#define SHM_W PAGE_READWRITE
#define SHM_RDONLY FILE_MAP_READ
#define SHM_RND FILE_MAP_WRITE
#define SHM_REMAP FILE_MAP_COPY
TSRM_API void tsrm_win32_startup(void);
TSRM_API void tsrm_win32_shutdown(void);
TSRM_API FILE *popen(const char *command, const char *type);
TSRM_API int pclose(FILE *stream);
TSRM_API int shmget(int key, int size, int flags);
TSRM_API void *shmat(int key, const void *shmaddr, int flags);
TSRM_API int shmdt(const void *shmaddr);
TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf);
#endif
-9554
View File
File diff suppressed because it is too large. Load diff
-186
View File
@@ -1,186 +0,0 @@
// $Header$
// FlexLexer.h -- define interfaces for lexical analyzer classes generated
// by flex
// Copyright (c) 1993 The Regents of the University of California.
// All rights reserved.
//
// This code is derived from software contributed to Berkeley by
// Kent Williams and Tom Epperly.
//
// Redistribution and use in source and binary forms with or without
// modification are permitted provided that: (1) source distributions retain
// this entire copyright notice and comment, and (2) distributions including
// binaries display the following acknowledgement: ``This product includes
// software developed by the University of California, Berkeley and its
// contributors'' in the documentation or other materials provided with the
// distribution and in all advertising materials mentioning features or use
// of this software. Neither the name of the University nor the names of
// its contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
// WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
// This file defines FlexLexer, an abstract class which specifies the
// external interface provided to flex C++ lexer objects, and yyFlexLexer,
// which defines a particular lexer class.
//
// If you want to create multiple lexer classes, you use the -P flag
// to rename each yyFlexLexer to some other xxFlexLexer. You then
// include <FlexLexer.h> in your other sources once per lexer class:
//
// #undef yyFlexLexer
// #define yyFlexLexer xxFlexLexer
// #include <FlexLexer.h>
//
// #undef yyFlexLexer
// #define yyFlexLexer zzFlexLexer
// #include <FlexLexer.h>
// ...
#ifndef FLEXLEXER_H
// Never included before - need to define base class.
#define FLEXLEXER_H
#include <iostream.h>
extern "C++" {
struct yy_buffer_state;
typedef int yy_state_type;
class FlexLexer {
public:
virtual ~FlexLexer() { }
const char* YYText() { return yytext; }
int YYLeng() { return yyleng; }
virtual void
yy_switch_to_buffer( struct yy_buffer_state* new_buffer ) = 0;
virtual struct yy_buffer_state*
yy_create_buffer( istream* s, int size ) = 0;
virtual void yy_delete_buffer( struct yy_buffer_state* b ) = 0;
virtual void yyrestart( istream* s ) = 0;
virtual int yylex() = 0;
// Call yylex with new input/output sources.
int yylex( istream* new_in, ostream* new_out = 0 )
{
switch_streams( new_in, new_out );
return yylex();
}
// Switch to new input/output streams. A nil stream pointer
// indicates "keep the current one".
virtual void switch_streams( istream* new_in = 0,
ostream* new_out = 0 ) = 0;
int lineno() const { return yylineno; }
int debug() const { return yy_flex_debug; }
void set_debug( int flag ) { yy_flex_debug = flag; }
protected:
char* yytext;
int yyleng;
int yylineno; // only maintained if you use %option yylineno
int yy_flex_debug; // only has effect with -d or "%option debug"
};
}
#endif
#if defined(yyFlexLexer) || ! defined(yyFlexLexerOnce)
// Either this is the first time through (yyFlexLexerOnce not defined),
// or this is a repeated include to define a different flavor of
// yyFlexLexer, as discussed in the flex man page.
#define yyFlexLexerOnce
class yyFlexLexer : public FlexLexer {
public:
// arg_yyin and arg_yyout default to the cin and cout, but we
// only make that assignment when initializing in yylex().
yyFlexLexer( istream* arg_yyin = 0, ostream* arg_yyout = 0 );
virtual ~yyFlexLexer();
void yy_switch_to_buffer( struct yy_buffer_state* new_buffer );
struct yy_buffer_state* yy_create_buffer( istream* s, int size );
void yy_delete_buffer( struct yy_buffer_state* b );
void yyrestart( istream* s );
virtual int yylex();
virtual void switch_streams( istream* new_in, ostream* new_out );
protected:
virtual int LexerInput( char* buf, int max_size );
virtual void LexerOutput( const char* buf, int size );
virtual void LexerError( const char* msg );
void yyunput( int c, char* buf_ptr );
int yyinput();
void yy_load_buffer_state();
void yy_init_buffer( struct yy_buffer_state* b, istream* s );
void yy_flush_buffer( struct yy_buffer_state* b );
int yy_start_stack_ptr;
int yy_start_stack_depth;
int* yy_start_stack;
void yy_push_state( int new_state );
void yy_pop_state();
int yy_top_state();
yy_state_type yy_get_previous_state();
yy_state_type yy_try_NUL_trans( yy_state_type current_state );
int yy_get_next_buffer();
istream* yyin; // input source for default LexerInput
ostream* yyout; // output sink for default LexerOutput
struct yy_buffer_state* yy_current_buffer;
// yy_hold_char holds the character lost when yytext is formed.
char yy_hold_char;
// Number of characters read into yy_ch_buf.
int yy_n_chars;
// Points to current character in buffer.
char* yy_c_buf_p;
int yy_init; // whether we need to initialize
int yy_start; // start state number
// Flag which is used to allow yywrap()'s to do buffer switches
// instead of setting up a fresh yyin. A bit of a hack ...
int yy_did_buffer_switch_on_eof;
// The following are not always needed, but may be depending
// on use of certain flex features (like REJECT or yymore()).
yy_state_type yy_last_accepting_state;
char* yy_last_accepting_cpos;
yy_state_type* yy_state_buf;
yy_state_type* yy_state_ptr;
char* yy_full_match;
int* yy_full_state;
int yy_full_lp;
int yy_lp;
int yy_looking_for_trail_begin;
int yy_more_flag;
int yy_more_len;
int yy_more_offset;
int yy_prev_more_offset;
};
#endif
-56
View File
@@ -1,56 +0,0 @@
--------------------------------------------------------------------
The Zend Engine License, version 2.00
Copyright (c) 1999-2002 Zend Technologies Ltd. All rights reserved.
--------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, is permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
3. The names "Zend" and "Zend Engine" must not be used to endorse
or promote products derived from this software without prior
permission from Zend Technologies Ltd. For written permission,
please contact license@zend.com.
4. Zend Technologies Ltd. may publish revised and/or new versions
of the license from time to time. Each version will be given a
distinguishing version number.
Once covered code has been published under a particular version
of the license, you may always continue to use it under the
terms of that version. You may also choose to use such covered
code under the terms of any subsequent version of the license
published by Zend Technologies Ltd. No one other than Zend
Technologies Ltd. has the right to modify the terms applicable
to covered code created under this License.
5. Redistributions of any form whatsoever must retain the following
acknowledgment:
"This product includes the Zend Engine, freely available at
http://www.zend.com"
6. All advertising materials mentioning features or use of this
software must display the following acknowledgment:
"The Zend Engine is freely available at http://www.zend.com"
THIS SOFTWARE IS PROVIDED BY ZEND TECHNOLOGIES LTD. ``AS IS'' AND
ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ZEND
TECHNOLOGIES LTD. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
--------------------------------------------------------------------
-51
View File
@@ -1,51 +0,0 @@
## Process this file with automake to produce Makefile.in -*- makefile -*-
#CLEANFILES = zend_language_parser.c zend_language_parser.h zend_language_scanner.c zend_language_parser.output zend_ini_parser.c zend_ini_parser.h zend_ini_scanner.c zend_ini_parser.output
AUTOMAKE_OPTIONS=foreign
noinst_LTLIBRARIES=libZend.la
libZend_la_SOURCES=\
zend_language_parser.y zend_language_scanner.l \
zend_ini_parser.y zend_ini_scanner.l \
zend_alloc.c zend_compile.c zend_constants.c zend_dynamic_array.c \
zend_execute.c zend_execute_API.c zend_highlight.c zend_llist.c \
zend_opcode.c zend_operators.c zend_ptr_stack.c zend_stack.c \
zend_variables.c zend.c zend_API.c zend_extensions.c zend_hash.c \
zend_list.c zend_indent.c zend_builtin_functions.c zend_sprintf.c \
zend_ini.c zend_qsort.c zend_objects.c zend_object_handlers.c \
zend_object_API.c
libZend_la_LDFLAGS =
libZend_la_LIBADD = @ZEND_EXTRA_LIBS@
# automake isn't too clever about "non-standard" use of lex and yacc
$(libZend_la_OBJECTS): zend_language_parser.h
zend_ini_scanner.lo: zend_ini_parser.h
# Language parser/scanner rules
zend_language_scanner.c: $(srcdir)/zend_language_scanner.l
$(LEX) -Pzend -S$(srcdir)/flex.skl -o$@ -i $(srcdir)/zend_language_scanner.l
zend_language_parser.h: zend_language_parser.c
zend_language_parser.c: $(srcdir)/zend_language_parser.y
$(YACC) -p zend -v -d $(srcdir)/zend_language_parser.y -o zend_language_parser.c
# INI parser/scanner rules
zend_ini_parser.c: $(srcdir)/zend_ini_parser.y
$(YACC) -p ini_ -v -d $(srcdir)/zend_ini_parser.y -o zend_ini_parser.c
zend_ini_scanner.c: $(srcdir)/zend_ini_scanner.l
$(LEX) -Pini_ -S$(srcdir)/flex.skl -o$@ -i $(srcdir)/zend_ini_scanner.l
zend_ini_parser.h: zend_ini_parser.c
depend:
zend_execute.lo: $(srcdir)/zend_execute.c
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(INLINE_CFLAGS) -c $(srcdir)/zend_execute.c
-193
View File
@@ -1,193 +0,0 @@
Creating an object
------------------
Object can be created in the following ways:
1. As a result of a function call. E.g.:
$foo = create_new_foo("parameter");
$foo->run();
The function should create a new zval, create new object and get the
handle for it, set handle and handler table as needed. Note that the
handle is the only ID of the object, so it should be enough to
identify it.
2. Overriding create_object handler for class. E.g.:
$foo = new Java("some.Class.here", "parameter");
$foo->run();
The create_object handler function should create a new zval, create
new object and get the handle for it, set handle and handler table as
needed, and also provide constructor method that would handle
constructor call. The get_constructor handler table entry should be
used for that. Do not rely class entry's constructor, unless you refer
to it from get_constructor handler.
Object maintenance
------------------
The handlers add_ref and del_ref are called when a new zval referring
to the object is created. This does not create a new object - both
zvals still refer to the same object.
clone_obj handler should create a new object, identical to an old one,
but being a separate entity.
delete_obj should destroy an object, all references to it become
invalid.
Object access - read
--------------------
read_property is used to read object's property. This value is not
meant to be changed. The handler returns zval * with the value.
Object access - write
---------------------
write_property is used to directly write object's property by
name. This handler is used to assign property variables or to change them
in operations like += or ++ (unless get_property_zval_ptr is also set).
get_property_zval_ptr is used to obtain pointer to modifyable zval for
operations like += or ++. This should be used only if your object model
stores properties as real zval's that can be modified from outside.
Otherwise this handler should be NULL and the engine will use
read_property and write_property instead.
get_property_ptr is used to obtain zval ** for future writing to
it. If your object properties are stored as zval*, return real place
where the property is stored. If the aren't, the best way is to create
proxy object and handle it via get and set methods (see below).
This method is meant to be used for send-by-reference and assign-by-reference
use of object properties. If you don;t want to implement property
referencing for your objects, you can set this handler to NULL.
get and set handlers are used when engine needs to access the object
as a value. E.g., in the following situation:
$foo =& $obj->bar;
$foo = 1;
if $foo is an object (e.g., proxy object from get_property_ptr) it
would be accessed using write handler.
Object access - method call
---------------------------
get_method handler is used to find method description by name. It
should set right type, function name and parameter mask for the
method. If the type is ZEND_OVERLOADED_FUNCTION, the method would be
called via call_method handler, otherwise it would be called with
standard Zend means.
get_constructor performs the same function as get_method, but for the
object constructor.
call_method handler is used to perform method call. Parameters are
passed like to any other Zend internal function.
Object - comparison
-------------------
Objects can be compared via compare_objects handler. This is used with
== operation, === compares objects by handles, i.e., return true if
and only if it's really the same object. Note that objects from
different object types (i.e., having different handlers) can not be
compared.
Objects - reflection
--------------------
get_class_name is used to retrieve class name of the object. No other
reflection functions are currently implemented.
Objects - data structures and handlers
---------------------------------------
The object is represented by the following structure:
struct _zend_object_value {
zend_object_handle handle;
zend_object_handlers *handlers;
};
handle is an ID of the object among the objects of the same type (not
class!). The type of the object and how it behaves is determined by
the handler table.
typedef struct _zend_object_handlers {
zend_object_add_ref_t add_ref;
zend_object_del_ref_t del_ref;
zend_object_delete_obj_t delete_obj;
zend_object_clone_obj_t clone_obj;
zend_object_read_property_t read_property;
zend_object_write_property_t write_property;
zend_object_get_property_ptr_t get_property_ptr;
zend_object_get_property_zval_ptr_t get_property_zval_ptr;
zend_object_get_t get;
zend_object_set_t set;
zend_object_has_property_t has_property;
zend_object_unset_property_t unset_property;
zend_object_get_properties_t get_properties;
zend_object_get_method_t get_method;
zend_object_call_method_t call_method;
zend_object_get_constructor_t get_constructor;
zend_object_get_class_entry_t get_class_entry;
zend_object_get_class_name_t get_class_name;
zend_object_compare_t compare_objects;
} zend_object_handlers;
See zend_object_handlers.h for prototypes. All objects are passed as zval's.
Handlers explained:
add_ref - called when a copy of the object handle is created.
del_ref - called when a copy of the object handle is destroyed.
delete_obj - called when an object needs to be destroyed.
clone_obj - called when a new object identical to an old one should be
created (unlike Zend Engine 1, this never happens unless explicitly
asked for).
read_property - returns zval *, containing the value of the
property. Is used when value of the property should be retrieved for
reading.
write_property - assigns value to certain property of the object.
get_property_zval_ptr - retrieves zval** for being directly modified by
the engine. If your properties are not zval's, don't define it.
get_property_ptr - retrieves zval** for the property of the value, to
be used for read and write. If object properties are not zval's
natively, this method should create and return proxy object for use
with get and set methods.
get - retrieves zval* for object contents. To be used mainly with
proxy objects from get_property_ptr, but also may be used for
convert_to_* functions.
set - sets value for object contents. To be used mainly with
proxy objects from get_property_ptr.
has_property - checks if the object has certain property set.
unset_property - removes value for the property of the object
get_method - retrieves description of the method
call_method - calls the method (parameters should be put on stack like
for any other PHP internal function).
get_constructor - get description for the object constructor method
get_class_entry - should return the class entry
get_class_name - get the name of the class the object belongs to
compare_objects - compares if two objects are equal
-136
View File
@@ -1,136 +0,0 @@
Revamped object model using object handles
===========================================
Background
----------
In the Zend Engine 1.0 (and its predecessor the PHP 3 scripting
engine) the object model's design is that instantiated objects are
language values. This means that when programmers are performing
operations, such variable assignment and passing parameters to
functions, objects are handled very similarly to the way other
primitive types are handled such as integers and strings.
Semantically this means that the whole object is being copied. The
approach Java takes is different where one refers to objects by handle
and not by value (one can think of a handle as an objects' ID).
Need
----
Unfortunately, the approach taken up to now has severely limited the
Zend Engine's object oriented model, both feature and simplicity
wise. One of the main problems with the former approach is that object
instantiation and duplication is very hard to control, a problem which
can not only lead to inefficient development but also often to strange
run-time behavior. Changing the object model to a handle oriented
model will allow the addressing of many needs such as destructors,
de-referencing method return values, tight control of object
duplication and more.
Overview
--------
The proposed object model is very much influenced by the Java
model. In general, when you create a new object you will be getting a
handle to the object instead of the object itself. When this handle is
sent to functions, assigned and copied it is only the handle which is
copied/sent/assigned. The object itself is never copied nor
duplicated. This results in all handles of this object to always point
at the same object making it a very consistent solution and saving
unnecessary duplication and confusing behavior.
Functionality
-------------
After this change the basic use of objects will be almost identical to
previous versions of the scripting engine. However, you won't bump
into awkward and confusing copying & destructing of objects. In order
to create and use a new object instance you will do the following:
$object = new MyClass(); $object->method();
The previous code will assign $object the handle of a new instance of
the class MyClass and call one of its methods.
Consider the following code:
1 class MyClass
2 {
3 function setMember($value)
4 {
5 $this->member = $value;
6 }
7
8 function getMember()
9 {
10 return $this->member;
11 }
12 }
13
14 function foo($obj)
15 {
16 $obj->setMember("foo");
17 }
18
19 $object = new MyClass();
20 $object->setMember("bar");
21 foo($object);
22 print $object->getMember();
Without the new Java-like handles, at line 20 the objects' data member
member is set to the string value of "bar". Because of the internal
representation of objects in the Zend Engine 1.0, the object is marked
as a reference, and when it is sent by value to the function foo, it
is duplicated (!). Therefore, the call to foo() on line 21 will
result in the $obj->setMember("foo") call being called on a duplicate
of $object. Line 22 will then result in "bar" being printed.
This is how the scripting engine has worked until today. Most
developers are probably unaware of the fact that they aren't always
talking to the same object but often duplicates; others may have
realized this can usually be solved by always passing objects by
reference (unless a replica is actually desired, which is uncommon).
The new object model will allow for a much more intuitive
implementation of the code. On line 21, the object's handle (ID) is
passed to foo() by value. Inside foo(), the object is fetched
according to this handle and, therefore, the setMember() method is
called on the originally instantiated object and not a copy. Line 22
will therefore result in "foo" being printed. This approach gives
developers tighter control of when objects are created and duplicated.
An additional not-as-important benefit is that the object handle will
be passed to foo() by value, which most probably will also save
unnecessary duplication of the value containing the ID itself and thus
additionally improving run-time performance.
This was just a simple description of why the new object model solves
awkward behavior and makes object handling much easier, intuitive and
efficient. The importance of this change goes far beyond what is
mentioned in this section as you will see in further sections which
describe new features with a majority of them being based on this
change.
Compatibility Notes
--------------------
Many PHP programmers aren't even aware of the copying quirks of the
current object model and, therefore, there is a relatively good chance
that the amount of PHP applications that will work out of the box or
after a very small amount of modifications would be high.
To simplify migration, version 2.0 will support an optional
'auto-clone' feature, which will perform a cloning of the object
whenever it would have been copied in version 1.0. Optionally, it
will also be possible to request that the engine will emit an E_NOTICE
message whenever such an automatic clone occurs, in order to allow
developers to gradually migrate to the version 2.0-style behavior
(without automatic clones).
Dependencies
------------
The new object model is not dependent on other features. Many of the
other Zend Engine 2.0 features, such as the $foo->bar()->barbara()
syntax, destructors and others completely rely on this new object
model.
-169
View File
@@ -1,169 +0,0 @@
Title: Zend 2.0 Namespaces
Version: $Revision$
Status: draft
Maintainer: Stig S. Bakken <ssb@fast.no>
Created: 2001-09-08
Modified: 2001-09-08
1. Background/Need
==================
PHP and Zend 1.0 have come to a point where a lot of reusable code is
being written; from simple functions and classes to entire application
frameworks. It is becoming increasingly difficult to avoid symbol
name collisions with the current scoping methods.
The symbol scopes available in Zend 1.0 are the global scope, the
class scope and the function scope. All scopes but classes may
contain variables, only the class and global scopes may contain
functions, while only the global scope may contain constants and
classes. This means that all of Zend 1.0's scoping methods are
inherently limited for solving symbol name collision problems.
2. Overview
===========
Namespaces in Zend 2.0 provide a way to manage the symbol collision
problem by making it possible to define multiple symbol tables able to
contain all types of symbols. Zend will get the notion of a current
namespace, defaulting to the current global one. The current name
space may be changed on a file-by-file basis. Symbols in other name
spaces than the current one may be referenced using a new namespace
operator. It will be possible to "import" symbols from one namespace
into another.
3. Functionality
================
3.1. Namespace Syntax
=====================
The namespace operator ":" is used to refer to symbols in other
namespaces than the current one:
Class: Namespace:class
Function: Namespace:function
Static method: Namespace:class::method
Variable: $Namespace:variable
Constant: Namespace:CONSTANT
Class variable: $Namespace:class::variable
To refer to symbols in the global namespace, symbols are prefixed with
only the namespace operator:
Class: :class
Function: :function
Static method: :class::method
Variable: $:variable
Constant: :CONSTANT
Class variable: $:class::variable
Note: $:variable will effectively be just another syntax for
$GLOBALS['variable'].
A namespace may have a name containing a ":", it is always the last
":" character in the symbol qualifier that is the actual namespace
operator:
Class: Name:Space:class
Function: Name:Space:function
Static method: Name:Space:class::method
Variable: $Name:Space:variable
Constant: Name:Space:CONSTANT
Class variable: $Name:Space:class::variable
(Here, the ":" between "Name" and "Space" is part of the name, it is
the one after "Space" that is the namespace operator.)
3.2. Defining Namespaces
========================
Individual files may define a namespace that will apply to the entire
file. If no "namespace" operator occurs in the file, it will be in
the global namespace:
1 namespace HTML;
2
3 class Form {
4 function Form() {
5 // constructor
6 }
7 // ...
8 }
Or with the "nested" name syntax:
1 namespace HTML:Form;
2
3 class Image {
4 var $src;
5 function Image($src) {
6 $this->src = $src;
7 }
8 // ...
9 }
Code executed within the "HTML" namespace may refer to the Form class
as just "Form". Code executed from within other namespaces has to
refer to it as "HTML:Form". The "namespace" statement must occur
before any other statements in the file.
# [ssb 2001-09-08]:
# Should it be possible to "add" symbols to a namespace by including a
# second file with the same namespace statement?
3.3. Importing Symbols
======================
It is possible to import symbols from another namespace into the
current one with the "import" statement:
import * from HTML; // all symbols
import Form from HTML; // single symbols
import Form,Table from HTML; // multiple symbols
There is a potential for name clashes between symols of different
types that have the same qualifier syntax. These are resolved in this
order: class, function, constant.
Optionally, the symbol type may be explicitly given to import (as
"class", "function", "variable" or "constant"):
import class Form from HTML;
And finally, you may import all symbols of a given type:
import constant * from HTML:Table;
The namespace with its symbols must already be defined before using
"import".
4. Compatibility Notes
======================
Old code that does not take advantage of namespaces will run without
modifications.
5. Dependencies
===============
The class variable syntax depends on this class variables being
implemented in the new ZE2 object model.
6. Acknowledgements
===================
Andi Gutmans <andi@zend.com> and Zeev Suraski <zeev@zend.com> for
initial ZE2 namespaces proposal
Dean Hall <php@apt7.com> for the initial symbol qualification syntax
-72
View File
@@ -1,72 +0,0 @@
Title: Loose type requirements for functions
Version: $Revision$
Status: draft
Maintainer: Brian Moon <brianm@dealnews.com>
Created: 2001-09-17
Modified: 2001-09-17
1. Background/Need
==================
Many internal function of PHP will reject parameters because of their
type (the array and variable function come to mind). For userland
this is not an easy task as there is no uniform way to do it. An
addition to the engine for requiring loose types would allow
delevopers to know that the data passed to their functions is of the
correct type and reduce the need for duplicating the same code in
every function to check for the type of data.
2. Overview
===========
Loose typing mostly means evaluating the contents of the variable and
not the type of the variable itself. The requirements for this would
and should work much like several of the is_* functions do now.
The typing of parameters would be optional and those not typed would
simply continue to be treated as they are now.
3. Functionality
================
3.1. Allowed Types
==================
Only loose types should be needed to ensure the data is usable by the
function. Duplicating the functionallity of is_scalar, is_resource,
is_array and is_object should give developers all the information they
need to use a variable correctly.
3.2. Syntax
===========
The current function syntax should be expanded to allow typing of
variables inline in a C style.
function foo ($var){
}
could be changed to require an array such as:
function foo (array $var){
}
3.3. Errors
===========
Mis-matches in type should be reported as fatal errors and should halt
the execution of a script as that function can not be run and code
following could not reliably run.
4. Compatibility Notes
======================
Old code that does not take advantage of this will run without
modifications.
-107
View File
@@ -1,107 +0,0 @@
Title: Delegation
(a/k/a. Object-Based Inheritance)
Version: $Revision$
Status: draft
Maintainer: Sebastian Bergmann <sb@sebastian-bergmann.de>
Dynamic Delegation
Syntax / Example
<?php
class aDelegatee {
function doSomething() {
echo 'hubu';
}
}
class anotherDelegatee {
function doSomething() {
echo 'tubu';
}
}
class Foo {
delegatee $bar;
function setDelegatee($delegatee) {
$this->delegatee = $delegatee;
}
}
$foo = new Foo;
$foo->setDelegatee(new aDelegatee);
$foo->doSomething(); /* prints "hubu" */
$foo->setDelegatee(new anotherDelegatee);
$foo->doSomething(); /* prints "tubu" */
?>
Semantics / Synopsis
The "Foo" class may use all methods available in "$bar" as if they
where locally defined or inherited from a superclass. The essential
difference is that by assigning another object to "$bar" it is
possible to dynamically switch between different implementations for
these methods.
Fixed Delegation
Syntax / Example
<?php
class aDelegatee {
function doSomething() {
echo 'hubu';
}
}
class Foo {
final delegatee $bar = new aDelegatee;
}
$foo = new Foo;
$foo->doSomething(); /* prints "hubu" */
?>
Semantics / Synopsis
The "Foo" class may use all methods available in "$bar" as if they
where locally defined or inherited from a superclass. The difference
to the dynamic delegation is that once the delegatee object is set,
it cannot be changed.
Default Delegation
Syntax / Example
<?php
class Foo {
function __delegate($name, $parameters = array()) {
echo $name;
}
}
$foo = new Foo;
$foo->bar(); /* prints "bar" */
?>
Semantics / Synopsis
If a class has a __delegate() method, it is called whenever a
method on an object of this class is called that is
* Not defined in the class.
* Not provided by a delegatee object.
The __delegate() method is called with the name and parameters
of the method call.
This supersedes / obsoletes similar functionality introduced in
Zend Engine 1 by ext/overload.
-669
View File
@@ -1,669 +0,0 @@
Changes in the Zend Engine 2.0
* New Object Model.
The Zend Engine's handling of objects has been completely
changed in order to allow for new features, but also to increase
its performance.
Objects were handled in previous versions like primitive types
(for instance integers and strings). The drawback of this method
is, that semantically the whole object was copied when a
variable was assigned or parameters were passed to a method. The
new approach refers to objects by handle and not by value (one
can think of a handle as an object's ID).
Many PHP programmers aren't even aware of the copying quirks of
the old object model and, therefore, there is a relatively good
chance that the amount of PHP applications that will work out of
the box or after a very small amount of modifications would be
high.
* Private and Protected Members.
The Zend Engine 2.0 introduces private and protected member variables.
Note that for performance reasons no error message is emitted in
case of an illegal access to a private or protectecd member variable.
Example:
<?php
class MyClass {
private $Hello = "Hello, World!\n";
protected $Bar = "Hello, Foo!\n";
protected $Foo = "Hello, Bar!\n";
function printHello() {
print "MyClass::printHello() ".$this->Hello;
print "MyClass::printHello() ".$this->Bar;
print "MyClass::printHello() ".$this->Foo;
}
}
class MyClass2 extends MyClass {
protected $Foo;
function printHello() {
MyClass::printHello(); /* Should print */
print "MyClass2::printHello() ".$this->Hello; /* Shouldn't print out anything */
print "MyClass2::printHello() ".$this->Bar; /* Shouldn't print (not declared)*/
print "MyClass2::printHello() ".$this->Foo; /* Should print */
}
}
$obj = new MyClass();
print $obj->Hello; /* Shouldn't print out anything */
print $obj->Bar; /* Shouldn't print out anything */
print $obj->Foo; /* Shouldn't print out anything */
$obj->printHello(); /* Should print */
$obj = new MyClass2();
print $obj->Hello; /* Shouldn't print out anything */
print $obj->Bar; /* Shouldn't print out anything */
print $obj->Foo; /* Shouldn't print out anything */
$obj->printHello();
?>
Protected member variables can be accessed in classes extending the class
they are declared in, whereas private member variables can only be accessed
by the class they belong to.
Note: Protected member variables have to be declared in every class they
are used!
* Object Cloning.
The Zend Engine 1.0 offered no way a user could decide what copy
constructor to run when an object is duplicated. During
duplication, the Zend Engine 1.0 did a bitwise copy making an
identical replica of all the object's properties.
Creating a copy of an object with fully replicated properties is
not always the wanted behavior. A good example of the need for
copy constructors, is if you have an object which represents a
GTK window and the object holds the resource of this GTK window,
when you create a duplicate you might want to create a new
window with the same properties and have the new object hold the
resource of the new window. Another example is if your object
holds a reference to another object which it uses and when you
replicate the parent object you want to create a new instance of
this other object so that the replica has its own separate copy.
An object copy is created by calling the object's __clone()
method.
Example:
<?php
$copy_of_object = $object->__clone();
?>
When the developer asks to create a new copy of an object, the
Zend Engine will check if a __clone() method has been defined or
not. If not, it will call a default __clone() which will copy
all of the object's properties. If a __clone() method is
defined, then it will be responsible to set the necessary
properties in the created object. For convenience, the engine
will supply a function that imports all of the properties from
the source object, so that they can start with a by-value
replica of the source object, and only override properties that
need to be changed. [The function hasn't been implemented yet]
Example:
<?php
class MyCloneable {
static $id = 0;
function MyCloneable() {
$this->id = self::$id++;
}
function __clone() {
$this->name = $clone->name;
$this->address = 'New York';
$this->id = self::$id++;
}
}
$obj = new MyCloneable();
$obj->name = 'Hello';
$obj->address = 'Tel-Aviv';
print $obj->id . "\n";
$obj = $obj->__clone();
print $obj->id . "\n";
print $obj->name . "\n";
print $obj->address . "\n";
?>
* Nested classes (namespaces).
The Zend Engine 1.0 provided only three scopes: the global
scope, the class scope and the function scope. All scopes but
classes could contain variables, only the class and global
scopes could contain functions, while only the global scope
could contain constants and classes. This means that all of the
Zend Engine 1.0's scoping methods were inherently limited for
solving symbol name collision problems.
The Zend Engine 2.0 introduces the concept of nested classes
to solve the symbol collision problem by making it possible to
define multiple symbol tables able to contain all types of
symbols. The Zend Engine is aware of a current class,
defaulting to the global scope. Each class can contain it's
own set of constants, functions and static variables. In order
to access a class's local symbols you can use the self:: class
accessor, for example, you can do self::$my_static_name = "Hello".
You can also use the class's name such as
MyClass::$my_static_name = "Hello". WIth both constants and
functions, if you don't specify a class context the current class
will be searched first and if the search fails then the global
scope will be searched. If you want to force PHP to only check the
global scope you can use the main:: accessor. For example,
main::strlen() to make sure you're calling the strlen() in the main
scope. You will only need to worry about this if you are defining
methods which have the same name as global functions. For
constants you can use the same notation such as self::MY_CONSTANT
or main::MY_CONSTANT.
Sometimes you will not want to access constants, functions or classes
via the class accessor (i.e. MyClass::) because you use them very
often and are an extremely slow typist. In this case, you can import
functions, classes and constants from classes with the import keyword.
It's quite self explanatory and there are a few examples below.
* Classes may contain classes.
Example:
<?php
class DB::MySQL {
var $host = '';
function db_connect($user) {
print "Connecting to MySQL database '$this->host' as $user\n";
}
}
class DB::Oracle {
var $host = 'localhost';
function db_connect($user) {
print "Connecting to Oracle database '$this->host' as $user\n";
}
}
$MySQL_obj = new DB::MySQL();
$MySQL_obj->db_connect('Susan');
$Oracle_obj = new DB::Oracle();
$Oracle_obj->db_connect('Barbara');
?>
* Classes may contain constants.
Example:
<?php
class foo {
const hey = 'hello';
}
print foo::hey;
?>
* Current namespace's symbol tables are searched first for
constants and functions.
Example:
The following code prints "foobar", not "foo", because
the class constant overrides the "global" constant of
the same name.
<?php
define('foo', 'bar');
class FooClass {
const foo = 'foobar';
function printFoo() {
print foo;
}
}
?>
* In the scope of a function, the current namespace is that
of the containing class/namespace.
Example:
<?php
class FooClass {
function foo() {
$this->bar();
bar();
}
function bar() {
print "foobar\n";
}
}
$obj = new FooClass;
$obj->foo();
$obj->foo();
?>
This prints "foobar" two times, since a bar() method exists
in the current namespace.
* It is possible to "import" symbols from one namespace into
another.
Example:
<?php
class MyClass {
class MyClass2 {
function hello() {
print "Hello, World in MyClass2\n";
}
}
function hello() {
print "Hello, World\n";
}
}
import function hello, class MyClass2 from MyClass;
MyClass2::hello();
hello();
?>
Example:
<?php
class MyOuterClass {
class MyInnerClass {
function func1() {
print "func1()\n";
}
function func2() {
print "func2()\n";
}
}
}
import class * from MyOuterClass;
import function func2 from MyOuterClass::MyInnerClass;
MyInnerClass::func1();
func2();
?>
Example:
<?php
class MyOuterClass {
const Hello = "Hello, World\n";
}
import const Hello from MyOuterClass;
print Hello;
?>
Old code that does not take advantage of namespaces will run
without modifications.
* Unified Constructors.
The Zend Engine allows developers to declare constructor methods
for classes. Classes which have a constructor method call this
method on each newly-created object, so it is suitable for any
initialization that the object may need before it can be used.
With the Zend Engine 1.0, constructor methods were class methods
that had the same name as the class itself. Since it is very
common to call parent constructors from derived classes, the way
the Zend Engine 1.0 worked made it a bit cumbersome to move
classes around in a large class hierarchy. If a class is moved
to reside under a different parent, the constructor name of that
parent changes as well, and the code in the derived class that
calls the parent constructor has to be modified.
The Zend Engine 2.0 introduces a standard way of declaring
constructor methods by calling them by the name __construct().
Example:
<?php
class BaseClass {
function __construct() {
print "In BaseClass constructor\n";
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "In SubClass constructor\n";
}
}
$obj = new BaseClass();
$obj = new SubClass();
?>
For backwards compatibility, if the Zend Engine 2.0 cannot find
a __construct() function for a given class, it will search for
the old-style constructor function, by the name of the class.
Effectively, it means that the only case that would have
compatibility issues is if the class had a method named
__construct() which was used for different semantics.
* Destructors.
Having the ability to define destructors for objects can be very
useful. Destructors can log messages for debugging, close
database connections and do other clean-up work.
No mechanism for object destructors existed in the Zend Engine
1.0, although PHP had already support for registering functions
which should be run on request shutdown.
The Zend Engine 2.0 introduces a destructor concept similar to
that of other object-oriented languages, such as Java: When the
last reference to an object is destroyed the object's
destructor, which is a class method name __destruct() that
recieves no parameters, is called before the object is freed
from memory.
Example:
<?php
class MyDestructableClass {
function __construct() {
print "In constructor\n";
$this->name = 'MyDestructableClass';
}
function __destruct() {
print 'Destroying ' . $this->name . "\n";
}
}
$obj = new MyDestructableClass();
?>
Like constructors, parent destructors will not be called
implicitly by the engine. In order to run a parent destructor,
one would have to explicitly call parent::__destruct() in the
destructor body.
* Exceptions.
The Zend Engine 1.0 had no exception handling. The Zend Engine 2.0
introduces a exception model similar to that of other programming
languages.
Example:
<?php
class MyException {
function __construct($exception) {
$this->exception = $exception;
}
function Display() {
print "MyException: $this->exception\n";
}
}
class MyExceptionFoo extends MyException {
function __construct($exception) {
$this->exception = $exception;
}
function Display() {
print "MyException: $this->exception\n";
}
}
try {
throw new MyExceptionFoo('Hello');
}
catch (MyException $exception) {
$exception->Display();
}
?>
Old code that has no user-defined functions 'catch', 'throw' and
'try' will run without modifications.
* Dereferencing objects returned from functions.
Example:
<?php
class Circle {
function draw() {
print "Circle\n";
}
}
class Square {
function draw() {
print "Square\n";
}
}
function ShapeFactoryMethod($shape) {
switch ($shape) {
case 'Circle': return new Circle();
case 'Square': return new Square();
}
}
ShapeFactoryMethod('Circle')->draw();
ShapeFactoryMethod('Square')->draw();
?>
* Static member variables of static classes can now be
initialized.
Example:
<?php
class foo {
static $my_static = 5;
}
print foo::$my_static;
?>
* Parameters that are passed by reference to a function
may now have default values.
Example:
<?php
function my_function(&$var = null) {
if ($var === null) {
die('$var needs to have a value');
}
}
?>
* Built-In Backtracing.
Example:
<?php
$backtrace = debug_backtrace();
foreach ($backtrace as $step) {
$class = isset($step['class']) ? $step['class'] . '::' : '';
printf(
"%s [%s:%s]\n",
$step['function'],
$step['file'],
$step['line']
);
}
?>
* __autoload(). TBD.
Changes in the Zend Engine 1.0
The Zend Engine was designed from the ground up for increased speed,
reduced memory consumption and more reliable execution. We dare say
it meets all of these goals and does so pretty well. Beyond that,
there are several improvements in the language engine features:
* References support.
$foo = &$a; would make $foo and $a be two names to the same
variable. This works with arrays as well, on either side; e.g.,
$foo = &$a[7]; would make $foo and $a[7] be two names to the
same variable. Changing one would change the other and vice
versa.
* Object overloading support.
This feature allows various OO libraries to use the OO notation
of PHP to access their functionality. Right now, no use is made
of that feature, but we'd have a COM module ready by the time
PHP 4.0 is released. A CORBA module would probably follow.
* include() and eval() are now functions, and not statements.
That means they return a value. The default return value from
include() and eval() is 1, so that you can do if (include())
without further coding. The return value may be changed by
returning a value from the global scope of the included file or
the evaluated string. For example, if 'return 7;' is executed in
the global scope of foo.inc, include('foo.inc') would evaluate
to 7.
* Automatic resource deallocation.
Several people have been bitten by the fact that PHP 3.0 had no
concept of reference counting. The Zend Engine adds full
reference counting for every value in the system, including
resources. As soon as a resource is no longer referenced from
any variable, it is automatically destroyed to save memory and
resources. The most obvious example for the advantage in this is
a loop that has an SQL query inside it, something like '$result
= sql_query(...);'. In PHP 3.0, every iteration resulted in
another SQL result-set allocated in the memory, and all of the
result sets weren't destroyed until the end of the script's
execution. With the Zend Engine, as soon as we overwrite an old
result set with a new one, the old result set which is no longer
referenced, is destroyed.
* Full support for nesting arrays and objects within each other,
in as many levels as you want.
* true and false are now constants of type boolean.
Comparing any other value to them would convert that value to a
boolean first, and conduct the comparison later. That means, for
example, that 5==true would evaluate to true (in PHP 3.0, true
was nothing but a constant for the integer value of 1, so
5==true was identical to 5==1, which was false).
* Runtime binding of function names.
This complex name has a simple explanation - you can now call
functions before they're declared!
* Added here-docs support.
* Added foreach.
Two syntaxes supported:
foreach(array_expr as $val) statement
foreach(array_expr as $key => $val) statement
* A true unset() implementation.
A variable or element that is unset(), is now sent to oblivion
in its entirely, no trace remains from it.
* Output buffering support.
Use ob_start() to begin output buffering, ob_end_flush() to end
buffering and send out the buffered contents, ob_end_clean() to
end buffering without sending the buffered contents, and
ob_get_contents() to retreive the current contents of the output
buffer. Header information (header(), content type, cookies) are
not buffered. By turning on output buffering, you can
effectively send header information all throughout your file,
regardless of whether you've emitted body output or not.
* Full variable reference within quoted strings:
${expr} - full indirect reference support for scalar
variables
{variable} - full variable support
For example:
$foo[5]['bar'] = 'foobar';
print "{$foo[5]["bar"]}"; // would print "foobar"
* Ability to call member functions of other classes from within
member functions or from the global scope.
You can now, for example, override a parent function with a
child function, and call the parent function from it.
* Runtime information for classes (class name, parent, available
functions, etc.).
* Much more efficient syntax highlighter - runs much quicker,
performs more reliably, and generates much tighter HTML.
* A full-featured debugger has been integrated with the language
(supports breakpoints, expression evaluation, step-in/over,
function call backtrace, and more).
The Zend Engine claims 100% compatability with the engine of PHP
3.0, and is shamelessly lying about it. Here's why:
* Static variable initializers only accept scalar values
(in PHP 3.0 they accepted any valid expression). The impact
should be somewhere in between void and non existent, since
initializing a static variable with anything but a simple
static value makes no sense at all.
* The scope of break and continue is local to that of an
include()'d file or an eval()'d string. The impact should
be somewhat smaller of the one above.
* The return statement no longer works from a require()'d file. It
hardly worked in PHP 3.0, so the impact should be fairly small. If
you want this functionality - use include() instead.
* unset() is no longer a function, but a statement.
* The following letter combination is not supported within
encapsulated strings: "{$". If you have a string that includes
this letter combination, for example, print "{$somevar"; (which
printed the letter { and the contents of the variable $somevar in
PHP 3.0), it will result in a parse error with the Zend Engine.
In this case, you would have to change the code to print
"\{$somevar"; This incompatability is due to the full variable
reference within quoted strings feature added in the Zend
Engine.
-510
View File
@@ -1,510 +0,0 @@
# Microsoft Developer Studio Project File - Name="Zend" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=Zend - Win32 Release_inline
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "Zend.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "Zend.mak" CFG="Zend - Win32 Release_inline"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "Zend - Win32 Release" (based on "Win32 (x86) Static Library")
!MESSAGE "Zend - Win32 Debug" (based on "Win32 (x86) Static Library")
!MESSAGE "Zend - Win32 Release_inline" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "Zend - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDebug" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug" /D "_LIB" /D "Zend_EXPORTS" /D ZEND_DEBUG=0 /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D "ZEND_WIN32" /FR /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x40d /d "NDebug"
# ADD RSC /l 0x40d /d "NDebug"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "Zend - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_Debug" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_Debug" /D "_LIB" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D ZEND_DEBUG=1 /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /GZ /c
# ADD BASE RSC /l 0x40d /d "_Debug"
# ADD RSC /l 0x40d /d "_Debug"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "Zend - Win32 Release_inline"
# PROP BASE Use_MFC 0
# PROP BASE Output_Dir "Zend___Win32_Release_inline"
# PROP BASE Intermediate_Dir "Zend___Win32_Release_inline"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Output_Dir "Release_inline"
# PROP Intermediate_Dir "Release_inline"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug" /D "_LIB" /D "Zend_EXPORTS" /D ZEND_DEBUG=0 /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /FR /FD /c
# SUBTRACT BASE CPP /YX
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug" /D "_LIB" /D "Zend_EXPORTS" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D "WIN32" /D "_MBCS" /D "ZEND_WIN32" /FR /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x40d /d "NDebug"
# ADD RSC /l 0x40d /d "NDebug"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ENDIF
# Begin Target
# Name "Zend - Win32 Release"
# Name "Zend - Win32 Debug"
# Name "Zend - Win32 Release_inline"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\zend.c
# End Source File
# Begin Source File
SOURCE=.\zend_alloc.c
# End Source File
# Begin Source File
SOURCE=.\zend_API.c
# End Source File
# Begin Source File
SOURCE=.\zend_builtin_functions.c
# End Source File
# Begin Source File
SOURCE=.\zend_compile.c
# End Source File
# Begin Source File
SOURCE=.\zend_constants.c
# End Source File
# Begin Source File
SOURCE=.\zend_execute.c
# End Source File
# Begin Source File
SOURCE=.\zend_execute_API.c
# End Source File
# Begin Source File
SOURCE=.\zend_extensions.c
# End Source File
# Begin Source File
SOURCE=.\zend_hash.c
# End Source File
# Begin Source File
SOURCE=.\zend_highlight.c
# End Source File
# Begin Source File
SOURCE=.\zend_indent.c
# End Source File
# Begin Source File
SOURCE=.\zend_ini.c
# End Source File
# Begin Source File
SOURCE=.\zend_ini_parser.c
# End Source File
# Begin Source File
SOURCE=.\zend_ini_scanner.c
# End Source File
# Begin Source File
SOURCE=".\zend_language_parser.c"
# End Source File
# Begin Source File
SOURCE=".\zend_language_scanner.c"
# End Source File
# Begin Source File
SOURCE=.\zend_list.c
# End Source File
# Begin Source File
SOURCE=.\zend_llist.c
# End Source File
# Begin Source File
SOURCE=.\zend_objects.c
# End Source File
# Begin Source File
SOURCE=.\zend_objects_API.c
# End Source File
# Begin Source File
SOURCE=.\zend_opcode.c
# End Source File
# Begin Source File
SOURCE=.\zend_operators.c
# End Source File
# Begin Source File
SOURCE=.\zend_ptr_stack.c
# End Source File
# Begin Source File
SOURCE=.\zend_qsort.c
# End Source File
# Begin Source File
SOURCE=.\zend_sprintf.c
# End Source File
# Begin Source File
SOURCE=.\zend_stack.c
# End Source File
# Begin Source File
SOURCE=.\zend_variables.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\FlexLexer.h
# End Source File
# Begin Source File
SOURCE=.\zend.h
# End Source File
# Begin Source File
SOURCE=.\zend_alloc.h
# End Source File
# Begin Source File
SOURCE=.\zend_API.h
# End Source File
# Begin Source File
SOURCE=.\zend_builtin_functions.h
# End Source File
# Begin Source File
SOURCE=.\zend_compile.h
# End Source File
# Begin Source File
SOURCE=.\zend_config.w32.h
# End Source File
# Begin Source File
SOURCE=.\zend_constants.h
# End Source File
# Begin Source File
SOURCE=.\zend_errors.h
# End Source File
# Begin Source File
SOURCE=.\zend_execute.h
# End Source File
# Begin Source File
SOURCE=.\zend_extensions.h
# End Source File
# Begin Source File
SOURCE=.\zend_fast_cache.h
# End Source File
# Begin Source File
SOURCE=.\zend_globals.h
# End Source File
# Begin Source File
SOURCE=.\zend_hash.h
# End Source File
# Begin Source File
SOURCE=.\zend_highlight.h
# End Source File
# Begin Source File
SOURCE=.\zend_indent.h
# End Source File
# Begin Source File
SOURCE=.\zend_ini.h
# End Source File
# Begin Source File
SOURCE=".\zend_language_parser.h"
# End Source File
# Begin Source File
SOURCE=".\zend_language_scanner.h"
# End Source File
# Begin Source File
SOURCE=.\zend_list.h
# End Source File
# Begin Source File
SOURCE=.\zend_llist.h
# End Source File
# Begin Source File
SOURCE=.\zend_modules.h
# End Source File
# Begin Source File
SOURCE=.\zend_operators.h
# End Source File
# Begin Source File
SOURCE=.\zend_ptr_stack.h
# End Source File
# Begin Source File
SOURCE=.\zend_qsort.h
# End Source File
# Begin Source File
SOURCE=.\zend_stack.h
# End Source File
# Begin Source File
SOURCE=.\zend_variables.h
# End Source File
# End Group
# Begin Group "Parsers"
# PROP Default_Filter "y"
# Begin Source File
SOURCE=.\zend_ini_parser.y
!IF "$(CFG)" == "Zend - Win32 Release"
!ELSEIF "$(CFG)" == "Zend - Win32 Debug"
# Begin Custom Build
InputDir=.
InputPath=.\zend_ini_parser.y
BuildCmds= \
bison --output=zend_ini_parser.c -v -d -p ini_ zend_ini_parser.y
"$(InputDir)\zend_ini_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
"$(InputDir)\zend_ini_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
# End Custom Build
!ELSEIF "$(CFG)" == "Zend - Win32 Release_inline"
!ENDIF
# End Source File
# Begin Source File
SOURCE=".\zend_language_parser.y"
!IF "$(CFG)" == "Zend - Win32 Release"
# Begin Custom Build
InputDir=.
InputPath=".\zend_language_parser.y"
BuildCmds= \
bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
# End Custom Build
!ELSEIF "$(CFG)" == "Zend - Win32 Debug"
# Begin Custom Build
InputDir=.
InputPath=".\zend_language_parser.y"
BuildCmds= \
bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
# End Custom Build
!ELSEIF "$(CFG)" == "Zend - Win32 Release_inline"
# Begin Custom Build
InputDir=.
InputPath=".\zend_language_parser.y"
BuildCmds= \
bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
# End Custom Build
!ENDIF
# End Source File
# End Group
# Begin Group "Scanners"
# PROP Default_Filter "l"
# Begin Source File
SOURCE=.\flex.skl
# End Source File
# Begin Source File
SOURCE=.\zend_ini_scanner.l
!IF "$(CFG)" == "Zend - Win32 Release"
!ELSEIF "$(CFG)" == "Zend - Win32 Debug"
# Begin Custom Build
InputPath=.\zend_ini_scanner.l
"zend_ini_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -B -i -Sflex.skl -Pini_ -ozend_ini_scanner.c zend_ini_scanner.l
# End Custom Build
!ELSEIF "$(CFG)" == "Zend - Win32 Release_inline"
!ENDIF
# End Source File
# Begin Source File
SOURCE=".\zend_language_scanner.l"
!IF "$(CFG)" == "Zend - Win32 Release"
# Begin Custom Build
InputPath=".\zend_language_scanner.l"
"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -i -Pzend -ozend_language_scanner.c zend_language_scanner.l
# End Custom Build
!ELSEIF "$(CFG)" == "Zend - Win32 Debug"
# Begin Custom Build
InputPath=".\zend_language_scanner.l"
"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -i -Pzend -ozend_language_scanner.c zend_language_scanner.l
# End Custom Build
!ELSEIF "$(CFG)" == "Zend - Win32 Release_inline"
# Begin Custom Build
InputPath=".\zend_language_scanner.l"
"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -i -Pzend -ozend_language_scanner.c zend_language_scanner.l
# End Custom Build
!ENDIF
# End Source File
# End Group
# Begin Group "Text Files"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\ZEND_BUGS
# End Source File
# Begin Source File
SOURCE=.\ZEND_CHANGES
# End Source File
# Begin Source File
SOURCE=.\ZEND_TODO
# End Source File
# End Group
# Begin Group "Resources"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\zend.ico
# End Source File
# End Group
# End Target
# End Project
-232
View File
@@ -1,232 +0,0 @@
dnl
dnl $Id$
dnl
dnl This file contains Zend specific autoconf functions.
dnl
AC_DEFUN(LIBZEND_BISON_CHECK,[
if test "$YACC" != "bison -y"; then
AC_MSG_WARN(You will need bison if you want to regenerate the Zend parser.)
else
AC_MSG_CHECKING(bison version)
set `bison --version| grep 'GNU Bison' | cut -d ' ' -f 4 | sed -e 's/\./ /'`
if test "${1}" = "1" -a "${2}" -lt "28"; then
AC_MSG_WARN(You will need bison 1.28 if you want to regenerate the Zend parser (found ${1}.${2}).)
fi
AC_MSG_RESULT(${1}.${2} (ok))
fi
])
AC_DEFUN(LIBZEND_BASIC_CHECKS,[
AC_REQUIRE([AC_PROG_YACC])
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_PROG_CC_C_O])
AC_REQUIRE([AC_PROG_LEX])
AC_REQUIRE([AC_HEADER_STDC])
AC_REQUIRE([AC_PROG_LIBTOOL])
LIBZEND_BISON_CHECK
dnl Ugly hack to get around a problem with gcc on AIX.
if test "$CC" = "gcc" -a "$ac_cv_prog_cc_g" = "yes" -a \
"`uname -sv`" = "AIX 4"; then
CFLAGS=`echo $CFLAGS | sed -e 's/-g//'`
fi
dnl Hack to work around a Mac OS X cpp problem
dnl Known versions needing this workaround are 5.3 and 5.4
if test "$ac_cv_prog_gcc" = "yes" -a "`uname -s`" = "Rhapsody"; then
CPPFLAGS="$CPPFLAGS -traditional-cpp"
fi
AC_CHECK_HEADERS(
limits.h \
malloc.h \
string.h \
unistd.h \
stdarg.h \
sys/types.h \
sys/time.h \
signal.h \
unix.h \
dlfcn.h)
AC_TYPE_SIZE_T
AC_TYPE_SIGNAL
AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"])
AC_CHECK_FUNC(dlopen,[AC_DEFINE(HAVE_LIBDL, 1,[ ])])
dnl
dnl Ugly hack to check if dlsym() requires a leading underscore in symbol name.
dnl
AC_MSG_CHECKING([whether dlsym() requires a leading underscore in symbol names])
_LT_AC_TRY_DLOPEN_SELF([
AC_MSG_RESULT(no)
], [
AC_MSG_RESULT(yes)
AC_DEFINE(DLSYM_NEEDS_UNDERSCORE, 1, [Define if dlsym() requires a leading underscore in symbol names. ])
], [
AC_MSG_RESULT(no)
], [])
dnl This is required for QNX and may be some BSD derived systems
AC_CHECK_TYPE( uint, unsigned int )
AC_CHECK_TYPE( ulong, unsigned long )
dnl Checks for library functions.
AC_FUNC_VPRINTF
AC_FUNC_MEMCMP
AC_FUNC_ALLOCA
AC_CHECK_FUNCS(memcpy strdup getpid kill strtod strtol finite fpclass)
AC_ZEND_BROKEN_SPRINTF
AC_CHECK_FUNCS(finite isfinite isinf isnan)
ZEND_FP_EXCEPT
])
AC_DEFUN(LIBZEND_ENABLE_DEBUG,[
AC_ARG_ENABLE(debug,
[ --enable-debug Compile with debugging symbols],[
ZEND_DEBUG=$enableval
],[
ZEND_DEBUG=no
])
])
AC_DEFUN(LIBZEND_OTHER_CHECKS,[
AC_ARG_ENABLE(experimental-zts,
[ --enable-experimental-zts This will most likely break your build],[
ZEND_EXPERIMENTAL_ZTS=$enableval
],[
ZEND_EXPERIMENTAL_ZTS=no
])
AC_ARG_ENABLE(inline-optimization,
[ --disable-inline-optimization If building zend_execute.lo fails, try
this switch.],[
ZEND_INLINE_OPTIMIZATION=$enableval
],[
ZEND_INLINE_OPTIMIZATION=yes
])
AC_ARG_ENABLE(memory-limit,
[ --enable-memory-limit Compile with memory limit support. ], [
ZEND_MEMORY_LIMIT=$enableval
],[
ZEND_MEMORY_LIMIT=no
])
AC_MSG_CHECKING(whether to enable thread-safety)
AC_MSG_RESULT($ZEND_EXPERIMENTAL_ZTS)
AC_MSG_CHECKING(whether to enable inline optimization for GCC)
AC_MSG_RESULT($ZEND_INLINE_OPTIMIZATION)
AC_MSG_CHECKING(whether to enable a memory limit)
AC_MSG_RESULT($ZEND_MEMORY_LIMIT)
AC_MSG_CHECKING(whether to enable Zend debugging)
AC_MSG_RESULT($ZEND_DEBUG)
if test "$ZEND_DEBUG" = "yes"; then
AC_DEFINE(ZEND_DEBUG,1,[ ])
echo " $CFLAGS" | grep ' -g' >/dev/null || DEBUG_CFLAGS="-g"
if test "$CFLAGS" = "-g -O2"; then
CFLAGS=-g
fi
test -n "$GCC" && DEBUG_CFLAGS="$DEBUG_CFLAGS -Wall"
test -n "$GCC" && test "$USE_MAINTAINER_MODE" = "yes" && \
DEBUG_CFLAGS="$DEBUG_CFLAGS -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations"
else
AC_DEFINE(ZEND_DEBUG,0,[ ])
fi
test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS"
if test "$ZEND_EXPERIMENTAL_ZTS" = "yes"; then
AC_DEFINE(ZTS,1,[ ])
CFLAGS="$CFLAGS -DZTS"
LIBZEND_CPLUSPLUS_CHECKS
fi
if test "$ZEND_MEMORY_LIMIT" = "yes"; then
AC_DEFINE(MEMORY_LIMIT, 1, [Memory limit])
else
AC_DEFINE(MEMORY_LIMIT, 0, [Memory limit])
fi
changequote({,})
if test -n "$GCC" && test "$ZEND_INLINE_OPTIMIZATION" != "yes"; then
INLINE_CFLAGS=`echo $ac_n "$CFLAGS $ac_c" | sed s/-O[0-9s]*//`
else
INLINE_CFLAGS="$CFLAGS"
fi
changequote([,])
AC_C_INLINE
AC_SUBST(INLINE_CFLAGS)
dnl test and set the alignment define for ZEND_MM
dnl this also does the logarithmic test for ZEND_MM.
AC_MSG_CHECKING(for MM alignment and log values)
AC_TRY_RUN([
#include <stdio.h>
typedef union _mm_align_test {
void *ptr;
double dbl;
long lng;
} mm_align_test;
#if (defined (__GNUC__) && __GNUC__ >= 2)
#define ZEND_MM_ALIGNMENT (__alignof__ (mm_align_test))
#else
#define ZEND_MM_ALIGNMENT (sizeof(mm_align_test))
#endif
int main()
{
int i = ZEND_MM_ALIGNMENT;
int zeros = 0;
FILE *fp;
while (i & ~0x1) {
zeros++;
i = i >> 1;
}
fp = fopen("conftest.zend", "w");
fprintf(fp, "%d %d", ZEND_MM_ALIGNMENT, zeros);
fclose(fp);
exit(0);
}
], [
LIBZEND_MM_ALIGN=`cat conftest.zend | cut -d ' ' -f 1`
LIBZEND_MM_ALIGN_LOG2=`cat conftest.zend | cut -d ' ' -f 2`
AC_DEFINE_UNQUOTED(ZEND_MM_ALIGNMENT, $LIBZEND_MM_ALIGN, [ ])
AC_DEFINE_UNQUOTED(ZEND_MM_ALIGNMENT_LOG2, $LIBZEND_MM_ALIGN_LOG2, [ ])
])
AC_MSG_RESULT(done)
])
AC_DEFUN(LIBZEND_CPLUSPLUS_CHECKS,[
])
-258
View File
@@ -1,258 +0,0 @@
# Microsoft Developer Studio Generated Dependency File, included by ZendCore.mak
.\zend_alloc.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\zend_config.w32.h"\
".\zend_execute.h"\
".\zend_llist.h"\
".\zend_ptr_stack.h"\
".\zend_stack.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_globals.h"\
".\zend_hash.h"\
.\alloca.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_config.w32.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_hash.h"\
.\zend_compile.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\zend_config.w32.h"\
".\zend_execute.h"\
".\zend_llist.h"\
".\zend_modules.h"\
".\zend_operators.h"\
".\zend_ptr_stack.h"\
".\zend_stack.h"\
".\zend_variables.h"\
".\zend.h"\
".\zend_API.h"\
".\zend_errors.h"\
".\zend_globals.h"\
".\zend_hash.h"\
".\zend_ini.h"\
.\zend_constants.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_config.w32.h"\
".\zend_constants.h"\
".\zend_operators.h"\
".\zend_variables.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_hash.h"\
.\zend_execute.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\zend_config.w32.h"\
".\zend_constants.h"\
".\zend_execute.h"\
".\zend_llist.h"\
".\zend_modules.h"\
".\zend_operators.h"\
".\zend_ptr_stack.h"\
".\zend_stack.h"\
".\zend_variables.h"\
".\zend.h"\
".\zend_API.h"\
".\zend_errors.h"\
".\zend_globals.h"\
".\zend_hash.h"\
".\zend_ini.h"\
.\zend_highlight.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\zend_config.w32.h"\
".\zend_execute.h"\
".\zend_highlight.h"\
".\zend_llist.h"\
".\zend_ptr_stack.h"\
".\zend_stack.h"\
".\zend_language_parser.tab.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_globals.h"\
".\zend_hash.h"\
.\zend_llist.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_config.w32.h"\
".\zend_llist.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_hash.h"\
.\zend_opcode.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\zend_config.w32.h"\
".\zend_execute.h"\
".\zend_llist.h"\
".\zend_modules.h"\
".\zend_operators.h"\
".\zend_ptr_stack.h"\
".\zend_stack.h"\
".\zend_variables.h"\
".\zend.h"\
".\zend_API.h"\
".\zend_errors.h"\
".\zend_globals.h"\
".\zend_hash.h"\
".\zend_ini.h"\
.\zend_operators.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\zend_config.w32.h"\
".\zend_execute.h"\
".\zend_llist.h"\
".\zend_operators.h"\
".\zend_ptr_stack.h"\
".\zend_stack.h"\
".\zend_variables.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_globals.h"\
".\zend_hash.h"\
.\zend_ptr_stack.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_config.w32.h"\
".\zend_ptr_stack.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_hash.h"\
.\zend_stack.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_config.w32.h"\
".\zend_stack.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_hash.h"\
.\zend_variables.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\zend_config.w32.h"\
".\zend_constants.h"\
".\zend_execute.h"\
".\zend_llist.h"\
".\zend_modules.h"\
".\zend_ptr_stack.h"\
".\zend_stack.h"\
".\zend_variables.h"\
".\zend.h"\
".\zend_API.h"\
".\zend_errors.h"\
".\zend_globals.h"\
".\zend_hash.h"\
".\zend_ini.h"\
".\zend_list.h"\
.\zend.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_config.w32.h"\
".\zend_operators.h"\
".\zend_variables.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_hash.h"\
.\zend_API.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\zend_config.w32.h"\
".\zend_constants.h"\
".\zend_execute.h"\
".\zend_llist.h"\
".\zend_modules.h"\
".\zend_operators.h"\
".\zend_ptr_stack.h"\
".\zend_stack.h"\
".\zend_variables.h"\
".\zend.h"\
".\zend_API.h"\
".\zend_errors.h"\
".\zend_globals.h"\
".\zend_hash.h"\
".\zend_ini.h"\
".\zend_list.h"\
.\zend_hash.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_config.w32.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_hash.h"\
.\zend_ini.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_config.w32.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_hash.h"\
".\zend_ini.h"\
!IF "$(CFG)" == "ZendCore - Win32 Release"
!ELSEIF "$(CFG)" == "ZendCore - Win32 Debug"
!ENDIF
!IF "$(CFG)" == "ZendCore - Win32 Release"
!ELSEIF "$(CFG)" == "ZendCore - Win32 Debug"
!ENDIF
!IF "$(CFG)" == "ZendCore - Win32 Release"
!ELSEIF "$(CFG)" == "ZendCore - Win32 Debug"
!ENDIF
!IF "$(CFG)" == "ZendCore - Win32 Release"
!ELSEIF "$(CFG)" == "ZendCore - Win32 Debug"
!ENDIF
-691
View File
@@ -1,691 +0,0 @@
# Microsoft Developer Studio Project File - Name="ZendTS" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=ZendTS - Win32 Release_TSDbg
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "ZendTS.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "ZendTS.mak" CFG="ZendTS - Win32 Release_TSDbg"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "ZendTS - Win32 Release_TS" (based on "Win32 (x86) Static Library")
!MESSAGE "ZendTS - Win32 Debug_TS" (based on "Win32 (x86) Static Library")
!MESSAGE "ZendTS - Win32 Release_TS_inline" (based on "Win32 (x86) Static Library")
!MESSAGE "ZendTS - Win32 Release_TSDbg" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "ZendTS - Win32 Release_TS"
# PROP BASE Use_MFC 0
# PROP BASE Output_Dir "Release_TS"
# PROP BASE Intermediate_Dir "Release_TS"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Output_Dir "Release_TS"
# PROP Intermediate_Dir "Release_TS"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDebug_TS" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug_TS" /D ZEND_DEBUG=0 /D _WIN32_WINNT=0x400 /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "ZTS" /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x40d /d "NDebug_TS"
# ADD RSC /l 0x40d /d "NDebug_TS"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "ZendTS - Win32 Debug_TS"
# PROP BASE Use_MFC 0
# PROP BASE Output_Dir "Debug_TS"
# PROP BASE Intermediate_Dir "Debug_TS"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Output_Dir "Debug_TS"
# PROP Intermediate_Dir "Debug_TS"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_Debug_TS" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_Debug_TS" /D ZEND_DEBUG=1 /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "ZTS" /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /YX /FD /GZ /c
# ADD BASE RSC /l 0x40d /d "_Debug_TS"
# ADD RSC /l 0x40d /d "_Debug_TS"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TS_inline"
# PROP BASE Use_MFC 0
# PROP BASE Output_Dir "ZendTS___Win32_Release_TS_inline"
# PROP BASE Intermediate_Dir "ZendTS___Win32_Release_TS_inline"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Output_Dir "Release_TS_inline"
# PROP Intermediate_Dir "Release_TS_inline"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug_TS" /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "ZTS" /D "WIN32" /D "_MBCS" /D ZEND_DEBUG=0 /FR /FD /c
# SUBTRACT BASE CPP /YX
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug_TS" /D ZEND_DEBUG=0 /D "ZEND_WIN32_FORCE_INLINE" /D _WIN32_WINNT=0x400 /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "ZTS" /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x40d /d "NDebug_TS"
# ADD RSC /l 0x40d /d "NDebug_TS"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TSDbg"
# PROP BASE Use_MFC 0
# PROP BASE Output_Dir "ZendTS___Win32_Release_TSDbg"
# PROP BASE Intermediate_Dir "ZendTS___Win32_Release_TSDbg"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Output_Dir "Release_TSDbg"
# PROP Intermediate_Dir "Release_TSDbg"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDebug_TS" /D ZEND_DEBUG=0 /D _WIN32_WINNT=0x400 /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "ZTS" /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c
# SUBTRACT BASE CPP /YX
# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I "." /D "NDebug_TS" /D ZEND_DEBUG=0 /D _WIN32_WINNT=0x400 /D "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D "ZTS" /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /FR /FD /c
# SUBTRACT CPP /YX
# ADD BASE RSC /l 0x40d /d "NDebug_TS"
# ADD RSC /l 0x40d /d "NDebug_TS"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ENDIF
# Begin Target
# Name "ZendTS - Win32 Release_TS"
# Name "ZendTS - Win32 Debug_TS"
# Name "ZendTS - Win32 Release_TS_inline"
# Name "ZendTS - Win32 Release_TSDbg"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\zend.c
# End Source File
# Begin Source File
SOURCE=.\zend_alloc.c
# End Source File
# Begin Source File
SOURCE=.\zend_API.c
# End Source File
# Begin Source File
SOURCE=.\zend_builtin_functions.c
# End Source File
# Begin Source File
SOURCE=.\zend_compile.c
# End Source File
# Begin Source File
SOURCE=.\zend_constants.c
# End Source File
# Begin Source File
SOURCE=.\zend_dynamic_array.c
# End Source File
# Begin Source File
SOURCE=.\zend_execute.c
# End Source File
# Begin Source File
SOURCE=.\zend_execute_API.c
# End Source File
# Begin Source File
SOURCE=.\zend_extensions.c
# End Source File
# Begin Source File
SOURCE=.\zend_hash.c
# End Source File
# Begin Source File
SOURCE=.\zend_highlight.c
# End Source File
# Begin Source File
SOURCE=.\zend_indent.c
# End Source File
# Begin Source File
SOURCE=.\zend_ini.c
# End Source File
# Begin Source File
SOURCE=.\zend_ini_parser.c
# End Source File
# Begin Source File
SOURCE=.\zend_ini_scanner.c
# End Source File
# Begin Source File
SOURCE=".\zend_language_parser.c"
# End Source File
# Begin Source File
SOURCE=".\zend_language_scanner.c"
# End Source File
# Begin Source File
SOURCE=.\zend_list.c
# End Source File
# Begin Source File
SOURCE=.\zend_llist.c
# End Source File
# Begin Source File
SOURCE=.\zend_mm.c
# End Source File
# Begin Source File
SOURCE=.\zend_object_handlers.c
# End Source File
# Begin Source File
SOURCE=.\zend_objects.c
# End Source File
# Begin Source File
SOURCE=.\zend_objects_API.c
# End Source File
# Begin Source File
SOURCE=.\zend_opcode.c
# End Source File
# Begin Source File
SOURCE=.\zend_operators.c
# End Source File
# Begin Source File
SOURCE=.\zend_ptr_stack.c
# End Source File
# Begin Source File
SOURCE=.\zend_qsort.c
# End Source File
# Begin Source File
SOURCE=.\zend_sprintf.c
# End Source File
# Begin Source File
SOURCE=.\zend_stack.c
# End Source File
# Begin Source File
SOURCE=.\zend_ts_hash.c
# End Source File
# Begin Source File
SOURCE=.\zend_variables.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\FlexLexer.h
# End Source File
# Begin Source File
SOURCE=.\zend.h
# End Source File
# Begin Source File
SOURCE=.\zend_alloc.h
# End Source File
# Begin Source File
SOURCE=.\zend_API.h
# End Source File
# Begin Source File
SOURCE=.\zend_builtin_functions.h
# End Source File
# Begin Source File
SOURCE=.\zend_compile.h
# End Source File
# Begin Source File
SOURCE=.\zend_config.w32.h
# End Source File
# Begin Source File
SOURCE=.\zend_constants.h
# End Source File
# Begin Source File
SOURCE=.\zend_dynamic_array.h
# End Source File
# Begin Source File
SOURCE=.\zend_errors.h
# End Source File
# Begin Source File
SOURCE=.\zend_execute.h
# End Source File
# Begin Source File
SOURCE=.\zend_execute_locks.h
# End Source File
# Begin Source File
SOURCE=.\zend_extensions.h
# End Source File
# Begin Source File
SOURCE=.\zend_fast_cache.h
# End Source File
# Begin Source File
SOURCE=.\zend_globals.h
# End Source File
# Begin Source File
SOURCE=.\zend_globals_macros.h
# End Source File
# Begin Source File
SOURCE=.\zend_hash.h
# End Source File
# Begin Source File
SOURCE=.\zend_highlight.h
# End Source File
# Begin Source File
SOURCE=.\zend_indent.h
# End Source File
# Begin Source File
SOURCE=.\zend_ini.h
# End Source File
# Begin Source File
SOURCE=.\zend_ini_parser.h
# End Source File
# Begin Source File
SOURCE=.\zend_ini_scanner.h
# End Source File
# Begin Source File
SOURCE=.\zend_istdiostream.h
# End Source File
# Begin Source File
SOURCE=".\zend_language_parser.h"
# End Source File
# Begin Source File
SOURCE=".\zend_language_scanner.h"
# End Source File
# Begin Source File
SOURCE=.\zend_list.h
# End Source File
# Begin Source File
SOURCE=.\zend_llist.h
# End Source File
# Begin Source File
SOURCE=.\zend_mm.h
# End Source File
# Begin Source File
SOURCE=.\zend_modules.h
# End Source File
# Begin Source File
SOURCE=.\zend_object_handlers.h
# End Source File
# Begin Source File
SOURCE=.\zend_objects.h
# End Source File
# Begin Source File
SOURCE=.\zend_objects_API.h
# End Source File
# Begin Source File
SOURCE=.\zend_operators.h
# End Source File
# Begin Source File
SOURCE=.\zend_ptr_stack.h
# End Source File
# Begin Source File
SOURCE=.\zend_qsort.h
# End Source File
# Begin Source File
SOURCE=.\zend_stack.h
# End Source File
# Begin Source File
SOURCE=.\zend_ts_hash.h
# End Source File
# Begin Source File
SOURCE=.\zend_variables.h
# End Source File
# End Group
# Begin Group "Parsers"
# PROP Default_Filter "y"
# Begin Source File
SOURCE=.\zend_ini_parser.y
!IF "$(CFG)" == "ZendTS - Win32 Release_TS"
# Begin Custom Build
InputDir=.
InputPath=.\zend_ini_parser.y
BuildCmds= \
bison --output=zend_ini_parser.c -v -d -p ini_ zend_ini_parser.y
"$(InputDir)\zend_ini_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
"$(InputDir)\zend_ini_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
# End Custom Build
!ELSEIF "$(CFG)" == "ZendTS - Win32 Debug_TS"
# Begin Custom Build
InputDir=.
InputPath=.\zend_ini_parser.y
BuildCmds= \
bison --output=zend_ini_parser.c -v -d -p ini_ zend_ini_parser.y
"$(InputDir)\zend_ini_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
"$(InputDir)\zend_ini_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
# End Custom Build
!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TS_inline"
# Begin Custom Build
InputDir=.
InputPath=.\zend_ini_parser.y
BuildCmds= \
bison --output=zend_ini_parser.c -v -d -p ini_ zend_ini_parser.y
"$(InputDir)\zend_ini_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
"$(InputDir)\zend_ini_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
# End Custom Build
!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TSDbg"
# Begin Custom Build
InputDir=.
InputPath=.\zend_ini_parser.y
BuildCmds= \
bison --output=zend_ini_parser.c -v -d -p ini_ zend_ini_parser.y
"$(InputDir)\zend_ini_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
"$(InputDir)\zend_ini_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
# End Custom Build
!ENDIF
# End Source File
# Begin Source File
SOURCE=".\zend_language_parser.y"
!IF "$(CFG)" == "ZendTS - Win32 Release_TS"
# Begin Custom Build
InputDir=.
InputPath=".\zend_language_parser.y"
BuildCmds= \
bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
# End Custom Build
!ELSEIF "$(CFG)" == "ZendTS - Win32 Debug_TS"
# Begin Custom Build
InputDir=.
InputPath=".\zend_language_parser.y"
BuildCmds= \
bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
# End Custom Build
!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TS_inline"
# Begin Custom Build
InputDir=.
InputPath=".\zend_language_parser.y"
BuildCmds= \
bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
# End Custom Build
!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TSDbg"
# Begin Custom Build
InputDir=.
InputPath=".\zend_language_parser.y"
BuildCmds= \
bison --output=zend_language_parser.c -v -d -p zend zend_language_parser.y
"$(InputDir)\zend_language_parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
"$(InputDir)\zend_language_parser.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
# End Custom Build
!ENDIF
# End Source File
# End Group
# Begin Group "Scanners"
# PROP Default_Filter "l"
# Begin Source File
SOURCE=.\flex.skl
# End Source File
# Begin Source File
SOURCE=.\zend_ini_scanner.l
!IF "$(CFG)" == "ZendTS - Win32 Release_TS"
# Begin Custom Build
InputPath=.\zend_ini_scanner.l
"zend_ini_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -B -i -Sflex.skl -Pini_ -ozend_ini_scanner.c zend_ini_scanner.l
# End Custom Build
!ELSEIF "$(CFG)" == "ZendTS - Win32 Debug_TS"
# Begin Custom Build
InputPath=.\zend_ini_scanner.l
"zend_ini_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -B -i -Sflex.skl -Pini_ -ozend_ini_scanner.c zend_ini_scanner.l
# End Custom Build
!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TS_inline"
# Begin Custom Build
InputPath=.\zend_ini_scanner.l
"zend_ini_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -B -i -Sflex.skl -Pini_ -ozend_ini_scanner.c zend_ini_scanner.l
# End Custom Build
!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TSDbg"
# Begin Custom Build
InputPath=.\zend_ini_scanner.l
"zend_ini_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -B -i -Sflex.skl -Pini_ -ozend_ini_scanner.c zend_ini_scanner.l
# End Custom Build
!ENDIF
# End Source File
# Begin Source File
SOURCE=".\zend_language_scanner.l"
!IF "$(CFG)" == "ZendTS - Win32 Release_TS"
# Begin Custom Build
InputPath=".\zend_language_scanner.l"
"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -B -i -Sflex.skl -Pzend -ozend_language_scanner.c zend_language_scanner.l
# End Custom Build
!ELSEIF "$(CFG)" == "ZendTS - Win32 Debug_TS"
# Begin Custom Build
InputPath=".\zend_language_scanner.l"
"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -B -i -Sflex.skl -Pzend -ozend_language_scanner.c zend_language_scanner.l
# End Custom Build
!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TS_inline"
# Begin Custom Build
InputPath=".\zend_language_scanner.l"
"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -B -i -Sflex.skl -Pzend -ozend_language_scanner.c zend_language_scanner.l
# End Custom Build
!ELSEIF "$(CFG)" == "ZendTS - Win32 Release_TSDbg"
# Begin Custom Build
InputPath=".\zend_language_scanner.l"
"zend_language_scanner.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -B -i -Sflex.skl -Pzend -ozend_language_scanner.c zend_language_scanner.l
# End Custom Build
!ENDIF
# End Source File
# End Group
# Begin Group "Text Files"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\LICENSE
# End Source File
# Begin Source File
SOURCE=.\ZEND_BUGS
# End Source File
# Begin Source File
SOURCE=.\ZEND_CHANGES
# End Source File
# End Group
# Begin Group "Resources"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\zend.ico
# End Source File
# End Group
# End Target
# End Project
-81
View File
@@ -1,81 +0,0 @@
#define ZEND_API
#define ZEND_DLEXPORT
#define ZEND_DLIMPORT
#ifndef NETWARE
@TOP@
#endif
#undef uint
#undef ulong
/* Define if you want to enable memory limit support */
#define MEMORY_LIMIT 0
#ifndef NETWARE
@BOTTOM@
#endif
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_IEEEFP_H
# include <ieeefp.h>
#endif
#ifdef HAVE_STRING_H
# include <string.h>
#else
# include <strings.h>
#endif
#if ZEND_BROKEN_SPRINTF
int zend_sprintf(char *buffer, const char *format, ...);
#else
# define zend_sprintf sprintf
#endif
#include <math.h>
#ifdef HAVE_ISNAN
#define zend_isnan(a) isnan(a)
#elif defined(NAN)
#define zend_isnan(a) (((a)==NAN)?1:0)
#elif defined(HAVE_FPCLASS)
#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN))
#else
#define zend_isnan(a) 0
#endif
#ifdef HAVE_ISINF
#define zend_isinf(a) isinf(a)
#elif defined(INFINITY)
/* Might not work, but is required by ISO C99 */
#define zend_isinf(a) (((a)==INFINITY)?1:0)
#elif defined(HAVE_FPCLASS)
#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF))
#else
#define zend_isinf(a) 0
#endif
#ifdef HAVE_FINITE
#define zend_finite(a) finite(a)
#elif defined(HAVE_ISFINITE) || defined(isfinite)
#define zend_finite(a) isfinite(a)
#elif defined(fpclassify)
#define zend_finite(a) ((fpclassify((a))!=FP_INFINITE&&fpclassify((a))!=FP_NAN)?1:0)
#else
#define zend_finite(a) (zend_isnan(a) ? 0 : zend_isinf(a) ? 0 : 1)
#endif
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
-47
View File
@@ -1,47 +0,0 @@
dnl $Id$
dnl
dnl This file contains local autoconf functions.
AC_DEFUN(ZEND_FP_EXCEPT,[
AC_CACHE_CHECK(whether fp_except is defined, ac_cv_type_fp_except,[
AC_TRY_COMPILE([
#include <floatingpoint.h>
],[
fp_except x = (fp_except) 0;
],[
ac_cv_type_fp_except=yes
],[
ac_cv_type_fp_except=no
],[
ac_cv_type_fp_except=no
])])
if test "$ac_cv_type_fp_except" = "yes"; then
AC_DEFINE(HAVE_FP_EXCEPT, 1, [whether floatingpoint.h defines fp_except])
fi
])
dnl
dnl Check for broken sprintf()
dnl
AC_DEFUN(AC_ZEND_BROKEN_SPRINTF,[
AC_CACHE_CHECK(whether sprintf is broken, ac_cv_broken_sprintf,[
AC_TRY_RUN([main() {char buf[20];exit(sprintf(buf,"testing 123")!=11); }],[
ac_cv_broken_sprintf=no
],[
ac_cv_broken_sprintf=yes
],[
ac_cv_broken_sprintf=no
])
])
if test "$ac_cv_broken_sprintf" = "yes"; then
ac_result=1
else
ac_result=0
fi
AC_DEFINE_UNQUOTED(ZEND_BROKEN_SPRINTF, $ac_result, [Whether sprintf is broken])
])
AC_DEFUN(AM_SET_LIBTOOL_VARIABLE,[
LIBTOOL='$(SHELL) $(top_builddir)/libtool $1'
])
-43
View File
@@ -1,43 +0,0 @@
# Makefile to generate build tools
#
# Standard usage:
# make -f build.mk
#
# Written by Sascha Schumann
#
# $Id$
LT_TARGETS = ltmain.sh ltconfig
config_h_in = zend_config.h.in
makefile_am_files = Makefile.am
makefile_in_files = $(makefile_am_files:.am=.in)
makefile_files = $(makefile_am_files:e.am=e)
targets = $(makefile_in_files) $(LT_TARGETS) configure $(config_h_in)
all: $(targets)
clean:
rm -f $(targets)
$(LT_TARGETS):
rm -f $(LT_TARGETS)
libtoolize --automake $(AMFLAGS) -f
$(makefile_in_files): $(makefile_am_files)
automake -a -i $(AMFLAGS) $(makefile_files)
aclocal.m4: configure.in acinclude.m4
aclocal
$(config_h_in): configure.in acconfig.h
# explicitly remove target since autoheader does not seem to work
# correctly otherwise (timestamps are not updated)
@rm -f $@
autoheader
configure: aclocal.m4 configure.in
autoconf
-33
View File
@@ -1,33 +0,0 @@
#!/bin/sh
case "$1" in
--copy)
automake_flags=--copy
shift
;;
esac
libtoolize --force --automake $automake_flags
mv aclocal.m4 aclocal.m4.old 2>/dev/null
aclocal
if cmp aclocal.m4.old aclocal.m4 > /dev/null 2>&1; then
echo "buildconf: keeping ${1}aclocal.m4"
mv aclocal.m4.old aclocal.m4
else
echo "buildconf: created or modified ${1}aclocal.m4"
fi
autoheader
automake --add-missing --include-deps $automake_flags
mv configure configure.old 2>/dev/null
autoconf
if cmp configure.old configure > /dev/null 2>&1; then
echo "buildconf: keeping ${1}configure"
mv configure.old configure
else
echo "buildconf: created or modified ${1}configure"
fi
-45
View File
@@ -1,45 +0,0 @@
dnl $Id$
dnl Process this file with autoconf to produce a configure script.
AC_INIT(zend.c)
AM_INIT_AUTOMAKE(zend, 0.80A, nodefine)
AM_CONFIG_HEADER(zend_config.h)
AM_SANITY_CHECK
AM_MAINTAINER_MODE
AC_PROG_CC
AM_PROG_LEX
AM_PROG_CC_STDC
ZEND_VERSION=$VERSION
dnl We want this one before the checks, so the checks can modify CFLAGS.
test -z "$CFLAGS" && auto_cflags=1
sinclude(Zend.m4)
LIBZEND_BASIC_CHECKS
AM_PROG_LIBTOOL
if test "$enable_debug" != "yes"; then
AM_SET_LIBTOOL_VARIABLE([--silent])
fi
dnl
dnl Check for /usr/pkg/{lib,include} which is where NetBSD puts binary
dnl and source packages. This should be harmless on other OSs.
dnl
if test -d /usr/pkg/include -a -d /usr/pkg/lib ; then
CFLAGS="$CFLAGS -I/usr/pkg/include"
LDFLAGS="$LDFLAGS -L/usr/pkg/lib"
fi
LIBZEND_ENABLE_DEBUG
LIBZEND_OTHER_CHECKS
ZEND_EXTRA_LIBS="$LIBS"
LIBS=""
AC_SUBST(ZEND_EXTRA_LIBS)
AC_OUTPUT(Makefile)
# Local Variables:
# tab-width: 4
# End:
-1628
View File
File diff suppressed because it is too large. Load diff
-339
View File
@@ -1,339 +0,0 @@
Example 1: A singleton (static members)
=======================================
<?php
class Counter {
var $counter = 0;
function increment_and_print()
{
print ++$this->counter;
print "\n";
}
}
class SingletonCounter {
static $m_instance = NULL;
function Instance()
{
if (self::$m_instance == NULL) {
self::$m_instance = new Counter();
}
return self::$m_instance;
}
}
SingletonCounter::Instance()->increment_and_print();
SingletonCounter::Instance()->increment_and_print();
SingletonCounter::Instance()->increment_and_print();
?>
Example 2: Factory method (derefencing objects returned from functions)
=======================================================================
<?php
class Circle {
function draw()
{
print "Circle\n";
}
}
class Square {
function draw()
{
print "Square\n";
}
}
function ShapeFactoryMethod($shape)
{
switch ($shape) {
case "Circle":
return new Circle();
case "Square":
return new Square();
}
}
ShapeFactoryMethod("Circle")->draw();
ShapeFactoryMethod("Square")->draw();
?>
Example 3: Nested class
=======================
<?php
class Database {
class MySQL {
var $host = "";
function db_connect($user) {
print "Connecting to MySQL database '$this->host' as $user\n";
}
}
class Oracle {
var $host = "localhost";
function db_connect($user) {
print "Connecting to Oracle database '$this->host' as $user\n";
}
}
}
$MySQL_obj = new Database::MySQL();
$MySQL_obj->db_connect("John");
$Oracle_obj = new Database::Oracle();
$Oracle_obj->db_connect("Mark");
unset($MySQL_obj);
unset($Oracle_obj);
?>
Example 3: Nested class suitable for a PEAR like hierarchy
==========================================================
<?php
class DB::MySQL {
var $host = "";
function db_connect($user) {
print "Connecting to MySQL database '$this->host' as $user\n";
}
}
class DB::Oracle {
var $host = "localhost";
function db_connect($user) {
print "Connecting to Oracle database '$this->host' as $user\n";
}
}
$MySQL_obj = new DB::MySQL();
$MySQL_obj->db_connect("Susan");
$Oracle_obj = new DB::Oracle();
$Oracle_obj->db_connect("Barbara");
?>
Example 4: Class constants and class scope
==========================================
<?php
class ErrorCodes {
const FATAL = "Fatal error\n";
const WARNING = "Warning\n";
const INFO = "Informational message\n";
function print_fatal_error_codes()
{
print "FATAL = " . FATAL;
print "self::FATAL = " . self::FATAL;
}
}
/* Call the static function and move into the ErrorCodes scope */
ErrorCodes::print_fatal_error_codes();
?>
Example 5: Regular object method using both local and global functions
======================================================================
<?php
class HelloWorld {
const HELLO_WORLD = "Hello, World!\n";
function get_hello_world()
{
return HELLO_WORLD;
}
function length_of_hello_world()
{
$str = get_hello_world();
return strlen($str);
}
}
$obj = new HelloWorld();
print "length_of_hello_world() = " . $obj->length_of_hello_world();
print "\n";
?>
Example 6: Multiple derefencing of objects returned from methods
================================================================
<?php
class Name {
function Name($_name)
{
$this->name = $_name;
}
function display()
{
print $this->name;
print "\n";
}
}
class Person {
function Person($_name, $_address)
{
$this->name = new Name($_name);
}
function getName()
{
return $this->name;
}
}
$person = new Person("John", "New York");
$person->getName()->display();
?>
Example 7: Exception handling
=============================
<?
class MyException {
function MyException($_error) {
$this->error = $_error;
}
function getException()
{
return $this->error;
}
}
function ThrowException()
{
throw new MyException("'This is an exception!'");
}
try {
} catch (MyException $exception) {
print "There was an exception: " . $exception->getException();
print "\n";
}
try {
ThrowException();
} catch (MyException $exception) {
print "There was an exception: " . $exception->getException();
print "\n";
}
?>
Example 8: __clone()
===================
<?
class MyCloneable {
static $id = 0;
function MyCloneable()
{
$this->id = self::$id++;
}
function __clone()
{
$this->name = $clone->name;
$this->address = "New York";
$this->id = self::$id++;
}
}
$obj = new MyCloneable();
$obj->name = "Hello";
$obj->address = "Tel-Aviv";
print $obj->id;
print "\n";
$obj = $obj->__clone();
print $obj->id;
print "\n";
print $obj->name;
print "\n";
print $obj->address;
print "\n";
?>
Example 9: Unified constructors
===============================
<?
class BaseClass {
function __construct()
{
print "In BaseClass constructor\n";
}
}
class SubClass extends BaseClass {
function __construct()
{
parent::__construct();
print "In SubClass constructor\n";
}
}
$obj = new BaseClass();
$obj = new SubClass();
?>
Example 10: Destructors
=======================
<?php
class MyDestructableClass {
function __construct()
{
print "In constructor\n";
$this->name = "MyDestructableClass";
}
function __destruct()
{
print "Destroying " . $this->name . "\n";
}
}
$obj = new MyDestructableClass();
?>
-877
View File
@@ -1,877 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#include "zend.h"
#include "zend_extensions.h"
#include "zend_modules.h"
#include "zend_constants.h"
#include "zend_list.h"
#include "zend_API.h"
#include "zend_builtin_functions.h"
#include "zend_ini.h"
#ifdef ZTS
# define GLOBAL_FUNCTION_TABLE &global_main_class.function_table
# define GLOBAL_CLASS_TABLE &global_main_class.class_table
# define GLOBAL_CONSTANTS_TABLE &global_main_class.constants_table
# define GLOBAL_AUTO_GLOBALS_TABLE global_auto_globals_table
#else
# define GLOBAL_FUNCTION_TABLE CG(function_table)
# define GLOBAL_CLASS_TABLE CG(class_table)
# define GLOBAL_CONSTANTS_TABLE CG(zend_constants)
# define GLOBAL_AUTO_GLOBALS_TABLE CG(auto_globals)
#endif
#if defined(ZEND_WIN32) && ZEND_DEBUG
BOOL WINAPI IsDebuggerPresent(VOID);
#endif
/* true multithread-shared globals */
ZEND_API zend_class_entry *zend_standard_class_def = NULL;
ZEND_API int (*zend_printf)(const char *format, ...);
ZEND_API zend_write_func_t zend_write;
ZEND_API FILE *(*zend_fopen)(const char *filename, char **opened_path);
ZEND_API void (*zend_block_interruptions)(void);
ZEND_API void (*zend_unblock_interruptions)(void);
ZEND_API void (*zend_ticks_function)(int ticks);
ZEND_API void (*zend_error_cb)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
static void (*zend_message_dispatcher_p)(long message, void *data);
static int (*zend_get_configuration_directive_p)(char *name, uint name_length, zval *contents);
#ifdef ZTS
ZEND_API int compiler_globals_id;
ZEND_API int executor_globals_id;
ZEND_API int alloc_globals_id;
zend_class_entry global_main_class;
HashTable *global_auto_globals_table;
#endif
zend_utility_values zend_uv;
ZEND_API zval zval_used_for_init; /* True global variable */
/* version information */
static char *zend_version_info;
static uint zend_version_info_length;
#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2002 Zend Technologies\n"
#define PRINT_ZVAL_INDENT 4
static void print_hash(HashTable *ht, int indent)
{
zval **tmp;
char *string_key;
HashPosition iterator;
ulong num_key;
uint str_len;
int i;
for (i=0; i<indent; i++) {
ZEND_PUTS(" ");
}
ZEND_PUTS("(\n");
indent += PRINT_ZVAL_INDENT;
zend_hash_internal_pointer_reset_ex(ht, &iterator);
while (zend_hash_get_current_data_ex(ht, (void **) &tmp, &iterator) == SUCCESS) {
for (i=0; i<indent; i++) {
ZEND_PUTS(" ");
}
ZEND_PUTS("[");
switch (zend_hash_get_current_key_ex(ht, &string_key, &str_len, &num_key, 0, &iterator)) {
case HASH_KEY_IS_STRING:
ZEND_PUTS(string_key);
break;
case HASH_KEY_IS_LONG:
zend_printf("%ld", num_key);
break;
}
ZEND_PUTS("] => ");
zend_print_zval_r(*tmp, indent+PRINT_ZVAL_INDENT);
ZEND_PUTS("\n");
zend_hash_move_forward_ex(ht, &iterator);
}
indent -= PRINT_ZVAL_INDENT;
for (i=0; i<indent; i++) {
ZEND_PUTS(" ");
}
ZEND_PUTS(")\n");
}
ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_copy)
{
if (expr->type==IS_STRING) {
*use_copy = 0;
return;
}
switch (expr->type) {
case IS_NULL:
expr_copy->value.str.len = 0;
expr_copy->value.str.val = empty_string;
break;
case IS_BOOL:
if (expr->value.lval) {
expr_copy->value.str.len = 1;
expr_copy->value.str.val = estrndup("1", 1);
} else {
expr_copy->value.str.len = 0;
expr_copy->value.str.val = empty_string;
}
break;
case IS_RESOURCE:
expr_copy->value.str.val = (char *) emalloc(sizeof("Resource id #")-1 + MAX_LENGTH_OF_LONG);
expr_copy->value.str.len = sprintf(expr_copy->value.str.val, "Resource id #%ld", expr->value.lval);
break;
case IS_ARRAY:
expr_copy->value.str.len = sizeof("Array")-1;
expr_copy->value.str.val = estrndup("Array", expr_copy->value.str.len);
break;
case IS_OBJECT:
expr_copy->value.str.val = (char *) emalloc(sizeof("Object id #")-1 + MAX_LENGTH_OF_LONG);
expr_copy->value.str.len = sprintf(expr_copy->value.str.val, "Object id #%ld", (long)expr->value.obj.handle);
#if 0
/* FIXME: This might break BC for some people */
expr_copy->value.str.len = sizeof("Object")-1;
expr_copy->value.str.val = estrndup("Object", expr_copy->value.str.len);
#endif
break;
default:
*expr_copy = *expr;
zval_copy_ctor(expr_copy);
convert_to_string(expr_copy);
break;
}
expr_copy->type = IS_STRING;
*use_copy = 1;
}
ZEND_API int zend_print_zval(zval *expr, int indent)
{
return zend_print_zval_ex(zend_write, expr, indent);
}
ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int indent)
{
zval expr_copy;
int use_copy;
zend_make_printable_zval(expr, &expr_copy, &use_copy);
if (use_copy) {
expr = &expr_copy;
}
if (expr->value.str.len==0) { /* optimize away empty strings */
if (use_copy) {
zval_dtor(expr);
}
return 0;
}
write_func(expr->value.str.val, expr->value.str.len);
if (use_copy) {
zval_dtor(expr);
}
return expr->value.str.len;
}
ZEND_API void zend_print_zval_r(zval *expr, int indent)
{
zend_print_zval_r_ex(zend_write, expr, indent);
}
ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent)
{
switch(expr->type) {
case IS_ARRAY:
ZEND_PUTS("Array\n");
if (++expr->value.ht->nApplyCount>1) {
ZEND_PUTS(" *RECURSION*");
expr->value.ht->nApplyCount=0;
return;
}
print_hash(expr->value.ht, indent);
expr->value.ht->nApplyCount--;
break;
case IS_OBJECT:
{
zend_object *object = Z_OBJ_P(expr);
if (++object->properties->nApplyCount>1) {
ZEND_PUTS(" *RECURSION*");
object->properties->nApplyCount=0;
return;
}
zend_printf("%s Object\n", object->ce->name);
print_hash(object->properties, indent);
object->properties->nApplyCount--;
break;
}
default:
zend_print_variable(expr);
break;
}
}
static FILE *zend_fopen_wrapper(const char *filename, char **opened_path)
{
if (opened_path) {
*opened_path = estrdup(filename);
}
return fopen(filename, "rb");
}
static void register_standard_class(void)
{
zend_standard_class_def = malloc(sizeof(zend_class_entry));
zend_standard_class_def->type = ZEND_INTERNAL_CLASS;
zend_standard_class_def->name_length = sizeof("stdClass") - 1;
zend_standard_class_def->name = zend_strndup("stdClass", zend_standard_class_def->name_length);
zend_standard_class_def->parent = NULL;
zend_hash_init_ex(&zend_standard_class_def->default_properties, 0, NULL, ZVAL_PTR_DTOR, 1, 0);
zend_hash_init_ex(&zend_standard_class_def->private_properties, 0, NULL, ZVAL_PTR_DTOR, 1, 0);
zend_hash_init_ex(&zend_standard_class_def->protected_properties, 0, NULL, ZVAL_PTR_DTOR, 1, 0);
zend_standard_class_def->static_members = (HashTable *) malloc(sizeof(HashTable));
zend_hash_init_ex(zend_standard_class_def->static_members, 0, NULL, ZVAL_PTR_DTOR, 1, 0);
zend_hash_init_ex(&zend_standard_class_def->constants_table, 0, NULL, ZVAL_PTR_DTOR, 1, 0);
zend_hash_init_ex(&zend_standard_class_def->class_table, 10, NULL, ZEND_CLASS_DTOR, 1, 0);
zend_hash_init_ex(&zend_standard_class_def->function_table, 0, NULL, ZEND_FUNCTION_DTOR, 1, 0);
zend_standard_class_def->constructor = NULL;
zend_standard_class_def->destructor = NULL;
zend_standard_class_def->clone = NULL;
zend_standard_class_def->handle_function_call = NULL;
zend_standard_class_def->handle_property_get = NULL;
zend_standard_class_def->handle_property_set = NULL;
zend_standard_class_def->refcount = 1;
zend_hash_add(GLOBAL_CLASS_TABLE, "stdclass", sizeof("stdclass"), &zend_standard_class_def, sizeof(zend_class_entry *), NULL);
}
static void zend_set_default_compile_time_values(TSRMLS_D)
{
/* default compile-time values */
CG(asp_tags) = 0;
CG(short_tags) = 1;
CG(allow_call_time_pass_reference) = 1;
CG(extended_info) = 0;
}
#ifdef ZTS
static void compiler_globals_ctor(zend_compiler_globals *compiler_globals TSRMLS_DC)
{
zend_function tmp_func;
zend_class_entry tmp_class;
compiler_globals->compiled_filename = NULL;
compiler_globals->function_table = &compiler_globals->main_class.function_table;
zend_hash_init_ex(compiler_globals->function_table, 100, NULL, ZEND_FUNCTION_DTOR, 1, 0);
zend_hash_copy(compiler_globals->function_table, GLOBAL_FUNCTION_TABLE, NULL, &tmp_func, sizeof(zend_function));
compiler_globals->class_table = &compiler_globals->main_class.class_table;
zend_hash_init_ex(compiler_globals->class_table, 10, NULL, ZEND_CLASS_DTOR, 1, 0);
zend_hash_copy(compiler_globals->class_table, GLOBAL_CLASS_TABLE, (copy_ctor_func_t) zend_class_add_ref, &tmp_class, sizeof(zend_class_entry));
zend_set_default_compile_time_values(TSRMLS_C);
CG(interactive) = 0;
compiler_globals->auto_globals = (HashTable *) malloc(sizeof(HashTable));
zend_hash_init_ex(compiler_globals->auto_globals, 8, NULL, NULL, 1, 0);
zend_hash_copy(compiler_globals->auto_globals, global_auto_globals_table, NULL, NULL, sizeof(void *) /* empty element */);
}
static void compiler_globals_dtor(zend_compiler_globals *compiler_globals TSRMLS_DC)
{
if (compiler_globals->function_table != GLOBAL_FUNCTION_TABLE) {
zend_hash_destroy(compiler_globals->function_table);
}
if (compiler_globals->class_table != GLOBAL_CLASS_TABLE) {
zend_hash_destroy(compiler_globals->class_table);
}
if (compiler_globals->auto_globals != global_auto_globals_table) {
zend_hash_destroy(compiler_globals->auto_globals);
free(compiler_globals->auto_globals);
}
}
static void executor_globals_ctor(zend_executor_globals *executor_globals TSRMLS_DC)
{
if (GLOBAL_CONSTANTS_TABLE) {
zend_startup_constants(TSRMLS_C);
zend_copy_constants(EG(zend_constants), GLOBAL_CONSTANTS_TABLE);
}
zend_init_rsrc_plist(TSRMLS_C);
EG(lambda_count)=0;
EG(user_error_handler) = NULL;
EG(in_execution) = 0;
}
static void executor_globals_dtor(zend_executor_globals *executor_globals TSRMLS_DC)
{
zend_shutdown_constants(TSRMLS_C);
zend_destroy_rsrc_list(&EG(persistent_list) TSRMLS_CC);
zend_ini_shutdown(TSRMLS_C);
}
static void zend_new_thread_end_handler(THREAD_T thread_id TSRMLS_DC)
{
zend_copy_ini_directives(TSRMLS_C);
zend_ini_refresh_caches(ZEND_INI_STAGE_STARTUP TSRMLS_CC);
}
#endif
static void alloc_globals_ctor(zend_alloc_globals *alloc_globals_p TSRMLS_DC)
{
start_memory_manager(TSRMLS_C);
}
static void alloc_globals_dtor(zend_alloc_globals *alloc_globals_p TSRMLS_DC)
{
shutdown_memory_manager(0, 1 TSRMLS_CC);
}
#ifdef __FreeBSD__
/* FreeBSD floating point precision fix */
#include <floatingpoint.h>
#endif
static void scanner_globals_ctor(zend_scanner_globals *scanner_globals_p TSRMLS_DC)
{
scanner_globals_p->c_buf_p = (char *) 0;
scanner_globals_p->init = 1;
scanner_globals_p->start = 0;
scanner_globals_p->current_buffer = NULL;
scanner_globals_p->yy_in = NULL;
scanner_globals_p->yy_out = NULL;
scanner_globals_p->_yy_more_flag = 0;
scanner_globals_p->_yy_more_len = 0;
}
int zend_startup(zend_utility_functions *utility_functions, char **extensions, int start_builtin_functions)
{
#ifdef ZTS
zend_compiler_globals *compiler_globals;
zend_executor_globals *executor_globals;
void ***tsrm_ls;
#ifdef ZTS
extern ZEND_API ts_rsrc_id ini_scanner_globals_id;
extern ZEND_API ts_rsrc_id language_scanner_globals_id;
#else
extern zend_scanner_globals ini_scanner_globals;
extern zend_scanner_globals language_scanner_globals;
#endif
ts_allocate_id(&alloc_globals_id, sizeof(zend_alloc_globals), (ts_allocate_ctor) alloc_globals_ctor, (ts_allocate_dtor) alloc_globals_dtor);
#else
alloc_globals_ctor(&alloc_globals TSRMLS_CC);
#endif
#ifdef __FreeBSD__
/* FreeBSD floating point precision fix */
fpsetmask(0);
#endif
zend_startup_extensions_mechanism();
/* Set up utility functions and values */
zend_error_cb = utility_functions->error_function;
zend_printf = utility_functions->printf_function;
zend_write = (zend_write_func_t) utility_functions->write_function;
zend_fopen = utility_functions->fopen_function;
if (!zend_fopen) {
zend_fopen = zend_fopen_wrapper;
}
zend_message_dispatcher_p = utility_functions->message_handler;
zend_block_interruptions = utility_functions->block_interruptions;
zend_unblock_interruptions = utility_functions->unblock_interruptions;
zend_get_configuration_directive_p = utility_functions->get_configuration_directive;
zend_ticks_function = utility_functions->ticks_function;
zend_compile_file = compile_file;
zend_execute = execute;
/* set up version */
zend_version_info = strdup(ZEND_CORE_VERSION_INFO);
zend_version_info_length = sizeof(ZEND_CORE_VERSION_INFO)-1;
#ifndef ZTS
GLOBAL_FUNCTION_TABLE = &compiler_globals.main_class.function_table;
GLOBAL_CLASS_TABLE = &compiler_globals.main_class.class_table;
#endif
GLOBAL_AUTO_GLOBALS_TABLE = (HashTable *) malloc(sizeof(HashTable));
zend_hash_init_ex(GLOBAL_FUNCTION_TABLE, 100, NULL, ZEND_FUNCTION_DTOR, 1, 0);
zend_hash_init_ex(GLOBAL_CLASS_TABLE, 10, NULL, ZEND_CLASS_DTOR, 1, 0);
zend_hash_init_ex(GLOBAL_AUTO_GLOBALS_TABLE, 8, NULL, NULL, 1, 0);
register_standard_class();
zend_hash_init_ex(&module_registry, 50, NULL, ZEND_MODULE_DTOR, 1, 0);
zend_init_rsrc_list_dtors();
/* This zval can be used to initialize allocate zval's to an uninit'ed value */
zval_used_for_init.is_ref = 0;
zval_used_for_init.refcount = 1;
zval_used_for_init.type = IS_NULL;
#ifdef ZTS
ts_allocate_id(&compiler_globals_id, sizeof(zend_compiler_globals), (ts_allocate_ctor) compiler_globals_ctor, (ts_allocate_dtor) compiler_globals_dtor);
ts_allocate_id(&executor_globals_id, sizeof(zend_executor_globals), (ts_allocate_ctor) executor_globals_ctor, (ts_allocate_dtor) executor_globals_dtor);
ts_allocate_id(&language_scanner_globals_id, sizeof(zend_scanner_globals), (ts_allocate_ctor) scanner_globals_ctor, NULL);
ts_allocate_id(&ini_scanner_globals_id, sizeof(zend_scanner_globals), (ts_allocate_ctor) scanner_globals_ctor, NULL);
compiler_globals = ts_resource(compiler_globals_id);
executor_globals = ts_resource(executor_globals_id);
tsrm_ls = ts_resource_ex(0, NULL);
compiler_globals_dtor(compiler_globals, tsrm_ls);
*compiler_globals->function_table = *GLOBAL_FUNCTION_TABLE;
*compiler_globals->class_table = *GLOBAL_CLASS_TABLE;
compiler_globals->auto_globals = GLOBAL_AUTO_GLOBALS_TABLE;
zend_startup_constants(tsrm_ls);
#else
zend_hash_init_ex(CG(auto_globals), 8, NULL, NULL, 1, 0);
scanner_globals_ctor(&ini_scanner_globals TSRMLS_CC);
scanner_globals_ctor(&language_scanner_globals TSRMLS_CC);
zend_startup_constants();
zend_set_default_compile_time_values(TSRMLS_C);
EG(user_error_handler) = NULL;
#endif
zend_register_standard_constants(TSRMLS_C);
#ifndef ZTS
zend_init_rsrc_plist(TSRMLS_C);
#endif
if (start_builtin_functions) {
zend_startup_builtin_functions(TSRMLS_C);
}
zend_ini_startup(TSRMLS_C);
#ifdef ZTS
tsrm_set_new_thread_end_handler(zend_new_thread_end_handler);
*GLOBAL_FUNCTION_TABLE = *compiler_globals->function_table;
*GLOBAL_CLASS_TABLE = *compiler_globals->class_table;
#endif
return SUCCESS;
}
void zend_shutdown(TSRMLS_D)
{
#ifdef ZEND_WIN32
zend_shutdown_timeout_thread();
#endif
#ifndef ZTS
zend_destroy_rsrc_list(&EG(persistent_list) TSRMLS_CC);
#endif
zend_destroy_rsrc_list_dtors();
zend_hash_graceful_reverse_destroy(&module_registry);
#ifndef ZTS
/* In ZTS mode these are freed by compiler_globals_dtor() */
zend_hash_destroy(GLOBAL_FUNCTION_TABLE);
zend_hash_destroy(GLOBAL_CLASS_TABLE);
#endif
zend_hash_destroy(GLOBAL_AUTO_GLOBALS_TABLE);
free(GLOBAL_AUTO_GLOBALS_TABLE);
zend_shutdown_extensions(TSRMLS_C);
free(zend_version_info);
#ifndef ZTS
zend_shutdown_constants();
#endif
}
void zend_set_utility_values(zend_utility_values *utility_values)
{
zend_uv = *utility_values;
zend_uv.import_use_extension_length = strlen(zend_uv.import_use_extension);
}
/* this should be compatible with the standard zenderror */
void zenderror(char *error)
{
zend_error(E_PARSE, error);
}
BEGIN_EXTERN_C()
ZEND_API void _zend_bailout(char *filename, uint lineno)
{
TSRMLS_FETCH();
if (!EG(bailout_set)) {
zend_output_debug_string(1, "%s(%d) : Bailed out without a bailout address!", filename, lineno);
exit(-1);
}
CG(unclean_shutdown) = 1;
CG(in_compilation) = EG(in_execution) = 0;
longjmp(EG(bailout), FAILURE);
}
END_EXTERN_C()
void zend_append_version_info(zend_extension *extension)
{
char *new_info;
uint new_info_length;
new_info_length = sizeof(" with v, by \n")
+ strlen(extension->name)
+ strlen(extension->version)
+ strlen(extension->copyright)
+ strlen(extension->author);
new_info = (char *) malloc(new_info_length+1);
sprintf(new_info, " with %s v%s, %s, by %s\n", extension->name, extension->version, extension->copyright, extension->author);
zend_version_info = (char *) realloc(zend_version_info, zend_version_info_length+new_info_length+1);
strcat(zend_version_info, new_info);
zend_version_info_length += new_info_length;
free(new_info);
}
ZEND_API char *get_zend_version()
{
return zend_version_info;
}
void zend_activate(TSRMLS_D)
{
init_compiler(TSRMLS_C);
init_executor(TSRMLS_C);
startup_scanner(TSRMLS_C);
}
void zend_activate_modules(TSRMLS_D)
{
zend_hash_apply(&module_registry, (apply_func_t) module_registry_request_startup TSRMLS_CC);
}
void zend_deactivate_modules(TSRMLS_D)
{
EG(opline_ptr) = NULL; /* we're no longer executing anything */
zend_try {
zend_hash_apply(&module_registry, (apply_func_t) module_registry_cleanup TSRMLS_CC);
} zend_end_try();
}
void zend_deactivate(TSRMLS_D)
{
/* we're no longer executing anything */
EG(opline_ptr) = NULL;
EG(active_symbol_table) = NULL;
zend_try {
shutdown_scanner(TSRMLS_C);
} zend_end_try();
/* shutdown_executor() takes care of its own bailout handling */
shutdown_executor(TSRMLS_C);
zend_try {
shutdown_compiler(TSRMLS_C);
} zend_end_try();
zend_try {
zend_ini_deactivate(TSRMLS_C);
} zend_end_try();
}
BEGIN_EXTERN_C()
ZEND_API void zend_message_dispatcher(long message, void *data)
{
if (zend_message_dispatcher_p) {
zend_message_dispatcher_p(message, data);
}
}
END_EXTERN_C()
ZEND_API int zend_get_configuration_directive(char *name, uint name_length, zval *contents)
{
if (zend_get_configuration_directive_p) {
return zend_get_configuration_directive_p(name, name_length, contents);
} else {
return FAILURE;
}
}
#define ZEND_ERROR_BUFFER_SIZE 1024
ZEND_API void zend_error(int type, const char *format, ...)
{
va_list args;
zval ***params;
zval *retval;
zval *z_error_type, *z_error_message, *z_error_filename, *z_error_lineno, *z_context;
char *error_filename;
uint error_lineno;
zval *orig_user_error_handler;
TSRMLS_FETCH();
/* Obtain relevant filename and lineno */
switch (type) {
case E_CORE_ERROR:
case E_CORE_WARNING:
error_filename = NULL;
error_lineno = 0;
break;
case E_PARSE:
case E_COMPILE_ERROR:
case E_COMPILE_WARNING:
case E_ERROR:
case E_NOTICE:
case E_WARNING:
case E_USER_ERROR:
case E_USER_WARNING:
case E_USER_NOTICE:
if (zend_is_compiling(TSRMLS_C)) {
error_filename = zend_get_compiled_filename(TSRMLS_C);
error_lineno = zend_get_compiled_lineno(TSRMLS_C);
} else if (zend_is_executing(TSRMLS_C)) {
error_filename = zend_get_executed_filename(TSRMLS_C);
error_lineno = zend_get_executed_lineno(TSRMLS_C);
} else {
error_filename = NULL;
error_lineno = 0;
}
break;
default:
error_filename = NULL;
error_lineno = 0;
break;
}
if (!error_filename) {
error_filename = "Unknown";
}
va_start(args, format);
/* if we don't have a user defined error handler */
if (!EG(user_error_handler)) {
zend_error_cb(type, error_filename, error_lineno, format, args);
} else switch (type) {
case E_ERROR:
case E_PARSE:
case E_CORE_ERROR:
case E_CORE_WARNING:
case E_COMPILE_ERROR:
case E_COMPILE_WARNING:
/* The error may not be safe to handle in user-space */
zend_error_cb(type, error_filename, error_lineno, format, args);
break;
default:
/* Handle the error in user space */
ALLOC_INIT_ZVAL(z_error_message);
ALLOC_INIT_ZVAL(z_error_type);
ALLOC_INIT_ZVAL(z_error_filename);
ALLOC_INIT_ZVAL(z_error_lineno);
ALLOC_INIT_ZVAL(z_context);
z_error_message->value.str.val = (char *) emalloc(ZEND_ERROR_BUFFER_SIZE);
#ifdef HAVE_VSNPRINTF
z_error_message->value.str.len = vsnprintf(z_error_message->value.str.val, ZEND_ERROR_BUFFER_SIZE, format, args);
if (z_error_message->value.str.len > ZEND_ERROR_BUFFER_SIZE-1) {
z_error_message->value.str.len = ZEND_ERROR_BUFFER_SIZE-1;
}
#else
strncpy(z_error_message->value.str.val, format, ZEND_ERROR_BUFFER_SIZE);
/* This is risky... */
/* z_error_message->value.str.len = vsprintf(z_error_message->value.str.val, format, args); */
#endif
z_error_message->type = IS_STRING;
z_error_type->value.lval = type;
z_error_type->type = IS_LONG;
if (error_filename) {
z_error_filename->value.str.len = strlen(error_filename);
z_error_filename->value.str.val = estrndup(error_filename, z_error_filename->value.str.len);
z_error_filename->type = IS_STRING;
}
z_error_lineno->value.lval = error_lineno;
z_error_lineno->type = IS_LONG;
z_context->value.ht = EG(active_symbol_table);
z_context->type = IS_ARRAY;
ZVAL_ADDREF(z_context); /* we don't want this one to be freed */
params = (zval ***) emalloc(sizeof(zval **)*5);
params[0] = &z_error_type;
params[1] = &z_error_message;
params[2] = &z_error_filename;
params[3] = &z_error_lineno;
params[4] = &z_context;
orig_user_error_handler = EG(user_error_handler);
EG(user_error_handler) = NULL;
if (call_user_function_ex(CG(function_table), NULL, orig_user_error_handler, &retval, 5, params, 1, NULL TSRMLS_CC)==SUCCESS) {
zval_ptr_dtor(&retval);
} else {
/* The user error handler failed, use built-in error handler */
zend_error_cb(type, error_filename, error_lineno, format, args);
}
EG(user_error_handler) = orig_user_error_handler;
efree(params);
zval_ptr_dtor(&z_error_message);
zval_ptr_dtor(&z_error_type);
zval_ptr_dtor(&z_error_filename);
zval_ptr_dtor(&z_error_lineno);
if (ZVAL_REFCOUNT(z_context)==2) {
FREE_ZVAL(z_context);
}
break;
}
va_end(args);
if (type==E_PARSE) {
zend_init_compiler_data_structures(TSRMLS_C);
}
}
ZEND_API void zend_output_debug_string(zend_bool trigger_break, char *format, ...)
{
#if ZEND_DEBUG
va_list args;
va_start(args, format);
# ifdef ZEND_WIN32
{
char output_buf[1024];
vsnprintf(output_buf, 1024, format, args);
OutputDebugString(output_buf);
OutputDebugString("\n");
if (trigger_break && IsDebuggerPresent()) {
DebugBreak();
}
}
# else
vfprintf(stderr, format, args);
fprintf(stderr, "\n");
# endif
va_end(args);
#endif
}
ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_count, ...)
{
va_list files;
int i;
zend_file_handle *file_handle;
zend_op_array *orig_op_array = EG(active_op_array);
zval *local_retval=NULL;
va_start(files, file_count);
for (i=0; i<file_count; i++) {
file_handle = va_arg(files, zend_file_handle *);
if (!file_handle) {
continue;
}
EG(active_op_array) = zend_compile_file(file_handle, ZEND_INCLUDE TSRMLS_CC);
zend_destroy_file_handle(file_handle TSRMLS_CC);
if (EG(active_op_array)) {
EG(return_value_ptr_ptr) = retval ? retval : &local_retval;
zend_execute(EG(active_op_array) TSRMLS_CC);
if (EG(exception)) {
zval_ptr_dtor(&EG(exception));
zend_error(E_ERROR, "Uncaught exception!");
} else if (!retval) {
zval_ptr_dtor(EG(return_value_ptr_ptr));
local_retval = NULL;
}
destroy_op_array(EG(active_op_array));
efree(EG(active_op_array));
} else if (type==ZEND_REQUIRE) {
va_end(files);
EG(active_op_array) = orig_op_array;
return FAILURE;
}
}
va_end(files);
EG(active_op_array) = orig_op_array;
return SUCCESS;
}
#define COMPILED_STRING_DESCRIPTION_FORMAT "%s(%d) : %s"
ZEND_API char *zend_make_compiled_string_description(char *name TSRMLS_DC)
{
char *cur_filename;
int cur_lineno;
char *compiled_string_description;
if (zend_is_compiling(TSRMLS_C)) {
cur_filename = zend_get_compiled_filename(TSRMLS_C);
cur_lineno = zend_get_compiled_lineno(TSRMLS_C);
} else if (zend_is_executing(TSRMLS_C)) {
cur_filename = zend_get_executed_filename(TSRMLS_C);
cur_lineno = zend_get_executed_lineno(TSRMLS_C);
} else {
cur_filename = "Unknown";
cur_lineno = 0;
}
compiled_string_description = emalloc(sizeof(COMPILED_STRING_DESCRIPTION_FORMAT)+strlen(name)+strlen(cur_filename)+MAX_LENGTH_OF_LONG);
sprintf(compiled_string_description, COMPILED_STRING_DESCRIPTION_FORMAT, cur_filename, cur_lineno, name);
return compiled_string_description;
}
void free_estring(char **str_p)
{
efree(*str_p);
}
-572
View File
@@ -1,572 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
#ifndef ZEND_H
#define ZEND_H
#define ZEND_VERSION "2.0.0-alpha2"
#define ZEND_ENGINE_2
#ifdef __cplusplus
#define BEGIN_EXTERN_C() extern "C" {
#define END_EXTERN_C() }
#else
#define BEGIN_EXTERN_C()
#define END_EXTERN_C()
#endif
#include <stdio.h>
/*
* general definitions
*/
#ifdef ZEND_WIN32
# include "zend_config.w32.h"
# define ZEND_PATHS_SEPARATOR ';'
#elif defined(NETWARE)
# include "zend_config.nw.h"
# include "acconfig.h"
#elif defined(__riscos__)
# include "zend_config.h"
# define ZEND_PATHS_SEPARATOR ';'
#else
# include "zend_config.h"
# define ZEND_PATHS_SEPARATOR ':'
#endif
#ifdef ZEND_WIN32
/* Only use this macro if you know for sure that all of the switches values
are covered by its case statements */
#define EMPTY_SWITCH_DEFAULT_CASE() \
default: \
__assume(0); \
break;
#else
#define EMPTY_SWITCH_DEFAULT_CASE()
#endif
/* all HAVE_XXX test have to be after the include of zend_config above */
#ifdef HAVE_UNIX_H
# include <unix.h>
#endif
#ifdef HAVE_STDARG_H
# include <stdarg.h>
#endif
#ifdef HAVE_DLFCN_H
# include <dlfcn.h>
#endif
#if HAVE_MACH_O_DYLD_H
#include <mach-o/dyld.h>
/* MH_BUNDLE loading functions for Mac OS X / Darwin */
void *zend_mh_bundle_load (char* bundle_path);
int zend_mh_bundle_unload (void *bundle_handle);
void *zend_mh_bundle_symbol(void *bundle_handle, const char *symbol_name);
const char *zend_mh_bundle_error(void);
#endif /* HAVE_MACH_O_DYLD_H */
#if defined(HAVE_LIBDL)
# ifndef RTLD_LAZY
# define RTLD_LAZY 1 /* Solaris 1, FreeBSD's (2.1.7.1 and older) */
# endif
# ifndef RTLD_GLOBAL
# define RTLD_GLOBAL 0
# endif
# define DL_LOAD(libname) dlopen(libname, RTLD_LAZY | RTLD_GLOBAL)
# define DL_UNLOAD dlclose
# if defined(DLSYM_NEEDS_UNDERSCORE)
# define DL_FETCH_SYMBOL(h,s) dlsym((h), "_" ## s)
# else
# define DL_FETCH_SYMBOL dlsym
# endif
# define DL_ERROR dlerror
# define DL_HANDLE void *
# define ZEND_EXTENSIONS_SUPPORT 1
#elif defined(HAVE_MACH_O_DYLD_H)
# define DL_LOAD(libname) zend_mh_bundle_load(libname)
# define DL_UNLOAD(handle) zend_mh_bundle_unload(handle)
# define DL_FETCH_SYMBOL(h,s) zend_mh_bundle_symbol(h,s)
# define DL_ERROR zend_mh_bundle_error
# define DL_HANDLE void *
# define ZEND_EXTENSIONS_SUPPORT 1
#elif defined(ZEND_WIN32)
# define DL_LOAD(libname) LoadLibrary(libname)
# define DL_FETCH_SYMBOL GetProcAddress
# define DL_UNLOAD FreeLibrary
# define DL_HANDLE HMODULE
# define ZEND_EXTENSIONS_SUPPORT 1
#else
# define DL_HANDLE void *
# define ZEND_EXTENSIONS_SUPPORT 0
#endif
/* AIX requires this to be the first thing in the file. */
#ifndef __GNUC__
# if HAVE_ALLOCA_H
# include <alloca.h>
# else
# ifdef _AIX
#pragma alloca
# else
# ifndef alloca /* predefined by HP cc +Olibcalls */
char *alloca ();
# endif
# endif
# endif
#endif
#if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS) && defined(ZEND_WIN32)) && !(defined(ZTS) && defined(NETWARE))
# define do_alloca(p) alloca(p)
# define free_alloca(p)
#else
# define do_alloca(p) emalloc(p)
# define free_alloca(p) efree(p)
#endif
#if ZEND_DEBUG
#define ZEND_FILE_LINE_D char *__zend_filename, uint __zend_lineno
#define ZEND_FILE_LINE_DC , ZEND_FILE_LINE_D
#define ZEND_FILE_LINE_ORIG_D char *__zend_orig_filename, uint __zend_orig_lineno
#define ZEND_FILE_LINE_ORIG_DC , ZEND_FILE_LINE_ORIG_D
#define ZEND_FILE_LINE_RELAY_C __zend_filename, __zend_lineno
#define ZEND_FILE_LINE_RELAY_CC , ZEND_FILE_LINE_RELAY_C
#define ZEND_FILE_LINE_C __FILE__, __LINE__
#define ZEND_FILE_LINE_CC , ZEND_FILE_LINE_C
#define ZEND_FILE_LINE_EMPTY_C NULL, 0
#define ZEND_FILE_LINE_EMPTY_CC , ZEND_FILE_LINE_EMPTY_C
#define ZEND_FILE_LINE_ORIG_RELAY_C __zend_orig_filename, __zend_orig_lineno
#define ZEND_FILE_LINE_ORIG_RELAY_CC , ZEND_FILE_LINE_ORIG_RELAY_C
#else
#define ZEND_FILE_LINE_D
#define ZEND_FILE_LINE_DC
#define ZEND_FILE_LINE_ORIG_D
#define ZEND_FILE_LINE_ORIG_DC
#define ZEND_FILE_LINE_RELAY_C
#define ZEND_FILE_LINE_RELAY_CC
#define ZEND_FILE_LINE_C
#define ZEND_FILE_LINE_CC
#define ZEND_FILE_LINE_EMPTY_C
#define ZEND_FILE_LINE_EMPTY_CC
#define ZEND_FILE_LINE_ORIG_RELAY_C
#define ZEND_FILE_LINE_ORIG_RELAY_CC
#endif /* ZEND_DEBUG */
#ifdef ZTS
#define ZTS_V 1
#else
#define ZTS_V 0
#endif
#include "zend_errors.h"
#include "zend_alloc.h"
#include "zend_types.h"
#ifdef HAVE_LIMITS_H
# include <limits.h>
#endif
#ifndef LONG_MAX
#define LONG_MAX 2147483647L
#endif
#ifndef LONG_MIN
#define LONG_MIN (- LONG_MAX - 1)
#endif
#undef SUCCESS
#undef FAILURE
#define SUCCESS 0
#define FAILURE -1 /* this MUST stay a negative number, or it may affect functions! */
#include "zend_hash.h"
#include "zend_ts_hash.h"
#include "zend_llist.h"
#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval *this_ptr, int return_value_used TSRMLS_DC
#define INTERNAL_FUNCTION_PARAM_PASSTHRU ht, return_value, this_ptr, return_value_used TSRMLS_CC
/*
* zval
*/
typedef struct _zval_struct zval;
typedef struct _zend_class_entry zend_class_entry;
typedef struct _zend_object {
zend_class_entry *ce;
HashTable *properties;
} zend_object;
typedef unsigned int zend_object_handle;
typedef struct _zend_object_value zend_object_value;
#include "zend_object_handlers.h"
struct _zend_object_value {
zend_object_handle handle;
zend_object_handlers *handlers;
};
typedef union _zvalue_value {
long lval; /* long value */
double dval; /* double value */
struct {
char *val;
zend_uint len;
} str;
HashTable *ht; /* hash table value */
/* struct {
zend_class_entry *ce;
HashTable *properties;
} obj;
*/
zend_object_value obj;
} zvalue_value;
struct _zval_struct {
/* Variable information */
zvalue_value value; /* value */
zend_uint refcount;
zend_uchar type; /* active type */
zend_uchar is_ref;
};
typedef struct _zend_function_entry {
char *fname;
void (*handler)(INTERNAL_FUNCTION_PARAMETERS);
unsigned char *func_arg_types;
} zend_function_entry;
typedef struct _zend_property_reference {
int type; /* read, write or r/w */
zval *object;
zend_llist *elements_list;
} zend_property_reference;
typedef struct _zend_overloaded_element {
int type; /* array offset or object proprety */
zval element;
} zend_overloaded_element;
/* excpt.h on Digital Unix 4.0 defines function_table */
#undef function_table
/* A lot of stuff needs shifiting around in order to include zend_compile.h here */
union _zend_function;
struct _zend_class_entry {
char type;
char *name;
zend_uint name_length;
struct _zend_class_entry *parent;
int refcount;
zend_bool constants_updated;
HashTable function_table;
HashTable default_properties;
HashTable private_properties; /* This is only needed at compile-time */
HashTable protected_properties; /* This is only needed at compile-time */
HashTable class_table;
HashTable *static_members;
HashTable constants_table;
zend_function_entry *builtin_functions;
union _zend_function *constructor;
union _zend_function *destructor;
union _zend_function *clone;
/* handlers */
zend_object_value (*create_object)(zend_class_entry *class_type TSRMLS_DC);
void (*handle_function_call)(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
zval (*handle_property_get)(zend_property_reference *property_reference);
int (*handle_property_set)(zend_property_reference *property_reference, zval *value);
};
typedef struct _zend_utility_functions {
void (*error_function)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
int (*printf_function)(const char *format, ...);
int (*write_function)(const char *str, uint str_length);
FILE *(*fopen_function)(const char *filename, char **opened_path);
void (*message_handler)(long message, void *data);
void (*block_interruptions)(void);
void (*unblock_interruptions)(void);
int (*get_configuration_directive)(char *name, uint name_length, zval *contents);
void (*ticks_function)(int ticks);
} zend_utility_functions;
typedef struct _zend_utility_values {
char *import_use_extension;
uint import_use_extension_length;
} zend_utility_values;
typedef int (*zend_write_func_t)(const char *str, uint str_length);
#undef MIN
#undef MAX
#define MAX(a, b) (((a)>(b))?(a):(b))
#define MIN(a, b) (((a)<(b))?(a):(b))
#define ZEND_STRL(str) (str), (sizeof(str)-1)
#define ZEND_STRS(str) (str), (sizeof(str))
#define ZEND_NORMALIZE_BOOL(n) \
((n) ? (((n)>0) ? 1 : -1) : 0)
/* data types */
#define IS_NULL 0
#define IS_LONG 1
#define IS_DOUBLE 2
#define IS_STRING 3
#define IS_ARRAY 4
#define IS_OBJECT 5
#define IS_BOOL 6
#define IS_RESOURCE 7
#define IS_CONSTANT 8
#define IS_CONSTANT_ARRAY 9
/* Special data type to temporarily mark large numbers */
#define FLAG_IS_BC 10 /* for parser internal use only */
/* Ugly hack to support constants as static array indices */
#define IS_CONSTANT_INDEX 0x80
/* overloaded elements data types */
#define OE_IS_ARRAY (1<<0)
#define OE_IS_OBJECT (1<<1)
#define OE_IS_METHOD (1<<2)
/* Argument passing types */
#define BYREF_NONE 0
#define BYREF_FORCE 1
#define BYREF_ALLOW 2
#define BYREF_FORCE_REST 3
int zend_startup(zend_utility_functions *utility_functions, char **extensions, int start_builtin_functions);
void zend_shutdown(TSRMLS_D);
void zend_set_utility_values(zend_utility_values *utility_values);
BEGIN_EXTERN_C()
ZEND_API void _zend_bailout(char *filename, uint lineno);
END_EXTERN_C()
#define zend_bailout() _zend_bailout(__FILE__, __LINE__)
#define zend_try \
{ \
jmp_buf orig_bailout; \
zend_bool orig_bailout_set=EG(bailout_set); \
\
EG(bailout_set) = 1; \
memcpy(&orig_bailout, &EG(bailout), sizeof(jmp_buf)); \
if (setjmp(EG(bailout))==0)
#define zend_catch \
else
#define zend_end_try() \
memcpy(&EG(bailout), &orig_bailout, sizeof(jmp_buf)); \
EG(bailout_set) = orig_bailout_set; \
}
#define zend_first_try EG(bailout_set)=0; zend_try
ZEND_API char *get_zend_version(void);
ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_copy);
ZEND_API int zend_print_zval(zval *expr, int indent);
ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int indent);
ZEND_API void zend_print_zval_r(zval *expr, int indent);
ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int indent);
ZEND_API void zend_output_debug_string(zend_bool trigger_break, char *format, ...);
#if ZEND_DEBUG
#define Z_DBG(expr) (expr)
#else
#define Z_DBG(expr)
#endif
ZEND_API extern char *empty_string;
ZEND_API void free_estring(char **str_p);
#define STR_FREE(ptr) if (ptr && ptr!=empty_string) { efree(ptr); }
#define STR_FREE_REL(ptr) if (ptr && ptr!=empty_string) { efree_rel(ptr); }
#define STR_REALLOC(ptr, size) \
if (ptr!=empty_string) { \
ptr = (char *) erealloc(ptr, size); \
} else { \
ptr = (char *) emalloc(size); \
memset(ptr, 0, size); \
}
/* output support */
#define ZEND_WRITE(str, str_len) zend_write((str), (str_len))
#define ZEND_PUTS(str) zend_write((str), strlen((str)))
#define ZEND_PUTC(c) zend_write(&(c), 1), (c)
BEGIN_EXTERN_C()
extern ZEND_API int (*zend_printf)(const char *format, ...);
extern ZEND_API zend_write_func_t zend_write;
extern ZEND_API FILE *(*zend_fopen)(const char *filename, char **opened_path);
extern ZEND_API void (*zend_block_interruptions)(void);
extern ZEND_API void (*zend_unblock_interruptions)(void);
extern ZEND_API void (*zend_ticks_function)(int ticks);
extern ZEND_API void (*zend_error_cb)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
ZEND_API void zend_error(int type, const char *format, ...);
void zenderror(char *error);
/* The following #define is used for code duality in PHP for Engine 1 & 2 */
#define ZEND_STANDARD_CLASS_DEF_PTR zend_standard_class_def
extern ZEND_API zend_class_entry *zend_standard_class_def;
extern zend_utility_values zend_uv;
extern ZEND_API zval zval_used_for_init;
END_EXTERN_C()
#define ZEND_UV(name) (zend_uv.name)
#define HANDLE_BLOCK_INTERRUPTIONS() if (zend_block_interruptions) { zend_block_interruptions(); }
#define HANDLE_UNBLOCK_INTERRUPTIONS() if (zend_unblock_interruptions) { zend_unblock_interruptions(); }
BEGIN_EXTERN_C()
ZEND_API void zend_message_dispatcher(long message, void *data);
END_EXTERN_C()
ZEND_API int zend_get_configuration_directive(char *name, uint name_length, zval *contents);
/* Messages for applications of Zend */
#define ZMSG_FAILED_INCLUDE_FOPEN 1L
#define ZMSG_FAILED_REQUIRE_FOPEN 2L
#define ZMSG_FAILED_HIGHLIGHT_FOPEN 3L
#define ZMSG_MEMORY_LEAK_DETECTED 4L
#define ZMSG_MEMORY_LEAK_REPEATED 5L
#define ZMSG_LOG_SCRIPT_NAME 6L
#define ZVAL_ADDREF(pz) (++(pz)->refcount)
#define ZVAL_DELREF(pz) (--(pz)->refcount)
#define ZVAL_REFCOUNT(pz) ((pz)->refcount)
#define INIT_PZVAL(z) \
(z)->refcount = 1; \
(z)->is_ref = 0;
#define INIT_ZVAL(z) z = zval_used_for_init;
#define ALLOC_INIT_ZVAL(zp) \
ALLOC_ZVAL(zp); \
INIT_ZVAL(*zp);
#define MAKE_STD_ZVAL(zv) \
ALLOC_ZVAL(zv); \
INIT_PZVAL(zv);
#define PZVAL_IS_REF(z) ((z)->is_ref)
#define SEPARATE_ZVAL(ppzv) \
{ \
zval *orig_ptr = *(ppzv); \
\
if (orig_ptr->refcount>1) { \
orig_ptr->refcount--; \
ALLOC_ZVAL(*(ppzv)); \
**(ppzv) = *orig_ptr; \
zval_copy_ctor(*(ppzv)); \
(*(ppzv))->refcount=1; \
(*(ppzv))->is_ref = 0; \
} \
}
#define SEPARATE_ZVAL_IF_NOT_REF(ppzv) \
if (!PZVAL_IS_REF(*ppzv)) { \
SEPARATE_ZVAL(ppzv); \
}
#define SEPARATE_ZVAL_TO_MAKE_IS_REF(ppzv) \
if (!PZVAL_IS_REF(*ppzv)) { \
SEPARATE_ZVAL(ppzv); \
(*(ppzv))->is_ref = 1; \
}
#define COPY_PZVAL_TO_ZVAL(zv, pzv) \
(zv) = *(pzv); \
if ((pzv)->refcount>1) { \
zval_copy_ctor(&(zv)); \
(pzv)->refcount--; \
} else { \
FREE_ZVAL(pzv); \
} \
INIT_PZVAL(&(zv));
#define REPLACE_ZVAL_VALUE(ppzv_dest, pzv_src, copy) { \
int is_ref, refcount; \
\
SEPARATE_ZVAL_IF_NOT_REF(ppzv_dest); \
is_ref = (*ppzv_dest)->is_ref; \
refcount = (*ppzv_dest)->refcount; \
zval_dtor(*ppzv_dest); \
**ppzv_dest = *pzv_src; \
if (copy) { \
zval_copy_ctor(*ppzv_dest); \
} \
(*ppzv_dest)->is_ref = is_ref; \
(*ppzv_dest)->refcount = refcount; \
}
#define ZEND_MAX_RESERVED_RESOURCES 4
#endif /* ZEND_H */
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

-1426
View File
File diff suppressed because it is too large. Load diff
-429
View File
@@ -1,429 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
| Andrei Zmievski <andrei@php.net> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_API_H
#define ZEND_API_H
#include "zend_modules.h"
#include "zend_list.h"
#include "zend_fast_cache.h"
#include "zend_operators.h"
#include "zend_variables.h"
#include "zend_execute.h"
BEGIN_EXTERN_C()
#define ZEND_FN(name) zif_##name
#define ZEND_NAMED_FUNCTION(name) void name(INTERNAL_FUNCTION_PARAMETERS)
#define ZEND_FUNCTION(name) ZEND_NAMED_FUNCTION(ZEND_FN(name))
#define ZEND_NAMED_FE(zend_name, name, arg_types) { #zend_name, name, arg_types },
#define ZEND_FE(name, arg_types) ZEND_NAMED_FE(name, ZEND_FN(name), arg_types)
#define ZEND_FALIAS(name, alias, arg_types) ZEND_NAMED_FE(name, ZEND_FN(alias), arg_types)
#define ZEND_STATIC_FE(name, impl_name, arg_types) { name, impl_name, arg_types },
/* Name macros */
#define ZEND_MODULE_STARTUP_N(module) zm_startup_##module
#define ZEND_MODULE_SHUTDOWN_N(module) zm_shutdown_##module
#define ZEND_MODULE_ACTIVATE_N(module) zm_activate_##module
#define ZEND_MODULE_DEACTIVATE_N(module) zm_deactivate_##module
#define ZEND_MODULE_INFO_N(module) zm_info_##module
/* Declaration macros */
#define ZEND_MODULE_STARTUP_D(module) int ZEND_MODULE_STARTUP_N(module)(INIT_FUNC_ARGS)
#define ZEND_MODULE_SHUTDOWN_D(module) int ZEND_MODULE_SHUTDOWN_N(module)(SHUTDOWN_FUNC_ARGS)
#define ZEND_MODULE_ACTIVATE_D(module) int ZEND_MODULE_ACTIVATE_N(module)(INIT_FUNC_ARGS)
#define ZEND_MODULE_DEACTIVATE_D(module) int ZEND_MODULE_DEACTIVATE_N(module)(SHUTDOWN_FUNC_ARGS)
#define ZEND_MODULE_INFO_D(module) void ZEND_MODULE_INFO_N(module)(ZEND_MODULE_INFO_FUNC_ARGS)
#define ZEND_GET_MODULE(name) \
ZEND_DLEXPORT zend_module_entry *get_module(void) { return &name##_module_entry; }
#define ZEND_BEGIN_MODULE_GLOBALS(module_name) \
typedef struct _zend_##module_name##_globals {
#define ZEND_END_MODULE_GLOBALS(module_name) \
} zend_##module_name##_globals;
#ifdef ZTS
#define ZEND_DECLARE_MODULE_GLOBALS(module_name) \
ts_rsrc_id module_name##_globals_id;
#define ZEND_EXTERN_MODULE_GLOBALS(module_name) \
extern ts_rsrc_id module_name##_globals_id;
#define ZEND_INIT_MODULE_GLOBALS(module_name, globals_ctor, globals_dtor) \
ts_allocate_id(&module_name##_globals_id, sizeof(zend_##module_name##_globals), (ts_allocate_ctor) globals_ctor, (ts_allocate_dtor) globals_dtor);
#else
#define ZEND_DECLARE_MODULE_GLOBALS(module_name) \
zend_##module_name##_globals module_name##_globals;
#define ZEND_EXTERN_MODULE_GLOBALS(module_name) \
extern zend_##module_name##_globals module_name##_globals;
#define ZEND_INIT_MODULE_GLOBALS(module_name, globals_ctor, globals_dtor) \
globals_ctor(&module_name##_globals);
#endif
#define INIT_CLASS_ENTRY(class_container, class_name, functions) INIT_OVERLOADED_CLASS_ENTRY(class_container, class_name, functions, NULL, NULL, NULL)
#define INIT_OVERLOADED_CLASS_ENTRY(class_container, class_name, functions, handle_fcall, handle_propget, handle_propset) \
{ \
class_container.name = strdup(class_name); \
class_container.name_length = sizeof(class_name)-1; \
class_container.builtin_functions = functions; \
class_container.constructor = NULL; \
class_container.destructor = NULL; \
class_container.clone = NULL; \
class_container.create_object = NULL; \
class_container.handle_function_call = handle_fcall; \
class_container.handle_property_get = handle_propget; \
class_container.handle_property_set = handle_propset; \
}
int zend_next_free_module(void);
ZEND_API int zend_get_parameters(int ht, int param_count, ...);
ZEND_API int _zend_get_parameters_array(int ht, int param_count, zval **argument_array TSRMLS_DC);
ZEND_API int zend_get_parameters_ex(int param_count, ...);
ZEND_API int _zend_get_parameters_array_ex(int param_count, zval ***argument_array TSRMLS_DC);
#define zend_get_parameters_array(ht, param_count, argument_array) \
_zend_get_parameters_array(ht, param_count, argument_array TSRMLS_CC)
#define zend_get_parameters_array_ex(param_count, argument_array) \
_zend_get_parameters_array_ex(param_count, argument_array TSRMLS_CC)
/* Parameter parsing API -- andrei */
#define ZEND_PARSE_PARAMS_QUIET 1<<1
ZEND_API int zend_parse_parameters(int num_args TSRMLS_DC, char *type_spec, ...);
ZEND_API int zend_parse_parameters_ex(int flags, int num_args TSRMLS_DC, char *type_spec, ...);
ZEND_API char *zend_zval_type_name(zval *arg);
/* End of parameter parsing API -- andrei */
int zend_register_functions(zend_function_entry *functions, HashTable *function_table, int type TSRMLS_DC);
void zend_unregister_functions(zend_function_entry *functions, int count, HashTable *function_table TSRMLS_DC);
ZEND_API int zend_register_module(zend_module_entry *module_entry);
ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *class_entry TSRMLS_DC);
ZEND_API zend_class_entry *zend_register_internal_class_ex(zend_class_entry *class_entry, zend_class_entry *parent_ce, char *parent_name TSRMLS_DC);
ZEND_API zend_module_entry *zend_get_module(int module_number);
ZEND_API int zend_disable_function(char *function_name, uint function_name_length TSRMLS_DC);
ZEND_API void zend_wrong_param_count(TSRMLS_D);
ZEND_API zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callable_name);
ZEND_API char *zend_get_module_version(char *module_name);
ZEND_API zend_class_entry *zend_get_class_entry(zval *zobject);
#define getThis() (this_ptr)
#define WRONG_PARAM_COUNT ZEND_WRONG_PARAM_COUNT()
#define WRONG_PARAM_COUNT_WITH_RETVAL(ret) ZEND_WRONG_PARAM_COUNT_WITH_RETVAL(ret)
#define ARG_COUNT(dummy) (ht)
#define ZEND_NUM_ARGS() (ht)
#define ZEND_WRONG_PARAM_COUNT() { zend_wrong_param_count(TSRMLS_C); return; }
#define ZEND_WRONG_PARAM_COUNT_WITH_RETVAL(ret) { zend_wrong_param_count(TSRMLS_C); return ret; }
#ifndef ZEND_WIN32
#define DLEXPORT
#endif
ZEND_API int zend_startup_module(zend_module_entry *module);
#define array_init(arg) _array_init((arg) ZEND_FILE_LINE_CC)
#define object_init(arg) _object_init((arg) ZEND_FILE_LINE_CC TSRMLS_CC)
#define object_init_ex(arg, ce) _object_init_ex((arg), (ce) ZEND_FILE_LINE_CC TSRMLS_CC)
#define object_and_properties_init(arg, ce, properties) _object_and_properties_init((arg), (ce), (properties) ZEND_FILE_LINE_CC TSRMLS_CC)
ZEND_API int _array_init(zval *arg ZEND_FILE_LINE_DC);
ZEND_API int _object_init(zval *arg ZEND_FILE_LINE_DC TSRMLS_DC);
ZEND_API int _object_init_ex(zval *arg, zend_class_entry *ce ZEND_FILE_LINE_DC TSRMLS_DC);
ZEND_API int _object_and_properties_init(zval *arg, zend_class_entry *ce, HashTable *properties ZEND_FILE_LINE_DC TSRMLS_DC);
/* no longer supported */
ZEND_API int add_assoc_function(zval *arg, char *key, void (*function_ptr)(INTERNAL_FUNCTION_PARAMETERS));
ZEND_API int add_assoc_long_ex(zval *arg, char *key, uint key_len, long n);
ZEND_API int add_assoc_null_ex(zval *arg, char *key, uint key_len);
ZEND_API int add_assoc_bool_ex(zval *arg, char *key, uint key_len, int b);
ZEND_API int add_assoc_resource_ex(zval *arg, char *key, uint key_len, int r);
ZEND_API int add_assoc_double_ex(zval *arg, char *key, uint key_len, double d);
ZEND_API int add_assoc_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate);
ZEND_API int add_assoc_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate);
ZEND_API int add_assoc_zval_ex(zval *arg, char *key, uint key_len, zval *value);
#define add_assoc_long(__arg, __key, __n) add_assoc_long_ex(__arg, __key, strlen(__key)+1, __n)
#define add_assoc_null(__arg, __key) add_assoc_null_ex(__arg, __key, strlen(__key) + 1)
#define add_assoc_bool(__arg, __key, __b) add_assoc_bool_ex(__arg, __key, strlen(__key)+1, __b)
#define add_assoc_resource(__arg, __key, __r) add_assoc_resource_ex(__arg, __key, strlen(__key)+1, __r)
#define add_assoc_double(__arg, __key, __d) add_assoc_double_ex(__arg, __key, strlen(__key)+1, __d)
#define add_assoc_string(__arg, __key, __str, __duplicate) add_assoc_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate)
#define add_assoc_stringl(__arg, __key, __str, __length, __duplicate) add_assoc_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate)
#define add_assoc_zval(__arg, __key, __value) add_assoc_zval_ex(__arg, __key, strlen(__key)+1, __value)
/* unset() functions are only suported for legacy modules and null() functions should be used */
#define add_assoc_unset(__arg, __key) add_assoc_null_ex(__arg, __key, strlen(__key) + 1)
#define add_index_unset(__arg, __key) add_index_null(__arg, __key)
#define add_next_index_unset(__arg) add_next_index_null(__arg)
#define add_property_unset(__arg, __key) add_property_null(__arg, __key)
ZEND_API int add_index_long(zval *arg, uint idx, long n);
ZEND_API int add_index_null(zval *arg, uint idx);
ZEND_API int add_index_bool(zval *arg, uint idx, int b);
ZEND_API int add_index_resource(zval *arg, uint idx, int r);
ZEND_API int add_index_double(zval *arg, uint idx, double d);
ZEND_API int add_index_string(zval *arg, uint idx, char *str, int duplicate);
ZEND_API int add_index_stringl(zval *arg, uint idx, char *str, uint length, int duplicate);
ZEND_API int add_index_zval(zval *arg, uint index, zval *value);
ZEND_API int add_next_index_long(zval *arg, long n);
ZEND_API int add_next_index_null(zval *arg);
ZEND_API int add_next_index_bool(zval *arg, int b);
ZEND_API int add_next_index_resource(zval *arg, int r);
ZEND_API int add_next_index_double(zval *arg, double d);
ZEND_API int add_next_index_string(zval *arg, char *str, int duplicate);
ZEND_API int add_next_index_stringl(zval *arg, char *str, uint length, int duplicate);
ZEND_API int add_next_index_zval(zval *arg, zval *value);
ZEND_API int add_get_assoc_string_ex(zval *arg, char *key, uint key_len, char *str, void **dest, int duplicate);
ZEND_API int add_get_assoc_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, void **dest, int duplicate);
#define add_get_assoc_string(__arg, __key, __str, __dest, __duplicate) add_get_assoc_string_ex(__arg, __key, strlen(__key)+1, __str, __dest, __duplicate)
#define add_get_assoc_stringl(__arg, __key, __str, __length, __dest, __duplicate) add_get_assoc_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __dest, __duplicate)
ZEND_API int add_get_index_long(zval *arg, uint idx, long l, void **dest);
ZEND_API int add_get_index_double(zval *arg, uint idx, double d, void **dest);
ZEND_API int add_get_index_string(zval *arg, uint idx, char *str, void **dest, int duplicate);
ZEND_API int add_get_index_stringl(zval *arg, uint idx, char *str, uint length, void **dest, int duplicate);
ZEND_API int add_property_long_ex(zval *arg, char *key, uint key_len, long l);
ZEND_API int add_property_null_ex(zval *arg, char *key, uint key_len);
ZEND_API int add_property_bool_ex(zval *arg, char *key, uint key_len, int b);
ZEND_API int add_property_resource_ex(zval *arg, char *key, uint key_len, long r);
ZEND_API int add_property_double_ex(zval *arg, char *key, uint key_len, double d);
ZEND_API int add_property_string_ex(zval *arg, char *key, uint key_len, char *str, int duplicate);
ZEND_API int add_property_stringl_ex(zval *arg, char *key, uint key_len, char *str, uint length, int duplicate);
ZEND_API int add_property_zval_ex(zval *arg, char *key, uint key_len, zval *value);
#define add_property_long(__arg, __key, __n) add_property_long_ex(__arg, __key, strlen(__key)+1, __n)
#define add_property_null(__arg, __key) add_property_null_ex(__arg, __key, strlen(__key) + 1)
#define add_property_bool(__arg, __key, __b) add_property_bool_ex(__arg, __key, strlen(__key)+1, __b)
#define add_property_resource(__arg, __key, __r) add_property_resource_ex(__arg, __key, strlen(__key)+1, __r)
#define add_property_double(__arg, __key, __d) add_property_double_ex(__arg, __key, strlen(__key)+1, __d)
#define add_property_string(__arg, __key, __str, __duplicate) add_property_string_ex(__arg, __key, strlen(__key)+1, __str, __duplicate)
#define add_property_stringl(__arg, __key, __str, __length, __duplicate) add_property_stringl_ex(__arg, __key, strlen(__key)+1, __str, __length, __duplicate)
#define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg, __key, strlen(__key)+1, __value)
ZEND_API int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, int param_count, zval *params[] TSRMLS_DC);
ZEND_API int call_user_function_ex(HashTable *function_table, zval **object_pp, zval *function_name, zval **retval_ptr_ptr, int param_count, zval **params[], int no_separation, HashTable *symbol_table TSRMLS_DC);
ZEND_API int zend_set_hash_symbol(zval *symbol, char *name, int name_length,
zend_bool is_ref, int num_symbol_tables, ...);
#define add_method(arg, key, method) add_assoc_function((arg), (key), (method))
#if ZEND_DEBUG
#define CHECK_ZVAL_STRING(z) \
if ((z)->value.str.val[ (z)->value.str.len ] != '\0') zend_error(E_WARNING, "String is not zero-terminated (%s)", (z)->value.str.val);
#define CHECK_ZVAL_STRING_REL(z) \
if ((z)->value.str.val[ (z)->value.str.len ] != '\0') zend_error(E_WARNING, "String is not zero-terminated (%s) (source: %s:%d)", (z)->value.str.val ZEND_FILE_LINE_RELAY_CC);
#else
#define CHECK_ZVAL_STRING(z)
#define CHECK_ZVAL_STRING_REL(z)
#endif
#define ZVAL_RESOURCE(z, l) { \
(z)->type = IS_RESOURCE; \
(z)->value.lval = l; \
}
#define ZVAL_BOOL(z, b) { \
(z)->type = IS_BOOL; \
(z)->value.lval = b; \
}
#define ZVAL_NULL(z) { \
(z)->type = IS_NULL; \
}
#define ZVAL_LONG(z, l) { \
(z)->type = IS_LONG; \
(z)->value.lval = l; \
}
#define ZVAL_DOUBLE(z, d) { \
(z)->type = IS_DOUBLE; \
(z)->value.dval = d; \
}
#define ZVAL_STRING(z, s, duplicate) { \
char *__s=(s); \
(z)->value.str.len = strlen(__s); \
(z)->value.str.val = (duplicate?estrndup(__s, (z)->value.str.len):__s); \
(z)->type = IS_STRING; \
}
#define ZVAL_STRINGL(z, s, l, duplicate) { \
char *__s=(s); int __l=l; \
(z)->value.str.len = __l; \
(z)->value.str.val = (duplicate?estrndup(__s, __l):__s); \
(z)->type = IS_STRING; \
}
#define ZVAL_EMPTY_STRING(z) { \
(z)->value.str.len = 0; \
(z)->value.str.val = empty_string; \
(z)->type = IS_STRING; \
}
#define ZVAL_FALSE(z) ZVAL_BOOL(z, 0)
#define ZVAL_TRUE(z) ZVAL_BOOL(z, 1)
#define RETVAL_RESOURCE(l) ZVAL_RESOURCE(return_value, l)
#define RETVAL_BOOL(b) ZVAL_BOOL(return_value, b)
#define RETVAL_NULL() ZVAL_NULL(return_value)
#define RETVAL_LONG(l) ZVAL_LONG(return_value, l)
#define RETVAL_DOUBLE(d) ZVAL_DOUBLE(return_value, d)
#define RETVAL_STRING(s, duplicate) ZVAL_STRING(return_value, s, duplicate)
#define RETVAL_STRINGL(s, l, duplicate) ZVAL_STRINGL(return_value, s, l, duplicate)
#define RETVAL_EMPTY_STRING() ZVAL_EMPTY_STRING(return_value)
#define RETVAL_FALSE ZVAL_BOOL(return_value, 0)
#define RETVAL_TRUE ZVAL_BOOL(return_value, 1)
#define RETURN_RESOURCE(l) { RETVAL_RESOURCE(l); return; }
#define RETURN_BOOL(b) { RETVAL_BOOL(b); return; }
#define RETURN_NULL() { RETVAL_NULL(); return;}
#define RETURN_LONG(l) { RETVAL_LONG(l); return; }
#define RETURN_DOUBLE(d) { RETVAL_DOUBLE(d); return; }
#define RETURN_STRING(s, duplicate) { RETVAL_STRING(s, duplicate); return; }
#define RETURN_STRINGL(s, l, duplicate) { RETVAL_STRINGL(s, l, duplicate); return; }
#define RETURN_EMPTY_STRING() { RETVAL_EMPTY_STRING(); return; }
#define RETURN_FALSE { RETVAL_FALSE; return; }
#define RETURN_TRUE { RETVAL_TRUE; return; }
#define SET_VAR_STRING(n, v) { \
{ \
zval *var; \
ALLOC_ZVAL(var); \
ZVAL_STRING(var, v, 0); \
ZEND_SET_GLOBAL_VAR(n, var); \
} \
}
#define SET_VAR_STRINGL(n, v, l) { \
{ \
zval *var; \
ALLOC_ZVAL(var); \
ZVAL_STRINGL(var, v, l, 0); \
ZEND_SET_GLOBAL_VAR(n, var); \
} \
}
#define SET_VAR_LONG(n, v) { \
{ \
zval *var; \
ALLOC_ZVAL(var); \
ZVAL_LONG(var, v); \
ZEND_SET_GLOBAL_VAR(n, var); \
} \
}
#define SET_VAR_DOUBLE(n, v) { \
{ \
zval *var; \
ALLOC_ZVAL(var); \
ZVAL_DOUBLE(var, v); \
ZEND_SET_GLOBAL_VAR(n, var); \
} \
}
#define ZEND_SET_SYMBOL(symtable, name, var) \
{ \
char *_name = (name); \
\
ZEND_SET_SYMBOL_WITH_LENGTH(symtable, _name, strlen(_name)+1, var, 1, 0); \
}
#define ZEND_SET_SYMBOL_WITH_LENGTH(symtable, name, name_length, var, _refcount, _is_ref) \
{ \
zval **orig_var; \
\
if (zend_hash_find(symtable, (name), (name_length), (void **) &orig_var)==SUCCESS \
&& PZVAL_IS_REF(*orig_var)) { \
(var)->refcount = (*orig_var)->refcount; \
(var)->is_ref = 1; \
\
if (_refcount) { \
(var)->refcount += _refcount-1; \
} \
zval_dtor(*orig_var); \
**orig_var = *(var); \
FREE_ZVAL(var); \
} else { \
(var)->is_ref = _is_ref; \
if (_refcount) { \
(var)->refcount = _refcount; \
} \
zend_hash_update(symtable, (name), (name_length), &(var), sizeof(zval *), NULL); \
} \
}
#define ZEND_SET_GLOBAL_VAR(name, var) \
ZEND_SET_SYMBOL(&EG(symbol_table), name, var)
#define ZEND_SET_GLOBAL_VAR_WITH_LENGTH(name, name_length, var, _refcount, _is_ref) \
ZEND_SET_SYMBOL_WITH_LENGTH(&EG(symbol_table), name, name_length, var, _refcount, _is_ref)
#define HASH_OF(p) ((p)->type==IS_ARRAY ? (p)->value.ht : (((p)->type==IS_OBJECT ? Z_OBJ_HT_P(p)->get_properties((p) TSRMLS_CC) : NULL)))
#define ZVAL_IS_NULL(z) ((z)->type==IS_NULL)
/* For compatibility */
#define ZEND_MINIT ZEND_MODULE_STARTUP_N
#define ZEND_MSHUTDOWN ZEND_MODULE_SHUTDOWN_N
#define ZEND_RINIT ZEND_MODULE_ACTIVATE_N
#define ZEND_RSHUTDOWN ZEND_MODULE_DEACTIVATE_N
#define ZEND_MINFO ZEND_MODULE_INFO_N
#define ZEND_MINIT_FUNCTION ZEND_MODULE_STARTUP_D
#define ZEND_MSHUTDOWN_FUNCTION ZEND_MODULE_SHUTDOWN_D
#define ZEND_RINIT_FUNCTION ZEND_MODULE_ACTIVATE_D
#define ZEND_RSHUTDOWN_FUNCTION ZEND_MODULE_DEACTIVATE_D
#define ZEND_MINFO_FUNCTION ZEND_MODULE_INFO_D
END_EXTERN_C()
#endif /* ZEND_API_H */
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
-755
View File
@@ -1,755 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#include <stdlib.h>
#include "zend.h"
#include "zend_alloc.h"
#include "zend_globals.h"
#include "zend_fast_cache.h"
#ifdef HAVE_SIGNAL_H
# include <signal.h>
#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#include "zend_mm.h"
#ifndef ZTS
ZEND_API zend_alloc_globals alloc_globals;
#endif
#ifdef ZEND_MM
#define ZEND_DISABLE_MEMORY_CACHE 1
#else
#define ZEND_DISABLE_MEMORY_CACHE 0
#endif
#ifdef ZEND_MM
#define ZEND_DO_MALLOC(size) zend_mm_alloc(&AG(mm_heap), size)
#define ZEND_DO_FREE(ptr) zend_mm_free(&AG(mm_heap), ptr)
#define ZEND_DO_REALLOC(ptr, size) zend_mm_realloc(&AG(mm_heap), ptr, size)
#elif defined(ZEND_WIN32)
#define ZEND_DO_MALLOC(size) (AG(memory_heap) ? HeapAlloc(AG(memory_heap), HEAP_NO_SERIALIZE, size) : malloc(size))
#define ZEND_DO_FREE(ptr) (AG(memory_heap) ? HeapFree(AG(memory_heap), HEAP_NO_SERIALIZE, ptr) : free(ptr))
#define ZEND_DO_REALLOC(ptr, size) (AG(memory_heap) ? HeapReAlloc(AG(memory_heap), HEAP_NO_SERIALIZE, ptr, size) : realloc(ptr, size))
#else
#define ZEND_DO_MALLOC(size) malloc(size)
#define ZEND_DO_FREE(ptr) free(ptr)
#define ZEND_DO_REALLOC(ptr, size) realloc(ptr, size)
#endif
#if ZEND_DEBUG
# define END_MAGIC_SIZE sizeof(long)
static long mem_block_end_magic = MEM_BLOCK_END_MAGIC;
#else
# define END_MAGIC_SIZE 0
#endif
# if MEMORY_LIMIT
# if ZEND_DEBUG
#define CHECK_MEMORY_LIMIT(s, rs) _CHECK_MEMORY_LIMIT(s, rs, __zend_filename, __zend_lineno)
# else
#define CHECK_MEMORY_LIMIT(s, rs) _CHECK_MEMORY_LIMIT(s, rs, NULL, 0)
# endif
#define _CHECK_MEMORY_LIMIT(s, rs, file, lineno) { AG(allocated_memory) += rs;\
if (AG(memory_limit)<AG(allocated_memory)) {\
if ((AG(memory_limit)+1048576)<AG(allocated_memory)) { \
/* failed to handle this gracefully, exit() */ \
exit(1); \
} \
if (!AG(memory_exhausted)) { \
if (!file) { \
zend_error(E_ERROR,"Allowed memory size of %d bytes exhausted (tried to allocate %d bytes)", AG(memory_limit), s); \
} else { \
zend_error(E_ERROR,"Allowed memory size of %d bytes exhausted at %s:%d (tried to allocate %d bytes)", AG(memory_limit), file, lineno, s); \
} \
AG(memory_exhausted)=1; \
} \
} \
}
# endif
#ifndef CHECK_MEMORY_LIMIT
#define CHECK_MEMORY_LIMIT(s, rs)
#endif
#define REMOVE_POINTER_FROM_LIST(p) \
if (p==AG(head)) { \
AG(head) = p->pNext; \
} else { \
p->pLast->pNext = p->pNext; \
} \
if (p->pNext) { \
p->pNext->pLast = p->pLast; \
}
#define ADD_POINTER_TO_LIST(p) \
p->pNext = AG(head); \
if (AG(head)) { \
AG(head)->pLast = p; \
} \
AG(head) = p; \
p->pLast = (zend_mem_header *) NULL;
#define DECLARE_CACHE_VARS() \
unsigned int real_size; \
unsigned int cache_index
#define REAL_SIZE(size) ((size+7) & ~0x7)
#define CALCULATE_REAL_SIZE_AND_CACHE_INDEX(size) \
real_size = REAL_SIZE(size); \
cache_index = real_size >> 3;
#define SIZE real_size
#define CACHE_INDEX cache_index
ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
zend_mem_header *p;
DECLARE_CACHE_VARS();
TSRMLS_FETCH();
CALCULATE_REAL_SIZE_AND_CACHE_INDEX(size);
if (!ZEND_DISABLE_MEMORY_CACHE && (CACHE_INDEX < MAX_CACHED_MEMORY) && (AG(cache_count)[CACHE_INDEX] > 0)) {
p = AG(cache)[CACHE_INDEX][--AG(cache_count)[CACHE_INDEX]];
#if ZEND_DEBUG
p->filename = __zend_filename;
p->lineno = __zend_lineno;
p->orig_filename = __zend_orig_filename;
p->orig_lineno = __zend_orig_lineno;
p->magic = MEM_BLOCK_START_MAGIC;
p->reported = 0;
/* Setting the thread id should not be necessary, because we fetched this block
* from this thread's cache
*/
AG(cache_stats)[CACHE_INDEX][1]++;
memcpy((((char *) p) + sizeof(zend_mem_header) + MEM_HEADER_PADDING + size), &mem_block_end_magic, sizeof(long));
#endif
p->cached = 0;
p->size = size;
return (void *)((char *)p + sizeof(zend_mem_header) + MEM_HEADER_PADDING);
} else {
#if ZEND_DEBUG
if (CACHE_INDEX<MAX_CACHED_MEMORY) {
AG(cache_stats)[CACHE_INDEX][0]++;
}
#endif
p = (zend_mem_header *) ZEND_DO_MALLOC(sizeof(zend_mem_header) + MEM_HEADER_PADDING + SIZE + END_MAGIC_SIZE);
}
HANDLE_BLOCK_INTERRUPTIONS();
if (!p) {
fprintf(stderr,"FATAL: emalloc(): Unable to allocate %ld bytes\n", (long) size);
#if ZEND_DEBUG && defined(HAVE_KILL) && defined(HAVE_GETPID)
kill(getpid(), SIGSEGV);
#else
exit(1);
#endif
HANDLE_UNBLOCK_INTERRUPTIONS();
return (void *)p;
}
p->cached = 0;
#if ZEND_DEBUG || !defined(ZEND_MM)
ADD_POINTER_TO_LIST(p);
#endif
p->size = size; /* Save real size for correct cache output */
#if ZEND_DEBUG
p->filename = __zend_filename;
p->lineno = __zend_lineno;
p->orig_filename = __zend_orig_filename;
p->orig_lineno = __zend_orig_lineno;
p->magic = MEM_BLOCK_START_MAGIC;
p->reported = 0;
# ifdef ZTS
p->thread_id = tsrm_thread_id();
# endif
memcpy((((char *) p) + sizeof(zend_mem_header) + MEM_HEADER_PADDING + size), &mem_block_end_magic, sizeof(long));
#endif
#if MEMORY_LIMIT
CHECK_MEMORY_LIMIT(size, SIZE);
if (AG(allocated_memory) > AG(allocated_memory_peak)) {
AG(allocated_memory_peak) = AG(allocated_memory);
}
#endif
HANDLE_UNBLOCK_INTERRUPTIONS();
return (void *)((char *)p + sizeof(zend_mem_header) + MEM_HEADER_PADDING);
}
ZEND_API void _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
zend_mem_header *p = (zend_mem_header *) ((char *)ptr - sizeof(zend_mem_header) - MEM_HEADER_PADDING);
DECLARE_CACHE_VARS();
TSRMLS_FETCH();
#if defined(ZTS) && TSRM_DEBUG
if (p->thread_id != tsrm_thread_id()) {
tsrm_error(TSRM_ERROR_LEVEL_ERROR, "Memory block allocated at %s:(%d) on thread %x freed at %s:(%d) on thread %x, ignoring",
p->filename, p->lineno, p->thread_id,
__zend_filename, __zend_lineno, tsrm_thread_id());
return;
}
#endif
CALCULATE_REAL_SIZE_AND_CACHE_INDEX(p->size);
#if ZEND_DEBUG
if (!_mem_block_check(ptr, 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC)) {
return;
}
memset(ptr, 0x5a, p->size);
#endif
if (!ZEND_DISABLE_MEMORY_CACHE
&& (CACHE_INDEX < MAX_CACHED_MEMORY) && (AG(cache_count)[CACHE_INDEX] < MAX_CACHED_ENTRIES)) {
AG(cache)[CACHE_INDEX][AG(cache_count)[CACHE_INDEX]++] = p;
p->cached = 1;
#if ZEND_DEBUG
p->magic = MEM_BLOCK_CACHED_MAGIC;
#endif
return;
}
HANDLE_BLOCK_INTERRUPTIONS();
#if ZEND_DEBUG || !defined(ZEND_MM)
REMOVE_POINTER_FROM_LIST(p);
#endif
#if MEMORY_LIMIT
AG(allocated_memory) -= SIZE;
#endif
ZEND_DO_FREE(p);
HANDLE_UNBLOCK_INTERRUPTIONS();
}
ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
void *p;
int final_size = size*nmemb;
HANDLE_BLOCK_INTERRUPTIONS();
p = _emalloc(final_size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
if (!p) {
HANDLE_UNBLOCK_INTERRUPTIONS();
return (void *) p;
}
memset(p, 0, final_size);
HANDLE_UNBLOCK_INTERRUPTIONS();
return p;
}
ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
zend_mem_header *p;
zend_mem_header *orig;
DECLARE_CACHE_VARS();
TSRMLS_FETCH();
if (!ptr) {
return _emalloc(size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
}
p = orig = (zend_mem_header *) ((char *)ptr-sizeof(zend_mem_header)-MEM_HEADER_PADDING);
#if defined(ZTS) && TSRM_DEBUG
if (p->thread_id != tsrm_thread_id()) {
void *new_p;
tsrm_error(TSRM_ERROR_LEVEL_ERROR, "Memory block allocated at %s:(%d) on thread %x reallocated at %s:(%d) on thread %x, duplicating",
p->filename, p->lineno, p->thread_id,
__zend_filename, __zend_lineno, tsrm_thread_id());
new_p = _emalloc(size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
memcpy(new_p, ptr, p->size);
return new_p;
}
#endif
CALCULATE_REAL_SIZE_AND_CACHE_INDEX(size);
HANDLE_BLOCK_INTERRUPTIONS();
#if ZEND_DEBUG || !defined(ZEND_MM)
REMOVE_POINTER_FROM_LIST(p);
#endif
p = (zend_mem_header *) ZEND_DO_REALLOC(p, sizeof(zend_mem_header)+MEM_HEADER_PADDING+SIZE+END_MAGIC_SIZE);
if (!p) {
if (!allow_failure) {
fprintf(stderr,"FATAL: erealloc(): Unable to allocate %ld bytes\n", (long) size);
#if ZEND_DEBUG && HAVE_KILL && HAVE_GETPID
kill(getpid(), SIGSEGV);
#else
exit(1);
#endif
}
#if ZEND_DEBUG || !defined(ZEND_MM)
ADD_POINTER_TO_LIST(orig);
#endif
HANDLE_UNBLOCK_INTERRUPTIONS();
return (void *)NULL;
}
#if ZEND_DEBUG || !defined(ZEND_MM)
ADD_POINTER_TO_LIST(p);
#endif
#if ZEND_DEBUG
p->filename = __zend_filename;
p->lineno = __zend_lineno;
p->magic = MEM_BLOCK_START_MAGIC;
memcpy((((char *) p) + sizeof(zend_mem_header) + MEM_HEADER_PADDING + size), &mem_block_end_magic, sizeof(long));
#endif
#if MEMORY_LIMIT
CHECK_MEMORY_LIMIT(size - p->size, SIZE - REAL_SIZE(p->size));
if (AG(allocated_memory) > AG(allocated_memory_peak)) {
AG(allocated_memory_peak) = AG(allocated_memory);
}
#endif
p->size = size;
HANDLE_UNBLOCK_INTERRUPTIONS();
return (void *)((char *)p+sizeof(zend_mem_header)+MEM_HEADER_PADDING);
}
ZEND_API char *_estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
int length;
char *p;
length = strlen(s)+1;
HANDLE_BLOCK_INTERRUPTIONS();
p = (char *) _emalloc(length ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
if (!p) {
HANDLE_UNBLOCK_INTERRUPTIONS();
return (char *)NULL;
}
HANDLE_UNBLOCK_INTERRUPTIONS();
memcpy(p, s, length);
return p;
}
ZEND_API char *_estrndup(const char *s, uint length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
char *p;
HANDLE_BLOCK_INTERRUPTIONS();
p = (char *) _emalloc(length+1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
if (!p) {
HANDLE_UNBLOCK_INTERRUPTIONS();
return (char *)NULL;
}
HANDLE_UNBLOCK_INTERRUPTIONS();
memcpy(p, s, length);
p[length] = 0;
return p;
}
ZEND_API char *zend_strndup(const char *s, uint length)
{
char *p;
p = (char *) malloc(length+1);
if (!p) {
return (char *)NULL;
}
if (length) {
memcpy(p, s, length);
}
p[length] = 0;
return p;
}
ZEND_API int zend_set_memory_limit(unsigned int memory_limit)
{
#if MEMORY_LIMIT
TSRMLS_FETCH();
AG(memory_limit) = memory_limit;
return SUCCESS;
#else
return FAILURE;
#endif
}
ZEND_API void start_memory_manager(TSRMLS_D)
{
AG(head) = NULL;
#if MEMORY_LIMIT
AG(memory_limit) = 1<<30; /* ridiculous limit, effectively no limit */
AG(allocated_memory) = 0;
AG(memory_exhausted) = 0;
AG(allocated_memory_peak) = 0;
#endif
#if ZEND_ENABLE_FAST_CACHE
memset(AG(fast_cache_list_head), 0, sizeof(AG(fast_cache_list_head)));
#endif
#if !ZEND_DISABLE_MEMORY_CACHE
memset(AG(cache_count), 0, sizeof(AG(cache_count)));
#endif
#ifdef ZEND_MM
zend_mm_startup(&AG(mm_heap), 256*1024);
#elif defined(ZEND_WIN32)
AG(memory_heap) = HeapCreate(HEAP_NO_SERIALIZE, 256*1024, 0);
#endif
#if ZEND_DEBUG
memset(AG(cache_stats), 0, sizeof(AG(cache_stats)));
memset(AG(fast_cache_stats), 0, sizeof(AG(fast_cache_stats)));
#endif
}
ZEND_API void shutdown_memory_manager(int silent, int clean_cache TSRMLS_DC)
{
zend_mem_header *p, *t;
#if ZEND_DEBUG
int had_leaks = 0;
#endif
#if defined(ZEND_MM) && !ZEND_DEBUG
if (clean_cache) {
zend_mm_shutdown(&AG(mm_heap));
return;
}
#elif defined(ZEND_WIN32) && !ZEND_DEBUG
if (clean_cache && AG(memory_heap)) {
HeapDestroy(AG(memory_heap));
return;
}
#endif
#if ZEND_ENABLE_FAST_CACHE
{
zend_fast_cache_list_entry *fast_cache_list_entry, *next_fast_cache_list_entry;
unsigned int fci;
for (fci=0; fci<MAX_FAST_CACHE_TYPES; fci++) {
fast_cache_list_entry = AG(fast_cache_list_head)[fci];
while (fast_cache_list_entry) {
next_fast_cache_list_entry = fast_cache_list_entry->next;
efree(fast_cache_list_entry);
fast_cache_list_entry = next_fast_cache_list_entry;
}
AG(fast_cache_list_head)[fci] = NULL;
}
}
#endif /* ZEND_ENABLE_FAST_CACHE */
#if !ZEND_DISABLE_MEMORY_CACHE
if (1 || clean_cache) {
unsigned int i, j;
zend_mem_header *ptr;
for (i=1; i<MAX_CACHED_MEMORY; i++) {
for (j=0; j<AG(cache_count)[i]; j++) {
ptr = (zend_mem_header *) AG(cache)[i][j];
#if MEMORY_LIMIT
AG(allocated_memory) -= REAL_SIZE(ptr->size);
#endif
REMOVE_POINTER_FROM_LIST(ptr);
ZEND_DO_FREE(ptr);
}
AG(cache_count)[i] = 0;
}
}
#endif /* !ZEND_DISABLE_MEMORY_CACHE */
#if ZEND_DEBUG || !defined(ZEND_MM)
p = AG(head);
t = AG(head);
while (t) {
if (!t->cached) {
#if ZEND_DEBUG
if (!t->cached && !t->reported) {
zend_mem_header *iterator;
int total_leak=0, total_leak_count=0;
had_leaks = 1;
if (!silent) {
zend_message_dispatcher(ZMSG_MEMORY_LEAK_DETECTED, t);
}
t->reported = 1;
for (iterator=t->pNext; iterator; iterator=iterator->pNext) {
if (!iterator->cached
&& iterator->filename==t->filename
&& iterator->lineno==t->lineno) {
total_leak += iterator->size;
total_leak_count++;
iterator->reported = 1;
}
}
if (!silent && total_leak_count>0) {
zend_message_dispatcher(ZMSG_MEMORY_LEAK_REPEATED, (void *) (long) (total_leak_count));
}
}
#endif
#if MEMORY_LIMIT
AG(allocated_memory) -= t->size;
#endif
p = t->pNext;
REMOVE_POINTER_FROM_LIST(t);
ZEND_DO_FREE(t);
t = p;
} else {
t = t->pNext;
}
}
#if MEMORY_LIMIT
AG(memory_exhausted)=0;
AG(allocated_memory_peak) = 0;
#endif
#if (ZEND_DEBUG)
do {
zval display_memory_cache_stats;
int i, j;
if (clean_cache) {
/* we're shutting down completely, don't even touch the INI subsystem */
break;
}
if (zend_get_configuration_directive("display_memory_cache_stats", sizeof("display_memory_cache_stats"), &display_memory_cache_stats)==FAILURE) {
break;
}
if (!atoi(display_memory_cache_stats.value.str.val)) {
break;
}
fprintf(stderr, "Memory cache statistics\n"
"-----------------------\n\n"
"[zval, %2ld]\t\t%d / %d (%.2f%%)\n"
"[hash, %2ld]\t\t%d / %d (%.2f%%)\n",
(long) sizeof(zval),
AG(fast_cache_stats)[ZVAL_CACHE_LIST][1], AG(fast_cache_stats)[ZVAL_CACHE_LIST][0]+AG(fast_cache_stats)[ZVAL_CACHE_LIST][1],
((double) AG(fast_cache_stats)[ZVAL_CACHE_LIST][1] / (AG(fast_cache_stats)[ZVAL_CACHE_LIST][0]+AG(fast_cache_stats)[ZVAL_CACHE_LIST][1]))*100,
(long) sizeof(HashTable),
AG(fast_cache_stats)[HASHTABLE_CACHE_LIST][1], AG(fast_cache_stats)[HASHTABLE_CACHE_LIST][0]+AG(fast_cache_stats)[HASHTABLE_CACHE_LIST][1],
((double) AG(fast_cache_stats)[HASHTABLE_CACHE_LIST][1] / (AG(fast_cache_stats)[HASHTABLE_CACHE_LIST][0]+AG(fast_cache_stats)[HASHTABLE_CACHE_LIST][1]))*100);
for (i=0; i<MAX_CACHED_MEMORY; i+=2) {
fprintf(stderr, "[%2d, %2d]\t\t", i, i+1);
for (j=0; j<2; j++) {
fprintf(stderr, "%d / %d (%.2f%%)\t\t",
AG(cache_stats)[i+j][1], AG(cache_stats)[i+j][0]+AG(cache_stats)[i+j][1],
((double) AG(cache_stats)[i+j][1] / (AG(cache_stats)[i+j][0]+AG(cache_stats)[i+j][1]))*100);
}
fprintf(stderr, "\n");
}
} while (0);
#endif
#endif
#if defined(ZEND_MM) && ZEND_DEBUG
if (clean_cache) {
zend_mm_shutdown(&AG(mm_heap));
return;
}
#elif defined(ZEND_WIN32) && ZEND_DEBUG
if (clean_cache && AG(memory_heap)) {
HeapDestroy(AG(memory_heap));
return;
}
#endif
}
#if ZEND_DEBUG
void zend_debug_alloc_output(char *format, ...)
{
char output_buf[256];
va_list args;
va_start(args, format);
vsprintf(output_buf, format, args);
va_end(args);
#ifdef ZEND_WIN32
OutputDebugString(output_buf);
#else
fprintf(stderr, "%s", output_buf);
#endif
}
ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
zend_mem_header *p = (zend_mem_header *) ((char *)ptr - sizeof(zend_mem_header) - MEM_HEADER_PADDING);
int no_cache_notice=0;
int valid_beginning=1;
int had_problems=0;
long end_magic;
if (silent==2) {
silent = 1;
no_cache_notice = 1;
}
if (silent==3) {
silent = 0;
no_cache_notice = 1;
}
if (!silent) {
zend_message_dispatcher(ZMSG_LOG_SCRIPT_NAME, NULL);
zend_debug_alloc_output("---------------------------------------\n");
zend_debug_alloc_output("%s(%d) : Block 0x%0.8lX status:\n" ZEND_FILE_LINE_RELAY_CC, (long) p);
if (__zend_orig_filename) {
zend_debug_alloc_output("%s(%d) : Actual location (location was relayed)\n" ZEND_FILE_LINE_ORIG_RELAY_CC);
}
zend_debug_alloc_output("%10s\t","Beginning: ");
}
switch (p->magic) {
case MEM_BLOCK_START_MAGIC:
if (!silent) {
zend_debug_alloc_output("OK (allocated on %s:%d, %d bytes)\n", p->filename, p->lineno, p->size);
}
break; /* ok */
case MEM_BLOCK_FREED_MAGIC:
if (!silent) {
zend_debug_alloc_output("Freed\n");
had_problems = 1;
} else {
return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
}
break;
case MEM_BLOCK_CACHED_MAGIC:
if (!silent) {
if (!no_cache_notice) {
zend_debug_alloc_output("Cached (allocated on %s:%d, %d bytes)\n", p->filename, p->lineno, p->size);
had_problems = 1;
}
} else {
if (!no_cache_notice) {
return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
}
}
break;
default:
if (!silent) {
zend_debug_alloc_output("Overrun (magic=0x%0.8lX, expected=0x%0.8lX)\n", p->magic, MEM_BLOCK_START_MAGIC);
} else {
return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
}
had_problems = 1;
valid_beginning = 0;
break;
}
memcpy(&end_magic, (((char *) p)+sizeof(zend_mem_header)+MEM_HEADER_PADDING+p->size), sizeof(long));
if (valid_beginning && (end_magic != MEM_BLOCK_END_MAGIC)) {
char *overflow_ptr, *magic_ptr=(char *) &mem_block_end_magic;
int overflows=0;
int i;
if (silent) {
return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
}
had_problems = 1;
overflow_ptr = (char *) &end_magic;
for (i=0; i<sizeof(long); i++) {
if (overflow_ptr[i]!=magic_ptr[i]) {
overflows++;
}
}
zend_debug_alloc_output("%10s\t", "End:");
zend_debug_alloc_output("Overflown (magic=0x%0.8lX instead of 0x%0.8lX)\n", end_magic, MEM_BLOCK_END_MAGIC);
zend_debug_alloc_output("%10s\t","");
if (overflows>=sizeof(long)) {
zend_debug_alloc_output("At least %d bytes overflown\n", sizeof(long));
} else {
zend_debug_alloc_output("%d byte(s) overflown\n", overflows);
}
} else if (!silent) {
zend_debug_alloc_output("%10s\t", "End:");
if (valid_beginning) {
zend_debug_alloc_output("OK\n");
} else {
zend_debug_alloc_output("Unknown\n");
}
}
if (had_problems) {
int foo = 5;
foo += 1;
}
if (!silent) {
zend_debug_alloc_output("---------------------------------------\n");
}
return ((!had_problems) ? 1 : 0);
}
ZEND_API void _full_mem_check(int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
zend_mem_header *p;
int errors=0;
TSRMLS_FETCH();
p = AG(head);
zend_debug_alloc_output("------------------------------------------------\n");
zend_debug_alloc_output("Full Memory Check at %s:%d\n" ZEND_FILE_LINE_RELAY_CC);
while (p) {
if (!_mem_block_check((void *)((char *)p + sizeof(zend_mem_header) + MEM_HEADER_PADDING), (silent?2:3) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC)) {
errors++;
}
p = p->pNext;
}
zend_debug_alloc_output("End of full memory check %s:%d (%d errors)\n" ZEND_FILE_LINE_RELAY_CC, errors);
zend_debug_alloc_output("------------------------------------------------\n");
}
#endif
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
-141
View File
@@ -1,141 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_ALLOC_H
#define ZEND_ALLOC_H
#include <stdio.h>
#include "../TSRM/TSRM.h"
#include "zend_globals_macros.h"
#include "zend_mm.h"
#define MEM_BLOCK_START_MAGIC 0x7312F8DCL
#define MEM_BLOCK_END_MAGIC 0x2A8FCC84L
#define MEM_BLOCK_FREED_MAGIC 0x99954317L
#define MEM_BLOCK_CACHED_MAGIC 0xFB8277DCL
typedef struct _zend_mem_header {
#if ZEND_DEBUG
long magic;
char *filename;
uint lineno;
int reported;
char *orig_filename;
uint orig_lineno;
# ifdef ZTS
THREAD_T thread_id;
# endif
#endif
#if ZEND_DEBUG || !defined(ZEND_MM)
struct _zend_mem_header *pNext;
struct _zend_mem_header *pLast;
#endif
unsigned int size:31;
unsigned int cached:1;
} zend_mem_header;
typedef union _align_test {
void *ptr;
double dbl;
long lng;
} align_test;
#define MAX_CACHED_MEMORY 11
#define MAX_CACHED_ENTRIES 256
#define PRE_INIT_CACHE_ENTRIES 32
#if (defined (__GNUC__) && __GNUC__ >= 2)
#define PLATFORM_ALIGNMENT (__alignof__ (align_test))
#else
#define PLATFORM_ALIGNMENT (sizeof(align_test))
#endif
#define MEM_HEADER_PADDING (((PLATFORM_ALIGNMENT-sizeof(zend_mem_header))%PLATFORM_ALIGNMENT+PLATFORM_ALIGNMENT)%PLATFORM_ALIGNMENT)
BEGIN_EXTERN_C()
ZEND_API char *zend_strndup(const char *s, unsigned int length);
ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API char *_estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API char *_estrndup(const char *s, unsigned int length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
/* Standard wrapper macros */
#define emalloc(size) _emalloc((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define efree(ptr) _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define ecalloc(nmemb, size) _ecalloc((nmemb), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define erealloc(ptr, size) _erealloc((ptr), (size), 0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define erealloc_recoverable(ptr, size) _erealloc((ptr), (size), 1 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define estrdup(s) _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define estrndup(s, length) _estrndup((s), (length) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
/* Relay wrapper macros */
#define emalloc_rel(size) _emalloc((size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define efree_rel(ptr) _efree((ptr) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define ecalloc_rel(nmemb, size) _ecalloc((nmemb), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define erealloc_rel(ptr, size) _erealloc((ptr), (size), 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define erealloc_recoverable_rel(ptr, size) _erealloc((ptr), (size), 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define estrdup_rel(s) _estrdup((s) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define estrndup_rel(s, length) _estrndup((s), (length) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
/* Selective persistent/non persistent allocation macros */
#define pemalloc(size, persistent) ((persistent)?malloc(size):emalloc(size))
#define pefree(ptr, persistent) ((persistent)?free(ptr):efree(ptr))
#define pecalloc(nmemb, size, persistent) ((persistent)?calloc((nmemb), (size)):ecalloc((nmemb), (size)))
#define perealloc(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc((ptr), (size)))
#define perealloc_recoverable(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc_recoverable((ptr), (size)))
#define pestrdup(s, persistent) ((persistent)?strdup(s):estrdup(s))
#define safe_estrdup(ptr) ((ptr)?(estrdup(ptr)):(empty_string))
#define safe_estrndup(ptr, len) ((ptr)?(estrndup((ptr), (len))):(empty_string))
ZEND_API int zend_set_memory_limit(unsigned int memory_limit);
ZEND_API void start_memory_manager(TSRMLS_D);
ZEND_API void shutdown_memory_manager(int silent, int clean_cache TSRMLS_DC);
#if ZEND_DEBUG
ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void _full_mem_check(int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
void zend_debug_alloc_output(char *format, ...);
#define mem_block_check(ptr, silent) _mem_block_check(ptr, silent ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define full_mem_check(silent) _full_mem_check(silent ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#else
#define mem_block_check(type, ptr, silent)
#define full_mem_check(silent)
#endif
END_EXTERN_C()
#endif
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
File diff suppressed because it is too large. Load diff
-26
View File
@@ -1,26 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_BUILTIN_FUNCTIONS_H
#define ZEND_BUILTIN_FUNCTIONS_H
int zend_startup_builtin_functions(TSRMLS_D);
#endif /* ZEND_BUILTIN_FUNCTIONS_H */
-3108
View File
File diff suppressed because it is too large. Load diff
-713
View File
@@ -1,713 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_COMPILE_H
#define ZEND_COMPILE_H
#include "zend.h"
#ifdef HAVE_STDARG_H
# include <stdarg.h>
#endif
#include "zend_llist.h"
#define DEBUG_ZEND 0
#define FREE_PNODE(znode) zval_dtor(&znode->u.constant);
#define FREE_OP(Ts, op, should_free) if (should_free) zval_dtor(&Ts[(op)->u.var].tmp_var);
#define SET_UNUSED(op) (op).op_type = IS_UNUSED
#define INC_BPC(op_array) if (CG(interactive)) { ((op_array)->backpatch_count++); }
#define DEC_BPC(op_array) if (CG(interactive)) { ((op_array)->backpatch_count--); }
#define HANDLE_INTERACTIVE() if (CG(interactive)) { execute_new_code(TSRMLS_C); }
typedef struct _zend_op_array zend_op_array;
typedef struct _znode {
int op_type;
zend_llist *throw_list; /* Try and save this space later on */
union {
zval constant;
zend_uint var;
zend_uint opline_num; /* Needs to be signed */
zend_op_array *op_array;
zend_class_entry *previously_active_class_entry; /* Used at compile-time */
struct {
zend_uint var; /* dummy */
zend_uint type;
} EA;
} u;
} znode;
typedef struct _zend_op {
zend_uchar opcode;
znode result;
znode op1;
znode op2;
ulong extended_value;
uint lineno;
} zend_op;
typedef struct _zend_brk_cont_element {
int cont;
int brk;
int parent;
} zend_brk_cont_element;
struct _zend_op_array {
zend_uchar type; /* MUST be the first element of this struct! */
zend_uchar *arg_types; /* MUST be the second element of this struct! */
char *function_name; /* MUST be the third element of this struct! */
zend_class_entry *scope; /* MUST be the fourth element of this struct! */
zend_uint *refcount;
zend_op *opcodes;
zend_uint last, size;
zend_uint T;
zend_brk_cont_element *brk_cont_array;
zend_uint last_brk_cont;
zend_uint current_brk_cont;
/* static variables support */
HashTable *static_variables;
zend_op *start_op;
int backpatch_count;
zend_bool return_reference;
zend_bool done_pass_two;
zend_bool uses_this;
char *filename;
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};
typedef struct _zend_internal_function {
zend_uchar type; /* MUST be the first element of this struct! */
zend_uchar *arg_types; /* MUST be the second element of this struct! */
char *function_name; /* MUST be the third element of this struct! */
zend_class_entry *scope; /* MUST be the fourth element of this struct! */
void (*handler)(INTERNAL_FUNCTION_PARAMETERS);
} zend_internal_function;
typedef struct _zend_overloaded_function {
zend_uchar type; /* MUST be the first element of this struct! */
zend_uchar *arg_types; /* MUST be the second element of this struct! */
char *function_name; /* MUST be the third element of this struct! */
zend_class_entry *scope; /* MUST be the fourth element of this struct! */
zend_uint var;
} zend_overloaded_function;
typedef union _zend_function {
zend_uchar type; /* MUST be the first element of this struct! */
struct {
zend_uchar type; /* never used */
zend_uchar *arg_types;
char *function_name;
zend_class_entry *scope;
} common;
zend_op_array op_array;
zend_internal_function internal_function;
zend_overloaded_function overloaded_function;
} zend_function;
typedef struct _zend_function_state {
HashTable *function_symbol_table;
zend_function *function;
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
} zend_function_state;
typedef struct _zend_switch_entry {
znode cond;
int default_case;
int control_var;
} zend_switch_entry;
typedef struct _list_llist_element {
znode var;
zend_llist dimensions;
znode value;
} list_llist_element;
typedef struct _zend_file_handle {
zend_uchar type;
char *filename;
char *opened_path;
union {
int fd;
FILE *fp;
} handle;
zend_bool free_filename;
} zend_file_handle;
union _temp_variable;
typedef struct _zend_execute_data {
struct _zend_op *opline;
zend_function_state function_state;
zend_function *fbc; /* Function Being Called */
zend_function *fbc_constructor;
zend_op_array *op_array;
zval *object;
union _temp_variable *Ts;
zend_bool original_in_execution;
zend_class_entry *calling_scope;
struct _zend_execute_data *prev_execute_data;
} zend_execute_data;
#define EX(element) execute_data.element
#define IS_CONST (1<<0)
#define IS_TMP_VAR (1<<1)
#define IS_VAR (1<<2)
#define IS_UNUSED (1<<3) /* Unused variable */
#define EXT_TYPE_UNUSED (1<<0)
#include "zend_globals.h"
BEGIN_EXTERN_C()
void init_compiler(TSRMLS_D);
void shutdown_compiler(TSRMLS_D);
void zend_init_compiler_data_structures(TSRMLS_D);
extern ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type TSRMLS_DC);
void zend_activate(TSRMLS_D);
void zend_deactivate(TSRMLS_D);
void zend_activate_modules(TSRMLS_D);
void zend_deactivate_modules(TSRMLS_D);
ZEND_API int lex_scan(zval *zendlval TSRMLS_DC);
void startup_scanner(TSRMLS_D);
void shutdown_scanner(TSRMLS_D);
ZEND_API char *zend_set_compiled_filename(char *new_compiled_filename TSRMLS_DC);
ZEND_API void zend_restore_compiled_filename(char *original_compiled_filename TSRMLS_DC);
ZEND_API char *zend_get_compiled_filename(TSRMLS_D);
ZEND_API int zend_get_compiled_lineno(TSRMLS_D);
#ifdef ZTS
const char *zend_get_zendtext(TSRMLS_D);
int zend_get_zendleng(TSRMLS_D);
#endif
/* parser-driven code generators */
void zend_do_binary_op(zend_uchar op, znode *result, znode *op1, znode *op2 TSRMLS_DC);
void zend_do_unary_op(zend_uchar op, znode *result, znode *op1 TSRMLS_DC);
void zend_do_binary_assign_op(zend_uchar op, znode *result, znode *op1, znode *op2 TSRMLS_DC);
void zend_do_assign(znode *result, znode *variable, znode *value TSRMLS_DC);
void zend_do_assign_ref(znode *result, znode *lvar, znode *rvar TSRMLS_DC);
void fetch_simple_variable(znode *result, znode *varname, int bp TSRMLS_DC);
void fetch_simple_variable_ex(znode *result, znode *varname, int bp, zend_uchar op TSRMLS_DC);
void zend_do_indirect_references(znode *result, znode *num_references, znode *variable TSRMLS_DC);
void zend_do_fetch_global_or_static_variable(znode *varname, znode *static_assignment, int fetch_type TSRMLS_DC);
void fetch_array_begin(znode *result, znode *varname, znode *first_dim TSRMLS_DC);
void fetch_array_dim(znode *result, znode *parent, znode *dim TSRMLS_DC);
void fetch_string_offset(znode *result, znode *parent, znode *offset TSRMLS_DC);
void zend_do_fetch_static_member(znode *class TSRMLS_DC);
void zend_do_print(znode *result, znode *arg TSRMLS_DC);
void zend_do_echo(znode *arg TSRMLS_DC);
typedef int (*unary_op_type)(zval *, zval *);
ZEND_API unary_op_type get_unary_op(int opcode);
ZEND_API void *get_binary_op(int opcode);
void zend_do_while_cond(znode *expr, znode *close_bracket_token TSRMLS_DC);
void zend_do_while_end(znode *while_token, znode *close_bracket_token TSRMLS_DC);
void zend_do_do_while_begin(TSRMLS_D);
void zend_do_do_while_end(znode *do_token, znode *expr_open_bracket, znode *expr TSRMLS_DC);
void zend_do_if_cond(znode *cond, znode *closing_bracket_token TSRMLS_DC);
void zend_do_if_after_statement(znode *closing_bracket_token, unsigned char initialize TSRMLS_DC);
void zend_do_if_end(TSRMLS_D);
void zend_do_for_cond(znode *expr, znode *second_semicolon_token TSRMLS_DC);
void zend_do_for_before_statement(znode *cond_start, znode *second_semicolon_token TSRMLS_DC);
void zend_do_for_end(znode *second_semicolon_token TSRMLS_DC);
void zend_do_pre_incdec(znode *result, znode *op1, zend_uchar op TSRMLS_DC);
void zend_do_post_incdec(znode *result, znode *op1, zend_uchar op TSRMLS_DC);
void zend_do_begin_variable_parse(TSRMLS_D);
void zend_do_end_variable_parse(int type, int arg_offset TSRMLS_DC);
void zend_check_writable_variable(znode *variable);
void zend_do_free(znode *op1 TSRMLS_DC);
void zend_do_init_string(znode *result TSRMLS_DC);
void zend_do_add_char(znode *result, znode *op1, znode *op2 TSRMLS_DC);
void zend_do_add_string(znode *result, znode *op1, znode *op2 TSRMLS_DC);
void zend_do_add_variable(znode *result, znode *op1, znode *op2 TSRMLS_DC);
void zend_do_begin_function_declaration(znode *function_token, znode *function_name, int is_method, int return_reference TSRMLS_DC);
void zend_do_end_function_declaration(znode *function_token TSRMLS_DC);
void zend_do_receive_arg(zend_uchar op, znode *var, znode *offset, znode *initialization, zend_uchar pass_type TSRMLS_DC);
int zend_do_begin_function_call(znode *function_name TSRMLS_DC);
void zend_do_begin_method_call(znode *left_bracket TSRMLS_DC);
void zend_do_begin_dynamic_function_call(znode *function_name TSRMLS_DC);
void do_fetch_class(znode *result, znode *class_entry, znode *class_name TSRMLS_DC);
void do_fetch_class_name(znode *result, znode *class_entry, znode *class_name, zend_bool case_sensitive TSRMLS_DC);
void zend_do_begin_class_member_function_call(znode *class_name, znode *function_name TSRMLS_DC);
void zend_do_end_function_call(znode *function_name, znode *result, znode *argument_list, int is_method, int is_dynamic_fcall TSRMLS_DC);
void zend_do_return(znode *expr, int do_end_vparse TSRMLS_DC);
void zend_do_try(znode *try_token TSRMLS_DC);
void zend_do_begin_catch(znode *try_token, znode *catch_class, znode *catch_var, zend_bool first_catch TSRMLS_DC);
void zend_do_end_catch(znode *try_token TSRMLS_DC);
void zend_do_throw(znode *expr TSRMLS_DC);
ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_table, HashTable *class_table, int compile_time);
void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce);
void zend_do_early_binding(TSRMLS_D);
void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC);
void zend_do_boolean_or_begin(znode *expr1, znode *op_token TSRMLS_DC);
void zend_do_boolean_or_end(znode *result, znode *expr1, znode *expr2, znode *op_token TSRMLS_DC);
void zend_do_boolean_and_begin(znode *expr1, znode *op_token TSRMLS_DC);
void zend_do_boolean_and_end(znode *result, znode *expr1, znode *expr2, znode *op_token TSRMLS_DC);
void zend_do_brk_cont(zend_uchar op, znode *expr TSRMLS_DC);
void zend_do_switch_cond(znode *cond TSRMLS_DC);
void zend_do_switch_end(znode *case_list TSRMLS_DC);
void zend_do_case_before_statement(znode *case_list, znode *case_token, znode *case_expr TSRMLS_DC);
void zend_do_case_after_statement(znode *result, znode *case_token TSRMLS_DC);
void zend_do_default_before_statement(znode *case_list, znode *default_token TSRMLS_DC);
void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znode *parent_class_name TSRMLS_DC);
void zend_do_end_class_declaration(znode *class_token TSRMLS_DC);
void zend_do_declare_property(znode *var_name, znode *value, int declaration_type TSRMLS_DC);
void zend_do_fetch_property(znode *result, znode *object, znode *property TSRMLS_DC);
void zend_do_push_object(znode *object TSRMLS_DC);
void zend_do_pop_object(znode *object TSRMLS_DC);
void zend_do_begin_new_object(znode *new_token, znode *class_type TSRMLS_DC);
void zend_do_end_new_object(znode *result, znode *new_token, znode *argument_list TSRMLS_DC);
void zend_do_fetch_constant(znode *result, znode *constant_container, znode *constant_name, int mode TSRMLS_DC);
void zend_do_shell_exec(znode *result, znode *cmd TSRMLS_DC);
void zend_do_init_array(znode *result, znode *expr, znode *offset, zend_bool is_ref TSRMLS_DC);
void zend_do_add_array_element(znode *result, znode *expr, znode *offset, zend_bool is_ref TSRMLS_DC);
void zend_do_add_static_array_element(znode *result, znode *offset, znode *expr);
void zend_do_list_init(TSRMLS_D);
void zend_do_list_end(znode *result, znode *expr TSRMLS_DC);
void zend_do_add_list_element(znode *element TSRMLS_DC);
void zend_do_new_list_begin(TSRMLS_D);
void zend_do_new_list_end(TSRMLS_D);
void zend_do_cast(znode *result, znode *expr, int type TSRMLS_DC);
void zend_do_include_or_eval(int type, znode *result, znode *op1 TSRMLS_DC);
void zend_do_unset(znode *variable TSRMLS_DC);
void zend_do_isset_or_isempty(int type, znode *result, znode *variable TSRMLS_DC);
void zend_do_is_type(znode *result, znode *expr, znode *class, int type TSRMLS_DC);
void zend_do_foreach_begin(znode *foreach_token, znode *array, znode *open_brackets_token, znode *as_token, int variable TSRMLS_DC);
void zend_do_foreach_cont(znode *value, znode *key, znode *as_token TSRMLS_DC);
void zend_do_foreach_end(znode *foreach_token, znode *open_brackets_token TSRMLS_DC);
void zend_do_declare_begin(TSRMLS_D);
void zend_do_declare_stmt(znode *var, znode *val TSRMLS_DC);
void zend_do_declare_end(TSRMLS_D);
void zend_do_end_heredoc(TSRMLS_D);
void zend_do_exit(znode *result, znode *message TSRMLS_DC);
void zend_do_begin_silence(znode *strudel_token TSRMLS_DC);
void zend_do_end_silence(znode *strudel_token TSRMLS_DC);
void zend_do_begin_qm_op(znode *cond, znode *qm_token TSRMLS_DC);
void zend_do_qm_true(znode *true_value, znode *qm_token, znode *colon_token TSRMLS_DC);
void zend_do_qm_false(znode *result, znode *false_value, znode *qm_token, znode *colon_token TSRMLS_DC);
void zend_do_extended_info(TSRMLS_D);
void zend_do_extended_fcall_begin(TSRMLS_D);
void zend_do_extended_fcall_end(TSRMLS_D);
void zend_do_ticks(TSRMLS_D);
void zend_do_begin_import(TSRMLS_D);
void zend_do_import(int type, znode *what TSRMLS_DC);
void zend_do_end_import(znode *import_from TSRMLS_DC);
ZEND_API void function_add_ref(zend_function *function);
#define INITIAL_OP_ARRAY_SIZE 64
/* helper functions in zend_language_scanner.l */
ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC);
ZEND_API zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC);
ZEND_API zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC);
ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_count, ...);
ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC);
ZEND_API void init_op_array(zend_op_array *op_array, zend_uchar type, int initial_ops_size TSRMLS_DC);
ZEND_API void destroy_op_array(zend_op_array *op_array);
ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle TSRMLS_DC);
ZEND_API void zend_file_handle_dtor(zend_file_handle *fh);
ZEND_API void destroy_zend_function(zend_function *function);
ZEND_API void destroy_zend_class(zend_class_entry **pce);
void zend_class_add_ref(zend_class_entry **ce);
#define ZEND_FUNCTION_DTOR (void (*)(void *)) destroy_zend_function
#define ZEND_CLASS_DTOR (void (*)(void *)) destroy_zend_class
zend_op *get_next_op(zend_op_array *op_array TSRMLS_DC);
void init_op(zend_op *op TSRMLS_DC);
int get_next_op_number(zend_op_array *op_array);
int print_class(zend_class_entry *class_entry TSRMLS_DC);
void print_op_array(zend_op_array *op_array, int optimizations);
int pass_two(zend_op_array *op_array TSRMLS_DC);
zend_brk_cont_element *get_next_brk_cont_element(zend_op_array *op_array);
ZEND_API zend_bool zend_is_compiling(TSRMLS_D);
ZEND_API char *zend_make_compiled_string_description(char *name TSRMLS_DC);
int zend_register_auto_global(char *name, uint name_len TSRMLS_DC);
int zendlex(znode *zendlval TSRMLS_DC);
#define ZEND_NOP 0
#define ZEND_ADD 1
#define ZEND_SUB 2
#define ZEND_MUL 3
#define ZEND_DIV 4
#define ZEND_MOD 5
#define ZEND_SL 6
#define ZEND_SR 7
#define ZEND_CONCAT 8
#define ZEND_BW_OR 9
#define ZEND_BW_AND 10
#define ZEND_BW_XOR 11
#define ZEND_BW_NOT 12
#define ZEND_BOOL_NOT 13
#define ZEND_BOOL_XOR 14
#define ZEND_IS_IDENTICAL 15
#define ZEND_IS_NOT_IDENTICAL 16
#define ZEND_IS_EQUAL 17
#define ZEND_IS_NOT_EQUAL 18
#define ZEND_IS_SMALLER 19
#define ZEND_IS_SMALLER_OR_EQUAL 20
#define ZEND_CAST 21
#define ZEND_QM_ASSIGN 22
#define ZEND_ASSIGN_ADD 23
#define ZEND_ASSIGN_SUB 24
#define ZEND_ASSIGN_MUL 25
#define ZEND_ASSIGN_DIV 26
#define ZEND_ASSIGN_MOD 27
#define ZEND_ASSIGN_SL 28
#define ZEND_ASSIGN_SR 29
#define ZEND_ASSIGN_CONCAT 30
#define ZEND_ASSIGN_BW_OR 31
#define ZEND_ASSIGN_BW_AND 32
#define ZEND_ASSIGN_BW_XOR 33
#define ZEND_PRE_INC 34
#define ZEND_PRE_DEC 35
#define ZEND_POST_INC 36
#define ZEND_POST_DEC 37
#define ZEND_ASSIGN 38
#define ZEND_ASSIGN_REF 39
#define ZEND_ECHO 40
#define ZEND_PRINT 41
#define ZEND_JMP 42
#define ZEND_JMPZ 43
#define ZEND_JMPNZ 44
#define ZEND_JMPZNZ 45
#define ZEND_JMPZ_EX 46
#define ZEND_JMPNZ_EX 47
#define ZEND_CASE 48
#define ZEND_SWITCH_FREE 49
#define ZEND_BRK 50
#define ZEND_CONT 51
#define ZEND_BOOL 52
#define ZEND_INIT_STRING 53
#define ZEND_ADD_CHAR 54
#define ZEND_ADD_STRING 55
#define ZEND_ADD_VAR 56
#define ZEND_BEGIN_SILENCE 57
#define ZEND_END_SILENCE 58
#define ZEND_INIT_FCALL_BY_NAME 59
#define ZEND_DO_FCALL 60
#define ZEND_DO_FCALL_BY_NAME 61
#define ZEND_RETURN 62
#define ZEND_RECV 63
#define ZEND_RECV_INIT 64
#define ZEND_SEND_VAL 65
#define ZEND_SEND_VAR 66
#define ZEND_SEND_REF 67
#define ZEND_NEW 68
#define ZEND_JMP_NO_CTOR 69
#define ZEND_FREE 70
#define ZEND_INIT_ARRAY 71
#define ZEND_ADD_ARRAY_ELEMENT 72
#define ZEND_INCLUDE_OR_EVAL 73
#define ZEND_UNSET_VAR 74
#define ZEND_UNSET_DIM_OBJ 75
#define ZEND_FE_RESET 77
#define ZEND_FE_FETCH 78
#define ZEND_EXIT 79
/* the following 18 opcodes are 6 groups of 3 opcodes each, and must
* remain in that order!
*/
#define ZEND_FETCH_R 80
#define ZEND_FETCH_DIM_R 81
#define ZEND_FETCH_OBJ_R 82
#define ZEND_FETCH_W 83
#define ZEND_FETCH_DIM_W 84
#define ZEND_FETCH_OBJ_W 85
#define ZEND_FETCH_RW 86
#define ZEND_FETCH_DIM_RW 87
#define ZEND_FETCH_OBJ_RW 88
#define ZEND_FETCH_IS 89
#define ZEND_FETCH_DIM_IS 90
#define ZEND_FETCH_OBJ_IS 91
#define ZEND_FETCH_FUNC_ARG 92
#define ZEND_FETCH_DIM_FUNC_ARG 93
#define ZEND_FETCH_OBJ_FUNC_ARG 94
#define ZEND_FETCH_UNSET 95
#define ZEND_FETCH_DIM_UNSET 96
#define ZEND_FETCH_OBJ_UNSET 97
#define ZEND_FETCH_DIM_TMP_VAR 98
#define ZEND_FETCH_CONSTANT 99
#define ZEND_DECLARE_FUNCTION_OR_CLASS 100
#define ZEND_EXT_STMT 101
#define ZEND_EXT_FCALL_BEGIN 102
#define ZEND_EXT_FCALL_END 103
#define ZEND_EXT_NOP 104
#define ZEND_TICKS 105
#define ZEND_SEND_VAR_NO_REF 106
#define ZEND_CATCH 107
#define ZEND_THROW 108
#define ZEND_FETCH_CLASS 109
#define ZEND_CLONE 110
#define ZEND_INIT_CTOR_CALL 111
#define ZEND_INIT_METHOD_CALL 112
#define ZEND_INIT_STATIC_METHOD_CALL 113
#define ZEND_ISSET_ISEMPTY_VAR 114
#define ZEND_ISSET_ISEMPTY_DIM_OBJ 115
#define ZEND_IMPORT_FUNCTION 116
#define ZEND_IMPORT_CLASS 117
#define ZEND_IMPORT_CONST 118
#define ZEND_ASSIGN_ADD_OBJ 121
#define ZEND_ASSIGN_SUB_OBJ 122
#define ZEND_ASSIGN_MUL_OBJ 123
#define ZEND_ASSIGN_DIV_OBJ 124
#define ZEND_ASSIGN_MOD_OBJ 125
#define ZEND_ASSIGN_SL_OBJ 126
#define ZEND_ASSIGN_SR_OBJ 127
#define ZEND_ASSIGN_CONCAT_OBJ 128
#define ZEND_ASSIGN_BW_OR_OBJ 129
#define ZEND_ASSIGN_BW_AND_OBJ 130
#define ZEND_ASSIGN_BW_XOR_OBJ 131
#define ZEND_PRE_INC_OBJ 132
#define ZEND_PRE_DEC_OBJ 133
#define ZEND_POST_INC_OBJ 134
#define ZEND_POST_DEC_OBJ 135
#define ZEND_ASSIGN_OBJ 136
#define ZEND_MAKE_VAR 137
#define ZEND_IS_TYPE 138
/* end of block */
/* global/local fetches */
#define ZEND_FETCH_GLOBAL 0
#define ZEND_FETCH_LOCAL 1
#define ZEND_FETCH_STATIC 2
#define ZEND_FETCH_STATIC_MEMBER 3
#define ZEND_FETCH_FROM_THIS 4
/* class fetches */
#define ZEND_FETCH_CLASS_DEFAULT 0
#define ZEND_FETCH_CLASS_SELF 1
#define ZEND_FETCH_CLASS_PARENT 2
#define ZEND_FETCH_CLASS_MAIN 3
/* variable parsing type (compile-time) */
#define ZEND_PARSED_MEMBER (1<<0)
#define ZEND_PARSED_METHOD_CALL (1<<1)
#define ZEND_PARSED_STATIC_MEMBER (1<<2)
#define ZEND_PARSED_FUNCTION_CALL (1<<3)
#define ZEND_PARSED_VARIABLE (1<<4)
/* unset types */
#define ZEND_UNSET_REG 0
/* var status for backpatching */
#define BP_VAR_R 0
#define BP_VAR_W 1
#define BP_VAR_RW 2
#define BP_VAR_IS 3
#define BP_VAR_NA 4 /* if not applicable */
#define BP_VAR_FUNC_ARG 5
#define BP_VAR_UNSET 6
#define ZEND_INTERNAL_FUNCTION 1
#define ZEND_USER_FUNCTION 2
#define ZEND_OVERLOADED_FUNCTION 3
#define ZEND_EVAL_CODE 4
#define ZEND_INTERNAL_CLASS 1
#define ZEND_USER_CLASS 2
#define ZEND_EVAL (1<<0)
#define ZEND_INCLUDE (1<<1)
#define ZEND_INCLUDE_ONCE (1<<2)
#define ZEND_REQUIRE (1<<3)
#define ZEND_REQUIRE_ONCE (1<<4)
#define ZEND_ISSET (1<<0)
#define ZEND_ISEMPTY (1<<1)
#define ZEND_CT (1<<0)
#define ZEND_RT (1<<1)
#define ZEND_HANDLE_FILENAME 0
#define ZEND_HANDLE_FD 1
#define ZEND_HANDLE_FP 2
#define ZEND_HANDLE_STDIOSTREAM 3
#define ZEND_HANDLE_FSTREAM 4
#define ZEND_DECLARE_CLASS 1
#define ZEND_DECLARE_FUNCTION 2
#define ZEND_DECLARE_INHERITED_CLASS 3
#define ZEND_FETCH_STANDARD 0
#define ZEND_FETCH_ADD_LOCK 1
#define ZEND_MEMBER_FUNC_CALL 1<<0
#define ZEND_ARG_SEND_BY_REF (1<<0)
#define ZEND_ARG_COMPILE_TIME_BOUND (1<<1)
#define AI_USE_PTR(ai) \
if ((ai).ptr_ptr) { \
(ai).ptr = *((ai).ptr_ptr); \
(ai).ptr_ptr = &((ai).ptr); \
} else { \
(ai).ptr = NULL; \
}
/* Lost In Stupid Parentheses */
#define ARG_SHOULD_BE_SENT_BY_REF(offset, conduct_check, arg_types) \
( \
conduct_check \
&& arg_types \
&& \
( \
( \
offset<=arg_types[0] \
&& arg_types[offset]==BYREF_FORCE \
) \
|| ( \
offset>=arg_types[0] \
&& arg_types[arg_types[0]]==BYREF_FORCE_REST \
) \
) \
)
#define ZEND_RETURN_VAL 0
#define ZEND_RETURN_REF 1
END_EXTERN_C()
#endif /* ZEND_COMPILE_H */
-79
View File
@@ -1,79 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_CONFIG_NW_H
#define ZEND_CONFIG_NW_H
#include <string.h>
#include <float.h>
typedef unsigned long ulong;
typedef unsigned int uint;
#define HAVE_ALLOCA 1
#define HAVE_LIMITS_H 1
/* #include <malloc.h> */
#define HAVE_STRING_H 1
#undef HAVE_KILL
#define HAVE_GETPID 1
/* #define HAVE_ALLOCA_H 1 */
#define HAVE_MEMCPY 1
#define HAVE_STRDUP 1
#define HAVE_SYS_TYPES_H 1
/* #define HAVE_STDIOSTR_H 1 */
#define HAVE_CLASS_ISTDIOSTREAM
#define istdiostream stdiostream
#define HAVE_STDARG_H 1
#define HAVE_DLFCN_H 1
/* #define HAVE_LIBDL 1 */
#define HAVE_SNPRINTF 1
#define HAVE_VSNPRINTF 1
/*
#define snprintf _snprintf
#define vsnprintf _vsnprintf
#define zend_isinf(a) 0
#define zend_finite(x) _finite(x)
#define zend_isnan(x) _isnan(x)
*/
#define zend_sprintf sprintf
/* This will cause the compilation process to be MUCH longer, but will generate
* a much quicker PHP binary
*/
/*
#undef inline
#ifdef ZEND_WIN32_FORCE_INLINE
# define inline __forceinline
#else
# define inline
#endif
*/
/*
#define zend_finite(A) _finite(A)
#define zend_isnan(A) _isnan(A)
*/
#endif /* ZEND_CONFIG_NW_H */
-90
View File
@@ -1,90 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_CONFIG_W32_H
#define ZEND_CONFIG_W32_H
#include <string.h>
#include <windows.h>
#include <float.h>
typedef unsigned long ulong;
typedef unsigned int uint;
#define HAVE_ALLOCA 1
#define HAVE_LIMITS_H 1
#include <malloc.h>
#undef HAVE_KILL
#define HAVE_GETPID 1
/* #define HAVE_ALLOCA_H 1 */
#define HAVE_MEMCPY 1
#define HAVE_STRDUP 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_STDIOSTR_H 1
#define HAVE_CLASS_ISTDIOSTREAM
#define istdiostream stdiostream
#define HAVE_STDARG_H 1
#define HAVE_SNPRINTF 1
#define HAVE_VSNPRINTF 1
#define snprintf _snprintf
#define vsnprintf _vsnprintf
#define zend_isinf(a) 0
#define zend_finite(x) _finite(x)
#define zend_isnan(x) _isnan(x)
#define zend_sprintf sprintf
/* This will cause the compilation process to be MUCH longer, but will generate
* a much quicker PHP binary
*/
#undef inline
#ifdef ZEND_WIN32_FORCE_INLINE
# define inline __forceinline
#else
# define inline
#endif
#define zend_finite(A) _finite(A)
#define zend_isnan(A) _isnan(A)
#ifdef LIBZEND_EXPORTS
# define ZEND_API __declspec(dllexport)
#else
# define ZEND_API __declspec(dllimport)
#endif
#define ZEND_DLEXPORT __declspec(dllexport)
#define ZEND_DLIMPORT __declspec(dllimport)
/* 0x00200000L is MB_SERVICE_NOTIFICATION, which is only supported under Windows NT
* (and requires _WIN32_WINNT to be defined, which prevents the resulting executable
* from running under Windows 9x
* Windows 9x should silently ignore it, so it's being used here directly
*/
#ifndef MB_SERVICE_NOTIFICATION
#define MB_SERVICE_NOTIFICATION 0x00200000L
#endif
#define ZEND_SERVICE_MB_STYLE (MB_TOPMOST|MB_SERVICE_NOTIFICATION)
#endif /* ZEND_CONFIG_W32_H */
-280
View File
@@ -1,280 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#include "zend.h"
#include "zend_constants.h"
#include "zend_variables.h"
#include "zend_operators.h"
#include "zend_globals.h"
void free_zend_constant(zend_constant *c)
{
if (!(c->flags & CONST_PERSISTENT)) {
zval_dtor(&c->value);
}
free(c->name);
}
void copy_zend_constant(zend_constant *c)
{
c->name = zend_strndup(c->name, c->name_len);
if (!(c->flags & CONST_PERSISTENT)) {
zval_copy_ctor(&c->value);
}
}
void zend_copy_constants(HashTable *target, HashTable *source)
{
zend_constant tmp_constant;
zend_hash_copy(target, source, (copy_ctor_func_t) copy_zend_constant, &tmp_constant, sizeof(zend_constant));
}
static int clean_non_persistent_constant(zend_constant *c TSRMLS_DC)
{
if (c->flags & CONST_PERSISTENT) {
return EG(full_tables_cleanup) ? 0 : ZEND_HASH_APPLY_STOP;
} else {
return EG(full_tables_cleanup) ? 1 : ZEND_HASH_APPLY_REMOVE;
}
}
static int clean_module_constant(zend_constant *c, int *module_number TSRMLS_DC)
{
if (c->module_number == *module_number) {
return 1;
} else {
return 0;
}
}
void clean_module_constants(int module_number TSRMLS_DC)
{
zend_hash_apply_with_argument(EG(zend_constants), (apply_func_arg_t) clean_module_constant, (void *) &module_number TSRMLS_CC);
}
int zend_startup_constants(TSRMLS_D)
{
#ifdef ZEND_WIN32
DWORD dwBuild=0;
DWORD dwVersion = GetVersion();
DWORD dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
DWORD dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
#endif
EG(zend_constants) = &CG(main_class).constants_table;
if (zend_hash_init(EG(zend_constants), 20, NULL, ZEND_CONSTANT_DTOR, 1)==FAILURE) {
return FAILURE;
}
return SUCCESS;
}
void zend_register_standard_constants(TSRMLS_D)
{
REGISTER_MAIN_LONG_CONSTANT("E_ERROR", E_ERROR, CONST_PERSISTENT | CONST_CS);
REGISTER_MAIN_LONG_CONSTANT("E_WARNING", E_WARNING, CONST_PERSISTENT | CONST_CS);
REGISTER_MAIN_LONG_CONSTANT("E_PARSE", E_PARSE, CONST_PERSISTENT | CONST_CS);
REGISTER_MAIN_LONG_CONSTANT("E_NOTICE", E_NOTICE, CONST_PERSISTENT | CONST_CS);
REGISTER_MAIN_LONG_CONSTANT("E_CORE_ERROR", E_CORE_ERROR, CONST_PERSISTENT | CONST_CS);
REGISTER_MAIN_LONG_CONSTANT("E_CORE_WARNING", E_CORE_WARNING, CONST_PERSISTENT | CONST_CS);
REGISTER_MAIN_LONG_CONSTANT("E_COMPILE_ERROR", E_COMPILE_ERROR, CONST_PERSISTENT | CONST_CS);
REGISTER_MAIN_LONG_CONSTANT("E_COMPILE_WARNING", E_COMPILE_WARNING, CONST_PERSISTENT | CONST_CS);
REGISTER_MAIN_LONG_CONSTANT("E_USER_ERROR", E_USER_ERROR, CONST_PERSISTENT | CONST_CS);
REGISTER_MAIN_LONG_CONSTANT("E_USER_WARNING", E_USER_WARNING, CONST_PERSISTENT | CONST_CS);
REGISTER_MAIN_LONG_CONSTANT("E_USER_NOTICE", E_USER_NOTICE, CONST_PERSISTENT | CONST_CS);
REGISTER_MAIN_LONG_CONSTANT("E_ALL", E_ALL, CONST_PERSISTENT | CONST_CS);
/* true/false constants */
{
zend_constant c;
c.value.type = IS_BOOL;
c.flags = CONST_PERSISTENT;
c.module_number = 0;
c.name = zend_strndup(ZEND_STRL("TRUE"));
c.name_len = sizeof("TRUE");
c.value.value.lval = 1;
c.value.type = IS_BOOL;
zend_register_constant(&c TSRMLS_CC);
c.name = zend_strndup(ZEND_STRL("FALSE"));
c.name_len = sizeof("FALSE");
c.value.value.lval = 0;
c.value.type = IS_BOOL;
zend_register_constant(&c TSRMLS_CC);
c.name = zend_strndup(ZEND_STRL("ZEND_THREAD_SAFE"));
c.name_len = sizeof("ZEND_THREAD_SAFE");
c.value.value.lval = ZTS_V;
c.value.type = IS_BOOL;
zend_register_constant(&c TSRMLS_CC);
c.name = zend_strndup(ZEND_STRL("NULL"));
c.name_len = sizeof("NULL");
c.value.type = IS_NULL;
zend_register_constant(&c TSRMLS_CC);
}
}
int zend_shutdown_constants(TSRMLS_D)
{
zend_hash_destroy(EG(zend_constants));
return SUCCESS;
}
void clean_non_persistent_constants(TSRMLS_D)
{
if (EG(full_tables_cleanup)) {
zend_hash_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant TSRMLS_CC);
} else {
zend_hash_reverse_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant TSRMLS_CC);
}
}
ZEND_API void zend_register_long_constant(char *name, uint name_len, long lval, int flags, int module_number TSRMLS_DC)
{
zend_constant c;
c.value.type = IS_LONG;
c.value.value.lval = lval;
c.flags = flags;
c.name = zend_strndup(name, name_len);
c.name_len = name_len;
c.module_number = module_number;
zend_register_constant(&c TSRMLS_CC);
}
ZEND_API void zend_register_double_constant(char *name, uint name_len, double dval, int flags, int module_number TSRMLS_DC)
{
zend_constant c;
c.value.type = IS_DOUBLE;
c.value.value.dval = dval;
c.flags = flags;
c.name = zend_strndup(name, name_len);
c.name_len = name_len;
c.module_number = module_number;
zend_register_constant(&c TSRMLS_CC);
}
ZEND_API void zend_register_stringl_constant(char *name, uint name_len, char *strval, uint strlen, int flags, int module_number TSRMLS_DC)
{
zend_constant c;
c.value.type = IS_STRING;
c.value.value.str.val = strval;
c.value.value.str.len = strlen;
c.flags = flags;
c.name = zend_strndup(name, name_len);
c.name_len = name_len;
c.module_number = module_number;
zend_register_constant(&c TSRMLS_CC);
}
ZEND_API void zend_register_string_constant(char *name, uint name_len, char *strval, int flags, int module_number TSRMLS_DC)
{
zend_register_stringl_constant(name, name_len, strval, strlen(strval), flags, module_number TSRMLS_CC);
}
ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC)
{
zend_constant *c;
char *lookup_name;
int retval = 1;
if (zend_hash_find(EG(zend_constants), name, name_len+1, (void **) &c) == FAILURE) {
lookup_name = do_alloca(name_len+1);
memcpy(lookup_name, name, name_len+1);
zend_str_tolower(lookup_name, name_len);
if (zend_hash_find(EG(zend_constants), lookup_name, name_len+1, (void **) &c)==SUCCESS) {
if ((c->flags & CONST_CS) && memcmp(c->name, name, name_len)!=0) {
retval=0;
}
} else {
retval=0;
}
free_alloca(lookup_name);
}
if (retval) {
*result = c->value;
zval_copy_ctor(result);
}
return retval;
}
ZEND_API int zend_register_constant(zend_constant *c TSRMLS_DC)
{
char *lowercase_name;
int ret = SUCCESS;
#if 0
printf("Registering constant for module %d\n", c->module_number);
#endif
lowercase_name = do_alloca(c->name_len);
memcpy(lowercase_name, c->name, c->name_len);
if (!(c->flags & CONST_CS)) {
zend_str_tolower(lowercase_name, c->name_len);
}
if (zend_hash_add(EG(zend_constants), lowercase_name, c->name_len, (void *) c, sizeof(zend_constant), NULL)==FAILURE) {
free(c->name);
if (!(c->flags & CONST_PERSISTENT)) {
zval_dtor(&c->value);
}
zend_error(E_NOTICE,"Constant %s already defined", lowercase_name);
ret = FAILURE;
}
free_alloca(lowercase_name);
return ret;
}
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
-64
View File
@@ -1,64 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_CONSTANTS_H
#define ZEND_CONSTANTS_H
#include "zend_globals.h"
#define CONST_CS (1<<0) /* Case Sensitive */
#define CONST_PERSISTENT (1<<1) /* Persistent */
typedef struct _zend_constant {
zval value;
int flags;
char *name;
uint name_len;
int module_number;
} zend_constant;
#define REGISTER_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name), (lval), (flags), module_number TSRMLS_CC)
#define REGISTER_DOUBLE_CONSTANT(name, dval, flags) zend_register_double_constant((name), sizeof(name), (dval), (flags), module_number TSRMLS_CC)
#define REGISTER_STRING_CONSTANT(name, str, flags) zend_register_string_constant((name), sizeof(name), (str), (flags), module_number TSRMLS_CC)
#define REGISTER_STRINGL_CONSTANT(name, str, len, flags) zend_register_stringl_constant((name), sizeof(name), (str), (len), (flags), module_number TSRMLS_CC)
#define REGISTER_MAIN_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name), (lval), (flags), 0 TSRMLS_CC)
#define REGISTER_MAIN_DOUBLE_CONSTANT(name, dval, flags) zend_register_double_constant((name), sizeof(name), (dval), (flags), 0 TSRMLS_CC)
#define REGISTER_MAIN_STRING_CONSTANT(name, str, flags) zend_register_string_constant((name), sizeof(name), (str), (flags), 0 TSRMLS_CC)
#define REGISTER_MAIN_STRINGL_CONSTANT(name, str, len, flags) zend_register_stringl_constant((name), sizeof(name), (str), (len), (flags), 0 TSRMLS_CC)
void clean_module_constants(int module_number TSRMLS_DC);
void free_zend_constant(zend_constant *c);
int zend_startup_constants(TSRMLS_D);
int zend_shutdown_constants(TSRMLS_D);
void zend_register_standard_constants(TSRMLS_D);
void clean_non_persistent_constants(TSRMLS_D);
ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC);
ZEND_API void zend_register_long_constant(char *name, uint name_len, long lval, int flags, int module_number TSRMLS_DC);
ZEND_API void zend_register_double_constant(char *name, uint name_len, double dval, int flags, int module_number TSRMLS_DC);
ZEND_API void zend_register_string_constant(char *name, uint name_len, char *strval, int flags, int module_number TSRMLS_DC);
ZEND_API void zend_register_stringl_constant(char *name, uint name_len, char *strval, uint strlen, int flags, int module_number TSRMLS_DC);
ZEND_API int zend_register_constant(zend_constant *c TSRMLS_DC);
void zend_copy_constants(HashTable *target, HashTable *sourc);
void copy_zend_constant(zend_constant *c);
#define ZEND_CONSTANT_DTOR (void (*)(void *)) free_zend_constant
#endif
-62
View File
@@ -1,62 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#include "zend.h"
typedef struct _dynamic_array {
char *array;
unsigned int element_size;
unsigned int current;
unsigned int allocated;
} dynamic_array;
ZEND_API int zend_dynamic_array_init(dynamic_array *da, unsigned int element_size, unsigned int size)
{
da->element_size = element_size;
da->allocated = size;
da->current = 0;
da->array = (char *) emalloc(size*element_size);
if (da->array == NULL) {
return 1;
}
return 0;
}
ZEND_API void *zend_dynamic_array_push(dynamic_array *da)
{
if (da->current == da->allocated) {
da->allocated *= 2;
da->array = (char *) erealloc(da->array, da->allocated*da->element_size);
}
return (void *)(da->array+(da->current++)*da->element_size);
}
ZEND_API void *zend_dynamic_array_pop(dynamic_array *da)
{
return (void *)(da->array+(--(da->current))*da->element_size);
}
ZEND_API void *zend_dynamic_array_get_element(dynamic_array *da, unsigned int index)
{
if (index >= da->current) {
return NULL;
}
return (void *)(da->array+index*da->element_size);
}
-38
View File
@@ -1,38 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_DYNAMIC_ARRAY_H
#define ZEND_DYNAMIC_ARRAY_H
typedef struct _dynamic_array {
char *array;
unsigned int element_size;
unsigned int last_used;
unsigned int allocated;
} dynamic_array;
BEGIN_EXTERN_C()
ZEND_API int zend_dynamic_array_init(dynamic_array *da);
ZEND_API void *zend_dynamic_array_push(dynamic_array *da);
ZEND_API void *zend_dynamic_array_pop(dynamic_array *da);
ZEND_API void *zend_dynamic_array_get_element(dynamic_array *da, unsigned int index);
END_EXTERN_C()
#endif /* ZEND_DYNAMIC_ARRAY_H */
-40
View File
@@ -1,40 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_ERRORS_H
#define ZEND_ERRORS_H
#define E_ERROR (1<<0L)
#define E_WARNING (1<<1L)
#define E_PARSE (1<<2L)
#define E_NOTICE (1<<3L)
#define E_CORE_ERROR (1<<4L)
#define E_CORE_WARNING (1<<5L)
#define E_COMPILE_ERROR (1<<6L)
#define E_COMPILE_WARNING (1<<7L)
#define E_USER_ERROR (1<<8L)
#define E_USER_WARNING (1<<9L)
#define E_USER_NOTICE (1<<10L)
#define E_ALL (E_ERROR | E_WARNING | E_PARSE | E_NOTICE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE)
#define E_CORE (E_CORE_ERROR | E_CORE_WARNING)
#endif /* ZEND_ERRORS_H */
-3146
View File
File diff suppressed because it is too large. Load diff
-167
View File
@@ -1,167 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_EXECUTE_H
#define ZEND_EXECUTE_H
#include "zend_compile.h"
#include "zend_hash.h"
#include "zend_variables.h"
#include "zend_operators.h"
typedef union _temp_variable {
zval tmp_var;
struct {
zval **ptr_ptr;
zval *ptr;
} var;
struct {
zval tmp_var; /* a dummy */
union {
struct {
zval *str;
zend_uint offset;
} str_offset;
zend_property_reference overloaded_element;
} data;
unsigned char type;
zend_class_entry *class_entry;
} EA;
} temp_variable;
BEGIN_EXTERN_C()
ZEND_API extern void (*zend_execute)(zend_op_array *op_array TSRMLS_DC);
void init_executor(TSRMLS_D);
void shutdown_executor(TSRMLS_D);
ZEND_API void execute(zend_op_array *op_array TSRMLS_DC);
ZEND_API int zend_is_true(zval *op);
static inline void safe_free_zval_ptr(zval *p)
{
TSRMLS_FETCH();
if (p!=EG(uninitialized_zval_ptr)) {
FREE_ZVAL(p);
}
}
ZEND_API int zend_lookup_class(char *name, int name_length, zend_class_entry ***ce TSRMLS_DC);
ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSRMLS_DC);
static inline int i_zend_is_true(zval *op)
{
int result;
switch (op->type) {
case IS_NULL:
result = 0;
break;
case IS_LONG:
case IS_BOOL:
case IS_RESOURCE:
result = (op->value.lval?1:0);
break;
case IS_DOUBLE:
result = (op->value.dval ? 1 : 0);
break;
case IS_STRING:
if (op->value.str.len == 0
|| (op->value.str.len==1 && op->value.str.val[0]=='0')) {
result = 0;
} else {
result = 1;
}
break;
case IS_ARRAY:
result = (zend_hash_num_elements(op->value.ht)?1:0);
break;
case IS_OBJECT:
/* OBJ-TBI */
result = 1;
break;
default:
result = 0;
break;
}
return result;
}
ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC);
/* dedicated Zend executor functions - do not use! */
static inline void zend_ptr_stack_clear_multiple(TSRMLS_D)
{
void **p = EG(argument_stack).top_element-2;
int delete_count = (ulong) *p;
EG(argument_stack).top -= (delete_count+2);
while (--delete_count>=0) {
zval_ptr_dtor((zval **) --p);
}
EG(argument_stack).top_element = p;
}
static inline int zend_ptr_stack_get_arg(int requested_arg, void **data TSRMLS_DC)
{
void **p = EG(argument_stack).top_element-2;
int arg_count = (ulong) *p;
if (requested_arg>arg_count) {
return FAILURE;
}
*data = (p-arg_count+requested_arg-1);
return SUCCESS;
}
void execute_new_code(TSRMLS_D);
/* services */
ZEND_API char *get_active_function_name(TSRMLS_D);
ZEND_API char *zend_get_executed_filename(TSRMLS_D);
ZEND_API uint zend_get_executed_lineno(TSRMLS_D);
ZEND_API zend_bool zend_is_executing(TSRMLS_D);
ZEND_API void zend_set_timeout(long seconds);
ZEND_API void zend_unset_timeout(TSRMLS_D);
ZEND_API void zend_timeout(int dummy);
#ifdef ZEND_WIN32
void zend_init_timeout_thread();
void zend_shutdown_timeout_thread();
#define WM_REGISTER_ZEND_TIMEOUT (WM_USER+1)
#define WM_UNREGISTER_ZEND_TIMEOUT (WM_USER+2)
#endif
#define zendi_zval_copy_ctor(p) zval_copy_ctor(&(p))
#define zendi_zval_dtor(p) zval_dtor(&(p))
#define active_opline (*EG(opline_ptr))
void zend_assign_to_variable_reference(znode *result, zval **variable_ptr_ptr, zval **value_ptr_ptr, temp_variable *Ts TSRMLS_DC);
#define IS_OVERLOADED_OBJECT 1
#define IS_STRING_OFFSET 2
END_EXTERN_C()
#endif /* ZEND_EXECUTE_H */
-950
View File
@@ -1,950 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#include <stdio.h>
#include <signal.h>
#include "zend.h"
#include "zend_compile.h"
#include "zend_execute.h"
#include "zend_API.h"
#include "zend_ptr_stack.h"
#include "zend_constants.h"
#include "zend_extensions.h"
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
ZEND_API void (*zend_execute)(zend_op_array *op_array TSRMLS_DC);
#ifdef ZEND_WIN32
#include <process.h>
/* true global */
static WNDCLASS wc;
static HWND timeout_window;
static HANDLE timeout_thread_event;
static DWORD timeout_thread_id;
static int timeout_thread_initialized=0;
#endif
#if ZEND_DEBUG
static void (*original_sigsegv_handler)(int);
static void zend_handle_sigsegv(int dummy)
{
fflush(stdout);
fflush(stderr);
if (original_sigsegv_handler==zend_handle_sigsegv) {
signal(SIGSEGV, original_sigsegv_handler);
} else {
signal(SIGSEGV, SIG_DFL);
}
{
TSRMLS_FETCH();
fprintf(stderr, "SIGSEGV caught on opcode %d on opline %d of %s() at %s:%d\n\n",
active_opline->opcode,
active_opline-EG(active_op_array)->opcodes,
get_active_function_name(TSRMLS_C),
zend_get_executed_filename(TSRMLS_C),
zend_get_executed_lineno(TSRMLS_C));
}
if (original_sigsegv_handler!=zend_handle_sigsegv) {
original_sigsegv_handler(dummy);
}
}
#endif
static void zend_extension_activator(zend_extension *extension TSRMLS_DC)
{
if (extension->activate) {
extension->activate();
}
}
static void zend_extension_deactivator(zend_extension *extension TSRMLS_DC)
{
if (extension->deactivate) {
extension->deactivate();
}
}
static int is_not_internal_function(zend_function *function TSRMLS_DC)
{
if (function->type == ZEND_INTERNAL_FUNCTION) {
return EG(full_tables_cleanup) ? 0 : ZEND_HASH_APPLY_STOP;
} else {
return EG(full_tables_cleanup) ? 1 : ZEND_HASH_APPLY_REMOVE;
}
}
static int is_not_internal_class(zend_class_entry **ce TSRMLS_DC)
{
if ((*ce)->type == ZEND_INTERNAL_CLASS) {
return EG(full_tables_cleanup) ? 0 : ZEND_HASH_APPLY_STOP;
} else {
return EG(full_tables_cleanup) ? 1 : ZEND_HASH_APPLY_REMOVE;
}
}
void init_executor(TSRMLS_D)
{
INIT_ZVAL(EG(uninitialized_zval));
INIT_ZVAL(EG(error_zval));
EG(uninitialized_zval_ptr)=&EG(uninitialized_zval);
EG(error_zval_ptr)=&EG(error_zval);
zend_ptr_stack_init(&EG(arg_types_stack));
/* destroys stack frame, therefore makes core dumps worthless */
#if 0&&ZEND_DEBUG
original_sigsegv_handler = signal(SIGSEGV, zend_handle_sigsegv);
#endif
EG(return_value_ptr_ptr) = NULL;
EG(symtable_cache_ptr) = EG(symtable_cache)-1;
EG(symtable_cache_limit)=EG(symtable_cache)+SYMTABLE_CACHE_SIZE-1;
EG(no_extensions)=0;
EG(function_table) = CG(function_table);
EG(class_table) = CG(class_table);
EG(in_execution) = 0;
zend_ptr_stack_init(&EG(argument_stack));
zend_hash_init(&EG(symbol_table), 50, NULL, ZVAL_PTR_DTOR, 0);
{
zval *globals;
ALLOC_ZVAL(globals);
globals->refcount=1;
globals->is_ref=1;
globals->type = IS_ARRAY;
globals->value.ht = &EG(symbol_table);
zend_hash_update(&EG(symbol_table), "GLOBALS", sizeof("GLOBALS"), &globals, sizeof(zval *), NULL);
}
EG(active_symbol_table) = &EG(symbol_table);
zend_llist_apply(&zend_extensions, (llist_apply_func_t) zend_extension_activator TSRMLS_CC);
EG(opline_ptr) = NULL;
EG(garbage_ptr) = 0;
zend_hash_init(&EG(included_files), 5, NULL, NULL, 0);
EG(ticks_count) = 0;
EG(user_error_handler) = NULL;
zend_ptr_stack_init(&EG(user_error_handlers));
EG(orig_error_reporting) = EG(error_reporting);
zend_objects_store_init(&EG(objects_store), 1024);
EG(full_tables_cleanup) = 0;
#ifdef ZEND_WIN32
EG(timed_out) = 0;
#endif
EG(exception) = NULL;
EG(scope) = NULL;
EG(main_class_ptr) = &CG(main_class);
CG(main_class).static_members = &EG(symbol_table);
EG(current_execute_data) = NULL;
EG(This) = NULL;
}
void shutdown_executor(TSRMLS_D)
{
zend_try {
zend_objects_store_call_destructors(&EG(objects_store) TSRMLS_CC);
zend_ptr_stack_destroy(&EG(arg_types_stack));
while (EG(symtable_cache_ptr)>=EG(symtable_cache)) {
zend_hash_destroy(*EG(symtable_cache_ptr));
efree(*EG(symtable_cache_ptr));
EG(symtable_cache_ptr)--;
}
zend_llist_apply(&zend_extensions, (llist_apply_func_t) zend_extension_deactivator TSRMLS_CC);
zend_hash_destroy(&EG(symbol_table));
while (EG(garbage_ptr)--) {
if (EG(garbage)[EG(garbage_ptr)]->refcount==1) {
zval_ptr_dtor(&EG(garbage)[EG(garbage_ptr)]);
}
}
zend_ptr_stack_destroy(&EG(argument_stack));
/* Destroy all op arrays */
if (EG(full_tables_cleanup)) {
zend_hash_apply(EG(function_table), (apply_func_t) is_not_internal_function TSRMLS_CC);
zend_hash_apply(EG(class_table), (apply_func_t) is_not_internal_class TSRMLS_CC);
} else {
zend_hash_reverse_apply(EG(function_table), (apply_func_t) is_not_internal_function TSRMLS_CC);
zend_hash_reverse_apply(EG(class_table), (apply_func_t) is_not_internal_class TSRMLS_CC);
}
} zend_end_try();
/* The regular list must be destroyed after the main symbol table and
* op arrays are destroyed.
*/
zend_destroy_rsrc_list(&EG(regular_list) TSRMLS_CC);
zend_try {
clean_non_persistent_constants(TSRMLS_C);
#if ZEND_DEBUG
signal(SIGSEGV, original_sigsegv_handler);
#endif
zend_hash_destroy(&EG(included_files));
if (EG(user_error_handler)) {
zval_dtor(EG(user_error_handler));
FREE_ZVAL(EG(user_error_handler));
}
zend_ptr_stack_clean(&EG(user_error_handlers), ZVAL_DESTRUCTOR, 1);
zend_ptr_stack_destroy(&EG(user_error_handlers));
EG(error_reporting) = EG(orig_error_reporting);
zend_objects_store_destroy(&EG(objects_store));
} zend_end_try();
}
ZEND_API char *get_active_function_name(TSRMLS_D)
{
if (!zend_is_executing(TSRMLS_C)) {
return NULL;
}
switch(EG(function_state_ptr)->function->type) {
case ZEND_USER_FUNCTION: {
char *function_name = ((zend_op_array *) EG(function_state_ptr)->function)->function_name;
if (function_name) {
return function_name;
} else {
return "main";
}
}
break;
case ZEND_INTERNAL_FUNCTION:
return ((zend_internal_function *) EG(function_state_ptr)->function)->function_name;
break;
default:
return NULL;
}
}
ZEND_API char *zend_get_executed_filename(TSRMLS_D)
{
if (EG(active_op_array)) {
return EG(active_op_array)->filename;
} else {
return "[no active file]";
}
}
ZEND_API uint zend_get_executed_lineno(TSRMLS_D)
{
if (EG(opline_ptr)) {
return active_opline->lineno;
} else {
return 0;
}
}
ZEND_API zend_bool zend_is_executing(TSRMLS_D)
{
return EG(in_execution);
}
ZEND_API void _zval_ptr_dtor(zval **zval_ptr ZEND_FILE_LINE_DC)
{
#if DEBUG_ZEND>=2
printf("Reducing refcount for %x (%x): %d->%d\n", *zval_ptr, zval_ptr, (*zval_ptr)->refcount, (*zval_ptr)->refcount-1);
#endif
(*zval_ptr)->refcount--;
if ((*zval_ptr)->refcount==0) {
zval_dtor(*zval_ptr);
safe_free_zval_ptr(*zval_ptr);
} else if ((*zval_ptr)->refcount == 1) {
(*zval_ptr)->is_ref = 0;
}
}
ZEND_API int zend_is_true(zval *op)
{
return i_zend_is_true(op);
}
#include "../TSRM/tsrm_strtok_r.h"
ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC)
{
zval *p = *pp;
zend_bool inline_change = (zend_bool) (unsigned long) arg;
zval const_value;
if (p->type == IS_CONSTANT) {
int refcount;
SEPARATE_ZVAL(pp);
p = *pp;
refcount = p->refcount;
if (strchr(p->value.str.val, ':')) {
char *cur, *temp;
char *last;
zend_class_entry **ce;
zval **value;
last = tsrm_strtok_r(p->value.str.val, ":", &temp);
if (zend_lookup_class(last, strlen(last), &ce TSRMLS_CC) == FAILURE) {
zend_error(E_ERROR, "Undefined class '%s'", last);
}
last = tsrm_strtok_r(NULL, ":", &temp);
for(;;) {
cur = tsrm_strtok_r(NULL, ":", &temp);
if (!cur) {
break;
}
if (zend_hash_find(&(*ce)->class_table, last, strlen(last)+1, (void **)&ce) == FAILURE) {
zend_error(E_ERROR, "Undefined sub-class '%s'", last);
}
last = cur;
}
if (zend_hash_find(&(*ce)->constants_table, last, strlen(last)+1, (void **) &value) == FAILURE) {
zend_error(E_ERROR, "Undefined class constant '%s'", last);
}
const_value = **value;
zval_copy_ctor(&const_value);
if (inline_change) {
STR_FREE(p->value.str.val);
}
*p = const_value;
} else {
if (!zend_get_constant(p->value.str.val, p->value.str.len, &const_value TSRMLS_CC)) {
zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
p->value.str.val,
p->value.str.val);
p->type = IS_STRING;
if (!inline_change) {
zval_copy_ctor(p);
}
} else {
if (inline_change) {
STR_FREE(p->value.str.val);
}
*p = const_value;
}
}
INIT_PZVAL(p);
p->refcount = refcount;
} else if (p->type == IS_CONSTANT_ARRAY) {
zval **element;
char *str_index;
uint str_index_len;
ulong num_index;
SEPARATE_ZVAL(pp);
p = *pp;
p->type = IS_ARRAY;
/* First go over the array and see if there are any constant indices */
zend_hash_internal_pointer_reset(p->value.ht);
while (zend_hash_get_current_data(p->value.ht, (void **) &element)==SUCCESS) {
if (!(Z_TYPE_PP(element) & IS_CONSTANT_INDEX)) {
zend_hash_move_forward(p->value.ht);
continue;
}
Z_TYPE_PP(element) &= ~IS_CONSTANT_INDEX;
if (zend_hash_get_current_key_ex(p->value.ht, &str_index, &str_index_len, &num_index, 0, NULL)!=HASH_KEY_IS_STRING) {
zend_hash_move_forward(p->value.ht);
continue;
}
if (!zend_get_constant(str_index, str_index_len-1, &const_value TSRMLS_CC)) {
zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'", str_index, str_index);
zend_hash_move_forward(p->value.ht);
continue;
}
switch (const_value.type) {
case IS_STRING:
zend_hash_update(p->value.ht, const_value.value.str.val, const_value.value.str.len+1, element, sizeof(zval *), NULL);
(*element)->refcount++;
break;
case IS_LONG:
zend_hash_index_update(p->value.ht, const_value.value.lval, element, sizeof(zval *), NULL);
(*element)->refcount++;
break;
}
zend_hash_del(p->value.ht, str_index, str_index_len);
}
zend_hash_apply_with_argument(p->value.ht, (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC);
}
return 0;
}
int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, int param_count, zval *params[] TSRMLS_DC)
{
zval ***params_array = (zval ***) emalloc(sizeof(zval **)*param_count);
int i;
int ex_retval;
zval *local_retval_ptr;
for (i=0; i<param_count; i++) {
params_array[i] = &params[i];
}
ex_retval = call_user_function_ex(function_table, object_pp, function_name, &local_retval_ptr, param_count, params_array, 1, NULL TSRMLS_CC);
if (local_retval_ptr) {
COPY_PZVAL_TO_ZVAL(*retval_ptr, local_retval_ptr);
} else {
INIT_ZVAL(*retval_ptr);
}
efree(params_array);
return ex_retval;
}
int call_user_function_ex(HashTable *function_table, zval **object_pp, zval *function_name, zval **retval_ptr_ptr, int param_count, zval **params[], int no_separation, HashTable *symbol_table TSRMLS_DC)
{
int i;
zval **original_return_value;
HashTable *calling_symbol_table;
zend_function_state function_state;
zend_function_state *original_function_state_ptr;
zend_op_array *original_op_array;
zend_op **original_opline_ptr;
int orig_free_op1, orig_free_op2;
int (*orig_unary_op)(zval *result, zval *op1);
int (*orig_binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC);
zval function_name_copy;
zend_class_entry *current_scope;
zend_class_entry *calling_scope = NULL;
zval *current_this;
*retval_ptr_ptr = NULL;
if (function_name->type==IS_ARRAY) { /* assume array($obj, $name) couple */
zval **tmp_object_ptr, **tmp_real_function_name;
if (zend_hash_index_find(function_name->value.ht, 0, (void **) &tmp_object_ptr)==FAILURE) {
return FAILURE;
}
if (zend_hash_index_find(function_name->value.ht, 1, (void **) &tmp_real_function_name)==FAILURE) {
return FAILURE;
}
function_name = *tmp_real_function_name;
SEPARATE_ZVAL_IF_NOT_REF(tmp_object_ptr);
object_pp = tmp_object_ptr;
(*object_pp)->is_ref = 1;
}
if (object_pp && !*object_pp) {
object_pp = NULL;
}
if (object_pp) {
/* TBI!! new object handlers */
if (Z_TYPE_PP(object_pp) == IS_OBJECT) {
if(!IS_ZEND_STD_OBJECT(**object_pp)) {
zend_error(E_WARNING, "Cannot use call_user_function on overloaded objects");
return FAILURE;
}
function_table = &Z_OBJCE_PP(object_pp)->function_table;
calling_scope = Z_OBJCE_PP(object_pp);
} else if (Z_TYPE_PP(object_pp) == IS_STRING) {
zend_class_entry **ce;
char *lc_class;
int found;
lc_class = estrndup(Z_STRVAL_PP(object_pp), Z_STRLEN_PP(object_pp));
zend_str_tolower(lc_class, Z_STRLEN_PP(object_pp));
found = zend_lookup_class(lc_class, Z_STRLEN_PP(object_pp), &ce TSRMLS_CC);
efree(lc_class);
if (found == FAILURE)
return FAILURE;
function_table = &(*ce)->function_table;
calling_scope = *ce;
object_pp = NULL;
} else
return FAILURE;
}
if (function_name->type!=IS_STRING) {
return FAILURE;
}
function_name_copy = *function_name;
zval_copy_ctor(&function_name_copy);
zend_str_tolower(function_name_copy.value.str.val, function_name_copy.value.str.len);
original_function_state_ptr = EG(function_state_ptr);
if (zend_hash_find(function_table, function_name_copy.value.str.val, function_name_copy.value.str.len+1, (void **) &function_state.function)==FAILURE) {
zval_dtor(&function_name_copy);
return FAILURE;
}
zval_dtor(&function_name_copy);
for (i=0; i<param_count; i++) {
zval *param;
if (function_state.function->common.arg_types
&& i<function_state.function->common.arg_types[0]
&& function_state.function->common.arg_types[i+1]==BYREF_FORCE
&& !PZVAL_IS_REF(*params[i])) {
if ((*params[i])->refcount>1) {
zval *new_zval;
if (no_separation) {
return FAILURE;
}
ALLOC_ZVAL(new_zval);
*new_zval = **params[i];
zval_copy_ctor(new_zval);
new_zval->refcount = 1;
(*params[i])->refcount--;
*params[i] = new_zval;
}
(*params[i])->refcount++;
(*params[i])->is_ref = 1;
param = *params[i];
} else if (*params[i] != &EG(uninitialized_zval)) {
(*params[i])->refcount++;
param = *params[i];
} else {
ALLOC_ZVAL(param);
*param = **(params[i]);
INIT_PZVAL(param);
}
zend_ptr_stack_push(&EG(argument_stack), param);
}
zend_ptr_stack_n_push(&EG(argument_stack), 2, (void *) (long) param_count, NULL);
EG(function_state_ptr) = &function_state;
current_scope = EG(scope);
EG(scope) = calling_scope;
current_this = EG(This);
if (object_pp) {
EG(This) = *object_pp;
if (!PZVAL_IS_REF(EG(This))) {
EG(This)->refcount++; /* For $this pointer */
} else {
zval *this_ptr;
ALLOC_ZVAL(this_ptr);
*this_ptr = *EG(This);
INIT_PZVAL(this_ptr);
zval_copy_ctor(this_ptr);
EG(This) = this_ptr;
}
} else {
EG(This) = NULL;
}
if (function_state.function->type == ZEND_USER_FUNCTION) {
calling_symbol_table = EG(active_symbol_table);
if (symbol_table) {
EG(active_symbol_table) = symbol_table;
} else {
ALLOC_HASHTABLE(EG(active_symbol_table));
zend_hash_init(EG(active_symbol_table), 0, NULL, ZVAL_PTR_DTOR, 0);
}
original_return_value = EG(return_value_ptr_ptr);
original_op_array = EG(active_op_array);
EG(return_value_ptr_ptr) = retval_ptr_ptr;
EG(active_op_array) = (zend_op_array *) function_state.function;
original_opline_ptr = EG(opline_ptr);
orig_free_op1 = EG(free_op1);
orig_free_op2 = EG(free_op2);
orig_unary_op = EG(unary_op);
orig_binary_op = EG(binary_op);
zend_execute(EG(active_op_array) TSRMLS_CC);
if (!symbol_table) {
zend_hash_destroy(EG(active_symbol_table));
FREE_HASHTABLE(EG(active_symbol_table));
}
EG(active_symbol_table) = calling_symbol_table;
EG(active_op_array) = original_op_array;
EG(return_value_ptr_ptr)=original_return_value;
EG(opline_ptr) = original_opline_ptr;
EG(free_op1) = orig_free_op1;
EG(free_op2) = orig_free_op2;
EG(unary_op) = orig_unary_op;
EG(binary_op) = orig_binary_op;
} else {
ALLOC_INIT_ZVAL(*retval_ptr_ptr);
((zend_internal_function *) function_state.function)->handler(param_count, *retval_ptr_ptr, (object_pp?*object_pp:NULL), 1 TSRMLS_CC);
INIT_PZVAL(*retval_ptr_ptr);
}
zend_ptr_stack_clear_multiple(TSRMLS_C);
EG(function_state_ptr) = original_function_state_ptr;
if (EG(This)) {
zval_ptr_dtor(&EG(This));
}
EG(scope) = current_scope;
EG(This) = current_this;
return SUCCESS;
}
ZEND_API int zend_lookup_class(char *name, int name_length, zend_class_entry ***ce TSRMLS_DC)
{
zval **args[1];
zval *autoload_function;
zval *class_name;
zval *retval_ptr;
int retval;
if (EG(scope)) {
if (zend_hash_find(&EG(scope)->class_table, name, name_length+1, (void **) ce) == SUCCESS) {
return SUCCESS;
}
}
if (zend_hash_find(EG(class_table), name, name_length+1, (void **) ce) == SUCCESS) {
return SUCCESS;
}
MAKE_STD_ZVAL(autoload_function);
ZVAL_STRINGL(autoload_function, "__autoload", sizeof("__autoload")-1, 1);
MAKE_STD_ZVAL(class_name);
ZVAL_STRINGL(class_name, name, name_length, 1);
args[0] = &class_name;
retval = call_user_function_ex(EG(function_table), NULL, autoload_function, &retval_ptr, 1, args, 0, NULL TSRMLS_CC);
zval_ptr_dtor(&autoload_function);
zval_ptr_dtor(&class_name);
if (retval == FAILURE) {
return FAILURE;
}
zval_ptr_dtor(&retval_ptr);
return zend_hash_find(EG(class_table), name, name_length + 1, (void **) ce);
}
ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSRMLS_DC)
{
zval pv;
zend_op_array *new_op_array;
zend_op_array *original_active_op_array = EG(active_op_array);
zend_function_state *original_function_state_ptr = EG(function_state_ptr);
zend_uchar original_handle_op_arrays;
int retval;
if (retval_ptr) {
pv.value.str.len = strlen(str)+sizeof("return ;")-1;
pv.value.str.val = emalloc(pv.value.str.len+1);
strcpy(pv.value.str.val, "return ");
strcat(pv.value.str.val, str);
strcat(pv.value.str.val, " ;");
} else {
pv.value.str.len = strlen(str);
pv.value.str.val = estrndup(str, pv.value.str.len);
}
pv.type = IS_STRING;
/*printf("Evaluating '%s'\n", pv.value.str.val);*/
original_handle_op_arrays = CG(handle_op_arrays);
CG(handle_op_arrays) = 0;
new_op_array = compile_string(&pv, string_name TSRMLS_CC);
CG(handle_op_arrays) = original_handle_op_arrays;
if (new_op_array) {
zval *local_retval_ptr=NULL;
zval **original_return_value_ptr_ptr = EG(return_value_ptr_ptr);
zend_op **original_opline_ptr = EG(opline_ptr);
EG(return_value_ptr_ptr) = &local_retval_ptr;
EG(active_op_array) = new_op_array;
EG(no_extensions)=1;
zend_execute(new_op_array TSRMLS_CC);
if (local_retval_ptr) {
if (retval_ptr) {
COPY_PZVAL_TO_ZVAL(*retval_ptr, local_retval_ptr);
} else {
zval_ptr_dtor(&local_retval_ptr);
}
} else {
if (retval_ptr) {
INIT_ZVAL(*retval_ptr);
}
}
EG(no_extensions)=0;
EG(opline_ptr) = original_opline_ptr;
EG(active_op_array) = original_active_op_array;
EG(function_state_ptr) = original_function_state_ptr;
destroy_op_array(new_op_array);
efree(new_op_array);
EG(return_value_ptr_ptr) = original_return_value_ptr_ptr;
retval = SUCCESS;
} else {
retval = FAILURE;
}
zval_dtor(&pv);
return retval;
}
void execute_new_code(TSRMLS_D)
{
zend_op *opline, *end;
zend_op *ret_opline;
zval *local_retval=NULL;
if (!CG(interactive)
|| CG(active_op_array)->backpatch_count>0
|| CG(active_op_array)->function_name
|| CG(active_op_array)->type!=ZEND_USER_FUNCTION) {
return;
}
ret_opline = get_next_op(CG(active_op_array) TSRMLS_CC);
ret_opline->opcode = ZEND_RETURN;
ret_opline->op1.op_type = IS_CONST;
INIT_ZVAL(ret_opline->op1.u.constant);
SET_UNUSED(ret_opline->op2);
if (!CG(active_op_array)->start_op) {
CG(active_op_array)->start_op = CG(active_op_array)->opcodes;
}
opline=CG(active_op_array)->start_op;
end=CG(active_op_array)->opcodes+CG(active_op_array)->last;
while (opline<end) {
if (opline->op1.op_type==IS_CONST) {
opline->op1.u.constant.is_ref = 1;
opline->op1.u.constant.refcount = 2; /* Make sure is_ref won't be reset */
}
if (opline->op2.op_type==IS_CONST) {
opline->op2.u.constant.is_ref = 1;
opline->op2.u.constant.refcount = 2;
}
opline++;
}
EG(return_value_ptr_ptr) = &local_retval;
EG(active_op_array) = CG(active_op_array);
zend_execute(CG(active_op_array) TSRMLS_CC);
if (local_retval) {
zval_ptr_dtor(&local_retval);
}
CG(active_op_array)->last--; /* get rid of that ZEND_RETURN */
CG(active_op_array)->start_op = CG(active_op_array)->opcodes+CG(active_op_array)->last;
}
ZEND_API void zend_timeout(int dummy)
{
TSRMLS_FETCH();
/* is there any point in this? we're terminating the request anyway...
PG(connection_status) |= PHP_CONNECTION_TIMEOUT;
*/
zend_error(E_ERROR, "Maximum execution time of %d second%s exceeded",
EG(timeout_seconds), EG(timeout_seconds) == 1 ? "" : "s");
}
#ifdef ZEND_WIN32
static LRESULT CALLBACK zend_timeout_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_REGISTER_ZEND_TIMEOUT:
/* wParam is the thread id pointer, lParam is the timeout amount in seconds */
if (lParam==0) {
KillTimer(timeout_window, wParam);
} else {
SetTimer(timeout_window, wParam, lParam*1000, NULL);
}
break;
case WM_UNREGISTER_ZEND_TIMEOUT:
/* wParam is the thread id pointer */
KillTimer(timeout_window, wParam);
break;
case WM_TIMER: {
#ifdef ZTS
void ***tsrm_ls;
tsrm_ls = ts_resource_ex(0, &wParam);
if (!tsrm_ls) {
/* Thread died before receiving its timeout? */
break;
}
#endif
KillTimer(timeout_window, wParam);
EG(timed_out) = 1;
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
static unsigned __stdcall timeout_thread_proc(void *pArgs)
{
MSG message;
wc.style=0;
wc.lpfnWndProc = zend_timeout_WndProc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=NULL;
wc.hIcon=NULL;
wc.hCursor=NULL;
wc.hbrBackground=(HBRUSH)(COLOR_BACKGROUND + 5);
wc.lpszMenuName=NULL;
wc.lpszClassName = "Zend Timeout Window";
if (!RegisterClass(&wc)) {
return -1;
}
timeout_window = CreateWindow(wc.lpszClassName, wc.lpszClassName, 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, NULL, NULL);
SetEvent(timeout_thread_event);
while (GetMessage(&message, NULL, 0, 0)) {
SendMessage(timeout_window, message.message, message.wParam, message.lParam);
if (message.message == WM_QUIT) {
break;
}
}
DestroyWindow(timeout_window);
UnregisterClass(wc.lpszClassName, NULL);
return 0;
}
void zend_init_timeout_thread()
{
timeout_thread_event = CreateEvent(NULL, FALSE, FALSE, NULL);
_beginthreadex(NULL, 0, timeout_thread_proc, NULL, 0, &timeout_thread_id);
WaitForSingleObject(timeout_thread_event, INFINITE);
}
void zend_shutdown_timeout_thread()
{
if (!timeout_thread_initialized) {
return;
}
PostThreadMessage(timeout_thread_id, WM_QUIT, 0, 0);
}
#endif
/* This one doesn't exists on QNX */
#ifndef SIGPROF
#define SIGPROF 27
#endif
void zend_set_timeout(long seconds)
{
TSRMLS_FETCH();
EG(timeout_seconds) = seconds;
#ifdef ZEND_WIN32
if (timeout_thread_initialized==0 && InterlockedIncrement(&timeout_thread_initialized)==1) {
/* We start up this process-wide thread here and not in zend_startup(), because if Zend
* is initialized inside a DllMain(), you're not supposed to start threads from it.
*/
zend_init_timeout_thread();
}
PostThreadMessage(timeout_thread_id, WM_REGISTER_ZEND_TIMEOUT, (WPARAM) GetCurrentThreadId(), (LPARAM) seconds);
#else
# ifdef HAVE_SETITIMER
{
struct itimerval t_r; /* timeout requested */
sigset_t sigset;
t_r.it_value.tv_sec = seconds;
t_r.it_value.tv_usec = t_r.it_interval.tv_sec = t_r.it_interval.tv_usec = 0;
setitimer(ITIMER_PROF, &t_r, NULL);
signal(SIGPROF, zend_timeout);
sigemptyset(&sigset);
sigaddset(&sigset, SIGPROF);
sigprocmask(SIG_UNBLOCK, &sigset, NULL);
}
# endif
#endif
}
void zend_unset_timeout(TSRMLS_D)
{
#ifdef ZEND_WIN32
PostThreadMessage(timeout_thread_id, WM_UNREGISTER_ZEND_TIMEOUT, (WPARAM) GetCurrentThreadId(), (LPARAM) 0);
#else
# ifdef HAVE_SETITIMER
{
struct itimerval no_timeout;
no_timeout.it_value.tv_sec = no_timeout.it_value.tv_usec = no_timeout.it_interval.tv_sec = no_timeout.it_interval.tv_usec = 0;
setitimer(ITIMER_PROF, &no_timeout, NULL);
}
# endif
#endif
}
-32
View File
@@ -1,32 +0,0 @@
#ifndef ZEND_EXECUTE_LOCKS_H
#define ZEND_EXECUTE_LOCKS_H
#define PZVAL_LOCK(z) zend_pzval_lock_func(z)
static inline void zend_pzval_lock_func(zval *z)
{
z->refcount++;
}
#define PZVAL_UNLOCK(z) zend_pzval_unlock_func(z TSRMLS_CC)
static inline void zend_pzval_unlock_func(zval *z TSRMLS_DC)
{
z->refcount--;
if (!z->refcount) {
z->refcount = 1;
z->is_ref = 0;
EG(garbage)[EG(garbage_ptr)++] = z;
}
}
static inline void zend_clean_garbage(TSRMLS_D)
{
while (EG(garbage_ptr)) {
zval_ptr_dtor(&EG(garbage)[--EG(garbage_ptr)]);
}
}
#define SELECTIVE_PZVAL_LOCK(pzv, pzn) if (!((pzn)->u.EA.type & EXT_TYPE_UNUSED)) { PZVAL_LOCK(pzv); }
#endif /* ZEND_EXECUTE_LOCKS_H */
-279
View File
@@ -1,279 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#include "zend_extensions.h"
ZEND_API zend_llist zend_extensions;
static int last_resource_number;
int zend_load_extension(char *path)
{
#if ZEND_EXTENSIONS_SUPPORT
DL_HANDLE handle;
zend_extension *new_extension;
zend_extension_version_info *extension_version_info;
handle = DL_LOAD(path);
if (!handle) {
#ifndef ZEND_WIN32
fprintf(stderr, "Failed loading %s: %s\n", path, dlerror());
#else
fprintf(stderr, "Failed loading %s\n", path);
#endif
return FAILURE;
}
extension_version_info = (zend_extension_version_info *) DL_FETCH_SYMBOL(handle, "extension_version_info");
new_extension = (zend_extension *) DL_FETCH_SYMBOL(handle, "zend_extension_entry");
if (!extension_version_info || !new_extension) {
fprintf(stderr, "%s doesn't appear to be a valid Zend extension\n", path);
return FAILURE;
}
/* allow extension to proclaim compatibility with any Zend version */
if (extension_version_info->zend_extension_api_no != ZEND_EXTENSION_API_NO &&(!new_extension->api_no_check || new_extension->api_no_check(ZEND_EXTENSION_API_NO) != SUCCESS)) {
if (extension_version_info->zend_extension_api_no > ZEND_EXTENSION_API_NO) {
fprintf(stderr, "%s requires Zend Engine API version %d.\n"
"The Zend Engine API version %d which is installed, is outdated.\n\n",
new_extension->name,
extension_version_info->zend_extension_api_no,
ZEND_EXTENSION_API_NO);
DL_UNLOAD(handle);
return FAILURE;
} else if (extension_version_info->zend_extension_api_no < ZEND_EXTENSION_API_NO) {
fprintf(stderr, "%s requires Zend Engine API version %d.\n"
"The Zend Engine API version %d which is installed, is newer.\n"
"Contact %s at %s for a later version of %s.\n\n",
new_extension->name,
extension_version_info->zend_extension_api_no,
ZEND_EXTENSION_API_NO,
new_extension->author,
new_extension->URL,
new_extension->name);
DL_UNLOAD(handle);
return FAILURE;
}
} else if (ZTS_V!=extension_version_info->thread_safe) {
fprintf(stderr, "Cannot load %s - it %s thread safe, whereas Zend %s\n",
new_extension->name,
(extension_version_info->thread_safe?"is":"isn't"),
(ZTS_V?"is":"isn't"));
DL_UNLOAD(handle);
return FAILURE;
} else if (ZEND_DEBUG!=extension_version_info->debug) {
fprintf(stderr, "Cannot load %s - it %s debug information, whereas Zend %s\n",
new_extension->name,
(extension_version_info->debug?"contains":"does not contain"),
(ZEND_DEBUG?"does":"does not"));
DL_UNLOAD(handle);
return FAILURE;
}
return zend_register_extension(new_extension, handle);
#else
fprintf(stderr, "Extensions are not supported on this platform.\n");
return FAILURE;
#endif
}
int zend_register_extension(zend_extension *new_extension, DL_HANDLE handle)
{
#if ZEND_EXTENSIONS_SUPPORT
zend_extension extension;
extension = *new_extension;
extension.handle = handle;
zend_extension_dispatch_message(ZEND_EXTMSG_NEW_EXTENSION, &extension);
zend_llist_add_element(&zend_extensions, &extension);
/*fprintf(stderr, "Loaded %s, version %s\n", extension.name, extension.version);*/
#endif
return SUCCESS;
}
static void zend_extension_shutdown(zend_extension *extension TSRMLS_DC)
{
#if ZEND_EXTENSIONS_SUPPORT
if (extension->shutdown) {
extension->shutdown(extension);
}
#endif
}
static int zend_extension_startup(zend_extension *extension)
{
#if ZEND_EXTENSIONS_SUPPORT
if (extension->startup) {
if (extension->startup(extension)!=SUCCESS) {
return 1;
}
zend_append_version_info(extension);
}
#endif
return 0;
}
int zend_startup_extensions_mechanism()
{
/* Startup extensions mechanism */
zend_llist_init(&zend_extensions, sizeof(zend_extension), (void (*)(void *)) zend_extension_dtor, 1);
last_resource_number = 0;
return SUCCESS;
}
int zend_startup_extensions()
{
zend_llist_apply_with_del(&zend_extensions, (int (*)(void *)) zend_extension_startup);
return SUCCESS;
}
void zend_shutdown_extensions(TSRMLS_D)
{
zend_llist_apply(&zend_extensions, (llist_apply_func_t) zend_extension_shutdown TSRMLS_CC);
zend_llist_destroy(&zend_extensions);
}
void zend_extension_dtor(zend_extension *extension)
{
#if ZEND_EXTENSIONS_SUPPORT && !ZEND_DEBUG
if (extension->handle) {
DL_UNLOAD(extension->handle);
}
#endif
}
static void zend_extension_message_dispatcher(zend_extension *extension, int num_args, va_list args TSRMLS_DC)
{
int message;
void *arg;
if (!extension->message_handler || num_args!=2) {
return;
}
message = va_arg(args, int);
arg = va_arg(args, void *);
extension->message_handler(message, arg);
}
ZEND_API void zend_extension_dispatch_message(int message, void *arg)
{
TSRMLS_FETCH();
zend_llist_apply_with_arguments(&zend_extensions, (llist_apply_with_args_func_t) zend_extension_message_dispatcher TSRMLS_CC, 2, message, arg);
}
ZEND_API int zend_get_resource_handle(zend_extension *extension)
{
if (last_resource_number<ZEND_MAX_RESERVED_RESOURCES) {
extension->resource_number = last_resource_number;
return last_resource_number++;
} else {
return -1;
}
}
ZEND_API zend_extension *zend_get_extension(char *extension_name)
{
zend_llist_element *element;
for (element = zend_extensions.head; element; element = element->next) {
zend_extension *extension = (zend_extension *) element->data;
if (!strcmp(extension->name, extension_name)) {
return extension;
}
}
return NULL;
}
/*
* Support for dynamic loading of MH_BUNDLEs on Darwin / Mac OS X
*
*/
#if HAVE_MACH_O_DYLD_H
void *zend_mh_bundle_load(char* bundle_path)
{
NSObjectFileImage bundle_image;
NSModule bundle_handle;
NSSymbol bundle_init_nssymbol;
void (*bundle_init)(void);
if (NSCreateObjectFileImageFromFile(bundle_path, &bundle_image) != NSObjectFileImageSuccess) {
return NULL;
}
bundle_handle = NSLinkModule(bundle_image, bundle_path, NSLINKMODULE_OPTION_PRIVATE);
NSDestroyObjectFileImage(bundle_image);
/* call the init function of the bundle */
bundle_init_nssymbol = NSLookupSymbolInModule(bundle_handle, "__init");
if (bundle_init_nssymbol != NULL) {
bundle_init = NSAddressOfSymbol(bundle_init_nssymbol);
bundle_init();
}
return bundle_handle;
}
int zend_mh_bundle_unload(void *bundle_handle)
{
NSSymbol bundle_fini_nssymbol;
void (*bundle_fini)(void);
/* call the fini function of the bundle */
bundle_fini_nssymbol = NSLookupSymbolInModule(bundle_handle, "__fini");
if (bundle_fini_nssymbol != NULL) {
bundle_fini = NSAddressOfSymbol(bundle_fini_nssymbol);
bundle_fini();
}
return (int) NSUnLinkModule(bundle_handle, NULL);
}
void *zend_mh_bundle_symbol(void *bundle_handle, const char *symbol_name)
{
NSSymbol symbol;
symbol = NSLookupSymbolInModule(bundle_handle, symbol_name);
return NSAddressOfSymbol(symbol);
}
const char *zend_mh_bundle_error(void)
{
/* Witness the state of the art error reporting */
return NULL;
}
#endif /* HAVE_MACH_O_DYLD_H */
-116
View File
@@ -1,116 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_EXTENSIONS_H
#define ZEND_EXTENSIONS_H
#include "zend_compile.h"
#define ZEND_EXTENSION_API_NO 20010710
typedef struct _zend_extension_version_info {
int zend_extension_api_no;
char *required_zend_version;
unsigned char thread_safe;
unsigned char debug;
} zend_extension_version_info;
typedef struct _zend_extension zend_extension;
/* Typedef's for zend_extension function pointers */
typedef int (*startup_func_t)(zend_extension *extension);
typedef void (*shutdown_func_t)(zend_extension *extension);
typedef void (*activate_func_t)(void);
typedef void (*deactivate_func_t)(void);
typedef void (*message_handler_func_t)(int message, void *arg);
typedef void (*op_array_handler_func_t)(zend_op_array *op_array);
typedef void (*statement_handler_func_t)(zend_op_array *op_array);
typedef void (*fcall_begin_handler_func_t)(zend_op_array *op_array);
typedef void (*fcall_end_handler_func_t)(zend_op_array *op_array);
typedef void (*op_array_ctor_func_t)(zend_op_array *op_array);
typedef void (*op_array_dtor_func_t)(zend_op_array *op_array);
struct _zend_extension {
char *name;
char *version;
char *author;
char *URL;
char *copyright;
startup_func_t startup;
shutdown_func_t shutdown;
activate_func_t activate;
deactivate_func_t deactivate;
message_handler_func_t message_handler;
op_array_handler_func_t op_array_handler;
statement_handler_func_t statement_handler;
fcall_begin_handler_func_t fcall_begin_handler;
fcall_end_handler_func_t fcall_end_handler;
op_array_ctor_func_t op_array_ctor;
op_array_dtor_func_t op_array_dtor;
int (*api_no_check)(int api_no);
void *reserved2;
void *reserved3;
void *reserved4;
void *reserved5;
void *reserved6;
void *reserved7;
void *reserved8;
DL_HANDLE handle;
int resource_number;
};
ZEND_API int zend_get_resource_handle(zend_extension *extension);
ZEND_API void zend_extension_dispatch_message(int message, void *arg);
#define ZEND_EXTMSG_NEW_EXTENSION 1
#define ZEND_EXTENSION() \
ZEND_EXT_API zend_extension_version_info extension_version_info = { ZEND_EXTENSION_API_NO, ZEND_VERSION, ZTS_V, ZEND_DEBUG }
#define STANDARD_ZEND_EXTENSION_PROPERTIES NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1
#define COMPAT_ZEND_EXTENSION_PROPERTIES NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1
ZEND_API extern zend_llist zend_extensions;
void zend_extension_dtor(zend_extension *extension);
ZEND_API int zend_load_extension(char *path);
ZEND_API int zend_register_extension(zend_extension *new_extension, DL_HANDLE handle);
void zend_append_version_info(zend_extension *extension);
int zend_startup_extensions_mechanism(void);
int zend_startup_extensions(void);
void zend_shutdown_extensions(TSRMLS_D);
ZEND_API zend_extension *zend_get_extension(char *extension_name);
#endif /* ZEND_EXTENSIONS_H */
-140
View File
@@ -1,140 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_FAST_CACHE_H
#define ZEND_FAST_CACHE_H
#ifndef ZEND_ENABLE_FAST_CACHE
# if ZEND_DEBUG
# define ZEND_ENABLE_FAST_CACHE 0
# else
# define ZEND_ENABLE_FAST_CACHE 0
# endif
#endif
typedef struct _zend_fast_cache_list_entry {
struct _zend_fast_cache_list_entry *next;
} zend_fast_cache_list_entry;
#define MAX_FAST_CACHE_TYPES 4
#define ZVAL_CACHE_LIST 0
#define HASHTABLE_CACHE_LIST 1
#if ZEND_ENABLE_FAST_CACHE
#include "zend_globals.h"
#include "zend_globals_macros.h"
#include "zend_alloc.h"
#if ZEND_DEBUG
# define RECORD_ZVAL_CACHE_HIT(fc_type) AG(fast_cache_stats)[fc_type][1]++;
# define RECORD_ZVAL_CACHE_MISS(fc_type) AG(fast_cache_stats)[fc_type][0]++;
#else
# define RECORD_ZVAL_CACHE_HIT(fc_type)
# define RECORD_ZVAL_CACHE_MISS(fc_type)
#endif
#define ZEND_FAST_ALLOC(p, type, fc_type) \
{ \
TSRMLS_FETCH(); \
\
if (((p) = (type *) AG(fast_cache_list_head)[fc_type])) { \
AG(fast_cache_list_head)[fc_type] = ((zend_fast_cache_list_entry *) AG(fast_cache_list_head)[fc_type])->next; \
RECORD_ZVAL_CACHE_HIT(fc_type); \
} else { \
(p) = (type *) emalloc(sizeof(type)); \
RECORD_ZVAL_CACHE_MISS(fc_type); \
} \
}
#define ZEND_FAST_FREE(p, fc_type) \
{ \
TSRMLS_FETCH(); \
\
((zend_fast_cache_list_entry *) (p))->next = (zend_fast_cache_list_entry *) AG(fast_cache_list_head)[fc_type]; \
AG(fast_cache_list_head)[fc_type] = (zend_fast_cache_list_entry *) (p); \
}
#define ZEND_FAST_ALLOC_REL(p, type, fc_type) \
ZEND_FAST_ALLOC(p, type, fc_type)
#define ZEND_FAST_FREE_REL(p, fc_type) \
ZEND_FAST_FREE(p, fc_type)
#else /* !ZEND_ENABLE_FAST_CACHE */
#define ZEND_FAST_ALLOC(p, type, fc_type) \
(p) = (type *) emalloc(sizeof(type))
#define ZEND_FAST_FREE(p, fc_type) \
efree(p)
#define ZEND_FAST_ALLOC_REL(p, type, fc_type) \
(p) = (type *) emalloc_rel(sizeof(type))
#define ZEND_FAST_FREE_REL(p, fc_type) \
efree_rel(p)
#endif /* ZEND_ENABLE_FAST_CACHE */
/* fast cache for zval's */
#define ALLOC_ZVAL(z) \
ZEND_FAST_ALLOC(z, zval, ZVAL_CACHE_LIST)
#define FREE_ZVAL(z) \
ZEND_FAST_FREE(z, ZVAL_CACHE_LIST)
#define ALLOC_ZVAL_REL(z) \
ZEND_FAST_ALLOC_REL(z, zval, ZVAL_CACHE_LIST)
#define FREE_ZVAL_REL(z) \
ZEND_FAST_FREE_REL(z, ZVAL_CACHE_LIST)
/* fast cache for HashTables */
#define ALLOC_HASHTABLE(ht) \
ZEND_FAST_ALLOC(ht, HashTable, HASHTABLE_CACHE_LIST)
#define FREE_HASHTABLE(ht) \
ZEND_FAST_FREE(ht, HASHTABLE_CACHE_LIST)
#define ALLOC_HASHTABLE_REL(ht) \
ZEND_FAST_ALLOC_REL(ht, HashTable, HASHTABLE_CACHE_LIST)
#define FREE_HASHTABLE_REL(ht) \
ZEND_FAST_FREE_REL(ht, HASHTABLE_CACHE_LIST)
#endif /* ZEND_FAST_CACHE_H */
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
-261
View File
@@ -1,261 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_GLOBALS_H
#define ZEND_GLOBALS_H
#include <setjmp.h>
#include "zend_globals_macros.h"
#include "zend_stack.h"
#include "zend_ptr_stack.h"
#include "zend_hash.h"
#include "zend_llist.h"
#include "zend_fast_cache.h"
#include "zend_objects.h"
#include "zend_objects_API.h"
/* Define ZTS if you want a thread-safe Zend */
/*#undef ZTS*/
#ifdef ZTS
BEGIN_EXTERN_C()
ZEND_API extern int compiler_globals_id;
ZEND_API extern int executor_globals_id;
ZEND_API extern int alloc_globals_id;
END_EXTERN_C()
#endif
#define SYMTABLE_CACHE_SIZE 32
#include "zend_compile.h"
/* excpt.h on Digital Unix 4.0 defines function_table */
#undef function_table
typedef struct _zend_declarables {
zval ticks;
zend_uint beginop;
} zend_declarables;
struct _zend_compiler_globals {
zend_stack bp_stack;
zend_stack switch_cond_stack;
zend_stack foreach_copy_stack;
zend_stack object_stack;
zend_stack declare_stack;
zend_class_entry *active_class_entry;
zval active_ce_parent_class_name;
/* variables for list() compilation */
zend_llist list_llist;
zend_llist dimension_llist;
zend_stack list_stack;
zend_stack function_call_stack;
char *compiled_filename;
int zend_lineno;
int comment_start_line;
char *heredoc;
int heredoc_len;
zend_op_array *active_op_array;
zend_class_entry main_class;
HashTable *function_table; /* function symbol table */
HashTable *class_table; /* class table */
HashTable filenames_table;
HashTable *auto_globals;
zend_bool in_compilation;
zend_bool short_tags;
zend_bool asp_tags;
zend_bool allow_call_time_pass_reference;
zend_declarables declarables;
/* For extensions support */
zend_bool extended_info; /* generate extension information for debugger/profiler */
zend_bool handle_op_arrays; /* run op_arrays through op_array handlers */
zend_bool unclean_shutdown;
zend_bool ini_parser_unbuffered_errors;
zend_llist open_files;
zend_llist *throw_list;
long catch_begin;
struct _zend_ini_parser_param *ini_parser_param;
int interactive;
zend_bool increment_lineno;
zend_llist import_commands;
};
struct _zend_executor_globals {
zval **return_value_ptr_ptr;
zval uninitialized_zval;
zval *uninitialized_zval_ptr;
zval error_zval;
zval *error_zval_ptr;
zend_function_state *function_state_ptr;
zend_ptr_stack arg_types_stack;
/* symbol table cache */
HashTable *symtable_cache[SYMTABLE_CACHE_SIZE];
HashTable **symtable_cache_limit;
HashTable **symtable_cache_ptr;
zend_op **opline_ptr;
HashTable *active_symbol_table;
HashTable symbol_table; /* main symbol table */
HashTable included_files; /* files already included */
jmp_buf bailout;
int error_reporting;
int orig_error_reporting;
int exit_status;
zend_op_array *active_op_array;
HashTable *function_table; /* function symbol table */
HashTable *class_table; /* class table */
HashTable *zend_constants; /* constants table */
zend_class_entry *scope;
zend_class_entry *main_class_ptr;
zval *This;
long precision;
int ticks_count;
zend_bool in_execution;
zend_bool bailout_set;
zend_bool full_tables_cleanup;
/* for extended information support */
zend_bool no_extensions;
#ifdef ZEND_WIN32
zend_bool timed_out;
#endif
HashTable regular_list;
HashTable persistent_list;
zend_ptr_stack argument_stack;
int free_op1, free_op2;
int (*unary_op)(zval *result, zval *op1);
int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC);
zval *garbage[2];
int garbage_ptr;
zval *user_error_handler;
zend_ptr_stack user_error_handlers;
/* timeout support */
int timeout_seconds;
int lambda_count;
HashTable ini_directives;
zend_objects_store objects_store;
zval *exception;
struct _zend_execute_data *current_execute_data;
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};
#include "zend_mm.h"
struct _zend_alloc_globals {
zend_mem_header *head; /* standard list */
void *cache[MAX_CACHED_MEMORY][MAX_CACHED_ENTRIES];
unsigned int cache_count[MAX_CACHED_MEMORY];
void *fast_cache_list_head[MAX_FAST_CACHE_TYPES];
#ifdef ZEND_WIN32
HANDLE memory_heap;
#endif
#if ZEND_DEBUG
/* for performance tuning */
int cache_stats[MAX_CACHED_MEMORY][2];
int fast_cache_stats[MAX_FAST_CACHE_TYPES][2];
#endif
#if MEMORY_LIMIT
unsigned int memory_limit;
unsigned int allocated_memory;
unsigned int allocated_memory_peak;
unsigned char memory_exhausted;
#endif
#ifdef ZEND_MM
zend_mm_heap mm_heap;
#endif
};
struct _zend_scanner_globals {
FILE *yy_in;
FILE *yy_out;
int yy_leng;
char *yy_text;
struct yy_buffer_state *current_buffer;
char *c_buf_p;
int init;
int start;
char _yy_hold_char;
int yy_n_chars;
int _yy_did_buffer_switch_on_eof;
int _yy_last_accepting_state; /* Must be of the same type as yy_state_type,
* if for whatever reason it's no longer int!
*/
char *_yy_last_accepting_cpos;
int _yy_more_flag;
int _yy_more_len;
};
#endif /* ZEND_GLOBALS_H */
-109
View File
@@ -1,109 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_GLOBALS_MACROS_H
#define ZEND_GLOBALS_MACROS_H
typedef struct _zend_compiler_globals zend_compiler_globals;
typedef struct _zend_executor_globals zend_executor_globals;
typedef struct _zend_alloc_globals zend_alloc_globals;
typedef struct _zend_scanner_globals zend_scanner_globals;
/* Compiler */
#ifdef ZTS
# define CG(v) TSRMG(compiler_globals_id, zend_compiler_globals *, v)
BEGIN_EXTERN_C()
int zendparse(void *compiler_globals);
END_EXTERN_C()
#else
# define CG(v) (compiler_globals.v)
extern ZEND_API struct _zend_compiler_globals compiler_globals;
int zendparse(void);
#endif
/* Executor */
#ifdef ZTS
# define EG(v) TSRMG(executor_globals_id, zend_executor_globals *, v)
#else
# define EG(v) (executor_globals.v)
extern ZEND_API zend_executor_globals executor_globals;
#endif
/* Memory Manager */
#ifdef ZTS
# define AG(v) TSRMG(alloc_globals_id, zend_alloc_globals *, v)
#else
# define AG(v) (alloc_globals.v)
extern ZEND_API zend_alloc_globals alloc_globals;
#endif
/* Language Scanner */
#ifdef ZTS
# define LANG_SCNG(v) TSRMG(language_scanner_globals_id, zend_scanner_globals *, v)
extern ZEND_API ts_rsrc_id language_scanner_globals_id;
#else
# define LANG_SCNG(v) (language_scanner_globals.v)
extern ZEND_API zend_scanner_globals language_scanner_globals;
#endif
/* INI Scanner */
#ifdef ZTS
# define INI_SCNG(v) TSRMG(ini_scanner_globals_id, zend_scanner_globals *, v)
extern ZEND_API ts_rsrc_id ini_scanner_globals_id;
#else
# define INI_SCNG(v) (ini_scanner_globals.v)
extern ZEND_API zend_scanner_globals ini_scanner_globals;
#endif
/* For limited downwards source compatibility */
#define CLS_FETCH()
#define ELS_FETCH()
#define ALS_FETCH()
#define PLS_FETCH()
#define SLS_FETCH()
#define CLS_D
#define ELS_D
#define ALS_D
#define PLS_D
#define SLS_D
#define CLS_DC
#define ELS_DC
#define ALS_DC
#define PLS_DC
#define SLS_DC
#define CLS_C
#define ELS_C
#define ALS_C
#define PLS_C
#define SLS_C
#define CLS_CC
#define ELS_CC
#define ALS_CC
#define PLS_CC
#define SLS_CC
#endif /* ZEND_GLOBALS_MACROS_H */
-1326
View File
File diff suppressed because it is too large. Load diff
-272
View File
@@ -1,272 +0,0 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2002 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_HASH_H
#define ZEND_HASH_H
#include <sys/types.h>
#include "zend.h"
#define HASH_KEY_IS_STRING 1
#define HASH_KEY_IS_LONG 2
#define HASH_KEY_NON_EXISTANT 3
#define HASH_UPDATE (1<<0)
#define HASH_ADD (1<<1)
#define HASH_NEXT_INSERT (1<<2)
#define HASH_DEL_KEY 0
#define HASH_DEL_INDEX 1
typedef ulong (*hash_func_t)(char *arKey, uint nKeyLength);
typedef int (*compare_func_t)(const void *, const void * TSRMLS_DC);
typedef void (*sort_func_t)(void *, size_t, register size_t, compare_func_t TSRMLS_DC);
typedef void (*dtor_func_t)(void *pDest);
typedef void (*copy_ctor_func_t)(void *pElement);
struct _hashtable;
typedef struct bucket {
ulong h; /* Used for numeric indexing */
uint nKeyLength;
void *pData;
void *pDataPtr;
struct bucket *pListNext;
struct bucket *pListLast;
struct bucket *pNext;
struct bucket *pLast;
char arKey[1]; /* Must be last element */
} Bucket;
typedef struct _hashtable {
uint nTableSize;
uint nTableMask;
uint nNumOfElements;
ulong nNextFreeElement;
Bucket *pInternalPointer; /* Used for element traversal */
Bucket *pListHead;
Bucket *pListTail;
Bucket **arBuckets;
dtor_func_t pDestructor;
zend_bool persistent;
unsigned char nApplyCount;
zend_bool bApplyProtection;
#if ZEND_DEBUG
int inconsistent;
#endif
} HashTable;
typedef Bucket* HashPosition;
BEGIN_EXTERN_C()
/* startup/shutdown */
ZEND_API int zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent);
ZEND_API int zend_hash_init_ex(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent, zend_bool bApplyProtection);
ZEND_API void zend_hash_destroy(HashTable *ht);
ZEND_API void zend_hash_clean(HashTable *ht);
/* additions/updates/changes */
ZEND_API int zend_hash_add_or_update(HashTable *ht, char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest, int flag);
#define zend_hash_update(ht, arKey, nKeyLength, pData, nDataSize, pDest) \
zend_hash_add_or_update(ht, arKey, nKeyLength, pData, nDataSize, pDest, HASH_UPDATE)
#define zend_hash_add(ht, arKey, nKeyLength, pData, nDataSize, pDest) \
zend_hash_add_or_update(ht, arKey, nKeyLength, pData, nDataSize, pDest, HASH_ADD)
ZEND_API int zend_hash_quick_add_or_update(HashTable *ht, char *arKey, uint nKeyLength, ulong h, void *pData, uint nDataSize, void **pDest, int flag);
#define zend_hash_quick_update(ht, arKey, nKeyLength, h, pData, nDataSize, pDest) \
zend_hash_quick_add_or_update(ht, arKey, nKeyLength, h, pData, nDataSize, pDest, HASH_UPDATE)
#define zend_hash_quick_add(ht, arKey, nKeyLength, h, pData, nDataSize, pDest) \
zend_hash_quick_add_or_update(ht, arKey, nKeyLength, h, pData, nDataSize, pDest, HASH_ADD)
ZEND_API int zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void *pData, uint nDataSize, void **pDest, int flag);
#define zend_hash_index_update(ht, h, pData, nDataSize, pDest) \
zend_hash_index_update_or_next_insert(ht, h, pData, nDataSize, pDest, HASH_UPDATE)
#define zend_hash_next_index_insert(ht, pData, nDataSize, pDest) \
zend_hash_index_update_or_next_insert(ht, 0, pData, nDataSize, pDest, HASH_NEXT_INSERT)
ZEND_API int zend_hash_add_empty_element(HashTable *ht, char *arKey, uint nKeyLength);
#define ZEND_HASH_APPLY_KEEP 0
#define ZEND_HASH_APPLY_REMOVE 1<<0
#define ZEND_HASH_APPLY_STOP 1<<1
typedef struct _zend_hash_key {
char *arKey;
uint nKeyLength;
ulong h;
} zend_hash_key;
typedef int (*apply_func_t)(void *pDest TSRMLS_DC);
typedef int (*apply_func_arg_t)(void *pDest, void *argument TSRMLS_DC);
typedef int (*apply_func_args_t)(void *pDest, int num_args, va_list args, zend_hash_key *hash_key);
ZEND_API void zend_hash_graceful_destroy(HashTable *ht);
ZEND_API void zend_hash_graceful_reverse_destroy(HashTable *ht);
ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC);
ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void * TSRMLS_DC);
ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t apply_func, int, ...);
/* This function should be used with special care (in other words,
* it should usually not be used). When used with the ZEND_HASH_APPLY_STOP
* return value, it assumes things about the order of the elements in the hash.
* Also, it does not provide the same kind of reentrancy protection that
* the standard apply functions do.
*/
ZEND_API void zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC);
/* Deletes */
ZEND_API int zend_hash_del_key_or_index(HashTable *ht, char *arKey, uint nKeyLength, ulong h, int flag);
#define zend_hash_del(ht, arKey, nKeyLength) \
zend_hash_del_key_or_index(ht, arKey, nKeyLength, 0, HASH_DEL_KEY)
#define zend_hash_index_del(ht, h) \
zend_hash_del_key_or_index(ht, NULL, 0, h, HASH_DEL_INDEX)
ZEND_API ulong zend_get_hash_value(HashTable *ht, char *arKey, uint nKeyLength);
/* Data retreival */
ZEND_API int zend_hash_find(HashTable *ht, char *arKey, uint nKeyLength, void **pData);
ZEND_API int zend_hash_quick_find(HashTable *ht, char *arKey, uint nKeyLength, ulong h, void **pData);
ZEND_API int zend_hash_index_find(HashTable *ht, ulong h, void **pData);
/* Misc */
ZEND_API int zend_hash_exists(HashTable *ht, char *arKey, uint nKeyLength);
ZEND_API int zend_hash_index_exists(HashTable *ht, ulong h);
ZEND_API ulong zend_hash_next_free_element(HashTable *ht);
/* traversing */
ZEND_API int zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos);
ZEND_API int zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos);
ZEND_API int zend_hash_get_current_key_ex(HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos);
ZEND_API int zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos);
ZEND_API int zend_hash_get_current_data_ex(HashTable *ht, void **pData, HashPosition *pos);
ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos);
ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos);
#define zend_hash_move_forward(ht) \
zend_hash_move_forward_ex(ht, NULL)
#define zend_hash_move_backwards(ht) \
zend_hash_move_backwards_ex(ht, NULL)
#define zend_hash_get_current_key(ht, str_index, num_index, duplicate) \
zend_hash_get_current_key_ex(ht, str_index, NULL, num_index, duplicate, NULL)
#define zend_hash_get_current_key_type(ht) \
zend_hash_get_current_key_type_ex(ht, NULL)
#define zend_hash_get_current_data(ht, pData) \
zend_hash_get_current_data_ex(ht, pData, NULL)
#define zend_hash_internal_pointer_reset(ht) \
zend_hash_internal_pointer_reset_ex(ht, NULL)
#define zend_hash_internal_pointer_end(ht) \
zend_hash_internal_pointer_end_ex(ht, NULL)
/* Copying, merging and sorting */
ZEND_API void zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size);
ZEND_API void zend_hash_merge(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size, int overwrite);
ZEND_API void zend_hash_merge_ex(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, uint size, zend_bool (*pReplaceOrig)(void *orig, void *p_new));
ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func, compare_func_t compare_func, int renumber TSRMLS_DC);
ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, zend_bool ordered TSRMLS_DC);
ZEND_API int zend_hash_minmax(HashTable *ht, compare_func_t compar, int flag, void **pData TSRMLS_DC);
ZEND_API int zend_hash_num_elements(HashTable *ht);
ZEND_API int zend_hash_rehash(HashTable *ht);
/*
* DJBX33A (Daniel J. Bernstein, Times 33 with Addition)
*
* This is Daniel J. Bernstein's popular `times 33' hash function as
* posted by him years ago on comp.lang.c. It basically uses a function
* like ``hash(i) = hash(i-1) * 33 + str[i]''. This is one of the best
* known hash functions for strings. Because it is both computed very
* fast and distributes very well.
*
* The magic of number 33, i.e. why it works better than many other
* constants, prime or not, has never been adequately explained by
* anyone. So I try an explanation: if one experimentally tests all
* multipliers between 1 and 256 (as RSE did now) one detects that even
* numbers are not useable at all. The remaining 128 odd numbers
* (except for the number 1) work more or less all equally well. They
* all distribute in an acceptable way and this way fill a hash table
* with an average percent of approx. 86%.
*
* If one compares the Chi^2 values of the variants, the number 33 not
* even has the best value. But the number 33 and a few other equally
* good numbers like 17, 31, 63, 127 and 129 have nevertheless a great
* advantage to the remaining numbers in the large set of possible
* multipliers: their multiply operation can be replaced by a faster
* operation based on just one shift plus either a single addition
* or subtraction operation. And because a hash function has to both
* distribute good _and_ has to be very fast to compute, those few
* numbers should be preferred and seems to be the reason why Daniel J.
* Bernstein also preferred it.
*
*
* -- Ralf S. Engelschall <rse@engelschall.com>
*/
static inline ulong zend_inline_hash_func(char *arKey, uint nKeyLength)
{
register ulong hash = 5381;
/* variant with the hash unrolled eight times */
for (; nKeyLength >= 8; nKeyLength -= 8) {
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
hash = ((hash << 5) + hash) + *arKey++;
}
switch (nKeyLength) {
case 7: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
case 6: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
case 5: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
case 4: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
case 3: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
case 2: hash = ((hash << 5) + hash) + *arKey++; /* fallthrough... */
case 1: hash = ((hash << 5) + hash) + *arKey++; break;
case 0: break;
EMPTY_SWITCH_DEFAULT_CASE()
}
return hash;
}
ZEND_API ulong zend_hash_func(char *arKey, uint nKeyLength);
#if ZEND_DEBUG
/* debug */
void zend_hash_display_pListTail(HashTable *ht);
void zend_hash_display(HashTable *ht);
#endif
END_EXTERN_C()
#define ZEND_INIT_SYMTABLE(ht) \
ZEND_INIT_SYMTABLE_EX(ht, 2, 0)
#define ZEND_INIT_SYMTABLE_EX(ht, n, persistent) \
zend_hash_init(ht, n, NULL, ZVAL_PTR_DTOR, persistent)
#endif /* ZEND_HASH_H */
Loaded 100 of 2091 files, more files were not shown because too many files have changed in this diff. Show more