Compare commits

...
2118 Commits
Author SHA1 Message Date
SVN Migration 3402e4ee84 This commit was manufactured by cvs2svn to create tag 'php_4_0_3'. 2000-10-11 19:11:49 +00:00
Andi Gutmans e9887156cf Don't use 'new' symbol 2000-10-11 19:11:48 +00:00
Zeev Suraski 0b1b5e3080 NEWS update 2000-10-11 18:52:11 +00:00
Zeev Suraski dee2d85e77 Fix -a interactive mode (no idea how the previous commit got committed) 2000-10-11 18:51:52 +00:00
Zeev Suraski 48167d2b21 *** empty log message *** 2000-10-11 18:36:02 +00:00
Zeev Suraski dea72ba6a4 Added mysql_escape_String() 2000-10-11 18:27:21 +00:00
Andi Gutmans b3d949852f *** empty log message *** 2000-10-11 18:02:45 +00:00
Zeev Suraski ac0880fd8f Remove conflict 2000-10-11 18:00:18 +00:00
Andi Gutmans f3232e99c3 - Commit Kristian's PHP 3 patch to PHP 4. Kristian I hope it's also the
same here.
2000-10-11 17:48:44 +00:00
Zeev Suraski 84f81c50ba Update version 2000-10-11 17:40:40 +00:00
Zeev Suraski 57a5bbd387 Go with 4.0.3 2000-10-11 17:31:34 +00:00
Nikos Mavroyanopoulos c834cbba59 Corrected a wrong include 2000-10-11 17:05:18 +00:00
Nikos Mavroyanopoulos 98038f8228 Added support for Ovrimos SQL Server. 2000-10-11 16:54:23 +00:00
Zeev Suraski 1abd99a443 Fixed a problem that allowed users to override admin_value's and admin_flag's 2000-10-11 16:24:35 +00:00
Zeev Suraski 9aa38aad45 Add zend_hash_merge_ex(), for selective merging 2000-10-11 16:22:40 +00:00
Sascha Schumann 23a96536fa Fix the readdir_r POSIX check 2000-10-11 14:35:45 +00:00
Hartmut Holzgraefe f2ddc10685 proto typo fixes 2000-10-11 13:51:32 +00:00
Hartmut Holzgraefe 0b7745d713 added protos 2000-10-11 13:34:42 +00:00
Zeev Suraski 9a0d7a40be avoid giving the impression that they fix the security bug by upgrading... 2000-10-11 13:32:10 +00:00
Zeev Suraski 8fc4200414 Old PostgreSQL fix I forgot to commit, and NEWS consistency update 2000-10-11 13:27:21 +00:00
Hartmut Holzgraefe 332b7125de added missing protos 2000-10-11 11:40:29 +00:00
Hartmut Holzgraefe be19c812ab added some missing protos 2000-10-11 11:25:13 +00:00
Hartmut Holzgraefe 8716039dec protos fixed 2000-10-11 10:46:53 +00:00
Daniel Beulshausen 83905d9fec added sablotron extension 2000-10-11 09:18:22 +00:00
Daniel Beulshausen 814639b2fc make windows compile 2000-10-11 09:17:10 +00:00
877855a74e ChangeLog update 2000-10-11 01:09:06 +00:00
Sterling Hughes 8759dcc0ce Fix compilation, I wonder when these were omitted?? 2000-10-10 20:51:32 +00:00
Derick Rethans a03858c40b - Reserved the patch
# Please check if it works, as I'm not be able to test it
# Blame CaPS for this one :)
2000-10-10 16:58:27 +00:00
Uwe Steinmann e9ba352023 - added optional argument pdf_show_boxed() to determine if text is
actually shown or not.
2000-10-10 07:42:55 +00:00
Andrei Zmievski ab0f48d506 Fix compiler warnings. 2000-10-09 19:18:42 +00:00
Andrei Zmievski a193c9ce3e Fix a misconfiguration error and missing return statement. 2000-10-09 19:10:39 +00:00
Derick Rethans 92b3dd06e3 - Made ora_close return values like it should (thanks to james@php.net and
mathieu@gginter.net)
2000-10-09 18:45:56 +00:00
Chuck Hagenbuch 046ecab96f revert patch. Sablot won't build anymore, at least in combination with zlib. 2000-10-09 18:32:37 +00:00
Hartmut Holzgraefe 86f2ad3017 I SHALL NOT TOUCH A RELEASE CANDIDATE!
I SHALL NOT TOUCH A RELEASE CANDIDATE!
I SHALL NOT TOUCH A RELEASE CANDIDATE!
(previous patch reverted)
2000-10-09 15:24:26 +00:00
Hartmut Holzgraefe bbc37db2f3 added support for GNU-specific domainname field in uname 2000-10-09 15:12:34 +00:00
Chuck Hagenbuch 85d125c22c No comment on this, so I'm guessing it's okay. 2000-10-09 14:51:17 +00:00
Zeev Suraski 9103cae5e5 Fix bug #6447 2000-10-09 11:48:16 +00:00
97bd1845a6 ChangeLog update 2000-10-09 01:09:07 +00:00
Chuck Hagenbuch 09f89187f4 Add File_SearchReplace class from Richard Heyes. 2000-10-08 14:55:13 +00:00
Daniel Beulshausen d667e05543 more cleanup of info code 2000-10-08 11:45:18 +00:00
Daniel Beulshausen 990a86615d only beautifying 2000-10-08 10:55:09 +00:00
f2f5f5a870 ChangeLog update 2000-10-08 01:09:09 +00:00
c99f72d5ea NEWS update 2000-10-08 01:09:06 +00:00
Sascha Schumann 683ce541c8 Move static declaration to source file. 2000-10-07 20:46:30 +00:00
Thies C. Arntzen 6b5441c30f @- Fixed returning of empty LOB fields in OCI8. (Thies) 2000-10-07 09:10:54 +00:00
b88fc00775 ChangeLog update 2000-10-07 01:09:11 +00:00
Andi Gutmans 996bd9300b - Fix Bug #7061 2000-10-06 17:34:50 +00:00
Sebastian Bergmann 8520f94796 Removed obsolete entries from php.ini. 2000-10-06 05:14:46 +00:00
472c1a099b ChangeLog update 2000-10-06 01:09:16 +00:00
Andi Gutmans a39da32bf0 - News 2000-10-06 00:03:40 +00:00
Andi Gutmans 31a5160a0a - Add calendar to default Win32 build. 2000-10-06 00:03:02 +00:00
Andi Gutmans 9ece8612b8 - Add FTP extension to default Win32 build 2000-10-05 23:25:41 +00:00
Andi Gutmans 7292abefc1 - Update link 2000-10-05 22:22:26 +00:00
Andi Gutmans 4b0db9a47b - Remove old dsw 2000-10-05 22:20:38 +00:00
Rasmus Lerdorf 348079bc3f Get ext_skel working again 2000-10-05 20:48:12 +00:00
Andi Gutmans fb2c23645b - Clean-up original code and add to NEWS. 2000-10-05 18:26:54 +00:00
Brendan W. McAdams 5ab813e1b6 Updated email address to reflect my php.net address.
I am no longer associated with Plexus InterActive (my plexmedia.com address) so
the old address is no longer any good.
2000-10-05 18:20:06 +00:00
Alexander Feldman 791cda209c Fixed posix_addlimit() when adding the string "unlimited" to the result.
Now the posix_getrlimit() function does not cause core dump.
2000-10-05 18:06:55 +00:00
Andi Gutmans d84c5a2238 - Updated included_files() also for plain include()/require(). 2000-10-05 17:58:46 +00:00
Jouni Ahto f06ee6bdba - List entry types should be true globals. 2000-10-05 12:47:39 +00:00
Joey Smith 8538f86ac1 Add more missing protos and make folding style closer to mysql module. 2000-10-05 02:40:53 +00:00
3dd574bb94 ChangeLog update 2000-10-05 01:09:07 +00:00
foobar b3450c2246 Now it really checks that libxml version is >= 2.0 2000-10-05 00:51:46 +00:00
Sascha Schumann 47dfaf232f Use ZEND_DECLARE_MODULE_GLOBALS instead of equivalent #if ZTS/#else/#endif
construct.
2000-10-04 23:11:07 +00:00
Andi Gutmans 6d92ac275d - Fix fprintf 2000-10-04 19:29:28 +00:00
Sascha Schumann 5674f1be45 Ignore close tags and use unsigned char type. 2000-10-04 18:06:20 +00:00
Stig Bakken de527c2379 * changed Andi's "testdirname" into a real regression test
# Andi, could you verify that the expected output really
# is correct?
2000-10-04 07:33:21 +00:00
5bcba1fadf ChangeLog update 2000-10-04 01:09:08 +00:00
Sascha Schumann da6c94f73b typo 2000-10-03 21:56:21 +00:00
Sascha Schumann cc415d699e #include "ext/standard/php_string.h" to get php_memnstr(). 2000-10-03 18:52:46 +00:00
Andi Gutmans acc4a8ed6d - Package RC2 2000-10-03 17:08:41 +00:00
Andi Gutmans 897b701dee - Add dirname() test. Don't have time to create a real regression test 2000-10-03 16:48:48 +00:00
Andi Gutmans a1abfb7643 - Fix dirname() 2000-10-03 16:47:25 +00:00
Andi Gutmans 94bea2902b - Move #define to .h file 2000-10-03 16:36:32 +00:00
Sterling Hughes e97718461b Fix some small issues. 2000-10-03 15:51:39 +00:00
Andi Gutmans 3dab84005d - Fix V_CHDIR_FILE() 2000-10-03 15:08:37 +00:00
Andi Gutmans 18f86e7757 - Fix V_CHDIR_FILE() to only chdir() when a directory part is specified.
Use this instead of broken php_dirname() in fopen-wrappers.c
2000-10-03 15:05:50 +00:00
Andi Gutmans d37b140601 - Fix VC++ warning 2000-10-03 14:43:04 +00:00
Andi Gutmans 38423a895b - Fix request_uri to take it's value from SCRIPT_NAME if PATH_INFO is not
defined
2000-10-03 13:02:30 +00:00
a648a5c2cc ChangeLog update 2000-10-03 01:09:17 +00:00
641f19c68f NEWS update 2000-10-03 01:09:10 +00:00
Rasmus Lerdorf ff9946b264 Add --with-imap-ssl to support SSL'ized imap library in RH7 and others
@Add --with-imap-ssl to support SSL'ized imap library in RH7 and others
@(Rasmus)
2000-10-02 22:16:53 +00:00
Andi Gutmans fe550afba6 - Change zend_extension_api_no 2000-10-02 20:08:46 +00:00
Andi Gutmans bf7603cf83 - Now really fix it. 2000-10-02 18:13:53 +00:00
Andi Gutmans cca7178332 - Update NEWS 2000-10-02 17:54:12 +00:00
Andi Gutmans 28c96e89e1 - Fix bug in parse_url() 2000-10-02 17:51:30 +00:00
Rasmus Lerdorf b189759bcd Clean up the alignment of configure --help output 2000-10-02 17:36:01 +00:00
Andi Gutmans c26b4d8c9f - Aiming for thursday to release 4.0.3 2000-10-02 15:20:40 +00:00
Andi Gutmans a37b138d7c - Darn file is needed for Windows. Maybe it should be called
php_version.w32.h?
2000-10-02 15:12:47 +00:00
Andi Gutmans 79a898697d - Any reason why php_version.h is in the CVS? I'm removing it so if I'm
screwing something up scream *now* :)
2000-10-02 15:04:26 +00:00
Daniel Beulshausen 3f65e03649 forgot that a while ago... 2000-10-02 14:58:42 +00:00
Daniel Beulshausen 7482eb6adc fixed unresolved externals.
# it compiles fine now, and php loads the extension fine
# but there must be definetly something with the paths
# cause mcrypt doesn't want to load any alogrithm
2000-10-02 11:00:54 +00:00
Stig Venaas 113b132639 *** empty log message *** 2000-10-02 05:45:28 +00:00
Sterling Hughes 82070f1cdf Tiny change in copying of buffer. 2000-10-02 04:55:26 +00:00
eac689a606 ChangeLog update 2000-10-02 01:09:10 +00:00
ba90d5d529 NEWS update 2000-10-02 01:09:07 +00:00
James Moore 4dceb59561 Adding note about having to make install if you do not have apache already installed (IE there is no apache dir to copy httpd binary to) 2000-10-01 19:12:08 +00:00
Andi Gutmans 5819b6d4a6 - Remove unneeded IS_SLASH() definition. 2000-10-01 18:13:41 +00:00
Derick Rethans 58294f67d2 @- Added the shmop extension. It allows more general ways of shared memory
@  access. (thanks to Ilia Alshanestky <iliaa@home.com> and Slava Poliakov
@  <slavapl@mailandnews.com> (Derick)
2000-10-01 15:06:04 +00:00
Sterling Hughes 9ccc11ce50 It seems these entries were truncated in my commit, perhaps it was due to
the multiple NEWS entries in the same commit.
2000-10-01 11:28:16 +00:00
Andi Gutmans d4b0d7850d - Fixed conflicts. Those first two lines with the XXX need to be fixed.
I'm not sure if they were meant to be in the Changelog or NEWS file, in
  any case they are broken. Whoever, commited them can you please fix it?
  I couldn't find who commited them in the CVS commit messages
2000-10-01 10:54:11 +00:00
e597dbd0be ChangeLog update 2000-10-01 01:09:10 +00:00
53535918d0 NEWS update 2000-10-01 01:09:07 +00:00
Daniel Beulshausen f6c67cec11 added filepro & snmp 2000-09-30 17:42:10 +00:00
Daniel Beulshausen 01927063d5 move have_snmp to the dsp already 2000-09-30 17:40:52 +00:00
Daniel Beulshausen 0960b3618f snmp win extension 2000-09-30 17:39:13 +00:00
Sascha Schumann 27a819c620 . 2000-09-30 16:36:23 +00:00
Daniel Beulshausen ef1dea5e1e uses php.h define 2000-09-30 16:32:11 +00:00
Andi Gutmans ab8c6ed967 - Cleanup error output 2000-09-30 16:24:53 +00:00
Andi Gutmans 3f80efd660 - Cleanup output functions 2000-09-30 16:14:54 +00:00
Andi Gutmans 2622eba31d - Cleanup some output functions 2000-09-30 16:13:48 +00:00
Daniel Beulshausen 499507ca0e added dsp for the filepro extension 2000-09-30 15:57:45 +00:00
Daniel Beulshausen 1c4207a1f8 made win32 compile 2000-09-30 13:32:25 +00:00
Daniel Beulshausen c7c8ed155c removed zendts.lib from link options 2000-09-30 13:29:20 +00:00
Daniel Beulshausen 8ef9700499 cleanup 2000-09-30 13:25:41 +00:00
Daniel Beulshausen 53e1e33045 fix not producing valid extension 2000-09-30 13:24:16 +00:00
Sterling Hughes 85e2dc34d5 leftovers. 2000-09-30 04:50:39 +00:00
Sterling Hughes 1e6ae4496b Buncha changes, generally makes the module more stable and removes unnecessary
(as of Sablotron 0.44) workarounds.
2000-09-30 04:44:33 +00:00
Chuck Hagenbuch 7b5ba2f1fd install Benchmark/Iterate.php 2000-09-30 04:03:46 +00:00
Sterling Hughes 36dc3e1c20 @ Added the ability for CURLOPT_POSTFIELDS to accept an array of HTTP post
parameters. (Sterling)
@ Added the CURLOPT_HTTPHEADER option that allows for the posting of HTTP
headers to a remote site from cURL. (Sterling)
@ Add the curl_error() and curl_errno() functions. (Sterling)

Buncha other changes...

  - Changed if () else if () in curl_setopt to switch .. case
  - Fixed a couple crashes in certain cases.
  - Finally a decent error reporting scheme.
  - A few formatting changes.
2000-09-30 03:09:54 +00:00
974a0ddf65 ChangeLog update 2000-09-30 01:09:07 +00:00
Sascha Schumann 3f72b744e0 . 2000-09-29 21:56:03 +00:00
Sascha Schumann 11c88a0ff5 Return SUCCESS from write handler, if vallen is 0.
Submitted by: tcarroll@chc-chimes.com
PR: #6958
2000-09-29 21:44:45 +00:00
Sascha Schumann 3be464e4ec UnixWare defines shutdown to _shutdown, which causes problems later
on when using a structure member named shutdown. Since this source
file does not use the system call shutdown, it is safe to #undef it.

PR: #6008, #6362
2000-09-29 19:08:17 +00:00
Dan Kalowsky ca1b12c5a1 corrected lines for Solid 2.3 systems after some advice from users, please test... 2000-09-29 19:03:23 +00:00
Sascha Schumann 4b89b67d1c Don't try to serialize references.
Circular references would otherwise kill PHP, as the serializer
would overrun the stack.
2000-09-29 18:48:40 +00:00
Hénot David a68a224efd Added clean up code for persistent connections to avoid some problems with
autocommit.
2000-09-29 09:29:06 +00:00
foobar 5844b74e22 Fix configure (with Solaris). 2000-09-28 23:46:15 +00:00
Andi Gutmans c4fd954b8a - Another has optimization/fix like the hash_copy one from earlier on 2000-09-28 23:21:08 +00:00
Daniel Beulshausen 7fdb466d14 a little cleanup 2000-09-28 20:29:39 +00:00
Daniel Beulshausen 23b14d4cfb added tsrm dir to include path 2000-09-28 20:26:31 +00:00
Daniel Beulshausen eba5d76078 removed ignoring msvcrt(d) libary 2000-09-28 20:25:03 +00:00
Daniel Beulshausen 97089c0370 major cleanup
# but still doesn't work for me
2000-09-28 20:22:57 +00:00
foobar aee1a49287 @- Changed ext/db not to be enabled by default (Jani) 2000-09-28 20:09:23 +00:00
Frank M. Kromann e048e34e80 Having odbc_tables() and odbc_columns() match the documentation with parameters optionel from the right 2000-09-28 16:42:04 +00:00
Stanislav Malyshev 56c474cf48 Make hash_copy call copy constructor on a real copy, not on a temp 2000-09-28 15:17:50 +00:00
Chuck Hagenbuch 7a4e086d7a move the timer class to Benchmark/Timer.php, and add it to Makefile.in so it
gets installed.
2000-09-28 14:59:41 +00:00
Andi Gutmans 3e0d46d222 - Fix build of db2 2000-09-28 13:08:14 +00:00
Sebastian Bergmann 39752c2ed0 Removed profiling_information() in favour of a more generalized approach with get_profiling(). 2000-09-28 11:45:13 +00:00
Stefan Roehrich 045ee57f04 Line seems to be missing and causing configure test failures for other extensions. 2000-09-28 09:37:30 +00:00
Sebastian Bergmann 7ad1cf5785 Hopefully converted all TABs to SPACEs 2000-09-28 07:27:05 +00:00
Sebastian Bergmann ee11aabc30 Added PEAR/Timer class for timing script execution and generating profiling information. This class is based upon a concept by Allan Kent shown in his article on PHPBuilder.com 2000-09-28 07:21:21 +00:00
Andi Gutmans b4ac6f4fdd - Remove zend_gcc_inline.c 2000-09-28 06:40:57 +00:00
9b118c6bb6 ChangeLog update 2000-09-28 01:09:08 +00:00
Zeev Suraski ec4a36ec12 complementary PHP patch 2000-09-27 19:46:47 +00:00
Sascha Schumann d51fe40c2d Don't convert to BSD-style Makefiles 2000-09-27 18:59:44 +00:00
Sascha Schumann 2e4ab68995 Automatic conversion might cause interpretation of 0xff as EOF, so we store
the result in an object of type int first.

Submitted by: melchers@cis.fu-berlin.de
2000-09-27 16:08:26 +00:00
Sascha Schumann 3823ad3ec0 Recognize single quotes around cdata.
Move smart_str functions to an extra file.
2000-09-27 15:26:39 +00:00
Sascha Schumann 5bf4e7857d Clean up STR_CAT macro (it is still ugly) 2000-09-27 15:24:09 +00:00
Sascha Schumann 1cc3e6b5e6 Move php_memnstr to the header file, so that the function body is available
in all compilation units (note the static linkage).
2000-09-27 15:18:00 +00:00
Rui Hirokawa d4cd24c22d correct the problem configure script doesn't output Makefile as shared extension. 2000-09-26 14:25:02 +00:00
Daniel Beulshausen 5b6d752119 fixed tsrm dir, little cleanups 2000-09-26 13:17:21 +00:00
Sascha Schumann 1e5bf63b6a add some new and old stuff 2000-09-26 12:58:08 +00:00
Daniel Beulshausen b8dabd3fb8 removed redefines 2000-09-26 12:05:37 +00:00
Daniel Beulshausen 77e7617654 cleanup, added configurations for ssl as well 2000-09-26 11:51:31 +00:00
Daniel Beulshausen 58d8ab855f cleanup 2000-09-26 11:34:10 +00:00
Daniel Beulshausen abbfbf18bc added tsrm dir to include path, and release_ts_inline to lib path 2000-09-26 11:23:56 +00:00
Sascha Schumann a2f126c351 Build compat bridge for makes which support only the BSD .include command.
This is only required for BSD/OS, because BSDI did not merge in changes
from 4.4BSD Lite 1.
2000-09-26 11:19:38 +00:00
Sascha Schumann 99771d91ce Remove --enable-c9x-inline option. We now use a syntax which is compatible
with all compilers by providing the function with static linkage in every
compilation unit.
2000-09-26 11:10:11 +00:00
Sascha Schumann 7db874096e Unify memory allocation in smart_str functions 2000-09-26 11:00:39 +00:00
Sascha Schumann d959c647e2 Remove superflucious variable 2000-09-26 11:00:02 +00:00
Sascha Schumann cd151feb19 #include "SAPI.h" once 2000-09-26 10:58:56 +00:00
Sascha Schumann 8ef52cabcf Cleanup 2000-09-26 10:58:42 +00:00
Stanislav Malyshev 9ff7f19e32 Add URL support for GD 2000-09-26 09:08:02 +00:00
Joey Smith 12aca26b5b Add protos from sybase DB Library. 2000-09-26 07:38:47 +00:00
Zeev Suraski 309827ec1d Fix previous update - move extension startup further down the startup sequence 2000-09-25 18:10:45 +00:00
Zeev Suraski 59d3eb5f24 Move extension startup further down the startup sequence 2000-09-25 17:02:05 +00:00
663666e26a ChangeLog update 2000-09-22 01:09:07 +00:00
foobar 0f3ef58fa3 No more empty '-l' caused by this extension. 2000-09-22 00:59:16 +00:00
Stig Venaas 9a9e2e72b0 Small fix to the literal IPv6 parsing, now stops at first ] after [ 2000-09-22 00:33:55 +00:00
Stig Venaas 0776f7d3d7 Parsing of URLs with literal IPv6 addresses, see RFC 2732
@- IPv6 support in fopen (one can access IPv6 ftp/web servers) (Stig Venaas)
2000-09-22 00:12:00 +00:00
Sascha Schumann d9b4f90969 Revert controversial patch 2000-09-21 23:18:25 +00:00
71931b05f0 ChangeLog update 2000-09-21 01:09:30 +00:00
Brian Moon 09e00183bd added mysql_fetch_assoc. Acts like mysql_fetch_array used to. 2000-09-20 21:43:57 +00:00
foobar 7b6d8bfc3c This was missing.. 2000-09-20 20:44:07 +00:00
Sascha Schumann 854c0622f0 Cleanup SCANNER_DEBUG and don't NUL terminate work buffer 2000-09-20 08:59:52 +00:00
Sascha Schumann cfa22547e0 Use emalloc and friends. Since we reuse all buffers, this does not affect
the speed.

The smart_str_* functions don't NUL terminate strings anymore. We can
rely on the length of the strings completely.
2000-09-20 08:40:33 +00:00
Sascha Schumann 16d7cb88fa Remove this pseudo optimization from the previous rewrite.
Since we leave/enter the loop more often, the cost of maintaining
c_arg/c_val is higher than simply copying the tag/arg string once.
2000-09-20 08:13:45 +00:00
Sascha Schumann f27f790f29 Another 5%-10% speed increase achieved by
- making ctx->val read-only
- adding a special appendc function for appending single characters
2000-09-20 08:06:01 +00:00
Joey Smith e5bb148d4e le_link and le_plink are no longer part of the sybase_globals. 2000-09-20 04:12:03 +00:00
Sascha Schumann 7aa23d3ca3 Add support for URLs containing NAME info (for scrolling; #name). 2000-09-20 02:04:19 +00:00
Sascha Schumann 9c6414d6fa Deactivate E_NOTICE message on gc 2000-09-20 01:38:39 +00:00
Sascha Schumann cd9ab22f84 Rename prototype to currently used name. These stupid names will go away once
the transition periode ends.
2000-09-20 01:25:19 +00:00
Sascha Schumann 07e71ce1f1 s/url_scanner.h/url_scanner_ex.h/ 2000-09-20 01:22:55 +00:00
Sascha Schumann 61dc840cdd Make the new url scanner the default.
If there are any problems (especially with characters > 127), let me know.
2000-09-20 01:22:17 +00:00
Sascha Schumann a2dc8a2fa5 2nd Rewrite of the main scanner engine. This version is cleaner and faster.
It handles the following tags currently:

<FRAME .. SRC=URL ..>
<INPUT .. TYPE=IMAGE SRC=URL ..>
<A     .. HREF=URL ..>
<AREA  .. HREF=URL ..>
<IMG   .. SRC=URL ..>

Additional ones can be added within seconds.

The support for HTML forms has been significantly improved. The scanner
will now add proper Hidden Fields for the Session ID.
2000-09-20 01:15:10 +00:00
ceedeb4a7e ChangeLog update 2000-09-20 01:09:22 +00:00
foobar 83987c17ac This fix prevents adding an empty -l to LIBS 2000-09-19 23:52:24 +00:00
Daniel Beulshausen d836f5d4c0 fix unresolved externals 2000-09-19 22:05:26 +00:00
Sascha Schumann cc53ad5166 Reduce the amount of copying in the mainloop. We copy tag/arg only, if we
need to preserve them for a new loop iteration (after we leave mainloop).
Otherwise, we can just let them point to the work area.
2000-09-19 20:19:03 +00:00
Sascha Schumann dd59d14805 Revert part of last commit. I'll refine it later. 2000-09-19 19:18:41 +00:00
Andi Gutmans c54047b0b0 - Change to Z_BVAL macro 2000-09-19 18:19:02 +00:00
Andi Gutmans 813f7b58d6 - Add Z_BVAL* macros 2000-09-19 18:18:26 +00:00
Sascha Schumann a7ef1966ac Another speedup by avoiding string copies.
15% speed gain in test case (rewriting 1M URLs).
2000-09-19 18:17:28 +00:00
Sascha Schumann 95ae21ff1b Remove nextiter label 2000-09-19 18:01:29 +00:00
Sascha Schumann 7f86b7224c s/DEBUG/SCANNER_DEBUG/. "Convert" one macro to inline function to be more
consistent. Also use continue.
2000-09-19 18:00:58 +00:00
Zeev Suraski 5b0ca1585a Fix a few build bugs, still no go 2000-09-19 17:53:09 +00:00
Sascha Schumann 51498e1d3f Kill warning 2000-09-19 17:46:23 +00:00
Sascha Schumann e07e19f271 The rewrite was completely authored by Hartmut 2000-09-19 17:45:44 +00:00
Ben Mansell fd81040420 (Zeus-specific) Don't GetServerVariable() for vars which Zeus doesn't use 2000-09-19 17:43:11 +00:00
Sascha Schumann e2efb3cf06 Remove unnecessary include directive 2000-09-19 17:39:43 +00:00
Zeev Suraski c45b1c2c8b - Fix warnings
- Fix URL scanner startup crash
2000-09-19 17:37:34 +00:00
Sascha Schumann ade9a02eef Don't restore timestamp on internal_functions.c, otherwise rerunning
configure will cause config.status to be run again during make
(due to the rule in main/Makefile.in).
2000-09-19 17:36:36 +00:00
Ben Mansell 4208c264d7 Fixed bug which could truncate PHP_SELF 2000-09-19 17:34:53 +00:00
Sascha Schumann 4b3fb7b05e Add new URL scanner. This version is up to 20% faster. It will be
enabled by default once I'm sure that it works in every case.

To enable it, apply s/url_adapt_ext/url_adapt_ext_ex/ to session.c
2000-09-19 17:32:27 +00:00
Stanislav Malyshev d9d65f18e9 Fix crash on Solaris with function parameter destruction 2000-09-19 17:27:56 +00:00
Sascha Schumann 2ec043606b *** empty log message *** 2000-09-19 17:22:37 +00:00
Sascha Schumann e986a4b0a3 Fix RINIT/RSHUTDOWN functions and add url_adapt_ext() 2000-09-19 17:21:26 +00:00
cfa034a07a ChangeLog update 2000-09-19 01:09:14 +00:00
Stig Bakken f3f3df734c #tiny formatting fix 2000-09-19 00:10:46 +00:00
Daniel Beulshausen 8b23529beb let windows build with trans sid 2000-09-18 17:23:45 +00:00
Andrei Zmievski b84a1bed0a Fix changelog. 2000-09-18 15:21:59 +00:00
5cec06b1a8 ChangeLog update 2000-09-18 15:20:57 +00:00
Stanislav Malyshev 1fbc3945a2 Fix crash 2000-09-18 15:15:27 +00:00
Stanislav Malyshev 5918218872 Made get_included_files() work again, in somewhat different way 2000-09-18 13:43:20 +00:00
Stanislav Malyshev 08e1c852aa Fix decbin 2000-09-17 21:11:55 +00:00
Stanislav Malyshev 27fb7df0d2 Add empty string checks to add?slashes 2000-09-17 09:15:48 +00:00
Stanislav Malyshev 2158bbfa7f Set filename even on recursive include 2000-09-17 08:58:39 +00:00
Andi Gutmans e740042363 - Fix doc_root problem. If you need to limit under which directories the
scripts should reside use open_basedir.
2000-09-17 05:52:26 +00:00
20f43a76ba ChangeLog update 2000-09-17 01:09:06 +00:00
Andi Gutmans a45553cd57 - Add TODO 2000-09-16 19:07:50 +00:00
Zak Greant e9d946d374 Thought that I had just committed something really stupid.
On closer inspection, realized that the proto comments
for chown and chgrp were reversed. :)
I did not realize this and had only fixed chown previously
2000-09-16 05:10:03 +00:00
Zak Greant e7b0cd7ad2 trivial change
corrected mistake in proto comment for chown fold
2000-09-16 05:02:06 +00:00
c4d2d9e14f ChangeLog update 2000-09-16 01:09:08 +00:00
Chris Vandomelen 322891a2dd Changed assignment in read() to be more sane. 2000-09-15 23:44:30 +00:00
Joey Smith 618bfebfaf Remove CVS conflict. Zeev, I assume you wanted context inside the globals? 2000-09-15 20:54:42 +00:00
Sam Ruby 17332d6b21 Indicate the Sun's JDK 1.2.2 now works...and complete a sentence. 2000-09-15 18:06:18 +00:00
15adb9bb42 ChangeLog update 2000-09-15 01:09:07 +00:00
Chris Vandomelen d3ca6394eb Corrected memory leak in read(). 2000-09-14 21:48:15 +00:00
Andi Gutmans 0e874a094c - Use IS_ABSOLUTE_PATH() so that this will work correctly under Windows 2000-09-14 20:47:35 +00:00
Andi Gutmans 962c163cdf - Time to remove these two. 2000-09-14 20:43:13 +00:00
Andi Gutmans 5418b59681 - Fix NULL handling in ARRAY opcode and resolve memory leak 2000-09-14 20:30:06 +00:00
Andrei Zmievski da3c43182a Fix warnings. 2000-09-14 20:22:02 +00:00
Andrei Zmievski b111463f4c Fixed bug #6740.
I happen to think that this is php_addslashes() problem, not PCRE's.
When 0 is passed for the length of the string to php_addslashes() it
assumes that we want to process the whole string and happily runs
strlen() on it. That is bad. It should respect the length and return
an empty string if it's 0.
2000-09-14 15:44:36 +00:00
28690c3d16 ChangeLog update 2000-09-14 01:09:10 +00:00
856a7b766f NEWS update 2000-09-14 01:09:07 +00:00
Chris Vandomelen ce46ccd32b Added prototypes for socketpair() and shutdown(), and corrected an obvious
bug in socketpair (causing it to not return the created sockets to the PHP
script.)
2000-09-13 23:33:39 +00:00
Derick Rethans c7d31495bf - Added ftp_exec to the ftp functions (thanks to <jhennebicq@i-d.net>)
@ Added ftp_exec to the ftp functions (thanks to <jhennebicq@i-d.net>)
@ (Derick)
2000-09-13 22:00:31 +00:00
Andrei Zmievski a6bb6f5df3 Create module info function. 2000-09-13 20:58:19 +00:00
Hénot David 409e2e7e98 Changed the php.ini examples to match the names in the source code. 2000-09-13 16:12:50 +00:00
Andrei Zmievski 09ac5ed748 Really fix the de-allocation. 2000-09-13 15:31:50 +00:00
Andrei Zmievski 84908add07 Fixed block overrun. 2000-09-13 13:55:35 +00:00
Daniel Beulshausen 119ad66740 - a comma sneaked in before the java extension
- added the java configuration section
#can you please add the setting for *nix as well?
2000-09-13 13:27:52 +00:00
Daniel Beulshausen 0f22953a67 added note about odbc support and changed to the appropriate names of the windows extensions 2000-09-13 13:03:01 +00:00
Stig Bakken 7c53e635b2 PEAR:
* added $debuginfo parameter to PEAR_Error constructor
 * put last query in $debuginfo from DB_common::raiseError()
@PEAR: add last executed query as debug info in DB errors (Stig)
2000-09-13 11:27:59 +00:00
Stig Bakken 63aec84825 PEAR:
* show what's going on when PEAR files are installed
 * allow multiple modes (or'ed) in PEAR_Error
@PEAR: allow multiple modes in PEAR_Error (Stig)
2000-09-13 07:39:54 +00:00
Andi Gutmans 526d45e95f - The Sprit of PHP is to have descriptive function names and not
necessarily short ones. Maybe we should have some FAQ for this?
2000-09-13 04:13:36 +00:00
cce70fa84a ChangeLog update 2000-09-13 01:09:10 +00:00
3933ff52a1 NEWS update 2000-09-13 01:09:07 +00:00
Rui Hirokawa 4ffaf35556 updated some functions'name using obsolete name convention. 2000-09-12 23:19:58 +00:00
Zeev Suraski f7054b3561 Thanks, Adam 2000-09-12 20:57:21 +00:00
Zeev Suraski 5d97102f8f @- Made the Sybase CT module thread safe (Zeev) 2000-09-12 20:54:36 +00:00
Zeev Suraski 6c3d7449e1 - Made eval() and several other runtime-evaluated code portions report the
nature and location of errors more accurately (Stas)
2000-09-12 20:48:33 +00:00
Zeev Suraski 5286b3971c Make compile_string() accept a description of the code 2000-09-12 19:47:25 +00:00
Andrei Zmievski 5470222d70 Forgot to update proto. 2000-09-12 19:04:50 +00:00
Andrei Zmievski 34574352be @- Added second argument to array_reverse() that indicatese whether
@  the original array keys should be preserved. (Andrei)
2000-09-12 19:03:59 +00:00
Daniel Beckham b852f3941f reversed chomp alias addition as per Andi Gutmans' request 2000-09-12 19:00:21 +00:00
Rasmus Lerdorf 75d73aaffb # missed proto comments 2000-09-12 17:24:46 +00:00
Rasmus Lerdorf d23ad61dc3 Clean up htmlspecialchars/htmlentities inconsistencies.
@Clean up htmlspecialchars/htmlentities inconsistencies. (Rasmus)
2000-09-12 17:22:37 +00:00
Daniel Beckham 5925071957 added chomp() alias for chop() for us Perl purists. 2000-09-12 15:54:10 +00:00
Andrei Zmievski f6a24fce48 Fix notice. 2000-09-12 13:19:37 +00:00
Stanislav Malyshev 44e04f7688 Make parse_str always register globals with 1 argument and never -
with 2 arguments
2000-09-12 10:56:25 +00:00
Stanislav Malyshev e0a5a4813e A quick attempt to make parse_str($str,$arr) not register globals. 2000-09-12 10:54:45 +00:00
Derick Rethans 7b892ddf5a - Fix contribution 2000-09-12 05:53:49 +00:00
Andi Gutmans 49cb1d620b - Always use V_* macros even if logic seems to be only using fullpath. 2000-09-12 04:18:20 +00:00
Andi Gutmans 88b469203c - Fix bug #5997 2000-09-12 04:13:21 +00:00
Jouni Ahto aa312ec61c - Fix the function names here too. 2000-09-12 02:45:14 +00:00
e5b4099e43 ChangeLog update 2000-09-12 01:09:14 +00:00
49162267a3 NEWS update 2000-09-12 01:09:11 +00:00
Stig Bakken f29b5131d3 @PEAR: renamed DB_GETMODE_* to DB_FETCHMODE_*, added setFetchMode()
@      in DB_common to set the default mode, added some MySQL tests (Stig)
2000-09-12 00:27:50 +00:00
Jouni Ahto 0c1620840f - Renamed functions so that this extension finally starts to follow the
recommended naming scheme of PHP.
2000-09-11 21:28:47 +00:00
Derick Rethans 71066c12dc - Fix for bug #6673
- Added a "cut" option to wordwrap (as per feature request #6429)
@ Added an optional parameter to wordwrap that cuts a string if the length
  of a word is longer than the maximum allowed with (Derick)
2000-09-11 20:06:24 +00:00
Andi Gutmans f5cf7d7eb7 - Windows and UNIX compile fixes 2000-09-11 19:14:42 +00:00
Andi Gutmans b510fcf96e - Get rid of stuff which is already done in php.h
- More can probably be removed as the code doesn't use lots of sys calls.
2000-09-11 19:11:03 +00:00
Andi Gutmans 4b243ebeeb - Remove #if 0 code 2000-09-11 19:04:23 +00:00
Andi Gutmans 228648397e - Add config_common.h to dsp 2000-09-11 18:59:32 +00:00
Andi Gutmans 824fc6a084 - Move php_open_temporary_file() out of file.c 2000-09-11 18:56:47 +00:00
Jouni Ahto d9e180b9b7 - Use the same check for existence of a valid link as the other functions.
- Return TRUE if everything went OK.
- Fixed the number of arguments to pg_endcopy.
- Removed unused variables.
- Indentation, changed spaces to tabs.
2000-09-11 18:34:06 +00:00
Sascha Schumann f45f6d788f Kill a warning 2000-09-11 16:25:36 +00:00
Sascha Schumann 95d2ca8a46 Add proper struct sockaddr * casts and make use of memcpy/memset ('coz we
don't provide any fallbacks for bcopy/bzero).
2000-09-11 16:19:53 +00:00
Derick Rethans 68611e2d55 - Added functions pg_putline and pg_endcopy (thanks to Dirk Elmendorf
<delmendo@rackspace.com>)
@ Added functions pg_putline and pg_endcopy (Dirk Elmendorf)
2000-09-11 15:34:14 +00:00
Sascha Schumann 2e0ae6d25f Solaris-readdir_r-wants-large-buffer fix
Libc5-readdir_r workaround
2000-09-11 15:25:06 +00:00
Sascha Schumann bd616da7ca Libc5-readdir_r workaround 2000-09-11 15:24:28 +00:00
Andi Gutmans 5348058938 - Forgot to create extended info in include()/require() call 2000-09-11 15:15:57 +00:00
Andi Gutmans db1422f10e - Testing 1 2 3 2000-09-11 15:15:29 +00:00
Andi Gutmans 770098eca8 - Testing 1 2 3 2000-09-11 15:14:56 +00:00
Andrei Zmievski 6ac728e179 (PHP parse_str) ParameterPassedByReference() check is not necessary. 2000-09-11 14:54:12 +00:00
Stanislav Malyshev 1ccac6ed55 Add additional parameter to parse_str for saving result (thanks to
John Bafford <dshadow@zort.net>)
@ Added second parameter for parse_str to save result (John Bafford)
2000-09-11 14:50:26 +00:00
Andrei Zmievski 5abacc5413 (PHP pathinfo) Fixed more typos. 2000-09-11 13:54:59 +00:00
Andrei Zmievski 5ed3e24f47 (PHP pathinfo) Fixed leaks, saved some memory allocations, added
more error checking.
2000-09-11 13:52:22 +00:00
Andrei Zmievski 3ab30838d7 Fix attribution. 2000-09-11 13:18:49 +00:00
foobar 9559b88894 Fixed bug #6356. 2000-09-11 13:01:07 +00:00
Andi Gutmans 42c5a9dad7 - Should fix compile warning 2000-09-11 04:31:04 +00:00
Sterling Hughes d44d114b75 @- Fix bug with curl places extra data in the output. (medvitz@medvitz.net) 2000-09-11 03:33:14 +00:00
43e62ac46e ChangeLog update 2000-09-11 01:09:11 +00:00
7fe41da165 NEWS update 2000-09-11 01:09:08 +00:00
Sterling Hughes e9dd13754b Fix compile warning.
Fix proto.
Change PHP_MINFO output to be consistent.
2000-09-10 23:18:11 +00:00
Sterling Hughes 585e338e5e php4ize a bit.
fix a little bit of grammar.
2000-09-10 21:07:18 +00:00
Sterling Hughes 1d64caac88 Fix attribution. 2000-09-10 20:57:22 +00:00
Stanislav Malyshev e8f3025373 Make unpack("H") work like in Perl 2000-09-10 13:47:51 +00:00
Stanislav Malyshev 4237ddadb5 Fix pack() function reading string beyond the end 2000-09-10 13:34:03 +00:00
Stanislav Malyshev e7402d7a50 Allow require_once to take expressions, just like require 2000-09-10 11:24:45 +00:00
Stanislav Malyshev d443fff043 Fix double unpack bug 2000-09-10 11:03:32 +00:00
Stanislav Malyshev a05c35b802 Try once more to remove dups 2000-09-10 09:49:55 +00:00
Stanislav Malyshev bb030e6fa8 Test commit - weed out duplicate messages 2000-09-10 09:49:02 +00:00
Stig Venaas 6ccbc0d37d A tiny fix to the getaddrinfo check 2000-09-10 09:35:48 +00:00
Stig Venaas b32ff568e6 refining getaddrinfo check further, checking that struct addrinfo is there 2000-09-10 08:09:21 +00:00
Sterling Hughes 0b9a78cb1e @- Added the pathinfo() function. (Sterling) 2000-09-10 05:59:16 +00:00
Joey Smith f020f3eaa5 Fix compile warnings. 2000-09-10 05:35:03 +00:00
Joey Smith 1a092713d0 @- Updated sybase_ct module and its sybase_query to use high performance API.
(sybase_query) Use high performance API in sybase_query. Will work on the others later.
2000-09-10 05:24:30 +00:00
Joey Smith 98cb18a7d7 Use new Zend API stuff. 2000-09-10 05:13:56 +00:00
2d5316a11c ChangeLog update 2000-09-10 01:09:09 +00:00
d993b05a5b NEWS update 2000-09-10 01:09:06 +00:00
Derick Rethans eba1b6221d - Fixed missing parameter in php_atoi 2000-09-09 23:21:44 +00:00
Stig Venaas d8a4a9b1dd Added IPv6 support to php_fopen_url_wrap_ftp (EPSV and php_hostconnect()) 2000-09-09 21:29:37 +00:00
David Croft e6c77fde1d fix typo 2000-09-09 20:39:08 +00:00
Zeev Suraski 04eb5270d6 Update NEWS 2000-09-09 20:38:02 +00:00
Chuck Hagenbuch 22edfd2b3b check the range of message numbers in imap_uid. 2000-09-09 20:26:15 +00:00
Andrei Zmievski eb12dfc9e5 Fix attribution. 2000-09-09 16:24:06 +00:00
Zeev Suraski bc00916346 Update NEWS 2000-09-09 16:01:40 +00:00
Zeev Suraski 4acff8f37f Don't use unsafe sprintf() 2000-09-09 15:06:38 +00:00
Zeev Suraski b7ecaacd07 More security-related (control) patches:
- Avoid displaying errors during startup, unless display_startup_errors is enabled.
- Implemented post_size_max limit.  Defaults to 8MB.
- Implemented file_uploads on/off directive (defaults to on).
2000-09-09 15:02:15 +00:00
Derick Rethans 242139d5ac - Fix for bug #6586 2000-09-09 12:24:20 +00:00
Stig Venaas f802468c2a More restrictive getaddrinfo check, better not find it than breaking builds 2000-09-09 12:09:43 +00:00
Zeev Suraski 3115a0ccfe Fix UNIX build 2000-09-09 12:02:31 +00:00
Zeev Suraski 67f59f7b40 Check for mkstemp() 2000-09-09 11:54:04 +00:00
Zeev Suraski 6c4cb4c079 Security related updates:
- Introduce php_open_temporary_file(), in place of tempnam().  Still
  needs testing under UNIX (mkstemp()), works reliably under Windows now.
- Reimplement the mechanism for unlinking uploaded files at the end of the request
  (was it ever tested?).  Files moved with move_uploaded_file() will not be unlink()'d
  again, to avoid (albeit very unlikely) race conditions.
2000-09-09 11:41:14 +00:00
Jouni Ahto 20fe0a5685 Fixed #6627. Wrong logic... 2000-09-09 09:40:16 +00:00
Stig Bakken 971f8b0881 @Added a more configurable error reporting interface to DB.
Added a more configurable error reporting interface to DB.
Also added some more tests, and moved the DB tests to pear/DB/tests.
#Usage example that prints and exits on every error:
#$dbh = DB::connect($dsn);
#$dbh->setErrorHandling(PEAR_ERROR_DIE);
#
#Example with plain callback function:
#$dbh->setErrorHandling(PEAR_ERROR_CALLBACK, "errorHandler");
#
#Example with object callback function:
#$dbh->setErrorHandling(PEAR_ERROR_CALLBACK, array($obj, "errorHandler"));
#
#Handler functions/methods are called with the error object as a parameter.
#
2000-09-09 02:39:56 +00:00
Stig Bakken 7918735b11 * compile fix 2000-09-09 01:15:50 +00:00
8d24db9ac0 ChangeLog update 2000-09-09 01:09:05 +00:00
Stig Bakken e2cb8ec02c * don't require "POST" section to be present (TEST, FILE and EXPECT
are enough)
2000-09-09 00:37:39 +00:00
Zeev Suraski 3edf46ff73 Implement move_uploaded_file() (untested) 2000-09-08 22:31:21 +00:00
Zeev Suraski fa6bb59773 Fix build 2000-09-08 22:26:07 +00:00
Andrei Zmievski b409d2f9ea is_uploaded_file() is probably a better name. 2000-09-08 21:58:28 +00:00
Zeev Suraski 75086e3088 - Implemented is_upload_file() 2000-09-08 21:56:47 +00:00
Jon Parise 9a4c654606 Fix build after last commit. 2000-09-08 15:39:42 +00:00
Zeev Suraski 91c808ecc4 Restore the headers_only test to the centralized SAPI startup. If necessary, it can
be overriden in the activate() callback.
2000-09-08 14:43:57 +00:00
Stanislav Malyshev d10336ec0e Don't trust snprintf return 2000-09-08 13:19:51 +00:00
Stanislav Malyshev 522aec4443 Never trust snprintf return value 2000-09-08 12:52:05 +00:00
Stanislav Malyshev 6426d1c9ce Fix crash on very long error messages
Manual for snprintf says:
       If  the output was truncated, the return value is -1, oth-
       erwise it is the number of characters stored, not  includ-
       ing the terminating null.
And that's a blatant lie - in reality, libc 2.1 always returns number of
characters that _would be_ stored. I hate those libc bugs. Now we should go
and check every place we trusted snprintf return value.
2000-09-08 12:32:29 +00:00
foobar 24b2feff63 Fixed typo. Changed php3_error to php_error. 2000-09-08 12:28:00 +00:00
Stanislav Malyshev df5e0cb0a5 Fix syslog call 2000-09-08 12:07:21 +00:00
foobar 4f0842663f Changed // to /* */ comments. 2000-09-08 11:50:24 +00:00
Stanislav Malyshev 85f42b7f7a Since we don't allow parameters for syslog, we shouln't pass the
string as format
2000-09-08 11:24:08 +00:00
Andi Gutmans 9b1aed8323 - Add another ..\ to the TSRM search path 2000-09-08 08:17:17 +00:00
Andi Gutmans ed8c8539df - Add TSRM to the apache workspace include path 2000-09-08 08:15:25 +00:00
Uwe Steinmann 81fb5a7682 - last parameter of pdf_get_parameter(), pdf_get_value() optional
- fixes to make it compile with sun cc
2000-09-08 06:47:04 +00:00
b0d0a483cc ChangeLog update 2000-09-08 01:09:11 +00:00
51bc85ce5f NEWS update 2000-09-08 01:09:08 +00:00
Derick Rethans f501979c33 - The mcrypt extension also works with 2.4.4 since php 4.0.2 2000-09-07 21:28:28 +00:00
Stig Venaas f68fb8fad2 Better IPv6 checking 2000-09-07 17:56:12 +00:00
Stanislav Malyshev 662c6c6c06 Fix readdir bug in libc5
@Fix readdir bug in libc5
# If libc5 receives 0 in *result of readdir_r, it just returns error
# That's a clear bug, so this is a workaround.
2000-09-07 17:55:53 +00:00
Andrei Zmievski 0fddc30b7a - Converted __string_value() to toString(), since the former is obsolete.
- Made sure DB results are freed where necessary.
- Made DB::getAssoc() use $params if passed.
- Implemented DB::getAll().
2000-09-07 16:36:22 +00:00
Andrei Zmievski 80aa02a197 Wrap long lines. 2000-09-07 15:40:44 +00:00
Andi Gutmans e17614722d - 2000-09-07 15:38:22 +00:00
Andi Gutmans fe434a05b4 - Fix crash bug on NetBSD and OpenBSD. MAXPATHLEN didn't get defined
correctly and caused a stack overrun. This was *hard* to debug.
2000-09-07 15:31:29 +00:00
Andi Gutmans 204f4adca7 - Smarter detection of MAXPATHLEN 2000-09-07 15:20:29 +00:00
Andi Gutmans f390d7e2ab - Get rid of build warning on Windows 2000-09-07 14:11:38 +00:00
Thies C. Arntzen e5d8f20f17 make ZTS mode compile 2000-09-07 12:32:47 +00:00
Zeev Suraski 677d4b9913 Send $HTTP_POST_FILES to the right place 2000-09-07 04:12:31 +00:00
51a4b2411d ChangeLog update 2000-09-07 01:09:04 +00:00
Andi Gutmans b8a95da22a - Centralize some configuration stuff
- Use inline in my strtok_r implementation
2000-09-06 20:27:12 +00:00
Andi Gutmans 180c337885 - Save two lines 2000-09-06 18:42:06 +00:00
Andi Gutmans 6d32e7e59b - Fix header 2000-09-06 18:38:36 +00:00
Sascha Schumann 5669b2dd26 Unless overwritten, default to no optimization in debug mode. 2000-09-06 18:37:39 +00:00
Sascha Schumann 4d2515d6be 4.0.3-dev 2000-09-06 16:52:33 +00:00
Sascha Schumann 89a2e1dbdb Add TSRM include dirs 2000-09-06 15:41:40 +00:00
Sascha Schumann cb410a2f3c Convert some more "complex" expressions manually to Z_* macros. 2000-09-06 14:25:47 +00:00
Sascha Schumann 5bbddee81e Rename symbols whose first character was an underscore. 2000-09-06 14:16:12 +00:00
Sascha Schumann 4fb5088f89 Convert to Z_* macros 2000-09-06 14:13:31 +00:00
Sascha Schumann 8dad7a5cab A little script for converting source files to the Z_* macros 2000-09-06 14:12:53 +00:00
Thies C. Arntzen 573fe4346d fix #6552 & #6577
thanx to Blake Schwendiman" <blake@intechra.net>
2000-09-06 13:50:09 +00:00
Daniel Beulshausen 81daa0899e deleted unnecessary defines
i also plan to let windows build with crypt() support
2000-09-06 10:00:34 +00:00
Daniel Beulshausen 0d8812b15c added LIBGD define
# what's with the 'PHPAPI' on line 274 in gd.c, should it get exported?
# it currently breaks the windows build
2000-09-06 09:53:05 +00:00
Daniel Beulshausen 57a0fcbe00 fixed debug build and removed dsw 2000-09-06 09:37:04 +00:00
Daniel Beulshausen 3f6536d2b8 fix build 2000-09-06 09:15:31 +00:00
Daniel Beulshausen 2ffdb3cda4 little fix for the debug extension 2000-09-06 09:10:50 +00:00
Zeev Suraski bfa301dfd0 Fix ordering 2000-09-06 04:56:22 +00:00
ab111470ce ChangeLog update 2000-09-06 01:09:10 +00:00
abdc36cafd NEWS update 2000-09-06 01:09:07 +00:00
Sascha Schumann 4eb2481830 Why make it more complex than necessary?
These changes should have been committed right after Zeev made the
original change to use the PHP_INI system months ago.

Instead of working around the system, we make proper use of it now.

This includes using php_alter_ini_entry(), so that we change the values
in the php_ps_globals struct indirectly.
2000-09-06 00:50:01 +00:00
Stanislav Malyshev 795083a15c Now it should not crash, though still leaks
# I'll continue with it tomorrow
2000-09-05 22:42:45 +00:00
Zeev Suraski dd0ade23cf This fix wasn't quite right and is no longer necessary after the recent php_ini optimizations 2000-09-05 21:31:56 +00:00
Zeev Suraski 12adebbc3a - Fix leak
- Remove redundant php_ini code
2000-09-05 21:18:00 +00:00
Zeev Suraski 4647bbb71a broken logic fixed. I'm getting old 2000-09-05 20:50:41 +00:00
Stanislav Malyshev 20a6474eae Fix crash
# This is getting worse... Seems that more work is needed
2000-09-05 19:29:03 +00:00
Zeev Suraski eb32144902 - Remove track_vars - it is now always on
- Make the various $HTTP_*_VARS[] arrays be defined always,
  even if they're empty
- Fix Win32 build and warnings
2000-09-05 19:06:29 +00:00
Stanislav Malyshev 3c45b97804 Try to fix session INI variables handling
This should also fix #6538.
# This code gets really hairy, I do not like it,
# but it's the only working thing I could come with.
# If original creator reviews and cleans it up, it'd be great
2000-09-05 18:41:46 +00:00
Stanislav Malyshev 3fb701add0 More fixes fo ini_ handling functions 2000-09-05 18:33:02 +00:00
Colin Viebrock 6f59f8b078 str_repeat() should be able to handle multipliers of 0 gracefully, IMHO ...
Hope no one disagrees. :)
2000-09-05 18:25:58 +00:00
Danny Heijl 81ddcd0b2b - back out unneeded patch (danny). 2000-09-05 18:22:01 +00:00
Andi Gutmans 715774bed7 - Commiting Sterling's new multi_convert* functions 2000-09-05 17:55:57 +00:00
Stig Venaas d57e56ab4c using emalloc and efree, instead of malloc and free 2000-09-05 17:37:44 +00:00
Rasmus Lerdorf 4a22d2e832 Add EscapeShellArg() function which turns a b into 'a b' and
a'b into 'a'\''b'
@Add EscapeShellArg() function (Rasmus)
2000-09-05 16:55:32 +00:00
Stig Venaas 24633f5987 renamed hostconnect() to php_hostconnect() 2000-09-05 16:36:56 +00:00
Stig Venaas b83427db64 using the new hostconnect() for the http wrapper 2000-09-05 15:59:08 +00:00
Stig Venaas 504d44366c Added check for getaddrinfo() 2000-09-05 15:35:52 +00:00
Andrei Zmievski 0fd8685c64 Fix memory overrun. 2000-09-05 14:58:14 +00:00
Stanislav Malyshev be83e732af Fix ini_restore variable length 2000-09-05 14:23:16 +00:00
Stig Venaas 4a7f22123f hostconnect now supports IPv6 if getaddrinfo exists, and also tries to
connect to all addresses of a host before giving up. It should also be
thread safe when using getaddrinfo.
2000-09-05 13:56:11 +00:00
Stanislav Malyshev 951eb9079c Fix crash with trigger_error having no args (#6549) 2000-09-05 12:08:41 +00:00
foobar a58406c030 Missed the Zend..fixed. 2000-09-05 05:25:33 +00:00
Sterling Hughes 6d53c16775 Add:
Support for multiple processors (re-using the old one).
	Support for basic functions when a processor is in use.
2000-09-05 01:12:10 +00:00
fd3a436bd3 ChangeLog update 2000-09-05 01:09:15 +00:00
89e6de2308 NEWS update 2000-09-05 01:09:12 +00:00
Sterling Hughes 9a2726e208 This should fix the multiple-line problem. 2000-09-05 00:26:15 +00:00
Zeev Suraski efdd39207c Protect arrays as well. 2000-09-04 22:26:01 +00:00
Sterling Hughes ade2c31625 Add the session.use_trans_sid option to php.ini file. 2000-09-04 22:22:16 +00:00
Sterling Hughes 9f86ff884f @Add a php.ini option session.use_trans_sid to enable/disable trans-sid. (Sterling) 2000-09-04 22:21:10 +00:00
Zeev Suraski 5dca99232e Prevent exploit in [tmp_name] as well 2000-09-04 22:05:00 +00:00
Zeev Suraski 60825fab88 Fix the logic. Tested. 2000-09-04 21:23:41 +00:00
Danny Heijl 95d92b8be0 - remove a memory leak warning and fix a crash when tempnam()
failed for some reason (danny).
2000-09-04 21:18:07 +00:00
Zeev Suraski 388170ffa5 3rd time's a charm 2000-09-04 20:47:52 +00:00
Zeev Suraski 4396093666 Fix ISAPI compilation 2000-09-04 20:46:46 +00:00
Zeev Suraski b47050630b Fix the fix 2000-09-04 20:46:10 +00:00
Zeev Suraski 925f7854bb update NEWS 2000-09-04 20:33:33 +00:00
Zeev Suraski ed453cc9b4 Fix the file upload security problem with no side effects (untested) 2000-09-04 19:07:50 +00:00
Sascha Schumann 96128460b7 Include "php.h", otherwise we don't have access to the PHP and autoconf
macros.
2000-09-04 12:58:08 +00:00
Rasmus Lerdorf 43fefff150 Quick-fix for the file upload security alert
@Quick-fix for the file upload security alert (Rasmus)
2000-09-04 05:09:46 +00:00
Andi Gutmans 6bfed632c7 - This shouldn't have been commited.
There are quite a few modules which are using VIRTUAL_DIR. I don't think
  this should be happening.
2000-09-04 04:22:47 +00:00
Andi Gutmans 07cfd5754e - Added macros 2000-09-04 04:18:38 +00:00
Andi Gutmans 341a0d465a - Found my bug and managed to move the V_* macros to TSRM 2000-09-04 04:18:04 +00:00
Andi Gutmans 85181ac512 - Remove two tabs 2000-09-04 04:02:17 +00:00
Sterling Hughes 3ed5b2dadd Convert 2 internal functions to follow naming conventions.
Revert small patch made earlier
2000-09-04 03:49:58 +00:00
2c051912b3 ChangeLog update 2000-09-04 01:09:12 +00:00
c33ddea610 NEWS update 2000-09-04 01:09:09 +00:00
foobar b48b561b97 oops. 2000-09-03 21:14:50 +00:00
foobar e5394bbafe This makes flex and bison not to add those #line directives which
cause trouble with some compilers.
2000-09-03 21:07:10 +00:00
Sterling Hughes 6a5ee2a538 If the user wants to use more than one handle reuse the old handle. 2000-09-03 19:58:12 +00:00
Andi Gutmans e47d4fe249 - Increase buffers of output buffering to 40KB and 10KB increments which
makes more sense when web pages are typically like 10KB-20KB.
  I think it would be best to change the reallocation algorithm at least to
  redoubling when it's full instead of incrementing and possibly use
  a data structure similar to Zend/zend_static_allocator which uses memory
  blocks and not realloc().
2000-09-03 19:57:06 +00:00
Andi Gutmans 799a00f19a - Before removing php_virtual_cwd.[ch] #if 0 them to make sure nothing
is broken by this.
2000-09-03 19:44:35 +00:00
Andi Gutmans 4a17400b0a - Remove php_virtual_cwd.[ch] from Windows project 2000-09-03 19:43:09 +00:00
Stig Venaas f0962c33a1 Added timeout argument, but not used yet 2000-09-03 19:12:28 +00:00
Andi Gutmans 1109b9ab57 - More TSRM work 2000-09-03 18:58:46 +00:00
Andi Gutmans da19ff78f3 - Add new files to TSRM windows project 2000-09-03 18:49:35 +00:00
Andi Gutmans 03432bf61f - Make TSRM work on Windows. 2000-09-03 18:47:35 +00:00
Andi Gutmans 6c6471b160 - Move to virtual cwd in TSRM 2000-09-03 18:45:02 +00:00
Andi Gutmans daf926cf5b - Move virtual cwd to TSRM.
In the least this still doesn't work on Windows.
2000-09-03 18:18:13 +00:00
Derick Rethans b378ecda30 - Changed appname from "PHP 3.0" to "PHP 4.0"
Fix for #6517
2000-09-03 17:43:13 +00:00
Zeev Suraski 2183e2b0be Make gcc happy 2000-09-03 15:58:50 +00:00
Zeev Suraski 48f13455be Fix init bug 2000-09-03 15:56:54 +00:00
Sterling Hughes 7089540ec7 Just when you got something working they decide to change the API
on you :-).
2000-09-03 14:03:51 +00:00
Sterling Hughes ce71143fd0 ucd -> sablot. 2000-09-03 13:31:45 +00:00
Sterling Hughes 89b77bfb47 @-Add the Sablotron extension for XSL parsing. (Sterling)
Folks, features include:

- Output Buffering Tie-ins
- Optional Descriptive error reporting (compile option)
- String Transformations
- File Transformations
- Logging
- SAX XML Processing support (slightly different from expat, even though
Sablotron uses expat to do the parsing.)
2000-09-03 13:00:08 +00:00
Stanislav Malyshev f34430de8a Remove deprecated call-time reference 2000-09-03 09:37:20 +00:00
Stig Venaas 7f8917932f Added network.c 2000-09-03 09:34:33 +00:00
Stig Venaas ad95450fc4 To be included by code using functions in network.c 2000-09-03 09:33:14 +00:00
Stanislav Malyshev a103b94876 Fix quoted_printable_decode (also should fix #6511) 2000-09-03 09:31:25 +00:00
Stig Venaas c94933b2fa Network related functions, only for internal use by other PHP code. Tries
to hide the details of address families/protocols, and to reduce duplication
of code.
2000-09-03 09:30:41 +00:00
Stanislav Malyshev bdde2b4303 Remove deprecated call-time reference 2000-09-03 09:12:22 +00:00
Stanislav Malyshev a6aef18606 tests look for skipif.inc, so add it 2000-09-03 09:11:25 +00:00
foobar 436ca5d9bb @- Fixed a bug in checkdate() which caused < 1 years to be valid (Jani)
# Bug #6254
2000-09-03 04:09:48 +00:00
foobar a666910848 Fixed bug #6409.
# And propably numerous other..? Either I am wrong or the documentation is.
2000-09-03 03:50:59 +00:00
6ff7c9afd8 ChangeLog update 2000-09-03 01:09:09 +00:00
459052572f NEWS update 2000-09-03 01:09:06 +00:00
Andi Gutmans 299d1295b6 - Remove another TSRM->Zend dependency 2000-09-02 18:40:41 +00:00
Zeev Suraski cf8e389799 @- Added support for an optional output handler function for output
@  buffering.  This enables transparent rendering of XML through XSL,
@  transparent compression, etc. (Zeev)
2000-09-02 18:03:58 +00:00
Andi Gutmans 77b55ad07d - Revert change of defining TSRM_WIN32 in dsp 2000-09-02 16:28:50 +00:00
Andi Gutmans 570e7e9a13 - Defining TSRM_WIN32 in each and every dsp sucked. Revert this change 2000-09-02 16:28:25 +00:00
Andi Gutmans 97d509cc95 - Get rid of unused code and stop including PHP's win95nt.h 2000-09-02 16:08:24 +00:00
Andi Gutmans 5bc9f72e85 - More Windows build fixes 2000-09-02 16:02:53 +00:00
Andi Gutmans 8d7faf6c12 - Fix windows build 2000-09-02 15:56:18 +00:00
Sam Ruby 0240a571c8 Unitialized variable causes trap on Windows 2000-09-02 15:54:18 +00:00
Andi Gutmans 622b72086b - indent before someone shoots me 2000-09-02 15:26:13 +00:00
Andi Gutmans 5f3d935920 - Change TSRM_OTHER macro to TSRM_THREADS as it should be only to check
for threads
2000-09-02 15:24:18 +00:00
Andi Gutmans a8656beb34 - Make TSRM compile stand-alone again 2000-09-02 15:11:45 +00:00
Andi Gutmans d6d8b51b2c - Define TSRM_WIN32 in Windows dsp 2000-09-02 15:04:57 +00:00
Andi Gutmans 92cfa27ff0 - Use TSRM_WIN32 2000-09-02 15:03:19 +00:00
Sam Ruby f2b0015c9b Allow TSRM to be built on Windows platforms 2000-09-02 14:39:48 +00:00
99a2d5856d ChangeLog update 2000-09-02 01:09:11 +00:00
8d5fe920a5 NEWS update 2000-09-02 01:09:08 +00:00
David Eriksson 5029ae9fe2 # corrected my e-mail address 2000-09-01 22:29:04 +00:00
David Eriksson 2ad0310fd3 - Initial submission of CORBA extension for PHP: Satellite 2000-09-01 22:10:15 +00:00
Andrei Zmievski cd8af6aa44 @- Added support for user defined 'tick' callback functions. This helps
@  emulate background processing. (Andrei)
2000-09-01 16:10:17 +00:00
Sascha Schumann 607486391a Extend HTTP headers for private-caching and add a new PHP function
session_cache_limiter.

Submitted by: Jon Parise <jon@csh.rit.edu>
2000-09-01 15:56:26 +00:00
Sascha Schumann d11012e2c9 s/PATH_MAX/MAXPATHLEN/ 2000-09-01 15:47:53 +00:00
Sascha Schumann 1b5fff695d Speed up standard php encoding function and add new php_binary serializer. 2000-09-01 15:24:58 +00:00
Zeev Suraski e065c308e9 - Fix dir.c
- Begin cleanup of php_error_cb()
2000-09-01 12:06:52 +00:00
Sascha Schumann df273c9d01 Hopefully last round of fixing varargs use.
We don't need to create the log message twice, and by doing it only
once we also avoid the orig_args trap.
2000-09-01 09:54:32 +00:00
Sascha Schumann d60799bf6b Solaris/x86 insists of having a large buffer for storing the result of
readdir_r(), otherwise it will segfault.

PR: #6479
2000-09-01 09:38:19 +00:00
fd49c6ff05 ChangeLog update 2000-09-01 01:09:09 +00:00
0a004934d4 NEWS update 2000-09-01 01:09:06 +00:00
Andi Gutmans f826cc3bdd - This should fix the performance problem with Release builds 2000-08-31 23:49:36 +00:00
Andi Gutmans 3d95c23c96 - Support for always building TSRM into PHP 2000-08-31 23:44:10 +00:00
Andi Gutmans 7ee05bc6b0 - Always include TSRM in PHP build. This will enable us to move virtual
- cwd to TSRM.
- BTW, if I comile with --enable-experimental-zts not from php4/ but from
- php4/cgi (ran ../configure there) then the build doesn't work also b4
- this patch.
2000-08-31 23:43:51 +00:00
Andi Gutmans 27de50012b - Use emalloc() for opened_path now. This was a potential leak before.
- This patch has potential to break stuff but I tested it as much as I
- could. Fixes should be easy.
2000-08-31 22:24:20 +00:00
Stig Bakken 1bb90f5805 * all tests should pass now (expect for the interbase stuff that I haven't
had the chance to test)
2000-08-31 22:21:47 +00:00
Andi Gutmans 88979a11c1 *** empty log message *** 2000-08-31 19:52:34 +00:00
Andi Gutmans 1b282b3521 - Remove support for __string_value() in print $obj 2000-08-31 19:50:19 +00:00
Andi Gutmans e8e5c9d97e - Remove redundant IS_SLASH
- Reverse config.w32.h patches
- Use IS_ABSOLUTE_PATH() in one place in fopen-wrappers.c
2000-08-31 19:49:36 +00:00
Frank M. Kromann be78a31e2b Attemt to fix a lot of bug reports (5582,5614,5633,60,6181,6202) on crashes with php and mssql server. 2000-08-31 19:25:31 +00:00
Andi Gutmans a2ea62d4c9 - Change license of .c and .h files of TSRM. It's still not the complete
- text like in the PHP headers because we don't have it on the web yet but
- it should be enough to allow Sascha to touch TSRM :)
2000-08-31 19:02:14 +00:00
Stig Venaas 6e849e833f Added detection of Netscape LDAP SDK 4.1 2000-08-31 16:46:33 +00:00
Stanislav Malyshev ed3c85261b Make main.c compile again 2000-08-31 16:15:31 +00:00
Stig Venaas 6910e92132 removed some NSLDAP #if's giving more detailed error reporting 2000-08-31 16:14:35 +00:00
Zeev Suraski 0bc2bb05d4 Safer shutdown process. Continue to shut down even if we bail out in the middle of a certain part. 2000-08-31 16:02:51 +00:00
Zeev Suraski 99af3ed8ef Safer shutdown process 2000-08-31 16:01:31 +00:00
Hénot David a0084d5af9 Made ingres extension use --with--ingres instead of --with-ii.
Andi actualy changed only the help line.
2000-08-31 15:10:16 +00:00
Andrei Zmievski 4285af4244 @- Fixed problem with having $this as the XML parser object. (Andrei) 2000-08-31 14:09:59 +00:00
0deb623127 ChangeLog update 2000-08-31 01:09:06 +00:00
Daniel Beulshausen 0b33c074a6 updated with db and mhash 2000-08-30 21:14:17 +00:00
Daniel Beulshausen 74b394640d dsp for mhash
# guess i'll have to add some readme's soon...
2000-08-30 21:11:09 +00:00
Daniel Beulshausen 95ee791d97 should be easier when compiling the modules 2000-08-30 21:07:16 +00:00
Daniel Beulshausen 3522012bb2 dsp for the db(m) extension 2000-08-30 21:05:50 +00:00
Andi Gutmans ca5e0330ca - Missed a space 2000-08-30 20:32:29 +00:00
Andi Gutmans 4a2fa70fc9 - Fix bug when using safe_mode and doc_root together 2000-08-30 20:31:17 +00:00
Zeev Suraski 47f8af85f5 This is no longer relevant... 2000-08-30 18:06:17 +00:00
Zeev Suraski 0e482b1b30 - Truly fix varargs handling - the current situation was a sure-fire crash in most platforms
(the older code worked, even though it didn't compile well for some very odd reason, probably
  a compiler bug;  The new code would cause PHP to crash if both display_errors/log_errors and
  track_errors were enabled)
2000-08-30 18:02:00 +00:00
Colin Viebrock 9d62ac18ce more info for phpinfo() 2000-08-30 15:52:07 +00:00
Colin Viebrock 461f50d50d Remove single quote from HTMLSpecialChars() ... use addslashes(),
htmlentities(), strtr() instead.
2000-08-30 15:27:23 +00:00
Andrei Zmievski af71ec7915 Removing placeholder. 2000-08-30 13:09:08 +00:00
Stig Bakken 168f1aacef * added regression tests for the XML extension 2000-08-30 01:58:58 +00:00
694e04bb39 ChangeLog update 2000-08-30 01:09:10 +00:00
7e86b6b305 NEWS update 2000-08-30 01:09:07 +00:00
Andrei Zmievski ee222667e3 Start on 4.0.3-dev. [placeholder] in NEWS is for automated nightly NEWS
file update script, it'll be removed after the first entry is there.
2000-08-29 19:44:44 +00:00
Andi Gutmans 56498d48b4 - To configure with ingres should be --with-ingres and not --with-ii
- Changing it for 4.0.2 so that we don't have backwards compatibility
- problems later on
2000-08-29 18:21:07 +00:00
Andi Gutmans a15887434d - Close NEWS file for release. 2000-08-29 15:49:47 +00:00
Zeev Suraski 3a10285392 Go 4.0.2 2000-08-29 15:49:44 +00:00
Andi Gutmans e7f10a41f2 - Update Zend version. 2000-08-29 15:48:55 +00:00
Sascha Schumann e97c8ff013 Set SG(request_info).path_translated to the path of the main script. 2000-08-29 15:09:44 +00:00
Thies C. Arntzen b1d4fcb33c fix var_dump()s "}"-indention 2000-08-29 11:09:20 +00:00
Stig Bakken 1b4d8c0fb6 @Added PHP API for Zend's ticks
Added PHP API for registering tick functions.  Ticks is a per-instruction
callback in Zend that allows us to implement cooperative multitasking
within PHP.  Example:

In extension code:

php_add_tick_function(my_tick_func);

void my_tick_func(int count) {
    php_printf("[tick %d]", count);
}

In PHP code:
<?php

declare(ticks = 1) {
    print "there should be two ticks here.\n";
}

?>
2000-08-29 09:18:48 +00:00
Stig Bakken fad9bab629 * Added "test" make target so you can do "make test" in any directory.
* Added copyright header to run-test.php
2000-08-29 09:12:44 +00:00
Stig Bakken 83ba61245c All (three) current DB tests pass. 2000-08-29 09:10:44 +00:00
Sam Ruby 4a915571f5 Add reflect.java to the list of java classes to be compiled 2000-08-29 01:42:58 +00:00
9aabb6c08d ChangeLog update 2000-08-29 01:09:05 +00:00
Stig Bakken 54e911aa4f * renamed toString method to __string_value 2000-08-28 23:09:36 +00:00
Andi Gutmans 69e2d48738 - Change spaces to tab 2000-08-28 19:31:56 +00:00
Uwe Steinmann ed50eba46d - updated on new zend_api 2000-08-28 15:19:23 +00:00
Uwe Steinmann 32f6eeb3bd - fixed prototyp 2000-08-28 13:04:40 +00:00
Rasmus Lerdorf 8a36eb220e Missed a couple of center attributes 2000-08-28 09:01:54 +00:00
Stig Bakken 5b2719d9b3 I said I had not _tested_ this on windows, didn't I? :-) 2000-08-28 07:03:51 +00:00
4c06a45dc5 ChangeLog update 2000-08-28 01:09:08 +00:00
b75610a9f3 NEWS update 2000-08-28 01:09:05 +00:00
Sterling Hughes 6e10dc5456 Fix up the implementation.
# it was getting hacky already.
2000-08-27 22:53:33 +00:00
Rasmus Lerdorf fc3acfc4d5 Some minor cleanup to make W3C's tidy validator happy 2000-08-27 22:46:40 +00:00
Sascha Schumann 0b719aa462 Compute absolute path to script 2000-08-27 20:53:10 +00:00
Sascha Schumann e783d75ed3 sizeof(old_cwd) evaluated to sizeof(char *) after last commit, so old_cwd
was not set correctly.
2000-08-27 20:51:30 +00:00
Andi Gutmans ecbc0255d9 - Use do_alloca()/free_alloca() for old_cwd. This will ensure speed in
- non-ISAPI environments but in ISAPI will use emalloc()/efree() to save
- stack space. MS only gives us 10KB those bastards.
2000-08-27 19:56:22 +00:00
Andi Gutmans 827672cd78 - Reverting Sascha's patch although I don't like doing these kind of things
- but as it is Sascha who has reverted a zillion patches I don't feel that
- bad about it :)
- The patch is morally incorrect and it actually also has a crash bug which
- I won't point out because it shouldn't be there.
- SG(path_translated) should be set by the SAPI module correctly and if it
- isn't the SAPI module should be fixed and not add code to PHP. There is
- enough special case code in PHP and I would like to clean it up and not
- add more.
- Last but not least, old_cwd takes 4KB of stack space. We should probably
- malloc() it because in ISAPI we only have 10KB of stack space.
2000-08-27 19:51:50 +00:00
Stig Bakken 490de54fb5 undid the undoing of Sascha's last commit 2000-08-27 19:49:15 +00:00
Stig Bakken 315f4f5658 @PHP 3 regression testing framework re-born (Stig)
Took the old PHP 3 regression testing framework and rewrote it in PHP.
Should work on both Windows and UNIX, however I have not tested it on
Windows.  See tests/README for how to write tests.  Added the PHP 3
tests and converted most of them.
2000-08-27 19:46:06 +00:00
Stig Bakken 7eeda99a05 @Added php_uname() function (Stig)
Added php_uname() function.
2000-08-27 19:42:45 +00:00
Sascha Schumann 390d1cd1b7 Initializing new_path once is enough 2000-08-27 19:40:21 +00:00
Sascha Schumann 3f969d0b84 If a SAPI module does not pass an absolute path as primary_file to
php_execute_script(), we will now change the filename to point to
the absolute path.
2000-08-27 19:38:18 +00:00
Sascha Schumann 626fc9a773 Export IS_ABSOLUTE_PATH to the outside world. 2000-08-27 19:36:35 +00:00
Sascha Schumann ab458219ec Real fix for this rule. 2000-08-27 19:32:28 +00:00
Andi Gutmans eea3a56973 - This should be more efficient.
- Post 4.0.2 it's time to move the whole opened_path and virtual stuff
- to emalloc() and friends including some alloca() improvements where
- possible but I don't want to break anything before
2000-08-27 19:20:53 +00:00
Sascha Schumann 58abfc5426 Fix internal_functions.c rule. This should also work better with BSD make's
VPATH support.
2000-08-27 18:54:28 +00:00
Andi Gutmans 0b8ca80e57 - Remove some unused stuff. 2000-08-27 18:27:37 +00:00
Andi Gutmans 989203cf9c - Test commit msg. This is Andi and it seems to come from Zeev. 2000-08-27 18:18:34 +00:00
Zeev Suraski 1f7b735290 - Forgot to fix non-ZTS CHDIR_FILE macro 2000-08-27 18:06:12 +00:00
Andi Gutmans 39770d99ea - Try and fix problem with opening wrong file. 2000-08-27 18:01:17 +00:00
Chuck Hagenbuch 66dfb8aac1 Taking responsibility for the IMAP and MCAL extensions, so there's at least
a point of contact.
2000-08-27 17:08:06 +00:00
Chuck Hagenbuch 40404d7337 fixing the license header and updating some prototypes/variable names in the
mcal extension.
2000-08-27 17:05:53 +00:00
Sascha Schumann bf94671c3c Fix install-local-data target in VPATH mode. PEAR.php is generated and
stored in builddir.
2000-08-27 11:10:38 +00:00
Sascha Schumann c66bc46bb1 Remove obsolete note about Makefile.am 2000-08-27 10:05:23 +00:00
Sascha Schumann 35a9a1878e Fix strlcpy use at this place. 2000-08-27 09:48:03 +00:00
Sascha Schumann 2eb8688f29 Refine PHP_STRLCPY comment 2000-08-27 09:38:33 +00:00
Sascha Schumann b2cecd9d8b newtype has a length of newlen+1, 'len' refers to the length of *mimetype
here.
2000-08-27 09:32:23 +00:00
Sascha Schumann 365edaddd4 Add PHP_STRLCPY macro. This macro should be used in new code instead of
strlcpy/strlcat which are intended for fixing broken code.
2000-08-27 09:30:15 +00:00
Andi Gutmans b79db079a6 - Fix possible overflow in fsockopen(). 2000-08-27 04:14:47 +00:00
9d39ada3d0 ChangeLog update 2000-08-27 01:09:07 +00:00
Daniel Beulshausen f872296aaf updated with cybercash and dotnet 2000-08-26 20:40:11 +00:00
Daniel Beulshausen 280a79a319 added sam's readme and played with the directory's 2000-08-26 20:27:06 +00:00
Daniel Beulshausen 70ef0577a3 dsp for cybercash 2000-08-26 20:11:31 +00:00
Stig Venaas d584491ddf News about ldap.c change to allow building with OpenLDAP 2.0 2000-08-26 17:02:24 +00:00
Stig Venaas 0435c2e306 Makes it work with OpenLDAP 2.0 and reduces number of ifdefs 2000-08-26 16:20:37 +00:00
Andi Gutmans 1192fe545f - Don't define this function in non-debug mode 2000-08-26 14:45:29 +00:00
Zeev Suraski 6a8440fb70 Advise people to use error logging instead of error displaying on production web sites 2000-08-26 14:25:47 +00:00
Andi Gutmans 82d7c4294c - Also change constants. Note: PHP tries to make names intuitive.
- PHP extensions don't necessarily need to use the exact C counter part, it
- should be easy to read and not be short names such as II_*
2000-08-26 14:24:33 +00:00
Andi Gutmans 0e6db7dc82 - Asked the author a long time already to change the function names to
- something which won't take up all of the ii_* names (not verbose enough).
- I'm doing it myself now so it really has to be checked as I can't compile.
- Changed both the function names and INI parameter names.
2000-08-26 14:21:26 +00:00
Sascha Schumann 483c99ad73 mkdep.perl was replaced by mkdep.awk 2000-08-26 14:08:03 +00:00
Sam Ruby a0b745a053 Add ***EXPERIMENTAL*** Zend OO Extension support for Microsoft.Net 2000-08-26 12:53:14 +00:00
64b8ea5963 ChangeLog update 2000-08-26 01:09:10 +00:00
4f343428d1 NEWS update 2000-08-26 01:09:07 +00:00
Daniel Beulshausen 9893e9316e added the ifx (informix) extension 2000-08-25 21:46:01 +00:00
Daniel Beulshausen c9b4568f3e updated dsp to build with custom build step 2000-08-25 21:43:01 +00:00
Daniel Beulshausen 4a474b8120 lets keep it in one dsp 2000-08-25 21:42:15 +00:00
Hénot David 83d4cbf15e Copyright modification. 2000-08-25 15:56:41 +00:00
Andrei Zmievski 4df36948c8 @- Fixed a bug in preg_replace() that would truncate subject string if the
@  first argument was en empty array. (Andrei)
This fixes bug #6346, that would truncate subject string if the
first argument was en empty array.
2000-08-25 13:51:07 +00:00
Sascha Schumann c6cd319cd4 Use request_uri as PHP_SELF. decodedurl also includes the query string. 2000-08-25 10:00:48 +00:00
Sascha Schumann 5905971122 Use SAPI' register_server_variables hook.
Defines PHP_SELF now.
2000-08-25 09:59:38 +00:00
Sascha Schumann ad04898e05 php_register_variables(.. ELS_CC ..) 2000-08-25 09:15:00 +00:00
Sascha Schumann c1894bbf96 Add dummy depend: target 2000-08-25 09:04:51 +00:00
Sascha Schumann 8a1db559b6 Make proper use of SAPI's register_environment functionality. 2000-08-25 08:46:32 +00:00
c708eefcd4 ChangeLog update 2000-08-25 08:15:41 +00:00
Sascha Schumann e0818297f1 Add autoconf check for awk and use proper macro $(AWK) 2000-08-25 08:15:10 +00:00
f6e38a2e95 NEWS update 2000-08-25 08:15:05 +00:00
Sascha Schumann f1ec9035fc Add new depend rule to rules_pear.mk and install mkdep.awk. 2000-08-25 07:22:05 +00:00
Sascha Schumann 681f50bf4e Remove old .cvsignore file 2000-08-25 07:21:44 +00:00
Stig Bakken 03471b21ee @Added ob_get_length function (Stig)
Added ob_get_length() function (returns size of buffer)
2000-08-25 03:10:42 +00:00
Stig Bakken 6cbdaf985f compile fix (RedHat 6.2) 2000-08-25 03:08:37 +00:00
Dan Kalowsky b853731aaf prefer -gt to -lt, and dropped the version number to 2 instead of 3 2000-08-24 19:27:21 +00:00
Sascha Schumann b224dd96bd Don't distribute buildmk.stamp to the end user. Otherwise, buildcheck.sh
won't be run on the user's system, when they try to use buildconf.
2000-08-24 19:23:11 +00:00
Andi Gutmans fbbc249f2b - Revert patch from 9/7/2000 which seems to have broken unset().
- I hope what made me do this patch doesn't appear again.
2000-08-24 19:03:35 +00:00
Zeev Suraski 51856230d3 Update .dsp 2000-08-24 18:58:50 +00:00
Zeev Suraski c542f9a3f4 - Fix IMAP build problem
- Allow external DLLs to use warn_not_available
2000-08-24 18:49:49 +00:00
Sterling Hughes 3f97600862 Remove bogus commit that made DB::DB() an alias for DB::connect() 2000-08-24 18:18:49 +00:00
Daniel Beulshausen b2c2220971 updated dsw with fdf and gd 2000-08-24 18:18:05 +00:00
Daniel Beulshausen 04855ca11c added the gd extension - see the comment!
# configuring the gd extesion is currently a mess.
# currently its configured with jpg, wbmp, png and ttf
# maybe we should think about moving that stuff to the
# config.w32.h or to a seperate gdwin32 header
2000-08-24 18:14:42 +00:00
Daniel Beulshausen f08b599821 dsp for the win32 fdf extension 2000-08-24 17:56:38 +00:00
Daniel Beulshausen b6f0d041f9 deleted a few unnecceasary defines and added the Release_TS_Inline path to the libpath 2000-08-24 17:48:30 +00:00
Andrei Zmievski 681f6d53bb Andi's suggestion. 2000-08-24 17:09:26 +00:00
Thies C. Arntzen d33f42d53f beautify 2000-08-24 15:29:50 +00:00
Stanislav Malyshev 7248d68d49 Fix segfault on readline without parameters 2000-08-24 14:41:12 +00:00
Sascha Schumann c9dfdd38a7 More complete set of (C) notes 2000-08-24 14:29:29 +00:00
Sascha Schumann d4dd261436 Script for replacing the copyright messages 2000-08-24 14:18:36 +00:00
Sascha Schumann 9c86c11abf These scripts are not in use anymore. RIP. 2000-08-24 13:26:58 +00:00
Andrei Zmievski d7c43de3ce @- Fixed a bug that did not respect limit parameter in preg_replace() when
@  using /e modifier. (Andrei)
2000-08-24 13:23:13 +00:00
Sascha Schumann 876bac4823 builddir is used by the Unix build framework.
Rename builddir to phpbuilddir
2000-08-24 12:02:05 +00:00
Sascha Schumann 693180c1a2 Small speedup 2000-08-24 11:56:54 +00:00
Sascha Schumann a8be2cf641 Speed it up by moving the two sub's into the main loop.
Also print out dependencies immediately instead of buffering them.
2000-08-24 11:28:41 +00:00
Sascha Schumann ba4ddf32b4 Create dependencies using an awk script. Works much nicer in vpath
environments.
2000-08-24 11:02:03 +00:00
Sascha Schumann 7ca4354c22 Typo 2000-08-24 09:02:56 +00:00
Sascha Schumann 0181cae318 Some crappy makes don't handle the .PHONY target correctly.
So we force a rebuild of generated_lists
2000-08-24 05:55:19 +00:00
Sterling Hughes 4850e34bf3 -Add getCode() method to PEAR_Error
-Correct license versions + My Address for DB/* mods
-Correct ibase module
-Javadocize File_Find
-Add a optional constructor to DB that passes it on to DB::connect()
2000-08-24 01:34:16 +00:00
5875af9372 ChangeLog update 2000-08-24 01:09:16 +00:00
Andrei Zmievski 39671d8915 ext/icap is obsolete. 2000-08-23 18:31:01 +00:00
Daniel Beulshausen 9d4081896c added curl, dbase and gettext to the project 2000-08-23 16:21:58 +00:00
Daniel Beulshausen 2ec7ccdf4c win32 projectfile for the curl extension 2000-08-23 16:18:28 +00:00
Sascha Schumann 4694c419cf Add note about --with-kerberos 2000-08-23 16:15:08 +00:00
Daniel Beulshausen d076f5f2d9 win32 projectfile for the dbase extension 2000-08-23 16:11:44 +00:00
Daniel Beulshausen 8a5ceac253 win32 projectfile fot the gettext extension 2000-08-23 16:00:38 +00:00
Daniel Beulshausen c8eb56cc59 changed the output directorys from the windowsbuilds 2000-08-23 15:43:36 +00:00
Daniel Beulshausen a4cf34619d changed the intermediate output dir, to make it a bit cleaner 2000-08-23 15:32:09 +00:00
Sascha Schumann 4e7ab5ec7b phpextdist is located in $(srcdir), so don't try to install it from
$(builddir).
2000-08-23 14:07:24 +00:00
Egon Schmid 0508a61421 Changed long to int. 2000-08-23 13:47:00 +00:00
Andrei Zmievski 25b9ee5a74 formatting. 2000-08-23 13:07:51 +00:00
Sascha Schumann 96b221755a -lt is preferred over \> 2000-08-23 12:59:50 +00:00
Sascha Schumann 3cb026db73 Fix library order for -lpng -lz.
PR: #3978
2000-08-23 12:28:48 +00:00
Stanislav Malyshev b28f6eba38 Make parsedate build again
# I do not really know what's the problem with const, but I do know
# it doesn't compile when declaration and definition don't match
2000-08-23 10:54:13 +00:00
Sterling Hughes 2604cb987a A little condensing,
Add an additional check to make sure port is specified with
  AF_INET in connect().
2000-08-23 08:29:16 +00:00
Chris Vandomelen 91944be3f7 Corrected bugs in php_if_connect() to make it work properly -- needed to
run htons() on the port number provided, and needed to perform DNS lookups
properly and store the results as expected.
2000-08-23 06:41:51 +00:00
636c4e81e2 ChangeLog update 2000-08-23 01:09:19 +00:00
4ee0040869 NEWS update 2000-08-23 01:09:16 +00:00
Dan Kalowsky bee5b60a22 cleaned up the PHP/SOLID integration code, and corrected some minor assumptions on my part for the 3.5 EE systems. also removed a series of warnings on builds within the ODBC functions, and corrected header order. include of the SS_LINUX and SS_FBX defines, needed to make solid headers completely happy with the wchar.h situation.
THIS DOES NOT FIX BUG ID #4615
2000-08-22 21:27:49 +00:00
Zeev Suraski ae49ebf198 'const' is problematic in code in the final section of a Bison file (Bison defines
it away)
2000-08-22 20:59:26 +00:00
Frank M. Kromann adfbf4a92f Adding ..\..\..\bindlib_w32 to include path 2000-08-22 20:46:01 +00:00
Andrei Zmievski 1955412c3d @- Added ability for each xml_set_*_handler() function to take the
@  array($obj, 'method') syntax for the handler argument as well
@  as the normal function name. (Andrei)
2000-08-22 19:32:07 +00:00
Andrei Zmievski d89c5b231c @- Updated array_walk() to be able to accept array($obj, 'method')
@  syntax for the walk function. (Andrei)
2000-08-22 18:39:29 +00:00
Andi Gutmans 207814916d - Fix bug report by Andrei when using a method as a sort user function
- parameter in usort() like functions
2000-08-22 18:35:42 +00:00
Daniel Beulshausen 5d09d7d811 some fixes 2000-08-22 18:13:53 +00:00
Daniel Beulshausen 69b914e2dd added cpdf and domxml 2000-08-22 18:04:31 +00:00
Daniel Beulshausen 3af4ba7e01 projectfile for the domxml extension 2000-08-22 18:01:50 +00:00
Andi Gutmans 8ba5d5ef9c - Remove new libmysql files 2000-08-22 18:01:28 +00:00
Andi Gutmans 0222b7ab41 - Try and revert libmysql for 4.0.2 2000-08-22 17:59:35 +00:00
Daniel Beulshausen 60676f19a5 projectfile for the clibpdf extension 2000-08-22 17:55:17 +00:00
Daniel Beulshausen d5e9318210 added interbase, pdf and sybase_ct 2000-08-22 15:22:59 +00:00
Daniel Beulshausen 381d04e197 minor fixes 2000-08-22 15:21:01 +00:00
Frank M. Kromann 3c2ec3e5f3 Removing php_realpath.c from win32 project 2000-08-22 15:18:26 +00:00
Daniel Beulshausen b422c552d7 projectfile to build the sybase_ct extension 2000-08-22 15:15:10 +00:00
Daniel Beulshausen d22ebb3cb6 projectfile to build the pdf extension 2000-08-22 15:06:55 +00:00
Daniel Beulshausen 000773e7b9 little fixes 2000-08-22 15:03:38 +00:00
MySQL Team 3c049ddcdd Interface for 'raid' files (ont in use by PHP) 2000-08-22 12:10:53 +00:00
MySQL Team 4b1380e31c New files for MySQL 3.23.23 client library. New files are for qouting
using different character sets.
2000-08-22 09:02:46 +00:00
Sascha Schumann bac08af4cb Disable php_value and add note about reliability 2000-08-22 07:33:27 +00:00
Sascha Schumann 03049aa8ac Add note about need to fix INI system 2000-08-22 07:23:24 +00:00
Sascha Schumann 2011db174b AOLserver CVS uses PREFIX. 2000-08-22 06:11:01 +00:00
Sascha Schumann 479a96ed89 Set file_handle.opened_path to NULL 2000-08-22 05:43:31 +00:00
Sascha Schumann 732f891f3c Add note about installing PHP on web servers other than Apache. 2000-08-22 05:34:22 +00:00
Andi Gutmans d0e48e92b6 - Cleanup imagetransparent in the GD library 2000-08-22 04:11:57 +00:00
Chuck Hagenbuch 3a1b4fda7e Fix a crash in imap_fetchheader(). FT_PREFETCHTEXT isn't the only flag that
you can pass to mail_fetchheader_full().
2000-08-22 02:35:30 +00:00
10247c67fa ChangeLog update 2000-08-22 01:09:15 +00:00
Rasmus Lerdorf cb3ffd56eb Slight Darwin tweak from Fred 2000-08-22 00:27:17 +00:00
Daniel Beulshausen 7632bca956 updated project to work with readdir.h rev.1.5 from apache cvs 2000-08-21 21:21:18 +00:00
Daniel Beulshausen 542d2d623c updated the projectfile to build the aolserver and nsapi modules 2000-08-21 21:01:57 +00:00
Daniel Beulshausen 0b686eaa2a added the vs6 projectfile for the aolserver 2000-08-21 20:55:10 +00:00
Sascha Schumann e4b2f8351e thttpd/PHP verified to run IMP 2.2.0 without any hitches. 2000-08-21 20:23:02 +00:00
Torben Wilson c8443dc1b9 NEWS update for file-function segfault fix. 2000-08-21 19:45:26 +00:00
Torben Wilson 410ac013e8 Fixed segfault with fgets(), fgetcsv(), fgetss(), and fread() when
called with negative length argument.
2000-08-21 19:24:44 +00:00
Sam Ruby b43df683ee Keep servlet working... 2000-08-21 17:01:51 +00:00
Sascha Schumann 18ded31f4c Remove extra tab 2000-08-21 15:05:45 +00:00
Chuck Hagenbuch dc2362069e Make the DB classes work with call-time pass-by-reference disabled. 2000-08-21 14:37:47 +00:00
Stanislav Malyshev 4bed072f11 Fix crash in one-argument imagecolortransparent 2000-08-21 14:11:19 +00:00
Stanislav Malyshev 02feba6c05 Fix win32 build 2000-08-21 12:56:51 +00:00
Sascha Schumann 6ce467dc13 Get rid of php_global.h and the associated data types UINT4/_POINTER.
We use php_uint32 now globally.

Also removed K&R support from md5.[ch].
2000-08-21 10:10:31 +00:00
Sascha Schumann 19741cc37a The macro CONVERT_TO_WIN_FS is not used anywhere. 2000-08-21 09:57:13 +00:00
Sascha Schumann 8e0ae5d152 Cleaning up some mess 2000-08-21 09:50:53 +00:00
Uwe Steinmann 1bbea8d0eb - added function fdf_set_javascript_action() 2000-08-21 09:23:37 +00:00
Derick Rethans 82115ea039 - Reversed last 'fix'
# Sascha suggested that it must be corrected in wuth mcal
2000-08-21 07:24:55 +00:00
Andi Gutmans 99d3b9bfe8 - Remove old/deprecated version of expand_filepath 2000-08-21 04:30:25 +00:00
Rasmus Lerdorf 6d7cc46e38 Delete this suggestion as it was leading newbie users to use this file
without understanding what they were doing.  Experienced users will find
and use this file on their own.
2000-08-21 04:09:13 +00:00
Sascha Schumann 251b83076e Move thttpd_php_init() call to httpd_initialize().
Otherwise, some init stuff was done twice (like resetting the
known_post_content_types hash table which caused post requests
to fail).
2000-08-21 03:04:35 +00:00
849fe880ea ChangeLog update 2000-08-21 01:09:19 +00:00
5ab6783471 NEWS update 2000-08-21 01:09:16 +00:00
Zeev Suraski 1d0f45ea6b Fix Win32 build 2000-08-20 22:19:58 +00:00
Zeev Suraski 30ccec36b9 Fix build 2000-08-20 22:18:19 +00:00
Andi Gutmans c799959568 - Change PHP_SEPARATOR to PHP_DIR_SEPARATOR 2000-08-20 19:56:24 +00:00
Andi Gutmans 892e949196 - Checking for ".." isn't enough. include_once() could mess up even if both
- names didn't include ".." but were referenced different directories which
- were symlinked to each other.
2000-08-20 19:49:10 +00:00
Chris Vandomelen 8ef1279f2b Added another bug fix to detect for negative values being passed into the
fd_*() functions, as passing negative values would cause PHP to segfault.
2000-08-20 19:48:42 +00:00
Stig Venaas 4d6f3b40a7 Added Oracle LDAP SDK SSL support 2000-08-20 18:47:14 +00:00
Andi Gutmans 80d878279b - Sascha's patch should make PHP in VIRTUAL_DIR mode also change to the
- right directory so this shouldn't be needed anymore.
2000-08-20 18:12:16 +00:00
Derick Rethans 45e9e3a9fe - Fix for bug #6263 2000-08-20 17:39:44 +00:00
Stanislav Malyshev 5a7409ee1a Fix by-reference passing for scanf's
@- Fix by-reference parameters passing for xml_ functions and for scanf functions (Stas)
2000-08-20 16:09:06 +00:00
Stanislav Malyshev 50161c9ee8 Fix XML by-reference passing 2000-08-20 15:59:54 +00:00
Sascha Schumann b6978fe1af Fix numerus of SAPI Modules title 2000-08-20 14:43:56 +00:00
Sascha Schumann 1d68a02df3 The status quo in PHP is that the current directory is initialized
to the directory where the executing script is located.

Since this needs to be implemented for all SAPI modules anyway, this
change moves the functionality to php_execute_script() and gets rid
of the per-module code.
2000-08-20 14:29:00 +00:00
Sascha Schumann 320105bcd8 Use size_t as parameter type in the getenv member of struct sapi_module 2000-08-20 14:20:21 +00:00
Sascha Schumann 6358dad0e1 const'ify virtual-cwd API 2000-08-20 14:11:50 +00:00
Sascha Schumann c8b8a908ca Provide PHP_SEPARATOR which expands to the default directory separator
on the target platform.
2000-08-20 14:02:57 +00:00
Stanislav Malyshev ce0c4a7991 Fix fgetc (#6259) and ftell error condition returns 2000-08-20 13:24:14 +00:00
Sascha Schumann d3aeebdd1f Fix prototype of virtual_real_chdir_file. 2000-08-20 13:09:57 +00:00
Sascha Schumann c86ec8b1a9 Add virtual_real_chdir_file. Silly name for a useful function. 2000-08-20 12:49:56 +00:00
Sterling Hughes f75db1e3cb A Whole buncha stuff, mostly bug fixing...
- Make constants case-sensitive, conforming with the rest of PHP &
	the C API.
	- Make module compatible with thread safety features.
	- open_listen_sok() -> open_listen_sock()
	- Remove ext_skel comments
	- Get rid of the ZVAL macro and replace with the correct Z_*_*
	macros
	- declare all functions local to the file as static.
	- Remove empty PHP_MSHUTDOWN() function.
	- Removed confirm_sockets_compiled()
	- Changed RETVAL_* macro's to RETURN_* macro's eliminating errors
	with incorrect return values and a potential leak/crash or two.
	- functions that return void, actually return void
	- Replaced 'long' in the prototypes with 'int'
	- Fixed fd_zero() function, it gave a WRONG_PARAM_COUNT when you
	gave it the proper parameter count.
	- Changed the way an arbitrary number of parameters were accessed
	from build_iovec() to use the Zend API.
	- Added socketpair() and shutdown() functions.
2000-08-20 10:31:27 +00:00
Sascha Schumann 67daa655f6 Execute PHP scripts everywhere (not only in the top-level directory) 2000-08-20 09:37:15 +00:00
Sascha Schumann 42eeda50d4 Remove -DHAVE_CONFIG_H. It ain't used anywhere. 2000-08-20 08:58:19 +00:00
Sascha Schumann 9b9f9fa4dd _isnan seems to be supported on Win32, add an appropiate macro. 2000-08-20 08:31:34 +00:00
Sterling Hughes cd599d17c0 Bunch o' changes..
- Add the ability to return the web page into a variable
	by setting the CURLOPT_RETURNTRANSFER constant to 1.
	- Make everything conform to the naming guidelines.
	- Delete the resource id from the file_id table when a
	resource is closed.
2000-08-20 08:28:00 +00:00
Sascha Schumann 9e6e64955f If available, use fpclassify for substituting zend_finite. 2000-08-20 07:12:48 +00:00
Sascha Schumann 6aada077a0 Including math.h before using macros defined there will work better :) 2000-08-20 06:09:07 +00:00
Sascha Schumann 4ba16a1169 Make use of zend_isinf and zend_isnan. 2000-08-20 06:08:14 +00:00
Sascha Schumann 1f84023b05 Add zend_isinf and zend_isnan. 2000-08-20 06:07:42 +00:00
Sascha Schumann e325e06693 Add/update license 2000-08-20 05:39:37 +00:00
Sascha Schumann 97c698a178 Relicense build-related files under the PHP License
Move common make rules to rules_common.mk. This gets rid of the duplicated
stuff in rules.mk/rules_pear.mk.
2000-08-20 05:36:07 +00:00
Sascha Schumann fbdf502307 Remove php_realpath from build.
It was broken and should not be used in any way.
2000-08-20 05:27:59 +00:00
cf8d95b922 ChangeLog update 2000-08-20 01:09:16 +00:00
Jesus M. Castagnetto e103155d92 Added some more predefined constants 2000-08-19 22:01:37 +00:00
Frank M. Kromann 61df257c0f We only need winsock.h one time 2000-08-19 21:15:43 +00:00
Frank M. Kromann 705e6f2ec6 Adding ignore file for Win32 2000-08-19 19:08:32 +00:00
Frank M. Kromann c2357ccc26 Fixing paths to Zend and libmysql 2000-08-19 19:05:22 +00:00
Frank M. Kromann cba39bcd9c Fixing include path for compiling non thread safe php.exe 2000-08-19 18:50:03 +00:00
Andrei Zmievski 0691afb08c One more fix to C compile. 2000-08-19 18:13:52 +00:00
Stig Venaas 48b5c6d900 Note about Oracle LDAP SDK support. Should I not say experimental? 2000-08-19 18:09:21 +00:00
Zeev Suraski 595ca6b588 Fix C build 2000-08-19 18:05:15 +00:00
Zeev Suraski 7a45e3cb89 - Update NEWS
- Fix non ZTS Windows build
2000-08-19 18:01:04 +00:00
Zeev Suraski f8d74acd93 Fix eval() leakage in ZTS mode 2000-08-19 17:58:04 +00:00
Zeev Suraski c34f41b7c5 Eliminate run-time leak with eval()'s 2000-08-19 17:50:42 +00:00
Zeev Suraski 79b0a56c51 Fix build with no memory_limit 2000-08-19 16:51:30 +00:00
Zeev Suraski 3f4c8e665a Update NEWS 2000-08-19 16:40:23 +00:00
Zeev Suraski f112b68668 Avoid an endless loop situation in case of an error situation while sending headers 2000-08-19 16:38:19 +00:00
Zeev Suraski 07b5d74022 Fix memory_limit 2000-08-19 16:35:02 +00:00
Andi Gutmans c698e14635 - Beautify 2000-08-19 15:16:53 +00:00
Stig Venaas 90eac6a390 Adding Oracle LDAP SDK support 2000-08-19 14:10:11 +00:00
0959b16f87 ChangeLog update 2000-08-19 01:09:15 +00:00
Andi Gutmans 0c57780b11 - Centralize more fopen-wrappers functionality. 2000-08-18 23:03:49 +00:00
Frank M. Kromann 53a3f074ab Adding howto file for MS SQL 2000-08-18 22:24:27 +00:00
Chuck Hagenbuch c4b2498bae use estrndup and efree to hopefully avoid both munging of arguments and
leaking memory.
2000-08-18 16:02:27 +00:00
Ben Mansell ea98567404 REQUEST_URI is a handy server variable, lets pass it onto ISAPI/PHP 2000-08-18 14:18:57 +00:00
Sascha Schumann 382dd4a394 Add necessary *_FETCH() macros 2000-08-18 13:50:04 +00:00
Sterling Hughes 890ae1e244 #Its fixed this time, no really. 2000-08-18 13:43:22 +00:00
Sterling Hughes c80f2bcba2 Purely cosmetic. 2000-08-18 13:24:00 +00:00
Sterling Hughes 1b8ee02fd6 Fix #6234 2000-08-18 13:22:09 +00:00
Hartmut Holzgraefe c1ceeaf830 typo fix in array_diff error message, fixes bug #6236 2000-08-18 12:45:01 +00:00
Hartmut Holzgraefe 867160a751 minor typo fix in proto 2000-08-18 12:28:28 +00:00
d484ad1d6c ChangeLog update 2000-08-18 01:09:07 +00:00
Sam Ruby 3aad950735 Reorder call to ELS_FETCH to be after declarations 2000-08-17 19:19:54 +00:00
Andrei Zmievski 4f96d15f33 Reverting the pemalloc -> malloc change until we figure out why it breaks. 2000-08-17 19:01:28 +00:00
Andrei Zmievski ba0e3f2145 No need to have persistent allocation. 2000-08-17 16:09:00 +00:00
Chuck Hagenbuch b436f97a53 prevent mail_criteria from munging the variable passed in containing the
query - just had to add a cpystr(). if this isn't the right fix, let me
know, but it does work.
2000-08-17 16:01:14 +00:00
Ben Mansell 8751bcb8eb (send_headers) Removed code freeing http_status_line, this is performed
in sapi_send_headers()
# Looks like a similar problem in sapi/pi3web/pi3web_sapi.c as well.
# I can't test this though, so I'm being paranoid and not changing that code.
# Could someone please check this?
2000-08-17 13:40:40 +00:00
Hartmut Holzgraefe 7c7e5a9081 additional include should fix bug #6086 2000-08-17 13:17:14 +00:00
Sascha Schumann c28eac2f6c Fix dependency. PEAR.php needs to be created before it can be installed. 2000-08-17 11:02:10 +00:00
Sam Ruby d93732179b Better error reporting when dll/shared library is not able to be loaded.
Submitted by: Bård Farstad <bf@ez.no>
2000-08-17 10:14:50 +00:00
Stanislav Malyshev 1f793fd06c Fix EMPTY_STRING macros 2000-08-17 08:48:16 +00:00
Stanislav Malyshev 56ecc78983 Fix chunk_split (#6208) 2000-08-17 08:47:42 +00:00
Andi Gutmans 056401fa6c - It should be #ifdef PHP_WIN32 2000-08-17 04:05:57 +00:00
Sterling Hughes 8a8b5dacc6 ts issues. 2000-08-17 02:14:41 +00:00
80612a97eb ChangeLog update 2000-08-17 01:09:13 +00:00
Andi Gutmans c675a39b73 - The beginning of an attempt to cleanup fopen-wrappers.
- I started with trying to localize the V_FOPEN's so that we can have a
- version which won't really open the file for include_once/require_once to
- work faster and have less chance of a race which would cause a fd leak.
- What I did will, therefore, change but I want to do this step by step
- because the code is extremley messy so first of all I want to make sure
- that the isolating of the V_FOPEN code doesn't break anything.
- How about moving URL stuff out of this file?
- php_fopen_url_wrapper() copy and pasted the second part of
- php_fopen_wrapper() (incorrectly). Please try not to copy&paste code but
- centralize functionality. Need to think of a nice way to nuke one of the
- copies and have both functions use the same one.
2000-08-16 19:26:21 +00:00
Thies C. Arntzen ffad41019e compile fix 2000-08-16 15:23:05 +00:00
Hartmut Holzgraefe 41360c24b6 proto fixed 2000-08-16 12:47:09 +00:00
9148b4d16b ChangeLog update 2000-08-16 01:09:18 +00:00
9608acbe19 NEWS update 2000-08-16 01:09:15 +00:00
Jouni Ahto e85ba0901a - Return NULL type when column is NULL, now that we have it in PHP4.
- Fixed a bug in handling NULL columns, PQgetvalue() doesn't return a NULL
  pointer in this case, but a pointer to a string of 0 length...
2000-08-16 01:03:20 +00:00
Sascha Schumann 81b8e08b13 Change the C++ extension to .cpp 2000-08-15 23:16:47 +00:00
Uwe Steinmann fdd374fddb - Inserted constants for fdf flags 2000-08-15 18:46:59 +00:00
Sterling Hughes 15902929e8 @ Fix stdout support with the swf extension. (Sterling) 2000-08-15 17:30:41 +00:00
Sascha Schumann ce635bdb3c Fix varargs handling. The assignments are not necessary at all and
cause problems on various platforms, so we get rid of them.
2000-08-15 17:05:37 +00:00
Sterling Hughes 185f6e95d8 Leftovers... 2000-08-15 17:03:48 +00:00
Sterling Hughes d06c2d9eb1 Add Win32 support for cURL.
#  Switch this commit message with the last one and you get the
#  right commit order.
2000-08-15 16:54:48 +00:00
Sterling Hughes d06c4b2e3f This fixes to problems:
- Apache not having the output go to stdout in some cases.
- Output being displayed before the header is displayed.

And causes the following:

- *Slightly* slower cURL transfers.
2000-08-15 16:50:14 +00:00
Zeev Suraski c9dca64075 Sync with Zend 2000-08-15 16:46:43 +00:00
Zeev Suraski 7795aca4ca Fix warning issue (compile errors inside require()'d files were incorrectly supressed) 2000-08-15 16:44:40 +00:00
Derick Rethans 28273dfaa2 - Clearified which version of libmcrypt is enabled
# Request by Olivier Cahagne
2000-08-15 14:58:21 +00:00
Stanislav Malyshev 65bb194d65 Fix byteorder for il2long and long2ip (#6159)
@- Fix byte order for ip2long and long2ip (Stas)
2000-08-15 10:32:55 +00:00
David Croft 08c6773691 renamed ini section, quoted default host and tabulated.
# it doesn't make sense to have the tab-width set to 4 when we're
# using tabs for alignment in this case, it just makes it look screwy
# in everything but emacs
2000-08-15 09:47:35 +00:00
David Croft 05edda2222 display ini file entries on phpinfo(), unregister them on shutdown
numeric ini file entries stored as ints
removed unnecessary casts from PFPROG()
pval -> zval
2000-08-15 09:37:39 +00:00
92c21585f2 ChangeLog update 2000-08-15 01:09:15 +00:00
Brendan W. McAdams f1ed420604 # Added TODO so I can track things that need doing with this module - (brendan) 2000-08-14 21:10:25 +00:00
Zeev Suraski 636d126e16 - Fix leak and some logic 2000-08-14 20:16:27 +00:00
Sascha Schumann 78dfa91e1f Move MCLS_FETCH() inside #if HAVE_LIBMCRYPT24. Fixes build against
libmcrypt 2.2.
2000-08-14 19:38:23 +00:00
Sascha Schumann 61a058f538 Remove unnecessary precompiler macros. The failure condition is catched
at configure time.
2000-08-14 19:29:53 +00:00
Sascha Schumann 744dce0da0 Restrict INI entries when compiling against libmcrypt 2.4. 2000-08-14 19:26:09 +00:00
Andi Gutmans e46ea8864c - This patch should hopefully fix situations where a constructor uses
- the $this pointer as a reference.
2000-08-14 19:17:26 +00:00
Sascha Schumann 51fe68fd51 Fix check for libmcrypt in non-system library paths.
Fix case where neither libmcrypt 2.4.x and 2.2.x were found.
Fix library order (scope limited to static libraries)
2000-08-14 19:17:16 +00:00
Stanislav Malyshev 159abaa900 Fix print length - again
# I hope _this_ is the right fix...
2000-08-14 15:54:57 +00:00
Stanislav Malyshev 821042278e Fix another crash with long formats (#6145)
# From strncpy manual:
# In the case where the length of src is less than  that  of
# n, the remainder of dest will be padded with nulls.
2000-08-14 11:07:28 +00:00
Stanislav Malyshev 97c200b170 Fix non-numbers printing (#6142)
# Please, somebody knowing about floats - check if there's more non-numbers
# seems we should check for all of them
2000-08-14 10:02:14 +00:00
Stanislav Malyshev 9e750e64b9 Fix crash 2000-08-14 09:06:56 +00:00
David Croft 1a5d90c4ea presumably this was wrong 2000-08-14 08:37:28 +00:00
Andi Gutmans e1a3604103 - Unused results should be marked with EXT_TYPE_UNUSED and not IS_UNUSED 2000-08-14 04:10:02 +00:00
e871d2f036 ChangeLog update 2000-08-14 01:09:16 +00:00
468b509759 NEWS update 2000-08-14 01:09:13 +00:00
Sterling Hughes bba7086ac3 - Fix spacing.
- Add error constants.
2000-08-13 19:32:09 +00:00
Stanislav Malyshev 6f8f6c521c Fix opened_path init
# forgot to commit
2000-08-13 18:08:01 +00:00
Stanislav Malyshev 5090b1e8d5 Fix zend_fiel_handle handling. Should fix URL include
and various opened_path inconsistencies.
2000-08-13 18:00:50 +00:00
Sterling Hughes 93acbedce8 @ Fixed dbase_add_record. (Sterling) 2000-08-13 17:41:20 +00:00
Derick Rethans 20c007b229 - Now using the better way of using INI directives
- Changed some warning/error messages to be more clear
2000-08-13 11:53:04 +00:00
Andi Gutmans 4992408771 *** empty log message *** 2000-08-13 04:20:15 +00:00
Andi Gutmans caa3b6c9b6 - Revert foreach() change which only allowed variables and array(...) 2000-08-13 04:19:44 +00:00
4f4e553b6a ChangeLog update 2000-08-13 01:09:21 +00:00
Egon Schmid 3f158be18a Some protos corrected. 2000-08-12 20:45:48 +00:00
Danny Heijl 2acc8630fe - The destructor for a connection resource closed the current
connection if the connection had been closed before (danny)
2000-08-12 12:03:41 +00:00
85a5e901e8 ChangeLog update 2000-08-12 01:09:18 +00:00
fcb595e4d2 NEWS update 2000-08-12 01:09:15 +00:00
Derick Rethans 04720d3b3b - Fixed warning under VC6 2000-08-11 23:24:54 +00:00
Derick Rethans bab5db79f6 @ Added support for libmcrypt 2.4.4 2000-08-11 18:45:17 +00:00
David Croft 45ab04fa40 Added news item for Andi's strncasecmp commit
# Zend commits prefixed by @ don't seem to be linked to the PHP news file
2000-08-11 18:23:31 +00:00
Danny Heijl b78c48f7bc - restore ifx_close() to PHP3 behaviour for non-persistent connections
by silently reconnecting the existing link if closed earlier (danny)
2000-08-11 16:37:47 +00:00
Zeev Suraski a120608807 Make COM work in a multithreaded environment 2000-08-11 13:30:37 +00:00
Hartmut Holzgraefe 66f9f8bf38 return type in proto for OCIError fixed 2000-08-11 13:13:11 +00:00
Adam Dickmeiss 17797f951c Added support for username, group and password for function yaz_connect. 2000-08-11 12:11:51 +00:00
Andi Gutmans 25c8009825 *** empty log message *** 2000-08-11 09:58:04 +00:00
Andi Gutmans 2336c0148e - Only support variables and array(...) in foreach loops 2000-08-11 09:56:28 +00:00
490de4de57 ChangeLog update 2000-08-11 01:09:16 +00:00
3000566259 NEWS update 2000-08-11 01:09:13 +00:00
Andi Gutmans b47bb87004 - The commit messages didn't seem to update the news file 2000-08-10 22:16:15 +00:00
Andi Gutmans e5015ed581 @ Fix problem with nested foreach()'s (Andi, Zend Engine) 2000-08-10 22:08:02 +00:00
foobar d6f2f2c396 @- Fixed FTP module to accept multiline server replies (Jani)
# This fixed bug #4546.
2000-08-10 21:13:08 +00:00
Brendan W. McAdams b283eec42a - changed all pvals to zvals (like they were before)
# Turns out zval *is* the proper call for a variable.
2000-08-10 21:03:02 +00:00
Vlad Krupin 23df217463 Added capability to create and manipulate a config object that can be
used later to create an instance of the spellchecker based on that
config.
2000-08-10 20:57:40 +00:00
Andi Gutmans a1adc81f30 @ Fix switch which only has a default rule (Andi, Zend Engine)
@ Change require_once() to use the same file list as include_once().
@ Patch includes making require() & include() to behave the same when it
@ comes to scoping. require() is now an include() which isn't allowed to fail.
@ require() caused too many memory reallocations which ended up being quite
@ slow for sites that required lots of files. (Andi & Zeev, Zend Engine)
- Fix switch() which only has default rule (bug #5879,
2000-08-10 20:42:57 +00:00
Brendan W. McAdams 25240885a5 - Homogonized CCVS with the rest of the modules in the ext/ tree:
- All ZEND_* macro calls changed to PHP_* macros.
    - All zval's converted to pval's.
# Per discussion with Hartmut Holzgraefe on [PHP-DEV] list.
2000-08-10 20:23:33 +00:00
Andi Gutmans 26300a8ebf - Move compat macros to php3_compat.h 2000-08-10 19:38:29 +00:00
Sascha Schumann 34bee836b1 Remove bogus "by" 2000-08-10 19:27:30 +00:00
Joey Smith a2cb77aa82 Cut and paste error? :) 2000-08-10 17:38:14 +00:00
Andrei Zmievski 5779f26561 Formatting. 2000-08-10 13:22:07 +00:00
Hartmut Holzgraefe e67defffbe last patch reverted, i didn't get the whole picture here 2000-08-10 08:31:40 +00:00
Hartmut Holzgraefe e59bcdbfb8 duplicate alias entry removed 2000-08-10 08:13:15 +00:00
David Croft a7e8750446 #fixed typos 2000-08-10 07:00:12 +00:00
Sam Ruby 5c8fca1757 Correct bug in headers only logic. 2000-08-10 06:09:05 +00:00
5e8db7f495 ChangeLog update 2000-08-10 01:09:21 +00:00
0fac6f738f NEWS update 2000-08-10 01:09:13 +00:00
Zeev Suraski 9c555fe96a Update NEWS, including some stuff that somehow got forgotten on my home machine 2000-08-09 20:50:54 +00:00
Zeev Suraski 7dcf456dd6 that too 2000-08-09 19:25:01 +00:00
Zeev Suraski a6c6f6a5c3 Update to be consistent with the new Zend API 2000-08-09 19:23:53 +00:00
Zeev Suraski 0855453e83 Update API number 2000-08-09 19:23:38 +00:00
Zeev Suraski c06692e9ec The patch we promised - redesigned the compilation/execution API:
Advantages:
- Smaller memory footprint for the op arrays
- Slightly faster compilation times (due to saved erealloc() calls and faster zend_op
  initialization)
- include_once() & require_once() share the same file list
- Consistency between include() and require() - this mostly means that return()
  works inside require()'d files just as it does in include() files (it used to
  be meaningless in require()'d files, most of the time (see below))
- Made require() consistent with itself.  Before, if the argument was not a constant
  string, require() took the include() behavior (with return()).
- Removed lots of duplicate code.
Bottom line - require() and include() are very similar now;  require() is simply an include()
which isn't allowed to fail.  Due to the erealloc() calls for large op arrays, require()
didn't end up being any faster than include() in the Zend engine.
2000-08-09 19:22:35 +00:00
Brendan W. McAdams 609577d882 Updated Supported CCVS Versions based on Conversation with Doug. All versions of CCVS 3.0 and greater should work without problems.
@ The CCVS module is now stable and compiling. It compiles as a CGI and into apache cleanly without warnings. (Brendan W. McAdams)
2000-08-09 18:38:04 +00:00
Thies C. Arntzen f0203f6288 @- Fix mSQL_close(). (nick@loman.net)
# i haven't tried it (don't have msql) , but this patch seems really needed!
2000-08-09 17:56:42 +00:00
Brendan W. McAdams 01a83f8cb0 Added Dougs name to the PHPINFO "Support By" call.
Added a "Release Supports CCVS Versions..." line in PHPINFO
2000-08-09 17:53:55 +00:00
Thies C. Arntzen 57faf76605 fix #6061 2000-08-09 17:52:30 +00:00
Brendan W. McAdams 9a2d9b993d Looks like I found my problem.
I was predeclaring my functions in ccvs.h (stupid of me), so PHP was seeing the predec from internal_functions.h, the predec again, and then the actual functions and barfing.  Compiles into apache now.  Will test further.
2000-08-09 17:43:04 +00:00
Brendan W. McAdams 1030d7a7d8 Tracked the stray -libccvs call to a bad config directive in the config.m4 file. 2000-08-09 16:45:49 +00:00
Zeev Suraski 4d692049b2 Fix a couple of bugs in the ISAPI module:
- I think NTLM should work now
- Fix the DOCUMENT_ROOT code
2000-08-09 16:45:40 +00:00
Brendan W. McAdams 14e86fcf0a Trying to resolve the build issue. This module is currently broken. PHP compiles it fine but I'm having linking issues when it gets to the apache level.
Any help would be greatly appreciated.
2000-08-09 14:31:12 +00:00
Brendan W. McAdams 048717c09c Looks like my editor barfed sometime today and saved the source files as
PC Format. Fixed that.  Seeing some compiletime issues that I'm working on resolving.
2000-08-09 01:18:28 +00:00
7999f6ddf6 ChangeLog update 2000-08-09 01:09:09 +00:00
Brendan W. McAdams 8a4f3d3973 Had some issues with apache build. PHP Was passing a -llibccvs inadvertantly. Seemed to be an issue with the autoconf file. Fixed. I'll get back to cleaning up that AutoConf later. 2000-08-08 23:15:56 +00:00
Brendan W. McAdams f3b757eead First commit of these files. We have had them working for about 3 weeks, very well, as a DL. The straight compile-into PHP support should work fine; I've got it compiling on my Slackware 7 i386 box with Apache 1.3.12 + mod_ssl. Documentation, module info and example code are forthcoming. 2000-08-08 22:36:56 +00:00
foobar 472c727186 Added missing 'subject'-key in envelope.
# I'm starting to think imap_mail_compose() should be rewritten from scratch..
2000-08-08 21:16:09 +00:00
Egon Schmid 3bc8b9dc9c Beautified some protos. 2000-08-08 20:28:19 +00:00
Vlad Krupin 831e15d0d1 Added instructions on how to use personalized dictionaries 2000-08-08 19:23:35 +00:00
Vlad Krupin a2cdb7726f added support for personalized dictionaries.
new functions: pspell_new_personal(), pspell_save_wordlist().

pspell_save_wordlist() needs to be changed to return error-codes
once pspell library gets fixed
2000-08-08 18:46:41 +00:00
Stanislav Malyshev 40fd4fb21b Standartize full path handling - everything now goes via expand_filepath
Add errno to open_basedir checking function
2000-08-08 16:36:25 +00:00
Stanislav Malyshev b5f74d44e9 fix return code for virtual_file_ex 2000-08-08 16:30:42 +00:00
Stanislav Malyshev ea3a3a1a2d Fix possible crash when stat information is not available 2000-08-08 15:50:28 +00:00
Sascha Schumann bfcd9c4f28 Remove manually committed change description 2000-08-08 11:23:28 +00:00
Martin Kraemer 46b8f7e38b urlencode() fix (Bug #6016) 2000-08-08 09:13:27 +00:00
Martin Kraemer 8bf2339870 Bug #6016: Fix EBCDIC logic error in urlencode()
(a strchr() test was used backwards)
Reported by: dumbunny@tivo.com
2000-08-08 09:06:51 +00:00
e31a7fcdfc ChangeLog update 2000-08-08 01:09:18 +00:00
6f7eaa5531 NEWS update 2000-08-08 01:09:15 +00:00
Danny Heijl d8790d9e2c - fix for # 5980 (using ifx_connect/ifx_close multiple times for the
same database connection) (danny)
2000-08-07 20:45:57 +00:00
Sascha Schumann 5d02c74b6b Add support for <binary> WDDX element. 2000-08-07 17:25:57 +00:00
Sascha Schumann d9960867fd . 2000-08-07 13:57:49 +00:00
Sascha Schumann 5c62b32823 Remove some crud from diff output (Only in..). 2000-08-07 13:56:52 +00:00
Sascha Schumann 4b8823d427 Fix building thttpd SAPI module.
This works now with thttpd 2.19.

Thanks to Andrzej Borsuk <andrzej.borsuk@alfaelektro.com.pl> for
pointing me into the right direction.
2000-08-07 13:54:35 +00:00
Sascha Schumann 55801d5330 Set abs_srcdir before SAPI modules' configure stuff is run. 2000-08-07 13:24:06 +00:00
Uwe Steinmann 54e168ce42 - updated those entries I feel responsible for 2000-08-07 13:11:23 +00:00
Thies C. Arntzen e05fbd00c2 fixed binary mode for Win32 2000-08-07 12:01:52 +00:00
Uwe Steinmann edcbd1862e - got rid of php_ prefix in Modulename and some structs 2000-08-07 11:55:48 +00:00
Zeev Suraski 83341c39da Add DOCUMENT_ROOT 2000-08-07 11:51:21 +00:00
Uwe Steinmann 6de4e2e382 - made compilation as dynamic lib possible 2000-08-07 11:40:54 +00:00
Uwe Steinmann b5d39b4820 - added functions fdf_set_flags(), fdf_set_opt(), fdf_set_submit_form_action()
as proposed by <gweisz@l-speed.com>
2000-08-07 11:37:42 +00:00
Thies C. Arntzen 8289c85438 @- Fixed CLOB handling in OCI8 driver when using variable-width
@  character sets. (Thies)
2000-08-07 11:34:48 +00:00
Rui Hirokawa 635532053e fixed for openldap 2.0beta. 2000-08-07 03:18:00 +00:00
6ebea7d35e ChangeLog update 2000-08-07 01:09:12 +00:00
8bd88acada NEWS update 2000-08-07 01:09:09 +00:00
Rasmus Lerdorf 1fd0a0eeed Add 4th optional parameter to sybase_[p]connect to specify the charset
for the connection
@- Add 4th optional parameter to sybase_[p]connect to specify the charset
@  for the connection (alf@alpha.ulatina.ac.cr)
2000-08-07 00:15:39 +00:00
Zeev Suraski 97893e6a19 Reverse this patch - it really shouldn't be in the error handler, but in the place
that generates the error...
2000-08-06 21:42:54 +00:00
Zeev Suraski 97cb10bc9e Fix warning 2000-08-06 21:42:10 +00:00
Zeev Suraski f59cbb9ed1 Fix & optimize 2000-08-06 21:38:41 +00:00
Egon Schmid c6569921d7 Added a parameter type. 2000-08-06 19:53:56 +00:00
Egon Schmid 05684f2d86 Fixed some protos. 2000-08-06 18:56:14 +00:00
Sascha Schumann a8a1bbe921 Including utime.h once is enough. 2000-08-06 18:14:46 +00:00
Egon Schmid d9cd56ea76 Description from the ChangeLog. Thies, is it correct? 2000-08-06 17:56:56 +00:00
Stanislav Malyshev d9ab6333ea Add utime include 2000-08-06 17:53:04 +00:00
Stanislav Malyshev 62043b9a7c Add Joey Smith's sendmail_port patch 2000-08-06 17:49:41 +00:00
Sascha Schumann 23ebf6e916 Include <utime.h> in php_virtual_cwd.h. 2000-08-06 17:42:54 +00:00
Stanislav Malyshev 57c54a093b Replace min() - not everyone has it 2000-08-06 16:34:37 +00:00
Stanislav Malyshev 10f300094b fix stupid bug 2000-08-06 16:32:22 +00:00
Andi Gutmans c756ae2d9f Virtualize realpath, chmod, chown and utime
This should fix #5935 and #5904
@- Virtualize realpath, chmod, chown and utime (Stas)
2000-08-06 16:22:07 +00:00
Egon Schmid 868e3b1db8 Changed some protos. 2000-08-06 14:36:10 +00:00
Hartmut Holzgraefe 4e5946adf7 removed a BAD IDEA (tm) that filtered out backslashes 2000-08-06 11:32:32 +00:00
Rasmus Lerdorf da1b7847b3 Support content-encoding headers in file upload mime parts
@- Support content-encoding headers in file upload MIME parts
@  (Ragnar Kjørstad)
2000-08-06 06:40:28 +00:00
Rasmus Lerdorf a8f0c5a316 decouple this check just in case we hit a weird system that has one
and not the other.  And we specifically check for this, so we should
use the information.
2000-08-06 04:55:17 +00:00
Rasmus Lerdorf 640501ab19 Remove mysql dll 2000-08-06 02:06:43 +00:00
18cbccdd7c ChangeLog update 2000-08-06 01:09:09 +00:00
be9b8f0613 NEWS update 2000-08-06 01:09:06 +00:00
Andi Gutmans 50ddf9e3d5 - Use some more SEPARATE_ZVAL macros instead of replicated code. 2000-08-05 13:54:07 +00:00
Danny Heijl d140a799f7 - Fix INT8 returning garbage because ifx_int8toasc does not null_terminate
the returned string. (danny)
2000-08-05 13:14:44 +00:00
Stanislav Malyshev db0872123b Fix crash on broken setups (#5979) 2000-08-05 11:28:32 +00:00
Stanislav Malyshev 8b9ecac2dc Fix memory leak 2000-08-05 11:06:00 +00:00
Thies C. Arntzen 53defde3e2 @- Fixed warning when shutting down OCINLogon() connections. (Thies) 2000-08-05 10:45:55 +00:00
Stanislav Malyshev 682c58c26f Open session files in binary mode (fix #5953)
@- Fixed \n in session variables bug on Win32 (Stas)
2000-08-05 10:25:00 +00:00
Thies C. Arntzen 34dfe582ff @- OCIError() would sometimes not report failed connections. (Thies) 2000-08-05 10:07:39 +00:00
Hénot David 282288efe4 Fix for a bug with persistent connections. 2000-08-05 03:22:16 +00:00
b3df7086d7 ChangeLog update 2000-08-05 01:09:13 +00:00
Hartmut Holzgraefe b04a02660e changed default sendmail flags from '-t' to '-t -i' (bugid#5374) 2000-08-04 22:42:11 +00:00
Sam Ruby 73db4d5cca Fix for bug 5911 - ANSI C violation: lvalues are not assignable 2000-08-04 18:55:49 +00:00
Sam Ruby 3da910ae24 Restore the ability to clean compile in non-multithreaded environments 2000-08-04 18:39:47 +00:00
Thies C. Arntzen 7b388964ee fixed ZTS compile 2000-08-04 18:14:38 +00:00
foobar 5356c100ee - This should fix bug #5964
# Could someone please check this out..it works as intented for me at least.
# But I don't have any Windoze machines available to test this there.
2000-08-04 17:18:54 +00:00
Rasmus Lerdorf 9021105c89 Fix typo 2000-08-04 16:48:42 +00:00
Hartmut Holzgraefe b19fb9b6bd #ooops 2000-08-04 15:23:19 +00:00
Egon Schmid 48ef7e52a2 Sorry only the *_replaceparameters are wrong. 2000-08-04 11:57:21 +00:00
Egon Schmid 90b4600fe8 Wrong parameters found by Martin Buchholz @ six.de. 2000-08-04 11:50:16 +00:00
Hartmut Holzgraefe 920f6fd1fc ooops - theese new parameters are optional 2000-08-04 09:24:36 +00:00
Hartmut Holzgraefe 6a93f284bc added new second parameter to osrt functions in the protos 2000-08-04 09:19:38 +00:00
Hartmut Holzgraefe 562e83bc6d no longer needed 2000-08-04 09:03:54 +00:00
Hartmut Holzgraefe aadc551965 do not rewrite absolute urls
(should be more clever and identify itself though)
2000-08-04 09:03:20 +00:00
Andi Gutmans fcdc025d11 - Beautify code. Try and use more macros for splitting instead of
- replicating the code everywhere.
2000-08-04 08:11:54 +00:00
Joey Smith de486f7897 Geez, you'd think English wasn' tmy native tongue. 2000-08-04 04:49:45 +00:00
Joey Smith 62557742bd Outdated URL, link to the master site instead. 2000-08-04 04:49:13 +00:00
Rasmus Lerdorf 9f2cd78e67 Small portability fix 2000-08-04 02:23:28 +00:00
c7d84acbcd ChangeLog update 2000-08-04 01:09:12 +00:00
Hartmut Holzgraefe 9cd387439e evaluate sendmail exit status, fixes unix side of bug #5630 2000-08-03 19:26:19 +00:00
Stanislav Malyshev fda23fc253 Fix fclose prototype (#5930) 2000-08-03 16:37:35 +00:00
Stanislav Malyshev 688268727e If we can't find a protocol in URL wrapper, try it as a filename (fix #5931) 2000-08-03 15:09:27 +00:00
Hartmut Holzgraefe 74ca22e9ca will now work again on 1-character urls, spaces before and after '='
and urls containing '#' scrolling info
# argh, this file's not even a week old and already needs
# a heavy cleanup rewrite, but at least it gets all my test cases right
2000-08-03 11:42:39 +00:00
c438f0abc9 ChangeLog update 2000-08-03 01:09:18 +00:00
a31dd36ab9 NEWS update 2000-08-03 01:09:15 +00:00
Rasmus Lerdorf ff0a08f508 Leave this initialization in 2000-08-02 22:53:55 +00:00
Rasmus Lerdorf 76a2d2538c Heads up! I have moved the headers_only and response_code checks out of
SAPI and down into the individual SAPI modules.  I have made the
appropriate changes in all the SAPI modules, but please verify these.
The reason for this change is that Apache sometimes will feed PHP
a request_method of GET but have r->header_only set to true.  This happens
in an ErrorDocument redirect.  In this same scenario we want to preserve
the status code as well instead of just overwriting it with a 200 and
losing this information.  For now the other sapi modules act exactly as
before since they probably do not make this distinction, and they may
not even have a valid response code this early in the request.
@ Fix HEAD request bug on an Apache ErrorDocument redirect and preserve
@ the status code across the redirect as well.  (Rasmus)
2000-08-02 22:48:45 +00:00
Rasmus Lerdorf f896b9a354 Fix library ordering here so static builds will work 2000-08-02 19:49:04 +00:00
Andi Gutmans 5ae343b752 - Remove commented code 2000-08-02 17:51:42 +00:00
foobar a4a0e18ec4 - Added two new functions: ldap_t61_to_8859() and ldap_8859_to_t61().
These functions are available only when using openldap which is compiled
  with STR_TRANSLATION and LDAP_CHARSET_8859 defined in ldap_cdefs.h (Jani)
2000-08-02 13:11:46 +00:00
5343536429 ChangeLog update 2000-08-02 01:09:19 +00:00
3977f6380f NEWS update 2000-08-02 01:09:16 +00:00
Rasmus Lerdorf b8f6e9dd03 Add Olympus-specific tags to read_exif_data()
@ Add Olympus-specific tags to read_exif_data() (Rasmus)
2000-08-01 22:05:15 +00:00
Hartmut Holzgraefe 4c9709ff0d typo fix 2000-08-01 20:21:35 +00:00
Sascha Schumann cbc4b24a7a Enable building PHP against kerberized IMAP libraries 2000-08-01 15:24:56 +00:00
Hartmut Holzgraefe f194a3a25d protect datetime() against all zero inputs ... 2000-08-01 11:16:20 +00:00
foobar ab13d02d53 @- Fixed bug in imap_fetchheader() where using FT_PREFETCHTEXT didn't return
@  the body. Bug #4447. (Jani)
2000-08-01 09:11:46 +00:00
Hartmut Holzgraefe b59e98b87c "undefined function" error message will now suggest similar named
functions as jikes compiler for java does (typo protection)
2000-08-01 07:57:19 +00:00
Hartmut Holzgraefe ea5ab044bf trans-sid rewrite, is now state-aware (fix for bug #3411 and friends) 2000-08-01 07:45:14 +00:00
Stanislav Malyshev e109aa30d6 When output is empty, exec should return "", not "\0" (#5775)
@- Fixed exec() returning "\0" when output is empty
2000-08-01 07:22:59 +00:00
7173a63d46 ChangeLog update 2000-08-01 01:09:15 +00:00
Zeev Suraski c5c973d16f - Get rid of whitespace. 2000-08-01 00:41:35 +00:00
Rasmus Lerdorf 89107a221b Missed a symbol 2000-07-31 15:07:58 +00:00
Sascha Schumann 04182c1361 Add note about software requirements 2000-07-31 13:44:06 +00:00
0f9eee7662 ChangeLog update 2000-07-31 01:09:08 +00:00
c30d5a8d27 NEWS update 2000-07-31 01:09:05 +00:00
Hartmut Holzgraefe 0df7721842 fix for bug #5672 2000-07-30 21:55:27 +00:00
Stig Bakken def1424b12 @Added XML_Parser class in PEAR (Stig)
@Added "make test" target in pear/ and added some regression tests (Stig)
Also fixed a bug in the PEAR class that was discovered when testing :-)
2000-07-30 17:41:31 +00:00
foobar 9789895f30 #Damn. It still crashes in some situations. So this was bogus. =( 2000-07-30 15:48:09 +00:00
Stanislav Malyshev a790966b15 Fix file upload types array handling (#5836) 2000-07-30 11:22:18 +00:00
Rasmus Lerdorf 75bb019760 Fix bug in strip_tags function as per bug #5857
@ Fix bug in strip_tags function as per bug #5857 (Rasmus)
2000-07-30 05:04:06 +00:00
Sam Ruby 4ca1c611b3 Refactor in support of subclassing 2000-07-30 04:50:31 +00:00
a234329535 ChangeLog update 2000-07-30 01:09:10 +00:00
0ca80059c8 NEWS update 2000-07-30 01:09:07 +00:00
Rasmus Lerdorf 677df784c1 This url symbol was a bit too generic. Change it to php_url instead.
It was clashing with a similar typedef in the UdmSearch integration I am
working on.
2000-07-29 22:32:21 +00:00
foobar 5fdc09fb36 @- Fixed bug in imap_compose_mail() which caused crashes. (Jani)
# This one was only partly ported from php3. As some user pointed it out,
# it was working in 3.0.x. But this needs further hacking. Some error
# handlers, at least. Fixes bugs #3337 and #5084.
2000-07-29 18:45:06 +00:00
Thies C. Arntzen 51fc3dede2 @- Fix reading of IPTC via GetImageInfo() for certain JPEG files. (Thies) 2000-07-29 15:29:35 +00:00
Rasmus Lerdorf 56326195a4 Add a couple of notes to the INSTALL file to hopefully cut down on a
couple of frequently asked questions.
2000-07-29 15:02:23 +00:00
Zeev Suraski 52ff887db5 Made ob_start() and friends reentrant. It's now possible to implement this
long-requested functionality, now that output buffering is re-entrant:

function eval_ret($code)
{
	ob_start();
	eval($code);
	$retval = ob_get_contents();
	ob_end_clean();
	return $retval;
}
2000-07-29 14:46:09 +00:00
Zeev Suraski d8a4278ab4 - Update .dsp's
- Make non ZTS Win32 build again
2000-07-29 10:48:57 +00:00
Zeev Suraski 735a0d148e Fix filename issues 2000-07-29 10:44:13 +00:00
Jouni Ahto 3d1b363967 Fix #5817 and really, really check what gets passed further... 2000-07-29 06:07:26 +00:00
Jouni Ahto ecb7b4d271 Removed an extra tab, it caused problems for Digital Unix' poor native make... 2000-07-29 04:45:38 +00:00
Jouni Ahto d88fe953ae This should fix #5826. 2000-07-29 04:24:11 +00:00
foobar 90c1689cf0 Just cleaning up. 2000-07-29 03:59:05 +00:00
6496e39b53 ChangeLog update 2000-07-29 01:09:15 +00:00
7f41a6c77c NEWS update 2000-07-29 01:09:07 +00:00
foobar 7c84d6a082 Fixes bug which caused crash, if result_entry wasn't valid. 2000-07-28 22:39:22 +00:00
foobar 9f25b9c1f7 # Oops..where did those creep in? =( 2000-07-28 21:48:16 +00:00
foobar 40b89f34fb @- Made ldap_add(), ldap_modify(), ldap_mod_add(), ldap_mod_replace()
@  binary-safe. Original patch: Terrence Miao <terrence_miao@email.com> (Jani)
#Thanks go to Terrence for making a patch correcting this bug in php3.0.12...
#A patch, which somehow wasn't included at all in it?-) I wonder why..?
2000-07-28 21:31:02 +00:00
Stig Bakken 4575fe5a7c * PEAR now stands for "PHP Extension and Application Repository" 2000-07-28 21:05:00 +00:00
Chuck Hagenbuch 44a46d2a75 Moving the Socket class to Net/Socket.php, and basing it on code that Stig
wrote, with a few extra utility functions from my old class.

Stig, I mucked with the constructor a bit since it didn't quite make sense
exactly as it was - does it still do what was intended?

Also, are the emacs folding things (// {{{ functionname() ...) a PEAR
standard? How do they fit with the javadoc?
2000-07-28 15:27:18 +00:00
Hartmut Holzgraefe 1a7f851985 added '-l' option to command line / CGI version for 'syntax check only'
plus a little cleanup and rearranging in command line option parsing

@ CGI aka. command line version has now an option '-l' for syntax check
@   without execution (Hartmut)
2000-07-28 15:21:20 +00:00
Hartmut Holzgraefe a525d022ce should fix bug #5729
# I'm unable to test, as I still haven't got working Windows
# Please check that it compiles.
2000-07-28 12:21:44 +00:00
Stanislav Malyshev 2c95b113bd Make define return false and issue E_NOTICE when trying to redefine constant
@- Make define return false and issue E_NOTICE when trying to redefine constant (Stas)
2000-07-28 09:44:46 +00:00
5c2c547d9e ChangeLog update 2000-07-28 01:09:11 +00:00
53738cf408 NEWS update 2000-07-28 01:09:08 +00:00
foobar c8b8281e22 @- Fixed bug in ldap_get_values_len() which makes it NULL-safe. (Jani)
@  Bug-report and fix submitted by Michel Alexeline <alexel@dr15.cnrs.fr>
# Plus I added missing ldap_value_free_len().
2000-07-28 00:09:33 +00:00
Sam Ruby ed2b68a9c3 Fix bug 5619 - explain how to add to the classpath on Win32 machines.
Reported by: "Carl S. in 't Veld" <cveld@bigfoot.com>
2000-07-27 18:57:23 +00:00
Rasmus Lerdorf 3bca4e220d Make ext_skel create a Makefile.in set up to handle shared extension
support automatically
@ Make ext_skel create a Makefile.in set up to handle shared extension
@ support automatically (Rasmus)
2000-07-27 17:56:02 +00:00
James L. Pine 96a35a3eea added DB/oci8.php to PEAR_FILES 2000-07-27 17:18:26 +00:00
Jon Parise 021ad113ef Reworded some of the php_error messages for grammar and clarity.
(For example, settled on "cannot" instead of "can't" in all case)
2000-07-27 16:43:38 +00:00
Andi Gutmans 290525fdcd Always store full filename as compiled file name 2000-07-27 15:36:54 +00:00
Stanislav Malyshev 29585f985e Add news of recent fixes 2000-07-27 14:34:40 +00:00
Stanislav Malyshev ba8d49dce7 Fix realpath not to die on non-existing files (bug #5790)
Thanks to china@thewrittenword.com
2000-07-27 13:48:50 +00:00
Chuck Hagenbuch 5ec120366c Add a Socket class. If this should be somewhere other than top-level, just
let me know - none of the existing subdirectories made sense to me, and I
didn't want to add a new one just for this.
2000-07-27 13:47:45 +00:00
Stanislav Malyshev f24c8c6f4b Fix safe mode handling by touch 2000-07-27 13:47:03 +00:00
Stanislav Malyshev 9aa854dc6e Fix memory leak in touch when safety check fails 2000-07-27 13:28:21 +00:00
7afdb75437 ChangeLog update 2000-07-27 01:09:24 +00:00
fde20cea27 NEWS update 2000-07-27 01:09:16 +00:00
Kristian Köhntopp cd2929aead Access to global variable safe_mode fixed. 2000-07-26 21:38:21 +00:00
Vlad Krupin 3d3d238021 Changed syntax of pspell_new() (one more parameter - mode)
pspell_new() parameters that are empty ("") are now ignored

Removed pspell_mode() and pspell_runtogether() - their
functionality moved to pspell_new() because the ability
to dynamically change those settings is not in ISPELL, and
is likely do disappear from ASPELL, according to ASPELL
author.

Created a new constant - PSPELL_RUN_TOGETHER for pspell_new()

fixed a bug in pspell_new() that caused non-English dictionaries
to be ignored

removed a bogus line from pspell_new() that could result in
a memory leak
2000-07-26 21:32:29 +00:00
Kristian Köhntopp 102156298a Added seteuid and setegid functions on request by max@valkyrie.sscf.ucsb.edu.
Also fixed the function detection for the HAVE_ functions.
2000-07-26 21:25:01 +00:00
Vlad Krupin f1f91467fa Removed pspell_mode() and pspell_runtogether() 2000-07-26 21:24:17 +00:00
Rasmus Lerdorf b480b8dace Fix symbol clash which caused a DSO problem on OpenBSD
@ Fix symbol clash which caused a DSO problem on OpenBSD (Rob Black and
@ anil@recoil.org)
2000-07-26 20:39:59 +00:00
Zeev Suraski a30cde3de5 Fix a possible issue with runtime inheritence under fairly rare circumstance
and optimize a tiny bit
2000-07-26 18:23:30 +00:00
Sascha Schumann 08f7586031 Get rid of unnecessary preprocessor constructs. 2000-07-26 16:42:04 +00:00
Sascha Schumann 30472a1cc1 Use the lcg as another entropy source for seeding the PRNG when creating
a salt for crypt().
2000-07-26 16:35:32 +00:00
Sascha Schumann 2c42094494 Clean up the mess WRT rebuilding a limited set of files.
Earlier changes were based upon a wrong assumption (that CONFIG_FILES
could be relied upon).
2000-07-26 14:53:54 +00:00
Egon Schmid e4b7e9e916 Protos fixed. 2000-07-26 11:43:01 +00:00
Joey Smith 017a843f0a OK, got ahead of myself. Go back to where we started this morning. 2000-07-26 11:33:56 +00:00
Stanislav Malyshev 1373a16280 Add strncasecmp function
@ Added strncasecmp function (Andi)
2000-07-26 11:32:15 +00:00
Egon Schmid 9bb4011d06 Proto fixed. 2000-07-26 11:28:14 +00:00
Stanislav Malyshev 79527dd539 Make proper object initialization 2000-07-26 11:21:03 +00:00
Joey Smith 4e3f7a44da OK, the fastgen stuff should be working OK, and normal configure should, too.
There is an annoying warning being generated due to null 1st arg to AC_OUTPUT,
but I don't know what to do a/b that.
2000-07-26 11:04:07 +00:00
foobar 123d745249 @- Added new function: ldap_compare(). (Jani)
# Documentation is coming right after this.
2000-07-26 11:01:44 +00:00
Joey Smith 69a075136f Make configure work again.
CONFIG_FILES is broken again, tho. (I think).
Will work with Stig to try and figure this out.
2000-07-26 10:43:40 +00:00
Stig Bakken c63410f6be Multiple DB::connect or DB::factory calls using the same backend
should work now.
2000-07-26 09:57:06 +00:00
David Croft 718b7308c3 tidy up news 2000-07-26 08:23:04 +00:00
foobar cc077fd8d0 Just a little beutifuing. 2000-07-26 07:37:25 +00:00
Sterling Hughes 56b7b7a8a9 * 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.
2000-07-26 05:41:38 +00:00
Sterling Hughes 2aff369398 Add CURLOPT_TRANSFERTEXT option to curl_setopt(). 2000-07-26 05:25:37 +00:00
Jon Parise aab966a491 MAINTAINERS has become EXTENSIONS 2000-07-26 02:10:18 +00:00
f98a741404 ChangeLog update 2000-07-26 01:09:08 +00:00
e1615b1882 NEWS update 2000-07-26 01:09:05 +00:00
Sascha Schumann 79186d4fe9 Read from /dev/u?random until the buffer is filled.
Submitted by: Derick Rethans <d.rethans@jdimedia.nl>
2000-07-25 22:17:20 +00:00
Kristian Köhntopp 19687ea1ed Trivial change to add access to CURL version information for
user programs in order to have them react appropriately.
2000-07-25 22:15:26 +00:00
Vlad Krupin b3305dab64 added several functions for manipulating wordlists:
pspell_store_replacement()
 pspell_add_to_personal()
 pspell_add_to_session()
 pspell_clear_session()
2000-07-25 22:09:52 +00:00
Vlad Krupin 29ab69a767 - added several functions for manipulating wordlists - pspell_store_replacement(), pspell_add_to_personal(), pspell_add_to_session(), pspell_clear_session().
- fixed a few confusing typos in comments
2000-07-25 22:06:38 +00:00
Joey Smith 7d132e6578 There is still something wrong with Sybase DB-Lib,
but CT-Lib works great.
2000-07-25 20:35:50 +00:00
Stanislav Malyshev a9606d1d4e Make browscap parameter names lowercase
Fix . handling in browscap names
2000-07-25 18:50:50 +00:00
Stanislav Malyshev 104b4f38df Fix more bugs in browscap
# now it shoudl work, but leaks like hell, so don't use it yet
2000-07-25 18:50:02 +00:00
foobar e5f6dcb9c2 @- Fixed a bug in ldap_get_entries() and ldap_get_attributes. (Jani)
Fixes bugs #5433 and #5603.
2000-07-25 15:34:28 +00:00
Stig Bakken bf470dfe6c Finally fixed so config.status can regenerate single files without
doing the whole fastgen and warning message whoopla again.  Whee!
2000-07-25 11:25:05 +00:00
Stig Bakken abe372481d forgot to commit this one last night 2000-07-25 10:57:57 +00:00
Stanislav Malyshev 85eb0bb29d Report configuration path that is really used, not that is compiled in
# it does matter when using -c option
2000-07-25 10:54:07 +00:00
David Croft aa4f8afc17 Merged MAINTAINERS and MODULES_STATUS into EXTENSIONS, added version
field, added the missing extensions, added comments, filled in some
maintainers.

# Please help fill in the unknowns in here, particularly in status.
2000-07-25 10:50:06 +00:00
Hartmut Holzgraefe 772c4026bb htmlspecialchars and htmlentities will now
encode single quotes to &#39;
(due to feature request in BUG ID#5254)
2000-07-25 10:18:06 +00:00
Stanislav Malyshev 005d4c4deb Default section name should be uppercase, I guess 2000-07-25 08:09:00 +00:00
David Croft 1c2db161bf # removed stupid dollar Id dollar in changelog 2000-07-25 06:56:04 +00:00
ea49b191aa ChangeLog update 2000-07-25 01:09:11 +00:00
c045d7a581 NEWS update 2000-07-25 01:09:08 +00:00
Stig Bakken e0b531d5f4 * the beginning of a regression testing framework? 2000-07-25 00:55:37 +00:00
Sterling Hughes c9167fa9df remove comments for consistency. 2000-07-25 00:29:52 +00:00
Sterling Hughes f338d8af5f . 2000-07-25 00:29:07 +00:00
Stig Bakken fbc947f43f * generate pear scripts properly with configure 2000-07-24 23:55:34 +00:00
Stig Bakken 576b6e9236 * PEAR.php is now generated by configure 2000-07-24 23:54:26 +00:00
Sterling Hughes cb44d1b30a 1. Move from experimental -> production
2.  Thread safety
3.  Set some initial options
4.  Redo the placement of some functions and options.
2000-07-24 20:00:00 +00:00
Joey Smith 9d6d8bf1fa @- Fix #4591. Register the appname as PHP 4.0, not 3.0
@  Credit to andrew@digitalpulp.com. (Joey)

sybase.globals was still using PHP 3.0 as the appname.
2000-07-24 19:12:32 +00:00
Dan Kalowsky f6d891674d Patched to work for Solid/Linux libc5 and glibc2 without the need for renaming the lib files, thanks to Kevin Way... fixed typo from GLIHC to GLIBC 2000-07-24 18:01:42 +00:00
John Donagher e9427bc078 # Added example entries for the pfpro extension to the php.ini templates 2000-07-24 17:58:38 +00:00
John Donagher d805076ac2 # Added code to pfpro.c and php_pfpro.h to parse defaults out of php.ini
@- For the pfpro extension: defaulthost, defaultport, defaulttimeout, and
@  all of the default proxy settings can now be defined in php.ini
2000-07-24 17:57:05 +00:00
Dan Kalowsky ebe6dbbbae Patched to work for Solid/Linux libc5 and glibc2 without the need for renaming the lib files, thanks to Kevin Way 2000-07-24 14:21:18 +00:00
Stig Bakken 9f7874ccc5 added TODO file for PEAR 2000-07-24 13:32:50 +00:00
David Croft 21b2a241db updated MODULES_STATUS file. Perhaps this should be renamed EXTENSIONS_STATUS? 2000-07-24 10:52:07 +00:00
David Croft 96eada8f80 licence versions -> 2.02 in pear files 2000-07-24 10:31:43 +00:00
Stig Bakken e0924de112 @Ported DB to new error reporting scheme 2000-07-24 08:24:14 +00:00
Stig Bakken 0f0f1cebcb * new class: PEAR - can be used as a base class for others.
* PEAR_Error moved into PEAR.php to reduce the number of files that are
  always included
* cleaned up the PEAR_Error API a bit and changed the two classes using it
* added PEAR_Installer - an administration class for installing packages
  and maintaining a "class/file cache"
2000-07-24 08:05:51 +00:00
David Croft 0836e10a15 various version 2.0 and 2.01 licenses -> 2.02 2000-07-24 05:41:02 +00:00
Sam Ruby 54790b5e63 Correct the value of request_uri 2000-07-24 05:29:20 +00:00
David Croft c3fb9680ec corrections to NEWS file 2000-07-24 02:01:05 +00:00
David Croft 83513d9580 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.
2000-07-24 01:40:02 +00:00
c402d89f94 ChangeLog update 2000-07-24 01:09:08 +00:00
3af341356b NEWS update 2000-07-24 01:09:05 +00:00
foobar 428eb46f78 It's better not touch those ldap->ld_* when they aren't given as parameters.
(Now using -1 the parameters not wanted can be omitted)
# Plus some source-polishing.
2000-07-23 21:32:02 +00:00
Sterling Hughes bf6e7e8034 Remove $file and $line. 2000-07-23 17:10:06 +00:00
Thies C. Arntzen 9752d1a089 (getimagesize) fix FORCE_REF. 2000-07-23 16:49:42 +00:00
Stanislav Malyshev 7c296bd9cc Add another check for broken browscap object
# I do not know how it could get broken, but just in case...
2000-07-23 11:32:18 +00:00
Stanislav Malyshev b410eaf6d4 Make browscap not to lowercase its arguments
# Why it is doing it? Parent matching doesn't work with lowercase
# If there was any reason to it, please tell
2000-07-23 11:27:48 +00:00
Stanislav Malyshev a172147a91 Try to fix some get_browser crashes and clean it up
# Probably needs more work, just what I could see immediately
2000-07-23 11:11:35 +00:00
Joey Smith a44137974b Setting "compatibility" parameter requires having a PDF structure that
has NOT had PDF_open_*() called on it, according to the documentation.

There is not currently any way to obtain such from user-land in PHP.
@ Catch users trying to set "compatibility" parameter, which is not
@ supported from user-land.
#
# Not sure this is the best way to do this...
# Uwe, could you please double check this?
2000-07-23 08:31:13 +00:00
Joey Smith 4caea0bb7a BROKEN_SPRINTF should be PHP_BROKEN_SPRINTF 2000-07-23 08:25:27 +00:00
Sterling Hughes 8aadb68db1 @ Fixed dbase_add_record. (Sterling)
Fixed dbase_add_record
2000-07-23 03:45:24 +00:00
e67fa9823d ChangeLog update 2000-07-23 01:10:11 +00:00
51bbc2b4a8 NEWS update 2000-07-23 01:10:07 +00:00
Sam Ruby f4e94a5030 Complete the work mapping arrays and hashtables 2000-07-22 20:36:11 +00:00
Sam Ruby 668af98d75 Fix regression in passing strings as parameters 2000-07-22 18:09:28 +00:00
Sterling Hughes d69d04cf75 fix bug 5322. 2000-07-22 17:47:30 +00:00
Sam Ruby 3f4c7c8359 Allow java.lang.Hashtables to be passed into PHP as arrays. 2000-07-22 17:32:32 +00:00
Sam Ruby 7893c72965 Verify that a classname is actually passed on a new Java() call. 2000-07-22 16:13:20 +00:00
Sam Ruby 3e4a4f2376 Respect the object type the user specified (i.e., never automatically
convert the result of "new Java()" to a primitive type)
2000-07-22 13:43:46 +00:00
Sam Ruby 313ca6b5e8 Don't assume that Java byte arrays are null terminated. 2000-07-22 12:40:49 +00:00
David Croft a5a9a4928b # zeev is god 2000-07-22 04:23:41 +00:00
David Croft 89153d9c05 fixed socket_set blocking in windows
(bug 3845)
2000-07-22 01:53:16 +00:00
David Croft 8dd1fdb1a0 wordwrap function from Chris Russel <russel@yorku.ca>
differences from his patch:
 - wordwrap width and wrap-string now optional parameters
   (default to 75 and "\n" respectively)
 - wordwrap_byte is now just an automatic special case of wordwrap
 - Zend API compliant

@- Added new function "wordwrap" to wordwrap long strings from Chris
@  Russel <russel@yorku.ca> (David Croft)
2000-07-22 01:12:24 +00:00
e007639f2a ChangeLog update 2000-07-22 01:09:07 +00:00
1ca6008767 NEWS update 2000-07-22 01:09:04 +00:00
foobar 01d5aec3aa Forgot those constants. 2000-07-22 00:34:22 +00:00
Sam Ruby eb8a55893d Pass PHP arrays to Java as hash tables; minor cleanup 2000-07-21 22:08:50 +00:00
Joey Smith be6c3d8b62 INI stuff labelled sybase.* should be sybct.*.
Thanks to dean.bennett@home.com.
2000-07-21 19:58:38 +00:00
foobar 549aec4500 @- Added four additional arguments: attrsonly, sizelimit, timelimit, deref which
@  were missing in ldap_search(), ldap_list() and ldap_read() functions (Jani)
@- Fixed a bug in ldap_search/list/read() which prevented returning the partial
@  results when 'Sizelimit exceeded' error occurred. (Jani Taskinen)

# And nuked some compile time warnings. Took a while to get this commit message
# written..I hope I got it right. =)
2000-07-21 19:00:21 +00:00
Sterling Hughes f66de59603 New naming sequence for PEAR_Error
- PEAR_ERROR -> PEAR_Error
  - $CLASSNAME -> $classname

New naming sequence for Exceptions
  - ExceptionFileFind -> FileFindException.
2000-07-21 18:34:37 +00:00
Rasmus Lerdorf 9ea35f0d28 Fix this address 2000-07-21 16:39:18 +00:00
Zeev Suraski 206b83f009 Fix Win32 build 2000-07-21 15:54:10 +00:00
Hartmut Holzgraefe d4936d8fcf column size for date in imap_headers increased (see bug id #5699) 2000-07-21 15:50:37 +00:00
Andrei Zmievski fbced1b9cc (php_addslashes) Fixed stop condition - it should only take into account
the length of the string, not the characters.
2000-07-21 15:29:59 +00:00
Sterling Hughes 4773b98ac6 Add PEAR_ERROR class for returning exception objects.
#  This is the basic idea that Ulf proposed, its obviously
#  going to be subject to modifications.
2000-07-21 06:47:18 +00:00
Ken Coar f869e47eae Undo numerical format regression introduced by the fix of the
zero-precison %s formatting.
2000-07-21 03:21:56 +00:00
97863bb153 ChangeLog update 2000-07-21 01:09:07 +00:00
86a36cbd59 NEWS update 2000-07-21 01:09:04 +00:00
Hartmut Holzgraefe 5390b6a291 fix for bug #5707 2000-07-20 23:08:26 +00:00
Sterling Hughes 0690bca499 fix 5705
.
2000-07-20 17:15:25 +00:00
Andrei Zmievski 9de5b9e04a # There you go, Wico.
Fix bug $5676.
@- Fixed preg_replace() to automatically escape quotes in matched
@  strings when using /e modifier. (Andrei)
2000-07-20 15:27:16 +00:00
Sterling Hughes 8a6f3f80f2 Fix dbase_create() for real. 2000-07-20 02:48:44 +00:00
4638a90a3a ChangeLog update 2000-07-20 01:09:09 +00:00
c7801827e5 NEWS update 2000-07-20 01:09:06 +00:00
David Croft 4e526516e2 automatically initialise library at first use if necessary
automatically cleanup library at request end if user hasn't done so
libpfpro library version shown on phpinfo()
2000-07-19 18:55:12 +00:00
David Croft 89874a4b0d # remove leading _ from #define 2000-07-19 18:51:55 +00:00
Rasmus Lerdorf 30c81ea5c5 Itanium patch from Steve Robb <steve@eu.c2.net>
@ Itanium patch (Steve Robb)
2000-07-19 16:19:40 +00:00
5643850ca4 ChangeLog update 2000-07-19 01:09:08 +00:00
7453e3c898 NEWS update 2000-07-19 01:09:05 +00:00
Sascha Schumann 0216ab891b typo 2000-07-18 22:38:22 +00:00
Sascha Schumann 6da67bf234 Fix building ingres_ii as a shared module 2000-07-18 22:34:42 +00:00
Zeev Suraski 327e33972b Shutup a gcc warning 2000-07-18 20:40:23 +00:00
Zeev Suraski 58e1dd2ee8 Forgot to link this function... 2000-07-18 20:32:39 +00:00
Zeev Suraski a650dd8a19 This is probably the oldest bug in PHP :)
Luckily it's unlikely we're ever actually bitten by this bug.
2000-07-18 20:08:06 +00:00
Andrei Zmievski 7edad11a74 Fixed compilation errors. 2000-07-18 19:13:14 +00:00
Andreas Karajannis 9d8b0f805b Added myself 2000-07-18 18:16:56 +00:00
Andrei Zmievski feb22cdf5d Don't touch ChangeLog, please. It's automagically generated from commit
messages.
2000-07-18 16:37:58 +00:00
Ken Coar 0ca493768b Bring forward the zero-precision (%.0s) string formatting fix
from PHP3.  (After being nagged by Thies. :-)  Whee!  My first
	PHP4 commit..
2000-07-18 16:34:30 +00:00
Stig Bakken 7bb67a6200 @Set default include_path so PEAR files can be reached (Stig) 2000-07-18 11:02:28 +00:00
Sterling Hughes bb5987fe74 Patch STDOUT support. 2000-07-18 05:52:03 +00:00
84d4f5cad4 ChangeLog update 2000-07-18 01:09:09 +00:00
42df8a7401 NEWS update 2000-07-18 01:09:06 +00:00
Hénot David 63a31786b6 Added new function ii_autocommit() 2000-07-17 23:57:36 +00:00
Hénot David 00d67abd30 Made ingres_ii module compile with its new name 2000-07-17 23:21:42 +00:00
Stig Bakken 8b824d99fa @Added "pear" executable, requires CGI version installed (Stig) 2000-07-17 22:52:08 +00:00
Egon Schmid 41d3f4dbbf Fixed some protos. Only one line for the description. 2000-07-17 21:50:35 +00:00
Hénot David 15ff1d211b Added extension ii for Ingres II native support.
@- Added extension ii for Ingres II native support. See README in ext/ii
@  directory. (David H)
2000-07-17 21:29:30 +00:00
Zeev Suraski 896d64be10 Build fixes 2000-07-17 21:13:44 +00:00
Zeev Suraski 1237a33c79 - Made Interbase compile under Win32, cleaned warnings
@- Added Win32 project for the Interbase module (Zeev)
2000-07-17 20:51:47 +00:00
Ben Mansell e2d25ad5c6 Minor adjustments to compile-advice 2000-07-17 17:18:02 +00:00
Uwe Steinmann eb3bc5aba6 - Cannot see any good reason why the test script in the dir of
the extension, though it is in tests as well
2000-07-17 15:44:24 +00:00
Andrei Zmievski 8f96ea6b20 *** empty log message *** 2000-07-17 13:37:26 +00:00
Stanislav Malyshev 7b9d2e33bf Fix crash in stripcslashes("") (#5628) 2000-07-17 10:22:30 +00:00
f8c07fff2d ChangeLog update 2000-07-17 01:13:01 +00:00
Andi Gutmans 4066a197be - Beautify Zeev's patch a bit. 2000-07-16 22:33:42 +00:00
Zeev Suraski 90ca5c4747 Update news 2000-07-16 20:08:26 +00:00
Sterling Hughes 6787071417 Add CURL support (http://curl.haxx.se).
# Currently pretty experimental, and labeled so, it
# only really works with the CGI version.  I wanted
# to get the sources in CVS, so I could give a
# reference point for some issues, and get more
# extensive testing...
#
# Does anyone know how long it is going to be till
# the next minor release?
2000-07-16 19:37:33 +00:00
Rasmus Lerdorf 246999a51f Tiny wording fix 2000-07-16 18:51:00 +00:00
Zeev Suraski 808f8ed306 Implement parent::foo() 2000-07-16 16:40:21 +00:00
7761580504 ChangeLog update 2000-07-16 01:09:08 +00:00
bb871497b7 NEWS update 2000-07-16 01:09:05 +00:00
Egon Schmid 7a0d047a68 Some cosmetic changes. 2000-07-15 16:09:18 +00:00
Zeev Suraski b4266edb07 Add more extended_info calls 2000-07-15 15:41:20 +00:00
Thies C. Arntzen cef6cc1ec0 fixed uninitilized var in ZTS mode. 2000-07-15 14:54:04 +00:00
Egon Schmid 23b56e3c64 Some cosmetic changes. 2000-07-15 14:35:41 +00:00
Thies C. Arntzen 31dae9e367 @- You can now call Ora_Error() without prameters to get the reason
@  for a failed connection attempt. (Kirill Maximov)
2000-07-15 14:15:10 +00:00
Egon Schmid 9194a0fb12 Some cosmetic changes. 2000-07-15 13:00:41 +00:00
David Croft 6d2d3e7f60 #.cvsignore file for ext/pfpro 2000-07-15 05:24:22 +00:00
David Croft 09c9d44399 merged changes from Signio module by John Donagher <john@webmeta.com> 2000-07-15 05:08:22 +00:00
David Croft 9ee9eaab3a test file for pfpro 2000-07-15 03:07:49 +00:00
Rasmus Lerdorf c1877a3a30 . 2000-07-15 01:54:59 +00:00
David Croft 467917cbde @- New extension "pfpro" for interface with Signio Payflow Pro (David Croft)
New extension pfpro to interface with Signio Payflow Pro library for
credit card processing etc
2000-07-15 01:13:40 +00:00
5bd82b6a04 ChangeLog update 2000-07-15 01:09:07 +00:00
3fad10919f NEWS update 2000-07-15 01:09:04 +00:00
Rasmus Lerdorf 3c10e038e2 Add IMG_GIF, IMG_JPG, IMG_JPEG, IMG_PNG and IMG_WBMP constants for
imagetypes() function
@ Add IMG_GIF, IMG_JPG, IMG_JPEG, IMG_PNG and IMG_WBMP constants for
@ imagetypes() function (Rasmus)
2000-07-14 22:07:57 +00:00
Rasmus Lerdorf 2f960d70b9 Add ImageTypes() function which returns a bitfield with the supported
image formats.  1=gif, 2=jpeg, 4=png and 8=wbmp
@ Add ImageTypes() function which returns a bitfield with the supported
@ image formats.  1=gif, 2=jpeg, 4=png and 8=wbmp (Rasmus)
2000-07-14 21:51:31 +00:00
Zeev Suraski 55d313db99 Improve register_resource_ex() infrastructure 2000-07-14 20:00:24 +00:00
Zeev Suraski 2dbc46b7b1 Hopefully this will stop the php_mysql.dll questions that haunt us... 2000-07-14 19:42:59 +00:00
Rasmus Lerdorf e3fd1edc49 Make it possible to specify an empty string as a thousands-seperator
in number_format()
@ Make it possible to specify an empty string as a thousands-seperator
@ in number_format()
2000-07-14 18:46:13 +00:00
Egon Schmid 0bba8eeae1 Protos fixed. 2000-07-14 18:42:35 +00:00
Rasmus Lerdorf c78d180231 Shared module support for LDAP extension
@ Shared module support for LDAP extension (Troels Arvin)
2000-07-14 13:13:25 +00:00
Mike Waychison 99b85d1919 (imap_mail) Fixed a sizing of the arg parameter array. Was causing
Seg-Faults if rpath was specified.
@  Fixed a bug with imap_mail where apache would segfault if the rpath
@  parameter was specified.
#  ouch.
2000-07-14 08:12:53 +00:00
23f1e503c1 ChangeLog update 2000-07-14 01:09:09 +00:00
85cb7a2986 NEWS update 2000-07-14 01:09:06 +00:00
Rasmus Lerdorf 1d0ae2cde4 Use dashes and short day name in cookies since some browsers seem picky
about this
@ Use dashes and short day name in cookies since some browsers seem picky
@ about this (Rasmus)
2000-07-14 01:08:59 +00:00
Egon Schmid 411280eb9d The description for protos need no period. 2000-07-13 20:55:22 +00:00
Vlad Krupin 9936548993 - Making pspell compile as a shared module
- fix a couple typos
@ Making pspell compile as a shared module
2000-07-13 20:39:14 +00:00
Egon Schmid d041052428 Fixed protos. 2000-07-13 19:09:32 +00:00
Egon Schmid 28f38ea4fe Fixed protos. 2000-07-13 18:44:57 +00:00
Egon Schmid 7ad2213278 Forgotten to change. 2000-07-13 18:27:10 +00:00
Egon Schmid 86dfb4c292 Corrected some protos. 2000-07-13 18:21:40 +00:00
Zeev Suraski aa8d04a87c Fix disable_functions feature 2000-07-13 17:52:00 +00:00
Zeev Suraski 155cac35d8 *** empty log message *** 2000-07-13 17:29:59 +00:00
Stanislav Malyshev 4c6ffdb1c2 make -c in stand-alone mode work again.
Setting ini_path after php_module_startup doesn't do much good -
since php_module_startup reads .ini.
# This fix is very ugly. Everyone is welcome to make better fix
# that won't report errors twice and won't scan argument 3 times
2000-07-13 09:17:39 +00:00
adc4d1e5c8 ChangeLog update 2000-07-13 01:09:07 +00:00
Thies C. Arntzen 7f4909d9f5 fix ZTS startup without filename (thanx purify!) 2000-07-12 16:37:46 +00:00
Uwe Steinmann 2d66c98f28 - The pdfclock example using cpdf 2000-07-12 12:50:58 +00:00
Thies C. Arntzen 372f71eb1a unset active_symbol_table on zend-shutdown. 2000-07-12 12:00:17 +00:00
Thies C. Arntzen 88113794fd (php_error) only set php_errormsg if we (still) have an active_symbol_table. 2000-07-12 11:59:09 +00:00
Andi Gutmans e1df83e8e0 - By mistake recommited bad entry 2000-07-12 03:57:26 +00:00
Andi Gutmans f47760cbb6 - Add some Zend Engine changes to the NEWS file 2000-07-12 03:55:28 +00:00
699d59ea28 ChangeLog update 2000-07-12 01:09:08 +00:00
789897eb66 NEWS update 2000-07-12 01:09:05 +00:00
Andi Gutmans b0fd857c69 - Oops I was only thinking about VIRTUAL_DIR and forogt about the rest of
- TSRM which Zeev implemented  on his own.
2000-07-11 19:17:19 +00:00
Andi Gutmans 744a823fd2 - Commit new license for TSRM. 2000-07-11 19:15:51 +00:00
Danny Heijl 641b0aa2d3 - typo 2000-07-11 17:53:02 +00:00
Danny Heijl ec6861733b - Work-around for ESQL/C bug with BLOBs and NULL values (Danny). 2000-07-11 17:47:16 +00:00
Sam Ruby 4ef7cb0700 Fix for problem noted by Jay Greenspan on TurboLinux machines 2000-07-11 17:33:14 +00:00
Andrei Zmievski c9c425d625 Updated comments. 2000-07-11 16:51:04 +00:00
Andrei Zmievski 3ac0ae9dff @- Improved array_multisort() to be able to specify sort type as well sort
@  order. Incidentally, it can be used to sort multi-dimensional arrays
@  as well. (Andrei)
2000-07-11 16:48:03 +00:00
Zeev Suraski 3513866627 Another persistent hash - disable apply protection 2000-07-11 14:47:34 +00:00
Zeev Suraski 168ccfc133 Disable the hash_apply() protection on hashes that persist across requests - it's unsafe
because we may be aborted at any point
@- Fixed a possible data corruption in case of a huge amount of aborted requests (Zeev)
2000-07-11 14:29:38 +00:00
Zeev Suraski 1263932a0d Disable the hash_apply() protection on hashes that persist across requests - it's unsafe
because we may be aborted at any point
2000-07-11 14:27:31 +00:00
Stanislav Malyshev 148317f979 Fix a bug in passing second parameter of RECV_INIT with is_ref set 2000-07-11 13:23:48 +00:00
Andrei Zmievski 45c024c7dc Thies, finish your news entries next time. :) 2000-07-11 13:19:24 +00:00
Sascha Schumann b74e079ce7 The official product name is PostgreSQL, so s/PostgresSQL/PostgreSQL/ 2000-07-11 12:38:06 +00:00
Sascha Schumann c917e170f6 Always use the current DIR_DELIMITER to create the session file path 2000-07-11 12:29:19 +00:00
Thies C. Arntzen 3afe39e21f fix warning in VC6 2000-07-11 11:52:48 +00:00
Andi Gutmans f4e2a900d6 - Oops. Too early in the morning 2000-07-11 04:15:35 +00:00
Andi Gutmans f5401b43b5 - Don't need extern for functions 2000-07-11 04:11:15 +00:00
Andi Gutmans e95220e722 - Include iostream.h in C++. 2000-07-11 04:07:18 +00:00
be8d4ef329 ChangeLog update 2000-07-11 01:09:12 +00:00
87efadc76c NEWS update 2000-07-11 01:09:09 +00:00
Vlad Krupin ece6962f06 - PS_* constants changed to PSPELL_*
- zval is used instead of pval
(as Andrei Zmievski suggested)

Modified Files:
 	ext/pspell/pspell.c
2000-07-10 23:18:27 +00:00
Vlad Krupin a58ca45b2e Initial release. Includes:
- Functionality of aspell
- 3 modes of spellchecking (fast, normal, bad_spellers)
- support for run-together words
2000-07-10 21:29:19 +00:00
Egon Schmid 96675e9d58 Changed the descriptions. 2000-07-10 20:00:02 +00:00
Egon Schmid 6efcc50176 Changed some protos and the authors email address. 2000-07-10 19:46:29 +00:00
Danny Heijl 42693bb820 - Fix the case of NULL BYTE and TEXT columns. (Danny).
ESQL/C (sometimes ?) does not set the indicator variable,
  but the locator->loc_indicator instead.
2000-07-10 19:08:27 +00:00
Andrei Zmievski ac8e3b67d0 php.ini install docs from David Croft <david@infotrek.co.uk> 2000-07-10 17:35:18 +00:00
Jouni Ahto 51692417e8 - Oops, missed two GLOBAL()'s. 2000-07-10 14:52:17 +00:00
Jouni Ahto 4ecbeb8810 - Another attempt to sync with PHP3 and handle multiple recipients.
- Change all \'s to \r\n.
- It's now PHP 4.0 WIN32 -mailer.

# I'm unable to test, I haven't got Windows. Please check that it compiles.
2000-07-10 14:49:20 +00:00
Sascha Schumann 4f71062551 Lift the add-once limit for libraries, because there are valid reasons
against it. When dealing with static libraries, the link order is
important and it might be necessary to add a library multiple times to
satisfy mutual symbol requirements.
2000-07-10 10:26:13 +00:00
Sascha Schumann e8101d4f7b Unify use of my email address 2000-07-10 10:09:15 +00:00
Sascha Schumann 06382f01fd Fix prototype of apache_child_exit_handler and remove popen-related
preprocessor directives/macros.
2000-07-10 09:20:35 +00:00
Sascha Schumann 1722999310 Substitute CXX_PHP_COMPILE. Compiling C++ source files works now. 2000-07-10 09:10:40 +00:00
Sascha Schumann dad6ac414e Make the cxx suffix easily adjustable 2000-07-10 08:45:07 +00:00
Sascha Schumann eb0cbbd2d9 Also output the name of the save_handler when reporting a failed write
attempt.
2000-07-10 08:35:03 +00:00
Thies C. Arntzen 4f1a593ac8 masquarading as sascha;-) 2000-07-10 08:01:45 +00:00
Thies C. Arntzen 1cee6c5b78 @- Fixed closing 2000-07-10 07:57:01 +00:00
bab31955c2 ChangeLog update 2000-07-10 01:09:05 +00:00
Sascha Schumann e51571595c Add support for building C++ sources.
In your extension's config.m4, you need to use the m4 macro

    PHP_REQUIRE_CXX

This shall be called only, if your extension is enabled.

C++ source files shall not be put into the LTLIBRARY_SOURCES macro.
Instead, the filename of the object shall be put into
LTLIBRARY_OBJECTS_X. I.e. if your extension foo consists of foo.cxx, use

    LTLIBRARY_OBJECTS_X = foo.lo
2000-07-09 20:39:18 +00:00
Andi Gutmans c1ed6ef9cc - Fix memory leak. 2000-07-09 20:21:20 +00:00
Egon Schmid 1231a3e473 Fixed other protos. 2000-07-09 19:33:19 +00:00
Andi Gutmans 40b31d7487 - Need to seperate if the hash isn't a reference 2000-07-09 17:12:37 +00:00
Egon Schmid d7b554ee11 Fixed a proto. 2000-07-09 14:26:50 +00:00
Egon Schmid 11b749e047 Corrected a mispelled word. 2000-07-09 14:14:51 +00:00
Sascha Schumann fb8de6eec1 . 2000-07-09 13:41:12 +00:00
Sascha Schumann 2cfa840eb5 Restore INI entries after the request shutdown of modules.
This fixes the problems users of the session module encountered when
using a save handler other than files.
2000-07-09 13:20:27 +00:00
Andreas Karajannis 59604815e1 Fixed module / global shutdown for apache.
GSHUTDOWN functions are now executed and MSHUTDOWN functions are executed on child process exit
2000-07-09 12:51:01 +00:00
Stanislav Malyshev ad271a2b33 Fix stupid bug. 2000-07-09 10:31:47 +00:00
Jouni Ahto af343ca8a1 - Left debugging accidentally on... 2000-07-09 10:30:52 +00:00
Jouni Ahto ccb216ce49 (ibase_blob_import) It's good to have link handle available, if you want to
use it...
(_php_ibase_exec)   On error situations, only xsqlda was freed, not its
                    contents.
2000-07-09 10:27:41 +00:00
Jouni Ahto a63013bfbf - I must be getting demented. Forgot to add and register list destructor
function when creating new list entry type. Several other modifications
  too related to this. Blobs still not working.
2000-07-09 07:30:15 +00:00
Sam Ruby 629bc67086 Reentrancy fixes 2000-07-09 04:16:31 +00:00
Sam Ruby 5c13954eed Fix for JDK1.2.2/Tomcat3.2
(can't find beanInfo for interfaces which extend other interfaces)
2000-07-09 04:09:47 +00:00
423d9f3868 ChangeLog update 2000-07-09 01:09:08 +00:00
f3f5820c46 NEWS update 2000-07-09 01:09:05 +00:00
Egon Schmid ee513d6ed5 Eliminated a typo. 2000-07-08 22:55:40 +00:00
Andrei Zmievski 885e40db05 @- Updated str_pad() to be able to pad on left/right/both sides. (Andrei) 2000-07-08 20:38:23 +00:00
Egon Schmid 2bd5ad3131 Uncomplete proto. 2000-07-08 19:31:16 +00:00
Andi Gutmans 1cce5ed178 - Add zend_ulong 2000-07-08 15:49:39 +00:00
Egon Schmid 81f59f0949 Aren't there some function names conflicts? 2000-07-08 15:13:31 +00:00
Sam Ruby ee36612cef Add experimental APIs to get and clear the last exception 2000-07-08 10:35:50 +00:00
Chris Vandomelen fd3d84ee52 * php4/ext/sockets.c, php4/ext/php_sockets.h:
Numerous changes. Many prototypes changed to be more like the
	appropriate *NIX counterparts. Many new prototypes defining many
	more advanced socket routines. Better AF_UNIX socket support.
	bind() now recognizes the socket type and acts appropriately,
	instead of needing the AF_* for the socket passed in.
# Something I'd like to write yet is proper signal() support. Unfortunately,
# the last time I tried, doing anything with the signal except ignoring it
# caused PHP to segfault. And to have decent socket support.. at least, from
# my experience, having signals is a good thing. Only problem.. to implement
# it, some changes would have to be made to the parser - since that is where
# the problems lie on handling asynchronous signals.
2000-07-08 01:50:34 +00:00
68b639b4f5 ChangeLog update 2000-07-08 01:09:03 +00:00
Jouni Ahto 1df6557b49 - Restore testing for Unicode charmap to what it was, it was working(?), this
shouldn't have any effect on other charmaps.
- Remove bogus message about not finding any Unicode mapping table.
2000-07-07 14:00:50 +00:00
Jouni Ahto 99c6e63e66 - Move away from encoding transaction number into link_id and use properly
resources instead for both.
- Some cleaning.
2000-07-07 12:06:05 +00:00
Stanislav Malyshev be59613ddf Remove C++ commennts. 2000-07-07 09:50:50 +00:00
Stanislav Malyshev 4d41c8ba49 Fix fgets re-allocation (add +1 to accomondate ending \0). 2000-07-07 09:06:47 +00:00
Stanislav Malyshev 6ace712438 Fix add_assoc_string functions.
add_assoc_string(l) last parameter is "duplicate", not string length.
2000-07-07 08:47:11 +00:00
ed0fe0e764 ChangeLog update 2000-07-07 01:09:08 +00:00
1e32fddb44 NEWS update 2000-07-07 01:09:05 +00:00
Andi Gutmans 4eba5f1d39 - Remove code which has never been used (neither in PHP 3) 2000-07-06 23:31:19 +00:00
Andi Gutmans 80121ead56 - Make is_method_call() static and remove a couple of old lines 2000-07-06 23:28:05 +00:00
Andi Gutmans 58d1e0a2cc - Yet another fix... 2000-07-06 23:00:46 +00:00
Andi Gutmans db8734c82f - One more... 2000-07-06 22:38:01 +00:00
Andi Gutmans af5d38214b - One more fix for the latest patch 2000-07-06 22:29:06 +00:00
Andi Gutmans 2787a746f4 - One dumb bug in my latest patch 2000-07-06 22:21:24 +00:00
Andi Gutmans 5f893e68ff - Complex fix for solving a problem with objects & method calls.
- Previous version is tagged PRE_METHOD_CALL_SEPERATE_FIX_PATCH.
- I need to check this fix on a server so if it doesn't work I will revert
- it.
2000-07-06 22:08:22 +00:00
Andrei Zmievski 4aef5ef830 WDDX now implements __sleep()/__wakeup() functionality. 2000-07-06 21:00:18 +00:00
Andrei Zmievski 08011e1701 preg_replace() can be non-greedy now. 2000-07-06 19:32:22 +00:00
Stanislav Malyshev 905fb8ef82 Fix #5432: should register all variables. Thanks jeroen@darius.demon.nl. 2000-07-06 17:40:18 +00:00
Andi Gutmans 45ca7ec17d - Fix problem with newlines not being recognized under certain conditions 2000-07-06 16:19:36 +00:00
Uwe Steinmann 5bb19f7a9c - still an error in my last patch (thanks Andi) 2000-07-06 14:56:52 +00:00
Andi Gutmans 3247b9a207 - Use #ifdef PHP_WIN32 to detect Windows 2000-07-06 14:47:02 +00:00
Thies C. Arntzen 2b70aaf12d @- Fixed crash in gzopen(). (Thies)
# hmm - this should be rethought as one should be able to do
# gzopen("http://..")
2000-07-06 11:25:24 +00:00
Stig Bakken 81ded022e0 Applied DBMaker patch by Jeffrey Lin <clin@lion.syscom.com.tw> 2000-07-06 08:38:12 +00:00
Stig Bakken 6fd156b481 Applied multiple character set support diff by Rob Goodwin
@Multiple character set support in gdttf.c (Rob Goodwin)
2000-07-06 08:13:33 +00:00
Uwe Steinmann e4eb807516 - last commit indroduced a new compile warning, should be fixed now 2000-07-06 05:36:54 +00:00
Uwe Steinmann e1d9d149ab - fixed compile problems on win32 (thanks to Gabriel Weisz <gweisz@l-speed.com>) 2000-07-06 05:30:06 +00:00
dc7441c2fd ChangeLog update 2000-07-06 01:09:14 +00:00
7f62f74b85 NEWS update 2000-07-06 01:09:08 +00:00
Jouni Ahto 344955d020 - Still one misssing zend_list_addref() and small fix in pg_close.
Fixes #5349 (but not the way reporter wants...).

# There's something in the way database_connect/close functions behave when
# implemented the way as in mysql module that I find a bit strange... because
# of that extra zend_list_addref() there to prevent default link disappearing
# if it's not assigned to variable, when it is, I guess its' reference count
# is at this point 2, I can do: open a db link and assign it to a variable,
# close the link and still use it afterwards.
2000-07-05 22:17:30 +00:00
Jouni Ahto bcb7639fb3 - Test pg_encoding_to_char instead (it's existence in libpq means that
PostgreSQL was compiled with multibyte support and client encoding
  functions do something meaningful). Fixes #5417.
2000-07-05 21:28:16 +00:00
Zeev Suraski 37de6635b4 That's no bug, it's quite fine the way it is (if id is
set to -1, it's ignored, and the passed_id argument is used).

If you're experiencing trouble with mysql_close(), please give me a
reproducing script.  If there's a bug, it's not as simple as that.
2000-07-05 20:41:06 +00:00
Uwe Steinmann 46a9e6c23f - Discoverd possible bug. Could somebody have a look. 2000-07-05 19:48:24 +00:00
Uwe Steinmann f6347145ff - Link is now of type RESOURCE and not LONG 2000-07-05 19:47:43 +00:00
Danny Heijl 9f4c3eac9d - Increase allowed number of columns from 256 to 384. 2000-07-05 19:37:45 +00:00
Egon Schmid 80f13900f7 Fixed some protos. 2000-07-05 18:33:32 +00:00
Rasmus Lerdorf f2348a4826 When using HTTP auth from PHP, fill in the %u custom log field so the
authenticated used id will get logged in the Apache access_log
@- When using HTTP auth from PHP, fill in the %u custom log field so the
@  authenticated used id will get logged in the Apache access_log (Rasmus)
2000-07-05 18:02:42 +00:00
Andrei Zmievski 057264d6ed Fix attribution on NEWS. 2000-07-05 15:18:26 +00:00
Uwe Steinmann 055c523702 - Support for pdflib 3.01 2000-07-05 14:30:51 +00:00
Sascha Schumann e805a607cf Fix typo. A shutdown function is of course called, when the server
exits.
2000-07-05 11:27:24 +00:00
Uwe Steinmann 8a2788a5c8 - Note about FDF working again 2000-07-05 08:59:19 +00:00
Uwe Steinmann 68f35d5539 - fixed handling of fdf data (application/vnd.fdf) 2000-07-05 08:57:37 +00:00
Jouni Ahto ec62b2d1cd - First try at getting interbase to compile and work in ZTS-mode. Compiles. 2000-07-05 04:21:00 +00:00
Sascha Schumann 277b0e15b8 (PHP session_destroy) return the error condition from storage handler's
session_destroy method.

Submitted by: juhl@eisenstein.dk
2000-07-05 01:26:22 +00:00
94d7e1fa5b ChangeLog update 2000-07-05 01:09:08 +00:00
b784f02c0b NEWS update 2000-07-05 01:09:05 +00:00
Egon Schmid cd3973612b Not every argument type is mixed. 2000-07-04 20:31:54 +00:00
Egon Schmid f2457db5f3 Missed a two liner. 2000-07-04 19:41:31 +00:00
Mike Waychison 4604031b84 (PHP date) Added new 'O' format modifier for printing out the GMT Offset in
the same manner as emails have in their Date: header.  The format
           is similar to [+-]HHMM of offset.
@- Added new 'O' format modifier that will output the GMT offset as "[+-]HHMM"
@  (eg: Pacific time is -0700).  This is useful for things such as Date: mail
@  headers.
#  Um, this should have existed LONG time ago...   much better than that gmt
#   offset in seconds modifier :)
2000-07-04 16:16:32 +00:00
Stig Bakken 23ca7b9f1a Added "html_errors" directive to optionally disable HTML formatting of error
messages.  The default is on. (Stig)
2000-07-04 09:15:06 +00:00
Sascha Schumann f34c1fbee2 Make script work on POSIX sh 2000-07-04 05:15:33 +00:00
b9b3aaa62f ChangeLog update 2000-07-04 01:09:08 +00:00
02e636f4c0 NEWS update 2000-07-04 01:09:05 +00:00
Zeev Suraski 510adfc2a2 Fix logic (thanks to Dean Bennett) 2000-07-03 22:04:10 +00:00
Danny Heijl 017cde1d11 - Informix driver : Changes for new "main" directory (win32 build) 2000-07-03 19:27:28 +00:00
Andi Gutmans 6d6d52551e - Fix bug #4120 2000-07-03 19:17:57 +00:00
Sam Ruby bea9651995 Fix typo. Thanks to Adam Trachtenberg for noticing it! 2000-07-03 17:34:41 +00:00
Stanislav Malyshev 91130b6a00 Unblock SIGPROF signal when starting timer.
On Linux, this signal is blocked by default after first signal is run
2000-07-03 16:53:39 +00:00
Thies C. Arntzen d58ff645ff @- Fixed crash on OCI?Logon() failure. (thies) 2000-07-03 15:05:46 +00:00
Sam Ruby 1a6116c1f2 Add suggestions for dealing with difficult installations, based on feedback
from multiple people.  The .bashrc suggestion was from Rael Dornfest.
2000-07-03 09:00:54 +00:00
Sascha Schumann e24f505bf9 Identifiers which begin with an underscore are reserved. Changed
_PHP_SOCKETS_H to PHP_SOCKETS_H.
2000-07-03 06:45:07 +00:00
Rasmus Lerdorf 78ec5a54a0 Use AC_CHECK_HEADERS(unistd.h) instead 2000-07-03 05:25:00 +00:00
Chris Vandomelen 56ff5f7abf * ext/sockets/.cvsignore
- Forgot to import into repository.
2000-07-03 04:45:21 +00:00
Chris Vandomelen 21abde5ca1 * Makefile.in
config.m4
  php_sockets.h
  sockets.c
  sockets.php:
  - Added files needed for Unix-style sockets support in PHP.
2000-07-03 04:35:57 +00:00
7a4d4bcd6b ChangeLog update 2000-07-03 01:09:05 +00:00
Sascha Schumann a61721741b Replace macros which begin with an underscore through an appropiately
named macro.
2000-07-03 00:55:36 +00:00
Sascha Schumann 0db7994248 Rename macros which begin with underscore to valid macros. 2000-07-03 00:45:21 +00:00
Sascha Schumann cd754d7825 Rename macros which begin with underscore to appropiate macros. The general
rule is:

	macro_name=`echo $filename|tr a-z A-Z|sed 's/\./_/'`
2000-07-03 00:41:19 +00:00
Sascha Schumann b982307dd1 Change header protection macros to conform to standard.
Draft 3 of IEEE 1003.1 200x, "2.2 The Compilation Environment"

    All identifiers that begin with an underscore and either an uppercase
    letter or another underscore are always reserved for any use by the
    implementation.
2000-07-02 23:54:19 +00:00
Sascha Schumann 16017f6d78 Change header protection macros to conform to standard.
Draft 3 of IEEE 1003.1 200x, "2.2 The Compilation Environment"

  All identifiers that begin with an underscore and either an uppercase
  letter or another underscore are always reserved for any use by the
  implementation.
2000-07-02 23:46:51 +00:00
Sascha Schumann 8adf849dce Identifiers that begin with underscore are reserved for the implementation. 2000-07-02 23:16:54 +00:00
Chuck Hagenbuch 75879e3f18 i don't think there's a reason to nuke the db handle here (when freeing
results).
2000-07-02 19:04:36 +00:00
Shane Caraveo 8a4e08da4f fix php4dllts dsp file 2000-07-02 17:20:38 +00:00
Shane Caraveo 5fcf863579 fix apache dsp file 2000-07-02 17:20:03 +00:00
Shane Caraveo 712cd89434 fix nsapi dsp file 2000-07-02 17:19:49 +00:00
Stanislav Malyshev 10342b4b9e react only on CORE_ERROR 2000-07-02 16:36:31 +00:00
Stanislav Malyshev 4d1f03839c Fix couple of crashes on error conditions
Make session_module_name really work
2000-07-02 16:27:39 +00:00
Stanislav Malyshev d3afeb5b4e Be strict on errors in modules startup 2000-07-02 16:23:43 +00:00
Andi Gutmans 4f88e66167 - Take #2 with tab size 4 2000-07-02 16:06:45 +00:00
Andi Gutmans e3c5f6e890 - Beautify parser a bit. It still could do with some more at some point 2000-07-02 16:00:00 +00:00
Andi Gutmans b72a2738dc - Forgot ZEND_API 2000-07-02 15:39:54 +00:00
Andi Gutmans b9037f7d69 - Make PHP compile again under Windows.
- Please be careful when you make such changes.
2000-07-02 15:12:34 +00:00
Kristian Köhntopp 0249137148 unlink() is not a function related to HAVE_SYMLINK. It is being
used to delete files (actually, in Unix, names of files, as in
Unix nobody has deleted a file, ever).
2000-07-02 13:41:26 +00:00
Rui Hirokawa 074f52f382 added new functions: pg_setclientencoding, pg_clientencoding in Postgres-7.0. 2000-07-02 08:59:44 +00:00
4300d396b4 ChangeLog update 2000-07-02 01:09:08 +00:00
f54fca2cf6 NEWS update 2000-07-02 01:09:05 +00:00
Sterling Hughes b87f5e93a3 revert + note. 2000-07-01 22:39:27 +00:00
Sterling Hughes a43572123c - strdup -> estrdup
- check whether return_value array is initialized.
2000-07-01 21:34:45 +00:00
Rasmus Lerdorf 2b61d55b1d This is documented to not be case sensitive and it is not case sensitive
in PHP 3, so let's not make it case sensitive.
@Make the special Header("http/...") response be case insensitive like 3.0 (Rasmus)
2000-07-01 18:06:11 +00:00
Andi Gutmans 50e9b1fe36 - Commit tiny patch to remove redundant code by Amit Schreiber. 2000-07-01 12:23:09 +00:00
Sterling Hughes f5385608c1 stylistic modifications. 2000-07-01 01:43:37 +00:00
Sterling Hughes 8745b71fc6 definition. 2000-07-01 01:42:51 +00:00
Sterling Hughes 51370ab76c @- Allow cybercash to compile as a DL module. (Sterling)
-Allow cybercash to compile as a DL module.
-Stylistic changes.
-Add RETURN_STRINGL + Z_*_PP macros
2000-07-01 01:37:11 +00:00
440f8ad0a5 ChangeLog update 2000-07-01 01:09:09 +00:00
73908c2804 NEWS update 2000-07-01 01:09:06 +00:00
Sterling Hughes 857e80f5c6 Fix bug 4813. Fixed by greg@darkphoton.com 2000-06-30 22:44:20 +00:00
Sterling Hughes 7f7c14d9f5 @- Fixed the dbase_create function. (Sterling)
Fixed the dbase_create function.
2000-06-30 21:21:17 +00:00
Andrei Zmievski 1ca7f07d1a Typo. 2000-06-30 19:40:42 +00:00
Dan Kalowsky 5f81cba573 updates for the SolidEE to work for 3.5 with PHP4.0.1. Still causes warning of "integer from pointer used without typecast" but does not seem to effect the final build any. have not found a correction yet. has not shown the SQLParamData bug either, but unknown if it is closed as i was unable to reproduce it.
basically fixed the config.m4 file, and added a #define of HAVE_SOLID_35, due to the solidee 3.5 vs all other solidee systems being drastically different.  and solidtech providing no means for testing what version you are using.

does not include fixes for the linux users of glibc2 (automatically assumes libc5).  temporary work around, link your /usr/local/solid/lib files from a scll2x23 or scll2x30 to a scllux30 or scllux23 name...  suggestions to automate this are welcome.
2000-06-30 19:22:52 +00:00
Chuck Hagenbuch 353dcc835f DB::parseDSN() now checks the value it is passed, and if it is already an
array, returns it. This lets you pass arrays to the connect functions and
they'll work transparently.
2000-06-30 19:20:03 +00:00
Rasmus Lerdorf aa83dde27b Some user-agents send 'basic' instead of 'Basic' in their Authorization
header.  ApacheBench is an example.  PHP's HTTP Auth would not work with
these.
Some user-agents send 'basic' instead of 'Basic' in their Authorization
header.  ApacheBench is an example.  PHP's HTTP Auth would not work with
these. (Rasmus)
2000-06-30 17:39:21 +00:00
Zeev Suraski 5660a80cfc First Sybase-DB fix patch 2000-06-30 16:24:17 +00:00
Sam Ruby f72de266e2 remove unnecessary dependency 2000-06-30 14:33:46 +00:00
Zeev Suraski 397df3ca87 - Revert bogus time.h commit
- Fixed a problem under some versions of Windows that could cause PHP to hang
  on startup if errors occured, e.g. in the php.ini file
2000-06-30 13:23:08 +00:00
Zeev Suraski b3b67b04b7 Add a messagebox style that's safe to use from an ISAPI filter 2000-06-30 12:55:00 +00:00
Thies C. Arntzen 930b212c23 hmm, this file is not really auto-generated. 2000-06-30 12:31:24 +00:00
Zeev Suraski 37fb71b9ba Set version number on DLLs 2000-06-30 12:16:58 +00:00
Zeev Suraski 887495811b PHP modules should only be in the php_modules.dsw workspace... 2000-06-30 11:48:14 +00:00
Zeev Suraski fde2e61d54 error_reporting fix 2000-06-30 11:45:32 +00:00
Uwe Steinmann 33471de02a - using more of the zend API 2000-06-30 09:46:39 +00:00
Sam Ruby 2d8b72535f Fix garbage in warning strings, and IllegalArgumentException on
assignments which require data type conversions.
2000-06-30 04:48:46 +00:00
3def9079fd ChangeLog update 2000-06-30 01:09:04 +00:00
Sascha Schumann 69724dbc7c . 2000-06-30 00:40:07 +00:00
Zeev Suraski 7fb72c1726 Fixed opendir() thoroughly 2000-06-29 21:51:40 +00:00
Thies C. Arntzen 4e5597e061 welcome 4.0.2-dev 2000-06-29 17:37:58 +00:00
Andi Gutmans 1dcee33866 - Get rid of absolute path 2000-06-29 16:08:02 +00:00
Andi Gutmans bd8aeb5342 - Make pgsql compile on Windows. 2000-06-29 16:00:30 +00:00
Zeev Suraski f34b9d41be Add $context argument to error handler 2000-06-29 15:07:59 +00:00
Stanislav Malyshev a6b31f04cd Lowercase class name before checking for it
# I didn't really check it - have no WDDX
2000-06-29 14:50:23 +00:00
Stanislav Malyshev 740fc2f5de Lowercase class name before looking for it 2000-06-29 14:49:23 +00:00
Kristian Köhntopp 02cad904ee ezmlm_hash() function also available for php4. 2000-06-29 14:07:10 +00:00
Andi Gutmans 85422c3c60 - Extra newline crept in somehow 2000-06-29 13:34:58 +00:00
Stanislav Malyshev e8c219fef2 Make fgets not use maximal buffer length always, but shrink buffer
if it's too big.
2000-06-29 13:34:55 +00:00
Andi Gutmans 1f828a6e88 - Fix problem with DICARD_PATH being defined in windows 2000-06-29 13:31:52 +00:00
Andrei Zmievski a1b07b6303 Starting 4.0.2 changes. 2000-06-29 13:16:46 +00:00
Stanislav Malyshev 1d46433bfa Try to fix #5271 - crash when $HTTP_SESSION_VARS is already defined
via "global"
# I'm not sure it's fastest fix possible, but at least it should remove the
# crash
2000-06-29 13:09:27 +00:00
64293ba38f ChangeLog update 2000-06-29 01:09:08 +00:00
7f5c13db41 NEWS update 2000-06-29 01:09:05 +00:00
Zeev Suraski a31dc47ae4 Improve error handling code 2000-06-28 22:08:47 +00:00
Zeev Suraski 100196face Be HTML friendly 2000-06-28 21:31:50 +00:00
Andrei Zmievski fa5e623e95 Would be a useful thing to have. 2000-06-28 21:24:23 +00:00
Andrei Zmievski 49365eea79 Oops, didn't mean to commit that. 2000-06-28 20:09:04 +00:00
Andrei Zmievski 29e8e565c6 @- Added an optional parameter to preg_replace() that can be used to
@  specify how many replacements to make. (Andrei)
2000-06-28 20:07:26 +00:00
Andi Gutmans 3860254631 version update 2000-06-28 18:32:13 +00:00
Zeev Suraski 01a8f4606e I'm not sure whether this is necessary or not. Is it guarenteed that get_module_conf()
will always return a value?  Even if there were no relevant directives at all?
2000-06-28 18:27:13 +00:00
Andi Gutmans da8843aa55 - Fix problem with VIRTUAL_DIR and relative paths containing .. 2000-06-28 17:30:30 +00:00
Joey Smith b952c2c95a Added note about creating PDF documents in memory.
This is not quite complete, due to a bug in pdflib 3.0.
2000-06-28 11:44:32 +00:00
993803e997 ChangeLog update 2000-06-28 01:09:07 +00:00
3f4e93f7d0 NEWS update 2000-06-28 01:09:04 +00:00
Sascha Schumann 50595370e0 Cosmetic name change 2000-06-27 23:09:49 +00:00
Jouni Ahto e092c0c00c # Forgot this... 2000-06-27 22:25:51 +00:00
Jouni Ahto 8b8f191e59 # Reverting as requested. 2000-06-27 22:25:27 +00:00
Zeev Suraski 2fdd934f42 - Limit lines to 80 chars
- Let people know they don't have to use the ISAPI filter if they don't need
  HTTP authenatication
2000-06-27 21:39:41 +00:00
Jouni Ahto 1dfe76f5f6 - dba_[p]open accepts now a new parameter, which kind of database to create
(DBA_BTREE or DBA_HASH), if the handler is either 'db2' or 'db3' and
  mode 'c' or 'n'. It is ignored if mode is 'c' and the db already exists.
# Asked on the list 4 1/2 hours ago if anyone's got to say something to this,
# no response, so I'm assuming it's ok. And yes, I did test this.
2000-06-27 21:36:26 +00:00
Zeev Suraski c860633741 Fixed a bug in opendir(), which prevented readdir() from working properly if
the $dir argument wasn't explicitly specified
2000-06-27 18:44:30 +00:00
Zeev Suraski 130b9e7ef2 Revert the sendmail.c patch - it uses 4 different variables that aren't defined, and breaks
the Win32 build
2000-06-27 18:41:44 +00:00
Andi Gutmans eaa2a158c8 - Fix bug with VIRTUAL_DIR, .., and symlinks. 2000-06-27 18:18:18 +00:00
Sascha Schumann 7f059e7255 Use [\]n to refer to the two characters '\' and 'n'. This is the correct way
according to SUS II.

PR: #5212
2000-06-27 16:22:26 +00:00
Hartmut Holzgraefe 6f2843fa20 should now get multiple To: and Cc: recievers right
(code taken from php3 version)
2000-06-27 16:15:16 +00:00
Jouni Ahto 9322b9d9a5 (pg_loreadall) Was using zval ** but forgot to convert to use
zend_get_parameters_ex(). Fixes #5244.
2000-06-27 13:26:04 +00:00
Sam Ruby 36e57ea2ae add Java as a valid package 2000-06-27 10:39:45 +00:00
Sam Ruby e216b8918e defer loading of the native code 2000-06-27 10:37:40 +00:00
Thies C. Arntzen e834812a06 (fgetcsv) fixed leak 2000-06-27 09:55:52 +00:00
Thies C. Arntzen 9eb2c1efb1 @- Fixed a possible crash in the LDAP modify code. (Eric Kilfoil) 2000-06-27 09:28:05 +00:00
Andi Gutmans 2a7b5f9190 - Made discard-path work again 2000-06-27 04:45:53 +00:00
392e856bc2 ChangeLog update 2000-06-27 01:09:05 +00:00
Zeev Suraski 52dd20177c Removed 8KB limit on line length of the file() function 2000-06-26 20:52:04 +00:00
Zeev Suraski 33d4092590 - Disabled dl() when PHP is being used as a module inside a multithreaded web
server - it didn't work before, and caused weird results (Zeev)
2000-06-26 18:27:12 +00:00
Andi Gutmans 229b170885 - Don't depend on USE_PATH being equal to 1. Use #define value 2000-06-26 18:19:35 +00:00
Zeev Suraski 2c94141b12 Add missing enable_dl 2000-06-26 18:16:54 +00:00
Zeev Suraski cacbf1ea28 Support boolean NOT in the php.ini processor 2000-06-26 18:15:49 +00:00
Zeev Suraski 8e45536cf4 Make it possible to detect whether we're thread safe or not from PHP scripts and the php.ini
file
2000-06-26 18:15:33 +00:00
Andrei Zmievski 4010b422dd Separate plain name returned by php_sapi_module() and pretty name
used for output.
2000-06-26 18:05:55 +00:00
Egon Schmid bcb308c522 Fixed some protos. 2000-06-26 17:57:46 +00:00
Andi Gutmans fd11a7e13e - Pray this is an OK fix for the DISCARD_PATH junk 2000-06-26 17:57:03 +00:00
Zeev Suraski 90feef368b - Please NEVER copy fopen_wrappers.c functions to modules. They are ugly
- enough as is and need cleaning up. Duplicating the mess makes things just
- worse and prevents bug fixes in the functions from propogating throughout
- PHP.
- This fix is untested so someone who uses zlib, please test it and report
- back.
2000-06-26 17:40:24 +00:00
Stanislav Malyshev 8fd20c3ec7 Make exec() fwork on Unix again 2000-06-26 17:12:38 +00:00
Zeev Suraski 16c363182d TRACK_VARS is really no longer necessary... 2000-06-26 17:11:28 +00:00
Zeev Suraski 0beee41fc6 max_execution_time is no longer UNIX only... 2000-06-26 16:34:12 +00:00
Stanislav Malyshev 378440f7cf Right name for the function persist_alloc 2000-06-26 16:26:20 +00:00
Zeev Suraski c51ba263dd - Fix bug in virtual dir under Windows when using absolute paths without
- drive letter
2000-06-26 16:24:28 +00:00
Andi Gutmans 91ed009ae2 - Try two in fixing the problem with memory leaks reporting path_translated 2000-06-26 16:17:58 +00:00
Zeev Suraski effa42696e - Fix problem with filename being freed before possible memory leaks are
- reported by the memory manager
2000-06-26 15:55:59 +00:00
Andi Gutmans 1a22c1eb86 - Add another "\n" at the end of error messages. 2000-06-26 15:37:28 +00:00
Jouni Ahto 92b963bb2e - Fixed another missing test for existing functions in libgd.
# This too should go in 4.0.1 if just possible.
2000-06-26 15:23:52 +00:00
Zeev Suraski 202b8100ab Make max_execution_time work properly when set to 0 under Win32 (disable) 2000-06-26 15:17:36 +00:00
Kristian Köhntopp 2c32d120b2 Corrected a syntax error: Macro requires braces. 2000-06-26 14:55:38 +00:00
Kristian Köhntopp c54fa54e36 Added function php_sapi_name() as written by Stefan Livieratos. 2000-06-26 14:43:37 +00:00
Andrei Zmievski 95afe462bd ignore libs.mk 2000-06-26 13:23:03 +00:00
Andrei Zmievski bd41577eb9 Fix up news. 2000-06-26 13:22:19 +00:00
Stanislav Malyshev 5be54abf24 If we freed it, we might not touch it
# BTW, this is not a real fix - we still might use it
# when reporting memory leaks, but at least we won't reference
# unitialized memory
2000-06-26 12:26:40 +00:00
Jouni Ahto 29e5cf81bf - Test gdImagePaletteCopy and define HAVE_LIBGD15 if found.
- s/HAVE_LIBGD13/HAVE_LIBGD15/ in ImagePaletteCopy, ImageCopyMerge.
# This really should go into 4.0.1 or we'll get a lot of complaints from
# people using older versions of gd (because it still supports gif).
2000-06-26 12:23:02 +00:00
Stefan Roehrich ca7d7dbc01 Fix for configure not setting the library path. 2000-06-26 08:53:36 +00:00
Sterling Hughes ff127799e9 two too many. 2000-06-26 08:23:34 +00:00
794d1bfd15 ChangeLog update 2000-06-26 01:09:08 +00:00
86abde5497 NEWS update 2000-06-26 01:09:05 +00:00
Sascha Schumann 2573a5041f Fix Bison version check 2000-06-25 22:48:02 +00:00
Zeev Suraski c9fea52cf9 Update 2000-06-25 19:01:53 +00:00
Zeev Suraski 4afe6d0f60 Make the zlib DLL work with the stock zlib library 2000-06-25 19:00:38 +00:00
Zeev Suraski 7da710c060 - Update .dsp
- Add Win32 'spec' file
2000-06-25 18:54:55 +00:00
Jouni Ahto 2eee0aa546 Another late one. 2000-06-25 18:39:12 +00:00
Sterling Hughes 00df6fd744 Add it manually for the release. 2000-06-25 18:32:32 +00:00
Zeev Suraski 1be47784eb imap_sendmail.[ch] are missing... Whomever added them, please cvs add them and then
readd them to the project...
2000-06-25 18:29:05 +00:00
Andi Gutmans fabf824eac - Line breaks at 80 chars and change php4ts.dll -> php4isapi.dll 2000-06-25 18:18:29 +00:00
Andi Gutmans 6d67e11514 - The check for bison nukes $1 and $2 which are used later on in the script
- This needs to be fixed sometime. I have 1.28 on my system :)
2000-06-25 18:06:04 +00:00
Andi Gutmans 2e9f657aaf - Get ready to package 2000-06-25 18:00:57 +00:00
Egon Schmid 2deed22e5c Now its a todo. 2000-06-25 17:55:13 +00:00
Zeev Suraski 10e0303620 Get rid of a warning 2000-06-25 17:54:52 +00:00
Zeev Suraski a6b201c18c PHPAPI is invalid here... 2000-06-25 17:54:14 +00:00
Egon Schmid 9f0eba9f10 It was Jouni: Prevent Hartmut finding this until it is actually implemented... 2000-06-25 17:21:04 +00:00
Andi Gutmans f311ab1608 - I wrote a long msg but the commit didn't go through.
- So here is the short version:
- a) Start moving to binary opens in Windows
- b) Give checkuid_mode() a small face lift including the fopen-wrappers.c
- The mode to this function should at least be a #define but that is for
- another day. Anyway this whole stuff should be given more face lifts in
- the future.
2000-06-25 17:05:22 +00:00
Zeev Suraski 6614e8edb4 - I wrote a long msg but the commit didn't go through.
- So here is the short version:
- a) Start moving to binary opens in Windows
- b) Give checkuid_mode() a small face lift including the fopen-wrappers.c
- The mode to this function should at least be a #define but that is for
- another day. Anyway this whole stuff should be given more face lifts in
- the future.
2000-06-25 17:02:59 +00:00
Zeev Suraski ba69d9958d Add Win32 README file 2000-06-25 16:48:17 +00:00
Sascha Schumann 763e1f3a09 better description for recent serializer change 2000-06-25 15:53:44 +00:00
Egon Schmid 5f98304f55 The second array_merge() is now array_merge_recursive(). 2000-06-25 13:21:37 +00:00
Egon Schmid b0d0aff6a8 A droto is not a proto. 2000-06-25 10:59:42 +00:00
Sterling Hughes 5a241ca1af Add version checking. 2000-06-25 03:26:49 +00:00
Jouni Ahto 3d5fd994e7 # Missing ; 2000-06-25 03:12:38 +00:00
Sterling Hughes 3d75fcae68 Proto. 2000-06-25 03:06:38 +00:00
Sterling Hughes ff1b4be80c @- Added the ImageCopyMerge, ImagePaletteCopy and ImageColorClosestHWB functions. (Sterling)
-Added the ImageCopyMerge, ImagePaletteCopy and ImageColorClosestHWB functions
2000-06-25 02:55:31 +00:00
Jouni Ahto 4dfdac7fba - Added imagecreatefromwbmp().
- Fixed missing parenthesis when calling function get_active_function_name.
@- Added function imagecreatefromwbmp(). (Jouni)
2000-06-25 01:44:15 +00:00
1d4f22bf63 ChangeLog update 2000-06-25 01:09:05 +00:00
Zeev Suraski b896825e8f Nuke a warning 2000-06-24 22:11:11 +00:00
Egon Schmid ac523aa37e Correct protos call_user_func() and call_user_method(). 2000-06-24 18:46:17 +00:00
Andi Gutmans 2a5a064a03 - winsnmp.c has moved to ext/snmp 2000-06-24 18:31:22 +00:00
Sascha Schumann 66e4f71040 Revice winsnmp.c from repo-copy 2000-06-24 17:10:57 +00:00
Zeev Suraski 515d7e7dae credit where credit's due 2000-06-24 16:32:25 +00:00
Zeev Suraski cb5891d277 Apply the NSAPI patch 2000-06-24 16:31:10 +00:00
Jouni Ahto 8f1ff9e85e - Close cursor immediately before reuse so that calling ibase_free_result is
not necessary anymore. Seems to also prevent a a situation where at request
  shutdown cursor was first dropped and tried to close it afterwards when
  all the resources were not manually freed, and could occasionally segfault.
2000-06-24 16:24:29 +00:00
Andi Gutmans 303dc9e96a - Forgot to remove comment 2000-06-24 16:24:01 +00:00
Andi Gutmans 4b5e7d6618 - Only use VIRTUAL_DIR in ZTS mode until it is thoroughly tested.
- Mutex popen() in Windows as the UNIX trick doesn't work there.
2000-06-24 16:10:18 +00:00
Sascha Schumann dfaaa8ff95 Also install XML-related header files. 2000-06-24 15:45:24 +00:00
Sascha Schumann 5b315e1304 Get rid of files in the dl directory hierarchy.
PHP compiles without them under Unix, please test this also under Win32.
2000-06-24 15:41:46 +00:00
Sascha Schumann 0c03253635 Stop including dl/phpdl.h. 2000-06-24 15:36:04 +00:00
Zeev Suraski d1a6a64675 - Make the output globals accessible from the outside world
- Fix Win32 compilation
2000-06-24 13:27:34 +00:00
Sascha Schumann ee5e330bcf alloc.h has been removed from the Apache 1.3 CVS tree 2000-06-24 11:39:37 +00:00
Joey Smith d47e4b8617 Fix for bug #3983 2000-06-24 09:01:51 +00:00
Andi Gutmans b0c7ac2dc1 - Entries start with capital letters 2000-06-24 08:45:57 +00:00
Hartmut Holzgraefe a67157c2c2 <funcprototype> added to xml generation 2000-06-24 07:40:32 +00:00
1c16ed47bc ChangeLog update 2000-06-24 01:09:08 +00:00
50aec09e04 NEWS update 2000-06-24 01:09:05 +00:00
Zeev Suraski 89efa59e98 Fix Win32 compilation 2000-06-23 23:13:35 +00:00
Egon Schmid e9484d5c37 Added a description to get_browser(). 2000-06-23 19:55:49 +00:00
Egon Schmid d049d4a6bd Fixed protos. 2000-06-23 17:37:49 +00:00
Egon Schmid 10249f2dfb Typos. 2000-06-23 17:09:54 +00:00
Sascha Schumann eadbbec532 Make use of incomplete class API 2000-06-23 17:00:47 +00:00
Sascha Schumann 1702067ac0 API change: Use zval * instead of zval ** 2000-06-23 16:58:30 +00:00
Sascha Schumann 091dc3840d Move the incomplete class stuff into its own file, so that we can
make it easier accessible to WDDX.
2000-06-23 16:46:04 +00:00
Rasmus Lerdorf 940f58c2de Fix UdmSearch spelling 2000-06-23 16:37:56 +00:00
Sascha Schumann e708c0ba70 . 2000-06-23 16:29:46 +00:00
Sascha Schumann 2297f670b1 Change the serialization semantics to:
* if a certain object is of class INCOMPLETE_CLASS, the serializer will
    lookup the previously stored original class name of that object, and
    use that class name to serialize the object.

Change the deserialization semantics to:

  * if the class of an object, which is to be instantiated, is not found
    in the current context, the class name will be stored for later
    retrieval, and the class of that object is changed to INCOMPLETE_CLASS.

All function calls, property gets, and property sets operating on an
object of class INCOMPLETE_CLASS cause the execution to halt and to
output an informative error message.
2000-06-23 16:21:31 +00:00
Andi Gutmans d8a75cf7e5 - COMPILE_ERROR should only be used in Zend 2000-06-23 13:05:06 +00:00
Thies C. Arntzen cfa7028d66 @- added spliti() function. (Thies) 2000-06-23 11:48:02 +00:00
Hartmut Holzgraefe 7d3341bee3 debug-code removed 2000-06-23 05:49:32 +00:00
Hartmut Holzgraefe 234f029727 this change should solve all problems regarding trans_sid_id and
"empty" href urls like "", "#name", "?param=val" ...
2000-06-23 05:42:41 +00:00
388f7cdccc ChangeLog update 2000-06-23 01:09:05 +00:00
Sascha Schumann 2456af596f Remove some unnecessary CLS_FETCH()s. 2000-06-23 00:53:33 +00:00
Rasmus Lerdorf 9b9ab1793f Fix spacing and say that --with-oracle uses the oci7 interface 2000-06-23 00:46:05 +00:00
Andi Gutmans 684dca9aca - Not returning a value anymore 2000-06-23 00:11:54 +00:00
Andi Gutmans fd7dc3024c - Don't need SUCCESS/FAILURE anymore 2000-06-23 00:07:05 +00:00
Andi Gutmans 947e17b1da - Add license 2000-06-23 00:04:53 +00:00
Andi Gutmans 56adbffdbf - Commit static allocator structure which we might use in an upcoming Zend
- change
2000-06-23 00:04:05 +00:00
Andi Gutmans 63526e633e - Fix asp_tags. 2000-06-22 23:00:01 +00:00
Andi Gutmans cb62c5d5f8 - Make Windows compile. Was missing crc32.c 2000-06-22 21:24:44 +00:00
Andi Gutmans e16710f1b5 - Oops I miss-wrote that field 2000-06-22 18:50:55 +00:00
Andi Gutmans a536df5327 - Change API version and make the error messages more meaningful. 2000-06-22 18:47:39 +00:00
Zeev Suraski 3998034acb Update to 4.0.1 2000-06-22 18:35:09 +00:00
Andi Gutmans 93e9520314 - Change cache size and only initialize part of it. 2000-06-22 18:33:09 +00:00
Andi Gutmans 22bb1fbe5f - Improve memory cache performance and increase cache size. (Stas, Zend Engine) 2000-06-22 18:30:10 +00:00
Stanislav Malyshev bb57053f76 Cached-freed memory blocks should not be in "occupied" list 2000-06-22 17:51:14 +00:00
Stanislav Malyshev 7f87a319aa Make cache counters to be unsigned int
Start collecting statistics after cache pre-fill
2000-06-22 09:17:38 +00:00
f9f8691feb ChangeLog update 2000-06-22 01:09:09 +00:00
268a981c3a NEWS update 2000-06-22 01:09:06 +00:00
Rasmus Lerdorf 777f8dccca Add a crc32 checksum function - used by the udm_search search engine
and currently run through a system call.  This will speed up the udm_search
php frontend significantly.
@ Add a crc32 checksum function - used by the udm_search search engine
@ and currently run through a system call.  This will speed up the udm_search
@ php frontend significantly. (Rasmus)
2000-06-21 22:51:29 +00:00
Sascha Schumann de5e2a58df Add alloca.h check
Remove some unused header checks
2000-06-21 21:49:33 +00:00
Sascha Schumann 322be14458 HAVE_MEMORY_H is not used by PHP. 2000-06-21 21:48:14 +00:00
Sascha Schumann 9d640cc990 Revert earlier commit. 2000-06-21 18:35:54 +00:00
Thies C. Arntzen bc8d0782dd unserialize() and wddx_deserialize() now create an empty class if they enconter
a class which's code is yet unknown. this makes sessionized data retain the
class name of objects even if you visited pages that don't have the classes
code available.
2000-06-21 18:22:22 +00:00
Chuck Hagenbuch c80c71f48b Here is a brief start towards getting the DB stuff up to speed and working
(I need it to move forward on some stuff, and I really do want to see PEAR
succeed, so I'm going to work with the official code to get it working. Hope
that's okay). I've replaced all instances of 'use' and 'import' with
'include_once' (and added the .php extension where necessary). This gets my
short test script working. More possibly to come.
2000-06-21 02:22:04 +00:00
7c43b6829f ChangeLog update 2000-06-21 01:09:05 +00:00
Zeev Suraski 35e3efbd41 Warn about using the built-in MySQL library 2000-06-20 22:12:22 +00:00
Zeev Suraski d57210fb0b This is no longer needed 2000-06-20 21:50:57 +00:00
Andrei Zmievski cd5b7dd64a bonsai test 2000-06-20 19:21:11 +00:00
Ben Mansell 6a449f2b02 Initialise lcg_globals correctly
# Fixes bug 5075
2000-06-20 11:35:12 +00:00
a18d4d2085 ChangeLog update 2000-06-20 02:14:19 +00:00
Egon Schmid 772e4fa41a Canged back to uppercase. Are all the backslashes on line 69 to 111 really needed? 2000-06-19 22:12:57 +00:00
Sascha Schumann 8741aa825d Unbreak imap by fixing the assignment 2000-06-19 21:35:01 +00:00
Uwe Steinmann ffbb3c8bd8 - minor changes 2000-06-19 19:46:24 +00:00
Uwe Steinmann c454a4156e - added prototype 2000-06-19 19:45:53 +00:00
Andrei Zmievski ff3b0c84a3 Call __wakeup() after all the instance variables are initialized. 2000-06-19 14:04:57 +00:00
Thies C. Arntzen f8c0f76881 kill warinig 2000-06-19 12:56:30 +00:00
Thies C. Arntzen 8c9e222689 good morning, thies! 2000-06-19 09:27:17 +00:00
Thies C. Arntzen 388195de8b some adjustments to the sysliblist
# still needs some fixing - sascha?
2000-06-19 09:16:58 +00:00
Thies C. Arntzen 520602ae4e (fsockopen) fix #5090 2000-06-19 09:02:48 +00:00
Andi Gutmans b831ca7d64 - Fixed problem in imap_fetch_overview 2000-06-19 04:33:40 +00:00
7d6784d98d ChangeLog update 2000-06-19 02:14:20 +00:00
fe8f752946 NEWS update 2000-06-19 02:14:17 +00:00
Andi Gutmans baadf90fb5 - Nuke warning 2000-06-18 20:09:17 +00:00
Egon Schmid c3cc31c745 No response from Sascha so changed to lowercase. 2000-06-18 20:01:45 +00:00
Egon Schmid dd43255b27 More protos. 2000-06-18 19:18:30 +00:00
Holger Zimmermann e15172f0e2 Changed strtok_r to php_strtok_r 2000-06-18 19:04:50 +00:00
Holger Zimmermann fce46168d1 Changed strtok_r to php_strtok_r 2000-06-18 19:01:54 +00:00
Jouni Ahto 98087ab562 - Fix return type in proto once again... 2000-06-18 17:36:31 +00:00
Sascha Schumann 15925864b2 fp_except check for FreeBSD 1.0-2.2.5 2000-06-18 16:51:42 +00:00
Sascha Schumann 0404a02430 Welcome zend_finite(n).
This chooses the best combination of what is available:

finite, isfinite, isinf, isnan
2000-06-18 16:33:15 +00:00
Egon Schmid 6e815b76ea Some protos fixed. 2000-06-18 16:31:52 +00:00
Jouni Ahto 153ef54498 - Fix return type in proto. 2000-06-18 16:07:06 +00:00
Stanislav Malyshev 536221be39 Make error callback be publicly accessible 2000-06-18 16:02:32 +00:00
Andi Gutmans 4a6869c98e - Better FreeBSD fix. Does fp_except_t exist on 3.4? 2000-06-18 15:44:23 +00:00
Sascha Schumann 80a05cd78c Cosmetic cleanups 2000-06-18 15:30:55 +00:00
Thies C. Arntzen 5b1f7bc8ac (implode), (strtr) no longer touch the internal array-pointer. 2000-06-18 10:37:01 +00:00
Thies C. Arntzen 405d07de96 (serialize) no longer touches the internal array-pointer 2000-06-18 10:25:39 +00:00
Sascha Schumann 8975f1dceb Readd pi3web_sapi.c and reset flags. 2000-06-18 10:21:20 +00:00
Andi Gutmans 53a5eccf66 - I don't know how this happened. I tested the bloody thing and I remember
- copy&pasting from code which used ~.
2000-06-18 04:22:12 +00:00
Andrei Zmievski 10b5f74855 One more place. 2000-06-18 03:45:08 +00:00
Andrei Zmievski 789aa48043 @- Modified in_array() to not touch array pointer. (Andrei) 2000-06-18 03:43:58 +00:00
6b8afa5d42 ChangeLog update 2000-06-18 02:14:18 +00:00
Rasmus Lerdorf fd50caf95a Slightly more accurate description here 2000-06-18 00:12:31 +00:00
Andrei Zmievski 0ffda3cc49 Relic from cvs conflict? 2000-06-17 18:32:53 +00:00
Zeev Suraski 34c2b0a07c - Add restore_error_handler()
error_handler's are now stored in a stack
2000-06-17 18:04:58 +00:00
Zeev Suraski 66f1be08c8 Update news 2000-06-17 18:03:25 +00:00
Andi Gutmans 4b57e0e9f7 - Add notice about CGI fix 2000-06-17 17:43:11 +00:00
Zeev Suraski 3cda6a750e Allow the symbol_table to be passed to call_user_function_ex() 2000-06-17 16:50:38 +00:00
Zeev Suraski da66298659 - Fix a couple of wranings in the FTP code and in parsedate.y
- Be safer with LC_MESSAGES
- Align with the latest Zend change in call_user_function_ex()
2000-06-17 16:49:03 +00:00
Andrei Zmievski eb6f625d83 Wrong number of commas. 2000-06-17 16:13:11 +00:00
Andrei Zmievski 6e1dee8c1e Have to use zval_ptr_dtor() on values returned from user functions. 2000-06-17 15:53:33 +00:00
Andi Gutmans a4edfc06c5 - Export ts_resource_ex in order to succesfully build Windows version 2000-06-17 14:56:19 +00:00
Andi Gutmans 1e5a405c5c - Make Windows compile
- Windows doesn't support LC_MESSAGES
2000-06-17 14:48:03 +00:00
Zeev Suraski 7957b20b48 Fix filenames and line numbers in ZTS mode 2000-06-17 14:12:58 +00:00
Zeev Suraski 38cdb8e7b7 Avoid crashing with recursive applies - limit apply nest level to 3 (I'm not aware of a place
in which applying recursively on the same hash makes sense with more than one nest level, but
3 should be enough)
2000-06-17 14:11:57 +00:00
Holger Zimmermann 49b4ac0a1c Announced Pi3Web support 2000-06-17 13:02:00 +00:00
Holger Zimmermann da132274a4 Added Pi3Web support 2000-06-17 12:06:09 +00:00
Sascha Schumann d3d350e7ce Suppress AC_ADD_LIBRARY(x) where x is matched by /^(c|c_r|pthread*)$/ 2000-06-17 10:53:08 +00:00
Sascha Schumann 9b509a3bad Make use of the new macros PHP_EVAL_LIBLINE and PHP_EVAL_INCLINE 2000-06-17 10:51:26 +00:00
Sascha Schumann 9a63d8af7f Add PHP_EVAL_LIBLINE and PHP_EVAL_INCLINE 2000-06-17 10:50:42 +00:00
Jouni Ahto 3fb9b8f42d - Missed one if() and cosmetic changes. 2000-06-17 10:10:20 +00:00
Hartmut Holzgraefe 1d92510032 changed default cell alignment to "left" (see bug id #5048) 2000-06-17 07:08:53 +00:00
Hartmut Holzgraefe 34cc1de229 setlocale didn't recognize LC_MESSAGES (BUG ID#3957) 2000-06-17 06:25:47 +00:00
Hartmut Holzgraefe 5d6516be86 look for apxs in /usr/sbin (that's where SUSE puts it)
if no path is given and apxs is not found in $PATH
2000-06-17 06:22:40 +00:00
80b4f8fa5b ChangeLog update 2000-06-17 02:14:20 +00:00
c141fcbf53 NEWS update 2000-06-17 02:14:17 +00:00
Hartmut Holzgraefe 21785afbe8 fix for BUG #5066 2000-06-16 22:08:50 +00:00
Andrei Zmievski 39aa0c4d3a Just to make extra sure. 2000-06-16 19:55:51 +00:00
Andrei Zmievski f14961b005 Plug a memory leak: retval_ptr should be destroyed. 2000-06-16 19:53:06 +00:00
Andrei Zmievski fa9b168161 @- Enhanced WDDX functions to call __sleep() and __wakeup() when working on
@  objects. (Andrei)
2000-06-16 19:50:45 +00:00
Hartmut Holzgraefe d19a44a6aa typo fix 2000-06-16 18:46:57 +00:00
Hartmut Holzgraefe 95ca9db755 retro-patch from // comments, theese where private experimental changes 2000-06-16 18:42:56 +00:00
Andrei Zmievski 71d4206074 Typo. 2000-06-16 18:36:30 +00:00
Hartmut Holzgraefe 87a491d7b6 C++ // comments are evil ... 2000-06-16 18:24:02 +00:00
Egon Schmid c6ddfd4440 Protos looks now equal in both versions. 2000-06-16 18:14:51 +00:00
Zeev Suraski 33f9499975 Make it possible to access other threads' local storage. Only use it if you have a clear
knowledge of what you're doing!
2000-06-16 14:38:05 +00:00
Zeev Suraski 84eb48f0a1 Ok, this time here's some real Win32 system programming :)
Redesigned the timeout system using a single timeout thread and a single window,
and used a much quicker check.
2000-06-16 14:27:28 +00:00
Thies C. Arntzen 43d91224f6 @- Changed WDDX to serialize arrays as structs only if needed. (Thies) 2000-06-16 14:11:01 +00:00
Sascha Schumann 8f8889d02d More main work 2000-06-16 11:07:13 +00:00
Sascha Schumann 6c68ac0def Some stuff has moved to main 2000-06-16 10:45:36 +00:00
Jouni Ahto f5888acfba - Forgot to test check for errors in two places. 2000-06-16 10:09:12 +00:00
Andi Gutmans bd900fb66b - Make Windows compile 2000-06-16 08:02:33 +00:00
Andi Gutmans ae11748038 Fix UNIX build 2000-06-16 02:49:21 +00:00
Zeev Suraski a6d9b5ed18 Macro it up the right way 2000-06-16 02:48:35 +00:00
Zeev Suraski b791918443 Macro this up, so it can be moved to other places 2000-06-16 02:47:00 +00:00
Zeev Suraski c885f468aa Improve timeout support - ini_get("max_execution_time", ...) works now 2000-06-16 02:27:47 +00:00
090d39b7b1 ChangeLog update 2000-06-16 02:14:19 +00:00
baad58df05 NEWS update 2000-06-16 02:14:16 +00:00
Zeev Suraski ef0bd3d102 - Move timeout code to Zend
- Implement timeouts in Win32
2000-06-16 01:54:56 +00:00
Zeev Suraski f29eae1302 Move timeout code to Zend, allow Win32 timeouts
@- Implemented max_execution_time under Win32 (Zeev)
2000-06-16 01:53:35 +00:00
Andi Gutmans e3ae196da8 - Don't need to check doc_root's length twice 2000-06-16 01:25:02 +00:00
Andi Gutmans f8ecf34bf1 - Last one for tonight. Make sure that we don't check uninitialized
- memory
2000-06-16 01:23:03 +00:00
Andi Gutmans b73a6f883d - Last patch for tonight. A more optimized way to check for absolute path
- in Windows. This should be fixed to use the virtual cwd macro for
- ABSOLUTE_DIR() but I need to have time to understand the logic first
2000-06-16 01:14:08 +00:00
Andi Gutmans 70b8e3e8f6 - Missed a bracket 2000-06-16 01:08:39 +00:00
Andi Gutmans cbfa4c88d9 - Beautify fopen-wrappers a bit.
- Still needs quite a lot of improvement in order to treat Windows well
2000-06-16 00:56:38 +00:00
Andi Gutmans 2987d5216e - More #if WIN32|WINNT -> #ifdef PHP_WIN32 conversions 2000-06-15 23:45:05 +00:00
Andi Gutmans 17ce56825d - Beautify a bit 2000-06-15 22:46:17 +00:00
Andi Gutmans fcefeee914 - Try and fix crash with CGI.
- Please check out the comment I wrote in init_request_info(). There was a
- lot of code there which was running for no apparent reason. Should it be
- removed or should it actually run?
2000-06-15 22:40:52 +00:00
Andrei Zmievski e48192fbb5 Use hardcoded 3600 seconds offset instead of altzone which may not be present
on all systems.
2000-06-15 22:23:08 +00:00
Andi Gutmans 4c99114a25 - Unncessary SLS_FETCH(); 2000-06-15 21:34:00 +00:00
Zeev Suraski 8b794bb1dd Fix non thread-safe mode - asp_tags/short_tags etc weren't getting initialized properly 2000-06-15 19:18:57 +00:00
Andi Gutmans e1705c0810 *** empty log message *** 2000-06-15 19:09:51 +00:00
Brian Moon e38d7accb7 set_file_buffer was not being exported. This is now fixed. 2000-06-15 19:02:02 +00:00
Andi Gutmans fa02b85082 *** empty log message *** 2000-06-15 18:51:21 +00:00
Andi Gutmans 447bf163ef - Support multiple arguments to unset() 2000-06-15 18:48:33 +00:00
Andi Gutmans 7d5cfd3766 - virtual_fopen() should fail on empty path 2000-06-15 18:36:46 +00:00
Thies C. Arntzen 3ad9d62949 ups. 2000-06-15 18:23:18 +00:00
Thies C. Arntzen 565400780b changed return type of ZEND_VERIFY_RESOURCE from FALSE to NULL 2000-06-15 18:15:51 +00:00
Thies C. Arntzen a99ca5a64a . 2000-06-15 18:15:44 +00:00
Andrei Zmievski fbbbcdbaa7 Another entry. 2000-06-15 16:28:19 +00:00
Andrei Zmievski 59b455cf2f @- Updated strtotime() to handle many more formats. It now has complete
@  feature parity with GNU date command. (Andrei)
2000-06-15 16:24:10 +00:00
Thies C. Arntzen bd06de9ae9 fixed typo 2000-06-15 14:13:53 +00:00
Andrei Zmievski cd40d5df9f Add php_version.h. 2000-06-15 13:17:18 +00:00
Uwe Steinmann a35d575ba6 - changes to handle the slightly different access to attributes 2000-06-15 07:06:38 +00:00
Uwe Steinmann 785fd93311 - fixed problems with missing attributes due to a change
in libxml 2.0.0
2000-06-15 07:05:38 +00:00
Chuck Hagenbuch 2db5dc37c8 patch from jtaskine@hit.fi - add deleted info to imap_mailboxmsginfo() and
fix some prototype info.
2000-06-15 03:02:36 +00:00
d532ba06c6 ChangeLog update 2000-06-15 02:14:29 +00:00
a5f1a555f3 NEWS update 2000-06-15 02:14:26 +00:00
Jouni Ahto 495a957c99 - Fixed incorrect code generated when all parameters are optional.
- Fixed handling of grouped optional parameters.
- Added an option to generate xml documentation.
- Added an option not to be nice and helpful and create all kinds
  of comments and testing functions.
- Added on option to create function stubs only.
- Added options --assing-params and --string-lens that change
  the generated code.
- Updated documentation.
2000-06-15 01:57:23 +00:00
Hartmut Holzgraefe 9ded807a20 return FALSE from strftime on negative timestamp values
they do not make sense anyway and seem to crash win2k
2000-06-14 22:11:10 +00:00
Rasmus Lerdorf f38e760c39 Refine checkdate() fix to accept numeric strings and floating point as well 2000-06-14 20:31:31 +00:00
Sascha Schumann 7565347ba0 Move some stuff to zend_operators.h which is required by the
moved inline functions.
2000-06-14 19:55:32 +00:00
Andi Gutmans 988435cf04 - More correct way of doing bit mask 2000-06-14 19:10:30 +00:00
Zeev Suraski c532a70746 @- Moved VC++ Win32 project and workspace files to the win32 directory
@  (Zeev)
2000-06-14 18:06:31 +00:00
Thies C. Arntzen 424b2e83b8 reminder 2000-06-14 17:01:01 +00:00
Rasmus Lerdorf 0b5ca3f7d5 Require the year arg to checkdate to be an integer - fix for bug #5034
@Require the year arg to checkdate to be an integer (Rasmus)
2000-06-14 16:35:48 +00:00
Zeev Suraski 79f857b323 Thoroughly fix .dsp problems - restore custom builds 2000-06-14 16:06:44 +00:00
Andrei Zmievski 34a7f94d57 test 2000-06-14 15:37:06 +00:00
Thies C. Arntzen 4292f89345 no c++ comments, please 2000-06-14 12:28:21 +00:00
Egon Schmid 190e2e73e9 Fix for #5028. 2000-06-14 11:51:43 +00:00
Sam Ruby 988302171a Find servlet includes in new "main" directory. Add (finally) java and
servlet to the list of projects
2000-06-14 11:25:54 +00:00
Sascha Schumann e53b791b3e Copy header files from main and also add that directory to the list
of include directories.
2000-06-14 08:30:37 +00:00
Sascha Schumann 177e77fdab . 2000-06-14 07:39:41 +00:00
Sascha Schumann 17fe680117 Only replaced C0X and C0x, but not c0x.. 2000-06-14 07:08:08 +00:00
Sascha Schumann 35f43ad274 Rename C0x-inline to C9x-inline, and frame preprocessor directives in
zend_gcc_inline.c with #ifndef C9X_INLINE_SEMANTICS..#endif.
2000-06-14 07:06:33 +00:00
Sascha Schumann e4e7047e4a Use the new PHP_GEN_* macros in pear 2000-06-14 06:30:14 +00:00
Jouni Ahto 3ca7eb7485 # Prevent Hartmut finding this until it is actually implemented... 2000-06-14 05:11:16 +00:00
Andi Gutmans 239d30bbee - Make Win32 build 2000-06-14 04:10:34 +00:00
7272d029a5 ChangeLog update 2000-06-14 02:14:39 +00:00
Sam Ruby f775d18b2c Export the necessary functions to enable servlet support to be subclassed
This is in preparation for xml-cocoon support
2000-06-14 01:41:13 +00:00
Andrei Zmievski aa49d4af62 Plus a leak when both register_globals and track_vars are off. 2000-06-13 20:59:23 +00:00
Stig Venaas b595b1f01a News of ldap_add() and ldap_modify() fix. 2000-06-13 19:57:15 +00:00
Stig Venaas a2bdc522f5 Also need to 0-terminate when adding/modifying an array of values. 2000-06-13 19:50:05 +00:00
Stig Venaas aa5c0ffcbf Think have to 0-terminate mod_values strings, got trailing garbage,
this fixes bug #5001 I think.
2000-06-13 19:35:56 +00:00
Andi Gutmans 727398b2d4 Add to the API 2000-06-13 19:01:22 +00:00
Andrei Zmievski e5360259a4 We should define symlink functions only when HAVE_SYMLINK is defined.
Otherwise, they should be aliased as not available.
2000-06-13 18:07:19 +00:00
Sascha Schumann 111d36a3c8 Due to creating the Makefiles later, generating libphp4.module failed,
because sapi/apache had not been created. This applies to VPATH builds
only.
2000-06-13 18:02:28 +00:00
Sascha Schumann df74f1dfab Add optional support for C0x inline semantics.
These are enabled by specifying `--enable-c0x-inline' on the command
line. We might add an autoconf check for this particular feature
later.
2000-06-13 17:58:33 +00:00
Andrei Zmievski 307a234879 array_uniq() has been implemented by someone else. 2000-06-13 17:47:05 +00:00
Sascha Schumann 3ce3e9ba27 Include <math.h> in php_math.h. This is necessary, because we might
otherwise redefine system macros.
2000-06-13 16:35:40 +00:00
Sascha Schumann 66175ef9fe Delete phpdir.h. Someone moved this to php_dir.h in the past and
forgot to delete it.
2000-06-13 16:34:18 +00:00
Sascha Schumann d1c1e99d98 Rename phpmath.h to php_math.h. 2000-06-13 16:31:57 +00:00
Thies C. Arntzen 7dca298b21 copy() now creates the destination file with mode 0777 again. this is
the way it used to be in PHP 3
2000-06-13 15:48:38 +00:00
Andrei Zmievski 16b6a3f5e4 Damn. 2000-06-13 14:49:25 +00:00
Andrei Zmievski 598f9f52b7 Forgot to add this yesterday. 2000-06-13 14:47:10 +00:00
Jim Jagielski 981e1ae7b8 O_APPEND breaks 'c' for DBM files - this is handled
correctly by PHP3, so it's almost a forward'' port :)
2000-06-13 14:37:34 +00:00
Sascha Schumann 13692ff313 Add llist_apply_func_t and make prototypes use the typedefs. 2000-06-13 09:18:06 +00:00
Sascha Schumann 6caf633cf7 Proper casts 2000-06-13 09:17:06 +00:00
Sascha Schumann 5bbc4114f1 Remove extra cast. ch' is already of type char *'.
This unbreaks the build with xlc on AIX.
2000-06-13 09:09:33 +00:00
Sascha Schumann 165361a515 Remove single ; 2000-06-13 09:06:31 +00:00
Sascha Schumann 6ebdd64d3c Fix spelling 2000-06-13 07:49:17 +00:00
Andrei Zmievski c85390a691 (php_math_number_format) Simplifying the logic also fixed bugs #4954
and #4998.
2000-06-13 04:31:02 +00:00
6303aec7ff ChangeLog update 2000-06-13 02:15:03 +00:00
ce826716d5 NEWS update 2000-06-13 02:14:49 +00:00
Chuck Hagenbuch d6a55b532c Check more locations. Submitted by Anil Madhavapeddy <anil@recoil.org> 2000-06-13 00:57:58 +00:00
David Hedbor cefc1f2336 Removed obsolete, commented line 2000-06-12 23:41:34 +00:00
Zeev Suraski 6b8059afe9 Make Egon happy :) 2000-06-12 22:03:53 +00:00
Zeev Suraski 53e19d5102 Fix verified, update news 2000-06-12 21:41:56 +00:00
Zeev Suraski 1f0049158a @- Fixed an initialization problem in the MS-SQL problem that could cause
@  a crash in mssql_query() (Zeev)
2000-06-12 21:39:51 +00:00
Zeev Suraski 6bbf0105af Fix a bug in extension_dir, where PG(extension_dir) is not yet initialized by the time php_dl() is called 2000-06-12 21:01:03 +00:00
Frank M. Kromann 8cae0bf725 making zlib module compile on win32 with new directory structure 2000-06-12 20:34:35 +00:00
Frank M. Kromann 16380b0155 making oracle module compile on win32 with new directory structure 2000-06-12 20:34:17 +00:00
Frank M. Kromann 3afe0e2ed1 making oci8 module compile on win32 with new directory structure 2000-06-12 20:33:55 +00:00
Frank M. Kromann 0d3085944f making ldap module compile on win32 with new directory structure 2000-06-12 20:33:32 +00:00
Frank M. Kromann d973e2c25b making java module compile on win32 with new directory structure 2000-06-12 20:33:12 +00:00
Frank M. Kromann a52af6cd7c making imap module compile on win32 with new directory structure 2000-06-12 20:32:52 +00:00
Frank M. Kromann 66a172c9b4 making ftp module compile on win32 with new directory structure 2000-06-12 20:32:23 +00:00
Frank M. Kromann 618c98179b making exif module compile on win32 with new directory structure 2000-06-12 20:31:45 +00:00
Frank M. Kromann 28b8d17c28 making calendar module compile on win32 with new directory structure 2000-06-12 20:31:03 +00:00
Zeev Suraski e962769fee Return the previous error handler from set_error_handler() 2000-06-12 20:31:02 +00:00
Zeev Suraski 61c0f610dc news update 2000-06-12 20:30:52 +00:00
Zeev Suraski fce92e3ca2 Avoid using E_CORE_* errorlevels in any place which is not in the global startup sequence 2000-06-12 20:22:17 +00:00
Frank M. Kromann 2c5c26f205 making MSSQL module compile with new directory structure 2000-06-12 20:16:07 +00:00
Andrei Zmievski 7ef638aa30 @- Upgraded PCRE to version 3.2 and fixed a bug when anchored pattern
@  matched an empty string. (Andrei)
2000-06-12 19:55:58 +00:00
Andrei Zmievski 318a59d302 Document change. 2000-06-12 19:41:33 +00:00
Andi Gutmans 719d995a9d - On UNIX support popen() which works with current working directory
- when in VIRTUAL_DIR mode.
2000-06-12 19:39:04 +00:00
Andrei Zmievski 5d51452545 Make gdttf.c work with virtual dir support. 2000-06-12 19:13:21 +00:00
Andi Gutmans 02c42362ff - Start of popen() fix for UNIX. Still unclear what we'll do on Windows. 2000-06-12 18:48:18 +00:00
Zeev Suraski 5be482030e Killed <?php_track_vars?> 2000-06-12 16:07:25 +00:00
Zeev Suraski 968d2c5b33 Get rid of <?php_track_vars?> 2000-06-12 16:07:15 +00:00
Andrei Zmievski ab99eb59fb (PHP str_pad) Terminate string with a null. 2000-06-12 16:06:27 +00:00
Zeev Suraski c250702c40 Lets not offend anyone :) 2000-06-12 15:55:15 +00:00
Egon Schmid e465e94a12 Fixed a proto. 2000-06-12 15:17:08 +00:00
Egon Schmid 1769d69ca3 Fixed protos. 2000-06-12 14:44:16 +00:00
Andrei Zmievski eb4b5ffd22 (php_readdir_r) Revert that bad patch. 2000-06-12 14:11:39 +00:00
Egon Schmid a526b42211 Fixed some protos. 2000-06-12 13:33:49 +00:00
Andrei Zmievski 62be931c9f Quiet CVS. 2000-06-12 13:22:11 +00:00
Andrei Zmievski e008af1364 (php_readdir_r) Last argument to readdir_r was missing. 2000-06-12 13:20:38 +00:00
619537208b ChangeLog update 2000-06-12 02:14:47 +00:00
Rasmus Lerdorf fee1263ca3 Fix overlooked core->main change 2000-06-11 19:53:19 +00:00
Zeev Suraski 02d2a5db3a Fix Windows .dsp's 2000-06-11 19:23:21 +00:00
Sascha Schumann fd7153b0f3 Change directory name from core to main. 2000-06-11 18:51:17 +00:00
Sascha Schumann 6df3a21309 Prepare move of the top-level source files to the core directory. 2000-06-11 18:16:37 +00:00
Andi Gutmans 1f5ee72e2d - Solve floating point precision crash on FreeBSD. 2000-06-11 18:07:14 +00:00
Andi Gutmans 5928970d22 - Fixes crash problem on FreeBSD when losing precision. Need to still see
- how to detect we're on FreeBSD
2000-06-11 17:45:19 +00:00
Andi Gutmans cbc8b0f4b4 - Update NEWS 2000-06-11 17:27:00 +00:00
Andi Gutmans e7c50e4866 - Untested but it should fix the problem with cyr_convert() not being
- binary safe and destroying other values in the script
2000-06-11 17:23:38 +00:00
Andi Gutmans 6caaf70451 - Make shockwave work with virtual_dir (a bit ugly).
- swf_openfile doesn't return any values. This seems to mean that you can
- only have one file open at a time.
2000-06-11 16:34:53 +00:00
Egon Schmid bcec04f1d9 Added argument type. 2000-06-11 16:24:00 +00:00
Zeev Suraski 07a8327a0e Fix zend_get_parameters() 2000-06-11 16:19:31 +00:00
Stig Venaas 2e738b519f Forgot to set_compare_func in the new array functions, had only tested
with older source.
2000-06-11 12:20:42 +00:00
Sascha Schumann b8063c342c Separate creating config_vars.mk and generating Makefiles.
This change enables you to regenerate Makefiles by running config.status.
2000-06-11 10:38:37 +00:00
Sascha Schumann 438e9bdc93 Remove unnecessary second cat invocation 2000-06-11 10:33:39 +00:00
Thies C. Arntzen bd593d3da6 (set_time_limit) converted to new API.
# for some weird reason this fixes a newly introduced crash.
2000-06-11 10:27:36 +00:00
Sascha Schumann a2ad91df33 Upgrade to Libtool 1.3.5. 2000-06-11 10:26:24 +00:00
Sterling Hughes 164cbab7c6 oops.
# P.s.:  The current CVS is broken (virtual dir stuff), does anyone have
# an idea on when it will be fixed?
2000-06-11 07:51:10 +00:00
cac15508d5 ChangeLog update 2000-06-11 02:14:51 +00:00
Jouni Ahto d64c9d2823 - Avoid generating unnecessary switch statemets.
- Add a test if argument was given (if it is optional) before trying to
  fetch a resource and a note that something should be done if it wasn't.
- Some cosmetic fixes in the code generated.
- Some other small fixes in the code generated, already forgotten.
2000-06-11 01:25:16 +00:00
Andrei Zmievski f20194149f One more place. 2000-06-10 19:44:34 +00:00
Andrei Zmievski 43793b94f7 Terminate the string with '\0'. 2000-06-10 19:43:20 +00:00
Stig Venaas 2ef880c048 Notice about adding array_unique, array_intersect and array_diff 2000-06-10 19:38:01 +00:00
Stig Venaas f18b903d5f Changed array_subtract to array_diff 2000-06-10 19:09:56 +00:00
Stig Venaas 99f151f1bd Adding fuctions array_unique, array_intersect and array_subtract. 2000-06-10 18:58:45 +00:00
Andi Gutmans a1c036b8cf - Fix bug in virtual_file_ex when the resulting path is the root. 2000-06-10 15:15:28 +00:00
Andi Gutmans 390dccacac - Fixed problem when using uninitialized values in comparisons with strings.
-  They behave as empty strings again just like in PHP 3.
2000-06-10 14:39:06 +00:00
Andi Gutmans 131dfb4a02 - Commit message says it all 2000-06-10 14:37:54 +00:00
Andi Gutmans 8df948c5c2 - Erased an extra line by mistake 2000-06-10 14:16:34 +00:00
Andi Gutmans 97de5b2106 - Fix PostgreSQL project file a bit.
- Remove some HAVE_* from config.w32.h. More can be removed. Right now
- most HAVE_*'s in config.w32.h can actually be removed as they usually are
- only used by the module itself and not by PHP. MSQL is an exception as
- log can use it too
2000-06-10 10:15:53 +00:00
Sascha Schumann 8e3fdccb8d Define _POSIX_PTHREAD_SEMANTICS on Solaris by default. 2000-06-10 10:10:23 +00:00
Jouni Ahto 88426390a8 - Fix incorrect code creation when an optional argument is resource type. 2000-06-10 09:45:27 +00:00
Andi Gutmans 77f4e1c8c7 - This seems to be a bug. Anyone know who wrote this code? Should it stay
- in?
2000-06-10 09:05:22 +00:00
Andi Gutmans 2b0a8049db - Update module project files to include:
- HAVE_MODULE=1
- ZEND_WIN32
- PHP_WIN32
- COMPILE_DL_MODULE
- ZTS=1
2000-06-10 09:00:31 +00:00
Jouni Ahto d09ec3261f - Add some documentation for ext_skel and a note about it's existence. 2000-06-10 08:59:43 +00:00
Andi Gutmans f79e3fa02f - #ifdef COMPILE_DL_FOO
- #if HAVE_FOO
2000-06-10 08:50:24 +00:00
Andi Gutmans a9d4cf9023 - Nuke COMPILE_DL. Modules that need to be compiled as dll's in Windows
- need to define both COMPILE_DL_MODULE and HAVE_MODULE=1
2000-06-10 08:48:01 +00:00
Sascha Schumann 0eeee6b7c8 Add -qthreaded for AIX cc V5 2000-06-10 08:26:59 +00:00
Sascha Schumann f6c8918a0d Add FreeBSD's new -kthread option.
Add a list of compiler/platforms where the flags are known to work.
2000-06-10 08:09:05 +00:00
Sascha Schumann ce9a9fb1dc Fix MYSQL_LIB_CHK ($i is used by the outer loop) 2000-06-10 07:48:55 +00:00
Sascha Schumann 9097a78187 Search for mysqlclient library in lib and lib/mysql 2000-06-10 07:38:58 +00:00
Sascha Schumann 7b89a0037d Fix typo 2000-06-10 06:00:08 +00:00
Jouni Ahto f3c1222da3 - Fix typos, add default case to switch and other small things. 2000-06-10 05:47:22 +00:00
Jouni Ahto b54f915280 - Automatically generate C code to handle arguments passed to a PHP function
based on function proto.
# Very cool! Try yourself, put for example the following line in file funcs:
# bool drawtext(string text, resource font, int x, int y [, resource color])
# and then run ./ext_skel foobar /full/path/to/funcs and then look at
# foobar.c...
2000-06-10 03:53:11 +00:00
Sascha Schumann 01740bfb0d Make yaz compilable as shared module. 2000-06-10 03:35:57 +00:00
cdb98a04a5 ChangeLog update 2000-06-10 02:14:52 +00:00
0d714115ab NEWS update 2000-06-10 02:14:49 +00:00
Zeev Suraski 53bdf0b5cc I can't think of a reason of why it should just be a notice... Make it a warning, like it was in PHP 3. 2000-06-10 01:12:12 +00:00
Zeev Suraski a29791411b Fix bug #4768 2000-06-10 01:08:55 +00:00
Jouni Ahto 796ff183b0 # Still a typo. 2000-06-09 23:37:05 +00:00
Andi Gutmans 3c766f379b - Update postgress to build on Windows 2000-06-09 22:39:56 +00:00
Jouni Ahto dee9053cb6 # Cosmetic fixes and a typo. 2000-06-09 21:47:20 +00:00
Andrei Zmievski 3570258050 @- Fixed 'Z' flag in date() to adjust for daylight savings time. (Andrei) 2000-06-09 20:18:36 +00:00
Andrei Zmievski b51aa1f36f Made an alias for hash apply with arguments. 2000-06-09 20:18:16 +00:00
Jouni Ahto 420d668f33 - Cosmetic changes.
- Optionally, create function entries, stubs and declarations from names
  listed in a file.
2000-06-09 18:04:17 +00:00
Andi Gutmans ae19180641 - Forgot to remove the FIXME 2000-06-09 17:52:09 +00:00
Andi Gutmans 717acfe9c5 - Make the memory limit accurate 2000-06-09 17:51:37 +00:00
Sascha Schumann 8f58728e2b Real fix for std_syslog issue on OpenServer. This is limited to the native
development system (/bin/cc and icc) and does not show up with the UDK.
2000-06-09 17:21:40 +00:00
Sascha Schumann b98d2a8261 The ! command is not portable. 2000-06-09 17:19:26 +00:00
Andi Gutmans 605b1aa394 - Fix cache initialization 2000-06-09 16:08:30 +00:00
Andi Gutmans 9fb095b50e - Allocate and cache in 8 byte blocks. Most allocators anyway use 8 byte
- blocks. This should help fragmentation and cache hits.
- The old tree is tagged as PRE_EIGHT_BYTE_ALLOC_PATCH
2000-06-09 15:54:14 +00:00
Zeev Suraski d1a9eca805 Update news 2000-06-09 15:44:49 +00:00
Zeev Suraski 03e842ccb8 Fix bug #4933 2000-06-09 15:42:49 +00:00
Zeev Suraski fddf89aff7 Fixed bug #4819 2000-06-09 15:40:37 +00:00
Zeev Suraski d975678006 @- Fixed var_dump() not to modify the internal order of array elements (Zeev)
Fixed the buffer overflow as well
2000-06-09 15:13:36 +00:00
Jouni Ahto 62adbfc521 - Changed user instructions. 2000-06-09 14:46:15 +00:00
Andi Gutmans 6bcc8ff0c7 - Time to change it. We changed register_internal_class() ->
- zend_register_internal_class()
2000-06-09 14:41:33 +00:00
Andi Gutmans eb0e694665 - Andrei, this is for you!
- Add zend_register_internal_class_ex() which allows you to specify a
- parent to inherit from. You can either specify the parent directly or via
- its name.
2000-06-09 14:40:14 +00:00
Andrei Zmievski ef1d6987fd @- Fixed stripcslashes() to remove to strip \ in unknown escapes instead of
@  leaving it. (Andrei)
2000-06-09 13:58:10 +00:00
Andrei Zmievski e52889acd9 @- Changed WDDX to always serialize arrays as structs. (Andrei)
Changed WDDX to always serialize arrays as structs. PR #4924
2000-06-09 13:50:39 +00:00
Andi Gutmans 99b4051eca - Typo 2000-06-09 13:36:36 +00:00
Zeev Suraski cbd3f41ba8 Fix #4928
Be *CAREFUL* with the _ex API, guys!
2000-06-09 13:15:19 +00:00
Andi Gutmans edd7025645 - Remove old obsolete code. 2000-06-09 13:08:40 +00:00
Andi Gutmans a712da5cee - Make unset consistent with the way array offsets work 2000-06-09 13:07:26 +00:00
Stanislav Malyshev e346a6b538 Handle unset with empty key 2000-06-09 10:59:21 +00:00
Stanislav Malyshev 6cac26c21f Make chmod in safe mode not allow SUID bits 2000-06-09 10:34:53 +00:00
Andi Gutmans 6ce07a85e4 - Change register_internal_class to zend_register_internal_class for
- consistency.
- Andrei: I'm still thinking about the _ex you want me to implement
2000-06-09 08:41:59 +00:00
Andi Gutmans a7d1bc96be - Use PHP_WIN32 2000-06-09 08:10:15 +00:00
Jouni Ahto 216067b63f - As Sascha requested. 2000-06-09 03:38:37 +00:00
Andrei Zmievski 1868bfdcdf (php_wddx_deserialize_ex) return SUCCESS/FAILURE
Use that return value in WDDX session deserializer.
2000-06-09 03:00:02 +00:00
Sascha Schumann a4a4de55f7 Change COMPILE_DL to COMPILE_DL_EXTNAME 2000-06-09 02:59:47 +00:00
Jouni Ahto c9dfab5024 - Added skeleton module creating script. 2000-06-09 02:51:43 +00:00
Zeev Suraski 897bb1b572 - Parse errors in the php.ini files under Windows will no longer mess up the
HTTP headers in CGI mode and are now displayed in a message box
2000-06-09 02:18:50 +00:00
1aa01da212 ChangeLog update 2000-06-09 02:14:58 +00:00
cf8545794b NEWS update 2000-06-09 02:14:55 +00:00
Zeev Suraski 9c88d20070 Move back everything to where it belongs... 2000-06-09 01:50:44 +00:00
Zeev Suraski df2935808e This should no longer be necessary 2000-06-09 01:41:16 +00:00
Zeev Suraski 4e63aa4566 This seems to be a valid report, can't hurt anyway (PR 4252) 2000-06-09 00:46:39 +00:00
Zeev Suraski 2ffa48b447 Restore the check for the trailing slash. Windows does not apply s#/+#/# (PR 4375) 2000-06-09 00:43:43 +00:00
Sascha Schumann fb330f795d You need to include dynlib.mk in Makefile.in. 2000-06-09 00:42:05 +00:00
Sascha Schumann 764747ec7f The default serializer is still php. 2000-06-09 00:26:56 +00:00
Sascha Schumann 0f06ad29a6 Automatically recover from a failed attempt to decode a session object.
PR: #4886
2000-06-09 00:23:20 +00:00
Sascha Schumann 1326e17536 Fix format strings. cache_expire's type was changed to long. 2000-06-08 23:42:04 +00:00
Sascha Schumann d530b82b26 Somehow I screwed up the find parameters while doing the original change.
s/global.h/php_global.h/
2000-06-08 23:39:01 +00:00
Andrei Zmievski 1251445abc Include php_global.h, instead of global.h 2000-06-08 21:07:30 +00:00
Zeev Suraski c5b2c8ba93 Update .dsp's 2000-06-08 12:28:48 +00:00
Anthony Whitehead deff917851 Added more server variables to the HTTP_SERVER_VARS array, all the
variables listed in the structs in nsapi.c should work now. Untested on
Windows platform.
2000-06-08 11:56:36 +00:00
Thies C. Arntzen c8ffb0ba59 @- Fixed crash in OCIFetchStatement() when trying to read after
@  all data has already been read. (Thies)
2000-06-08 09:49:31 +00:00
Hartmut Holzgraefe eb8cd900a6 @ fopen_wrappers() are now extensible via modules
so here it finaly is, the more general approach to fopen wrappers
# see what i'll break this time
2000-06-08 09:43:12 +00:00
Sascha Schumann d180634e07 Add PHP_BROKEN_SPRINTF check here.
Also remove unnecessary #ifdef's for PACKAGE and VERSION.
2000-06-08 06:16:22 +00:00
Sascha Schumann e49ad341bd Wipe out acconfig.h.in and rewrite some checks to use PHP_ARG_ENABLE. 2000-06-08 06:14:58 +00:00
Sascha Schumann b4e48b952e Clean up acconfig.h 2000-06-08 06:12:26 +00:00
Sascha Schumann 039551788b Add a couple of casts 2000-06-08 06:07:38 +00:00
dce9fd0e44 ChangeLog update 2000-06-08 02:15:09 +00:00
5dff860557 NEWS update 2000-06-08 02:15:06 +00:00
Sascha Schumann eea5d09eb9 Always define PROGRAM_NAME to avoid problems with Irix's and OpenServer's
makes.
2000-06-08 01:39:17 +00:00
Sascha Schumann 471a07f223 Add note about using PHP_ARG_WITH/ENABLE 2000-06-08 00:34:04 +00:00
Jouni Ahto 66eedaa03d - Fixed typo in _php_image_output (s/fp/tmp/) causing segfault.
- Fixed bug when calling imagejpeg() with 3 arguments, the second one empty,
  introduced yesterday.
- Nuked even more code.
2000-06-07 23:04:39 +00:00
Uwe Steinmann 467b5e4892 - fixed compilation error 2000-06-07 20:01:12 +00:00
Uwe Steinmann 169606602b - more removal of obsolete pdflib functions, but no changes to the php
api
2000-06-07 19:44:47 +00:00
Sascha Schumann 01ecd47a05 Fix test for php_always_shared 2000-06-07 19:13:28 +00:00
Zeev Suraski 022159a6cd - Fix Win32 build
- Nuke a warning
2000-06-07 18:10:21 +00:00
Uwe Steinmann 4a81e8c111 - new function pdf_set_info() to replace pdf_set_info_xxx() 2000-06-07 18:06:11 +00:00
Thies C. Arntzen c183168481 beautify 2000-06-07 09:55:37 +00:00
Hartmut Holzgraefe 02b0cef4d8 cyscape's "current" browscap.ini file doesn't terminate the last line
in the file with a newline character
this resulted in a parse error
2000-06-07 05:47:24 +00:00
Andrei Zmievski 61fcaf564a Purely formatting. 2000-06-07 02:28:36 +00:00
c904bb2b87 ChangeLog update 2000-06-07 02:15:19 +00:00
962d39e86e NEWS update 2000-06-07 02:15:16 +00:00
Rasmus Lerdorf ff843bacf4 Make trim strip \0 to match php 3
@ Make trim strip \0 to match php 3 (Rasmus)
2000-06-07 00:59:14 +00:00
Jouni Ahto 0ebcdb28af - Added functions imagewbmp(), imagecreatefromxbm().
- Nuked a lot of duplicate code.
@- Added function imagecreatefromxbm(). (Jouni)
@- Added function imagewbmp(). (Jouni, based on patch from Rune Nordbøe Skillingstad)
# Note: calling imagejpeg() with 3 arguments, the second one empty,
# is currently broken. Fill fix tomorrow evening unless someone beats me.
# Must have some sleep now, brains stopped working...
2000-06-07 00:37:49 +00:00
Andrei Zmievski b928bdceb8 @- Added str_pad() for padding a string with an arbitrary string on left or
@  right. (Andrei)

Added str_pad() for padding a string with an arbitrary string on left or right.

# With all those macros, the code is starting to eerily resemble Perl's guts.
2000-06-06 20:42:33 +00:00
Uwe Steinmann 6a8fdc6c5c - add functions pdf_get_value(), pdf_set_value(), pdf_get_parameter(),
pdf_set_border_dash()
- some prototype fixes
2000-06-06 19:59:30 +00:00
Andrei Zmievski 3b649d637d I guess Zeev's done it already. 2000-06-06 19:46:54 +00:00
Zeev Suraski 34c40031ca @- Made the short_tags, asp_tags and allow_call_time_pass_reference INI directives work
@  on a per-directory basis as well, e.g. from .htaccess files (Zeev)
2000-06-06 19:16:57 +00:00
Clayton Collie 24b26065e0 PHP code to test sscanf() 2000-06-06 19:15:26 +00:00
Zeev Suraski 98bf43f229 Enable asp_tags/short_tags/allow_call_time_pass_by_reference to work on a per-directory
basis as well
2000-06-06 19:13:54 +00:00
Clayton Collie 8e58cc501f Modified Makefile.in so scanf.c compiles 2000-06-06 19:11:50 +00:00
Jouni Ahto 4f0f3c3ba0 - Preparing to add new image types to gd module.
# Sascha, if you see this, why are there two checks for jpeg dirs
# (PHP_GD_JPEG)? I just literally applied the same method to check for
# Xpm libs, don't know how to fix it. Could you please have a look at this?
2000-06-06 19:06:46 +00:00
Clayton Collie 0b7fd17c2b Added sscanf() function. 2000-06-06 18:58:15 +00:00
Andi Gutmans d7ac0f2c9d - I didn't have anything to do with this buggy code. Just kidding :) 2000-06-06 18:54:00 +00:00
Frank M. Kromann a14261bc42 adding definition for EWOULDBLOCK for Win32 to compile 2000-06-06 18:30:06 +00:00
Hartmut Holzgraefe 7864fdfdee added missing '/' to closing <center> tag (BUG ID #4416) 2000-06-06 17:26:15 +00:00
Hartmut Holzgraefe 6dd322874e added T1LIB information to info function 2000-06-06 17:12:05 +00:00
David Hedbor a5418dc0ac Added another bug to be fixed 2000-06-06 16:18:09 +00:00
Thies C. Arntzen 11fabacc3c add check for stdbool.h 2000-06-06 14:13:35 +00:00
Thies C. Arntzen 0e0f3eb097 bool -> int 2000-06-06 13:49:41 +00:00
Thies C. Arntzen 10eb67a3aa @- added fflush() function. (Eric Huss)
# the socket fsync() might not work on Win32.
#
# i'm not sure if we need any code for flushing sockets as they are
# currently alway written via write().
2000-06-06 12:16:44 +00:00
Thies C. Arntzen 8ed100e5c5 hashtable.h -> expat_hashtable.h 2000-06-06 10:06:45 +00:00
Frank M. Kromann eedf4e973f Adding correct compiler directives for Win32 compilation 2000-06-06 07:26:04 +00:00
Joey Smith 663d46ea23 Use common naming convention. 2000-06-06 05:42:11 +00:00
Joey Smith edfd7f9a80 Get the version #'s right... 2000-06-06 05:13:07 +00:00
Sascha Schumann 458352954d Add newline at the end of the file (breaks at least SCO and Tru64 C compiler). 2000-06-06 02:47:43 +00:00
88a0832a09 ChangeLog update 2000-06-06 02:15:17 +00:00
32af54f62b NEWS update 2000-06-06 02:15:14 +00:00
Sterling Hughes 48ef2d62ba Move to the Z_*_PP macros. 2000-06-06 00:34:00 +00:00
Sascha Schumann e2168491a1 Move hashtable.h to expat_hashtable.h. 2000-06-06 00:27:18 +00:00
Sascha Schumann d3a7f5be38 Make TSRM compile again. ZTS is defined by a header file included in
tsrm_config.h, so TSRM.o was always empty.
2000-06-06 00:16:16 +00:00
David Hedbor dd6cccf50e PRE_INCLUDES hack reverted 2000-06-06 00:02:03 +00:00
David Hedbor 45ba649c8e PRE_INCLUDE hack reverted 2000-06-06 00:01:29 +00:00
Sascha Schumann 45a5555b09 Move global.h to php_global.h. 2000-06-05 23:59:06 +00:00
Sascha Schumann 102c6ce4b8 Move main.h to php_main.h. 2000-06-05 23:24:42 +00:00
Rasmus Lerdorf 78d77c1476 Fix virtual() when used with output buffering
@ Fix virtual() when used with output buffering (Marc Pohl)
2000-06-05 21:19:21 +00:00
David Hedbor ad730a374b List with TODO items 2000-06-05 21:05:51 +00:00
David Hedbor ebe02095df Fixed include directory problems. 2000-06-05 21:05:40 +00:00
David Hedbor ff8a716efe Added a new user-definable include variable, PRE_INCLUDES. It works
like EXTRA_INCLUDES but is added before the global INCLUDES variable.
#
# This was needed for the roxen SAPI module, which requires the PHP4
# include dirs to be after the Pike include dirs. I can't make the
# Pike include dir global though, since Pike includes then conflict
# with PHP4 includes in the rest of the compile.
2000-06-05 21:05:07 +00:00
David Hedbor 7fdfcc28ec Changed include statement for main.h to avoid inclusion of Pike's main.h. 2000-06-05 19:51:22 +00:00
Andi Gutmans 3701bc4207 - ARG_COUNT(ht) -> ZEND_NUM_ARGS() mega patch 2000-06-05 19:47:54 +00:00
Rasmus Lerdorf 1cefd77f1c Oops, fixed slight miscue there. Now it works. 2000-06-05 19:35:15 +00:00
Jouni Ahto 9d2bcf2bd0 - Restore locale settings to state they were at module startup if they
were changed.
2000-06-05 18:47:34 +00:00
Rasmus Lerdorf 194e8828a1 @ Clean up constants in flock() function and add optional 3rd arg which
@ is set to true on EWOULDBLOCK (Rasmus)
Clean up constants in flock() function and add optional 3rd arg which
is set to true on EWOULDBLOCK
2000-06-05 17:56:01 +00:00
Andrei Zmievski de9f39beda Ignore generated files. 2000-06-05 17:50:31 +00:00
Frank M. Kromann 2bfe0001da Getting exif module to compile on win32 2000-06-05 16:42:03 +00:00
Frank M. Kromann e93df14b67 fixing compiler directive so the module will actually build a php module 2000-06-05 16:26:46 +00:00
Uwe Steinmann a8401a33c6 - should now compile and configure with libxml 2.0.0 2000-06-05 15:39:29 +00:00
Andi Gutmans d8d6ff3c4c - Revert internazionalization fix. 2000-06-05 15:37:30 +00:00
Andi Gutmans 7e0baa7a1d - Revert Thies' locale patch. It was screwing up language level things.
- We could add support for locale in some specific output functions at a
- later time to make everyone happy
2000-06-05 15:34:11 +00:00
Hartmut Holzgraefe 50b014b957 compile fix regarding bug report #4780 2000-06-05 15:17:25 +00:00
Andi Gutmans f8983e467f - Complete change to create_function() 2000-06-05 06:52:02 +00:00
cd9e047d65 ChangeLog update 2000-06-05 02:15:17 +00:00
fe0f40254f NEWS update 2000-06-05 02:15:14 +00:00
Jouni Ahto d5d6c79584 (pg_connect) Missed adding reference to link. 2000-06-04 23:06:11 +00:00
Zeev Suraski 1c36e3472f Change shutdown order to sort out a crash when assigning a resource id to a static. 2000-06-04 22:09:16 +00:00
Zeev Suraski 4a1da8b6f9 Fix Win32 build 2000-06-04 22:00:17 +00:00
Zeev Suraski bfac4633a5 - Support unordered hash comparisons
- Make == perform an unordered comparison with arrays/objects, and === perform an ordered comparison
2000-06-04 21:59:49 +00:00
Zeev Suraski 675ce84475 *** empty log message *** 2000-06-04 21:34:56 +00:00
Zeev Suraski b7a8baf1bb Rename lambda() 2000-06-04 21:30:56 +00:00
Jouni Ahto b9d1b21598 - Added functions pg_loimport(), pg_loexport().
@- Added functions pg_loimport(), pg_loexport(). (Jouni)
2000-06-04 20:24:07 +00:00
Rasmus Lerdorf 7eec1997ef @ Add SWF support to getimagesize() function (Derick Rethans)
Add SWF support to getimagesize() function
2000-06-04 18:29:15 +00:00
Sascha Schumann 8aa6d9cb35 Redirect messages from cp modules/* to /dev/null 2000-06-04 16:00:08 +00:00
Stanislav Malyshev a23c64ee8b \0 is part of they key, but not of the variable 2000-06-04 15:43:04 +00:00
Sascha Schumann 950e7224ad Back out the last change by Andi which caused TSRM to be always configured.
This needs to be refined. It caused breakage on several platforms.
2000-06-04 15:34:31 +00:00
Stanislav Malyshev 5af7dff758 add opendir to VIRTUAL_DIR 2000-06-04 08:29:11 +00:00
Stanislav Malyshev 375474ce86 chdir returns -1 on error, so should V_CHDIR 2000-06-04 07:59:32 +00:00
Stanislav Malyshev 7f158268aa chdir returns 0 on success, compare against it 2000-06-04 07:57:40 +00:00
Rasmus Lerdorf 76061b701e @ Add support for both indexed and non-indexed arrays of file uploads
@ eg. name="file[]" type="file" (Rasmus)
Add support for both indexed and non-indexed arrays of file uploads
eg. name="file[]" type="file" (Rasmus)
2000-06-04 05:46:28 +00:00
Andi Gutmans 09d281ff62 - Only compile if building a thread safe version 2000-06-04 04:14:17 +00:00
c012528fe1 ChangeLog update 2000-06-04 02:15:13 +00:00
Zeev Suraski e46a517ed6 *** empty log message *** 2000-06-03 16:49:26 +00:00
Zeev Suraski 1a8da63ca0 news update 2000-06-03 10:35:37 +00:00
Zeev Suraski dae76aa1b5 Support comparisons of arrays (with arrays) and objects (with objects) 2000-06-03 10:34:19 +00:00
Andi Gutmans 01d478ba56 - Change #if to #ifdef. 2000-06-03 07:34:20 +00:00
Zeev Suraski 5673378ea6 - Allow all functions that receive user-defined function callbacks to accept
an array that contains an object and a method name, in place of a function
  name, e.g. usort($array, array($obj, "ObjSort"))
(I checked the code in array.c and basic_functions.c, other code which uses
call_user_function() may still force the function_name argument to be of type
IS_STRING, which prevents this feature from working - and is no longer necessary)
2000-06-03 04:16:46 +00:00
Zeev Suraski 2ffe85ddac Don't take chances with new include files 2000-06-03 04:14:31 +00:00
Zeev Suraski 5a35a6bafc Improve call_user_function() to support array($obj, $method) 2000-06-03 03:28:08 +00:00
Zeev Suraski d1f1d40527 - Make the INI entries sorted in phpinfo() 2000-06-03 03:05:29 +00:00
Zeev Suraski d4b160c0d6 - Export normalize_bool
- This global/static syntax fix brought us back to the 4 documented conflicts
2000-06-03 03:05:01 +00:00
b6d29b2347 ChangeLog update 2000-06-03 02:15:16 +00:00
93d51636f7 NEWS update 2000-06-03 02:15:13 +00:00
Zeev Suraski e374f6fd31 Fix a lambda() bug 2000-06-03 02:02:09 +00:00
Zeev Suraski 70345bd222 Add missing { 2000-06-03 01:50:15 +00:00
Zeev Suraski 0b7a9cea88 - Fix Win32 compilation (Use winsock2.h from now on)
- Add lambda() support
2000-06-03 01:49:49 +00:00
Andi Gutmans 1f6c248909 - Update NEWS so that this is documented 2000-06-02 16:52:22 +00:00
Andi Gutmans 1b993610c1 - global/static require a trailing ';' 2000-06-02 16:50:19 +00:00
Zeev Suraski 746f01802d Update error code 2000-06-02 12:36:54 +00:00
Zeev Suraski 06388f5181 Use the new error code
@- Added set_error_handler() to allow custom error handling functions,
@  instead of the built-in error handling code (Zeev, Zend Engine)
@- Renamed user_error() to trigger_error();  user_error() remains
@  defined for compatibility (Zeev, Zend Engine)
2000-06-02 12:35:53 +00:00
Zeev Suraski ab36e22aeb Small optimization 2000-06-02 12:24:24 +00:00
Zeev Suraski 8a8c3eafc8 Nuke the old error code, use the new one 2000-06-02 12:21:49 +00:00
Thies C. Arntzen 22e9ff476a - 2000-06-02 08:53:55 +00:00
Andi Gutmans 45cfada9a1 - Make TSRM always compile into PHP. We can now move virtual_cwd over here.
- We might not want to compile TSRM.c in case we are on a platform which
- doesn't support threads. Sascha? What do you think?
2000-06-02 08:51:50 +00:00
efc005c078 ChangeLog update 2000-06-02 02:15:26 +00:00
110735c3bb NEWS update 2000-06-02 02:15:23 +00:00
Chuck Hagenbuch a4146cc890 patch for redhat 6.2 from Teodor Cimpoesu <teo@digiro.net>. 2000-06-01 20:19:26 +00:00
Andrei Zmievski 4ef2af7c72 Update header file. 2000-06-01 16:34:50 +00:00
Andrei Zmievski 1db5c7d1e2 @- Cleaned up PCRE extension and made it binary-safe. (Andrei) 2000-06-01 16:34:00 +00:00
Jouni Ahto 467c4314b8 (ucwords) Remove unnecessary code.
# Didn't keep my promise to stop...
2000-06-01 14:56:28 +00:00
Jouni Ahto c106ab8ba0 (ucwords) Yet another fix for #4748.
# Last one from me today, I must have a beer now.
2000-06-01 14:40:41 +00:00
Andrei Zmievski 48db9618b8 Some tweaks. 2000-06-01 14:18:45 +00:00
Andrei Zmievski 4c818aec33 @- Added third argument to in_array(). If it's true, then in_array()
@  will use strict comparison instead of the default one. (Andrei)

Fixes bug #4753
2000-06-01 13:52:08 +00:00
Jouni Ahto 30c5b53ad1 (ucwords) Fixed fix for fix for fix for #4748.
# Today's most fixed bug.
2000-06-01 13:38:23 +00:00
Hartmut Holzgraefe a35237795f uh, off by one?!! this time it's regression-tested, fast and compact 2000-06-01 11:47:48 +00:00
Jouni Ahto 3c51a88d0c (ucwords) Another try to fix #4748. 2000-06-01 10:07:44 +00:00
Hartmut Holzgraefe f27956eb19 ucwords will now test against isspace() instead of just ==" "
(see BUG #4748)
2000-06-01 09:56:54 +00:00
3bd5d5dc13 ChangeLog update 2000-06-01 02:15:14 +00:00
cf10288201 NEWS update 2000-06-01 02:15:11 +00:00
Sascha Schumann dc5af6decc s/sys_syslog/std_syslog/ 2000-06-01 00:48:28 +00:00
Jouni Ahto 8fe69306dc Correct fix this time... (?) 2000-05-31 22:44:29 +00:00
Jouni Ahto 1e7c5b8562 Fix a nasty off-by-one with negative numbers.
# Hey, this has been there for years undetected.
2000-05-31 22:27:09 +00:00
Sascha Schumann 1e56dd781a Make use of already existing macro PHP_PROG_SENDMAIL 2000-05-31 20:44:04 +00:00
Zeev Suraski a00a1d12ea @- Added pg_trace() and pg_untrace (Dominic J. Eidson & Zeev) 2000-05-31 20:40:28 +00:00
Sascha Schumann 7bb2af41e3 Use sed instead of tr. The tr regexp syntax does not seem to be portable
enough to make wide use of it. This should fix problems on Solaris 8
and possibly on older SysV-derivatives.
2000-05-31 20:30:16 +00:00
Zeev Suraski 898c8ead87 IS_BC isn't really being used, but still... 2000-05-31 19:08:18 +00:00
Zeev Suraski 13b67621cf Fix a bug in static initializers/default values/class member variables that contained
array values
2000-05-31 19:07:09 +00:00
Chuck Hagenbuch 1e672d4528 monkeying Sascha's suggested change to allow relative pathnames. 2000-05-31 17:33:30 +00:00
Anthony Whitehead 678508b426 Added changes suggested by Stanislav Borutsky with respect to NSAPI_PUBLIC. 2000-05-31 14:20:57 +00:00
Thies C. Arntzen ccacfd880b @- ignore_user_abort=Off is now default. (Thies) 2000-05-31 14:02:36 +00:00
Sascha Schumann b470fe138b The last line added '-I' to INCLUDES, causing all SAPI modules but NSAPI
failing to build.
2000-05-31 13:15:58 +00:00
Thies C. Arntzen ecd354ada1 just do phpinfo() and "collect" all error_reporting related ini-entries -
you'll get my point;-)
2000-05-31 09:25:51 +00:00
6341c60f67 ChangeLog update 2000-05-31 02:15:14 +00:00
c521aeda57 NEWS update 2000-05-31 02:15:11 +00:00
Frank M. Kromann 640c8226aa Making imap module compile on win32 and include imap_mail() function) 2000-05-30 22:13:09 +00:00
Ben Mansell 1c641cfdee Updated help section with some more compile problems & solutions 2000-05-30 17:34:34 +00:00
Andrei Zmievski 01a4220954 @- Added array_merge_recursive() that will recursively merge values
@  under the same keys. (Andrei)
2000-05-30 17:03:56 +00:00
Andrei Zmievski 0aed5fd91c retab 2000-05-30 15:45:09 +00:00
Andrei Zmievski 7fcaa66bcd Finally figured out what pathinfo() was all about. 2000-05-30 15:44:26 +00:00
Anthony Whitehead c6449f307a Altered NSAPI autoconf to check for location of include files automatically, tested for Netscape 3.x and iPlanet 4.x.
Added very basic variable support for usefull things such as PHP_SELF. I'll extend this to supply this rest of the variables soon.
Commited a patch to activate ZTS in the NSAPI module, this patch comes from
Jayakumar Muthukumarasamy.
2000-05-30 13:20:18 +00:00
Thies C. Arntzen 8c65f81676 @- fixed crash in OCIParse when parsing invalid SQL. (Thies) 2000-05-30 09:25:02 +00:00
5ec49e9c79 ChangeLog update 2000-05-30 02:15:10 +00:00
Zeev Suraski 666a53a247 Forgot to update the makefile 2000-05-29 18:56:51 +00:00
Zeev Suraski 950fb739f8 Fix bug #4678 2000-05-29 18:53:42 +00:00
Zeev Suraski 8fb954ae4f Fix startup sequence. It should do it this time. 2000-05-29 18:45:06 +00:00
Zeev Suraski 7213c743f0 - Added disable_functions php.ini support
- Fixed Win32 build
2000-05-29 17:22:35 +00:00
Zeev Suraski bc7abb3300 Allow disabling of functions for security reasons 2000-05-29 17:16:52 +00:00
Hartmut Holzgraefe ae1043ba0d warn_not_available() will be used by other modules besides
ext/standard in the (very near) future
2000-05-29 17:08:01 +00:00
Andi Gutmans a0e46521e3 - License is at 2.02 2000-05-29 17:03:24 +00:00
Zeev Suraski 3637589db1 Oh yeah, I said there's no need for it to be defined didn't I? :) 2000-05-29 16:51:27 +00:00
Rasmus Lerdorf ebd9e89fcf Clean up EXIF code and give up on extracting the embedded thumbnail for
now.  Will return to it when I find some real specs on it.
Also added a couple of missing copyright headers
2000-05-29 16:34:19 +00:00
Zeev Suraski 949574d027 Remove stale reference to .h file 2000-05-29 16:22:26 +00:00
Zeev Suraski c07a056dac There's really no need for an entire file for a one line function... 2000-05-29 16:13:38 +00:00
Thies C. Arntzen 56dcb7ed07 detab 2000-05-29 15:55:15 +00:00
Thies C. Arntzen 844938ec4e add some notes 2000-05-29 15:54:38 +00:00
Thies C. Arntzen 635d7fbfae allow_call_time_pass_reference fix: similar_text 2000-05-29 15:38:32 +00:00
Zeev Suraski 8715b55ce0 Remove stale macro 2000-05-29 15:31:19 +00:00
Sascha Schumann a982eb2267 `len' is not the actual length of the string, but the possible maximum
length. This fixes a couple of problems, like not setting the cookie path
correctly.
2000-05-29 15:07:19 +00:00
Zeev Suraski 124fe30f03 More secure mode 2000-05-29 11:47:38 +00:00
Zeev Suraski 1ae552c7d1 Creat is creat is creat, no open 2000-05-29 11:45:20 +00:00
178ae887ab ChangeLog update 2000-05-29 02:15:10 +00:00
jim winstead 181da8f232 Add maintainer info for dbase extension. 2000-05-28 19:30:23 +00:00
jim winstead 86920d4c68 Remove old, unused files. 2000-05-28 19:21:29 +00:00
jim winstead 7744e04b42 fix license version number in sample header 2000-05-28 19:17:59 +00:00
Andi Gutmans 015884dda5 - Use pointer arithmetic to speed up the function a bit 2000-05-28 18:59:40 +00:00
Andi Gutmans 0ebb7335c9 - This should have been done for 4.0.0.
- Default build is without debug now. Use --enable-debug if you want a
- debug build which includes leak/memory overwrite etc. detection
2000-05-28 17:39:30 +00:00
Andreas Karajannis 2980f7f92d Changed parameter naming some function prototypes 2000-05-28 17:23:24 +00:00
Andi Gutmans 9786b16e9f - Move zend_activate_modules() to later on. 2000-05-28 17:19:49 +00:00
Sascha Schumann 833339c692 Remove win32/php_registry.h from include list. That slipped in by accident. 2000-05-28 16:27:25 +00:00
Sascha Schumann 0d9c0616f9 Use php_syslog() for system call. On OpenServer 5, syslog is defined to
var_syslog/sys_syslog which causes various problems.

Submitted by: Paul Gardiner <I.T.Manager@barleychalu.co.uk>
2000-05-28 16:22:28 +00:00
Sascha Schumann 9cd4929417 Make syslog module thread-safe. 2000-05-28 16:19:45 +00:00
Andreas Karajannis 1e949e6caa Test scripts for ODBC added 2000-05-28 12:50:19 +00:00
Andreas Karajannis e50b33c240 Cosmetic changes. 2000-05-28 12:48:12 +00:00
Thies C. Arntzen 44cf237a72 (php_execute_script) fix leak for phpinfo() images.
# maybe the activate/deactivate should be moved outside php_execute_script()?
2000-05-28 12:30:06 +00:00
Danny Heijl 90331b27ac - added COMPILE_DL_INFORMIX to WIN32 project file 2000-05-28 12:06:56 +00:00
Danny Heijl a603902561 - Name correction. 2000-05-28 11:08:28 +00:00
f1b988d2af ChangeLog update 2000-05-28 02:15:08 +00:00
Hartmut Holzgraefe 3bbc7466fc added comments to the System/Distribution specific default
path tests for gd.h

? can someone imagine a clever way to have that done for
  _all_ packages in a simple and general way ?
2000-05-27 21:30:30 +00:00
Hartmut Holzgraefe 636b8927c6 should make SuSE 6.x users happy (and anybody else with gh.d in
/usr/include/gd ... )
2000-05-27 21:09:00 +00:00
Sascha Schumann 2bd6846adc Solve conflict with mysql's readdir_r check. Both defined HAVE_READDIR_R,
but with different values.
2000-05-27 19:30:36 +00:00
Hartmut Holzgraefe fb39eda0d8 a second (cleaner?) try on warnings about unsupported functions 2000-05-27 19:27:20 +00:00
Andi Gutmans afccb58612 - I'm not sure if PHP_NOT_IN_THIS_BUILD is the way to handle these
- functions but in any case I have changed it to PHP_NOT_IN_THIS_BUILD()
2000-05-27 18:55:11 +00:00
Andi Gutmans 8c82566b48 - Fix problem in sessions module under Win32. Need to use ; as an options
- delimiter in save_path instead of :.
2000-05-27 16:38:49 +00:00
030c0fd415 ChangeLog update 2000-05-27 02:15:09 +00:00
73bd59943c NEWS update 2000-05-27 02:15:06 +00:00
Zeev Suraski abb31591ff Add Sam Ruby 2000-05-27 00:24:03 +00:00
Rasmus Lerdorf 81c4fd5efc @ Changed the Apache handler's return status to 'Declined' when a requested
@ PHP file could not be found.  Returning 'Not Found' caused problems
@ in the ErrorDocument handler stage in that $REDIRECT_REDIRECT_ERROR_NOTES
@ was not getting set at all.  Moving to 'Declined' shoudl fix this and I
@ can't see any other side effects.  (Rasmus)
Changed the Apache handler's return status to 'Declined' when a requested
PHP file could not be found.  Returning 'Not Found' caused problems
in the ErrorDocument handler stage in that $REDIRECT_REDIRECT_ERROR_NOTES
was not getting set at all.  Moving to 'Declined' shoudl fix this and I
can't see any other side effects.
2000-05-26 18:43:09 +00:00
Hartmut Holzgraefe 7a2e01c592 protos fixed 2000-05-26 17:20:36 +00:00
Hartmut Holzgraefe 62227a03b1 proto fixed 2000-05-26 17:20:18 +00:00
Hartmut Holzgraefe 69d1e788c0 if a module provides a function it should also do so if the function
is not functional due to configure findings
the function should offer a meaningful warning if it is not supported
instead of just beeing undefined
i had already changed this in 'gd', now this is doing it for 'standard'
2000-05-26 17:04:02 +00:00
Zeev Suraski 9bfd5e5e55 Save more overhead. Look for the serializer/save_handler only when they're actually modified. 2000-05-26 13:02:11 +00:00
Zeev Suraski fb69f854af Use the INI framework in the session module 2000-05-26 11:12:49 +00:00
Uwe Steinmann 8e12a0126e - swf.h belongs to the libswf distribution and should not be copied
in the php distribution.
- the configure script now checks for the libswf.a and swf.h in
  <swf-dir>/lib and <swf-dir>/include. If it doesn't find it the
  default directories /usr/local and /usr are checked.
2000-05-26 09:34:13 +00:00
Andi Gutmans b5447a4d7a - Fixed scanning decimal numbers in internationalized environments. They should
- always be in standard US format e.g. 23.3
2000-05-26 07:49:56 +00:00
Andi Gutmans ac309e9696 - Update news file 2000-05-26 07:33:06 +00:00
d3007a8ca9 ChangeLog update 2000-05-26 02:15:10 +00:00
ce3c002a16 NEWS update 2000-05-26 02:15:07 +00:00
Adam Dickmeiss 0399d94e35 Added extension YAZ. 2000-05-25 22:26:43 +00:00
Adam Dickmeiss 51491d06f1 Added short README for ext YAZ. 2000-05-25 22:24:43 +00:00
Adam Dickmeiss 5dadceb115 Added extension YAZ (Z39.50 client role). 2000-05-25 21:54:35 +00:00
Andrei Zmievski 8a5bc5b674 Update proto. 2000-05-25 21:07:07 +00:00
Andrei Zmievski 0a142bb94e @- Added second argument to preg_quote() which allows quoting of
@  one additional character, usually the regex delimiter. (Andrei)
2000-05-25 21:04:09 +00:00
Sascha Schumann 80db548369 Test commit 2000-05-25 20:29:55 +00:00
Sascha Schumann bf913cc61d Test commit 2000-05-25 20:25:40 +00:00
Hartmut Holzgraefe a9abc3ab6b added functions gzcompress() and gzuncompress() for direct string
compression as requested by BugId #1151
2000-05-25 16:35:49 +00:00
Zeev Suraski 385d1aa664 Fix a crash bug in certain situations of class redeclarations 2000-05-25 16:26:22 +00:00
Frank M. Kromann fcd7794c2b Making ZLIB compile on Win32 2000-05-25 16:14:05 +00:00
Frank M. Kromann 36c87e18d6 fixing typo 2000-05-25 16:13:19 +00:00
Zeev Suraski f78e1408c5 (about the removed line - we agreed that the NEWS file should only contain stuff
that would interest end users, removing warnings isn't such a thing in my opinion)
2000-05-25 15:21:54 +00:00
Zeev Suraski 1895a09749 Only fetch globals if it's necessary (which it usually won't be) 2000-05-25 14:43:30 +00:00
Sascha Schumann cecfdbe71e Accept CVS version of libtool (1.3c) 2000-05-25 13:39:50 +00:00
Kristian Köhntopp e5835b63c9 - Added credits. 2000-05-25 11:01:31 +00:00
Jouni Ahto cf9ea9d9cd - Move to high performance api, use Z_* macros.
- Added some spaces here and there.
# Have yet to test that I didn't break anything...
2000-05-25 07:51:40 +00:00
Thies C. Arntzen ff53dde157 @- Uncommitted outstanding OCI8 transactions are now rolled back
@  before the connection is closed. (Thies)
2000-05-25 07:44:45 +00:00
Thies C. Arntzen e319b5f6a5 @- ignore_user_abort() & friends should now work in CGI mode as well.
@  (Patch by daniel.braun@ercom.fr)
2000-05-25 07:01:34 +00:00
57735564ec ChangeLog update 2000-05-25 01:09:11 +00:00
148a3396ec NEWS update 2000-05-25 01:09:08 +00:00
Sterling Hughes 7bd0936291 Check lib. 2000-05-25 00:15:29 +00:00
Andrei Zmievski 4197a68602 @ Fixed min()/max() segfault. (Andrei) 2000-05-24 19:07:17 +00:00
Sascha Schumann c3bff72209 Add -traditional-cpp for Rhapsody and -D_BSD_TIMEOFDAY_FLAVOR for DG/UX.
Also fix the search path for sendmail.
2000-05-24 17:31:16 +00:00
Hartmut Holzgraefe f9d1b16d8b proto takeover from php3 2000-05-24 16:28:16 +00:00
Sascha Schumann 8a86e37d69 The behaviour for result == NULL || entry == NULL is undefined. 2000-05-24 14:46:13 +00:00
Sascha Schumann faf4f764b7 If no further directory exists, php_readdir_r() returns success and sets
*result to NULL.
2000-05-24 14:41:28 +00:00
Frank M. Kromann 3d939af4a3 Adding PHP_EXIF directive to actually include the functions 2000-05-24 11:35:09 +00:00
Frank M. Kromann 69a44fdae8 Updating workspace with the latest modules 2000-05-24 11:33:58 +00:00
Frank M. Kromann f9fc8f78ab Adding project for new exif module 2000-05-24 11:32:44 +00:00
Sascha Schumann a33c135b0a Add enable-threads flag for gcc on HPUX 2000-05-24 11:13:11 +00:00
Sascha Schumann 25df65b0b8 Support old-style readdir_r() 2000-05-24 11:06:57 +00:00
Sascha Schumann ff4031585a Avoid building two versions of the time-related reentrant functions. 2000-05-24 10:44:57 +00:00
Rasmus Lerdorf 3c61d015c2 @ New module for reading EXIF header data from JPEG files. Most digital
@ cameras will embed all sorts of information about a picture inside the
@ jpeg images it generates.  (Rasmus)
exif module
2000-05-24 10:33:18 +00:00
Thies C. Arntzen 9b916e6a48 rename hastable -> _hashtable to avoid clashes 2000-05-24 09:52:57 +00:00
Thies C. Arntzen 78a1fdfcaa add rdbuf() to our own istdiostream implementation, allowing C++ compile
using SUN and SGI native compilers. (by Jayakumar Muthukumarasamy <jk@kasenna.com>)
2000-05-24 09:44:02 +00:00
Rasmus Lerdorf 93feb306f8 @ Fix a couple of warnings in the gd and ldap modules
num_links is a long there
2000-05-24 08:58:40 +00:00
Thies C. Arntzen e3e75eb2da remove gremlin 2000-05-24 08:41:35 +00:00
Jouni Ahto ec93ec1fb1 Added PostgreSQL module info function. 2000-05-24 06:48:04 +00:00
Hartmut Holzgraefe e191baa1a3 php_basename() prototype changed according to latest changes in string.c 2000-05-24 05:51:33 +00:00
fd4e7282fe ChangeLog update 2000-05-24 01:09:17 +00:00
09d2f7e280 NEWS update 2000-05-24 01:09:14 +00:00
Sascha Schumann 0f54988877 Convert config.m4 to make use of the new build system features 2000-05-23 23:46:38 +00:00
Sascha Schumann d348a83a72 Make imap extension buildable as shared module. 2000-05-23 23:36:44 +00:00
Sascha Schumann 27ca66b410 Make recode extension buildable as shared module. 2000-05-23 23:30:38 +00:00
Sascha Schumann 21f77edba0 Make msql extension buildable as shared module. 2000-05-23 23:24:05 +00:00
Sascha Schumann 5df3ca812b Add INFORMIX_SHARED_LIBADD to LT_SHARED_LIBADD 2000-05-23 23:19:11 +00:00
Sascha Schumann 3563e0adba Make informix extension buildable as shared module on Unix. 2000-05-23 23:13:34 +00:00
Sascha Schumann f1eefa64ec A couple of cleanups and shared-libadd additions 2000-05-23 23:13:13 +00:00
Hartmut Holzgraefe df4547a3df another bunch of proto fixes 2000-05-23 23:13:02 +00:00
Hartmut Holzgraefe 0fa7618f7c proto function name fixed 2000-05-23 22:30:21 +00:00
Hartmut Holzgraefe 94cca68983 added a missing proto 2000-05-23 22:28:07 +00:00
Sascha Schumann cab5f6afb8 Make gettext extension compilable as shared module. 2000-05-23 22:26:51 +00:00
Hartmut Holzgraefe 9a8a9d774e even more protos were missing 2000-05-23 22:26:29 +00:00
Hartmut Holzgraefe 3d3d385d37 some protos where missing, took them from php3 2000-05-23 22:24:05 +00:00
Hartmut Holzgraefe 887c672a6c proto typo fix 2000-05-23 22:20:36 +00:00
Hartmut Holzgraefe 7a0855aeb5 some protos where missing proto keyword 2000-05-23 22:19:29 +00:00
Hartmut Holzgraefe 83d987b48d protos where lacking return types 2000-05-23 22:18:08 +00:00
Hartmut Holzgraefe e09b2d0df4 integratet protos from php3 version 2000-05-23 22:11:56 +00:00
Hartmut Holzgraefe 58acf7dbe1 some protos fixed
commented out yet not implemented function icap_popen() from functiontabe
2000-05-23 22:07:33 +00:00
Hartmut Holzgraefe 72c4912f58 some protos got to the wrong function - fixed 2000-05-23 21:56:30 +00:00
Sascha Schumann 773e306df2 Add check for Bison. A recent version is required when in ZTS mode. 2000-05-23 20:32:27 +00:00
Rasmus Lerdorf 7182e722ca Need a PHPAPI version of basename for some stuff I am working on.
Also fixed a bug along the way in the basename function.  If it
was fed something like "filename.ext/////" it would return the string
with all the slashes whereas if you fed it "/path/filename.ext////" it
would get it right.
@ Fixed basename() bug where "file.ext///" would not return the same
@ as "/path/file.ext///" (Rasmus)
2000-05-23 20:16:14 +00:00
Hartmut Holzgraefe ee82f87cbf one little unimportant detail (cut&paste is evil :) 2000-05-23 20:13:10 +00:00
Hartmut Holzgraefe 251cda4941 a little less optimized, but no dirty tricks anymore 2000-05-23 20:07:32 +00:00
Sascha Schumann 5d10b23a78 Make calc_levdist static and fix pointer swapping. 2000-05-23 19:27:02 +00:00
Zeev Suraski 1ea8d6afac - Update Windows project to include levensthein.c and update NEWS file 2000-05-23 17:45:05 +00:00
Sascha Schumann dec92a445f Add interesting email which explains why disabling -fPIC works on Linux
by Martin v. Loewis <martin@loewis.home.cs.tu-berlin.de>
2000-05-23 17:23:21 +00:00
Andi Gutmans 617266e33e - Virtual current working directory is now enabled
- Added support for mkdir()/rmdir() and more
2000-05-23 17:02:21 +00:00
Sascha Schumann 417f74451f Cosmetic changes 2000-05-23 15:43:29 +00:00
Sascha Schumann 112525ea9f Some systems don't have dirent.h. Wrap include appropiately. 2000-05-23 15:15:48 +00:00
Sascha Schumann 2aaa538aef Use reentrant version of readdir. If the target platform does not support
the POSIX-like readdir_r, we fall back to readdir. In ZTS mode, this will
cause php_readdir_r calls to be serialized.
2000-05-23 15:13:16 +00:00
Sascha Schumann be6afb3fcc Add POSIX-like readdir_r for Win32 2000-05-23 14:58:43 +00:00
Andi Gutmans 22dba603f5 - English fix. 2000-05-23 14:42:22 +00:00
Hartmut Holzgraefe 4571d8ddea name changed from levdist() to levenshtein()
(although i bet we'll get a    levenstein() alias some day)
2000-05-23 14:37:39 +00:00
Andi Gutmans 521f03c184 - Support virtual unlink() 2000-05-23 14:36:27 +00:00
Hartmut Holzgraefe 0eb51100b7 added function "int levdist(string str1, string str2)"
that will calculate the Levenshtein distance between two
strings (faster and possibly more accurate than similar_text())
2000-05-23 14:10:37 +00:00
Andrew Skalski 6d51f4a788 Changed the #ifdefs around "errno = ETIMEDOUT;" to include the rest
of the statement ["if (n == 0)"]
2000-05-23 13:56:04 +00:00
Andi Gutmans 32dffec0f8 - PHP_WIN32 macro should be used with #ifdef/#ifndef
- Always use PHP_WIN32 instead of WIN32/WINNT values
2000-05-23 13:49:55 +00:00
Sascha Schumann cd8c4268ec Revert recent COMPILE_DL change. 2000-05-23 13:46:16 +00:00
Andrei Zmievski 03851ced5f Clean up the patch by Hartmut. 2000-05-23 12:38:12 +00:00
Sterling Hughes ae0d73e87d 'char *' to 'char' 2000-05-23 12:14:20 +00:00
Frank M. Kromann c9158aec30 fixing type 2000-05-23 11:52:04 +00:00
Frank M. Kromann 34e74f8afe chang #if to #ifdef 2000-05-23 10:36:48 +00:00
Thies C. Arntzen cf1d0f1844 fixed newly introduced crash 2000-05-23 10:36:18 +00:00
Sascha Schumann 49b2166e1a Use new syntax 2000-05-23 10:26:35 +00:00
Sascha Schumann 99133bf4bb --with-foo causes $withval to be set to "yes," not "" 2000-05-23 10:21:40 +00:00
Thies C. Arntzen f51150584c even better check for netinet/in.h 2000-05-23 10:12:42 +00:00
Thies C. Arntzen 30b43665e8 make ftp compile on unix again 2000-05-23 10:11:09 +00:00
Sascha Schumann 3fdc316faf s/COMPILE_DL/COMPILE_DL_EXTNAME/ 2000-05-23 09:39:25 +00:00
Sascha Schumann 4686a3b50e Use #ifdef COMPILE_DL_EXTNAME solely. 2000-05-23 09:33:51 +00:00
Sascha Schumann 0236982d6d s/COMPILE_DL/COMPILE_DL_EXTNAME/ for Windows build files. 2000-05-23 09:22:01 +00:00
Sascha Schumann 2472700dd1 Only print the attention thing, if the MD5 and DES checks failed. 2000-05-23 09:09:11 +00:00
Frank M. Kromann 08bd9586fb making ftp module compile and work on win32 2000-05-23 08:05:22 +00:00
Thies C. Arntzen 61ceb9e5ab bump version to 4.0.1-dev 2000-05-23 07:49:23 +00:00
Jouni Ahto c32de173c3 According to current PostgreSQL docs, using PQoidStatus() is deprecated. 2000-05-23 06:03:34 +00:00
Hartmut Holzgraefe 78cec9f33e again (due to feature request in bug id #3251)
added optional 3rd parameter 'limit' to explode() as in split()
2000-05-23 05:04:28 +00:00
Sterling Hughes 39af86f017 @-Add the swf_ortho function. (Sterling) 2000-05-23 04:09:20 +00:00
d91068a88a ChangeLog update 2000-05-23 01:09:13 +00:00
f9bc6ac04e NEWS update 2000-05-23 01:09:10 +00:00
Hartmut Holzgraefe 1ec84f9c21 fix for bug #2852 : argc inconsistency 2000-05-22 23:24:55 +00:00
Hartmut Holzgraefe 22bfb799a7 -i, -v, -h and -? execution pathes didn't flush the output buffer
on exit, resultiong in no output at all when "output-buffering=On"
( BUG id#3420 )
2000-05-22 22:49:18 +00:00
Sascha Schumann 8a3edf2cab Add section about adding shared module support to an existing module. 2000-05-22 22:33:51 +00:00
Frank M. Kromann bd29009c31 oops forgot to save project before commit 2000-05-22 21:58:30 +00:00
Frank M. Kromann 7741269930 adding project for swf 2000-05-22 21:58:29 +00:00
Andrew Skalski 3ac4c96641 applied Luca Montecchiani's win32 fixes (open files in binary mode
using the "b" fopen flag, and use closesocket rather than close
when closing sockets)
2000-05-22 21:16:58 +00:00
Sterling Hughes 072755ca8d @-Allow the writing of flash files to stdout. 2000-05-22 20:56:09 +00:00
Sterling Hughes 6ba87f8cf6 Add SWF. 2000-05-22 20:50:10 +00:00
Hartmut Holzgraefe 398923de53 in [mt_]rand(): (see BUG #3353)
- additional range checking for (max-min)<=[MT_]RAND_MAX
- [mt_]rand(0,[mt_]getrandmax()) will now work without integer overflow
2000-05-22 20:37:26 +00:00
Jouni Ahto cde504ad27 # Guess I'll take it for now... there's actually even something coming, just
# waited for 4.0.0 to be released.
2000-05-22 20:26:36 +00:00
833 changed files with 80796 additions and 20093 deletions

No files matched your search

+8 -9
View File
@@ -43,9 +43,9 @@ Exceptions:
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. _php3_addslashes())
recalculated with strlen() (e.g. php_addslashes())
[5] Use php3_error() to report any errors/warnings during code execution.
[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,
@@ -63,12 +63,11 @@ Exceptions:
Naming Conventions
------------------
[1] Function names for user functions implementation should be prefixed with
"php3_", and followed by a word or an underscore-delimited list of words,
in lowercase letters, that describes the function.
[1] Function names for user functions should be enclosed with in
the PHP_FUNCTION() macro.
[2] Function names used by user functions implementations should be prefixed
with "_php3_", and followed by a word or an underscore-delimited list of
[2] 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'.
@@ -80,7 +79,6 @@ Naming Conventions
between words.
Syntax and indentation
----------------------
@@ -123,7 +121,8 @@ function does. It would look like this:
/* {{{ proto int abs(int number)
Return the absolute value of the number */
void php3_abs(INTERNAL_FUNCTION_PARAMETERS) {
PHP_FUNCTION(abs)
{
...
}
/* }}} */
+1 -2
View File
@@ -1,3 +1,2 @@
For the list of people who've put work into PHP 4.0, please see
http://www.php.net/version4/credits.php
http://www.php.net/credits.php
+9170
View File
File diff suppressed because it is too large. Load diff
+352
View File
@@ -0,0 +1,352 @@
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: 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
-------------------------------------------------------------------------------
== 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: 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 <jah@mork.net>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: msql
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
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: Jouni Ahto <jah@mork.net>
MAINTENANCE: Odd fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: sybase
MAINTENANCE: Unknown
STATUS: Not Working
-------------------------------------------------------------------------------
EXTENSION: sybase_ct
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: oci8
PRIMARY MAINTAINER: Thies C. Arntzen <thies@digicol.de>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: odbc
PRIMARY MAINTAINER: Andreas Karajannis <Karajannis@gmd.de>
MAINTENANCE: Maintained
STATUS: Working
COMMENT: Working except for persistent connections
-------------------------------------------------------------------------------
EXTENSION: oracle
PRIMARY MAINTAINER: Thies C. Arntzen <thies@digicol.de>
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: calendar
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: com
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: cpdf
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: CURL
PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
MAINTENANCE: Maintained
STATUS: Experimental
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
MAINTENANCE: Unknown
STATUS: Unknown
SINCE: 4.0.1
-------------------------------------------------------------------------------
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: 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: Rasmus Lerdorf <rasmus@php.net>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: mcal
PRIMARY MAINTAINER: Chuck Hagenbuch <chuck@horde.org>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: mcrypt
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: mhash
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: pcre
PRIMARY MAINTAINER: Andrei Zmievski <andrei@ispi.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: pspell
PRIMARY MAINTAINER: Vlad Krupin <phpdevel@echospace.com>
MAINTENANCE: Unknown
STATUS: Unknown
SINCE: 4.0.2
-------------------------------------------------------------------------------
EXTENSION: readline
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: recode
PRIMARY MAINTAINER: Kristian Köhntopp <kris@koehntopp.de>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: session
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
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: Unknown
STATUS: Unknown
SINCE: 4.0.2
-------------------------------------------------------------------------------
EXTENSION: swf
PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
MAINTENANCE: Maintained
STATUS: Unix (won't change)
-------------------------------------------------------------------------------
EXTENSION: sysvsem
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: sysvshm
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: wddx
PRIMARY MAINTAINER: Andrei Zmievski <andrei@ispi.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: xml
PRIMARY MAINTAINER: Thies C. Arntzen <thies@digicol.de>
MAINTENANCE: Maintained
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: yaz
PRIMARY MAINTAINER: Adam Dickmeiss <adam@indexdata.dk>
MAINTENANCE: Maintained
STATUS: Unknown
SINCE: 4.0.1
-------------------------------------------------------------------------------
EXTENSION: zlib
PRIMARY MAINTAINER: Stefan Roehrich <sr@linux.de>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
# iptc?
+93 -12
View File
@@ -5,15 +5,41 @@ 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
Note! Only install either the static module or the dynamic one. Do not
install both.
Note 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.
Note 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.
@@ -36,6 +62,9 @@ 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
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:
@@ -64,10 +93,11 @@ $ 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)
cd ../php-4.0.x
cp php.ini-dist /usr/local/lib/php.ini
$ 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.0.x
$ 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
@@ -263,14 +293,12 @@ Installing PHP can be done in four simple steps:
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
The 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.
4b. Setting up the server. (Static Module)
You should now have a new httpd binary. Shut down your existing server,
@@ -289,13 +317,66 @@ Installing PHP can be done in four simple steps:
Any file ending in .phps will now be displayed with full colour syntax
highlighting instead of being executed.
When you are finished making changes to your httpd.conf file, you can
start up your server. Note that on some older server setups, the
AddType lines are in the conf/srm.conf file instead of conf/httpd.conf.
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
-105
View File
@@ -1,105 +0,0 @@
List of PHP maintainers
=======================
Status 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.
--------------------------------------------------------------------------------
EXTENSION: apache
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: cybercash
PRIMARY MAINTAINER: Evan Klinger <evan715@sirius.com>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: dba
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: fdf
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: gd
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: hyperwave
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: informix
PRIMARY MAINTAINER: Danny Heijl <Danny.Heijl@cevi.be>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: interbase
PRIMARY MAINTAINER: Jouni Ahto <jah@mork.net>
STATUS: Odd Fixes
--------------------------------------------------------------------------------
EXTENSION: java
PRIMARY MAINTAINER: Sam Ruby <rubys@us.ibm.com>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: ldap
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
STATUS: Odd Fixes
--------------------------------------------------------------------------------
EXTENSION: mcrypt
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: mhash
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: mssql
PRIMARY MAINTAINER: Frank M. Kromann <fmk@swwwing.com>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: oci8
PRIMARY MAINTAINER: Thies C. Arntzen <thies@digicol.de>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: oracle
PRIMARY MAINTAINER: Thies C. Arntzen <thies@digicol.de>
STATUS: Maintained
COMMENT: Using the new OCI8 driver is encouraged where possible.
--------------------------------------------------------------------------------
EXTENSION: pcre
PRIMARY MAINTAINER: Andrei Zmievski <andrei@ispi.net>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: pdf
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: session
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: snmp
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
STATUS: Odd Fixes
--------------------------------------------------------------------------------
EXTENSION: wddx
PRIMARY MAINTAINER: Andrei Zmievski <andrei@ispi.net>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: xml
PRIMARY MAINTAINER: Thies C. Arntzen <thies@digicol.de>
STATUS: Maintained
--------------------------------------------------------------------------------
EXTENSION: zlib
PRIMARY MAINTAINER: Stefan Roehrich <sr@linux.de>
STATUS: Maintained
--------------------------------------------------------------------------------
-25
View File
@@ -1,25 +0,0 @@
Module Status
------ ------
MySQL Working
COM Working
WDDX Working
PCRE Working
DBA Working
mcrypt Working
mhash Working
dbase Working
aspell Working
imap Working
ldap Working
oci8 Working
oracle Working
iptc Working
informix Working
zlib Working
sysvshm Working
odbc Working (except for persistent connections)
MS SQL Working (tested on phpts and isapi versions)
snmp Working
gettext Working
mcal Working
interbase Working
+7 -21
View File
@@ -1,19 +1,14 @@
ZEND_DIR = $(srcdir)/Zend
SUBDIRS = Zend ext sapi $(TSRM_DIR) $(REGEX_DIR) . $(PEAR_DIR)
SUBDIRS = Zend main ext sapi $(TSRM_DIR) $(REGEX_DIR) . $(PEAR_DIR)
LTLIBRARY_NAME = libphp4.la
LTLIBRARY_SOURCES = \
main.c internal_functions.c snprintf.c php_sprintf.c \
configuration-parser.c configuration-scanner.c \
safe_mode.c fopen-wrappers.c php_realpath.c alloca.c \
php_ini.c SAPI.c rfc1867.c php_content_types.c strlcpy.c \
strlcat.c mergesort.c reentrancy.c php_variables.c php_ticks.c php_virtual_cwd.c
LTLIBRARY_SOURCES = stub.c
LTLIBRARY_DEPENDENCIES = \
Zend/libZend.la \
sapi/$(PHP_SAPI)/libsapi.la \
main/libmain.la \
$(REGEX_LIB) \
$(EXT_LTLIBS) \
$(TSRM_LIB)
@@ -21,13 +16,13 @@ LTLIBRARY_DEPENDENCIES = \
LTLIBRARY_LDFLAGS = -rpath $(phptempdir) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS)
LTLIBRARY_LIBADD = $(LTLIBRARY_DEPENDENCIES) $(EXTRA_LIBS)
PROGRAM_NAME = $(PHP_PROGRAM)
PROGRAM_NAME = php
PROGRAM_SOURCES = stub.c
PROGRAM_LDADD = libphp4.la
PROGRAM_LDFLAGS = -export-dynamic
PROGRAM_DEPENDENCIES = $(PROGRAM_LDADD)
targets = $(LTLIBRARY_NAME) $(PROGRAM_NAME)
targets = $(LTLIBRARY_NAME) $(PHP_PROGRAM)
install_targets = install-sapi install-modules
@@ -38,7 +33,7 @@ include $(top_srcdir)/build/program.mk
install-sapi:
@$(LIBTOOL) --silent --mode=install cp libphp4.la $(phptempdir)/libphp4.la >/dev/null 2>&1
-@$(mkinstalldirs) $(bindir)
-@if ! test -r $(phptempdir)/libphp4.$(SHLIB_SUFFIX_NAME); then \
-@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); \
@@ -53,18 +48,9 @@ install-modules:
$(mkinstalldirs) $(moduledir) && \
echo "installing shared modules into $(moduledir)" && \
rm -f modules/*.la && \
cp modules/* $(moduledir) || true
cp modules/* $(moduledir) >/dev/null 2>&1 || true
install-su: install-modules
(cd pear && $(MAKE) install)
configuration-parser.h configuration-parser.c: $(srcdir)/configuration-parser.y
$(YACC) -p cfg -v -d $< -o configuration-parser.c
configuration-scanner.c: $(srcdir)/configuration-scanner.l
$(LEX) -Pcfg -o$@ -i $<
internal_functions.c: internal_functions.c.in config.status
CONFIG_FILES= CONFIG_HEADERS= ./config.status
.NOEXPORT:
+401 -3
View File
@@ -1,7 +1,405 @@
PHP 4.0 NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11 Oct 2000, Version 4.0.3
- Fixed a possible crash in -a interactive mode (Zeev, Zend Engine)
- Added mysql_escape_string() (Peter A. Savitch and & Brian Wang)
- Fixed many possible crash bugs with improper use of the printf() family of
functions (Andi)
- Fixed a problem that allowed users to override admin_value's and admin_flag's
(Zeev)
- Fixed PostgreSQL module to work when the link handle is omitted (Zeev)
- Fixed returning of empty LOB fields in OCI8. (Thies)
- Added Calendar module to default Win32 build (Andi)
- Added FTP module to default Win32 build (Andi)
- Fixed crash in the POSIX getrlimit() function (alex@zend.com)
- Fixed dirname() under certain conditions (Andi)
- Added --with-imap-ssl to support SSL'ized imap library in RH7 and others
(Rasmus)
- Fixed possible crash bug in parse_url() (Andi)
- Added support for trans sid under Win32 (Daniel)
- IPv6 support in fopen (Stig Venaas)
- Added the shmop extension. It allows more general ways of shared memory
access. (thanks to Ilia Alshanestky <iliaa@home.com> and Slava Poliakov
<slavapl@mailandnews.com> (Derick)
- Added the ability for CURLOPT_POSTFIELDS to accept an associative array of
HTTP POST variables and values. (Sterling)
- Added the CURLOPT_HTTPHEADER option to curl_setopt(). (Sterling)
- Added the curl_error() and curl_errno() functions. (Sterling)
- Changed ext/db not to be enabled by default (Jani)
- Fixed building Apache SAPI module on SCO UnixWare (Sascha)
- Fixed writing empty session sets to shared memory (tcarroll@chc-chimes.com)
- Added support for BSD/OS make (Sascha)
- Added improved URL rewriter (Sascha)
- Fixed readdir_r() use on Solaris (Sascha)
- Improved HTTP headers for private-caching (jon@csh.rit.edu, Sascha)
- Added new function session_cache_limiter (jon@csh.rit.edu, Sascha)
- Added ftp_exec to the ftp functions (thanks to <jhennebicq@i-d.net>)
(Derick)
- PEAR: add last executed query as debug info in DB errors (Stig)
- PEAR: allow multiple modes in PEAR_Error (Stig)
- Made the Sybase CT module thread safe (Zeev)
- Added second argument to array_reverse() that indicatese whether
the original array keys should be preserved. (Andrei)
- Clean up htmlspecialchars/htmlentities inconsistencies. (Rasmus)
- PEAR: renamed DB_GETMODE_* to DB_FETCHMODE_*, added setFetchMode()
in DB_common to set the default mode, added some MySQL tests (Stig)
- Made eval() and several other runtime-evaluated code portions report the
nature and location of errors more accurately (Stas)
- Added an optional parameter to wordwrap that cuts a string if the length of a
word is longer than the maximum allowed. (Derick)
- Added functions pg_put_line and pg_end_copy (Dirk Elmendorf)
- Added second parameter for parse_str to save result (John Bafford)
- Fixed bug with curl places extra data in the output. (medvitz@medvitz.net)
- Added the pathinfo() function. (Sterling)
- Updated sybase_ct module and its sybase_query to use high performance API.
(Joey)
- Added a more configurable error reporting interface to DB. (Stig)
- Added is_uploaded_file() and move_uploaded_file() (Zeev)
- Added several directives to php.ini - post_max_size, file_uploads,
display_startup_errors - see php.ini-dist for further information (Zeev)
- Worked around a bug in the libc5 implementation of readdir() (Stas)
- Fixed some potential OpenBSD and NetBSD crash bugs when opening files. (Andi)
- Added EscapeShellArg() function (Rasmus)
- Added a php.ini option session.use_trans_sid to enable/disable trans-sid.
(Sterling)
- Added the Sablotron extension for XSL parsing. (Sterling)
- Fixed a bug in checkdate() which caused < 1 years to be valid (Jani)
- Added support for an optional output handler function for output
buffering. This enables transparent rendering of XML through XSL,
transparent compression, etc. (Zeev)
- Added support for user defined 'tick' callback functions. This helps
emulate background processing. (Andrei)
- Fixed problem with having $this as the XML parser object. (Andrei)
- Internal opened_path variable now uses the Zend memory manager so that full
paths of files won't leak on unclean shutdown (Andi)
- Removed support of print $obj automatically calling the __string_value()
method. Instead define yourself a method such as toString() and use
print $obj->toString() (Andi, Zend Engine)
29 Aug 2000, Version 4.0.2
- Added PHP API for Zend's ticks. (Stig)
- PHP 3 regression testing framework re-born (Stig)
- Added php_uname() function (Stig)
- Made a minor change to allow building with OpenLDAP 2.0 (Stig Venaas)
- Fixed a bug in preg_replace() that would truncate subject string if the
first argument was en empty array. (Andrei)
- Added ob_get_length function (Stig)
- Fixed a bug that did not respect limit parameter in preg_replace() when
using /e modifier. (Andrei)
- Added ability for each xml_set_*_handler() function to take the
array($obj, 'method') syntax for the handler argument as well
as the normal function name. (Andrei)
- Updated array_walk() to be able to accept array($obj, 'method')
syntax for the walk function. (Andrei)
- Fixed segfault with fgets(), fgetcsv(), fgetss(), and fread() when
called with negative length argument. (Torben)
- Fixed by-reference parameters passing for xml_ functions and for scanf
functions (Stas)
- Added experimental Oracle LDAP SDK support. 8.1.6 or later needed. Configure
with something like --with-ldap=/usr/local/oracle/product/8.1.6 (Stig Venaas)
- Fixed memory leaks in eval(); A script that used eval() extensively, could
end up consuming very large amounts of memory during execution (Zeev, Zend
Engine)
- Fixed memory_limit feature, which did not work properly in previous versions
(Zeev, Zend Engine)
- Fixed stdout support with the swf extension. (Sterling)
- Fixed byte order for ip2long and long2ip (Stas)
- Fixed dbase_add_record. (Sterling)
- Added support for libmcrypt 2.4.4 (Derick)
- Added strncasecmp function (Andi, Zend Engine)
- Fixed FTP module to accept multiline server replies (Jani)
- Fixed switch which only has a single default rule. (Andi, Zend Engine)
- Fixed problem with nested foreach()'s. (Andi, Zend Engine)
- The CCVS module is now stable and compiling. It compiles as a CGI and into
Apache cleanly without warnings. (Brendan W. McAdams)
- Fixed mSQL_close(). (nick@loman.net)
- Made return() in a require()'d file work like return() in an include()'d
file (Andi & Zeev, Zend Engine)
- Changed require_once() to work using the same table as include_once()
(Andi & Zeev, Zend Engine)
- Fixed PostgreSQL module to work when the link handle is omitted (Zeev)
- Fixed the Sybase modules to work properly with PHP 4.0 (Zeev)
- Fixed CLOB handling in OCI8 driver when using variable-width
character sets. (Thies)
- Added 4th optional parameter to sybase_[p]connect to specify the charset
for the connection (alf@alpha.ulatina.ac.cr)
- Fixed support for current thttpd releases. (Sascha)
- Added support for kerberized IMAP library using --with-kerberos
(Rasmus, Sascha)
- Virtualize realpath, chmod, chown and utime (Stas)
- Support content-encoding headers in file upload MIME parts
(Ragnar Kjørstad)
- Fixed warning when shutting down OCINLogon() connections. (Thies)
- Fixed \n in session variables bug on Win32 (Stas)
- OCIError() would sometimes not report failed connections. (Thies)
- Fixed HEAD request bug on an Apache ErrorDocument redirect and preserve
the status code across the redirect as well. (Rasmus)
- Added Olympus-specific tags to read_exif_data() (Rasmus)
- Fixed bug in imap_fetchheader() where using FT_PREFETCHTEXT didn't return
the body. Bug #4447. (Jani)
- Fixed exec() returning "\0" when output is empty
- Added XML_Parser class in PEAR (Stig)
- Added "make test" target in pear/ and added some regression tests (Stig)
- Fixed bug in strip_tags function as per bug #5857 (Rasmus)
- Fixed reading of IPTC via GetImageInfo() for certain JPEG files. (Thies)
- Improved the output-buffering functions to be re-entrant (Zeev)
- Made ldap_add(), ldap_modify(), ldap_mod_add(), ldap_mod_replace()
binary-safe. Original patch: Terrence Miao <terrence_miao@email.com> (Jani)
- CGI aka. command line version has now an option '-l' for syntax check
without execution (Hartmut)
- Fixed bug in ldap_get_values_len() which makes it NULL-safe. (Jani)
- Bug-report and fix submitted by Michel Alexeline <alexel@dr15.cnrs.fr>
- Make ext_skel create a Makefile.in set up to handle shared extension
support automatically (Rasmus)
- Fixed php_realpath not to die on non-existing files (needed for touch())
(Stas and china@thewrittenword.com)
- Fixed get_browser() function (Stas)
- Fixed symbol clash which caused a DSO problem on OpenBSD (Rob Black and
anil@recoil.org)
- Added new function: ldap_compare(). (Jani)
- Fixed a bug in ldap_get_entries() and ldap_get_attributes(). (Jani)
- Ported DB to new error reporting scheme in PEAR. (Stig)
- Added sybase and ibase DB backends in PEAR. (Sterling)
- New PEAR package Payment_Verisign for use with the Payflow Pro
(pfpro) extension. (David Croft)
- Added CURL support. (Sterling)
- Catch users trying to set "compatibility" parameter in PDF, which is not
supported from user-land. (Joey)
- Fixed dbase_add_record. (Sterling)
- Added new function wordwrap() to wordwrap long strings from Chris
Russel <russel@yorku.ca> (David Croft)
- Added four additional arguments: attrsonly, sizelimit, timelimit, deref which
were missing in ldap_search(), ldap_list() and ldap_read() functions (Jani)
- Fixed a bug in ldap_search/list/read() which prevented returning the partial
results when 'Sizelimit exceeded' error occurred. (Jani Taskinen)
- Fixed preg_replace() to automatically escape quotes in matched
strings when using /e modifier. (Andrei)
- Itanium patch (Steve Robb)
- Set default include_path so PEAR files can be reached (Stig)
- Added "pear" executable, requires CGI version installed (Stig)
- Added extension ii for Ingres II native support. See README in ext/ingres_ii
directory. (David H)
- Added Win32 project for the Interbase module (Zeev)
- Added ability to perform calls to the parent class without explicitly
specifying its name, using parent::func_name(...) (Zeev, Zend Engine)
- You can now call Ora_Error() without prameters to get the reason
for a failed connection attempt. (Kirill Maximov)
- New extension "pfpro" for interface with Verisign Payflow Pro (David Croft)
- Added IMG_GIF, IMG_JPG, IMG_JPEG, IMG_PNG and IMG_WBMP constants for
imagetypes() function (Rasmus)
- Added ImageTypes() function which returns a bitfield with the supported
image formats. 1=gif, 2=jpeg, 4=png and 8=wbmp (Rasmus)
- Make it possible to specify an empty string as a thousands-seperator
in number_format() (Rasmus)
- Shared module support for LDAP extension (Troels Arvin)
- Fixed a bug with imap_mail where apache would segfault if the rpath
parameter was specified.
- Use dashes and short day name in cookies since some browsers seem picky
about this (Rasmus)
- Added pspell module. (Vlad)
- Added 3 additional arguments to the user-defined error handler - the file
name and line number in which the error occured, and the context (local
variables) of the code in which the error occured (Zeev, Zend Engine)
- Improved the error handling code to handle an error in a user-defined error
handling function (Zeev, Zend Engine)
- Fixed leak when using string offsets in the array() construct.
(Andi, Zend Engine)
- Fixed corruption problem when changing deeply nested values in objects.
(Andi & Zeev, Zend Engine)
- Improved array_multisort() to be able to specify sort type as well sort
order. Incidentally, it can be used to sort multi-dimensional arrays
as well. (Andrei)
- Fixed a possible data corruption in case of a huge amount of aborted requests
(Zeev)
- Apache module would sometimes close a wrong file-descriptor. (Sascha)
- Fixed use of alternative storage handlers in the session module. (Sascha)
- Updated str_pad() to be able to pad on left/right/both sides. (Andrei)
- Fixed crash in gzopen(). (Thies)
- Multiple character set support in gdttf.c (Rob Goodwin)
- When using HTTP auth from PHP, fill in the %u custom log field so the
authenticated used id will get logged in the Apache access_log (Rasmus)
- Support for pdflib 3.01. (Uwe)
- FDF Data is handled properly and can be accessed by reading
HTTP_RAW_POST_DATA. (Uwe)
- Added new 'O' format modifier that will output the GMT offset as "[+-]HHMM"
(eg: Pacific time is -0700). This is useful for things such as Date: mail
headers. (Mike W)
- Fixed crash on OCI?Logon() failure. (Thies)
- Make the special Header("http/...") response be case insensitive like 3.0
(Rasmus)
- Allow cybercash to compile as a DL module. (Sterling)
- Fixed the dbase_create function. (Sterling)
- Fixed a problem under some versions of Windows that could cause PHP to hang
on startup if errors occured, e.g. in the php.ini file (Zeev)
- Fixed opendir() again. It should actually work well continuously now (Zeev)
- Added three additional arguments to be sent to a user-defined error handler -
the filename and line number in which the error occured, and the context
(the local variables) of the error (Zeev, Zend Engine)
- Improved the error handling code to handle an error in a user-defined error
handling function (Zeev, Zend Engine)
- Added an optional parameter to preg_replace() that can be used to
specify how many replacements to make. (Andrei)
28 Jun 2000, Version 4.0.1
- Fixed a possible crash in the LDAP modify code. (Eric Kilfoil)
- Fixed a bug in opendir(), which prevented readdir() from working properly if
the $dir argument wasn't explicitly specified (Zeev)
- Made --enable-discard-path work again. (Andi)
- Removed 8KB limit on line length of the file() function (Zeev)
- Disabled dl() when PHP is being used as a module inside a multithreaded web
server - it didn't work before, and caused weird results (Zeev)
- Added the ImageColorClosestHWB(), ImageCopyMerge() and ImagePaletteCopy()
functions. (Sterling)
- Added ImageCreateFromWBMP() function. (Jouni)
- Fixed problems with POST requests under the NSAPI module. (Roberto Biancardi)
- Added spliti() function. (Thies)
- Fixed serializer behaviour with regards to serializing objects whose class
definition was not available in the deserializing context. (Sascha)
- Improve memory cache performance and increase cache size. (Stas, Zend Engine)
- Added a crc32 checksum function - used by the UdmSearch search engine
and currently run through a system call. This will speed up the UdmSearch
php frontend significantly. (Rasmus)
- Modified in_array() to not touch array pointer. (Andrei)
- Added restore_error_handler(). (Zeev, Zend engine)
- Fixed erroneous file names and line numbers in error situations under the
multithreaded version of PHP - most noticeably Win32 (Zeev, Zend Engine)
- Fixed problem with CGI crashing on certain servers especially Windows Apache
& O'Reilly website (Andi)
- Added Pi3Web SAPI module; run ./configure --with-pi3web to enable this.
(Holger; zimpel@t-online.de)
- Enhanced WDDX functions to call __sleep() and __wakeup() when working on
objects. (Andrei)
- Changed WDDX to serialize arrays as structs only if needed. (Thies)
- Implemented max_execution_time under Win32 (Zeev)
- Updated strtotime() to handle many more formats. It now has complete
feature parity with GNU date command. (Andrei)
- Added support for multiple arguments in unset(). (Faisal, Zend Engine)
- Functions that expect a resource but are passed something else now return
NULL instead of FALSE. (Thies, Zend Engine)
- Fixed gmmktime(), on certain systems it incorrectly adjusted for the timezone
offset and daylight savings time. (Andrei)
- Moved VC++ Win32 project and workspace files to the win32 directory
(Zeev)
- Fixed checkdate() to not return true on non-numeric arguments (Rasmus)
- Added --enable-c9x-inline option for compilers which support the new C9x
standard. If you encounter undefined references to i_zend_is_true and
other symbols, you should enable this. (Sascha, Zend Library)
- Fixed a problem in ldap_add() and ldap_modify(), sometimes added trailing
garbage to the values (Stig Venaas)
- Fixed a problem with dbmopen() not handing 'c' correctly with dbm/db/ndbm
databases. (JimJag)
- Fixed a crash in number_format() when used with locales. (Andrei)
- Fixed an initialization problem in the MS-SQL problem that could cause
a crash in mssql_query() (Zeev)
- Upgraded PCRE to version 3.2 and fixed a bug when anchored pattern
matched an empty string. (Andrei)
- Fixed a bug that prevented PHP from paying attention to the extension_dir
directive with extensions that were loaded from the php.ini file (Zeev)
- Changed set_error_handler() to return the name of the previously defined
error handler, if any (Zeev, Zend Engine)
- Declared <?php_track_vars?> officially dead. It didn't work in PHP 4.0.0
either, but now it's gone for good (Zeev)
- Make convert_cyr_string() binary safe and stop it from corrupting other
PHP variables. (Andi)
- Added functions array_unique, array_intersect and array_diff (Stig Venaas)
- Fixed problem when using uninitialized values in comparisons with strings.
They behave as empty strings again just like in PHP 3.
(Andi & Zeev, Zend Engine)
- Fixed 'Z' flag in date() to adjust for daylight savings time. (Andrei)
- Fixed var_dump() not to modify the internal order of array elements (Zeev)
- Fixed stripcslashes() to remove to strip \ in unknown escapes instead of
leaving it. (Andrei)
- Changed WDDX to always serialize arrays as structs. (Andrei)
- Fixed include_once() to issue a warning in case the supplied file name is
not found (Zeev, Zend Engine)
- Fixed a bug in get_declared_classes() which could return the same class
multiple times under certain circumstances (Zeev, Zend Engine)
- Fixed a bug in rawurldecode() that would cause in rawurldecode() corrupting
its argument (Zeev)
- Parse errors (or other errors) in the php.ini files under Windows will no
longer mess up the HTTP headers in CGI mode and are now displayed in a
message box (Zeev)
- Fixed a crash in OCIFetchStatement() when trying to read after all data
has already been read. (Thies)
- fopen_wrappers() are now extensible via modules (Hartmut Holzgraefe)
- Make trim strip \0 to match php 3 (Rasmus)
- Added function imagecreatefromxbm(). (Jouni)
- Added function imagewbmp(). (Jouni, based on patch from Rune Nordbøe
Skillingstad)
- Added str_pad() for padding a string with an arbitrary string on left or
right. (Andrei)
- Made the short_tags, asp_tags and allow_call_time_pass_reference INI
directives work on a per-directory basis as well, e.g. from .htaccess
files. (Zeev)
- Added fflush() function. (Eric Huss)
- Fixed a problem with static variables, default function arguments and class
member variables, that contained array values. (Andi & Zeev, Zend Engine)
- Fixed virtual() when used with output buffering (Marc Pohl)
- Clean up constants in flock() function and add optional 3rd arg which
is set to true on EWOULDBLOCK (Rasmus)
- Added functions pg_loimport(), pg_loexport(). (Jouni)
- Added SWF support to getimagesize() function (Derick Rethans)
- Added support for both indexed and non-indexed arrays of file uploads
eg. name="file[]" type="file" (Rasmus)
- Added create_function(), which gives the ability to create functions
on-the-fly (Zeev, Zend Engine)
- Added support for comparisons of arrays (with arrays) and objects (with
objects); The equality operator (==) performs an unordered comparison,
whereas the identity operator (===) performs an ordered comparison (Zeev,
Zend Engine)
- Allow all functions that receive user-defined function callbacks to accept
an array that contains an object and a method name, in place of a function
name, e.g. usort($array, array($obj, "ObjSort")) (Zeev, Zend Engine)
- Added set_error_handler() to allow custom error handling functions,
instead of the built-in error handling code (Zeev, Zend Engine)
- Renamed user_error() to trigger_error(); user_error() remains
defined for compatibility (Zeev, Zend Engine)
- Fixed the global/static statements to require a trailing terminating
semi-colon ';'. (Andi, Zend Engine)
- Cleaned up PCRE extension and made it binary-safe. (Andrei)
- Added third argument to in_array(). If it's true, then in_array()
will use strict comparison instead of the default one. (Andrei)
- Added pg_trace() and pg_untrace (Dominic J. Eidson & Zeev)
- ignore_user_abort=Off is now default. (Thies)
- Added array_merge_recursive() that will recursively merge values
under the same keys. (Andrei)
- fixed crash in OCIParse when parsing invalid SQL. (Thies)
- Fixed a bug in mysql_connect() that made it ignore the socket argument, in
case of non-persistent connects (Zeev)
- Added disable_functions php.ini directive, to allow administrators to disable
certain functions for security reasons (Zeev)
- Fixed sessions on Win32. When setting the directory depth parameter in
save_path you need to now delimit it with a ';' instead of ':', e.g
"5;/tmp" instead of "5:/tmp" (Andi)
- Changed the Apache handler's return status to 'Declined' when a requested
PHP file could not be found. Returning 'Not Found' caused problems
in the ErrorDocument handler stage in that $REDIRECT_REDIRECT_ERROR_NOTES
was not getting set at all. Moving to 'Declined' should fix this and I
can't see any other side effects. (Rasmus)
- Fixed scanning decimal numbers in internationalized environments. They should
always be in standard US format e.g. 23.3. (Andi, Zend Engine)
- Added second argument to preg_quote() which allows quoting of
one additional character, usually the regex delimiter. (Andrei)
- Uncommitted outstanding OCI8 transactions are now rolled back
before the connection is closed. (Thies)
- ignore_user_abort() & friends should now work in CGI mode as well.
(Patch by daniel.braun@ercom.fr)
- Added extension YAZ (dickmeiss).
- Fixed a crash bug triggered by certain cases of class redeclarations
(Stas & Zeev, Zend Engine)
- Fixed min()/max() segfault. (Andrei)
- New module for reading EXIF header data from JPEG files. Most digital
cameras will embed all sorts of information about a picture inside the
jpeg images it generates. (Rasmus)
- Fixed basename() bug where "file.ext///" would not return the same
as "/path/file.ext///" (Rasmus)
- Added the swf_ortho function. (Sterling)
- Moved to virtual current working directory support. This highly improves the
functionality and stability of multi-threaded versions of PHP (Andi, Sascha)
22 May 2000, Version 4.0.0 Release
- Allow the writing of flash files to stdout.
- Fixed a crash bug in .phps syntax-highlighted files (Andi)
- Improved round() to allow specification of rounding precision.
(Andrei, Todd Kirby <kirbyt@yahoo.com>)
@@ -31,8 +429,8 @@ PHP 4.0 NEWS
- ImagePolygon() is no longer limited by a maximum number of polygons.
(Marc Pohl)
- Added configure time checking for bcmath package. (Joey, Sascha)
- Added get_declared_classes(). (Andrei, Zend library)
- Add initial NSAPI module from Jayakumar Muthukumarasamy. (Rasmus)
- Added get_declared_classes(). (Andrei, Zend Engine)
- Added initial NSAPI module from Jayakumar Muthukumarasamy. (Rasmus)
- Added the SWF module which allows you to create Macromedia Flash files via
libswf. (Sterling)
- Improved UNIX build system to support more vendor make tools (Sascha)
@@ -41,7 +439,7 @@ PHP 4.0 NEWS
- Fixed a crash in array_multisort() that happened when empty arrays
were passed to it. (Andrei)
- Added substr_count() from Peter Kovacs. (Andrei)
- Add an optional third argument to fseek to indicate where to seek from.
- Added an optional third argument to fseek to indicate where to seek from.
(Andrei)
- OCIBindByName() will no longer complain about bindlength beeing zero. (Thies)
- Converted the IMAP module to the high performance API (Zeev)
+1 -1
View File
@@ -19,7 +19,7 @@ Having said that, here are the organizational rules:
2. Discuss any significant changes on the list before committing.
3. Look at MAINTANERS file to see who is the primary maintainer of
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
+181
View File
@@ -0,0 +1,181 @@
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. In fact, 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 example:
my_function(int arg1, int arg2 [, int arg3 [, int arg4]])
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 too much the generated code. It tries to be useful in most of
the situations you might encounter, but automatic code generating 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;
???LS_FETCH();
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, "???", ???G());
ZEND_FETCH_RESOURCE(???, ???, font, font_id, "???", ???G());
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");
}
/* }}} */
+50 -5
View File
@@ -14,6 +14,19 @@ HOW TO CREATE A SELF-CONTAINED PHP EXTENSION
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
@@ -69,7 +82,7 @@ CREATING THE MAKEFILE TEMPLATE
LTLIBRARY_SHARED_NAME = foobar.la
LTLIBRARY_SOURCES = foo.c bar.c
include $(top_srcdir)/build/rules.mk
include $(top_srcdir)/build/dynlib.mk
------------------------------------------------------------------------------
LTLIBRARY_SHARED_NAME specifies the name of the extension.
@@ -93,17 +106,27 @@ CREATING THE M4 CONFIGURATION FILE
PHP_ARG_ENABLE(foobar,whether to enable foobar,
[ --enable-foobar Enable foobar])
PHP_EXTENSION(foobar, $ext_shared)
if test "$PHP_FOOBAR" != "no"; then
PHP_EXTENSION(foobar, $ext_shared)
fi
------------------------------------------------------------------------------
PHP_ARG_ENABLE will automatically set the correct variables, so
that the extension will be enabled by PHP_EXTENSION in shared mode.
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
[You are currently alone here. There are a lot of existing modules,
use a simply module as a starting point and add your own code.]
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
@@ -126,4 +149,26 @@ INSTALLING A SELF-CONTAINED EXTENSION
$ ./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_EXTENSION(foo, $ext_shared) to enable
building the extension.
3. Add the following line to Makefile.in:
LTLIBRARY_SHARED_NAME = foo.la
4. Add the following lines to your C source file:
#ifdef COMPILE_DL_FOO
ZEND_GET_MODULE(foo)
#endif
+16 -1
View File
@@ -51,9 +51,21 @@ that you wish to run PHP on:
Troubleshooting
---------------
*) Why does the compile fail at Zend/zend-scanner-cc.cc
or Zend/zend-parser.c ?
These source files are auto-generated from the corresponding .y files.
The default distribution of PHP contains pre-generated versions of these
files that have caused problems for some people. The simplest solution is
to delete the files. They will then be rebuilt correctly. You must have the
following GNU tools to do this:
bison 1.28 or later
flex 2.5.4 or later
*) Why does my PHP library fail to load?
After configuring Zeus, if you get a '502 Bad Gatway' error when
After configuring Zeus, if you get a '502 Bad Gateway' error when
accessing a PHP page, there are problems loading the PHP
library. Check the error log ($ZEUSHOME/web/log/errors) for errors.
@@ -81,6 +93,9 @@ Ensure you run ./configure with the `--enable-libgcc' parameter. You
may need to set LDFLAGS to '-L/usr/local/egcs/lib' (path depends on
your gcc installation)
FreeBSD 4.0:
Some people may find they need to run ./configure with the
'--enable-libgcc' compile option too.
For more information and help with Zeus, please visit our website:
+16 -6
View File
@@ -6,14 +6,17 @@ Zend
* allow foreach ($array as $k => &$val) syntax. right now we cannot
traverse an array without copying each element.
* look at replacing c-lib call tolower().
* make hash API functions work with HASH_OF() to save time.
global
------
* make everything on the language-level independent of your locale setings.
* always build the standalone executable as well as the chosen SAPI
target.
* make sure all source files have the "right" copyright.
* the following modules still use PHP3_TLS_*() macros (and thereby don't
work in ZTS mode): ext/dav/dav.c, ext/db/db.c, ext/gd/gd.c, ext/ldap/ldap.c
* INI system causes segfaults in ZTS mode (operates on static HashTable)
* 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
@@ -35,6 +38,8 @@ global
available in ZTS mode.
* add aliases to functions to conform to new naming conventions, e.g.
str_to_upper().
* see what functions might need to be changed to use HashPosition, so
that the internal array pointer is not affected.
documentation
-------------
@@ -53,24 +58,30 @@ 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.
ext/pcre
--------
* have a non-greedy option for preg_replace().
* have an option for preg_grep() to return keys as well.
* update the online docs from version 3.1 man page
ext/session
-----------
* implement a call to set a session read-only to overcome
the need to serialize frame-loads.
* maybe implement finer-grained session variables that could be
locked individually.
* write a network-transparent storage back-end with fallover
facilities
ext/standard
------------
* add a version number to data serialized via serialize().
* array_add(), array_uniq(). (Andrei)
* implement pathinfo() (what the heck is it?)
* array_add(). (Andrei)
* possibly modify parsing of GPC data to automatically create arrays if
variable name is seen more than once.
* implement regex-cache for url-functions.
* strpad(). (Andrei)
* strcase_replace(). (Andrei)
* comparing arrays semantically (like Python). (Andrei)
* move socket related functions to fsock.c.
* get_defined_funcs(), get_defined_vars().
* NOT binary safe:
@@ -83,7 +94,6 @@ ext/standard
ext/wddx
--------
* implement __sleep() and __wakeup() the way serialize()/unserialize() do.
* See if we can support the remaining datatypes:
dateTime
binary
+26
View File
@@ -0,0 +1,26 @@
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.
+3 -1
View File
@@ -1,4 +1,6 @@
## process this file with automake to produce Makefile.am
AUTOMAKE_OPTIONS=foreign
noinst_LTLIBRARIES=libtsrm.la
libtsrm_la_SOURCES = TSRM.c
libtsrm_la_SOURCES = TSRM.c tsrm_strtok_r.c tsrm_virtual_cwd.c
depend:
+2
View File
@@ -0,0 +1,2 @@
- Improve the lock in ts_resource_ex() in order to cover less code.
This can probably be done by more careful hash table access
+21 -15
View File
@@ -2,19 +2,18 @@
+----------------------------------------------------------------------+
| Thread Safe Resource Manager |
+----------------------------------------------------------------------+
| Copyright (c) 1998, 1999 Zeev Suraski |
| 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 |
+----------------------------------------------------------------------+
| This source file is subject to the Zend license, that is bundled |
| with this package in the file LICENSE. If you did not receive a |
| copy of the Zend license, please mail us at zend@zend.com so we can |
| send you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Zeev Suraski <zeev@zend.com> |
| Authors: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#include "TSRM.h"
#ifdef ZTS
#include <stdio.h>
#include <stdlib.h>
@@ -207,13 +206,18 @@ static void allocate_new_resource(tsrm_tls_entry **thread_resources_ptr, THREAD_
/* fetches the requested resource for the current thread */
void *ts_resource(ts_rsrc_id id)
TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id)
{
THREAD_T thread_id = tsrm_thread_id();
THREAD_T thread_id;
int hash_value;
tsrm_tls_entry *thread_resources;
void *resource;
if (th_id) {
thread_id = *th_id;
} else {
thread_id = tsrm_thread_id();
}
tsrm_debug("Fetching resource id %d for thread %ld\n", id, (long) thread_id);
tsrm_mutex_lock(tsmm_mutex);
@@ -306,7 +310,7 @@ void ts_free_id(ts_rsrc_id id)
/* Obtain the current thread id */
TSRM_API THREAD_T tsrm_thread_id(void)
{
#ifdef WIN32
#ifdef TSRM_WIN32
return GetCurrentThreadId();
#elif defined(GNUPTH)
return pth_self();
@@ -325,7 +329,7 @@ TSRM_API MUTEX_T tsrm_mutex_alloc( void )
{
MUTEX_T mutexp;
#ifdef WIN32
#ifdef TSRM_WIN32
mutexp = malloc(sizeof(CRITICAL_SECTION));
InitializeCriticalSection(mutexp);
#elif defined(GNUPTH)
@@ -350,7 +354,7 @@ TSRM_API MUTEX_T tsrm_mutex_alloc( void )
TSRM_API void tsrm_mutex_free( MUTEX_T mutexp )
{
if (mutexp) {
#ifdef WIN32
#ifdef TSRM_WIN32
DeleteCriticalSection(mutexp);
#elif defined(GNUPTH)
free(mutexp);
@@ -375,7 +379,7 @@ TSRM_API int tsrm_mutex_lock( MUTEX_T mutexp )
#if 0
tsrm_debug("Mutex locked thread: %ld\n",tsrm_thread_id());
#endif
#ifdef WIN32
#ifdef TSRM_WIN32
EnterCriticalSection(mutexp);
return 1;
#elif defined(GNUPTH)
@@ -396,7 +400,7 @@ TSRM_API int tsrm_mutex_unlock( MUTEX_T mutexp )
#if 0
tsrm_debug("Mutex unlocked thread: %ld\n",tsrm_thread_id());
#endif
#ifdef WIN32
#ifdef TSRM_WIN32
LeaveCriticalSection(mutexp);
return 1;
#elif defined(GNUPTH)
@@ -454,3 +458,5 @@ void tsrm_debug_set(int status)
{
tsrm_debug_status = status;
}
#endif /* ZTS */
+27 -3
View File
@@ -42,7 +42,7 @@ RSC=rc.exe
# 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 "TSRM_EXPORTS" /D "WIN32" /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" /YX /FD /GZ /c
# ADD BASE RSC /l 0x40d /d "_DEBUG"
# ADD RSC /l 0x40d /d "_DEBUG"
BSC32=bscmake.exe
@@ -65,7 +65,7 @@ LIB32=link.exe -lib
# 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 "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" /YX /FD /c
# ADD BASE RSC /l 0x40d /d "NDEBUG"
# ADD RSC /l 0x40d /d "NDEBUG"
BSC32=bscmake.exe
@@ -88,7 +88,7 @@ LIB32=link.exe -lib
# 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 "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" /YX /FD /c
# ADD BASE RSC /l 0x40d /d "NDEBUG"
# ADD RSC /l 0x40d /d "NDEBUG"
BSC32=bscmake.exe
@@ -112,6 +112,14 @@ LIB32=link.exe -lib
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
# End Group
# Begin Group "Header Files"
@@ -120,6 +128,22 @@ SOURCE=.\TSRM.c
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
# End Group
# End Target
# End Project
+21 -15
View File
@@ -2,20 +2,16 @@
+----------------------------------------------------------------------+
| Thread Safe Resource Manager |
+----------------------------------------------------------------------+
| Copyright (c) 1998, 1999 Zeev Suraski |
| 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 |
+----------------------------------------------------------------------+
| This source file is subject to the Zend license, that is bundled |
| with this package in the file LICENSE. If you did not receive a |
| copy of the Zend license, please mail us at zend@zend.com so we can |
| send you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Zeev Suraski <zeev@zend.com> |
| Authors: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef _TSRM_H
#define _TSRM_H
#ifndef TSRM_H
#define TSRM_H
#ifdef HAVE_CONFIG_H
# undef PACKAGE
@@ -25,7 +21,14 @@
# undef VERSION
#endif
#if WIN32||WINNT
/* Only compile multi-threading functions if we're in ZTS mode */
#ifdef ZTS
#ifdef WIN32
# define TSRM_WIN32
#endif
#ifdef TSRM_WIN32
# include <windows.h>
#elif defined(GNUPTH)
# include <pth.h>
@@ -35,7 +38,7 @@
typedef int ts_rsrc_id;
#if WIN32||WINNT
#ifdef TSRM_WIN32
# ifdef TSRM_EXPORTS
# define TSRM_API __declspec(dllexport)
# else
@@ -47,7 +50,7 @@ typedef int ts_rsrc_id;
/* Define THREAD_T and MUTEX_T */
#if defined(WIN32)
#ifdef TSRM_WIN32
# define THREAD_T DWORD
# define MUTEX_T CRITICAL_SECTION *
#elif defined(GNUPTH)
@@ -81,7 +84,8 @@ TSRM_API void tsrm_shutdown(void);
TSRM_API ts_rsrc_id ts_allocate_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(ts_rsrc_id id);
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);
@@ -107,4 +111,6 @@ TSRM_API void *tsrm_set_new_thread_end_handler(void (*new_thread_end_handler)(TH
}
#endif
#endif /* _TSRM_H */
#endif /* ZTS */
#endif /* TSRM_H */
+13 -1
View File
@@ -10,12 +10,24 @@ 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
TSRM_PTHREAD
dnl TSRM_PTHREAD
AC_CHECK_HEADERS(
utime.h \
dirent.h \
stdarg.h \
alloca.h \
unistd.h \
limits.h
)
AC_DEFINE(ZTS,1,[ ])
AC_OUTPUT(Makefile)
+44
View File
@@ -0,0 +1,44 @@
#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 */
+11 -1
View File
@@ -87,6 +87,16 @@ 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"
@@ -99,7 +109,7 @@ 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 -pthreads -pthread -mthreads -Kthread; do
for flag in -kthread -pthread -pthreads -mthreads -Kthread -threads -mt -qthreaded; do
ac_save="$CFLAGS"
CFLAGS="$CFLAGS $flag"
PTHREADS_CHECK_COMPILE
+1 -1
View File
@@ -68,7 +68,7 @@ AC_MSG_RESULT(yes)
])
AC_DEFUN(TSRM_OTHER_CHECKS,[
AC_DEFUN(TSRM_THREADS_CHECKS,[
dnl For the thread implementations, we always use --with-*
dnl to maintain consistency
+15
View File
@@ -0,0 +1,15 @@
#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
+47
View File
@@ -0,0 +1,47 @@
#ifndef TSRM_CONFIG_COMMON_H
#define TSRM_CONFIG_COMMON_H
#if WINNT|WIN32
# define TSRM_WIN32
#endif
#ifndef TSRM_WIN32
# include "tsrm_config.h"
# include <sys/param.h>
#else
# include "tsrm_config.w32.h"
#endif
#ifdef TSRM_WIN32
#include <malloc.h>
#endif
#if HAVE_ALLOCA_H
#include <alloca.h>
#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 */
+63
View File
@@ -0,0 +1,63 @@
#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
@@ -0,0 +1,6 @@
#ifndef TSRM_STRTOK_R
#define TSRM_STRTOK_R
char *tsrm_strtok_r(char *s, const char *delim, char **last);
#endif
+759
View File
@@ -0,0 +1,759 @@
/*
+----------------------------------------------------------------------+
| PHP version 4.0 |
+----------------------------------------------------------------------+
| Copyright (c) 1997, 1998, 1999, 2000 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>
#endif
#define VIRTUAL_CWD_DEBUG 0
#ifdef ZTS
#include "TSRM.h"
#endif
/* Only need mutex for popen() in Windows because it doesn't chdir() on UNIX */
#if defined(TSRM_WIN32) && 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
#define tsrm_strtok_r(a,b,c) strtok((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] == '.')
#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)
{
struct stat buf;
if (stat(state->cwd, &buf) == 0 && S_ISDIR(buf.st_mode))
return (0);
return (1);
}
static int php_is_file_ok(const cwd_state *state)
{
struct stat buf;
if (stat(state->cwd, &buf) == 0 && S_ISREG(buf.st_mode))
return (0);
return (1);
}
static void cwd_globals_ctor(virtual_cwd_globals *cwd_globals)
{
CWD_STATE_COPY(&cwd_globals->cwd, &main_cwd_state);
}
static void cwd_globals_dtor(virtual_cwd_globals *cwd_globals)
{
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
cwd_globals_id = ts_allocate_id(sizeof(virtual_cwd_globals), (ts_allocate_ctor) cwd_globals_ctor, (ts_allocate_dtor) cwd_globals_dtor);
#else
cwd_globals_ctor(&cwd_globals);
#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);
#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(int *length)
{
cwd_state *state;
CWDLS_FETCH();
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)
{
size_t length;
char *cwd;
cwd = virtual_getcwd_ex(&length);
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);
#ifndef TSRM_WIN32
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_amount = COPY_WHEN_ABSOLUTE;
is_absolute = 1;
#ifdef TSRM_WIN32
} 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);
state->cwd[state->cwd_length] = DEFAULT_SLASH;
memcpy(&state->cwd[state->cwd_length+1], ptr, ptr_length+1);
state->cwd_length += (ptr_length+1);
}
ptr = tsrm_strtok_r(NULL, TOKENIZER_STRING, &tok);
}
if (state->cwd_length == COPY_WHEN_ABSOLUTE) {
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)
{
CWDLS_FETCH();
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))
{
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;
}
if (length == COPY_WHEN_ABSOLUTE && IS_ABSOLUTE_PATH(path, length+1)) { /* Also use trailing slash if this is absolute */
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);
tsrm_free_alloca(temp);
return retval;
}
CWD_API char *virtual_realpath(const char *path, char *real_path)
{
cwd_state new_state;
int retval;
CWDLS_FETCH();
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(const char *path, char **filepath)
{
cwd_state new_state;
int retval;
CWDLS_FETCH();
CWD_STATE_COPY(&new_state, &CWDG(cwd));
retval = virtual_file_ex(&new_state, path, php_is_file_ok);
*filepath = new_state.cwd;
return retval;
}
CWD_API FILE *virtual_fopen(const char *path, const char *mode)
{
cwd_state new_state;
FILE *f;
CWDLS_FETCH();
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)
{
cwd_state new_state;
int ret;
CWDLS_FETCH();
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)
{
cwd_state new_state;
int ret;
CWDLS_FETCH();
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;
}
#ifndef TSRM_WIN32
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group)
{
cwd_state new_state;
int ret;
CWDLS_FETCH();
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, int flags, ...)
{
cwd_state new_state;
int f;
CWDLS_FETCH();
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 = va_arg(arg, mode_t);
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)
{
cwd_state new_state;
int f;
CWDLS_FETCH();
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_stat(const char *path, struct stat *buf)
{
cwd_state new_state;
int retval;
CWDLS_FETCH();
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;
}
#ifndef TSRM_WIN32
CWD_API int virtual_lstat(const char *path, struct stat *buf)
{
cwd_state new_state;
int retval;
CWDLS_FETCH();
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)
{
cwd_state new_state;
int retval;
CWDLS_FETCH();
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)
{
cwd_state new_state;
int retval;
CWDLS_FETCH();
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)
{
cwd_state new_state;
int retval;
CWDLS_FETCH();
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)
{
cwd_state new_state;
DIR *retval;
CWDLS_FETCH();
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;
}
#ifndef TSRM_WIN32
CWD_API FILE *virtual_popen(const char *command, const char *type)
{
int command_length;
char *command_line;
char *ptr;
FILE *retval;
CWDLS_FETCH();
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);
#ifdef TSRM_WIN32
retval = _popen(command_line, type);
#else
retval = popen(command_line, type);
#endif
free(command_line);
return retval;
}
#else
/* 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)
{
char prev_cwd[MAXPATHLEN];
char *getcwd_result;
FILE *retval;
CWDLS_FETCH();
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;
}
#endif
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
+208
View File
@@ -0,0 +1,208 @@
/*
+----------------------------------------------------------------------+
| PHP version 4.0 |
+----------------------------------------------------------------------+
| Copyright (c) 1997, 1998, 1999, 2000 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_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 int mode_t;
#define DEFAULT_SLASH '\\'
#define IS_SLASH(c) ((c) == '/' || (c) == '\\')
#define COPY_WHEN_ABSOLUTE 2
#define IS_ABSOLUTE_PATH(path, len) \
(len >= 2 && isalpha(path[0]) && path[1] == ':')
#else
#ifdef HAVE_DIRENT_H
#include <dirent.h>
#endif
#define DEFAULT_SLASH '/'
#define IS_SLASH(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(int *length);
CWD_API char *virtual_getcwd(char *buf, size_t size);
CWD_API int virtual_chdir(const char *path);
CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path));
CWD_API int virtual_filepath(const char *path, char **filepath);
CWD_API char *virtual_realpath(const char *path, char *real_path);
CWD_API FILE *virtual_fopen(const char *path, const char *mode);
CWD_API int virtual_open(const char *path, int flags, ...);
CWD_API int virtual_creat(const char *path, mode_t mode);
CWD_API int virtual_stat(const char *path, struct stat *buf);
#ifndef TSRM_WIN32
CWD_API int virtual_lstat(const char *path, struct stat *buf);
#endif
CWD_API int virtual_unlink(const char *path);
CWD_API int virtual_mkdir(const char *pathname, mode_t mode);
CWD_API int virtual_rmdir(const char *pathname);
CWD_API DIR *virtual_opendir(const char *pathname);
CWD_API FILE *virtual_popen(const char *command, const char *type);
#if HAVE_UTIME
CWD_API int virtual_utime(const char *filename, struct utimbuf *buf);
#endif
CWD_API int virtual_chmod(const char *filename, mode_t mode);
#ifndef TSRM_WIN32
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group);
#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 CWDLS_D virtual_cwd_globals *cwd_globals
# define CWDLS_DC , CWDLS_D
# define CWDLS_C cwd_globals
# define CWDLS_CC , CWDLS_C
# define CWDG(v) (cwd_globals->v)
# define CWDLS_FETCH() virtual_cwd_globals *cwd_globals = ts_resource(cwd_globals_id)
#else
# define CWDLS_D void
# define CWDLS_DC
# define CWDLS_C
# define CWDLS_CC
# define CWDG(v) (cwd_globals.v)
# define CWDLS_FETCH()
#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 V_GETCWD(buff, size) virtual_getcwd(buff,size)
#define V_FOPEN(path, mode) virtual_fopen(path, mode)
/* The V_OPEN macro will need to be used as V_OPEN((path, flags, ...)) */
#define V_OPEN(open_args) virtual_open open_args
#define V_CREAT(path, mode) virtual_creat(path, mode)
#define V_CHDIR(path) virtual_chdir(path)
#define V_CHDIR_FILE(path) virtual_chdir_file(path, virtual_chdir)
#define V_GETWD(buf)
#define V_REALPATH(path,real_path) virtual_realpath(path,real_path)
#define V_STAT(path, buff) virtual_stat(path, buff)
#ifdef TSRM_WIN32
#define V_LSTAT(path, buff) virtual_stat(path, buff)
#else
#define V_LSTAT(path, buff) virtual_lstat(path, buff)
#endif
#define V_UNLINK(path) virtual_unlink(path)
#define V_MKDIR(pathname, mode) virtual_mkdir(pathname, mode)
#define V_RMDIR(pathname) virtual_rmdir(pathname)
#define V_OPENDIR(pathname) virtual_opendir(pathname)
#define V_POPEN(command, type) virtual_popen(command, type)
#if HAVE_UTIME
#define V_UTIME(path,time) virtual_utime(path,time)
#endif
#define V_CHMOD(path,mode) virtual_chmod(path,mode)
#ifndef TSRM_WIN32
#define V_CHOWN(path,owner,group) virtual_chown(path,owner,group)
#endif
#else
#define V_GETCWD(buff, size) getcwd(buff,size)
#define V_FOPEN(path, mode) fopen(path, mode)
#define V_OPEN(open_args) open open_args
#define V_CREAT(path, mode) creat(path, mode)
#define V_CHDIR(path) chdir(path)
#define V_CHDIR_FILE(path) virtual_chdir_file(path, chdir)
#define V_GETWD(buf) getwd(buf)
#define V_STAT(path, buff) stat(path, buff)
#define V_LSTAT(path, buff) lstat(path, buff)
#define V_UNLINK(path) unlink(path)
#define V_MKDIR(pathname, mode) mkdir(pathname, mode)
#define V_RMDIR(pathname) rmdir(pathname)
#define V_OPENDIR(pathname) opendir(pathname)
#define V_POPEN(command, type) popen(command, type)
#define V_REALPATH(path,real_path) realpath(path,real_path)
#if HAVE_UTIME
#define V_UTIME(path,time) utime(path,time)
#endif
#define V_CHMOD(path,mode) chmod(path,mode)
#ifndef TSRM_WIN32
#define V_CHOWN(path,owner,group) chown(path,owner,group)
#endif
#endif
#endif /* VIRTUAL_CWD_H */
+2 -2
View File
@@ -41,9 +41,9 @@
// #include <FlexLexer.h>
// ...
#ifndef __FLEX_LEXER_H
#ifndef FLEXLEXER_H
// Never included before - need to define base class.
#define __FLEX_LEXER_H
#define FLEXLEXER_H
#include <iostream.h>
extern "C++" {
+2 -2
View File
@@ -20,7 +20,7 @@ libZend_la_SOURCES=\
libZend_la_LIBADD = $(ZEND_SCANNER)
libZend_la_LDFLAGS = @EXTRA_LIBS@
libZend_la_DEPENDENCIES = $(ZEND_SCANNER)
# automake isn't too clever about "non-standard" use of lex and yacc
$(libZend_la_OBJECTS) zend-scanner.lo zend-scanner-cc.lo: zend-parser.h
@@ -36,6 +36,6 @@ zend-parser.c: $(srcdir)/zend-parser.y
$(YACC) -p zend -v -d $(srcdir)/zend-parser.y -o zend-parser.c
depend:
zend_execute.lo: $(srcdir)/zend_execute.c
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(INLINE_CFLAGS) -c $(srcdir)/zend_execute.c
+4
View File
@@ -151,6 +151,10 @@ SOURCE=.\zend_extensions.c
# End Source File
# Begin Source File
SOURCE=.\zend_gcc_inline.c
# End Source File
# Begin Source File
SOURCE=.\zend_hash.c
# End Source File
# Begin Source File
+12 -8
View File
@@ -64,6 +64,10 @@ AC_FUNC_MEMCMP
AC_FUNC_ALLOCA
AC_CHECK_FUNCS(memcpy strdup getpid kill strtod strtol finite)
AC_ZEND_BROKEN_SPRINTF
AC_CHECK_FUNCS(finite isfinite isinf isnan)
ZEND_FP_EXCEPT
AC_SUBST(ZEND_SCANNER)
@@ -76,10 +80,10 @@ AC_SUBST(ZEND_SCANNER)
AC_DEFUN(LIBZEND_ENABLE_DEBUG,[
AC_ARG_ENABLE(debug,
[ --disable-debug Compile without debugging symbols],[
[ --enable-debug Compile with debugging symbols],[
ZEND_DEBUG=$enableval
],[
ZEND_DEBUG=yes
ZEND_DEBUG=no
])
])
@@ -95,9 +99,6 @@ AC_ARG_ENABLE(debug,
AC_DEFUN(LIBZEND_OTHER_CHECKS,[
AC_ARG_ENABLE(experimental-zts,
@@ -135,19 +136,22 @@ AC_MSG_CHECKING(whether to enable Zend debugging)
AC_MSG_RESULT($ZEND_DEBUG)
if test "$ZEND_DEBUG" = "yes"; then
AC_DEFINE(ZEND_DEBUG,1)
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)
AC_DEFINE(ZEND_DEBUG,0,[ ])
fi
test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS"
if test "$ZEND_EXPERIMENTAL_ZTS" = "yes"; then
AC_DEFINE(ZTS)
AC_DEFINE(ZTS,1,[ ])
ZEND_SCANNER_TYPE=cc
CPPFLAGS="$CPPFLAGS -I../TSRM"
LIBZEND_CPLUSPLUS_CHECKS
+5 -5
View File
@@ -40,7 +40,7 @@ RSC=rc.exe
# 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 "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D ZEND_DEBUG=0 /D "ZTS" /D "ZEND_WIN32" /D "WIN32" /D "_MBCS" /D "PHP_WIN32" /FR /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"
@@ -62,7 +62,7 @@ LIB32=link.exe -lib
# 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 "_LIB" /D "LIBZEND_EXPORTS" /D "TSRM_EXPORTS" /D ZEND_DEBUG=1 /D "ZEND_WIN32" /D "ZTS" /D "WIN32" /D "_MBCS" /D "PHP_WIN32" /FR /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
@@ -84,7 +84,7 @@ LIB32=link.exe -lib
# 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 "_LIB" /D "TSRM_EXPORTS" /D "LIBZEND_EXPORTS" /D ZEND_DEBUG=0 /D "ZTS" /D "ZEND_WIN32" /D "ZEND_WIN32_FORCE_INLINE" /D "WIN32" /D "_MBCS" /D "PHP_WIN32" /FR /FD /c
# 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"
@@ -392,7 +392,7 @@ SOURCE=".\zend-scanner.l"
InputPath=".\zend-scanner.l"
"zend-scanner.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -+ -i -Sflex.skl -Pzend -ozend-scanner.cpp zend-scanner.l
flex -+ -B -i -Sflex.skl -Pzend -ozend-scanner.cpp zend-scanner.l
# End Custom Build
@@ -412,7 +412,7 @@ InputPath=".\zend-scanner.l"
InputPath=".\zend-scanner.l"
"zend-scanner.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
flex -+ -i -Sflex.skl -Pzend -ozend-scanner.cpp zend-scanner.l
flex -+ -B -i -Sflex.skl -Pzend -ozend-scanner.cpp zend-scanner.l
# End Custom Build
+29 -24
View File
@@ -3,37 +3,16 @@
@TOP@
/* This is the default configuration file to read */
#define USE_CONFIG_FILE 1
/* these are defined by automake */
#undef PACKAGE
#undef VERSION
/* define uint by configure if it is missed (QNX and BSD derived) */
#undef uint
/* define ulong by configure if it is missed (most probably is) */
#undef ulong
/* Undefine if you want stricter XML/SGML compliance by default */
/* (this disables "<?expression?>" by default) */
#define T_DEFAULT_SHORT_OPEN_TAG 1
/* Define both of these if you want the bundled REGEX library */
#define REGEX 0
#define HSREGEX 0
#undef ZEND_DEBUG
/* Define if you want to enable memory limit support */
#define MEMORY_LIMIT 0
/* Define to compile Zend thread safe */
#undef ZTS
#undef HAVE_LIBDL
@BOTTOM@
#ifdef HAVE_STDLIB_H
@@ -50,15 +29,41 @@
# include <strings.h>
#endif
/* Define if you have stdiostream.h */
#undef HAVE_STDIOSTREAM_H
#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)
#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)
#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
+18
View File
@@ -2,6 +2,24 @@ 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
+104 -101
View File
@@ -45,15 +45,15 @@
%}
%pure_parser
%expect 7
%expect 4
%left T_INCLUDE T_INCLUDE_ONCE T_EVAL
%left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
%left ','
%left T_LOGICAL_OR
%left T_LOGICAL_XOR
%left T_LOGICAL_AND
%right T_PRINT
%left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL XT_OR_EQUAL T_SL_EQUAL T_SR_EQUAL
%left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL
%left '?' ':'
%left T_BOOLEAN_OR
%left T_BOOLEAN_AND
@@ -105,8 +105,6 @@
%token T_FUNCTION
%token T_CONST
%token T_RETURN
%token T_REQUIRE
%token T_REQUIRE_ONCE
%token T_USE
%token T_GLOBAL
%token T_STATIC
@@ -133,7 +131,6 @@
%token T_DOLLAR_OPEN_CURLY_BRACES
%token T_CURLY_OPEN
%token T_PAAMAYIM_NEKUDOTAYIM
%token T_PHP_TRACK_VARS
%% /* Rules */
@@ -181,32 +178,39 @@ unticked_statement:
for_expr
';' { do_free(&$3 CLS_CC); $4.u.opline_num = get_next_op_number(CG(active_op_array)); }
for_expr
';' { do_for_cond(&$6, &$7 CLS_CC); }
';' { do_extended_info(CLS_C); do_for_cond(&$6, &$7 CLS_CC); }
for_expr
')' { do_free(&$9 CLS_CC); do_for_before_statement(&$4, &$7 CLS_CC); }
for_statement { do_for_end(&$7 CLS_CC); }
| T_SWITCH '(' expr ')' { do_switch_cond(&$3 CLS_CC); } switch_case_list { do_switch_end(&$6 CLS_CC); }
| T_BREAK ';' { do_brk_cont(ZEND_BRK, NULL CLS_CC); }
| T_SWITCH '(' expr ')' { do_switch_cond(&$3 CLS_CC); } switch_case_list { do_switch_end(&$6 CLS_CC); }
| T_BREAK ';' { do_brk_cont(ZEND_BRK, NULL CLS_CC); }
| T_BREAK expr ';' { do_brk_cont(ZEND_BRK, &$2 CLS_CC); }
| T_CONTINUE ';' { do_brk_cont(ZEND_CONT, NULL CLS_CC); }
| T_CONTINUE expr ';' { do_brk_cont(ZEND_CONT, &$2 CLS_CC); }
| T_RETURN ';' { do_return(NULL, 0 CLS_CC); }
| T_RETURN expr_without_variable ';' { do_return(&$2, 0 CLS_CC); }
| T_RETURN cvar ';' { do_return(&$2, 1 CLS_CC); }
| T_GLOBAL global_var_list
| T_STATIC static_var_list
| T_CONTINUE ';' { do_brk_cont(ZEND_CONT, NULL CLS_CC); }
| T_CONTINUE expr ';' { do_brk_cont(ZEND_CONT, &$2 CLS_CC); }
| T_RETURN ';' { do_return(NULL, 0 CLS_CC); }
| T_RETURN expr_without_variable ';' { do_return(&$2, 0 CLS_CC); }
| T_RETURN cvar ';' { do_return(&$2, 1 CLS_CC); }
| T_GLOBAL global_var_list ';'
| T_STATIC static_var_list ';'
| T_ECHO echo_expr_list ';'
| T_INLINE_HTML { do_echo(&$1 CLS_CC); }
| expr ';' { do_free(&$1 CLS_CC); }
| T_REQUIRE expr ';' { do_require(&$2, 0 CLS_CC); }
| T_REQUIRE_ONCE use_filename ';' { do_require(&$2, 1 CLS_CC); }
| T_USE use_filename ';' { use_filename($2.u.constant.value.str.val, $2.u.constant.value.str.len CLS_CC); zval_dtor(&$2.u.constant); }
| T_UNSET '(' cvar ')' ';' { do_end_variable_parse(BP_VAR_UNSET, 0 CLS_CC); do_unset(&$3 CLS_CC); }
| T_FOREACH '(' expr T_AS { do_foreach_begin(&$1, &$3, &$2, &$4 CLS_CC); } w_cvar foreach_optional_arg ')' { do_foreach_cont(&$6, &$7, &$4 CLS_CC); } foreach_statement { do_foreach_end(&$1, &$2 CLS_CC); }
| expr ';' { do_free(&$1 CLS_CC); }
| T_USE use_filename ';' { zend_error(E_COMPILE_ERROR,"use: Not yet supported. Please use include_once() or require_once()"); zval_dtor(&$2.u.constant); }
| T_UNSET '(' unset_variables ')' ';'
| T_FOREACH '(' w_cvar T_AS { do_foreach_begin(&$1, &$3, &$2, &$4, 1 CLS_CC); } w_cvar foreach_optional_arg ')' { do_foreach_cont(&$6, &$7, &$4 CLS_CC); } foreach_statement { do_foreach_end(&$1, &$2 CLS_CC); }
| T_FOREACH '(' expr_without_variable T_AS { do_foreach_begin(&$1, &$3, &$2, &$4, 0 CLS_CC); } w_cvar foreach_optional_arg ')' { do_foreach_cont(&$6, &$7, &$4 CLS_CC); } foreach_statement { do_foreach_end(&$1, &$2 CLS_CC); }
| T_DECLARE { do_declare_begin(CLS_C); } '(' declare_list ')' declare_statement { do_declare_end(CLS_C); }
| ';' /* empty statement */
;
unset_variables:
unset_variable
| unset_variables ',' unset_variable
;
unset_variable:
cvar { do_end_variable_parse(BP_VAR_UNSET, 0 CLS_CC); do_unset(&$1 CLS_CC); }
;
use_filename:
T_CONSTANT_ENCAPSED_STRING { $$ = $1; }
@@ -230,8 +234,8 @@ unticked_declaration_statement:
foreach_optional_arg:
/* empty */ { $$.op_type = IS_UNUSED; }
| T_DOUBLE_ARROW w_cvar { $$ = $2; }
/* empty */ { $$.op_type = IS_UNUSED; }
| T_DOUBLE_ARROW w_cvar { $$ = $2; }
;
@@ -254,23 +258,23 @@ declare_statement:
declare_list:
T_STRING '=' static_scalar { do_declare_stmt(&$1, &$3 CLS_CC); }
| declare_list ',' T_STRING '=' static_scalar { do_declare_stmt(&$3, &$5 CLS_CC); }
T_STRING '=' static_scalar { do_declare_stmt(&$1, &$3 CLS_CC); }
| declare_list ',' T_STRING '=' static_scalar { do_declare_stmt(&$3, &$5 CLS_CC); }
;
switch_case_list:
'{' case_list '}' { $$ = $2; }
| '{' ';' case_list '}' { $$ = $3; }
| ':' case_list T_ENDSWITCH ';' { $$ = $2; }
| ':' ';' case_list T_ENDSWITCH ';' { $$ = $3; }
| ':' case_list T_ENDSWITCH ';' { $$ = $2; }
| ':' ';' case_list T_ENDSWITCH ';' { $$ = $3; }
;
case_list:
/* empty */ { $$.op_type = IS_UNUSED; }
| case_list T_CASE expr case_separator { do_case_before_statement(&$1, &$2, &$3 CLS_CC); } inner_statement_list { do_case_after_statement(&$$, &$2 CLS_CC); $$.op_type = IS_CONST }
| case_list T_DEFAULT case_separator { do_default_before_statement(&$1, &$2 CLS_CC); } inner_statement_list { do_case_after_statement(&$$, &$2 CLS_CC); $$.op_type = IS_CONST; }
| case_list T_CASE expr case_separator { do_extended_info(CLS_C); do_case_before_statement(&$1, &$2, &$3 CLS_CC); } inner_statement_list { do_case_after_statement(&$$, &$2 CLS_CC); $$.op_type = IS_CONST }
| case_list T_DEFAULT case_separator { do_extended_info(CLS_C); do_default_before_statement(&$1, &$2 CLS_CC); } inner_statement_list { do_case_after_statement(&$$, &$2 CLS_CC); $$.op_type = IS_CONST; }
;
@@ -311,8 +315,6 @@ new_else_single:
;
parameter_list:
non_empty_parameter_list
| /* empty */
@@ -320,35 +322,35 @@ parameter_list:
non_empty_parameter_list:
T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$1, 0 CLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE CLS_CC); }
| '&' T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$2, 0 CLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_FORCE CLS_CC); }
| T_CONST T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$2, 0 CLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE CLS_CC); }
| T_VARIABLE '=' static_scalar { znode tmp; fetch_simple_variable(&tmp, &$1, 0 CLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$3, BYREF_NONE CLS_CC); }
| non_empty_parameter_list ',' T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$3, 0 CLS_CC); $$=$1; $$.u.constant.value.lval++; do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE CLS_CC); }
| non_empty_parameter_list ',' '&' T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$4, 0 CLS_CC); $$=$1; $$.u.constant.value.lval++; do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_FORCE CLS_CC); }
| non_empty_parameter_list ',' T_CONST T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$4, 0 CLS_CC); $$=$1; $$.u.constant.value.lval++; do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE CLS_CC); }
T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$1, 0 CLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE CLS_CC); }
| '&' T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$2, 0 CLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_FORCE CLS_CC); }
| T_CONST T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$2, 0 CLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE CLS_CC); }
| T_VARIABLE '=' static_scalar { znode tmp; fetch_simple_variable(&tmp, &$1, 0 CLS_CC); $$.op_type = IS_CONST; $$.u.constant.value.lval=1; $$.u.constant.type=IS_LONG; INIT_PZVAL(&$$.u.constant); do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$3, BYREF_NONE CLS_CC); }
| non_empty_parameter_list ',' T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$3, 0 CLS_CC); $$=$1; $$.u.constant.value.lval++; do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE CLS_CC); }
| non_empty_parameter_list ',' '&' T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$4, 0 CLS_CC); $$=$1; $$.u.constant.value.lval++; do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_FORCE CLS_CC); }
| non_empty_parameter_list ',' T_CONST T_VARIABLE { znode tmp; fetch_simple_variable(&tmp, &$4, 0 CLS_CC); $$=$1; $$.u.constant.value.lval++; do_receive_arg(ZEND_RECV, &tmp, &$$, NULL, BYREF_NONE CLS_CC); }
| non_empty_parameter_list ',' T_VARIABLE '=' static_scalar { znode tmp; fetch_simple_variable(&tmp, &$3, 0 CLS_CC); $$=$1; $$.u.constant.value.lval++; do_receive_arg(ZEND_RECV_INIT, &tmp, &$$, &$5, BYREF_NONE CLS_CC); }
;
function_call_parameter_list:
non_empty_function_call_parameter_list { $$ = $1; }
| /* empty */ { $$.u.constant.value.lval = 0; }
non_empty_function_call_parameter_list { $$ = $1; }
| /* empty */ { $$.u.constant.value.lval = 0; }
;
non_empty_function_call_parameter_list:
expr_without_variable { $$.u.constant.value.lval = 1; do_pass_param(&$1, ZEND_SEND_VAL, $$.u.constant.value.lval CLS_CC); }
| cvar { $$.u.constant.value.lval = 1; do_pass_param(&$1, ZEND_SEND_VAR, $$.u.constant.value.lval CLS_CC); }
| '&' w_cvar { $$.u.constant.value.lval = 1; do_pass_param(&$2, ZEND_SEND_REF, $$.u.constant.value.lval CLS_CC); }
| non_empty_function_call_parameter_list ',' expr_without_variable { $$.u.constant.value.lval=$1.u.constant.value.lval+1; do_pass_param(&$3, ZEND_SEND_VAL, $$.u.constant.value.lval CLS_CC); }
| non_empty_function_call_parameter_list ',' cvar { $$.u.constant.value.lval=$1.u.constant.value.lval+1; do_pass_param(&$3, ZEND_SEND_VAR, $$.u.constant.value.lval CLS_CC); }
| non_empty_function_call_parameter_list ',' '&' w_cvar { $$.u.constant.value.lval=$1.u.constant.value.lval+1; do_pass_param(&$4, ZEND_SEND_REF, $$.u.constant.value.lval CLS_CC); }
expr_without_variable { $$.u.constant.value.lval = 1; do_pass_param(&$1, ZEND_SEND_VAL, $$.u.constant.value.lval CLS_CC); }
| cvar { $$.u.constant.value.lval = 1; do_pass_param(&$1, ZEND_SEND_VAR, $$.u.constant.value.lval CLS_CC); }
| '&' w_cvar { $$.u.constant.value.lval = 1; do_pass_param(&$2, ZEND_SEND_REF, $$.u.constant.value.lval CLS_CC); }
| non_empty_function_call_parameter_list ',' expr_without_variable { $$.u.constant.value.lval=$1.u.constant.value.lval+1; do_pass_param(&$3, ZEND_SEND_VAL, $$.u.constant.value.lval CLS_CC); }
| non_empty_function_call_parameter_list ',' cvar { $$.u.constant.value.lval=$1.u.constant.value.lval+1; do_pass_param(&$3, ZEND_SEND_VAR, $$.u.constant.value.lval CLS_CC); }
| non_empty_function_call_parameter_list ',' '&' w_cvar { $$.u.constant.value.lval=$1.u.constant.value.lval+1; do_pass_param(&$4, ZEND_SEND_REF, $$.u.constant.value.lval CLS_CC); }
;
global_var_list:
global_var_list ',' global_var { do_fetch_global_or_static_variable(&$3, NULL, ZEND_FETCH_GLOBAL CLS_CC); }
| global_var { do_fetch_global_or_static_variable(&$1, NULL, ZEND_FETCH_GLOBAL CLS_CC); }
global_var_list ',' global_var { do_fetch_global_or_static_variable(&$3, NULL, ZEND_FETCH_GLOBAL CLS_CC); }
| global_var { do_fetch_global_or_static_variable(&$1, NULL, ZEND_FETCH_GLOBAL CLS_CC); }
;
@@ -384,14 +386,14 @@ class_statement:
;
is_reference:
/* empty */ { $$.op_type = ZEND_RETURN_VAL; }
/* empty */ { $$.op_type = ZEND_RETURN_VAL; }
| '&' { $$.op_type = ZEND_RETURN_REF; }
class_variable_decleration:
class_variable_decleration ',' T_VARIABLE { do_declare_property(&$3, NULL CLS_CC); }
| class_variable_decleration ',' T_VARIABLE '=' static_scalar { do_declare_property(&$3, &$5 CLS_CC); }
| T_VARIABLE { do_declare_property(&$1, NULL CLS_CC); }
| T_VARIABLE '=' static_scalar { do_declare_property(&$1, &$3 CLS_CC); }
class_variable_decleration ',' T_VARIABLE { do_declare_property(&$3, NULL CLS_CC); }
| class_variable_decleration ',' T_VARIABLE '=' static_scalar { do_declare_property(&$3, &$5 CLS_CC); }
| T_VARIABLE { do_declare_property(&$1, NULL CLS_CC); }
| T_VARIABLE '=' static_scalar { do_declare_property(&$1, &$3 CLS_CC); }
;
@@ -403,12 +405,12 @@ echo_expr_list:
for_expr:
/* empty */ { $$.op_type = IS_CONST; $$.u.constant.type = IS_BOOL; $$.u.constant.value.lval = 1; }
| non_empty_for_expr { $$ = $1; }
| non_empty_for_expr { $$ = $1; }
;
non_empty_for_expr:
non_empty_for_expr ',' { do_free(&$1 CLS_CC); } expr { $$ = $4; }
| expr { $$ = $1; }
non_empty_for_expr ',' { do_free(&$1 CLS_CC); } expr { $$ = $4; }
| expr { $$ = $1; }
;
@@ -426,7 +428,7 @@ expr_without_variable:
| cvar T_MOD_EQUAL expr { do_end_variable_parse(BP_VAR_RW, 0 CLS_CC); do_binary_assign_op(ZEND_ASSIGN_MOD, &$$, &$1, &$3 CLS_CC); }
| cvar T_AND_EQUAL expr { do_end_variable_parse(BP_VAR_RW, 0 CLS_CC); do_binary_assign_op(ZEND_ASSIGN_BW_AND, &$$, &$1, &$3 CLS_CC); }
| cvar T_OR_EQUAL expr { do_end_variable_parse(BP_VAR_RW, 0 CLS_CC); do_binary_assign_op(ZEND_ASSIGN_BW_OR, &$$, &$1, &$3 CLS_CC); }
| cvar XT_OR_EQUAL expr { do_end_variable_parse(BP_VAR_RW, 0 CLS_CC); do_binary_assign_op(ZEND_ASSIGN_BW_XOR, &$$, &$1, &$3 CLS_CC); }
| cvar T_XOR_EQUAL expr { do_end_variable_parse(BP_VAR_RW, 0 CLS_CC); do_binary_assign_op(ZEND_ASSIGN_BW_XOR, &$$, &$1, &$3 CLS_CC); }
| cvar T_SL_EQUAL expr { do_end_variable_parse(BP_VAR_RW, 0 CLS_CC); do_binary_assign_op(ZEND_ASSIGN_SL, &$$, &$1, &$3 CLS_CC); }
| cvar T_SR_EQUAL expr { do_end_variable_parse(BP_VAR_RW, 0 CLS_CC); do_binary_assign_op(ZEND_ASSIGN_SR, &$$, &$1, &$3 CLS_CC); }
| rw_cvar T_INC { do_post_incdec(&$$, &$1, ZEND_POST_INC CLS_CC); }
@@ -447,27 +449,27 @@ expr_without_variable:
| expr '*' expr { do_binary_op(ZEND_MUL,&$$,&$1,&$3 CLS_CC); }
| expr '/' expr { do_binary_op(ZEND_DIV,&$$,&$1,&$3 CLS_CC); }
| expr '%' expr { do_binary_op(ZEND_MOD,&$$,&$1,&$3 CLS_CC); }
| expr T_SL expr { do_binary_op(ZEND_SL, &$$, &$1, &$3 CLS_CC); }
| expr T_SR expr { do_binary_op(ZEND_SR, &$$, &$1, &$3 CLS_CC); }
| expr T_SL expr { do_binary_op(ZEND_SL, &$$, &$1, &$3 CLS_CC); }
| expr T_SR expr { do_binary_op(ZEND_SR, &$$, &$1, &$3 CLS_CC); }
| '+' expr { $1.u.constant.value.lval=0; $1.u.constant.type=IS_LONG; $1.op_type = IS_CONST; INIT_PZVAL(&$1.u.constant); do_binary_op(ZEND_ADD, &$$, &$1, &$2 CLS_CC); }
| '-' expr { $1.u.constant.value.lval=0; $1.u.constant.type=IS_LONG; $1.op_type = IS_CONST; INIT_PZVAL(&$1.u.constant); do_binary_op(ZEND_SUB, &$$, &$1, &$2 CLS_CC); }
| '!' expr { do_unary_op(ZEND_BOOL_NOT, &$$, &$2 CLS_CC); }
| '~' expr { do_unary_op(ZEND_BW_NOT, &$$, &$2 CLS_CC); }
| expr T_IS_IDENTICAL expr { do_binary_op(ZEND_IS_IDENTICAL, &$$, &$1, &$3 CLS_CC); }
| expr T_IS_NOT_IDENTICAL expr { do_binary_op(ZEND_IS_NOT_IDENTICAL, &$$, &$1, &$3 CLS_CC); }
| expr T_IS_EQUAL expr { do_binary_op(ZEND_IS_EQUAL, &$$, &$1, &$3 CLS_CC); }
| expr T_IS_NOT_EQUAL expr { do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 CLS_CC); }
| expr T_IS_IDENTICAL expr { do_binary_op(ZEND_IS_IDENTICAL, &$$, &$1, &$3 CLS_CC); }
| expr T_IS_NOT_IDENTICAL expr { do_binary_op(ZEND_IS_NOT_IDENTICAL, &$$, &$1, &$3 CLS_CC); }
| expr T_IS_EQUAL expr { do_binary_op(ZEND_IS_EQUAL, &$$, &$1, &$3 CLS_CC); }
| expr T_IS_NOT_EQUAL expr { do_binary_op(ZEND_IS_NOT_EQUAL, &$$, &$1, &$3 CLS_CC); }
| expr '<' expr { do_binary_op(ZEND_IS_SMALLER, &$$, &$1, &$3 CLS_CC); }
| expr T_IS_SMALLER_OR_EQUAL expr { do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$1, &$3 CLS_CC); }
| expr T_IS_SMALLER_OR_EQUAL expr { do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$1, &$3 CLS_CC); }
| expr '>' expr { do_binary_op(ZEND_IS_SMALLER, &$$, &$3, &$1 CLS_CC); }
| expr T_IS_GREATER_OR_EQUAL expr { do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$3, &$1 CLS_CC); }
| expr T_IS_GREATER_OR_EQUAL expr { do_binary_op(ZEND_IS_SMALLER_OR_EQUAL, &$$, &$3, &$1 CLS_CC); }
| '(' expr ')' { $$ = $2; }
| expr '?' { do_begin_qm_op(&$1, &$2 CLS_CC); }
expr ':' { do_qm_true(&$4, &$2, &$5 CLS_CC); }
expr { do_qm_false(&$$, &$7, &$2, &$5 CLS_CC); }
| function_call { $$ = $1; }
| internal_functions_in_yacc { $$ = $1; }
| T_INT_CAST expr { do_cast(&$$, &$2, IS_LONG CLS_CC); }
| T_INT_CAST expr { do_cast(&$$, &$2, IS_LONG CLS_CC); }
| T_DOUBLE_CAST expr { do_cast(&$$, &$2, IS_DOUBLE CLS_CC); }
| T_STRING_CAST expr { do_cast(&$$, &$2, IS_STRING CLS_CC); }
| T_ARRAY_CAST expr { do_cast(&$$, &$2, IS_ARRAY CLS_CC); }
@@ -482,12 +484,11 @@ expr_without_variable:
| T_PRINT expr { do_print(&$$, &$2 CLS_CC); }
;
function_call:
T_STRING '(' { do_extended_fcall_begin(CLS_C); $2.u.opline_num = do_begin_function_call(&$1 CLS_CC); }
T_STRING '(' { $2.u.opline_num = do_begin_function_call(&$1 CLS_CC); }
function_call_parameter_list
')' { do_end_function_call(&$1, &$$, &$4, 0, $2.u.opline_num CLS_CC); do_extended_fcall_end(CLS_C); }
| r_cvar '(' { do_extended_fcall_begin(CLS_C); do_begin_dynamic_function_call(&$1 CLS_CC); }
| cvar '(' { do_begin_dynamic_function_call(&$1 CLS_CC); }
function_call_parameter_list
')' { do_end_function_call(&$1, &$$, &$4, 0, 1 CLS_CC); do_extended_fcall_end(CLS_C);}
| T_STRING T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' { do_extended_fcall_begin(CLS_C); do_begin_class_member_function_call(&$1, &$3 CLS_CC); }
@@ -497,46 +498,46 @@ function_call:
exit_expr:
/* empty */ { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; }
| '(' ')' { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; }
/* empty */ { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; }
| '(' ')' { memset(&$$, 0, sizeof(znode)); $$.op_type = IS_UNUSED; }
| '(' expr ')' { $$ = $2; }
;
ctor_arguments:
/* empty */ { $$.u.constant.value.lval=0; }
| '(' function_call_parameter_list ')' { $$ = $2; }
/* empty */ { $$.u.constant.value.lval=0; }
| '(' function_call_parameter_list ')' { $$ = $2; }
;
class_name:
T_STRING { $$ = $1; }
| r_cvar { $$ = $1; }
| r_cvar { $$ = $1; }
;
common_scalar:
T_LNUMBER { $$=$1; }
| T_DNUMBER { $$=$1; }
T_LNUMBER { $$ = $1; }
| T_DNUMBER { $$ = $1; }
| T_CONSTANT_ENCAPSED_STRING { $$ = $1; }
| T_LINE { $$ = $1; }
| T_FILE { $$ = $1; }
| T_LINE { $$ = $1; }
| T_FILE { $$ = $1; }
;
static_scalar: /* compile-time evaluated scalars */
common_scalar { $$ = $1; }
| T_STRING { do_fetch_constant(&$$, &$1, ZEND_CT CLS_CC); }
| T_STRING { do_fetch_constant(&$$, &$1, ZEND_CT CLS_CC); }
| '+' static_scalar { $$ = $1; }
| '-' static_scalar { zval minus_one; minus_one.type = IS_LONG; minus_one.value.lval = -1; mul_function(&$2.u.constant, &$2.u.constant, &minus_one); $$ = $2; }
| T_ARRAY '(' static_array_pair_list ')' { $$ = $3; }
| T_ARRAY '(' static_array_pair_list ')' { $$ = $3; $$.u.constant.type = IS_CONSTANT_ARRAY; }
;
scalar:
T_STRING { do_fetch_constant(&$$, &$1, ZEND_RT CLS_CC); }
| T_STRING_VARNAME { $$ = $1; }
T_STRING { do_fetch_constant(&$$, &$1, ZEND_RT CLS_CC); }
| T_STRING_VARNAME { $$ = $1; }
| common_scalar { $$ = $1; }
| '"' encaps_list '"' { $$ = $2; }
| '\'' encaps_list '\'' { $$ = $2; }
@@ -545,7 +546,7 @@ scalar:
static_array_pair_list:
/* empty */ { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); }
/* empty */ { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); }
| non_empty_static_array_pair_list possible_comma { $$ = $1; }
;
@@ -556,9 +557,9 @@ possible_comma:
non_empty_static_array_pair_list:
non_empty_static_array_pair_list ',' static_scalar T_DOUBLE_ARROW static_scalar { do_add_static_array_element(&$$, &$3, &$5); }
| non_empty_static_array_pair_list ',' static_scalar { do_add_static_array_element(&$$, NULL, &$3); }
| static_scalar T_DOUBLE_ARROW static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); do_add_static_array_element(&$$, &$1, &$3); }
| static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); do_add_static_array_element(&$$, NULL, &$1); }
| non_empty_static_array_pair_list ',' static_scalar { do_add_static_array_element(&$$, NULL, &$3); }
| static_scalar T_DOUBLE_ARROW static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); do_add_static_array_element(&$$, &$1, &$3); }
| static_scalar { $$.op_type = IS_CONST; INIT_PZVAL(&$$.u.constant); array_init(&$$.u.constant); do_add_static_array_element(&$$, NULL, &$1); }
;
expr:
@@ -603,8 +604,8 @@ cvar_without_objects:
reference_variable:
reference_variable '[' dim_offset ']' { fetch_array_dim(&$$, &$1, &$3 CLS_CC); }
| reference_variable '{' expr '}' { fetch_string_offset(&$$, &$1, &$3 CLS_CC); }
| compound_variable { do_fetch_globals(&$1 CLS_CC); do_begin_variable_parse(CLS_C); fetch_simple_variable(&$$, &$1, 1 CLS_CC); }
| reference_variable '{' expr '}' { fetch_string_offset(&$$, &$1, &$3 CLS_CC); }
| compound_variable { do_fetch_globals(&$1 CLS_CC); do_begin_variable_parse(CLS_C); fetch_simple_variable(&$$, &$1, 1 CLS_CC); }
;
@@ -659,28 +660,28 @@ assignment_list_element:
array_pair_list:
/* empty */ { do_init_array(&$$, NULL, NULL, 0 CLS_CC); }
/* empty */ { do_init_array(&$$, NULL, NULL, 0 CLS_CC); }
| non_empty_array_pair_list possible_comma { $$ = $1; }
;
non_empty_array_pair_list:
non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr { do_add_array_element(&$$, &$5, &$3, 0 CLS_CC); }
| non_empty_array_pair_list ',' expr { do_add_array_element(&$$, &$3, NULL, 0 CLS_CC); }
| non_empty_array_pair_list ',' expr { do_add_array_element(&$$, &$3, NULL, 0 CLS_CC); }
| expr T_DOUBLE_ARROW expr { do_init_array(&$$, &$3, &$1, 0 CLS_CC); }
| expr { do_init_array(&$$, &$1, NULL, 0 CLS_CC); }
| expr { do_init_array(&$$, &$1, NULL, 0 CLS_CC); }
| non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_cvar { do_add_array_element(&$$, &$6, &$3, 1 CLS_CC); }
| non_empty_array_pair_list ',' '&' w_cvar { do_add_array_element(&$$, &$4, NULL, 1 CLS_CC); }
| expr T_DOUBLE_ARROW '&' w_cvar { do_init_array(&$$, &$4, &$1, 1 CLS_CC); }
| '&' w_cvar { do_init_array(&$$, &$2, NULL, 1 CLS_CC); }
| '&' w_cvar { do_init_array(&$$, &$2, NULL, 1 CLS_CC); }
;
encaps_list:
encaps_list encaps_var { do_end_variable_parse(BP_VAR_R, 0 CLS_CC); do_add_variable(&$$, &$1, &$2 CLS_CC); }
| encaps_list T_STRING { do_add_string(&$$, &$1, &$2 CLS_CC); }
| encaps_list T_NUM_STRING { do_add_string(&$$, &$1, &$2 CLS_CC); }
| encaps_list T_ENCAPSED_AND_WHITESPACE { do_add_string(&$$, &$1, &$2 CLS_CC); }
| encaps_list T_CHARACTER { do_add_char(&$$, &$1, &$2 CLS_CC); }
| encaps_list T_BAD_CHARACTER { do_add_string(&$$, &$1, &$2 CLS_CC); }
| encaps_list T_STRING { do_add_string(&$$, &$1, &$2 CLS_CC); }
| encaps_list T_NUM_STRING { do_add_string(&$$, &$1, &$2 CLS_CC); }
| encaps_list T_ENCAPSED_AND_WHITESPACE { do_add_string(&$$, &$1, &$2 CLS_CC); }
| encaps_list T_CHARACTER { do_add_char(&$$, &$1, &$2 CLS_CC); }
| encaps_list T_BAD_CHARACTER { do_add_string(&$$, &$1, &$2 CLS_CC); }
| encaps_list '[' { $2.u.constant.value.lval = (long) '['; do_add_char(&$$, &$1, &$2 CLS_CC); }
| encaps_list ']' { $2.u.constant.value.lval = (long) ']'; do_add_char(&$$, &$1, &$2 CLS_CC); }
| encaps_list '{' { $2.u.constant.value.lval = (long) '{'; do_add_char(&$$, &$1, &$2 CLS_CC); }
@@ -703,18 +704,20 @@ encaps_var:
encaps_var_offset:
T_STRING { $$ = $1; }
T_STRING { $$ = $1; }
| T_NUM_STRING { $$ = $1; }
| T_VARIABLE { fetch_simple_variable(&$$, &$1, 1 CLS_CC); }
| T_VARIABLE { fetch_simple_variable(&$$, &$1, 1 CLS_CC); }
;
internal_functions_in_yacc:
T_ISSET '(' cvar ')' { do_isset_or_isempty(ZEND_ISSET, &$$, &$3 CLS_CC); }
| T_EMPTY '(' cvar ')' { do_isset_or_isempty(ZEND_ISEMPTY, &$$, &$3 CLS_CC); }
| T_INCLUDE expr { do_include_or_eval(ZEND_INCLUDE, &$$, &$2 CLS_CC); }
| T_INCLUDE expr { do_include_or_eval(ZEND_INCLUDE, &$$, &$2 CLS_CC); }
| T_INCLUDE_ONCE expr { do_include_or_eval(ZEND_INCLUDE_ONCE, &$$, &$2 CLS_CC); }
| T_EVAL '(' expr ')' { do_include_or_eval(ZEND_EVAL, &$$, &$3 CLS_CC); }
| T_REQUIRE expr { do_include_or_eval(ZEND_REQUIRE, &$$, &$2 CLS_CC); }
| T_REQUIRE_ONCE expr { do_include_or_eval(ZEND_REQUIRE_ONCE, &$$, &$2 CLS_CC); }
;
+7 -9
View File
@@ -18,8 +18,8 @@
*/
#ifndef _LANGUAGE_SCANNER_H
#define _LANGUAGE_SCANNER_H
#ifndef ZEND_SCANNER_H
#define ZEND_SCANNER_H
#ifdef ZTS
class ZendFlexLexer : public yyFlexLexer
@@ -33,21 +33,19 @@ public:
#endif /* ZTS */
#ifndef ZTS
typedef struct _zend_lex_state {
#ifndef ZTS
YY_BUFFER_STATE buffer_state;
int state;
uint return_offset;
uint lineno;
FILE *in;
char *filename;
} zend_lex_state;
#else
typedef struct _zend_lex_state {
ZendFlexLexer *ZFL;
istream *input_file;
} zend_lex_state;
#endif
uint lineno;
char *filename;
} zend_lex_state;
void zend_fatal_scanner_error(char *);
inline void restore_lexical_state(zend_lex_state * CLS_DC);
+97 -222
View File
@@ -34,7 +34,6 @@
%{
#ifdef ZEND_WIN32
#include <winsock.h>
#include <io.h>
#endif
@@ -92,6 +91,7 @@ private:
stdiobuf _file;
public:
istdiostream (FILE* __f) : istream(), _file(__f) { init(&_file); }
stdiobuf* rdbuf()/* const */ { return &_file; }
};
#endif
@@ -148,12 +148,12 @@ static inline void save_lexical_state(zend_lex_state *lex_state CLS_DC)
#ifndef ZTS
memcpy(&lex_state->buffer_state,&YY_CURRENT_BUFFER,sizeof(YY_BUFFER_STATE));
lex_state->in = yyin;
lex_state->lineno = CG(zend_lineno);
lex_state->state = YYSTATE;
lex_state->filename = zend_get_compiled_filename(CLS_C);
#else
lex_state->ZFL = CG(ZFL);
#endif
lex_state->filename = zend_get_compiled_filename(CLS_C);
lex_state->lineno = CG(zend_lineno);
}
@@ -170,20 +170,20 @@ inline void restore_lexical_state(zend_lex_state *lex_state CLS_DC)
yy_delete_buffer(original_buffer_state);
yyin = lex_state->in;
CG(zend_lineno) = lex_state->lineno;
BEGIN(lex_state->state);
zend_restore_compiled_filename(lex_state->filename);
#else
delete((ZendFlexLexer *) CG(ZFL));
CG(ZFL) = lex_state->ZFL;
#endif
CG(zend_lineno) = lex_state->lineno;
zend_restore_compiled_filename(lex_state->filename);
}
BEGIN_EXTERN_C()
ZEND_API void zend_open_file_dtor(zend_file_handle *fh)
ZEND_API void zend_file_handle_dtor(zend_file_handle *fh)
{
switch (fh->type) {
case ZEND_HANDLE_FP:
@@ -207,7 +207,7 @@ ZEND_API void zend_open_file_dtor(zend_file_handle *fh)
#endif
}
if (fh->opened_path) {
free(fh->opened_path);
efree(fh->opened_path);
}
if (fh->free_filename && fh->filename) {
efree(fh->filename);
@@ -235,7 +235,7 @@ int zend_compare_file_handles(zend_file_handle *fh1, zend_file_handle *fh2)
}
ZEND_API void zend_close_file_handle(zend_file_handle *file_handle CLS_DC)
ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle CLS_DC)
{
zend_llist_del_element(&CG(open_files), file_handle, (int (*)(void *, void *)) zend_compare_file_handles);
}
@@ -243,23 +243,29 @@ ZEND_API void zend_close_file_handle(zend_file_handle *file_handle CLS_DC)
ZEND_API int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
{
char *file_path=NULL;
#ifndef ZTS
switch (file_handle->type) {
case ZEND_HANDLE_FILENAME:
file_handle->handle.fp = zend_fopen(file_handle->filename, &file_handle->opened_path);
file_path = file_handle->opened_path;
break;
case ZEND_HANDLE_FD:
file_handle->opened_path = NULL;
/* file_handle->opened_path = NULL; */
file_handle->handle.fp = fdopen(file_handle->handle.fd, "r");
break;
case ZEND_HANDLE_FP:
file_handle->opened_path = NULL;
/* file_handle->opened_path = NULL; */
file_handle->handle.fp = file_handle->handle.fp;
break;
}
if (!file_handle->handle.fp) {
return FAILURE;
}
if (!file_path) {
file_path = file_handle->filename;
}
file_handle->type = ZEND_HANDLE_FP;
if (file_handle->handle.fp != stdin) {
zend_llist_add_element(&CG(open_files), file_handle);
@@ -271,7 +277,7 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
#else
switch (file_handle->type) {
case ZEND_HANDLE_FD:
file_handle->opened_path = NULL;
/* file_handle->opened_path = NULL; */
file_handle->handle.is = new ifstream(file_handle->handle.fd);
file_handle->type = ZEND_HANDLE_FSTREAM;
break;
@@ -286,7 +292,7 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
break;
}
case ZEND_HANDLE_FP:
file_handle->opened_path = NULL;
/* file_handle->opened_path = NULL; */
if (file_handle->handle.fp==stdin) {
file_handle->handle.is = &cin;
} else {
@@ -298,6 +304,9 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
}
break;
}
file_path = file_handle->filename;
if (file_handle->handle.is->fail()) {
delete file_handle->handle.is;
return FAILURE;
@@ -309,38 +318,23 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
CG(ZFL) = new ZendFlexLexer;
CG(ZFL)->switch_streams(file_handle->handle.is, &cout);
#endif
zend_set_compiled_filename(file_handle->filename);
zend_set_compiled_filename(file_path);
CG(zend_lineno) = 1;
return SUCCESS;
}
END_EXTERN_C()
ZEND_API zend_op_array *zend_compile_files(int type CLS_DC, int file_count, ...)
{
va_list files;
zend_op_array *op_array;
va_start(files, file_count);
op_array = zend_v_compile_files(type CLS_CC, file_count, files);
va_end(files);
return op_array;
}
ZEND_API zend_op_array *v_compile_files(int type CLS_DC, int file_count, va_list files)
ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type CLS_DC)
{
zend_lex_state original_lex_state;
zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array));
zend_op_array *original_active_op_array = CG(active_op_array);
zend_op_array *retval=NULL;
int i;
int compiler_result;
int compiled_files=0;
int last_file=0;
zend_bool compilation_successful=0;
znode retval_znode;
zend_bool original_in_compilation = CG(in_compilation);
zend_file_handle **file_handles = (zend_file_handle **) do_alloca(file_count * sizeof(zend_file_handle *));
retval_znode.op_type = IS_CONST;
retval_znode.u.constant.type = IS_LONG;
@@ -348,55 +342,42 @@ ZEND_API zend_op_array *v_compile_files(int type CLS_DC, int file_count, va_list
retval_znode.u.constant.is_ref = 0;
retval_znode.u.constant.refcount = 1;
init_op_array(op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE);
save_lexical_state(&original_lex_state CLS_CC);
retval = op_array; /* success oriented */
for (i=0; i<file_count; i++) {
file_handles[i] = va_arg(files, zend_file_handle *);
if (file_handles[i]) {
last_file = i;
}
}
for (i=0; i<file_count; i++) {
if (!file_handles[i]) {
continue;
}
if (open_file_for_scanning(file_handles[i] CLS_CC)==FAILURE) {
zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handles[i]->filename);
if (open_file_for_scanning(file_handle CLS_CC)==FAILURE) {
if (type==ZEND_REQUIRE) {
zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle->filename);
zend_bailout();
} else {
CG(in_compilation) = 1;
CG(active_op_array) = op_array;
compiler_result = zendparse(CLS_C);
zend_close_file_handle(file_handles[i] CLS_CC);
if (i == last_file) {
do_return(&retval_znode, 0 CLS_CC);
}
restore_lexical_state(&original_lex_state CLS_CC);
CG(in_compilation) = original_in_compilation;
if (compiler_result==1) { /* parser error */
CG(unclean_shutdown) = 1;
retval = NULL;
break;
}
compiled_files++;
zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle->filename);
}
compilation_successful=0;
} else {
init_op_array(op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE CLS_CC);
CG(in_compilation) = 1;
CG(active_op_array) = op_array;
compiler_result = zendparse(CLS_C);
do_return(&retval_znode, 0 CLS_CC);
restore_lexical_state(&original_lex_state CLS_CC);
CG(in_compilation) = original_in_compilation;
if (compiler_result==1) { /* parser error */
CG(unclean_shutdown) = 1;
retval = NULL;
}
compilation_successful=1;
}
if (retval) {
if (compiled_files>0) {
CG(active_op_array) = original_active_op_array;
CG(active_op_array) = original_active_op_array;
if (compilation_successful) {
pass_two(op_array);
} else {
CG(active_op_array) = original_active_op_array;
destroy_op_array(op_array);
efree(op_array);
retval = NULL;
}
}
free_alloca(file_handles);
return retval;
}
@@ -406,7 +387,6 @@ zend_op_array *compile_filename(int type, zval *filename CLS_DC ELS_DC)
zend_file_handle file_handle;
zval tmp;
zend_op_array *retval;
int error_reporting=0;
if (filename->type != IS_STRING) {
tmp = *filename;
@@ -420,22 +400,12 @@ zend_op_array *compile_filename(int type, zval *filename CLS_DC ELS_DC)
file_handle.opened_path = NULL;
if (type==ZEND_REQUIRE) {
/* We don't want to hear about inclusion failures; If we fail,
* we'll generate a require failure
*/
error_reporting = EG(error_reporting);
EG(error_reporting) = 0;
}
retval = zend_compile_files(type CLS_CC, 1, &file_handle);
if (type==ZEND_REQUIRE) {
EG(error_reporting) = error_reporting;
if (!retval) {
zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, filename->value.str.val);
zend_bailout();
}
retval = zend_compile_file(&file_handle, type CLS_CC);
if (retval && file_handle.opened_path) {
int dummy = 1;
zend_hash_add(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1, (void *)&dummy, sizeof(int), NULL);
}
zend_destroy_file_handle(&file_handle CLS_CC);
if (filename==&tmp) {
zval_dtor(&tmp);
@@ -443,8 +413,11 @@ zend_op_array *compile_filename(int type, zval *filename CLS_DC ELS_DC)
return retval;
}
static inline int prepare_string_for_scanning(zval *str CLS_DC)
#ifndef ZTS
static inline int prepare_string_for_scanning(zval *str, char *filename)
#else
static inline int prepare_string_for_scanning(zval *str, istrstream **input_stream, char *filename CLS_DC)
#endif
{
#ifndef ZTS
/* enforce two trailing NULLs for flex... */
@@ -455,16 +428,18 @@ static inline int prepare_string_for_scanning(zval *str CLS_DC)
yyin=NULL;
yy_scan_buffer(str->value.str.val, str->value.str.len+2);
#else
istrstream *input_stream = new istrstream(str->value.str.val, str->value.str.len);
*input_stream = new istrstream(str->value.str.val, str->value.str.len);
CG(ZFL) = new ZendFlexLexer;
CG(ZFL)->switch_streams(input_stream, &cout);
CG(ZFL)->switch_streams(*input_stream, &cout);
#endif
zend_set_compiled_filename(filename);
CG(zend_lineno) = 1;
return SUCCESS;
}
zend_op_array *compile_string(zval *source_string CLS_DC)
zend_op_array *compile_string(zval *source_string, char *filename CLS_DC)
{
zend_lex_state original_lex_state;
zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array));
@@ -473,6 +448,9 @@ zend_op_array *compile_string(zval *source_string CLS_DC)
zval tmp;
int compiler_result;
zend_bool original_in_compilation = CG(in_compilation);
#ifdef ZTS
istrstream *input_stream;
#endif
if (source_string->value.str.len==0) {
efree(op_array);
@@ -486,13 +464,16 @@ zend_op_array *compile_string(zval *source_string CLS_DC)
convert_to_string(&tmp);
source_string = &tmp;
init_op_array(op_array, ZEND_EVAL_CODE, INITIAL_OP_ARRAY_SIZE);
save_lexical_state(&original_lex_state CLS_CC);
if (prepare_string_for_scanning(source_string CLS_CC)==FAILURE) {
destroy_op_array(op_array);
#ifndef ZTS
if (prepare_string_for_scanning(source_string, filename)==FAILURE) {
#else
if (prepare_string_for_scanning(source_string, &input_stream, filename CLS_CC)==FAILURE) {
#endif
efree(op_array);
retval = NULL;
} else {
init_op_array(op_array, ZEND_EVAL_CODE, INITIAL_OP_ARRAY_SIZE CLS_CC);
CG(active_op_array) = op_array;
#ifndef ZTS
BEGIN(ST_IN_SCRIPTING);
@@ -510,10 +491,12 @@ zend_op_array *compile_string(zval *source_string CLS_DC)
do_return(NULL, 0 CLS_CC);
CG(active_op_array) = original_active_op_array;
pass_two(op_array);
pass_include_eval(op_array);
retval = op_array;
}
}
#ifdef ZTS
delete input_stream;
#endif
zval_dtor(&tmp);
CG(in_compilation) = original_in_compilation;
return retval;
@@ -521,87 +504,6 @@ zend_op_array *compile_string(zval *source_string CLS_DC)
BEGIN_EXTERN_C()
int require_filename(char *filename, zend_bool unique CLS_DC)
{
zend_file_handle file_handle;
file_handle.type = ZEND_HANDLE_FILENAME;
file_handle.filename = filename;
file_handle.free_filename = 0;
if (require_file(&file_handle, unique CLS_CC)==FAILURE) {
zend_bailout();
return FAILURE; /* will never get here */
}
return SUCCESS;
}
int use_filename(char *filename, uint filename_length CLS_DC)
{
zend_error(E_COMPILE_ERROR,"use: Not yet supported. Please use include_once() or require_once()");
return FAILURE;
#if 0
zend_file_handle file_handle;
file_handle.filename = (char *) emalloc(filename_length + zend_uv.import_use_extension_length);
memcpy(file_handle.filename, filename, filename_length);
memcpy(file_handle.filename+filename_length, zend_uv.import_use_extension, zend_uv.import_use_extension_length);
file_handle.filename[filename_length+zend_uv.import_use_extension_length] = 0;
file_handle.free_filename = 1;
file_handle.type = ZEND_HANDLE_FILENAME;
if (require_file(&file_handle, 1 CLS_CC)==FAILURE) {
efree(file_handle.filename);
zend_bailout();
return FAILURE; /* will never get here */
}
return SUCCESS;
#endif
}
int require_file(zend_file_handle *file_handle, zend_bool unique CLS_DC)
{
zend_lex_state original_lex_state;
int compiler_result;
save_lexical_state(&original_lex_state CLS_CC);
if (open_file_for_scanning(file_handle CLS_CC)==FAILURE) {
zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle->filename);
return FAILURE;
}
if (file_handle->opened_path) {
if (unique) {
zend_file_handle *pfh;
if (zend_hash_add(&CG(used_files), file_handle->opened_path, strlen(file_handle->opened_path)+1, file_handle, sizeof(zend_file_handle), (void **) &pfh)==FAILURE) {
zend_close_file_handle(file_handle CLS_CC);
restore_lexical_state(&original_lex_state CLS_CC);
return SUCCESS;
} else {
/* pfh is a copy we only save for get_used_files() */
pfh->type = ZEND_HANDLE_FILENAME;
if (pfh->filename) {
pfh->filename = estrdup(pfh->filename);
pfh->free_filename = 1;
}
if (pfh->opened_path) {
pfh->opened_path = strdup(pfh->opened_path);
}
}
}
}
compiler_result = zendparse(CLS_C);
zend_close_file_handle(file_handle CLS_CC);
restore_lexical_state(&original_lex_state CLS_CC);
if (compiler_result==1) {
zend_bailout();
}
return SUCCESS;
}
int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini)
{
zend_lex_state original_lex_state;
@@ -618,26 +520,35 @@ int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlight
return FAILURE;
}
zend_highlight(syntax_highlighter_ini);
zend_close_file_handle(&file_handle CLS_CC);
zend_destroy_file_handle(&file_handle CLS_CC);
restore_lexical_state(&original_lex_state CLS_CC);
return SUCCESS;
}
int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini)
int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name)
{
zend_lex_state original_lex_state;
zval tmp = *str;
#ifdef ZTS
istrstream *input_stream;
#endif
CLS_FETCH();
str = &tmp;
zval_copy_ctor(str);
save_lexical_state(&original_lex_state CLS_CC);
if (prepare_string_for_scanning(str CLS_CC)==FAILURE) {
#ifndef ZTS
if (prepare_string_for_scanning(str, str_name)==FAILURE) {
#else
if (prepare_string_for_scanning(str, &input_stream, str_name CLS_CC)==FAILURE) {
#endif
return FAILURE;
}
zend_highlight(syntax_highlighter_ini);
restore_lexical_state(&original_lex_state CLS_CC);
#ifdef ZTS
delete input_stream;
#endif
zval_dtor(str);
return SUCCESS;
}
@@ -686,47 +597,6 @@ int yyFlexLexer::yylex()
#endif
/* redefine YY_INPUT to handle urls for win32*/
#if 0 /*defined(ZEND_WIN32)*/
#define YY_INPUT(buf,result,max_size) \
if ( yyin->_tmpfname != "url" ){ \
if ( yy_current_buffer->yy_is_interactive ) \
{ \
int c = '*', n; \
for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
if ( c == '\n' ) \
buf[n++] = (char) c; \
if ( c == EOF && ferror( yyin ) ) \
YY_FATAL_ERROR( "input in flex scanner failed" ); \
result = n; \
} \
else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
&& ferror( yyin ) ) \
YY_FATAL_ERROR( "input in flex scanner failed" ); \
}else{ /* this is a url */ \
int recv_char=0,socketd=0; \
/*memset(buf,0,max_size);*/ \
socketd=yyin->_file; \
if ( yy_current_buffer->yy_is_interactive ) \
{ \
int c = '*', n; \
for ( n = 0; n < max_size && \
( (recv_char=recv( socketd,(char *)&c,1,0 ))) >0 && c != '\n'; ++n ) \
buf[n] = (char) c; \
if ( c == '\n' ) \
buf[n++] = (char) c; \
if ( recv_char == SOCKET_ERROR ) \
YY_FATAL_ERROR( "input from url in flex scanner failed" ); \
result = n; \
} \
else if ((result = recv( socketd, (char *)buf, max_size, 0)) == SOCKET_ERROR) \
YY_FATAL_ERROR( "input from url read in flex scanner failed" ); \
}
#endif
%}
LNUM [0-9]+
@@ -739,6 +609,7 @@ TABS_AND_SPACES [ \t]*
TOKENS [;:,.\[\]()|^&+-/*=%!~$<>?@]
ENCAPSED_TOKENS [\[\]{}$]
ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
ANY_CHAR (.|[\n])
%option noyylineno
%option noyywrap
@@ -877,7 +748,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
return T_STRING;
}
<ST_LOOKING_FOR_PROPERTY>. {
<ST_LOOKING_FOR_PROPERTY>{ANY_CHAR} {
/*unput(yytext[0]);*/
yyless(0);
yy_pop_state();
@@ -1053,7 +924,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
}
<ST_IN_SCRIPTING>"^=" {
return XT_OR_EQUAL;
return T_XOR_EQUAL;
}
<ST_IN_SCRIPTING>"||" {
@@ -1120,7 +991,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
}
<ST_LOOKING_FOR_VARNAME>. {
<ST_LOOKING_FOR_VARNAME>{ANY_CHAR} {
/*unput(yytext[0]);*/
yyless(0);
yy_pop_state();
@@ -1221,6 +1092,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
zendlval->value.str.len = yyleng;
zendlval->type = IS_STRING;
BEGIN(ST_IN_SCRIPTING);
return T_OPEN_TAG;
} else {
zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
zendlval->value.str.len = yyleng;
@@ -1241,9 +1113,12 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
<INITIAL>"<?php_track_vars?>"([\n]|"\r\n")? {
zend_message_dispatcher(ZMSG_ENABLE_TRACK_VARS, NULL);
zend_error(E_WARNING, "&lt;?php_track_vars?&gt; is no longer supported - please use the track_vars INI directive instead");
HANDLE_NEWLINE(yytext[yyleng-1]);
return T_PHP_TRACK_VARS;
zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
zendlval->value.str.len = yyleng;
zendlval->type = IS_STRING;
return T_INLINE_HTML;
}
<ST_IN_SCRIPTING,ST_DOUBLE_QUOTES,ST_HEREDOC,ST_BACKQUOTE>"$"{LABEL} {
@@ -1612,7 +1487,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
return T_CHARACTER;
}
<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"\\". {
<ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_HEREDOC>"\\"{ANY_CHAR} {
switch (yytext[1]) {
case 'n':
zendlval->value.lval = (long) '\n';
@@ -1680,6 +1555,6 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
<ST_IN_SCRIPTING,INITIAL,ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_SINGLE_QUOTE,ST_HEREDOC>. {
<ST_IN_SCRIPTING,INITIAL,ST_DOUBLE_QUOTES,ST_BACKQUOTE,ST_SINGLE_QUOTE,ST_HEREDOC>{ANY_CHAR} {
zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d",yytext[0],yytext[0],YYSTATE);
}
+211 -53
View File
@@ -36,6 +36,10 @@
# define GLOBAL_CONSTANTS_TABLE CG(zend_constants)
#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;
ZEND_API int (*zend_printf)(const char *format, ...);
@@ -44,14 +48,11 @@ 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_ini_entry_p)(char *name, uint name_length, zval *contents);
#if ZEND_NEW_ERROR_HANDLING
static void (*zend_error_cb)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
#else
ZEND_API void (*zend_error_cb)(int type, const char *format, ...);
#endif
#ifdef ZTS
ZEND_API int compiler_globals_id;
@@ -142,16 +143,9 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop
expr_copy->value.str.len = sizeof("Array")-1;
expr_copy->value.str.val = estrndup("Array", expr_copy->value.str.len);
break;
case IS_OBJECT: {
zval function_name;
ZVAL_STRING(&function_name,"__string_value",1);
if (call_user_function(NULL, expr, &function_name, expr_copy, 0, NULL)==FAILURE) {
expr_copy->value.str.len = sizeof("Object")-1;
expr_copy->value.str.val = estrndup("Object", expr_copy->value.str.len);
}
efree(function_name.value.str.val);
}
case IS_OBJECT:
expr_copy->value.str.len = sizeof("Object")-1;
expr_copy->value.str.val = estrndup("Object", expr_copy->value.str.len);
break;
default:
*expr_copy = *expr;
@@ -220,9 +214,9 @@ ZEND_API void zend_print_zval_r_ex(zend_write_func_t write_func, zval *expr, int
static FILE *zend_fopen_wrapper(const char *filename, char **opened_path)
{
if (opened_path) {
*opened_path = strdup(filename);
*opened_path = estrdup(filename);
}
return fopen(filename, "r");
return fopen(filename, "rb");
}
@@ -232,8 +226,8 @@ static void register_standard_class(void)
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(&zend_standard_class_def.default_properties, 0, NULL, ZVAL_PTR_DTOR, 1);
zend_hash_init(&zend_standard_class_def.function_table, 0, NULL, ZEND_FUNCTION_DTOR, 1);
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.function_table, 0, NULL, ZEND_FUNCTION_DTOR, 1, 0);
zend_standard_class_def.handle_function_call = NULL;
zend_standard_class_def.handle_property_get = NULL;
zend_standard_class_def.handle_property_set = NULL;
@@ -243,21 +237,33 @@ static void register_standard_class(void)
}
static void zend_set_default_compile_time_values(CLS_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)
{
zend_function tmp_func;
zend_class_entry tmp_class;
compiler_globals->compiled_filename = NULL;
compiler_globals->function_table = (HashTable *) malloc(sizeof(HashTable));
zend_hash_init(compiler_globals->function_table, 100, NULL, ZEND_FUNCTION_DTOR, 1);
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 = (HashTable *) malloc(sizeof(HashTable));
zend_hash_init(compiler_globals->class_table, 10, NULL, ZEND_CLASS_DTOR, 1);
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));
compiler_globals->extended_info = 0;
zend_set_default_compile_time_values(CLS_C);
}
@@ -281,6 +287,7 @@ static void executor_globals_ctor(zend_executor_globals *executor_globals)
zend_copy_constants(executor_globals->zend_constants, global_constants_table);
}
zend_init_rsrc_plist(ELS_C);
EG(lambda_count)=0;
}
@@ -298,6 +305,10 @@ static void alloc_globals_ctor(zend_alloc_globals *alloc_globals)
#endif
#ifdef __FreeBSD__
/* FreeBSD floating point precision fix */
#include <floatingpoint.h>
#endif
int zend_startup(zend_utility_functions *utility_functions, char **extensions, int start_builtin_functions)
{
@@ -310,6 +321,23 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions, i
start_memory_manager(ALS_C);
#endif
#ifdef __FreeBSD__
{
/* FreeBSD floating point precision fix */
#ifdef HAVE_FP_EXCEPT
fp_except
#else
fp_except_t
#endif
mask;
mask = fpgetmask();
fpsetmask(mask & ~FP_X_IMP);
}
#endif
zend_startup_extensions_mechanism();
/* Set up utility functions and values */
zend_error_cb = utility_functions->error_function;
zend_printf = utility_functions->printf_function;
@@ -324,21 +352,19 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions, i
zend_get_ini_entry_p = utility_functions->get_ini_entry;
zend_ticks_function = utility_functions->ticks_function;
zend_v_compile_files = v_compile_files;
zend_compile_file = compile_file;
zend_execute = execute;
zend_startup_extensions();
/* set up version */
zend_version_info = strdup(ZEND_CORE_VERSION_INFO);
zend_version_info_length = sizeof(ZEND_CORE_VERSION_INFO)-1;
GLOBAL_FUNCTION_TABLE = (HashTable *) malloc(sizeof(HashTable));
GLOBAL_CLASS_TABLE = (HashTable *) malloc(sizeof(HashTable));
zend_hash_init(GLOBAL_FUNCTION_TABLE, 100, NULL, ZEND_FUNCTION_DTOR, 1);
zend_hash_init(GLOBAL_CLASS_TABLE, 10, NULL, ZEND_CLASS_DTOR, 1);
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);
register_standard_class();
zend_hash_init(&module_registry, 50, NULL, ZEND_MODULE_DTOR, 1);
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 */
@@ -359,6 +385,7 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions, i
GLOBAL_CONSTANTS_TABLE = EG(zend_constants);
#else
zend_startup_constants();
zend_set_default_compile_time_values(CLS_C);
#endif
zend_register_standard_constants(ELS_C);
@@ -376,6 +403,9 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions, i
void zend_shutdown()
{
#ifdef ZEND_WIN32
zend_shutdown_timeout_thread();
#endif
#ifndef ZTS
zend_destroy_rsrc_plist();
#endif
@@ -465,16 +495,26 @@ void zend_deactivate_modules()
ELS_FETCH();
EG(opline_ptr) = NULL; /* we're no longer executing anything */
zend_hash_apply(&module_registry, (int (*)(void *)) module_registry_cleanup);
if (setjmp(EG(bailout))==0) {
zend_hash_apply(&module_registry, (int (*)(void *)) module_registry_cleanup);
}
}
void zend_deactivate(CLS_D ELS_DC)
{
EG(opline_ptr) = NULL; /* we're no longer executing anything */
/* we're no longer executing anything */
EG(opline_ptr) = NULL;
EG(active_symbol_table) = NULL;
shutdown_scanner(CLS_C);
shutdown_executor(ELS_C);
shutdown_compiler(CLS_C);
if (setjmp(EG(bailout))==0) {
shutdown_scanner(CLS_C);
}
if (setjmp(EG(bailout))==0) {
shutdown_executor(ELS_C);
}
if (setjmp(EG(bailout))==0) {
shutdown_compiler(CLS_C);
}
}
@@ -498,19 +538,17 @@ ZEND_API int zend_get_ini_entry(char *name, uint name_length, zval *contents)
}
#if ZEND_NEW_ERROR_HANDLING
#define ZEND_ERROR_BUFFER_SIZE 1024
ZEND_API void zend_error(int type, const char *format, ...)
{
va_list args;
zval **params;
zval retval;
zval error_type, error_message;
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;
ELS_FETCH();
CLS_FETCH();
@@ -552,6 +590,7 @@ ZEND_API void zend_error(int type, const char *format, ...)
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);
@@ -567,34 +606,153 @@ ZEND_API void zend_error(int type, const char *format, ...)
break;
default:
/* Handle the error in user space */
INIT_PZVAL(&error_message);
INIT_PZVAL(&error_type);
error_message.value.str.val = (char *) emalloc(ZEND_ERROR_BUFFER_SIZE);
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);
/* error_message.value.str.len = vsnprintf(error_message->value.str.val, error_message->value.str.len-1, format, args); */
error_message.value.str.len = vsprintf(error_message.value.str.val, format, args);
error_message.type = IS_STRING;
#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;
error_type.value.lval = type;
error_type.type = IS_LONG;
z_error_type->value.lval = type;
z_error_type->type = IS_LONG;
params = (zval **) emalloc(sizeof(zval *)*2);
params[0] = &error_type;
params[1] = &error_message;
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;
if (call_user_function(CG(function_table), NULL, EG(user_error_handler), &retval, 2, params)==SUCCESS) {
zval_dtor(&retval);
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)==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);
efree(error_message.value.str.val);
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);
}
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 CLS_DC ELS_DC, int file_count, ...)
{
va_list files;
int i;
zend_file_handle *file_handle;
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 CLS_CC);
zend_destroy_file_handle(file_handle CLS_CC);
if (EG(active_op_array)) {
zend_execute(EG(active_op_array) ELS_CC);
zval_ptr_dtor(EG(return_value_ptr_ptr));
EG(return_value_ptr_ptr) = &EG(global_return_value_ptr);
EG(global_return_value_ptr) = NULL;
destroy_op_array(EG(active_op_array));
efree(EG(active_op_array));
} else if (type==ZEND_REQUIRE) {
va_end(files);
return FAILURE;
}
}
va_end(files);
return SUCCESS;
}
#define COMPILED_STRING_DESCRIPTION_FORMAT "%s(%d) : %s"
ZEND_API char *zend_make_compiled_string_description(char *name)
{
char *cur_filename;
int cur_lineno;
char *compiled_string_description;
CLS_FETCH();
ELS_FETCH();
if (zend_is_compiling()) {
cur_filename = zend_get_compiled_filename(CLS_C);
cur_lineno = zend_get_compiled_lineno(CLS_C);
} else if (zend_is_executing()) {
cur_filename = zend_get_executed_filename(ELS_C);
cur_lineno = zend_get_executed_lineno(ELS_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;
}
+39 -27
View File
@@ -18,12 +18,10 @@
*/
#ifndef _ZEND_H
#define _ZEND_H
#ifndef ZEND_H
#define ZEND_H
#define ZEND_VERSION "1.00"
#define ZEND_NEW_ERROR_HANDLING 0
#define ZEND_VERSION "1.0.3"
#ifdef __cplusplus
#define BEGIN_EXTERN_C() extern "C" {
@@ -125,6 +123,11 @@
#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"
@@ -132,6 +135,7 @@
typedef unsigned char zend_bool;
typedef unsigned char zend_uchar;
typedef unsigned int zend_uint;
typedef unsigned long zend_ulong;
typedef unsigned short zend_ushort;
#undef SUCCESS
@@ -221,11 +225,7 @@ struct _zend_class_entry {
typedef struct _zend_utility_functions {
#if ZEND_NEW_ERROR_HANDLING
void (*error_function)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
#else
void (*error_function)(int type, const char *format, ...);
#endif
int (*printf_function)(const char *format, ...);
int (*write_function)(const char *str, uint str_length);
FILE *(*fopen_function)(const char *filename, char **opened_path);
@@ -238,9 +238,6 @@ typedef struct _zend_utility_functions {
typedef struct _zend_utility_values {
zend_bool short_tags;
zend_bool asp_tags;
zend_bool allow_call_time_pass_reference;
char *import_use_extension;
uint import_use_extension_length;
} zend_utility_values;
@@ -255,6 +252,8 @@ typedef int (*zend_write_func_t)(const char *str, uint str_length);
#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 */
@@ -267,9 +266,10 @@ typedef int (*zend_write_func_t)(const char *str, uint str_length);
#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 9 /* for parser internal use only */
#define FLAG_IS_BC 10 /* for parser internal use only */
/* overloaded elements data types */
#define OE_IS_ARRAY (1<<0)
@@ -298,6 +298,13 @@ ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int in
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;
#define STR_FREE(ptr) if (ptr && ptr!=empty_string) { efree(ptr); }
@@ -324,14 +331,10 @@ 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);
#if ZEND_NEW_ERROR_HANDLING
ZEND_API void zend_error(int type, const char *format, ...);
#else
#define zend_error zend_error_cb
ZEND_API void (*zend_error_cb)(int type, const char *format, ...);
#endif
void zenderror(char *error);
@@ -355,13 +358,17 @@ ZEND_API int zend_get_ini_entry(char *name, uint name_length, zval *contents);
/* Messages for applications of Zend */
#define ZMSG_ENABLE_TRACK_VARS 1L
#define ZMSG_FAILED_INCLUDE_FOPEN 2L
#define ZMSG_FAILED_REQUIRE_FOPEN 3L
#define ZMSG_FAILED_HIGHLIGHT_FOPEN 4L
#define ZMSG_MEMORY_LEAK_DETECTED 5L
#define ZMSG_MEMORY_LEAK_REPEATED 6L
#define ZMSG_LOG_SCRIPT_NAME 7L
#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; \
@@ -398,6 +405,11 @@ ZEND_API int zend_get_ini_entry(char *name, uint name_length, zval *contents);
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); \
@@ -405,7 +417,7 @@ ZEND_API int zend_get_ini_entry(char *name, uint name_length, zval *contents);
zval_copy_ctor(&(zv)); \
(pzv)->refcount--; \
} else { \
FREE_ZVAL(pzv); \
FREE_ZVAL(pzv); \
} \
INIT_PZVAL(&(zv));
@@ -422,7 +434,7 @@ ZEND_API int zend_get_ini_entry(char *name, uint name_length, zval *contents);
#define EMPTY_SWITCH_DEFAULT_CASE()
#endif
#endif /* _ZEND_H */
#endif /* ZEND_H */
/*
* Local variables:
+81 -24
View File
@@ -25,7 +25,7 @@
#include "zend_constants.h"
#ifdef HAVE_STDARG_H
# include <stdarg.h>
#include <stdarg.h>
#endif
/* these variables are true statics/globals, and have to be mutex'ed on every access */
@@ -50,9 +50,9 @@ ZEND_API int zend_get_parameters(int ht, int param_count, ...)
va_start(ptr, param_count);
while (param_count>0) {
while (param_count-->0) {
param = va_arg(ptr, zval **);
param_ptr = *(p-param_count);
param_ptr = *(p-arg_count);
if (!PZVAL_IS_REF(param_ptr) && param_ptr->refcount>1) {
zval *new_tmp;
@@ -61,11 +61,11 @@ ZEND_API int zend_get_parameters(int ht, int param_count, ...)
zval_copy_ctor(new_tmp);
INIT_PZVAL(new_tmp);
param_ptr = new_tmp;
((zval *) *(p-param_count))->refcount--;
*(p-param_count) = param_ptr;
((zval *) *(p-arg_count))->refcount--;
*(p-arg_count) = param_ptr;
}
*param = param_ptr;
param_count--;
arg_count--;
}
va_end(ptr);
@@ -87,9 +87,8 @@ ZEND_API int zend_get_parameters_array(int ht, int param_count, zval **argument_
return FAILURE;
}
while (param_count>0) {
param_ptr = *(p-param_count);
while (param_count-->0) {
param_ptr = *(p-arg_count);
if (!PZVAL_IS_REF(param_ptr) && param_ptr->refcount>1) {
zval *new_tmp;
@@ -98,11 +97,11 @@ ZEND_API int zend_get_parameters_array(int ht, int param_count, zval **argument_
zval_copy_ctor(new_tmp);
INIT_PZVAL(new_tmp);
param_ptr = new_tmp;
((zval *) *(p-param_count))->refcount--;
*(p-param_count) = param_ptr;
((zval *) *(p-arg_count))->refcount--;
*(p-arg_count) = param_ptr;
}
*(argument_array++) = param_ptr;
param_count--;
arg_count--;
}
return SUCCESS;
@@ -129,9 +128,9 @@ ZEND_API int zend_get_parameters_ex(int param_count, ...)
}
va_start(ptr, param_count);
while (param_count>0) {
while (param_count-->0) {
param = va_arg(ptr, zval ***);
*param = (zval **) p-(param_count--);
*param = (zval **) p-(arg_count--);
}
va_end(ptr);
@@ -152,8 +151,8 @@ ZEND_API int zend_get_parameters_array_ex(int param_count, zval ***argument_arra
return FAILURE;
}
while (param_count>0) {
*(argument_array++) = (zval **) p-(param_count--);
while (param_count-->0) {
*(argument_array++) = (zval **) p-(arg_count--);
}
return SUCCESS;
@@ -189,7 +188,7 @@ ZEND_API inline int _array_init(zval *arg ZEND_FILE_LINE_DC)
ALLOC_HASHTABLE_REL(arg->value.ht);
if (!arg->value.ht || zend_hash_init(arg->value.ht, 0, NULL, ZVAL_PTR_DTOR, 0)) {
zend_error(E_CORE_ERROR, "Cannot allocate memory for array");
zend_error(E_ERROR, "Cannot allocate memory for array");
return FAILURE;
}
arg->type = IS_ARRAY;
@@ -202,7 +201,7 @@ ZEND_API inline int _object_init_ex(zval *arg, zend_class_entry *class_type ZEND
zval *tmp;
if (!class_type->constants_updated) {
zend_hash_apply(&class_type->default_properties, (int (*)(void *)) zval_update_constant);
zend_hash_apply_with_argument(&class_type->default_properties, (int (*)(void *,void *)) zval_update_constant, (void *) 1);
class_type->constants_updated = 1;
}
@@ -708,15 +707,22 @@ ZEND_API int zend_startup_module(zend_module_entry *module)
/* registers all functions in *library_functions in the function hash */
int zend_register_functions(zend_function_entry *functions, HashTable *function_table)
int zend_register_functions(zend_function_entry *functions, HashTable *function_table, int type)
{
zend_function_entry *ptr = functions;
zend_function function;
zend_internal_function *internal_function = (zend_internal_function *)&function;
int count=0,unload=0;
HashTable *target_function_table = function_table;
int error_type;
CLS_FETCH();
if (type==MODULE_PERSISTENT) {
error_type = E_CORE_WARNING;
} else {
error_type = E_WARNING;
}
if (!target_function_table) {
target_function_table = CG(function_table);
}
@@ -727,7 +733,7 @@ int zend_register_functions(zend_function_entry *functions, HashTable *function_
internal_function->arg_types = ptr->func_arg_types;
internal_function->function_name = ptr->fname;
if (!internal_function->handler) {
zend_error(E_CORE_WARNING,"Null function defined as active function");
zend_error(error_type, "Null function defined as active function");
zend_unregister_functions(functions, count, target_function_table);
return FAILURE;
}
@@ -741,7 +747,7 @@ int zend_register_functions(zend_function_entry *functions, HashTable *function_
if (unload) { /* before unloading, display all remaining bad function in the module */
while (ptr->fname) {
if (zend_hash_exists(target_function_table, ptr->fname, strlen(ptr->fname)+1)) {
zend_error(E_CORE_WARNING, "Function registration failed - duplicate name - %s",ptr->fname);
zend_error(error_type, "Function registration failed - duplicate name - %s",ptr->fname);
}
ptr++;
}
@@ -783,7 +789,7 @@ ZEND_API int zend_register_module(zend_module_entry *module)
#if 0
zend_printf("%s: Registering module %d\n",module->name, module->module_number);
#endif
if (module->functions && zend_register_functions(module->functions, NULL)==FAILURE) {
if (module->functions && zend_register_functions(module->functions, NULL, module->type)==FAILURE) {
zend_error(E_CORE_WARNING,"%s: Unable to register functions, unable to load",module->name);
return FAILURE;
}
@@ -867,8 +873,31 @@ int zend_next_free_module(void)
return ++module_count;
}
/* If parent_ce is not NULL then it inherits from parent_ce
* If parent_ce is NULL and parent_name isn't then it looks for the parent and inherits from it
* If both parent_ce and parent_name are NULL it does a regular class registration
* If parent_name is specified but not found NULL is returned
*/
ZEND_API zend_class_entry *zend_register_internal_class_ex(zend_class_entry *class_entry, zend_class_entry *parent_ce, char *parent_name)
{
zend_class_entry *register_class;
CLS_FETCH();
ZEND_API zend_class_entry *register_internal_class(zend_class_entry *class_entry)
if (!parent_ce && parent_name) {
if (zend_hash_find(CG(class_table), parent_name, strlen(parent_name)+1, (void **) &parent_ce)==FAILURE) {
return NULL;
}
}
register_class = zend_register_internal_class(class_entry);
if (parent_ce) {
do_inheritance(register_class, parent_ce);
}
return register_class;
}
ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *class_entry)
{
zend_class_entry *register_class;
char *lowercase_name = zend_strndup(class_entry->name, class_entry->name_length);
@@ -886,7 +915,7 @@ ZEND_API zend_class_entry *register_internal_class(zend_class_entry *class_entry
if (class_entry->builtin_functions) {
zend_register_functions(class_entry->builtin_functions, &class_entry->function_table);
zend_register_functions(class_entry->builtin_functions, &class_entry->function_table, MODULE_PERSISTENT);
}
zend_hash_update(CG(class_table), lowercase_name, class_entry->name_length+1, class_entry, sizeof(zend_class_entry), (void **) &register_class);
@@ -925,3 +954,31 @@ ZEND_API int zend_set_hash_symbol(zval *symbol, char *name, int name_length,
va_end(symbol_table_list);
return SUCCESS;
}
/* Disabled functions support */
static ZEND_FUNCTION(display_disabled_function)
{
zend_error(E_WARNING, "%s() has been disabled for security reasons.", get_active_function_name());
}
static zend_function_entry disabled_function[] = {
ZEND_FE(display_disabled_function, NULL)
{ NULL, NULL, NULL }
};
ZEND_API int zend_disable_function(char *function_name, uint function_name_length)
{
CLS_FETCH();
if (zend_hash_del(CG(function_table), function_name, function_name_length+1)==FAILURE) {
return FAILURE;
}
disabled_function[0].fname = function_name;
return zend_register_functions(disabled_function, CG(function_table), MODULE_PERSISTENT);
}
+14 -9
View File
@@ -18,14 +18,15 @@
*/
#ifndef _ZEND_API_H
#define _ZEND_API_H
#ifndef ZEND_API_H
#define ZEND_API_H
#include "modules.h"
#include "zend_list.h"
#include "zend_fast_cache.h"
#include "zend_operators.h"
#include "zend_variables.h"
#include "zend_execute.h"
#define ZEND_FN(name) zend_if_##name
#define ZEND_NAMED_FUNCTION(name) void name(INTERNAL_FUNCTION_PARAMETERS)
@@ -108,11 +109,15 @@ ZEND_API int zend_get_parameters_array_ex(int param_count, zval ***argument_arra
ZEND_API int ParameterPassedByReference(int ht, uint n);
int zend_register_functions(zend_function_entry *functions, HashTable *function_table);
int zend_register_functions(zend_function_entry *functions, HashTable *function_table, int type);
void zend_unregister_functions(zend_function_entry *functions, int count, HashTable *function_table);
ZEND_API int zend_register_module(zend_module_entry *module_entry);
ZEND_API zend_class_entry *register_internal_class(zend_class_entry *class_entry);
ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *class_entry);
ZEND_API zend_class_entry *zend_register_internal_class_ex(zend_class_entry *class_entry, zend_class_entry *parent_ce, char *parent_name);
ZEND_API zend_module_entry *zend_get_module(int module_number);
ZEND_API int zend_disable_function(char *function_name, uint function_name_length);
ZEND_API void wrong_param_count(void);
@@ -173,7 +178,7 @@ ZEND_API int add_get_index_string(zval *arg, uint idx, char *str, void **dest, i
ZEND_API int add_get_index_stringl(zval *arg, uint idx, char *str, uint length, void **dest, int duplicate);
ZEND_API int call_user_function(HashTable *function_table, zval *object, zval *function_name, zval *retval_ptr, int param_count, zval *params[]);
ZEND_API int call_user_function_ex(HashTable *function_table, zval *object, zval *function_name, zval **retval_ptr_ptr, int param_count, zval **params[], int no_separation);
ZEND_API int call_user_function_ex(HashTable *function_table, zval *object, zval *function_name, zval **retval_ptr_ptr, int param_count, zval **params[], int no_separation, HashTable *symbol_table);
ZEND_API int add_property_long(zval *arg, char *key, long l);
ZEND_API int add_property_unset(zval *arg, char *key);
@@ -222,7 +227,7 @@ ZEND_API int zend_set_hash_symbol(zval *symbol, char *name, int name_length,
#define ZVAL_EMPTY_STRING(z) { \
(z)->value.str.len = 0; \
(z)->value.str.val = empty_string \
(z)->value.str.val = empty_string; \
(z)->type = IS_STRING; \
}
@@ -263,7 +268,7 @@ ZEND_API int zend_set_hash_symbol(zval *symbol, char *name, int name_length,
#define RETVAL_EMPTY_STRING() { \
return_value->value.str.len = 0; \
return_value->value.str.val = empty_string \
return_value->value.str.val = empty_string; \
return_value->type = IS_STRING; \
}
@@ -314,7 +319,7 @@ ZEND_API int zend_set_hash_symbol(zval *symbol, char *name, int name_length,
#define RETURN_EMPTY_STRING() { \
return_value->value.str.len = 0; \
return_value->value.str.val = empty_string \
return_value->value.str.val = empty_string; \
return_value->type = IS_STRING; \
return; \
}
@@ -411,7 +416,7 @@ ZEND_API int zend_set_hash_symbol(zval *symbol, char *name, int name_length,
#define HASH_OF(p) ((p)->type==IS_ARRAY ? (p)->value.ht : (((p)->type==IS_OBJECT ? (p)->value.obj.properties : NULL)))
#define ZVAL_IS_NULL(z) ((z)->type==IS_NULL)
#endif /* _ZEND_API_H */
#endif /* ZEND_API_H */
/*
* Local variables:
+91 -43
View File
@@ -50,24 +50,31 @@ ZEND_API zend_alloc_globals alloc_globals;
# if MEMORY_LIMIT
# if ZEND_DEBUG
#define CHECK_MEMORY_LIMIT(s) _CHECK_MEMORY_LIMIT(s, __zend_filename, __zend_lineno)
#define CHECK_MEMORY_LIMIT(s, rs) _CHECK_MEMORY_LIMIT(s, rs, __zend_filename, __zend_lineno)
# else
#define CHECK_MEMORY_LIMIT(s) _CHECK_MEMORY_LIMIT(s,NULL,0)
#define CHECK_MEMORY_LIMIT(s, rs) _CHECK_MEMORY_LIMIT(s, rs, NULL,0)
# endif
#define _CHECK_MEMORY_LIMIT(s,file,lineno) { AG(allocated_memory) += (s);\
#define _CHECK_MEMORY_LIMIT(s, rs, file, lineno) { AG(allocated_memory) += rs;\
if (AG(memory_limit)<AG(allocated_memory)) {\
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); \
} \
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)
#define CHECK_MEMORY_LIMIT(s, rs)
#endif
@@ -99,15 +106,30 @@ ZEND_API zend_alloc_globals alloc_globals;
} \
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
ALS_FETCH();
if (!ZEND_DISABLE_MEMORY_CACHE && (size < MAX_CACHED_MEMORY) && (AG(cache_count)[size] > 0)) {
p = AG(cache)[size][--AG(cache_count)[size]];
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;
@@ -115,18 +137,22 @@ ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
p->orig_lineno = __zend_orig_lineno;
p->magic = MEM_BLOCK_START_MAGIC;
p->reported = 0;
AG(cache_stats)[size][1]++;
AG(cache_stats)[CACHE_INDEX][1]++;
#endif
p->persistent = 0;
p->cached = 0;
p->size = size;
HANDLE_BLOCK_INTERRUPTIONS();
ADD_POINTER_TO_LIST(p);
HANDLE_UNBLOCK_INTERRUPTIONS();
return (void *)((char *)p + sizeof(zend_mem_header) + PLATFORM_PADDING);
} else {
#if ZEND_DEBUG
if (size<MAX_CACHED_MEMORY) {
AG(cache_stats)[size][0]++;
if (CACHE_INDEX<MAX_CACHED_MEMORY) {
AG(cache_stats)[CACHE_INDEX][0]++;
}
#endif
p = (zend_mem_header *) malloc(sizeof(zend_mem_header) + size + PLATFORM_PADDING + END_ALIGNMENT(size) + END_MAGIC_SIZE);
p = (zend_mem_header *) malloc(sizeof(zend_mem_header) + SIZE + PLATFORM_PADDING + END_ALIGNMENT(SIZE) + END_MAGIC_SIZE);
}
HANDLE_BLOCK_INTERRUPTIONS();
@@ -143,7 +169,7 @@ ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
}
p->persistent = p->cached = 0;
ADD_POINTER_TO_LIST(p);
p->size = size;
p->size = size; /* Save real size for correct cache output */
#if ZEND_DEBUG
p->filename = __zend_filename;
p->lineno = __zend_lineno;
@@ -151,10 +177,10 @@ ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
p->orig_lineno = __zend_orig_lineno;
p->magic = MEM_BLOCK_START_MAGIC;
p->reported = 0;
*((long *)(((char *) p) + sizeof(zend_mem_header)+size+PLATFORM_PADDING+END_ALIGNMENT(size))) = MEM_BLOCK_END_MAGIC;
*((long *)(((char *) p) + sizeof(zend_mem_header)+SIZE+PLATFORM_PADDING+END_ALIGNMENT(SIZE))) = MEM_BLOCK_END_MAGIC;
#endif
#if MEMORY_LIMIT
CHECK_MEMORY_LIMIT(size);
CHECK_MEMORY_LIMIT(size, SIZE);
#endif
HANDLE_UNBLOCK_INTERRUPTIONS();
return (void *)((char *)p + sizeof(zend_mem_header) + PLATFORM_PADDING);
@@ -164,29 +190,34 @@ 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_mem_header *p = (zend_mem_header *) ((char *)ptr - sizeof(zend_mem_header) - PLATFORM_PADDING);
DECLARE_CACHE_VARS
ALS_FETCH();
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);
memset(ptr, 0x5a, SIZE);
#endif
if (!ZEND_DISABLE_MEMORY_CACHE
&& !p->persistent && (p->size < MAX_CACHED_MEMORY) && (AG(cache_count)[p->size] < MAX_CACHED_ENTRIES)) {
AG(cache)[p->size][AG(cache_count)[p->size]++] = p;
&& !p->persistent && (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
HANDLE_BLOCK_INTERRUPTIONS();
REMOVE_POINTER_FROM_LIST(p);
HANDLE_UNBLOCK_INTERRUPTIONS();
return;
}
HANDLE_BLOCK_INTERRUPTIONS();
REMOVE_POINTER_FROM_LIST(p);
#if MEMORY_LIMIT
AG(allocated_memory) -= p->size;
AG(allocated_memory) -= SIZE;
#endif
free(p);
@@ -198,14 +229,14 @@ ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LI
{
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,(int)NULL,final_size);
memset(p,(int)NULL, final_size);
HANDLE_UNBLOCK_INTERRUPTIONS();
return p;
}
@@ -215,14 +246,18 @@ ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LIN
{
zend_mem_header *p = (zend_mem_header *) ((char *)ptr-sizeof(zend_mem_header)-PLATFORM_PADDING);
zend_mem_header *orig = p;
DECLARE_CACHE_VARS
ALS_FETCH();
if (!ptr) {
return _emalloc(size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
}
CALCULATE_REAL_SIZE_AND_CACHE_INDEX(size);
HANDLE_BLOCK_INTERRUPTIONS();
REMOVE_POINTER_FROM_LIST(p);
p = (zend_mem_header *) realloc(p,sizeof(zend_mem_header)+size+PLATFORM_PADDING+END_ALIGNMENT(size)+END_MAGIC_SIZE);
p = (zend_mem_header *) realloc(p,sizeof(zend_mem_header)+SIZE+PLATFORM_PADDING+END_ALIGNMENT(SIZE)+END_MAGIC_SIZE);
if (!p) {
if (!allow_failure) {
fprintf(stderr,"FATAL: erealloc(): Unable to allocate %ld bytes\n", (long) size);
@@ -241,10 +276,10 @@ ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LIN
p->filename = __zend_filename;
p->lineno = __zend_lineno;
p->magic = MEM_BLOCK_START_MAGIC;
*((long *)(((char *) p) + sizeof(zend_mem_header)+size+PLATFORM_PADDING+END_ALIGNMENT(size))) = MEM_BLOCK_END_MAGIC;
*((long *)(((char *) p) + sizeof(zend_mem_header)+SIZE+PLATFORM_PADDING+END_ALIGNMENT(SIZE))) = MEM_BLOCK_END_MAGIC;
#endif
#if MEMORY_LIMIT
CHECK_MEMORY_LIMIT(size - p->size);
CHECK_MEMORY_LIMIT(size - p->size, SIZE - REAL_SIZE(p->size));
#endif
p->size = size;
@@ -332,13 +367,8 @@ ZEND_API void start_memory_manager(ALS_D)
AG(memory_exhausted)=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
memset(AG(fast_cache_list_head), 0, sizeof(AG(fast_cache_list_head)));
memset(AG(cache_count),0,MAX_CACHED_MEMORY*sizeof(unsigned char));
memset(AG(cache_count),0,sizeof(AG(cache_count)));
#ifndef ZTS
/* Initialize cache, to prevent fragmentation */
@@ -346,30 +376,34 @@ ZEND_API void start_memory_manager(ALS_D)
* will yield an endless recursion calling to alloc_globals_ctor()
*/
for (i=1; i<MAX_CACHED_MEMORY; i++) {
for (j=0; j<MAX_CACHED_ENTRIES; j++) {
cached_entries[i][j] = emalloc(i);
for (j=0; j<PRE_INIT_CACHE_ENTRIES; j++) {
cached_entries[i][j] = emalloc(8*i);
}
}
for (i=1; i<MAX_CACHED_MEMORY; i++) {
for (j=0; j<MAX_CACHED_ENTRIES; j++) {
for (j=0; j<PRE_INIT_CACHE_ENTRIES; j++) {
efree(cached_entries[i][j]);
}
}
#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)
{
zend_mem_header *p, *t;
int fci;
unsigned int fci, i, j;
#if ZEND_DEBUG
int had_leaks=0;
#endif
zend_fast_cache_list_entry *fast_cache_list_entry, *next_fast_cache_list_entry;
ALS_FETCH();
for (fci=0; fci<MAX_FAST_CACHE_TYPES; fci++) {
fast_cache_list_entry = AG(fast_cache_list_head)[fci];
while (fast_cache_list_entry) {
@@ -407,6 +441,9 @@ ZEND_API void shutdown_memory_manager(int silent, int clean_cache)
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);
@@ -417,6 +454,17 @@ ZEND_API void shutdown_memory_manager(int silent, int clean_cache)
}
}
if(clean_cache) {
for (i=1; i<MAX_CACHED_MEMORY; i++) {
for (j=0; j<AG(cache_count)[i]; j++) {
free(AG(cache)[i][j]);
}
}
}
#if MEMORY_LIMIT
AG(memory_exhausted)=0;
#endif
#if (ZEND_DEBUG)
do {
zval display_memory_cache_stats;
@@ -472,7 +520,7 @@ void zend_debug_alloc_output(char *format, ...)
#ifdef ZEND_WIN32
OutputDebugString(output_buf);
#else
fprintf(stderr, output_buf);
fprintf(stderr, "%s", output_buf);
#endif
}
@@ -541,7 +589,7 @@ ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC ZEND_FILE_
if (valid_beginning
&& *((long *)(((char *) p)+sizeof(zend_mem_header)+p->size+PLATFORM_PADDING+END_ALIGNMENT(p->size))) != MEM_BLOCK_END_MAGIC) {
&& *((long *)(((char *) p)+sizeof(zend_mem_header)+REAL_SIZE(p->size)+PLATFORM_PADDING+END_ALIGNMENT(REAL_SIZE(p->size)))) != MEM_BLOCK_END_MAGIC) {
long magic_num = MEM_BLOCK_END_MAGIC;
char *overflow_ptr, *magic_ptr=(char *) &magic_num;
int overflows=0;
@@ -551,7 +599,7 @@ ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC ZEND_FILE_
return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
}
had_problems=1;
overflow_ptr = ((char *) p)+sizeof(zend_mem_header)+p->size+PLATFORM_PADDING;
overflow_ptr = ((char *) p)+sizeof(zend_mem_header)+REAL_SIZE(p->size)+PLATFORM_PADDING;
for (i=0; i<sizeof(long); i++) {
if (overflow_ptr[i]!=magic_ptr[i]) {
@@ -561,7 +609,7 @@ ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC ZEND_FILE_
zend_debug_alloc_output("%10s\t", "End:");
zend_debug_alloc_output("Overflown (magic=0x%0.8lX instead of 0x%0.8lX)\n",
*((long *)(((char *) p) + sizeof(zend_mem_header)+p->size+PLATFORM_PADDING+END_ALIGNMENT(p->size))), MEM_BLOCK_END_MAGIC);
*((long *)(((char *) p) + sizeof(zend_mem_header)+REAL_SIZE(p->size)+PLATFORM_PADDING+END_ALIGNMENT(REAL_SIZE(p->size)))), 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));
@@ -633,7 +681,7 @@ ZEND_API int _persist_alloc(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
/* add the block to the persistent list */
ADD_POINTER_TO_LIST(p);
HANDLE_UNBLOCK_INTERRUPTIONS();
return p->size+sizeof(zend_mem_header)+PLATFORM_PADDING;
return REAL_SIZE(p->size)+sizeof(zend_mem_header)+PLATFORM_PADDING;
}
+7 -5
View File
@@ -18,15 +18,15 @@
*/
#ifndef _ALLOC_H
#define _ALLOC_H
#ifndef ZEND_ALLOC_H
#define ZEND_ALLOC_H
#include <stdio.h>
#include "zend_globals_macros.h"
#define MEM_BLOCK_START_MAGIC 0x7312F8DCL
#define MEM_BLOCK_END_MAGIC 0x2A8FCC84L
#define MEM_BLOCK_END_MAGIC 0x2A8FCC84L
#define MEM_BLOCK_FREED_MAGIC 0x99954317L
#define MEM_BLOCK_CACHED_MAGIC 0xFB8277DCL
@@ -52,8 +52,10 @@ typedef union _align_test {
long lng;
} align_test;
#define MAX_CACHED_MEMORY 64
#define MAX_CACHED_ENTRIES 16
#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
+211 -57
View File
@@ -33,6 +33,7 @@ static ZEND_FUNCTION(strlen);
static ZEND_FUNCTION(strcmp);
static ZEND_FUNCTION(strncmp);
static ZEND_FUNCTION(strcasecmp);
static ZEND_FUNCTION(strncasecmp);
static ZEND_FUNCTION(each);
static ZEND_FUNCTION(error_reporting);
static ZEND_FUNCTION(define);
@@ -46,15 +47,20 @@ static ZEND_FUNCTION(leak);
#ifdef ZEND_TEST_EXCEPTIONS
static ZEND_FUNCTION(crash);
#endif
static ZEND_FUNCTION(get_required_files);
static ZEND_FUNCTION(get_included_files);
static ZEND_FUNCTION(is_subclass_of);
static ZEND_FUNCTION(get_class_vars);
static ZEND_FUNCTION(get_object_vars);
static ZEND_FUNCTION(get_class_methods);
static ZEND_FUNCTION(user_error);
static ZEND_FUNCTION(set_user_error_handler);
static ZEND_FUNCTION(trigger_error);
static ZEND_FUNCTION(set_error_handler);
static ZEND_FUNCTION(restore_error_handler);
static ZEND_FUNCTION(get_declared_classes);
static ZEND_FUNCTION(create_function);
static ZEND_FUNCTION(get_resource_type);
#if ZEND_DEBUG
static ZEND_FUNCTION(zend_test_func);
#endif
unsigned char first_arg_force_ref[] = { 1, BYREF_FORCE };
unsigned char first_arg_allow_ref[] = { 1, BYREF_ALLOW };
@@ -70,6 +76,7 @@ static zend_function_entry builtin_functions[] = {
ZEND_FE(strcmp, NULL)
ZEND_FE(strncmp, NULL)
ZEND_FE(strcasecmp, NULL)
ZEND_FE(strncasecmp, NULL)
ZEND_FE(each, first_arg_force_ref)
ZEND_FE(error_reporting, NULL)
ZEND_FE(define, NULL)
@@ -83,22 +90,29 @@ static zend_function_entry builtin_functions[] = {
#ifdef ZEND_TEST_EXCEPTIONS
ZEND_FE(crash, NULL)
#endif
ZEND_FE(get_required_files, NULL)
ZEND_FE(get_included_files, NULL)
ZEND_FALIAS(get_required_files, get_included_files, NULL)
ZEND_FE(is_subclass_of, NULL)
ZEND_FE(get_class_vars, NULL)
ZEND_FE(get_object_vars, NULL)
ZEND_FE(get_class_methods, NULL)
ZEND_FE(user_error, NULL)
ZEND_FE(set_user_error_handler, NULL)
ZEND_FE(trigger_error, NULL)
ZEND_FALIAS(user_error, trigger_error, NULL)
ZEND_FE(set_error_handler, NULL)
ZEND_FE(restore_error_handler, NULL)
ZEND_FE(get_declared_classes, NULL)
ZEND_FE(create_function, NULL)
ZEND_FE(get_resource_type, NULL)
#if ZEND_DEBUG
ZEND_FE(zend_test_func, NULL)
#endif
{ NULL, NULL, NULL }
};
int zend_startup_builtin_functions()
{
return zend_register_functions(builtin_functions, NULL);
return zend_register_functions(builtin_functions, NULL, MODULE_PERSISTENT);
}
@@ -208,7 +222,7 @@ ZEND_FUNCTION(strlen)
zval **str;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) == FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(str);
RETVAL_LONG((*str)->value.str.len);
@@ -222,7 +236,7 @@ ZEND_FUNCTION(strcmp)
zval **s1, **s2;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &s1, &s2) == FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(s1);
convert_to_string_ex(s2);
@@ -237,7 +251,7 @@ ZEND_FUNCTION(strncmp)
zval **s1, **s2, **s3;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &s1, &s2, &s3) == FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(s1);
convert_to_string_ex(s2);
@@ -253,7 +267,7 @@ ZEND_FUNCTION(strcasecmp)
zval **s1, **s2;
if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &s1, &s2) == FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(s1);
convert_to_string_ex(s2);
@@ -261,6 +275,22 @@ ZEND_FUNCTION(strcasecmp)
}
/* }}} */
/* {{{ proto int strncasecmp(string str1, string str2, int len)
Binary safe string comparison */
ZEND_FUNCTION(strncasecmp)
{
zval **s1, **s2, **s3;
if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &s1, &s2, &s3) == FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(s1);
convert_to_string_ex(s2);
convert_to_long_ex(s3);
RETURN_LONG(zend_binary_zval_strncasecmp(*s1,*s2,*s3));
}
/* }}} */
ZEND_FUNCTION(each)
{
zval **array,*entry,**entry_ptr, *tmp;
@@ -270,7 +300,7 @@ ZEND_FUNCTION(each)
HashTable *target_hash;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &array) == FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
target_hash = HASH_OF(*array);
if (!target_hash) {
@@ -328,10 +358,10 @@ ZEND_FUNCTION(error_reporting)
EG(error_reporting)=(*arg)->value.lval;
break;
default:
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
break;
}
RETVAL_LONG(old_error_reporting);
}
@@ -360,9 +390,10 @@ ZEND_FUNCTION(define)
}
break;
default:
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
break;
}
switch((*val)->type) {
case IS_LONG:
case IS_DOUBLE:
@@ -383,8 +414,11 @@ ZEND_FUNCTION(define)
c.flags = case_sensitive; /* non persistent */
c.name = zend_strndup((*var)->value.str.val, (*var)->value.str.len);
c.name_len = (*var)->value.str.len+1;
zend_register_constant(&c ELS_CC);
RETURN_TRUE;
if(zend_register_constant(&c ELS_CC) == SUCCESS) {
RETURN_TRUE;
} else {
RETURN_FALSE;
}
}
@@ -394,7 +428,7 @@ ZEND_FUNCTION(defined)
zval c;
if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &var)==FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(var);
@@ -413,7 +447,7 @@ ZEND_FUNCTION(get_class)
zval **arg;
if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &arg)==FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
if ((*arg)->type != IS_OBJECT) {
RETURN_FALSE;
@@ -429,7 +463,7 @@ ZEND_FUNCTION(get_parent_class)
zval **arg;
if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &arg)==FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
if (((*arg)->type != IS_OBJECT) || !(*arg)->value.obj.ce->parent) {
RETURN_FALSE;
@@ -447,7 +481,7 @@ ZEND_FUNCTION(is_subclass_of)
zend_class_entry *parent_ce = NULL;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &obj, &class_name)==FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
if ((*obj)->type != IS_OBJECT) {
@@ -480,7 +514,7 @@ ZEND_FUNCTION(get_class_vars)
CLS_FETCH();
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &class_name)==FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(class_name);
@@ -506,7 +540,7 @@ ZEND_FUNCTION(get_object_vars)
zval *tmp;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &obj) == FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
if ((*obj)->type != IS_OBJECT) {
@@ -533,7 +567,7 @@ ZEND_FUNCTION(get_class_methods)
CLS_FETCH();
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &class_name)==FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(class_name);
@@ -550,7 +584,7 @@ ZEND_FUNCTION(get_class_methods)
while ((key_type = zend_hash_get_current_key(&ce->function_table, &string_key, &num_key)) != HASH_KEY_NON_EXISTANT) {
if (key_type == HASH_KEY_IS_STRING) {
MAKE_STD_ZVAL(method_name);
ZVAL_STRING(method_name, string_key, 0);
ZVAL_STRING(method_name, string_key, 1);
zend_hash_next_index_insert(return_value->value.ht, &method_name, sizeof(zval *), NULL);
}
zend_hash_move_forward(&ce->function_table);
@@ -567,7 +601,7 @@ ZEND_FUNCTION(method_exists)
char *lcname;
if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &klass, &method_name)==FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
if ((*klass)->type != IS_OBJECT) {
RETURN_FALSE;
@@ -594,7 +628,7 @@ ZEND_FUNCTION(class_exists)
CLS_FETCH();
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &class_name)==FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(class_name);
lcname = estrndup((*class_name)->value.str.val, (*class_name)->value.str.len);
@@ -618,7 +652,7 @@ ZEND_FUNCTION(function_exists)
int retval;
if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &function_name)==FAILURE) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(function_name);
lcname = estrndup((*function_name)->value.str.val, (*function_name)->value.str.len);
@@ -678,39 +712,30 @@ static int copy_import_use_file(zend_file_handle *fh, zval *array)
}
/* {{{ proto array get_required_files(void)
Returns an array with the file names that were require_once()'d */
ZEND_FUNCTION(get_required_files)
{
CLS_FETCH();
if (ZEND_NUM_ARGS() != 0) {
WRONG_PARAM_COUNT;
}
array_init(return_value);
zend_hash_apply_with_argument(&CG(used_files), (apply_func_arg_t) copy_import_use_file, return_value);
}
/* }}} */
/* {{{ proto array get_included_files(void)
Returns an array with the file names that were include_once()'d */
ZEND_FUNCTION(get_included_files)
{
char *entry;
if (ZEND_NUM_ARGS() != 0) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
array_init(return_value);
zend_hash_apply_with_argument(&EG(included_files), (apply_func_arg_t) copy_import_use_file, return_value);
zend_hash_internal_pointer_reset(&EG(included_files));
while(zend_hash_get_current_key(&EG(included_files), &entry,NULL) == HASH_KEY_IS_STRING) {
add_next_index_string(return_value,entry,0);
zend_hash_move_forward(&EG(included_files));
}
/* zend_hash_apply_with_argument(&EG(included_files), (apply_func_arg_t) copy_import_use_file, return_value); */
}
/* }}} */
/* {{{ proto void user_error(string messsage [, int error_type])
/* {{{ proto void trigger_error(string messsage [, int error_type])
Generates a user-level error/warning/notice message */
ZEND_FUNCTION(user_error)
ZEND_FUNCTION(trigger_error)
{
int error_type = E_USER_NOTICE;
zval **z_error_type, **z_error_message;
@@ -738,17 +763,22 @@ ZEND_FUNCTION(user_error)
break;
}
break;
default:
ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(z_error_message);
zend_error(error_type, (*z_error_message)->value.str.val);
zend_error(error_type, "%s", (*z_error_message)->value.str.val);
RETURN_TRUE;
}
/* }}} */
ZEND_FUNCTION(set_user_error_handler)
/* {{{ proto string set_error_handler(string error_handler)
Sets a user-defined error handler function. Returns the previously defined error handler, or false on error */
ZEND_FUNCTION(set_error_handler)
{
zval **error_handler;
zend_bool had_orig_error_handler=0;
if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &error_handler)==FAILURE) {
ZEND_WRONG_PARAM_COUNT();
@@ -756,20 +786,53 @@ ZEND_FUNCTION(set_user_error_handler)
convert_to_string_ex(error_handler);
if (EG(user_error_handler)) {
zval_dtor(EG(user_error_handler));
} else {
ALLOC_ZVAL(EG(user_error_handler));
had_orig_error_handler = 1;
*return_value = *EG(user_error_handler);
zval_copy_ctor(return_value);
zend_ptr_stack_push(&EG(user_error_handlers), EG(user_error_handler));
}
ALLOC_ZVAL(EG(user_error_handler));
if (Z_STRLEN_PP(error_handler)==0) { /* unset user-defined handler */
FREE_ZVAL(EG(user_error_handler));
EG(user_error_handler) = NULL;
RETURN_TRUE;
}
*EG(user_error_handler) = **error_handler;
zval_copy_ctor(EG(user_error_handler));
if (!had_orig_error_handler) {
RETURN_NULL();
}
}
/* }}} */
/* {{{ proto void restore_error_handler(void)
Restores the previously defined error handler function */
ZEND_FUNCTION(restore_error_handler)
{
if (EG(user_error_handler)) {
zval_ptr_dtor(&EG(user_error_handler));
}
if (zend_ptr_stack_num_elements(&EG(user_error_handlers))==0) {
EG(user_error_handler) = NULL;
} else {
EG(user_error_handler) = zend_ptr_stack_pop(&EG(user_error_handlers));
}
RETURN_TRUE;
}
static int copy_class_name(zend_class_entry *ce, zval *array)
static int copy_class_name(zend_class_entry *ce, int num_args, va_list args, zend_hash_key *hash_key)
{
add_next_index_stringl(array, ce->name, ce->name_length, 1);
zval *array = va_arg(args, zval *);
if (hash_key->nKeyLength==0 || hash_key->arKey[0]!=0) {
add_next_index_stringl(array, ce->name, ce->name_length, 1);
}
return 0;
}
@@ -780,10 +843,101 @@ ZEND_FUNCTION(get_declared_classes)
CLS_FETCH();
if (ZEND_NUM_ARGS() != 0) {
WRONG_PARAM_COUNT;
ZEND_WRONG_PARAM_COUNT();
}
array_init(return_value);
zend_hash_apply_with_argument(CG(class_table), (apply_func_arg_t)copy_class_name, return_value);
zend_hash_apply_with_arguments(CG(class_table), (apply_func_args_t)copy_class_name, 1, return_value);
}
/* }}} */
#define LAMBDA_TEMP_FUNCNAME "__lambda_func"
/* {{{ proto string create_function(string args, string code)
Creates an anonymous function, and returns its name (funny, eh?) */
ZEND_FUNCTION(create_function)
{
char *eval_code, *function_name;
int eval_code_length, function_name_length;
zval **z_function_args, **z_function_code;
int retval;
char *eval_name;
CLS_FETCH();
if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &z_function_args, &z_function_code)==FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
convert_to_string_ex(z_function_args);
convert_to_string_ex(z_function_code);
eval_code_length = sizeof("function " LAMBDA_TEMP_FUNCNAME)
+Z_STRLEN_PP(z_function_args)
+2 /* for the args parentheses */
+2 /* for the curly braces */
+Z_STRLEN_PP(z_function_code);
eval_code = (char *) emalloc(eval_code_length);
sprintf(eval_code, "function " LAMBDA_TEMP_FUNCNAME "(%s){%s}", Z_STRVAL_PP(z_function_args), Z_STRVAL_PP(z_function_code));
eval_name = zend_make_compiled_string_description("runtime-created function");
retval = zend_eval_string(eval_code, NULL, eval_name CLS_CC ELS_CC);
efree(eval_code);
efree(eval_name);
if (retval==SUCCESS) {
zend_function *func;
if (zend_hash_find(EG(function_table), LAMBDA_TEMP_FUNCNAME, sizeof(LAMBDA_TEMP_FUNCNAME), (void **) &func)==FAILURE) {
zend_error(E_ERROR, "Unexpected inconsistency in create_function()");
RETURN_FALSE;
}
function_add_ref(func);
function_name = (char *) emalloc(sizeof("0lambda_")+MAX_LENGTH_OF_LONG);
do {
sprintf(function_name, "%clambda_%d", 0, ++EG(lambda_count));
function_name_length = strlen(function_name+1)+1;
} while (zend_hash_add(EG(function_table), function_name, function_name_length+1, func, sizeof(zend_function), NULL)==FAILURE);
zend_hash_del(EG(function_table), LAMBDA_TEMP_FUNCNAME, sizeof(LAMBDA_TEMP_FUNCNAME));
RETURN_STRINGL(function_name, function_name_length, 0);
} else {
RETURN_FALSE;
}
}
/* }}} */
#if ZEND_DEBUG
ZEND_FUNCTION(zend_test_func)
{
zval *arg1, *arg2;
zend_get_parameters(ht, 2, &arg1, &arg2);
}
#endif
ZEND_FUNCTION(get_resource_type)
{
char *resource_type;
zval **z_resource_type;
if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &z_resource_type)==FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
if (Z_TYPE_PP(z_resource_type) != IS_RESOURCE) {
zend_error(E_WARNING, "Supplied argument is not a valid resource handle");
RETURN_FALSE;
}
resource_type = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(z_resource_type));
if (resource_type) {
RETURN_STRING(resource_type, 1);
} else {
RETURN_STRING("Unknown", 1);
}
}
+3 -3
View File
@@ -18,9 +18,9 @@
*/
#ifndef _ZEND_BUILTIN_FUNCTIONS_H
#define _ZEND_BUILTIN_FUNCTIONS_H
#ifndef ZEND_BUILTIN_FUNCTIONS_H
#define ZEND_BUILTIN_FUNCTIONS_H
int zend_startup_builtin_functions(void);
#endif /* _ZEND_BUILTIN_FUNCTIONS_H */
#endif /* ZEND_BUILTIN_FUNCTIONS_H */
+139 -100
View File
@@ -26,7 +26,7 @@
#include "zend_fast_cache.h"
ZEND_API zend_op_array *(*zend_v_compile_files)(int type CLS_DC, int file_count, va_list files);
ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type CLS_DC);
#ifndef ZTS
@@ -37,33 +37,21 @@ ZEND_API zend_executor_globals executor_globals;
#define SET_UNUSED(op) (op).op_type = IS_UNUSED
static int is_not_internal_function(zend_function *function)
{
return(function->type != ZEND_INTERNAL_FUNCTION);
}
static int is_not_internal_class(zend_class_entry *ce)
{
return(ce->type != ZEND_INTERNAL_CLASS);
}
static void free_filename(void *p)
{
efree(*((char **) p));
}
static void build_runtime_defined_function_key(zval *result, zval *name, zend_op *opline)
static void build_runtime_defined_function_key(zval *result, zval *name, zend_op *opline CLS_DC)
{
char lineno_buf[32];
uint lineno_len;
char *filename;
lineno_len = zend_sprintf(lineno_buf, "%d", opline->lineno);
if (opline->filename) {
filename = opline->filename;
if (CG(active_op_array)->filename) {
filename = CG(active_op_array)->filename;
} else {
filename = "-";
}
@@ -77,12 +65,6 @@ static void build_runtime_defined_function_key(zval *result, zval *name, zend_op
}
static void zend_open_file_dtor_wrapper(zend_file_handle *fh)
{
zend_open_file_dtor(fh);
}
static void init_compiler_declarables(CLS_D ELS_DC)
{
CG(declarables).ticks.type = IS_LONG;
@@ -101,16 +83,12 @@ void init_compiler(CLS_D ELS_DC)
CG(active_class_entry) = NULL;
zend_llist_init(&CG(list_llist), sizeof(list_llist_element), NULL, 0);
zend_llist_init(&CG(dimension_llist), sizeof(int), NULL, 0);
zend_llist_init(&CG(filenames_list), sizeof(char *), free_filename, 0);
CG(short_tags) = ZEND_UV(short_tags);
CG(asp_tags) = ZEND_UV(asp_tags);
CG(allow_call_time_pass_reference) = ZEND_UV(allow_call_time_pass_reference);
zend_hash_init(&CG(filenames_table), 5, NULL, (dtor_func_t) free_filename, 0);
CG(handle_op_arrays) = 1;
CG(in_compilation) = 0;
zend_init_rsrc_list(ELS_C);
CG(unclean_shutdown) = 0;
zend_llist_init(&CG(open_files), sizeof(zend_file_handle), (void (*)(void *)) zend_open_file_dtor, 0);
zend_hash_init(&CG(used_files), 5, NULL, (void (*)(void *)) zend_open_file_dtor_wrapper, 0);
zend_llist_init(&CG(open_files), sizeof(zend_file_handle), (void (*)(void *)) zend_file_handle_dtor, 0);
init_compiler_declarables(CLS_C ELS_CC);
}
@@ -123,20 +101,23 @@ void shutdown_compiler(CLS_D)
zend_stack_destroy(&CG(foreach_copy_stack));
zend_stack_destroy(&CG(object_stack));
zend_stack_destroy(&CG(declare_stack));
zend_llist_destroy(&CG(filenames_list));
zend_hash_apply(CG(function_table), (int (*)(void *)) is_not_internal_function);
zend_hash_apply(CG(class_table), (int (*)(void *)) is_not_internal_class);
zend_hash_destroy(&CG(filenames_table));
zend_llist_destroy(&CG(open_files));
zend_hash_destroy(&CG(used_files));
}
ZEND_API char *zend_set_compiled_filename(char *new_compiled_filename)
{
char *p = estrdup(new_compiled_filename);
char **pp, *p;
int length = strlen(new_compiled_filename);
CLS_FETCH();
zend_llist_add_element(&CG(filenames_list), &p);
if (zend_hash_find(&CG(filenames_table), new_compiled_filename, length+1, (void **) &pp)==SUCCESS) {
CG(compiled_filename) = *pp;
return *pp;
}
p = estrndup(new_compiled_filename, length);
zend_hash_update(&CG(filenames_table), new_compiled_filename, length+1, &p, sizeof(char *), (void **) &pp);
CG(compiled_filename) = p;
return p;
}
@@ -345,7 +326,8 @@ void do_assign_ref(znode *result, znode *lvar, znode *rvar CLS_DC)
opline->result.u.var = get_temporary_variable(CG(active_op_array));
*result = opline->result;
} else {
SET_UNUSED(opline->result);
/* SET_UNUSED(opline->result); */
opline->result.u.EA.type |= EXT_TYPE_UNUSED;
}
opline->op1 = *lvar;
opline->op2 = *rvar;
@@ -533,8 +515,6 @@ void do_begin_variable_parse(CLS_D)
{
zend_llist fetch_list;
/* zend_llist_init(&fetch_list, sizeof(int), NULL, 0);
zend_stack_push(&CG(bp_stack), (void *) &fetch_list, sizeof(zend_llist));*/
zend_llist_init(&fetch_list, sizeof(zend_op), NULL, 0);
zend_stack_push(&CG(bp_stack), (void *) &fetch_list, sizeof(zend_llist));
}
@@ -584,6 +564,27 @@ void do_end_variable_parse(int type, int arg_offset CLS_DC)
}
static zend_bool is_method_call(CLS_D)
{
zend_llist *fetch_list_ptr;
zend_llist_element *cur;
zend_op *cur_opline;
zend_stack_top(&CG(bp_stack), (void **) &fetch_list_ptr);
cur = fetch_list_ptr->head;
/* There is always at least one node in the list */
while (cur->next) {
cur = cur->next;
}
cur_opline = (zend_op *)cur->data;
if (cur_opline->opcode == ZEND_FETCH_OBJ_W) {
return 1;
}
return 0;
}
void do_init_string(znode *result CLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
@@ -715,7 +716,7 @@ void do_begin_function_declaration(znode *function_token, znode *function_name,
function_token->u.op_array = CG(active_op_array);
zend_str_tolower(name, name_len);
init_op_array(&op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE);
init_op_array(&op_array, ZEND_USER_FUNCTION, INITIAL_OP_ARRAY_SIZE CLS_CC);
op_array.function_name = name;
op_array.arg_types = NULL;
@@ -728,7 +729,7 @@ void do_begin_function_declaration(znode *function_token, znode *function_name,
opline->opcode = ZEND_DECLARE_FUNCTION_OR_CLASS;
opline->op1.op_type = IS_CONST;
build_runtime_defined_function_key(&opline->op1.u.constant, &function_name->u.constant, opline);
build_runtime_defined_function_key(&opline->op1.u.constant, &function_name->u.constant, opline CLS_CC);
opline->op2.op_type = IS_CONST;
opline->op2.u.constant.type = IS_STRING;
opline->op2.u.constant.value.str.val = estrndup(name, name_len);
@@ -764,6 +765,7 @@ void do_begin_function_declaration(znode *function_token, znode *function_name,
void do_end_function_declaration(znode *function_token CLS_DC)
{
do_extended_info(CLS_C);
do_return(NULL, 0 CLS_CC);
pass_two(CG(active_op_array));
CG(active_op_array) = function_token->u.op_array;
@@ -832,6 +834,7 @@ int do_begin_function_call(znode *function_name CLS_DC)
}
break;
}
do_extended_fcall_begin(CLS_C);
return 0;
}
@@ -839,20 +842,30 @@ int do_begin_function_call(znode *function_name CLS_DC)
void do_begin_dynamic_function_call(znode *function_name CLS_DC)
{
unsigned char *ptr = NULL;
int last_op_number = get_next_op_number(CG(active_op_array))-1;
int last_op_number;
zend_op *last_op;
if (last_op_number>=0 && CG(active_op_array)->opcodes[last_op_number].opcode == ZEND_FETCH_OBJ_R) {
CG(active_op_array)->opcodes[last_op_number].opcode = ZEND_INIT_FCALL_BY_NAME;
CG(active_op_array)->opcodes[last_op_number].extended_value = ZEND_MEMBER_FUNC_CALL;
if (function_name->op_type != IS_CONST && is_method_call(CLS_C)) {
do_end_variable_parse(BP_VAR_W, 0 CLS_CC);
last_op_number = get_next_op_number(CG(active_op_array))-1;
last_op = &CG(active_op_array)->opcodes[last_op_number];
last_op->opcode = ZEND_INIT_FCALL_BY_NAME;
last_op->extended_value = ZEND_MEMBER_FUNC_CALL;
} else {
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
zend_op *opline;
if (function_name->op_type != IS_CONST) {
do_end_variable_parse(BP_VAR_R, 0 CLS_CC);
}
opline = get_next_op(CG(active_op_array) CLS_CC);
opline->opcode = ZEND_INIT_FCALL_BY_NAME;
opline->op2 = *function_name;
opline->extended_value = 0;
SET_UNUSED(opline->op1);
}
zend_stack_push(&CG(function_call_stack), (void *) &ptr, sizeof(zend_function *));
do_extended_fcall_begin(CLS_C);
}
@@ -863,6 +876,15 @@ void do_begin_class_member_function_call(znode *class_name, znode *function_name
opline->opcode = ZEND_INIT_FCALL_BY_NAME;
zend_str_tolower(class_name->u.constant.value.str.val, class_name->u.constant.value.str.len);
if ((class_name->u.constant.value.str.len == sizeof("parent")-1)
&& !memcmp(class_name->u.constant.value.str.val, "parent", sizeof("parent")-1)) {
if (!CG(active_class_entry) || !CG(active_class_entry)->parent) {
zend_error(E_COMPILE_ERROR, "No parent class available in this context");
}
efree(class_name->u.constant.value.str.val);
class_name->u.constant.value.str.len = CG(active_class_entry)->parent->name_length;
class_name->u.constant.value.str.val = estrndup(CG(active_class_entry)->parent->name, class_name->u.constant.value.str.len);
}
opline->op1 = *class_name;
opline->op2 = *function_name;
opline->extended_value = ZEND_MEMBER_FUNC_CALL;
@@ -1040,7 +1062,7 @@ void do_return(znode *expr, int do_end_vparse CLS_DC)
}
static void function_add_ref(zend_function *function)
ZEND_API void function_add_ref(zend_function *function)
{
if (function->type == ZEND_USER_FUNCTION) {
zend_op_array *op_array = &function->op_array;
@@ -1072,6 +1094,18 @@ static void do_inherit_parent_constructor(zend_class_entry *ce)
}
}
void do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce)
{
zend_function tmp_zend_function;
zval *tmp;
/* Perform inheritance */
zend_hash_merge(&ce->default_properties, &parent_ce->default_properties, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0);
zend_hash_merge(&ce->function_table, &parent_ce->function_table, (void (*)(void *)) function_add_ref, &tmp_zend_function, sizeof(zend_function), 0);
ce->parent = parent_ce;
do_inherit_parent_constructor(ce);
}
ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_table, HashTable *class_table, int compile_time)
{
@@ -1095,7 +1129,10 @@ ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_tabl
case ZEND_DECLARE_CLASS: {
zend_class_entry *ce;
zend_hash_find(class_table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, (void **) &ce);
if (zend_hash_find(class_table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, (void **) &ce)==FAILURE) {
zend_error(E_ERROR, "Internal Zend error - Missing class information for %s", opline->op1.u.constant.value.str.val);
return FAILURE;
}
(*ce->refcount)++;
if (zend_hash_add(class_table, opline->op2.u.constant.value.str.val, opline->op2.u.constant.value.str.len+1, ce, sizeof(zend_class_entry), NULL)==FAILURE) {
(*ce->refcount)--;
@@ -1110,37 +1147,41 @@ ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_tabl
break;
case ZEND_DECLARE_INHERITED_CLASS: {
zend_class_entry *ce, *parent_ce;
int parent_name_length;
char *class_name, *parent_name;
zend_function tmp_zend_function;
zval *tmp;
int found_ce;
zend_hash_find(class_table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, (void **) &ce);
(*ce->refcount)++;
found_ce = zend_hash_find(class_table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, (void **) &ce);
/* Restore base class / derived class names */
parent_name = opline->op2.u.constant.value.str.val;
class_name = strchr(opline->op2.u.constant.value.str.val, ':');
if (!class_name) {
zend_error(E_CORE_ERROR, "Invalid runtime class entry");
}
*class_name++ = 0;
class_name++;
if (found_ce==FAILURE) {
zend_error(E_ERROR, "Cannot redeclare class %s", class_name);
return FAILURE;
}
(*ce->refcount)++;
/* Obtain parent class */
if (zend_hash_find(class_table, parent_name, strlen(parent_name)+1, (void **) &parent_ce)==FAILURE) {
parent_name_length = class_name - opline->op2.u.constant.value.str.val - 1;
parent_name = estrndup(opline->op2.u.constant.value.str.val, parent_name_length);
if (zend_hash_find(class_table, parent_name, parent_name_length+1, (void **) &parent_ce)==FAILURE) {
if (!compile_time) {
zend_error(E_ERROR, "Class %s: Cannot inherit from undefined class %s", class_name, parent_name);
}
(*ce->refcount)--;
*(class_name-1) = ':';
efree(parent_name);
return FAILURE;
}
efree(parent_name);
/* Perform inheritance */
zend_hash_merge(&ce->default_properties, &parent_ce->default_properties, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0);
zend_hash_merge(&ce->function_table, &parent_ce->function_table, (void (*)(void *)) function_add_ref, &tmp_zend_function, sizeof(zend_function), 0);
ce->parent = parent_ce;
do_inherit_parent_constructor(ce);
do_inheritance(ce, parent_ce);
/* Register the derived class */
if (zend_hash_add(class_table, class_name, strlen(class_name)+1, ce, sizeof(zend_class_entry), NULL)==FAILURE) {
@@ -1150,10 +1191,8 @@ ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_tabl
(*ce->refcount)--;
zend_hash_destroy(&ce->function_table);
zend_hash_destroy(&ce->default_properties);
*(class_name-1) = ':';
return FAILURE;
}
*(class_name-1) = ':';
return SUCCESS;
}
break;
@@ -1305,10 +1344,22 @@ void do_brk_cont(int op, znode *expr CLS_DC)
void do_switch_cond(znode *cond CLS_DC)
{
zend_switch_entry switch_entry;
zend_op *opline;
/* Initialize the conditional value */
opline = get_next_op(CG(active_op_array) CLS_CC);
opline->opcode = ZEND_BOOL;
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->result.op_type = IS_TMP_VAR;
opline->op1.op_type = IS_CONST;
opline->op1.u.constant.type = IS_BOOL;
opline->op1.u.constant.value.lval = 0;
INIT_PZVAL(&opline->op1.u.constant);
SET_UNUSED(opline->op2);
switch_entry.cond = *cond;
switch_entry.default_case = -1;
switch_entry.control_var = -1;
switch_entry.control_var = opline->result.u.var;
zend_stack_push(&CG(switch_cond_stack), (void *) &switch_entry, sizeof(switch_entry));
do_begin_loop(CLS_C);
@@ -1373,9 +1424,6 @@ void do_case_before_statement(znode *case_list, znode *case_token, znode *case_e
zend_stack_top(&CG(switch_cond_stack), (void **) &switch_entry_ptr);
opline->opcode = ZEND_CASE;
if (switch_entry_ptr->control_var==-1) {
switch_entry_ptr->control_var = get_temporary_variable(CG(active_op_array));
}
opline->result.u.var = switch_entry_ptr->control_var;
opline->result.op_type = IS_TMP_VAR;
opline->op1 = switch_entry_ptr->cond;
@@ -1438,22 +1486,19 @@ void do_default_before_statement(znode *case_list, znode *default_token CLS_DC)
next_op_number = get_next_op_number(CG(active_op_array));
opline = get_next_op(CG(active_op_array) CLS_CC);
opline->opcode = ZEND_BOOL;
if (switch_entry_ptr->control_var==-1) {
switch_entry_ptr->control_var = get_temporary_variable(CG(active_op_array));
}
opline->result.u.var = switch_entry_ptr->control_var;
opline->result.op_type = IS_TMP_VAR;
opline->op1.op_type = IS_CONST;
opline->op1.u.constant.type = IS_LONG;
opline->op1.u.constant.type = IS_BOOL;
opline->op1.u.constant.value.lval = 1;
INIT_PZVAL(&opline->op1.u.constant);
SET_UNUSED(opline->op2);
switch_entry_ptr->default_case = next_op_number;
next_op_number = get_next_op_number(CG(active_op_array));
if (case_list->op_type==IS_UNUSED) {
return;
}
next_op_number = get_next_op_number(CG(active_op_array));
CG(active_op_array)->opcodes[case_list->u.opline_num].op1.u.opline_num = next_op_number;
}
@@ -1511,7 +1556,7 @@ void do_begin_class_declaration(znode *class_name, znode *parent_class_name CLS_
opline->opcode = ZEND_DECLARE_FUNCTION_OR_CLASS;
opline->op1.op_type = IS_CONST;
build_runtime_defined_function_key(&opline->op1.u.constant, &class_name->u.constant, opline);
build_runtime_defined_function_key(&opline->op1.u.constant, &class_name->u.constant, opline CLS_CC);
opline->op2.op_type = IS_CONST;
opline->op2.u.constant.type = IS_STRING;
opline->op2.u.constant.refcount = 1;
@@ -1602,7 +1647,7 @@ void do_begin_new_object(znode *new_token, znode *class_name CLS_DC)
unsigned char *ptr = NULL;
opline->opcode = ZEND_NEW;
opline->result.op_type = IS_TMP_VAR;
opline->result.op_type = IS_VAR;
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->op1 = *class_name;
SET_UNUSED(opline->op2);
@@ -1903,32 +1948,22 @@ void do_cast(znode *result, znode *expr, int type CLS_DC)
void do_include_or_eval(int type, znode *result, znode *op1 CLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
do_extended_fcall_begin(CLS_C);
{
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
opline->opcode = ZEND_INCLUDE_OR_EVAL;
opline->result.op_type = IS_VAR;
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->op1 = *op1;
SET_UNUSED(opline->op2);
opline->op2.u.constant.value.lval = type;
*result = opline->result;
if (type==ZEND_REQUIRE) {
opline->result.u.EA.type |= EXT_TYPE_UNUSED;
}
}
void do_require(znode *filename, zend_bool unique CLS_DC)
{
if (filename->op_type==IS_CONST
&& filename->u.constant.type==IS_STRING) {
require_filename(filename->u.constant.value.str.val, unique CLS_CC);
zval_dtor(&filename->u.constant);
} else {
znode result;
do_include_or_eval(ZEND_REQUIRE, &result, filename CLS_CC);
opline->opcode = ZEND_INCLUDE_OR_EVAL;
opline->result.op_type = IS_VAR;
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->op1 = *op1;
SET_UNUSED(opline->op2);
opline->op2.u.constant.value.lval = type;
*result = opline->result;
if (type==ZEND_REQUIRE) {
opline->result.u.EA.type |= EXT_TYPE_UNUSED;
}
}
do_extended_fcall_end(CLS_C);
}
@@ -1982,7 +2017,7 @@ void do_isset_or_isempty(int type, znode *result, znode *variable CLS_DC)
}
void do_foreach_begin(znode *foreach_token, znode *array, znode *open_brackets_token, znode *as_token CLS_DC)
void do_foreach_begin(znode *foreach_token, znode *array, znode *open_brackets_token, znode *as_token, int variable CLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
@@ -1992,6 +2027,11 @@ void do_foreach_begin(znode *foreach_token, znode *array, znode *open_brackets_t
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->op1 = *array;
SET_UNUSED(opline->op2);
if (variable) {
opline->extended_value = 1;
} else {
opline->extended_value = 0;
}
*open_brackets_token = opline->result;
zend_stack_push(&CG(foreach_copy_stack), (void *) &opline->result, sizeof(znode));
@@ -2290,7 +2330,6 @@ int zendlex(znode *zendlval CLS_DC)
case T_COMMENT:
case T_OPEN_TAG:
case T_WHITESPACE:
case T_PHP_TRACK_VARS:
retval = zendlex(zendlval CLS_CC);
break;
case T_CLOSE_TAG:
+24 -18
View File
@@ -18,8 +18,8 @@
*/
#ifndef _COMPILE_H
#define _COMPILE_H
#ifndef ZEND_COMPILE_H
#define ZEND_COMPILE_H
#include "zend.h"
@@ -27,6 +27,10 @@
# include <stdarg.h>
#endif
#ifdef __cplusplus
#include <istream.h>
#endif
#include "zend_llist.h"
#define DEBUG_ZEND 0
@@ -76,7 +80,6 @@ typedef struct _zend_op {
znode op1;
znode op2;
ulong extended_value;
char *filename;
uint lineno;
} zend_op;
@@ -117,6 +120,8 @@ struct _zend_op_array {
zend_bool return_reference;
zend_bool done_pass_two;
char *filename;
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};
@@ -191,7 +196,6 @@ typedef struct _zend_file_handle {
} zend_file_handle;
#include "zend_globals.h"
#define IS_CONST (1<<0)
#define IS_TMP_VAR (1<<1)
@@ -201,12 +205,14 @@ typedef struct _zend_file_handle {
#define EXT_TYPE_UNUSED (1<<0)
#include "zend_globals.h"
BEGIN_EXTERN_C()
void init_compiler(CLS_D ELS_DC);
void shutdown_compiler(CLS_D);
extern ZEND_API zend_op_array *(*zend_v_compile_files)(int type CLS_DC, int file_count, va_list files);
extern ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type CLS_DC);
void zend_activate(CLS_D ELS_DC);
void zend_deactivate(CLS_D ELS_DC);
@@ -286,6 +292,7 @@ void do_begin_class_member_function_call(znode *class_name, znode *function_name
void do_end_function_call(znode *function_name, znode *result, znode *argument_list, int is_method, int is_dynamic_fcall CLS_DC);
void do_return(znode *expr, int do_end_vparse CLS_DC);
ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_table, HashTable *class_table, int compile_time);
void do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce);
void do_early_binding(CLS_D);
void do_pass_param(znode *param, int op, int offset CLS_DC);
@@ -333,12 +340,11 @@ void do_new_list_end(CLS_D);
void do_cast(znode *result, znode *expr, int type CLS_DC);
void do_include_or_eval(int type, znode *result, znode *op1 CLS_DC);
void do_require(znode *filename, zend_bool unique CLS_DC);
void do_unset(znode *variable CLS_DC);
void do_isset_or_isempty(int type, znode *result, znode *variable CLS_DC);
void do_foreach_begin(znode *foreach_token, znode *array, znode *open_brackets_token, znode *as_token CLS_DC);
void do_foreach_begin(znode *foreach_token, znode *array, znode *open_brackets_token, znode *as_token, int variable CLS_DC);
void do_foreach_cont(znode *value, znode *key, znode *as_token CLS_DC);
void do_foreach_end(znode *foreach_token, znode *open_brackets_token CLS_DC);
@@ -363,22 +369,21 @@ void do_extended_fcall_end(CLS_D);
void do_ticks(CLS_D);
ZEND_API void function_add_ref(zend_function *function);
#define INITIAL_OP_ARRAY_SIZE 64
/* helper functions in zend-scanner.l */
ZEND_API int require_file(zend_file_handle *file_handle, zend_bool unique CLS_DC);
ZEND_API int require_filename(char *filename, zend_bool unique CLS_DC);
ZEND_API int use_filename(char *filename, uint filename_length CLS_DC);
ZEND_API zend_op_array *zend_compile_files(int type CLS_DC, int file_count, ...);
ZEND_API zend_op_array *v_compile_files(int type CLS_DC, int file_count, va_list files);
ZEND_API zend_op_array *compile_string(zval *source_string CLS_DC);
ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type CLS_DC);
ZEND_API zend_op_array *compile_string(zval *source_string, char *filename CLS_DC);
ZEND_API zend_op_array *compile_filename(int type, zval *filename CLS_DC ELS_DC);
ZEND_API int zend_execute_scripts(int type CLS_DC ELS_DC, int file_count, ...);
ZEND_API int open_file_for_scanning(zend_file_handle *file_handle CLS_DC);
ZEND_API void init_op_array(zend_op_array *op_array, int type, int initial_ops_size);
ZEND_API void init_op_array(zend_op_array *op_array, int type, int initial_ops_size CLS_DC);
ZEND_API void destroy_op_array(zend_op_array *op_array);
ZEND_API void zend_close_file_handle(zend_file_handle *file_handle CLS_DC);
ZEND_API void zend_open_file_dtor(zend_file_handle *fh);
ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle CLS_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 *ce);
@@ -393,9 +398,9 @@ int get_next_op_number(zend_op_array *op_array);
int print_class(zend_class_entry *class_entry);
void print_op_array(zend_op_array *op_array, int optimizations);
int pass_two(zend_op_array *op_array);
ZEND_API void pass_include_eval(zend_op_array *op_array);
zend_brk_cont_element *get_next_brk_cont_element(zend_op_array *op_array);
ZEND_API zend_bool zend_is_compiling(void);
ZEND_API char *zend_make_compiled_string_description(char *name);
int zendlex(znode *zendlval CLS_DC);
@@ -564,6 +569,7 @@ int zendlex(znode *zendlval CLS_DC);
#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)
@@ -620,4 +626,4 @@ int zendlex(znode *zendlval CLS_DC);
END_EXTERN_C()
#endif /* _COMPILE_H */
#endif /* ZEND_COMPILE_H */
+22 -7
View File
@@ -18,8 +18,8 @@
*/
#ifndef _ZEND_CONFIG_W32_H
#define _ZEND_CONFIG_W32_H
#ifndef ZEND_CONFIG_W32_H
#define ZEND_CONFIG_W32_H
#include <string.h>
@@ -42,23 +42,27 @@ typedef unsigned int uint;
#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
#ifdef inline
#undef inline
#endif
#define vsnprintf _vsnprintf
#define zend_isinf(a) 0
#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 finite(A) _finite(A)
#define zend_finite(A) _finite(A)
#define zend_isnan(A) _isnan(A)
#ifdef LIBZEND_EXPORTS
# define ZEND_API __declspec(dllexport)
@@ -68,4 +72,15 @@ typedef unsigned int uint;
#define ZEND_DLEXPORT __declspec(dllexport)
#endif /* _ZEND_CONFIG_W32_H */
/* 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 */
+11 -1
View File
@@ -134,6 +134,12 @@ void zend_register_standard_constants(ELS_D)
c.value.type = IS_BOOL;
zend_register_constant(&c ELS_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 ELS_CC);
c.name = zend_strndup(ZEND_STRL("NULL"));
c.name_len = sizeof("NULL");
c.value.type = IS_NULL;
@@ -233,9 +239,10 @@ ZEND_API int zend_get_constant(char *name, uint name_len, zval *result)
}
ZEND_API void zend_register_constant(zend_constant *c ELS_DC)
ZEND_API int zend_register_constant(zend_constant *c ELS_DC)
{
char *lowercase_name = zend_strndup(c->name, c->name_len);
int ret = SUCCESS;
#if 0
printf("Registering constant for module %d\n",c->module_number);
@@ -244,8 +251,11 @@ ZEND_API void zend_register_constant(zend_constant *c ELS_DC)
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) {
zval_dtor(&c->value);
zend_error(E_NOTICE,"Constant %s already defined",lowercase_name);
ret = FAILURE;
}
free(lowercase_name);
return ret;
}
+3 -3
View File
@@ -18,8 +18,8 @@
*/
#ifndef _CONSTANTS_H
#define _CONSTANTS_H
#ifndef ZEND_CONSTANTS_H
#define ZEND_CONSTANTS_H
#include "zend_globals.h"
@@ -55,7 +55,7 @@ ZEND_API void zend_register_long_constant(char *name, uint name_len, long lval,
ZEND_API void zend_register_double_constant(char *name, uint name_len, double dval, int flags, int module_number ELS_DC);
ZEND_API void zend_register_string_constant(char *name, uint name_len, char *strval, int flags, int module_number ELS_DC);
ZEND_API void zend_register_stringl_constant(char *name, uint name_len, char *strval, uint strlen, int flags, int module_number ELS_DC);
ZEND_API void zend_register_constant(zend_constant *c ELS_DC);
ZEND_API int zend_register_constant(zend_constant *c ELS_DC);
void zend_copy_constants(HashTable *target, HashTable *sourc);
void copy_zend_constant(zend_constant *c);
+3 -3
View File
@@ -18,8 +18,8 @@
*/
#ifndef _DYNAMIC_ARRAY_H
#define _DYNAMIC_ARRAY_H
#ifndef ZEND_DYNAMIC_ARRAY_H
#define ZEND_DYNAMIC_ARRAY_H
typedef struct _dynamic_array {
char *array;
@@ -35,4 +35,4 @@ 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 */
#endif /* ZEND_DYNAMIC_ARRAY_H */
+3 -3
View File
@@ -18,8 +18,8 @@
*/
#ifndef _ZEND_ERRORS_H
#define _ZEND_ERRORS_H
#ifndef ZEND_ERRORS_H
#define ZEND_ERRORS_H
#define E_ERROR (1<<0L)
#define E_WARNING (1<<1L)
@@ -36,5 +36,5 @@
#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 */
#endif /* ZEND_ERRORS_H */
+111 -150
View File
@@ -65,14 +65,6 @@ static void zend_extension_statement_handler(zend_extension *extension, zend_op_
static void zend_extension_fcall_begin_handler(zend_extension *extension, zend_op_array *op_array);
static void zend_extension_fcall_end_handler(zend_extension *extension, zend_op_array *op_array);
#define SEPARATE_ON_READ_OBJECT(obj, _type) \
if ((obj) && ((_type) == BP_VAR_R) && ((*(obj))->type == IS_OBJECT)) { \
SEPARATE_ZVAL_IF_NOT_REF((obj)); \
(*(obj))->is_ref = 1; \
}
#define RETURN_VALUE_USED(opline) (!((opline)->result.u.EA.type & EXT_TYPE_UNUSED))
static inline zval *_get_zval_ptr(znode *node, temp_variable *Ts, int *should_free ELS_DC)
@@ -142,10 +134,11 @@ static inline zval *_get_object_zval_ptr(znode *node, temp_variable *Ts, int *sh
return &Ts[node->u.var].tmp_var;
break;
case IS_VAR:
if (Ts[node->u.var].var.ptr) {
PZVAL_UNLOCK(Ts[node->u.var].var.ptr);
if (Ts[node->u.var].var.ptr_ptr) {
PZVAL_UNLOCK(*Ts[node->u.var].var.ptr_ptr);
*should_free = 0;
return Ts[node->u.var].var.ptr;
SEPARATE_ZVAL_IF_NOT_REF(Ts[node->u.var].var.ptr_ptr);
return *Ts[node->u.var].var.ptr_ptr;
} else {
if (Ts[node->u.var].EA.type==IS_STRING_OFFSET) {
PZVAL_UNLOCK(Ts[node->u.var].EA.data.str_offset.str);
@@ -347,16 +340,6 @@ static inline void zend_assign_to_variable(znode *result, znode *op1, znode *op2
if (variable_ptr->refcount==0) {
switch (type) {
case IS_VAR:
/*
if (PZVAL_IS_LOCKED(value)) {
zval *orig_value = value;
ALLOC_ZVAL(value);
*value = *orig_value;
value->refcount=0;
zval_copy_ctor(value);
}
*/
/* break missing intentionally */
case IS_CONST:
if (variable_ptr==value) {
@@ -386,16 +369,6 @@ static inline void zend_assign_to_variable(znode *result, znode *op1, znode *op2
} else { /* we need to split */
switch (type) {
case IS_VAR:
/*
if (PZVAL_IS_LOCKED(value)) {
zval *orig_value = value;
ALLOC_ZVAL(value);
*value = *orig_value;
value->refcount=0;
zval_copy_ctor(value);
}
*/
/* break missing intentionally */
case IS_CONST:
if (PZVAL_IS_REF(value) && value->refcount > 0) {
@@ -516,14 +489,13 @@ static void zend_fetch_var_address(znode *result, znode *op1, znode *op2, temp_v
if (op2->u.fetch_type == ZEND_FETCH_LOCAL) {
FREE_OP(op1, free_op1);
} else if (op2->u.fetch_type == ZEND_FETCH_STATIC) {
zval_update_constant(retval);
zval_update_constant(retval, (void *) 1);
}
if (varname == &tmp_varname) {
zval_dtor(varname);
}
Ts[result->u.var].var.ptr_ptr = retval;
SEPARATE_ON_READ_OBJECT(retval, type);
SELECTIVE_PZVAL_LOCK(*retval, result);
}
@@ -670,13 +642,8 @@ static void zend_fetch_dimension_address(znode *result, znode *op1, znode *op2,
case BP_VAR_RW:
case BP_VAR_W:
if (!PZVAL_IS_REF(container)) {
container->refcount--;
if (container->refcount>0) {
ALLOC_ZVAL(container);
*container_ptr = container;
container->is_ref=0;
}
container->refcount=1;
SEPARATE_ZVAL(container_ptr);
container = *container_ptr;
}
array_init(container);
break;
@@ -686,12 +653,8 @@ static void zend_fetch_dimension_address(znode *result, znode *op1, znode *op2,
switch (container->type) {
case IS_ARRAY:
if ((type==BP_VAR_W || type==BP_VAR_RW) && container->refcount>1 && !PZVAL_IS_REF(container)) {
container->refcount--;
ALLOC_ZVAL(*container_ptr);
**container_ptr = *container;
SEPARATE_ZVAL(container_ptr);
container = *container_ptr;
INIT_PZVAL(container);
zendi_zval_copy_ctor(*container);
}
if (op2->op_type == IS_UNUSED) {
zval *new_zval = &EG(uninitialized_zval);
@@ -701,7 +664,6 @@ static void zend_fetch_dimension_address(znode *result, znode *op1, znode *op2,
} else {
*retval = zend_fetch_dimension_address_inner(container->value.ht, op2, Ts, type ELS_CC);
}
SEPARATE_ON_READ_OBJECT(*retval, type);
SELECTIVE_PZVAL_LOCK(**retval, result);
break;
case IS_NULL:
@@ -855,13 +817,8 @@ static void zend_fetch_property_address(znode *result, znode *op1, znode *op2, t
case BP_VAR_RW:
case BP_VAR_W:
if (!PZVAL_IS_REF(container)) {
container->refcount--;
if (container->refcount>0) {
ALLOC_ZVAL(container);
*container_ptr = container;
container->is_ref=0;
}
container->refcount=1;
SEPARATE_ZVAL(container_ptr);
container = *container_ptr;
}
object_init(container);
break;
@@ -884,15 +841,10 @@ static void zend_fetch_property_address(znode *result, znode *op1, znode *op2, t
if ((type==BP_VAR_W || type==BP_VAR_RW) && container->refcount>1 && !PZVAL_IS_REF(container)) {
container->refcount--;
ALLOC_ZVAL(*container_ptr);
**container_ptr = *container;
SEPARATE_ZVAL(container_ptr);
container = *container_ptr;
INIT_PZVAL(container);
zendi_zval_copy_ctor(*container);
}
*retval = zend_fetch_property_address_inner(container->value.obj.properties, op2, Ts, type ELS_CC);
SEPARATE_ON_READ_OBJECT(*retval, type);
SELECTIVE_PZVAL_LOCK(**retval, result);
}
@@ -1012,6 +964,11 @@ void execute(zend_op_array *op_array ELS_DC)
while (opline<end) {
#else
while (1) {
#endif
#ifdef ZEND_WIN32
if (EG(timed_out)) {
zend_timeout(0);
}
#endif
switch(opline->opcode) {
case ZEND_ADD:
@@ -1128,17 +1085,9 @@ binary_assign_op_addr: {
opline++;
continue;
}
if (!PZVAL_IS_REF(*var_ptr)) {
if ((*var_ptr)->refcount>1) {
zval *orig_var=*var_ptr;
(*var_ptr)->refcount--;
ALLOC_ZVAL(*var_ptr);
**var_ptr = *orig_var;
zendi_zval_copy_ctor(**var_ptr);
(*var_ptr)->refcount=1;
}
}
SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
EG(binary_op)(*var_ptr, *var_ptr, get_zval_ptr(&opline->op2, Ts, &EG(free_op2), BP_VAR_R));
Ts[opline->result.u.var].var.ptr_ptr = var_ptr;
SELECTIVE_PZVAL_LOCK(*var_ptr, &opline->result);
@@ -1173,17 +1122,9 @@ binary_assign_op_addr: {
zendi_zval_copy_ctor(Ts[opline->result.u.var].tmp_var);
break;
}
if (!PZVAL_IS_REF(*var_ptr)) {
if ((*var_ptr)->refcount>1) {
zval *orig_var = *var_ptr;
(*var_ptr)->refcount--;
ALLOC_ZVAL(*var_ptr);
**var_ptr = *orig_var;
zendi_zval_copy_ctor(**var_ptr);
(*var_ptr)->refcount=1;
}
}
SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
incdec_op(*var_ptr);
switch (opline->opcode) {
case ZEND_PRE_INC:
@@ -1317,7 +1258,7 @@ binary_assign_op_addr: {
zval *value;
value = get_zval_ptr(&opline->op2, Ts, &EG(free_op2), BP_VAR_R);
zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (EG(free_op2)?IS_TMP_VAR:opline->op2.op_type), Ts ELS_CC);
zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (EG(free_op2)?IS_TMP_VAR:opline->op2.op_type), Ts ELS_CC);
/* zend_assign_to_variable() always takes care of op2, never free it! */
}
NEXT_OPCODE();
@@ -1471,7 +1412,7 @@ binary_assign_op_addr: {
/* constructor call */
if (opline->op1.op_type == IS_VAR) {
PZVAL_LOCK(*Ts[opline->op1.u.var].var.ptr_ptr);
SELECTIVE_PZVAL_LOCK(*Ts[opline->op1.u.var].var.ptr_ptr, &opline->op1);
}
if (opline->op2.op_type==IS_VAR) {
PZVAL_LOCK(*Ts[opline->op2.u.var].var.ptr_ptr);
@@ -1529,6 +1470,10 @@ binary_assign_op_addr: {
if (!object.ptr || object.ptr->type != IS_OBJECT) {
zend_error(E_ERROR, "Call to a member function on a non-object");
}
if (!object.ptr->is_ref && object.ptr->refcount > 1) {
zend_error(E_ERROR, "Bug: Problem in method call\n");
}
object.ptr->is_ref=1;
object.ptr->refcount++; /* For $this pointer */
active_function_table = &(object.ptr->value.obj.ce->function_table);
}
@@ -1658,10 +1603,8 @@ do_fcall_common:
retval_ptr_ptr = get_zval_ptr_ptr(&opline->op1, Ts, BP_VAR_W);
if (!PZVAL_IS_REF(*retval_ptr_ptr)) {
SEPARATE_ZVAL(retval_ptr_ptr);
(*retval_ptr_ptr)->is_ref = 1;
}
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr);
(*retval_ptr_ptr)->refcount++;
(*EG(return_value_ptr_ptr)) = (*retval_ptr_ptr);
} else {
@@ -1744,21 +1687,8 @@ send_by_ref:
zend_error(E_ERROR, "Only variables can be passed by reference");
}
SEPARATE_ZVAL_TO_MAKE_IS_REF(varptr_ptr);
varptr = *varptr_ptr;
if (!PZVAL_IS_REF(varptr)) {
/* code to break away this variable */
if (varptr->refcount>1) {
varptr->refcount--;
ALLOC_ZVAL(*varptr_ptr);
**varptr_ptr = *varptr;
varptr = *varptr_ptr;
varptr->refcount = 1;
zval_copy_ctor(varptr);
}
varptr->is_ref = 1;
/* at the end of this code refcount is always 1 */
}
varptr->refcount++;
zend_ptr_stack_push(&EG(argument_stack), varptr);
}
@@ -1767,7 +1697,7 @@ send_by_ref:
zval **param;
if (zend_ptr_stack_get_arg(opline->op1.u.constant.value.lval, (void **) &param ELS_CC)==FAILURE) {
zend_error(E_NOTICE, "Missing argument %d for %s()\n", opline->op1.u.constant.value.lval, get_active_function_name());
zend_error(E_WARNING, "Missing argument %d for %s()\n", opline->op1.u.constant.value.lval, get_active_function_name());
if (opline->result.op_type == IS_VAR) {
PZVAL_UNLOCK(*Ts[opline->result.u.var].var.ptr_ptr);
}
@@ -1782,18 +1712,16 @@ send_by_ref:
zval **param, *assignment_value;
if (zend_ptr_stack_get_arg(opline->op1.u.constant.value.lval, (void **) &param ELS_CC)==FAILURE) {
if (opline->op2.u.constant.type == IS_CONSTANT) {
if (opline->op2.u.constant.type == IS_CONSTANT || opline->op2.u.constant.type==IS_CONSTANT_ARRAY) {
zval *default_value;
zval tmp;
ALLOC_ZVAL(default_value);
*default_value = opline->op2.u.constant;
if (!zend_get_constant(default_value->value.str.val, default_value->value.str.len, &tmp)) {
default_value->type = IS_STRING;
if (opline->op2.u.constant.type==IS_CONSTANT_ARRAY) {
zval_copy_ctor(default_value);
} else {
*default_value = tmp;
}
default_value->refcount=1;
zval_update_constant(&default_value, 0);
default_value->refcount=0;
default_value->is_ref=0;
param = &default_value;
@@ -1806,7 +1734,7 @@ send_by_ref:
assignment_value = *param;
}
if (PZVAL_IS_REF(assignment_value)) {
if (PZVAL_IS_REF(assignment_value) && param) {
zend_assign_to_variable_reference(NULL, get_zval_ptr_ptr(&opline->result, Ts, BP_VAR_W), param, NULL ELS_CC);
} else {
zend_assign_to_variable(NULL, &opline->result, NULL, assignment_value, IS_VAR, Ts ELS_CC);
@@ -1911,9 +1839,11 @@ send_by_ref:
if (zend_hash_find(EG(class_table), class_name.value.str.val, class_name.value.str.len+1, (void **) &ce)==FAILURE) {
zend_error(E_ERROR, "Cannot instantiate non-existent class: %s", class_name.value.str.val);
}
object_init_ex(&Ts[opline->result.u.var].tmp_var, ce);
Ts[opline->result.u.var].tmp_var.refcount=1;
Ts[opline->result.u.var].tmp_var.is_ref=1;
Ts[opline->result.u.var].var.ptr_ptr = &Ts[opline->result.u.var].var.ptr;
ALLOC_ZVAL(Ts[opline->result.u.var].var.ptr);
object_init_ex(Ts[opline->result.u.var].var.ptr, ce);
Ts[opline->result.u.var].var.ptr->refcount=1;
Ts[opline->result.u.var].var.ptr->is_ref=1;
zval_dtor(&class_name);
FREE_OP(&opline->op1, EG(free_op1));
}
@@ -1946,7 +1876,7 @@ send_by_ref:
NEXT_OPCODE();
}
}
if (opline->op1.op_type == IS_TMP_VAR) { /* temporary variable */
if (!opline->extended_value && EG(free_op1)) { /* temporary variable */
zval *new_expr;
ALLOC_ZVAL(new_expr);
@@ -1955,11 +1885,8 @@ send_by_ref:
INIT_PZVAL(expr_ptr);
} else {
if (opline->extended_value) {
if (!PZVAL_IS_REF(expr_ptr)) {
SEPARATE_ZVAL(expr_ptr_ptr);
expr_ptr = *expr_ptr_ptr;
expr_ptr->is_ref = 1;
}
SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
expr_ptr = *expr_ptr_ptr;
expr_ptr->refcount++;
} else if (PZVAL_IS_REF(expr_ptr)) {
zval *new_expr;
@@ -1984,7 +1911,11 @@ send_by_ref:
case IS_STRING:
zend_hash_update(array_ptr->value.ht, offset->value.str.val, offset->value.str.len+1, &expr_ptr, sizeof(zval *), NULL);
break;
case IS_NULL:
zend_hash_update(array_ptr->value.ht, "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
break;
default:
zval_ptr_dtor(&expr_ptr);
/* do nothing */
break;
}
@@ -2045,7 +1976,8 @@ send_by_ref:
return_value_used = RETURN_VALUE_USED(opline);
switch (opline->op2.u.constant.value.lval) {
case ZEND_INCLUDE_ONCE: {
case ZEND_INCLUDE_ONCE:
case ZEND_REQUIRE_ONCE: {
char *opened_path;
int dummy = 1;
zend_file_handle file_handle;
@@ -2053,37 +1985,40 @@ send_by_ref:
file_handle.handle.fp = zend_fopen(inc_filename->value.str.val, &opened_path);
file_handle.type = ZEND_HANDLE_FP;
file_handle.filename = inc_filename->value.str.val;
file_handle.opened_path = opened_path;
file_handle.free_filename = 0;
if (file_handle.handle.fp) {
if (!opened_path || zend_hash_add(&EG(included_files), opened_path, strlen(opened_path)+1, (void *)&dummy, sizeof(int), NULL)==SUCCESS) {
new_op_array = zend_compile_files(ZEND_INCLUDE CLS_CC, 1, &file_handle);
if (new_op_array) {
pass_include_eval(new_op_array);
} else {
fclose(file_handle.handle.fp);
}
new_op_array = zend_compile_file(&file_handle, (opline->op2.u.constant.value.lval==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) CLS_CC);
zend_destroy_file_handle(&file_handle CLS_CC);
opened_path = NULL; /* zend_destroy_file_handle() already frees it */
} else {
fclose(file_handle.handle.fp);
}
if (opened_path) {
free(opened_path);
} else {
if (opline->op2.u.constant.value.lval==ZEND_INCLUDE_ONCE) {
zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle.filename);
} else {
zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle.filename);
}
}
if (opened_path) {
efree(opened_path);
}
break;
}
break;
case ZEND_INCLUDE:
case ZEND_REQUIRE:
{
new_op_array = compile_filename(opline->op2.u.constant.value.lval, inc_filename CLS_CC ELS_CC);
if (new_op_array) {
pass_include_eval(new_op_array);
}
break;
}
case ZEND_EVAL:
new_op_array = compile_string(inc_filename CLS_CC);
case ZEND_EVAL: {
char *eval_desc = zend_make_compiled_string_description("eval()'d code");
new_op_array = compile_string(inc_filename, eval_desc CLS_CC);
efree(eval_desc);
}
break;
EMPTY_SWITCH_DEFAULT_CASE()
}
@@ -2162,14 +2097,32 @@ send_by_ref:
ht = NULL;
break;
}
if (ht) {
if (ht) {
switch (offset->type) {
case IS_DOUBLE:
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
zend_hash_index_del(ht, offset->value.lval);
break;
{
long index;
if (offset->type == IS_DOUBLE) {
index = (long) offset->value.lval;
} else {
index = offset->value.lval;
}
zend_hash_index_del(ht, index);
break;
}
case IS_STRING:
zend_hash_del(ht, offset->value.str.val, offset->value.str.len+1);
break;
case IS_NULL:
zend_hash_del(ht, "", sizeof(""));
break;
default:
zend_error(E_WARNING, "Illegal offset type in unset");
break;
}
}
} else {
@@ -2179,22 +2132,27 @@ send_by_ref:
}
NEXT_OPCODE();
case ZEND_FE_RESET: {
zval *array_ptr;
zval *array_ptr, **array_ptr_ptr;
HashTable *fe_ht;
array_ptr = get_zval_ptr(&opline->op1, Ts, &EG(free_op1), BP_VAR_R);
if (EG(free_op1)) { /* IS_TMP_VAR */
zval *tmp;
ALLOC_ZVAL(tmp);
*tmp = *array_ptr;
INIT_PZVAL(tmp);
array_ptr = tmp;
} else {
if (opline->extended_value) {
array_ptr_ptr = get_zval_ptr_ptr(&opline->op1, Ts, BP_VAR_R);
SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
array_ptr = *array_ptr_ptr;
array_ptr->refcount++;
}
} else {
array_ptr = get_zval_ptr(&opline->op1, Ts, &EG(free_op1), BP_VAR_R);
if (EG(free_op1)) { /* IS_TMP_VAR */
zval *tmp;
ALLOC_ZVAL(tmp);
*tmp = *array_ptr;
INIT_PZVAL(tmp);
array_ptr = tmp;
} else {
array_ptr->refcount++;
}
}
PZVAL_LOCK(array_ptr);
Ts[opline->result.u.var].var.ptr = array_ptr;
Ts[opline->result.u.var].var.ptr_ptr = &Ts[opline->result.u.var].var.ptr;
@@ -2364,10 +2322,13 @@ send_by_ref:
case ZEND_NOP:
NEXT_OPCODE();
EMPTY_SWITCH_DEFAULT_CASE()
}
}
#if SUPPORT_INTERACTIVE
ALLOC_INIT_ZVAL(*(EG(return_value_ptr_ptr)));
op_array->last_executed_op_number = opline-op_array->opcodes;
EG(in_execution) = original_in_execution;
free_alloca(Ts);
#else
zend_error(E_ERROR,"Arrived at end of main loop which shouldn't happen");
+138 -10
View File
@@ -18,11 +18,13 @@
*/
#ifndef _EXECUTE_H
#define _EXECUTE_H
#ifndef ZEND_EXECUTE_H
#define ZEND_EXECUTE_H
#include "zend_compile.h"
#include "zend_hash.h"
#include "zend_variables.h"
#include "zend_execute_locks.h"
typedef union _temp_variable {
zval tmp_var;
@@ -52,15 +54,79 @@ void init_executor(CLS_D ELS_DC);
void shutdown_executor(ELS_D);
void execute(zend_op_array *op_array ELS_DC);
ZEND_API int zend_is_true(zval *op);
ZEND_API inline void safe_free_zval_ptr(zval *p);
ZEND_API int zend_eval_string(char *str, zval *retval_ptr CLS_DC ELS_DC);
ZEND_API inline int i_zend_is_true(zval *op);
ZEND_API int zval_update_constant(zval **pp);
ZEND_API inline void zend_assign_to_variable_reference(znode *result, zval **variable_ptr_ptr, zval **value_ptr_ptr, temp_variable *Ts ELS_DC);
static inline void safe_free_zval_ptr(zval *p)
{
ELS_FETCH();
if (p!=EG(uninitialized_zval_ptr)) {
FREE_ZVAL(p);
}
}
ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name CLS_DC ELS_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:
result = (zend_hash_num_elements(op->value.obj.properties)?1:0);
break;
default:
result = 0;
break;
}
return result;
}
ZEND_API int zval_update_constant(zval **pp, void *arg);
/* dedicated Zend executor functions - do not use! */
ZEND_API inline void zend_ptr_stack_clear_multiple(ELS_D);
ZEND_API inline int zend_ptr_stack_get_arg(int requested_arg, void **data ELS_DC);
static inline void zend_ptr_stack_clear_multiple(ELS_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 ELS_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;
}
#if SUPPORT_INTERACTIVE
void execute_new_code(CLS_D);
@@ -73,13 +139,75 @@ ZEND_API char *zend_get_executed_filename(ELS_D);
ZEND_API uint zend_get_executed_lineno(ELS_D);
ZEND_API zend_bool zend_is_executing(void);
void zend_set_timeout(long seconds);
void zend_unset_timeout(void);
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))
static inline void zend_assign_to_variable_reference(znode *result, zval **variable_ptr_ptr, zval **value_ptr_ptr, temp_variable *Ts ELS_DC)
{
zval *variable_ptr;
zval *value_ptr;
if (!value_ptr_ptr || !variable_ptr_ptr) {
zend_error(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
return;
}
variable_ptr = *variable_ptr_ptr;
value_ptr = *value_ptr_ptr;
if (variable_ptr == EG(error_zval_ptr) || value_ptr==EG(error_zval_ptr)) {
variable_ptr_ptr = &EG(uninitialized_zval_ptr);
/* } else if (variable_ptr==&EG(uninitialized_zval) || variable_ptr!=value_ptr) { */
} else if (variable_ptr_ptr != value_ptr_ptr) {
variable_ptr->refcount--;
if (variable_ptr->refcount==0) {
zendi_zval_dtor(*variable_ptr);
FREE_ZVAL(variable_ptr);
}
if (!PZVAL_IS_REF(value_ptr)) {
/* break it away */
value_ptr->refcount--;
if (value_ptr->refcount>0) {
ALLOC_ZVAL(*value_ptr_ptr);
**value_ptr_ptr = *value_ptr;
value_ptr = *value_ptr_ptr;
zendi_zval_copy_ctor(*value_ptr);
}
value_ptr->refcount = 1;
value_ptr->is_ref = 1;
}
*variable_ptr_ptr = value_ptr;
value_ptr->refcount++;
} else {
if (variable_ptr->refcount>1) { /* we need to break away */
SEPARATE_ZVAL(variable_ptr_ptr);
}
(*variable_ptr_ptr)->is_ref = 1;
}
if (result && !(result->u.EA.type & EXT_TYPE_UNUSED)) {
Ts[result->u.var].var.ptr_ptr = variable_ptr_ptr;
SELECTIVE_PZVAL_LOCK(*variable_ptr_ptr, result);
AI_USE_PTR(Ts[result->u.var].var);
}
}
#define IS_OVERLOADED_OBJECT 1
#define IS_STRING_OFFSET 2
#endif /* _EXECUTE_H */
#endif /* ZEND_EXECUTE_H */
+244 -144
View File
@@ -29,10 +29,23 @@
#include "zend_constants.h"
#include "zend_extensions.h"
#include "zend_execute_locks.h"
#if HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
ZEND_API void (*zend_execute)(zend_op_array *op_array ELS_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);
@@ -78,6 +91,18 @@ static void zend_extension_deactivator(zend_extension *extension)
}
static int is_not_internal_function(zend_function *function)
{
return(function->type != ZEND_INTERNAL_FUNCTION);
}
static int is_not_internal_class(zend_class_entry *ce)
{
return(ce->type != ZEND_INTERNAL_CLASS);
}
void init_executor(CLS_D ELS_DC)
{
INIT_ZVAL(EG(uninitialized_zval));
@@ -90,8 +115,7 @@ void init_executor(CLS_D ELS_DC)
original_sigsegv_handler = signal(SIGSEGV, zend_handle_sigsegv);
#endif
EG(return_value_ptr_ptr) = &EG(global_return_value_ptr);
EG(global_return_value_ptr) = &EG(global_return_value);
INIT_ZVAL(EG(global_return_value));
EG(global_return_value_ptr) = NULL;
EG(symtable_cache_ptr) = EG(symtable_cache)-1;
EG(symtable_cache_limit)=EG(symtable_cache)+SYMTABLE_CACHE_SIZE-1;
@@ -104,7 +128,6 @@ void init_executor(CLS_D ELS_DC)
zend_ptr_stack_init(&EG(argument_stack));
EG(main_op_array) = NULL;
zend_hash_init(&EG(symbol_table), 50, NULL, ZVAL_PTR_DTOR, 0);
EG(active_symbol_table) = &EG(symbol_table);
@@ -117,16 +140,19 @@ void init_executor(CLS_D ELS_DC)
EG(ticks_count) = 0;
EG(user_error_handler) = NULL;
zend_ptr_stack_init(&EG(user_error_handlers));
EG(orig_error_reporting) = EG(error_reporting);
#ifdef ZEND_WIN32
EG(timed_out) = 0;
#endif
}
void shutdown_executor(ELS_D)
{
if (EG(global_return_value_ptr) == &EG(global_return_value)) {
zval_dtor(&EG(global_return_value));
} else {
zval_ptr_dtor(EG(return_value_ptr_ptr));
}
zend_ptr_stack_destroy(&EG(arg_types_stack));
while (EG(symtable_cache_ptr)>=EG(symtable_cache)) {
@@ -144,13 +170,16 @@ void shutdown_executor(ELS_D)
}
}
zend_destroy_rsrc_list(ELS_C); /* must be destroyed after the main symbol table is destroyed */
zend_ptr_stack_destroy(&EG(argument_stack));
if (EG(main_op_array)) {
destroy_op_array(EG(main_op_array));
efree(EG(main_op_array));
}
/* Destroy all op arrays */
zend_hash_apply(EG(function_table), (int (*)(void *)) is_not_internal_function);
zend_hash_apply(EG(class_table), (int (*)(void *)) is_not_internal_class);
zend_destroy_rsrc_list(ELS_C); /* must be destroyed after the main symbol table and
* op arrays are destroyed.
*/
clean_non_persistent_constants();
#if ZEND_DEBUG
signal(SIGSEGV, original_sigsegv_handler);
@@ -162,6 +191,11 @@ void shutdown_executor(ELS_D)
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);
}
@@ -191,8 +225,8 @@ ZEND_API char *get_active_function_name()
ZEND_API char *zend_get_executed_filename(ELS_D)
{
if (EG(opline_ptr)) {
return active_opline->filename;
if (EG(active_op_array)) {
return EG(active_op_array)->filename;
} else {
return "[no active file]";
}
@@ -217,16 +251,6 @@ ZEND_API zend_bool zend_is_executing()
}
ZEND_API inline void safe_free_zval_ptr(zval *p)
{
ELS_FETCH();
if (p!=EG(uninitialized_zval_ptr)) {
FREE_ZVAL(p);
}
}
ZEND_API void _zval_ptr_dtor(zval **zval_ptr ZEND_FILE_LINE_DC)
{
#if DEBUG_ZEND>=2
@@ -242,53 +266,16 @@ ZEND_API void _zval_ptr_dtor(zval **zval_ptr ZEND_FILE_LINE_DC)
}
ZEND_API 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:
result = (zend_hash_num_elements(op->value.obj.properties)?1:0);
break;
default:
result = 0;
break;
}
return result;
}
ZEND_API int zend_is_true(zval *op)
{
return i_zend_is_true(op);
}
ZEND_API int zval_update_constant(zval **pp)
ZEND_API int zval_update_constant(zval **pp, void *arg)
{
zval *p = *pp;
zend_bool inline_change = (zend_bool) (unsigned long) arg;
if (p->type == IS_CONSTANT) {
zval c;
@@ -304,16 +291,22 @@ ZEND_API int zval_update_constant(zval **pp)
p->value.str.val,
p->value.str.val);
p->type = IS_STRING;
if (!inline_change) {
zval_copy_ctor(p);
}
} else {
STR_FREE(p->value.str.val);
if (inline_change) {
STR_FREE(p->value.str.val);
}
*p = c;
}
INIT_PZVAL(p);
p->refcount = refcount;
} else if (p->type == IS_ARRAY) {
} else if (p->type == IS_CONSTANT_ARRAY) {
SEPARATE_ZVAL(pp);
p = *pp;
zend_hash_apply(p->value.ht, (int (*)(void *)) zval_update_constant);
p->type = IS_ARRAY;
zend_hash_apply_with_argument(p->value.ht, (int (*)(void *,void *)) zval_update_constant, (void *) 1);
}
return 0;
}
@@ -329,7 +322,7 @@ int call_user_function(HashTable *function_table, zval *object, zval *function_n
for (i=0; i<param_count; i++) {
params_array[i] = &params[i];
}
ex_retval = call_user_function_ex(function_table, object, function_name, &local_retval_ptr, param_count, params_array, 1);
ex_retval = call_user_function_ex(function_table, object, function_name, &local_retval_ptr, param_count, params_array, 1, NULL);
if (local_retval_ptr) {
COPY_PZVAL_TO_ZVAL(*retval_ptr, local_retval_ptr);
} else {
@@ -340,7 +333,7 @@ int call_user_function(HashTable *function_table, zval *object, zval *function_n
}
int call_user_function_ex(HashTable *function_table, zval *object, zval *function_name, zval **retval_ptr_ptr, int param_count, zval **params[], int no_separation)
int call_user_function_ex(HashTable *function_table, zval *object, zval *function_name, zval **retval_ptr_ptr, int param_count, zval **params[], int no_separation, HashTable *symbol_table)
{
int i;
zval **original_return_value;
@@ -353,12 +346,32 @@ int call_user_function_ex(HashTable *function_table, zval *object, zval *functio
*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 = *tmp_object_ptr;
object->is_ref = 1;
}
if (object) {
if (object->type != IS_OBJECT) {
return FAILURE;
}
function_table = &object->value.obj.ce->function_table;
}
if (function_name->type!=IS_STRING) {
return FAILURE;
}
original_function_state_ptr = EG(function_state_ptr);
zend_str_tolower(function_name->value.str.val, function_name->value.str.len);
if (zend_hash_find(function_table, function_name->value.str.val, function_name->value.str.len+1, (void **) &function_state.function)==FAILURE) {
@@ -403,8 +416,12 @@ int call_user_function_ex(HashTable *function_table, zval *object, zval *functio
if (function_state.function->type == ZEND_USER_FUNCTION) {
calling_symbol_table = EG(active_symbol_table);
ALLOC_HASHTABLE(EG(active_symbol_table));
zend_hash_init(EG(active_symbol_table), 0, NULL, ZVAL_PTR_DTOR, 0);
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);
}
if (object) {
zval *dummy, **this_ptr;
@@ -420,8 +437,10 @@ int call_user_function_ex(HashTable *function_table, zval *object, zval *functio
EG(active_op_array) = (zend_op_array *) function_state.function;
original_opline_ptr = EG(opline_ptr);
zend_execute(EG(active_op_array) ELS_CC);
zend_hash_destroy(EG(active_symbol_table));
FREE_HASHTABLE(EG(active_symbol_table));
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;
@@ -438,7 +457,7 @@ int call_user_function_ex(HashTable *function_table, zval *object, zval *functio
}
ZEND_API int zend_eval_string(char *str, zval *retval_ptr CLS_DC ELS_DC)
ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name CLS_DC ELS_DC)
{
zval pv;
zend_op_array *new_op_array;
@@ -463,7 +482,7 @@ ZEND_API int zend_eval_string(char *str, zval *retval_ptr CLS_DC ELS_DC)
original_handle_op_arrays = CG(handle_op_arrays);
CG(handle_op_arrays) = 0;
new_op_array = compile_string(&pv CLS_CC);
new_op_array = compile_string(&pv, string_name CLS_CC);
CG(handle_op_arrays) = original_handle_op_arrays;
if (new_op_array) {
@@ -505,57 +524,6 @@ ZEND_API int zend_eval_string(char *str, zval *retval_ptr CLS_DC ELS_DC)
}
ZEND_API inline void zend_assign_to_variable_reference(znode *result, zval **variable_ptr_ptr, zval **value_ptr_ptr, temp_variable *Ts ELS_DC)
{
zval *variable_ptr = *variable_ptr_ptr;
zval *value_ptr;
if (!value_ptr_ptr) {
zend_error(E_ERROR, "Cannot create references to string offsets nor overloaded objects");
return;
}
value_ptr = *value_ptr_ptr;
if (variable_ptr == EG(error_zval_ptr) || value_ptr==EG(error_zval_ptr)) {
variable_ptr_ptr = &EG(uninitialized_zval_ptr);
/* } else if (variable_ptr==&EG(uninitialized_zval) || variable_ptr!=value_ptr) { */
} else if (variable_ptr_ptr != value_ptr_ptr) {
variable_ptr->refcount--;
if (variable_ptr->refcount==0) {
zendi_zval_dtor(*variable_ptr);
FREE_ZVAL(variable_ptr);
}
if (!PZVAL_IS_REF(value_ptr)) {
/* break it away */
value_ptr->refcount--;
if (value_ptr->refcount>0) {
ALLOC_ZVAL(*value_ptr_ptr);
**value_ptr_ptr = *value_ptr;
value_ptr = *value_ptr_ptr;
zendi_zval_copy_ctor(*value_ptr);
}
value_ptr->refcount = 1;
value_ptr->is_ref = 1;
}
*variable_ptr_ptr = value_ptr;
value_ptr->refcount++;
} else {
if (variable_ptr->refcount>1) { /* we need to break away */
SEPARATE_ZVAL(variable_ptr_ptr);
}
(*variable_ptr_ptr)->is_ref = 1;
}
if (result && (result->op_type != IS_UNUSED)) {
Ts[result->u.var].var.ptr_ptr = variable_ptr_ptr;
SELECTIVE_PZVAL_LOCK(*variable_ptr_ptr, result);
AI_USE_PTR(Ts[result->u.var].var);
}
}
#if SUPPORT_INTERACTIVE
void execute_new_code(CLS_D)
@@ -572,37 +540,169 @@ void execute_new_code(CLS_D)
CG(active_op_array)->end_op_number = CG(active_op_array)->last;
EG(active_op_array) = CG(active_op_array);
zend_execute(CG(active_op_array) ELS_CC);
zval_ptr_dtor(EG(return_value_ptr_ptr));
CG(active_op_array)->start_op_number = CG(active_op_array)->last_executed_op_number;
}
#endif
/* these are a dedicated, optimized, function, and shouldn't be used for any purpose
* other than by Zend's executor
*/
ZEND_API inline void zend_ptr_stack_clear_multiple(ELS_D)
ZEND_API void zend_timeout(int dummy)
{
void **p = EG(argument_stack).top_element-2;
int delete_count = (ulong) *p;
ELS_FETCH();
EG(argument_stack).top -= (delete_count+2);
while (--delete_count>=0) {
zval_ptr_dtor((zval **) --p);
/* is there any point in this? we're terminating the request anyway...
PLS_FETCH();
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
zend_executor_globals *executor_globals;
executor_globals = ts_resource_ex(executor_globals_id, &wParam);
if (!executor_globals) {
/* Thread died before receiving its timeout? */
break;
}
#endif
KillTimer(timeout_window, wParam);
EG(timed_out) = 1;
}
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
EG(argument_stack).top_element = p;
return 0;
}
ZEND_API int zend_ptr_stack_get_arg(int requested_arg, void **data ELS_DC)
static unsigned __stdcall timeout_thread_proc(void *pArgs)
{
void **p = EG(argument_stack).top_element-2;
int arg_count = (ulong) *p;
MSG message;
if (requested_arg>arg_count) {
return FAILURE;
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;
}
*data = (p-arg_count+requested_arg-1);
return SUCCESS;
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)
{
ELS_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(void)
{
ELS_FETCH();
#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
}
+4 -4
View File
@@ -1,12 +1,11 @@
#ifndef _ZEND_EXECUTE_LOCKS_H
#define _ZEND_EXECUTE_LOCKS_H
#ifndef ZEND_EXECUTE_LOCKS_H
#define ZEND_EXECUTE_LOCKS_H
#define PZVAL_LOCK(z) ((z)->refcount++)
#define PZVAL_UNLOCK(z) { ((z)->refcount--); \
if (!(z)->refcount) { \
(z)->refcount = 1; \
(z)->is_ref = 0; \
EG(garbage)[EG(garbage_ptr)++] = (z); \
if (EG(garbage_ptr) == 4) { \
zval_ptr_dtor(&EG(garbage)[0]); \
zval_ptr_dtor(&EG(garbage)[1]); \
@@ -14,9 +13,10 @@
EG(garbage)[1] = EG(garbage)[3]; \
EG(garbage_ptr) -= 2; \
} \
EG(garbage)[EG(garbage_ptr)++] = (z); \
} \
}
#define SELECTIVE_PZVAL_LOCK(pzv, pzn) if (!((pzn)->u.EA.type & EXT_TYPE_UNUSED)) { PZVAL_LOCK(pzv); }
#endif /* _ZEND_EXECUTE_LOCKS_H */
#endif /* ZEND_EXECUTE_LOCKS_H */
+27 -15
View File
@@ -65,18 +65,19 @@ int zend_load_extension(char *path)
}
if (extension_version_info->zend_extension_api_no > ZEND_EXTENSION_API_NO) {
fprintf(stderr, "%s requires Zend version %s or later\n"
"Current version %s, API version %d\n",
fprintf(stderr, "%s requires Zend Engine API version %d\n"
"The installed Zend Engine API version is %d\n\n",
new_extension->name,
extension_version_info->required_zend_version,
ZEND_VERSION,
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) {
/* we may be able to allow for downwards compatability in some harmless cases. */
fprintf(stderr, "%s is outdated (API version %d, current version %d)\n"
"Contact %s at %s for a later version of this module.\n",
fprintf(stderr, "%s designed to be used with the Zend Engine API %d is outdated\n"
"It requires a more recent version of the Zend Engine\n"
"The installed Zend Engine API version is %d\n"
"Contact %s at %s for a later version of this module.\n\n",
new_extension->name,
extension_version_info->zend_extension_api_no,
ZEND_EXTENSION_API_NO,
@@ -113,13 +114,6 @@ int zend_register_extension(zend_extension *new_extension, DL_HANDLE handle)
#if ZEND_EXTENSIONS_SUPPORT
zend_extension extension;
if (new_extension->startup) {
if (new_extension->startup(new_extension)!=SUCCESS) {
DL_UNLOAD(handle);
return FAILURE;
}
}
extension = *new_extension;
extension.handle = handle;
@@ -145,14 +139,32 @@ static void zend_extension_shutdown(zend_extension *extension)
}
int zend_startup_extensions()
static void zend_extension_startup(zend_extension *extension)
{
if (extension->startup) {
if (extension->startup(extension)!=SUCCESS) {
DL_UNLOAD(extension->handle);
}
}
}
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(&zend_extensions, (void (*)(void *)) zend_extension_startup);
return SUCCESS;
}
void zend_shutdown_extensions()
{
zend_llist_apply(&zend_extensions, (void (*)(void *)) zend_extension_shutdown);
@@ -162,7 +174,7 @@ void zend_shutdown_extensions()
void zend_extension_dtor(zend_extension *extension)
{
#if ZEND_EXTENSIONS_SUPPORT
#if ZEND_EXTENSIONS_SUPPORT && !ZEND_DEBUG
if (extension->handle) {
DL_UNLOAD(extension->handle);
}
+6 -11
View File
@@ -18,12 +18,12 @@
*/
#ifndef _ZEND_EXTENSIONS_H
#define _ZEND_EXTENSIONS_H
#ifndef ZEND_EXTENSIONS_H
#define ZEND_EXTENSIONS_H
#include "zend_compile.h"
#define ZEND_EXTENSION_API_NO 20000521
#define ZEND_EXTENSION_API_NO 20001002
typedef struct _zend_extension_version_info {
int zend_extension_api_no;
@@ -77,15 +77,9 @@ ZEND_API void zend_extension_dispatch_message(int message, void *arg);
#define ZEND_EXTMSG_NEW_EXTENSION 1
#ifdef ZTS
#define ZTS_V 1
#else
#define ZTS_V 0
#endif
#define ZEND_EXTENSION() \
ZEND_EXT_API zend_extension_version_info extension_version_info = { ZEND_EXTENSION_API_NO, "0.90", ZTS_V, ZEND_DEBUG }
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
@@ -97,7 +91,8 @@ ZEND_API int zend_load_extension(char *path);
ZEND_API int zend_load_extensions(char **extension_paths);
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(void);
#endif /* _ZEND_EXTENSIONS_H */
#endif /* ZEND_EXTENSIONS_H */
+3 -3
View File
@@ -18,8 +18,8 @@
*/
#ifndef _ZEND_FAST_CACHE_H
#define _ZEND_FAST_CACHE_H
#ifndef ZEND_FAST_CACHE_H
#define ZEND_FAST_CACHE_H
#ifndef ZEND_ENABLE_FAST_CACHE
# if ZEND_DEBUG
@@ -130,7 +130,7 @@ typedef struct _zend_fast_cache_list_entry {
#define FREE_HASHTABLE_REL(ht) \
ZEND_FAST_FREE_REL(ht, HASHTABLE_CACHE_LIST)
#endif /* _ZEND_FAST_CACHE_H */
#endif /* ZEND_FAST_CACHE_H */
/*
* Local variables:
+16 -11
View File
@@ -18,8 +18,8 @@
*/
#ifndef _T_GLOBALS_H
#define _T_GLOBALS_H
#ifndef ZEND_GLOBALS_H
#define ZEND_GLOBALS_H
#include <setjmp.h>
@@ -54,7 +54,6 @@ END_EXTERN_C()
#include "zend_compile.h"
#include "zend_execute.h"
/* excpt.h on Digital Unix 4.0 defines function_table */
#undef function_table
@@ -92,9 +91,7 @@ struct _zend_compiler_globals {
HashTable *function_table; /* function symbol table */
HashTable *class_table; /* class table */
HashTable used_files; /* files already included using 'use' */
zend_llist filenames_list;
HashTable filenames_table;
zend_bool in_compilation;
zend_bool short_tags;
@@ -134,7 +131,6 @@ struct _zend_executor_globals {
/* for global return() support */
zval *global_return_value_ptr;
zval global_return_value;
/* symbol table cache */
HashTable *symtable_cache[SYMTABLE_CACHE_SIZE];
@@ -151,9 +147,9 @@ struct _zend_executor_globals {
jmp_buf bailout;
int error_reporting;
int orig_error_reporting;
zend_op_array *active_op_array;
zend_op_array *main_op_array;
HashTable *function_table; /* function symbol table */
HashTable *class_table; /* class table */
@@ -168,6 +164,10 @@ struct _zend_executor_globals {
/* for extended information support */
zend_bool no_extensions;
#ifdef ZEND_WIN32
zend_bool timed_out;
#endif
HashTable regular_list;
HashTable persistent_list;
@@ -180,6 +180,12 @@ struct _zend_executor_globals {
int garbage_ptr;
zval *user_error_handler;
zend_ptr_stack user_error_handlers;
/* timeout support */
int timeout_seconds;
int lambda_count;
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
#if SUPPORT_INTERACTIVE
@@ -192,7 +198,7 @@ struct _zend_alloc_globals {
zend_mem_header *head; /* standard list */
zend_mem_header *phead; /* persistent list */
void *cache[MAX_CACHED_MEMORY][MAX_CACHED_ENTRIES];
unsigned char cache_count[MAX_CACHED_MEMORY];
unsigned int cache_count[MAX_CACHED_MEMORY];
void *fast_cache_list_head[MAX_FAST_CACHE_TYPES];
#if ZEND_DEBUG
@@ -207,5 +213,4 @@ struct _zend_alloc_globals {
#endif
};
#endif /* _T_GLOBALS_H */
#endif /* ZEND_GLOBALS_H */
+3 -3
View File
@@ -18,8 +18,8 @@
*/
#ifndef _ZEND_GLOBALS_MACROS_H
#define _ZEND_GLOBALS_MACROS_H
#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;
@@ -85,5 +85,5 @@ extern ZEND_API zend_executor_globals executor_globals;
extern ZEND_API zend_alloc_globals alloc_globals;
#endif
#endif /* _ZEND_GLOBALS_MACROS_H */
#endif /* ZEND_GLOBALS_MACROS_H */
+165 -27
View File
@@ -78,24 +78,28 @@
}
#if ZEND_DEBUG
#define HT_OK 0
#define HT_IS_DESTROYING 1
#define HT_DESTROYED 2
#define HT_CLEANING 3
#define HT_OK 0
#define HT_CLEANING 3
static void _zend_is_inconsistent(HashTable *ht, char *file, int line)
{
if (ht->inconsistent==HT_OK) {
return;
}
switch (ht->inconsistent) {
case HT_IS_DESTROYING:
zend_error(E_CORE_ERROR, "ht=%08x is destroying in %s:%d", ht, file, line);
break;
case HT_DESTROYED:
zend_error(E_CORE_ERROR, "ht=%08x is already destroyed in %s:%d", ht, file, line);
break;
case HT_CLEANING:
zend_error(E_CORE_ERROR, "ht=%08x is cleaning %s:%d", ht, file, line);
break;
case HT_IS_DESTROYING:
zend_output_debug_string(1, "%s(%d) : ht=0x%08x is being destroyed", file, line, ht);
break;
case HT_DESTROYED:
zend_output_debug_string(1, "%s(%d) : ht=0x%08x is already destroyed", file, line, ht);
break;
case HT_CLEANING:
zend_output_debug_string(1, "%s(%d) : ht=0x%08x is being cleaned", file, line, ht);
break;
}
zend_bailout();
}
#define IS_CONSISTENT(a) _zend_is_inconsistent(a,__FILE__,__LINE__);
#define SET_INCONSISTENT(n) ht->inconsistent = n;
@@ -104,9 +108,23 @@ static void _zend_is_inconsistent(HashTable *ht, char *file, int line)
#define SET_INCONSISTENT(n)
#endif
#define HASH_APPLY_BEGIN(ht) \
if ((ht)->bApplyProtection) { \
if ((ht)->nApplyCount>=3) { \
zend_error(E_WARNING, "Nesting level too deep - recursive dependency?"); \
return; \
} \
(ht)->nApplyCount++; \
}
#define HASH_APPLY_END(ht) \
(ht)->nApplyCount--;
/* Generated on an Octa-ALPHA 300MHz CPU & 2.5GB RAM monster */
static uint PrimeNumbers[] =
{5, 11, 19, 53, 107, 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987, 262237, 524521, 1048793, 2097397, 4194103, 8388857, 16777447, 33554201, 67108961, 134217487, 268435697, 536870683, 1073741621, 2147483399};
{5, 11, 19, 53, 107, 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987, 262237, 524521, 1048793, 2097397, 4194103, 8388857, 16777447, 33554201, 67108961, 134217487, 268435697, 536870683, 1073741621, 2147483399};
static uint nNumPrimeNumbers = sizeof(PrimeNumbers) / sizeof(uint);
#define ZEND_HASH_IF_FULL_DO_RESIZE(ht) \
if ((ht)->nNumOfElements > (ht)->nTableSize) { \
@@ -115,7 +133,6 @@ static uint PrimeNumbers[] =
static int zend_hash_do_resize(HashTable *ht);
static uint nNumPrimeNumbers = sizeof(PrimeNumbers) / sizeof(ulong);
ZEND_API ulong hashpjw(char *arKey, uint nKeyLength)
{
@@ -200,9 +217,28 @@ ZEND_API int zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction
ht->nNextFreeElement = 0;
ht->pInternalPointer = NULL;
ht->persistent = persistent;
ht->nApplyCount = 0;
ht->bApplyProtection = 1;
return SUCCESS;
}
ZEND_API int zend_hash_init_ex(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, int persistent, zend_bool bApplyProtection)
{
int retval = zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent);
ht->bApplyProtection = bApplyProtection;
return retval;
}
ZEND_API void zend_hash_set_apply_protection(HashTable *ht, zend_bool bApplyProtection)
{
ht->bApplyProtection = bApplyProtection;
}
ZEND_API int zend_hash_add_or_update(HashTable *ht, char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest, int flag)
{
ulong h;
@@ -650,6 +686,7 @@ ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func)
IS_CONSISTENT(ht);
HASH_APPLY_BEGIN(ht);
p = ht->pListHead;
while (p != NULL) {
if (apply_func(p->pData)) {
@@ -658,6 +695,7 @@ ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func)
p = p->pListNext;
}
}
HASH_APPLY_END(ht);
}
@@ -667,6 +705,7 @@ ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t appl
IS_CONSISTENT(ht);
HASH_APPLY_BEGIN(ht);
p = ht->pListHead;
while (p != NULL) {
if (apply_func(p->pData, argument)) {
@@ -675,6 +714,7 @@ ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t appl
p = p->pListNext;
}
}
HASH_APPLY_END(ht);
}
@@ -686,8 +726,9 @@ ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, int (*destruct)(void
IS_CONSISTENT(ht);
va_start(args, num_args);
HASH_APPLY_BEGIN(ht);
va_start(args, num_args);
p = ht->pListHead;
while (p != NULL) {
hash_key.arKey = p->arKey;
@@ -699,8 +740,9 @@ ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, int (*destruct)(void
p = p->pListNext;
}
}
va_end(args);
HASH_APPLY_END(ht);
}
@@ -708,21 +750,21 @@ ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, int (*destruct)(void
ZEND_API void zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size)
{
Bucket *p;
void *new_entry;
IS_CONSISTENT(source);
IS_CONSISTENT(target);
p = source->pListHead;
while (p) {
memcpy(tmp, p->pData, size);
if (pCopyConstructor) {
pCopyConstructor(tmp);
}
if (p->nKeyLength) {
zend_hash_update(target, p->arKey, p->nKeyLength, tmp, size, NULL);
zend_hash_update(target, p->arKey, p->nKeyLength, p->pData, size, &new_entry);
} else {
zend_hash_index_update(target, p->h, tmp, size, NULL);
zend_hash_index_update(target, p->h, p->pData, size, &new_entry);
}
if (pCopyConstructor) {
pCopyConstructor(new_entry);
}
p = p->pListNext;
}
target->pInternalPointer = target->pListHead;
@@ -740,13 +782,12 @@ ZEND_API void zend_hash_merge(HashTable *target, HashTable *source, copy_ctor_fu
p = source->pListHead;
while (p) {
memcpy(tmp, p->pData, size);
if (p->nKeyLength>0) {
if (zend_hash_add_or_update(target, p->arKey, p->nKeyLength, tmp, size, &t, mode)==SUCCESS && pCopyConstructor) {
if (zend_hash_add_or_update(target, p->arKey, p->nKeyLength, p->pData, size, &t, mode)==SUCCESS && pCopyConstructor) {
pCopyConstructor(t);
}
} else {
if ((mode==HASH_UPDATE || !zend_hash_index_exists(target, p->h)) && zend_hash_index_update(target, p->h, tmp, size, &t)==SUCCESS && pCopyConstructor) {
if ((mode==HASH_UPDATE || !zend_hash_index_exists(target, p->h)) && zend_hash_index_update(target, p->h, p->pData, size, &t)==SUCCESS && pCopyConstructor) {
pCopyConstructor(t);
}
}
@@ -756,6 +797,38 @@ ZEND_API void zend_hash_merge(HashTable *target, HashTable *source, copy_ctor_fu
}
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))
{
Bucket *p;
void *t;
void *pOrig;
IS_CONSISTENT(source);
IS_CONSISTENT(target);
p = source->pListHead;
while (p) {
if (p->nKeyLength>0) {
if (zend_hash_find(target, p->arKey, p->nKeyLength, &pOrig)==FAILURE
|| pReplaceOrig(pOrig, p->pData)) {
if (zend_hash_update(target, p->arKey, p->nKeyLength, p->pData, size, &t)==SUCCESS && pCopyConstructor) {
pCopyConstructor(t);
}
}
} else {
if (zend_hash_index_find(target, p->h, &pOrig)==FAILURE
|| pReplaceOrig(pOrig, p->pData)) {
if (zend_hash_index_update(target, p->h, p->pData, size, &t)==SUCCESS && pCopyConstructor) {
pCopyConstructor(t);
}
}
}
p = p->pListNext;
}
target->pInternalPointer = target->pListHead;
}
ZEND_API ulong zend_get_hash_value(HashTable *ht, char *arKey, uint nKeyLength)
{
IS_CONSISTENT(ht);
@@ -1064,6 +1137,71 @@ ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func,
}
ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, zend_bool ordered)
{
Bucket *p1, *p2;
int result;
void *pData2;
IS_CONSISTENT(ht1);
IS_CONSISTENT(ht2);
result = ht1->nNumOfElements - ht2->nNumOfElements;
if (result!=0) {
return result;
}
p1 = ht1->pListHead;
if (ordered) {
p2 = ht2->pListHead;
}
while (p1) {
if (ordered && !p2) {
return 1; /* That's not supposed to happen */
}
if (ordered) {
if (p1->nKeyLength==0 && p2->nKeyLength==0) { /* numeric indices */
result = p1->h - p2->h;
if (result!=0) {
return result;
}
} else { /* string indices */
result = p1->nKeyLength - p2->nKeyLength;
if (result!=0) {
return result;
}
result = memcmp(p1->arKey, p2->arKey, p1->nKeyLength);
if (result!=0) {
return result;
}
}
pData2 = p2->pData;
} else {
if (p1->nKeyLength==0) { /* numeric index */
if (zend_hash_index_find(ht2, p1->h, &pData2)==FAILURE) {
return 1;
}
} else { /* string index */
if (zend_hash_find(ht2, p1->arKey, p1->nKeyLength, &pData2)==FAILURE) {
return 1;
}
}
}
result = compar(p1->pData, pData2);
if (result!=0) {
return result;
}
p1 = p1->pListNext;
if (ordered) {
p2 = p2->pListNext;
}
}
return 0;
}
ZEND_API int zend_hash_minmax(HashTable *ht, int (*compar) (const void *, const void *), int flag, void **pData)
{
Bucket *p,*res;
@@ -1106,7 +1244,7 @@ void zend_hash_display_pListTail(HashTable *ht)
p = ht->pListTail;
while (p != NULL) {
zend_printf("pListTail has key %s\n", p->arKey);
zend_output_debug_string(0, "pListTail has key %s\n", p->arKey);
p = p->pListLast;
}
}
@@ -1119,14 +1257,14 @@ void zend_hash_display(HashTable *ht)
for (i = 0; i < ht->nTableSize; i++) {
p = ht->arBuckets[i];
while (p != NULL) {
zend_printf("%s <==> 0x%X\n", p->arKey, p->h);
zend_output_debug_string(0, "%s <==> 0x%X\n", p->arKey, p->h);
p = p->pNext;
}
}
p = ht->pListTail;
while (p != NULL) {
zend_printf("%s <==> 0x%X\n", p->arKey, p->h);
zend_output_debug_string(0, "%s <==> 0x%X\n", p->arKey, p->h);
p = p->pListLast;
}
}
+13 -6
View File
@@ -17,8 +17,8 @@
+----------------------------------------------------------------------+
*/
#ifndef _HASH_
#define _HASH_
#ifndef ZEND_HASH_H
#define ZEND_HASH_H
#include <sys/types.h>
@@ -41,7 +41,7 @@ typedef int (*apply_func_arg_t)(void *pDest, void *argument);
typedef ulong (*hash_func_t)(char *arKey, uint nKeyLength);
typedef void (*copy_ctor_func_t)(void *pElement);
struct hashtable;
struct _hashtable;
typedef struct bucket {
ulong h; /* Used for numeric indexing */
@@ -55,7 +55,7 @@ typedef struct bucket {
char arKey[1]; /* Must be last element */
} Bucket;
typedef struct hashtable {
typedef struct _hashtable {
uint nTableSize;
uint nHashSizeIndex;
uint nNumOfElements;
@@ -66,7 +66,9 @@ typedef struct hashtable {
Bucket *pListTail;
Bucket **arBuckets;
dtor_func_t pDestructor;
unsigned char persistent;
zend_bool persistent;
unsigned char nApplyCount;
zend_bool bApplyProtection;
#if ZEND_DEBUG
int inconsistent;
#endif
@@ -78,6 +80,7 @@ BEGIN_EXTERN_C()
/* startup/shutdown */
ZEND_API int zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, int persistent);
ZEND_API int zend_hash_init_ex(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, int persistent, zend_bool bApplyProtection);
ZEND_API void zend_hash_destroy(HashTable *ht);
ZEND_API void zend_hash_clean(HashTable *ht);
@@ -108,6 +111,8 @@ typedef struct _zend_hash_key {
} zend_hash_key;
typedef int (*apply_func_args_t)(void *pDest, int num_args, va_list args, zend_hash_key *hash_key);
#define ZEND_STD_HASH_APPLIER \
int (*)(void *element, int num_args, va_list args, zend_hash_key *hash_key)
@@ -165,7 +170,9 @@ ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos
/* 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);
ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, zend_bool ordered);
ZEND_API int zend_hash_minmax(HashTable *ht, int (*compar)(const void *, const void *), int flag, void **pData);
ZEND_API int zend_hash_num_elements(HashTable *ht);
@@ -189,4 +196,4 @@ END_EXTERN_C()
zend_hash_init(ht, n, NULL, ZVAL_PTR_DTOR, persistent)
#endif /* _HASH_ */
#endif /* ZEND_HASH_H */
+3 -3
View File
@@ -18,8 +18,8 @@
*/
#ifndef _HIGHLIGHT_H
#define _HIGHLIGHT_H
#ifndef ZEND_HIGHLIGHT_H
#define ZEND_HIGHLIGHT_H
#define HL_COMMENT_COLOR "#FF8000" /* orange */
#define HL_DEFAULT_COLOR "#0000BB" /* blue */
@@ -41,7 +41,7 @@ typedef struct _zend_syntax_highlighter_ini {
BEGIN_EXTERN_C()
ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini);
int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini);
int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini);
int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name);
ZEND_API void zend_html_putc(char c);
ZEND_API void zend_html_puts(char *s, uint len);
END_EXTERN_C()
+3 -3
View File
@@ -18,9 +18,9 @@
*/
#ifndef _ZEND_INDENT_H
#define _ZEND_INDENT_H
#ifndef ZEND_INDENT_H
#define ZEND_INDENT_H
ZEND_API void zend_indent(void);
#endif /* _ZEND_INDENT_H */
#endif /* ZEND_INDENT_H */
+20 -4
View File
@@ -215,8 +215,9 @@ ZEND_API void *zend_fetch_resource(zval **passed_id, int default_id, char *resou
resource = zend_list_find(id, &actual_resource_type);
if (!resource) {
if (resource_type_name)
if (resource_type_name) {
zend_error(E_WARNING, "%d is not a valid %s resource", id, resource_type_name);
}
return NULL;
}
@@ -232,8 +233,9 @@ ZEND_API void *zend_fetch_resource(zval **passed_id, int default_id, char *resou
}
va_end(resource_types);
if (resource_type_name)
if (resource_type_name) {
zend_error(E_WARNING, "Supplied resource is not a valid %s resource", resource_type_name);
}
return NULL;
}
@@ -287,7 +289,7 @@ int zend_init_rsrc_list(ELS_D)
int zend_init_rsrc_plist(ELS_D)
{
return zend_hash_init(&EG(persistent_list), 0, NULL, plist_entry_destructor, 1);
return zend_hash_init_ex(&EG(persistent_list), 0, NULL, plist_entry_destructor, 1, 0);
}
@@ -347,6 +349,7 @@ ZEND_API int zend_register_list_destructors(void (*ld)(void *), void (*pld)(void
lde.module_number = module_number;
lde.resource_id = list_destructors.nNextFreeElement;
lde.type = ZEND_RESOURCE_LIST_TYPE_STD;
lde.type_name = NULL;
if (zend_hash_next_index_insert(&list_destructors, (void *) &lde, sizeof(zend_rsrc_list_dtors_entry), NULL)==FAILURE) {
return FAILURE;
@@ -355,7 +358,7 @@ ZEND_API int zend_register_list_destructors(void (*ld)(void *), void (*pld)(void
}
ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, int module_number)
ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, char *type_name, int module_number)
{
zend_rsrc_list_dtors_entry lde;
@@ -370,6 +373,7 @@ ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_fu
lde.module_number = module_number;
lde.resource_id = list_destructors.nNextFreeElement;
lde.type = ZEND_RESOURCE_LIST_TYPE_EX;
lde.type_name = type_name;
if (zend_hash_next_index_insert(&list_destructors,(void *) &lde, sizeof(zend_rsrc_list_dtors_entry),NULL)==FAILURE) {
return FAILURE;
@@ -390,6 +394,18 @@ void zend_destroy_rsrc_list_dtors()
}
char *zend_rsrc_list_get_rsrc_type(int resource)
{
zend_rsrc_list_dtors_entry *lde;
if (zend_hash_index_find(&list_destructors, resource, (void **) &lde)==SUCCESS) {
return lde->type_name;
} else {
return NULL;
}
}
/*
* Local variables:
* tab-width: 4
+10 -5
View File
@@ -18,8 +18,8 @@
*/
#ifndef _LIST_H
#define _LIST_H
#ifndef ZEND_LIST_H
#define ZEND_LIST_H
#include "zend_hash.h"
#include "zend_globals.h"
@@ -35,7 +35,8 @@ typedef struct _zend_rsrc_list_entry {
zend_bool valid;
} zend_rsrc_list_entry;
typedef void (*rsrc_dtor_func_t)(zend_rsrc_list_entry *le);
typedef void (*rsrc_dtor_func_t)(zend_rsrc_list_entry *rsrc);
#define ZEND_RSRC_DTOR_FUNC(name) void name(zend_rsrc_list_entry *rsrc)
typedef struct _zend_rsrc_list_dtors_entry {
/* old style destructors */
@@ -46,6 +47,8 @@ typedef struct _zend_rsrc_list_dtors_entry {
rsrc_dtor_func_t list_dtor_ex;
rsrc_dtor_func_t plist_dtor_ex;
char *type_name;
int module_number;
int resource_id;
unsigned char type;
@@ -54,7 +57,7 @@ typedef struct _zend_rsrc_list_dtors_entry {
#define register_list_destructors(ld, pld) zend_register_list_destructors((void (*)(void *))ld, (void (*)(void *))pld, module_number);
ZEND_API int zend_register_list_destructors(void (*ld)(void *), void (*pld)(void *), int module_number);
ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, int module_number);
ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, char *type_name, int module_number);
enum list_entry_type {
LE_DB=1000
@@ -83,11 +86,13 @@ ZEND_API void *zend_plist_find(int id, int *type);
ZEND_API int zend_register_resource(zval *rsrc_result, void *rsrc_pointer, int rsrc_type);
ZEND_API void *zend_fetch_resource(zval **passed_id, int default_id, char *resource_type_name, int *found_resource_type, int num_resource_types, ...);
ZEND_API char *zend_rsrc_list_get_rsrc_type(int resource);
extern ZEND_API int le_index_ptr; /* list entry type for index pointers */
#define ZEND_VERIFY_RESOURCE(rsrc) \
if (!rsrc) { \
RETURN_FALSE; \
RETURN_NULL(); \
}
#define ZEND_FETCH_RESOURCE(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type) \
+6 -5
View File
@@ -18,8 +18,8 @@
*/
#ifndef _ZEND_LLIST_H
#define _ZEND_LLIST_H
#ifndef ZEND_LLIST_H
#define ZEND_LLIST_H
#include <stdlib.h>
@@ -41,6 +41,7 @@ typedef struct _zend_llist {
typedef int (*llist_compare_func_t)(const zend_llist_element *, const zend_llist_element *);
typedef void(*llist_apply_with_arg_func_t)(void *data, void *arg);
typedef void(*llist_apply_with_args_func_t)(void *data, int num_args, va_list args);
typedef void (*llist_apply_func_t)(void *);
typedef zend_llist_element* zend_llist_position;
@@ -53,8 +54,8 @@ ZEND_API void zend_llist_destroy(zend_llist *l);
ZEND_API void zend_llist_clean(zend_llist *l);
ZEND_API void zend_llist_remove_tail(zend_llist *l);
ZEND_API void zend_llist_copy(zend_llist *dst, zend_llist *src);
ZEND_API void zend_llist_apply(zend_llist *l, void (*func)(void *data));
ZEND_API void zend_llist_apply_with_argument(zend_llist *l, void (*func)(void *data, void *arg), void *arg);
ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t);
ZEND_API void zend_llist_apply_with_argument(zend_llist *l, llist_apply_with_arg_func_t, void *arg);
ZEND_API void zend_llist_apply_with_arguments(zend_llist *l, llist_apply_with_args_func_t func, int num_args, ...);
ZEND_API int zend_llist_count(zend_llist *l);
ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func);
@@ -72,4 +73,4 @@ ZEND_API void *zend_llist_get_prev_ex(zend_llist *l, zend_llist_position *pos);
END_EXTERN_C()
#endif /* _ZEND_LLIST_H */
#endif /* ZEND_LLIST_H */
+3 -4
View File
@@ -18,8 +18,8 @@
*/
#ifndef _MODULES_H
#define _MODULES_H
#ifndef MODULES_H
#define MODULES_H
#define INIT_FUNC_ARGS int type, int module_number ELS_DC
#define INIT_FUNC_ARGS_PASSTHRU type, module_number ELS_CC
@@ -37,8 +37,7 @@ extern unsigned char second_arg_allow_ref[];
#include "zend.h"
#define ZEND_MODULE_API_NO 20000401
#define ZEND_MODULE_API_NO 20000809
#ifdef ZTS
#define USING_ZTS 1
#else
+5 -13
View File
@@ -50,7 +50,7 @@ static void op_array_alloc_ops(zend_op_array *op_array)
void init_op_array(zend_op_array *op_array, int type, int initial_ops_size)
void init_op_array(zend_op_array *op_array, int type, int initial_ops_size CLS_DC)
{
op_array->type = type;
#if SUPPORT_INTERACTIVE
@@ -78,6 +78,7 @@ void init_op_array(zend_op_array *op_array, int type, int initial_ops_size)
op_array->T = 0;
op_array->function_name = NULL;
op_array->filename = zend_get_compiled_filename(CLS_C);
op_array->arg_types = NULL;
@@ -188,7 +189,6 @@ void init_op(zend_op *op CLS_DC)
{
memset(&op->result, 0, sizeof(znode));
op->lineno = CG(zend_lineno);
op->filename = zend_get_compiled_filename(CLS_C);
op->result.op_type = IS_UNUSED;
op->extended_value = 0;
memset(&op->op1, 0, sizeof(znode));
@@ -252,7 +252,6 @@ static void zend_update_extended_info(zend_op_array *op_array CLS_DC)
continue;
}
opline->lineno = (opline+1)->lineno;
opline->filename = (opline+1)->filename;
} else {
opline->opcode = ZEND_NOP;
}
@@ -264,7 +263,6 @@ static void zend_update_extended_info(zend_op_array *op_array CLS_DC)
opline->op1.op_type = IS_UNUSED;
opline->op2.op_type = IS_UNUSED;
if (op_array->last>0) {
opline->filename = op_array->opcodes[op_array->last-2].filename;
opline->lineno= op_array->opcodes[op_array->last-2].lineno;
}
}
@@ -281,6 +279,7 @@ static void zend_extension_op_array_handler(zend_extension *extension, zend_op_a
int pass_two(zend_op_array *op_array)
{
zend_op *opline=op_array->opcodes, *end=opline+op_array->last;
CLS_FETCH();
if (op_array->type!=ZEND_USER_FUNCTION && op_array->type!=ZEND_EVAL_CODE) {
@@ -292,15 +291,6 @@ int pass_two(zend_op_array *op_array)
if (CG(handle_op_arrays)) {
zend_llist_apply_with_argument(&zend_extensions, (void (*)(void *, void *)) zend_extension_op_array_handler, op_array);
}
op_array->done_pass_two = 1;
return 0;
}
ZEND_API void pass_include_eval(zend_op_array *op_array)
{
zend_op *opline=op_array->opcodes, *end=opline+op_array->last;
while (opline<end) {
if (opline->op1.op_type==IS_CONST) {
opline->op1.u.constant.is_ref = 1;
@@ -312,6 +302,8 @@ ZEND_API void pass_include_eval(zend_op_array *op_array)
}
opline++;
}
op_array->done_pass_two = 1;
return 0;
}
+241 -93
View File
@@ -32,23 +32,55 @@
#include "zend_list.h"
#include "zend_fast_cache.h"
#ifndef HAVE_FINITE
#ifndef finite /* in case it's already a macro */
#define finite(a) isfinite(a) /* HPUX 11 only has isfinite() */
#endif
#else
#if HAVE_IEEEFP_H
#include <ieeefp.h>
#endif
#endif
#define NORMALIZE_BOOL(n) \
((n) ? (((n)>0) ? 1 : -1) : 0)
#if WITH_BCMATH
#include "ext/bcmath/number.h"
#endif
ZEND_API double zend_string_to_double(const char *number, zend_uint length)
{
double divisor = 10.0;
double result = 0.0;
double exponent;
const char *end = number+length;
const char *digit = number;
if (!length) {
return result;
}
while (digit < end) {
if ((*digit <= '9' && *digit >= '0')) {
result *= 10;
result += *digit - '0';
} else if (*digit == '.') {
digit++;
break;
} else if (toupper(*digit) == 'E') {
exponent = (double) atoi(digit+1);
result *= pow(10.0, exponent);
return result;
} else {
return result;
}
digit++;
}
while (digit < end) {
if ((*digit <= '9' && *digit >= '0')) {
result += (*digit - '0') / divisor;
divisor *= 10;
} else if (toupper(*digit) == 'E') {
exponent = (double) atoi(digit+1);
result *= pow(10.0, exponent);
return result;
} else {
return result;
}
digit++;
}
return result;
}
ZEND_API void convert_scalar_to_number(zval *op)
{
@@ -456,7 +488,51 @@ ZEND_API void convert_to_object(zval *op)
}
}
ZEND_API void multi_convert_to_long_ex(int argc, ...)
{
zval **arg;
va_list ap;
va_start(ap, argc);
while (argc--) {
arg = va_arg(ap, zval **);
convert_to_long_ex(arg);
}
va_end(ap);
}
ZEND_API void multi_convert_to_double_ex(int argc, ...)
{
zval **arg;
va_list ap;
va_start(ap, argc);
while (argc--) {
arg = va_arg(ap, zval **);
convert_to_double_ex(arg);
}
va_end(ap);
}
ZEND_API void multi_convert_to_string_ex(int argc, ...)
{
zval **arg;
va_list ap;
va_start(ap, argc);
while (argc--) {
arg = va_arg(ap, zval **);
convert_to_string_ex(arg);
}
va_end(ap);
}
ZEND_API int add_function(zval *result, zval *op1, zval *op2)
{
zval op1_copy, op2_copy;
@@ -994,16 +1070,30 @@ ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2)
convert_to_double(&op1_copy);
convert_to_double(&op2_copy);
result->value.lval = NORMALIZE_BOOL(op1_copy.value.dval-op2_copy.value.dval);
result->value.lval = ZEND_NORMALIZE_BOOL(op1_copy.value.dval-op2_copy.value.dval);
result->type = IS_LONG;
return SUCCESS;
}
ZEND_API int compare_function(zval *result, zval *op1, zval *op2)
{
zval op1_copy, op2_copy;
if ((op1->type == IS_NULL && op2->type == IS_STRING)
|| (op2->type == IS_NULL && op1->type == IS_STRING)) {
if (op1->type == IS_NULL) {
result->type = IS_LONG;
result->value.lval = zend_binary_strcmp("", 0, op2->value.str.val, op2->value.str.len);
return SUCCESS;
} else {
result->type = IS_LONG;
result->value.lval = zend_binary_strcmp(op1->value.str.val, op1->value.str.len, "", 0);
return SUCCESS;
}
}
if (op1->type == IS_STRING && op2->type == IS_STRING) {
zendi_smart_strcmp(result, op1, op2);
return SUCCESS;
@@ -1014,7 +1104,7 @@ ZEND_API int compare_function(zval *result, zval *op1, zval *op2)
zendi_convert_to_boolean(op1, op1_copy, result);
zendi_convert_to_boolean(op2, op2_copy, result);
result->type = IS_LONG;
result->value.lval = NORMALIZE_BOOL(op1->value.lval-op2->value.lval);
result->value.lval = ZEND_NORMALIZE_BOOL(op1->value.lval-op2->value.lval);
return SUCCESS;
}
@@ -1023,25 +1113,68 @@ ZEND_API int compare_function(zval *result, zval *op1, zval *op2)
if (op1->type == IS_LONG && op2->type == IS_LONG) {
result->type = IS_LONG;
result->value.lval = NORMALIZE_BOOL(op1->value.lval-op2->value.lval);
result->value.lval = ZEND_NORMALIZE_BOOL(op1->value.lval-op2->value.lval);
return SUCCESS;
}
if ((op1->type == IS_DOUBLE || op1->type == IS_LONG)
&& (op2->type == IS_DOUBLE || op2->type == IS_LONG)) {
result->value.dval = (op1->type == IS_LONG ? (double) op1->value.lval : op1->value.dval) - (op2->type == IS_LONG ? (double) op2->value.lval : op2->value.dval);
result->value.lval = NORMALIZE_BOOL(result->value.dval);
result->value.lval = ZEND_NORMALIZE_BOOL(result->value.dval);
result->type = IS_LONG;
return SUCCESS;
}
if ((op1->type==IS_ARRAY || op1->type==IS_OBJECT)
&& (op2->type==IS_ARRAY || op2->type==IS_OBJECT)) {
zend_error(E_WARNING,"Cannot compare arrays or objects");
if (op1->type==IS_ARRAY && op2->type==IS_ARRAY) {
zend_compare_arrays(result, op1, op2);
return SUCCESS;
}
if (op1->type==IS_OBJECT && op2->type==IS_OBJECT) {
zend_compare_objects(result, op1, op2);
return SUCCESS;
}
if (op1->type==IS_ARRAY) {
result->value.lval = 1;
result->type = IS_LONG;
return SUCCESS;
}
if (op2->type==IS_ARRAY) {
result->value.lval = -1;
result->type = IS_LONG;
return SUCCESS;
}
if (op1->type==IS_OBJECT) {
result->value.lval = 1;
result->type = IS_LONG;
return SUCCESS;
}
if (op2->type==IS_OBJECT) {
result->value.lval = -1;
result->type = IS_LONG;
return SUCCESS;
}
var_reset(result);
return FAILURE;
}
static int hash_zval_identical_function(const zval **z1, const zval **z2)
{
zval result;
/* is_identical_function() returns 1 in case of identity and 0 in case
* of a difference;
* whereas this comparison function is expected to return 0 on identity,
* and non zero otherwise.
*/
if (is_identical_function(&result, (zval *) *z1, (zval *) *z2)==FAILURE) {
return 1;
}
return !result.value.lval;
}
ZEND_API int is_identical_function(zval *result, zval *op1, zval *op2)
{
result->type = IS_BOOL;
@@ -1052,17 +1185,14 @@ ZEND_API int is_identical_function(zval *result, zval *op1, zval *op2)
switch (op1->type) {
case IS_NULL:
result->value.lval = (op2->type==IS_NULL);
return SUCCESS;
break;
case IS_BOOL:
case IS_LONG:
case IS_RESOURCE:
result->value.lval = (op1->value.lval == op2->value.lval);
return SUCCESS;
break;
case IS_DOUBLE:
result->value.lval = (op1->value.dval == op2->value.dval);
return SUCCESS;
break;
case IS_STRING:
if ((op1->value.str.len == op2->value.str.len)
@@ -1071,22 +1201,37 @@ ZEND_API int is_identical_function(zval *result, zval *op1, zval *op2)
} else {
result->value.lval = 0;
}
return SUCCESS;
break;
case IS_ARRAY:
case IS_OBJECT:
zend_error(E_WARNING,"Cannot compare arrays or objects");
if (zend_hash_compare(op1->value.ht, op2->value.ht, (compare_func_t) hash_zval_identical_function, 1)==0) {
result->value.lval = 1;
} else {
result->value.lval = 0;
}
break;
case IS_OBJECT:
if (op1->value.obj.ce != op2->value.obj.ce) {
result->value.lval = 0;
} else {
if (zend_hash_compare(op1->value.obj.properties, op2->value.obj.properties, (compare_func_t) hash_zval_identical_function, 1)==0) {
result->value.lval = 1;
} else {
result->value.lval = 0;
}
}
break;
default:
var_reset(result);
return FAILURE;
}
var_reset(result);
return FAILURE;
return SUCCESS;
}
ZEND_API int is_not_identical_function(zval *result, zval *op1, zval *op2)
{
result->type = IS_BOOL;
if ( is_identical_function( result, op1, op2 ) == FAILURE ) {
if (is_identical_function( result, op1, op2 ) == FAILURE) {
return FAILURE;
}
result->value.lval = !result->value.lval;
@@ -1372,6 +1517,25 @@ ZEND_API int zend_binary_strcasecmp(char *s1, uint len1, char *s2, uint len2)
}
ZEND_API int zend_binary_strncasecmp(char *s1, uint len1, char *s2, uint len2, uint length)
{
int len;
int c1,c2;
len = MIN(length, MIN(len1, len2));
while (len--) {
c1 = tolower(*s1++);
c2 = tolower(*s2++);
if (c1 != c2) {
return c1 - c2;
}
}
return len1 - len2;
}
ZEND_API int zend_binary_zval_strcmp(zval *s1, zval *s2)
{
return zend_binary_strcmp(s1->value.str.val, s1->value.str.len, s2->value.str.val, s2->value.str.len);
@@ -1389,6 +1553,12 @@ ZEND_API int zend_binary_zval_strcasecmp(zval *s1, zval *s2)
}
ZEND_API int zend_binary_zval_strncasecmp(zval *s1, zval *s2, zval *s3)
{
return zend_binary_strncasecmp(s1->value.str.val, s1->value.str.len, s2->value.str.val, s2->value.str.len, s3->value.lval);
}
ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2)
{
int ret1,ret2;
@@ -1407,7 +1577,7 @@ ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2)
str2num(&first,s1->value.str.val,100); /* this scale should do */
str2num(&second,s2->value.str.val,100); /* ditto */
result->value.lval = bc_compare(first,second);
result->value.lval = NORMALIZE_BOOL(result->value.lval);
result->value.lval = ZEND_NORMALIZE_BOOL(result->value.lval);
result->type = IS_LONG;
free_num(&first);
free_num(&second);
@@ -1420,87 +1590,65 @@ ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2)
dval2 = strtod(s2->value.str.val, NULL);
}
result->value.dval = dval1 - dval2;
result->value.lval = NORMALIZE_BOOL(result->value.dval);
result->value.lval = ZEND_NORMALIZE_BOOL(result->value.dval);
result->type = IS_LONG;
} else { /* they both have to be long's */
result->value.lval = lval1 - lval2;
result->value.lval = NORMALIZE_BOOL(result->value.lval);
result->value.lval = ZEND_NORMALIZE_BOOL(result->value.lval);
result->type = IS_LONG;
}
} else {
result->value.lval = zend_binary_zval_strcmp(s1, s2);
result->value.lval = NORMALIZE_BOOL(result->value.lval);
result->value.lval = ZEND_NORMALIZE_BOOL(result->value.lval);
result->type = IS_LONG;
}
return;
}
static int hash_zval_compare_function(const zval **z1, const zval **z2)
{
zval result;
if (compare_function(&result, (zval *) *z1, (zval *) *z2)==FAILURE) {
return 1;
}
return result.value.lval;
}
ZEND_API void zend_compare_symbol_tables(zval *result, HashTable *ht1, HashTable *ht2)
{
result->type = IS_LONG;
result->value.lval = zend_hash_compare(ht1, ht2, (compare_func_t) hash_zval_compare_function, 0);
}
ZEND_API void zend_compare_arrays(zval *result, zval *a1, zval *a2)
{
zend_compare_symbol_tables(result, a1->value.ht, a2->value.ht);
}
ZEND_API void zend_compare_objects(zval *result, zval *o1, zval *o2)
{
if (o1->value.obj.ce != o2->value.obj.ce) {
result->value.lval = 1; /* Comparing objects of different types is pretty much meaningless */
result->type = IS_LONG;
return;
}
zend_compare_symbol_tables(result, o1->value.obj.properties, o2->value.obj.properties);
}
/* returns 0 for non-numeric string
* returns IS_DOUBLE for floating point string, and assigns the value to *dval (if it's not NULL)
* returns IS_LONG for integer strings, and assigns the value to *lval (if it's not NULL)
* returns FLAG_IS_BC if the number might lose accuracy when converted to a double
*/
#if 1
ZEND_API inline int is_numeric_string(char *str, int length, long *lval, double *dval)
{
long local_lval;
double local_dval;
char *end_ptr;
if (!length) {
return 0;
}
errno=0;
local_lval = strtol(str, &end_ptr, 10);
if (errno!=ERANGE && end_ptr == str+length) { /* integer string */
if (lval) {
*lval = local_lval;
}
return IS_LONG;
}
errno=0;
local_dval = strtod(str, &end_ptr);
if (errno!=ERANGE && end_ptr == str+length) { /* floating point string */
if (! finite(local_dval)) {
/* "inf","nan" and maybe other weird ones */
return 0;
}
if (dval) {
*dval = local_dval;
}
#if WITH_BCMATH
if (length>16) {
register char *ptr=str, *end=str+length;
while(ptr<end) {
switch(*ptr++) {
case 'e':
case 'E':
/* scientific notation, not handled by the BC library */
return IS_DOUBLE;
break;
default:
break;
}
}
return FLAG_IS_BC;
} else {
return IS_DOUBLE;
}
#else
return IS_DOUBLE;
#endif
}
return 0;
}
#else
#if 0
static inline int is_numeric_string(char *str, int length, long *lval, double *dval)
{
+83 -3
View File
@@ -18,8 +18,19 @@
*/
#ifndef _OPERATORS_H
#define _OPERATORS_H
#ifndef ZEND_OPERATORS_H
#define ZEND_OPERATORS_H
#include <errno.h>
#include <math.h>
#ifdef HAVE_IEEEFP_H
#include <ieeefp.h>
#endif
#if WITH_BCMATH
#include "ext/bcmath/number.h"
#endif
#define MAX_LENGTH_OF_LONG 18
#define MAX_LENGTH_OF_DOUBLE 32
@@ -47,7 +58,62 @@ ZEND_API int is_not_identical_function(zval *result, zval *op1, zval *op2);
ZEND_API int is_not_equal_function(zval *result, zval *op1, zval *op2);
ZEND_API int is_smaller_function(zval *result, zval *op1, zval *op2);
ZEND_API int is_smaller_or_equal_function(zval *result, zval *op1, zval *op2);
ZEND_API inline int is_numeric_string(char *str, int length, long *lval, double *dval);
static inline int is_numeric_string(char *str, int length, long *lval, double *dval)
{
long local_lval;
double local_dval;
char *end_ptr;
if (!length) {
return 0;
}
errno=0;
local_lval = strtol(str, &end_ptr, 10);
if (errno!=ERANGE && end_ptr == str+length) { /* integer string */
if (lval) {
*lval = local_lval;
}
return IS_LONG;
}
errno=0;
local_dval = strtod(str, &end_ptr);
if (errno!=ERANGE && end_ptr == str+length) { /* floating point string */
if (! zend_finite(local_dval)) {
/* "inf","nan" and maybe other weird ones */
return 0;
}
if (dval) {
*dval = local_dval;
}
#if WITH_BCMATH
if (length>16) {
register char *ptr=str, *end=str+length;
while(ptr<end) {
switch(*ptr++) {
case 'e':
case 'E':
/* scientific notation, not handled by the BC library */
return IS_DOUBLE;
break;
default:
break;
}
}
return FLAG_IS_BC;
} else {
return IS_DOUBLE;
}
#else
return IS_DOUBLE;
#endif
}
return 0;
}
ZEND_API int increment_function(zval *op1);
ZEND_API int decrement_function(zval *op2);
@@ -62,9 +128,14 @@ ZEND_API void convert_to_null(zval *op);
ZEND_API void convert_to_boolean(zval *op);
ZEND_API void convert_to_array(zval *op);
ZEND_API void convert_to_object(zval *op);
ZEND_API void multi_convert_to_long_ex(int argc, ...);
ZEND_API void multi_convert_to_double_ex(int argc, ...);
ZEND_API void multi_convert_to_string_ex(int argc, ...);
ZEND_API int add_char_to_string(zval *result, zval *op1, zval *op2);
ZEND_API int add_string_to_string(zval *result, zval *op1, zval *op2);
#define convert_to_string(op) _convert_to_string((op) ZEND_FILE_LINE_CC)
ZEND_API double zend_string_to_double(const char *number, zend_uint length);
END_EXTERN_C()
ZEND_API int zval_is_true(zval *op);
@@ -76,11 +147,17 @@ ZEND_API void zend_str_tolower(char *str, unsigned int length);
ZEND_API int zend_binary_zval_strcmp(zval *s1, zval *s2);
ZEND_API int zend_binary_zval_strncmp(zval *s1, zval *s2, zval *s3);
ZEND_API int zend_binary_zval_strcasecmp(zval *s1, zval *s2);
ZEND_API int zend_binary_zval_strncasecmp(zval *s1, zval *s2, zval *s3);
ZEND_API int zend_binary_strcmp(char *s1, uint len1, char *s2, uint len2);
ZEND_API int zend_binary_strncmp(char *s1, uint len1, char *s2, uint len2, uint length);
ZEND_API int zend_binary_strcasecmp(char *s1, uint len1, char *s2, uint len2);
ZEND_API int zend_binary_strncasecmp(char *s1, uint len1, char *s2, uint len2, uint length);
ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2);
ZEND_API void zend_compare_symbol_tables(zval *result, HashTable *ht1, HashTable *ht2);
ZEND_API void zend_compare_arrays(zval *result, zval *a1, zval *a2);
ZEND_API void zend_compare_objects(zval *result, zval *o1, zval *o2);
#define convert_to_ex_master(ppzv, lower_type, upper_type) \
if ((*ppzv)->type!=IS_##upper_type) { \
@@ -125,18 +202,21 @@ ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2);
#define Z_LVAL(zval) (zval).value.lval
#define Z_BVAL(zval) ((zend_bool)(zval).value.lval)
#define Z_DVAL(zval) (zval).value.dval
#define Z_STRVAL(zval) (zval).value.str.val
#define Z_STRLEN(zval) (zval).value.str.len
#define Z_ARRVAL(zval) (zval).value.ht
#define Z_LVAL_P(zval_p) Z_LVAL(*zval_p)
#define Z_BVAL_P(zval_p) Z_BVAL(*zval_p)
#define Z_DVAL_P(zval_p) Z_DVAL(*zval_p)
#define Z_STRVAL_P(zval_p) Z_STRVAL(*zval_p)
#define Z_STRLEN_P(zval_p) Z_STRLEN(*zval_p)
#define Z_ARRVAL_P(zval_p) Z_ARRVAL(*zval_p)
#define Z_LVAL_PP(zval_pp) Z_LVAL(**zval_pp)
#define Z_BVAL_PP(zval_pp) Z_BVAL(**zval_pp)
#define Z_DVAL_PP(zval_pp) Z_DVAL(**zval_pp)
#define Z_STRVAL_PP(zval_pp) Z_STRVAL(**zval_pp)
#define Z_STRLEN_PP(zval_pp) Z_STRLEN(**zval_pp)
+12 -1
View File
@@ -104,11 +104,22 @@ ZEND_API void zend_ptr_stack_apply(zend_ptr_stack *stack, void (*func)(void *))
}
ZEND_API void zend_ptr_stack_clean(zend_ptr_stack *stack, void (*func)(void *))
ZEND_API void zend_ptr_stack_clean(zend_ptr_stack *stack, void (*func)(void *), zend_bool free_elements)
{
zend_ptr_stack_apply(stack, func);
if (free_elements) {
int i = stack->top;
while (--i >= 0) {
efree(stack->elements[i]);
}
}
stack->top = 0;
stack->top_element = stack->elements;
}
ZEND_API int zend_ptr_stack_num_elements(zend_ptr_stack *stack)
{
return stack->top;
}
+5 -4
View File
@@ -18,8 +18,8 @@
*/
#ifndef _ZEND_PTR_STACK_H
#define _ZEND_PTR_STACK_H
#ifndef ZEND_PTR_STACK_H
#define ZEND_PTR_STACK_H
typedef struct _zend_ptr_stack {
int top, max;
@@ -37,6 +37,7 @@ ZEND_API void *zend_ptr_stack_pop(zend_ptr_stack *stack);
ZEND_API void zend_ptr_stack_n_pop(zend_ptr_stack *stack, int count, ...);
ZEND_API void zend_ptr_stack_destroy(zend_ptr_stack *stack);
ZEND_API void zend_ptr_stack_apply(zend_ptr_stack *stack, void (*func)(void *));
ZEND_API void zend_ptr_stack_clean(zend_ptr_stack *stack, void (*func)(void *));
ZEND_API void zend_ptr_stack_clean(zend_ptr_stack *stack, void (*func)(void *), zend_bool free_elements);
ZEND_API int zend_ptr_stack_num_elements(zend_ptr_stack *stack);
#endif /* _ZEND_PTR_STACK_H */
#endif /* ZEND_PTR_STACK_H */
+3 -3
View File
@@ -18,8 +18,8 @@
*/
#ifndef _ZEND_STACK_H
#define _ZEND_STACK_H
#ifndef ZEND_STACK_H
#define ZEND_STACK_H
typedef struct _zend_stack {
int top, max;
@@ -44,4 +44,4 @@ ZEND_API void zend_stack_apply_with_argument(zend_stack *stack, int type, int (*
#define ZEND_STACK_APPLY_TOPDOWN 1
#define ZEND_STACK_APPLY_BOTTOMUP 2
#endif /* _ZEND_STACK_H */
#endif /* ZEND_STACK_H */
+76
View File
@@ -0,0 +1,76 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2000 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 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/0_92.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> |
+----------------------------------------------------------------------+
*/
#include <stdlib.h>
#include "zend_static_allocator.h"
/* Not checking emalloc() and erealloc() return values as they are supposed to bailout */
inline static void block_init(Block *block, zend_uint block_size)
{
block->pos = block->bp = (char *) emalloc(block_size);
block->end = block->bp + block_size;
}
inline static char *block_allocate(Block *block, zend_uint size)
{
char *retval = block->pos;
if ((block->pos += size) >= block->end) {
return (char *)NULL;
}
return retval;
}
inline static void block_destroy(Block *block)
{
efree(block->bp);
}
void static_allocator_init(StaticAllocator *sa)
{
sa->Blocks = (Block *) emalloc(sizeof(Block));
block_init(sa->Blocks, ALLOCATOR_BLOCK_SIZE);
sa->num_blocks = 1;
sa->current_block = 0;
}
char *static_allocator_allocate(StaticAllocator *sa, zend_uint size)
{
char *retval;
retval = block_allocate(&sa->Blocks[sa->current_block], size);
if (retval) {
return retval;
}
sa->Blocks = (Block *) erealloc(sa->Blocks, ++sa->num_blocks);
sa->current_block++;
block_init(&sa->Blocks[sa->current_block], (size > ALLOCATOR_BLOCK_SIZE) ? size : ALLOCATOR_BLOCK_SIZE);
retval = block_allocate(&sa->Blocks[sa->current_block], size);
return retval;
}
void static_allocator_destroy(StaticAllocator *sa)
{
zend_uint i;
for (i=0; i<sa->num_blocks; i++) {
block_free(&sa->Blocks[i]);
}
efree(sa->Blocks);
}
+45
View File
@@ -0,0 +1,45 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998-2000 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 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/0_92.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> |
+----------------------------------------------------------------------+
*/
#ifndef ZEND_STATIC_ALLOCATOR_H
#define ZEND_STATIC_ALLOCATOR_H
#define ALLOCATOR_BLOCK_SIZE 400000
/* Temporary */
typedef unsigned int zend_uint;
#define emalloc(s) malloc(s)
#define efree(p) free(p)
typedef struct _Block {
char *bp;
char *pos;
char *end;
} Block;
typedef struct _StaticAllocator {
Block *Blocks;
zend_uint num_blocks;
zend_uint current_block;
} StaticAllocator;
void static_allocator_init(StaticAllocator *sa);
char *static_allocator_allocate(StaticAllocator *sa, zend_uint size);
void static_allocator_destroy(StaticAllocator *sa);
#endif /* ZEND_STATIC_ALLOCATOR_H */
+4 -2
View File
@@ -61,7 +61,8 @@ ZEND_API void _zval_dtor(zval *zvalue ZEND_FILE_LINE_DC)
case IS_CONSTANT:
STR_FREE_REL(zvalue->value.str.val);
break;
case IS_ARRAY: {
case IS_ARRAY:
case IS_CONSTANT_ARRAY: {
ELS_FETCH();
if (zvalue->value.ht && (zvalue->value.ht != &EG(symbol_table))) {
@@ -125,7 +126,8 @@ ZEND_API int _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC)
}
zvalue->value.str.val = (char *) estrndup_rel(zvalue->value.str.val, zvalue->value.str.len);
break;
case IS_ARRAY: {
case IS_ARRAY:
case IS_CONSTANT_ARRAY: {
zval *tmp;
HashTable *original_ht = zvalue->value.ht;
ELS_FETCH();
+2 -2
View File
@@ -18,8 +18,8 @@
*/
#ifndef _VARIABLES_H
#define _VARIABLES_H
#ifndef ZEND_VARIABLES_H
#define ZEND_VARIABLES_H
ZEND_API int zend_print_variable(zval *var);
+1 -125
View File
@@ -1,125 +1 @@
/* This is the default configuration file to read -*- C -*- */
/* these are defined by automake */
#undef PACKAGE
#undef VERSION
#undef HAVE_LIBDL
#undef HAVE_STRUCT_FLOCK
#undef HAVE_TM_GMTOFF
#define CONFIGURATION_FILE_PATH "php.ini"
#define USE_CONFIG_FILE 1
#undef HAVE_DMALLOC
/* Some global constants defined by conigure */
#undef PHP_BUILD_DATE
#undef PHP_OS
#undef PHP_UNAME
/* define uint by configure if it is missed (QNX and BSD derived) */
#undef uint
/* define ulong by configure if it is missed (most probably is) */
#undef ulong
/* type check for in_addr_t */
#undef in_addr_t
/* Define if you have dirent.h but opendir() resides in libc rather than in libdir */
/* This will cause HAVE_DIRENT_H defined twice sometimes, but it should be problem */
#undef HAVE_DIRENT_H
/* Define if you have the resolv library (-lresolv). */
#undef HAVE_LIBRESOLV
/* Define if you have the pam library (-lpam). */
#define HAVE_LIBPAM 0
/* Define if you have the bind library (-lbind). */
#define HAVE_LIBBIND 0
/* Define if you have Netscape LDAP instead of umich ldap or openldap*/
#define HAVE_NSLDAP 0
/* Define if you want safe mode enabled by default. */
#define PHP_SAFE_MODE 0
/* Set to the path to the dir containing safe mode executables */
#define PHP_SAFE_MODE_EXEC_DIR /usr/local/php/bin
/* Define if PHP to setup it's own SIGCHLD handler */
#define PHP_SIGCHILD 0
/* Define if you want POST/GET/Cookie track variables by default */
#define PHP_TRACK_VARS 0
/* Undefine if you want stricter XML/SGML compliance by default */
/* (this disables "<?expression?>" by default) */
#define DEFAULT_SHORT_OPEN_TAG 1
/* Undefine if you do not want PHP by default to escape "'" */
/* in GET/POST/Cookie data */
#define MAGIC_QUOTES 1
/* Define both of these if you want the bundled REGEX library */
#define REGEX 0
#define HSREGEX 0
/* Define if you have and want to use libnsl */
#undef HAVE_LIBNSL
/* Define if you have and want to use libsocket */
#undef HAVE_LIBSOCKET
/* Define if you have the sendmail program available */
#define HAVE_SENDMAIL 0
/* Define if you are compiling PHP as an Apache module with mod_charset patch applied (aka Russian Apache)*/
#define USE_TRANSFER_TABLES 0
/* Define if you are compiling PHP as an fhttpd module */
#define FHTTPD 0
/* Define if your Apache creates an ap_config.h header file (only 1.3b6 and later) */
#define HAVE_AP_CONFIG_H 0
/* Define if your Apache has src/include/compat.h */
#define HAVE_OLD_COMPAT_H 0
/* Define if your Apache has src/include/ap_compat.h */
#define HAVE_AP_COMPAT_H 0
/* Define if you want to enable PHP RPC (experimental) */
#define PHP_RPC 0
/* Define if you want to prevent the CGI from working unless REDIRECT_STATUS is defined in the environment */
#define FORCE_CGI_REDIRECT 0
/* Define if you want to prevent the CGI from using path_info and path_translated */
#define DISCARD_PATH 0
/* Define if you want include() and other functions to be able to open
* http and ftp URLs as files.
*/
#define PHP_URL_FOPEN 0
/* Define if you have broken header files like SunOS 4 */
#define MISSING_FCLOSE_DECL 0
/* Define to compile PHP/Zend thread safe */
#undef ZTS
/* Define when compiling with Zeus support */
#undef WITH_ZEUS
/* Define if struct sockaddr contains the field sa_len */
#undef HAVE_SOCKADDR_SA_LEN
#undef BROKEN_SPRINTF
#if BROKEN_SPRINTF
#define sprintf php_sprintf
#endif
/* Leave this file alone */
+158 -47
View File
@@ -4,6 +4,91 @@ dnl This file contains local autoconf functions.
sinclude(dynlib.m4)
dnl PHP_EVAL_LIBLINE(LINE, SHARED-LIBADD)
dnl
dnl Use this macro, if you need to add libraries and or library search
dnl paths to the PHP build system which are only given in compiler
dnl notation.
dnl
AC_DEFUN(PHP_EVAL_LIBLINE,[
for ac_i in $1; do
case "$ac_i" in
-l*)
ac_ii=`echo $ac_i|cut -c 3-`
AC_ADD_LIBRARY($ac_ii,,$2)
;;
-L*)
ac_ii=`echo $ac_i|cut -c 3-`
AC_ADD_LIBPATH($ac_ii,$2)
;;
esac
done
])
dnl PHP_EVAL_INCLINE(LINE)
dnl
dnl Use this macro, if you need to add header search paths to the PHP
dnl build system which are only given in compiler notation.
dnl
AC_DEFUN(PHP_EVAL_INCLINE,[
for ac_i in $1; do
case "$ac_i" in
-I*)
ac_ii=`echo $ac_i|cut -c 3-`
AC_ADD_INCLUDE($ac_ii)
;;
esac
done
])
AC_DEFUN(PHP_READDIR_R_TYPE,[
dnl HAVE_READDIR_R is also defined by libmysql
AC_CHECK_FUNC(readdir_r,ac_cv_func_readdir_r=yes,ac_cv_func_readdir=no)
if test "$ac_cv_func_readdir_r" = "yes"; then
AC_CACHE_CHECK(for type of readdir_r, ac_cv_what_readdir_r,[
AC_TRY_RUN([
#define _REENTRANT
#include <sys/types.h>
#include <dirent.h>
main() {
DIR *dir;
char entry[sizeof(struct dirent)+257];
struct dirent *pentry = (struct dirent *) &entry;
dir = opendir("/");
if (!dir)
exit(1);
if (readdir_r(dir, (struct dirent *) entry, &pentry) == 0)
exit(0);
exit(1);
}
],[
ac_cv_what_readdir_r=POSIX
],[
AC_TRY_CPP([
#define _REENTRANT
#include <sys/types.h>
#include <dirent.h>
int readdir_r(DIR *, struct dirent *);
],[
ac_cv_what_readdir_r=old-style
],[
ac_cv_what_readdir_r=none
])
],[
ac_cv_what_readdir_r=none
])
])
case "$ac_cv_what_readdir_r" in
POSIX)
AC_DEFINE(HAVE_POSIX_READDIR_R,1,[whether you have POSIX readdir_r]);;
old-style)
AC_DEFINE(HAVE_OLD_READDIR_R,1,[whether you have old-style readdir_r]);;
esac
fi
])
AC_DEFUN(PHP_SHLIB_SUFFIX_NAME,[
PHP_SUBST(SHLIB_SUFFIX_NAME)
SHLIB_SUFFIX_NAME=so
@@ -104,7 +189,7 @@ no)
;;
esac
if test "$php_always_shared"; then
if test "$php_always_shared" = "yes"; then
ext_output="yes, shared"
ext_shared=yes
test "[$]$1" = "no" && $1=yes
@@ -164,7 +249,7 @@ EOF
])
AC_DEFUN(PHP_TIME_R_TYPE,[
AC_CACHE_CHECK(for *time_r type, ac_cv_time_r_type,[
AC_CACHE_CHECK(for type of reentrant time-related functions, ac_cv_time_r_type,[
AC_TRY_RUN([
#include <time.h>
#include <stdlib.h>
@@ -183,13 +268,13 @@ exit(1);
],[
ac_cv_time_r_type=hpux
],[
ac_cv_time_r_type=SUSV2
ac_cv_time_r_type=POSIX
],[
ac_cv_time_r_type=SUSV2
ac_cv_time_r_type=POSIX
])
])
if test "$ac_cv_time_r_type" = "hpux"; then
AC_DEFINE(PHP_HPUX_TIME_R,1,[Whether you have HP-SUX 10.x])
AC_DEFINE(PHP_HPUX_TIME_R,1,[Whether you have HP-UX 10.x])
fi
])
@@ -215,14 +300,17 @@ AC_DEFUN(PHP_MKDIR_P_CHECK,[
])
])
AC_DEFUN(PHP_FAST_GENERATE,[
AC_DEFUN(PHP_GEN_CONFIG_VARS,[
PHP_MKDIR_P_CHECK
echo creating config_vars.mk
> config_vars.mk
for i in $PHP_VAR_SUBST; do
eval echo "$i = \$$i" >> config_vars.mk
done
$SHELL $srcdir/build/fastgen.sh $srcdir $ac_cv_mkdir_p $PHP_FAST_OUTPUT_FILES
])
AC_DEFUN(PHP_GEN_MAKEFILES,[
$SHELL $srcdir/build/fastgen.sh $srcdir $ac_cv_mkdir_p $BSD_MAKEFILE $1
])
AC_DEFUN(PHP_TM_GMTOFF,[
@@ -232,7 +320,7 @@ AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff,
ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)])
if test "$ac_cv_struct_tm_gmtoff" = yes; then
AC_DEFINE(HAVE_TM_GMTOFF)
AC_DEFINE(HAVE_TM_GMTOFF,1,[whether you have tm_gmtoff in struct tm])
fi
])
@@ -244,9 +332,9 @@ AC_DEFUN(PHP_CONFIGURE_PART,[
])
AC_DEFUN(PHP_PROG_SENDMAIL,[
AC_PATH_PROG(PROG_SENDMAIL, sendmail, /usr/lib/sendmail, $PATH /usr/bin /usr/sbin /usr/etc /etc /usr/ucblib)
AC_PATH_PROG(PROG_SENDMAIL, sendmail, /usr/lib/sendmail, $PATH:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib)
if test -n "$PROG_SENDMAIL"; then
AC_DEFINE(HAVE_SENDMAIL)
AC_DEFINE(HAVE_SENDMAIL,1,[whether you have sendmail])
fi
])
@@ -292,7 +380,7 @@ AC_CACHE_CHECK(for struct flock,ac_cv_struct_flock,
])
)
if test "$ac_cv_struct_flock" = "yes" ; then
AC_DEFINE(HAVE_STRUCT_FLOCK, 1)
AC_DEFINE(HAVE_STRUCT_FLOCK, 1,[whether you have struct flock])
fi
])
@@ -329,7 +417,15 @@ dnl
AC_DEFUN(PHP_BUILD_THREAD_SAFE,[
enable_experimental_zts=yes
if test "$pthreads_working" != "yes"; then
AC_MSG_ERROR(ZTS currently requires working POSIX threads. Your system does not support this.)
AC_MSG_ERROR(ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads.)
fi
])
AC_DEFUN(PHP_REQUIRE_CXX,[
if test -z "$php_cxx_done"; then
AC_PROG_CXX
AC_PROG_CXXCPP
php_cxx_done=yes
fi
])
@@ -360,7 +456,9 @@ dnl
dnl execute code, if variable is not set in namespace
dnl
AC_DEFUN(AC_PHP_ONCE,[
unique=`echo $ac_n "$2$ac_c" | tr -cd a-zA-Z0-9`
changequote({,})
unique=`echo $2|sed 's/[^a-zA-Z0-9]/_/g'`
changequote([,])
cmd="echo $ac_n \"\$$1$unique$ac_c\""
if test -n "$unique" && test "`eval $cmd`" = "" ; then
eval "$1$unique=set"
@@ -386,18 +484,22 @@ AC_DEFUN(AC_EXPAND_PATH,[
])
dnl
dnl AC_ADD_LIBPATH(path)
dnl AC_ADD_LIBPATH(path[, shared-libadd])
dnl
dnl add a library to linkpath/runpath
dnl
AC_DEFUN(AC_ADD_LIBPATH,[
if test "$1" != "/usr/lib"; then
AC_EXPAND_PATH($1, ai_p)
AC_PHP_ONCE(LIBPATH, $ai_p, [
test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p"
LDFLAGS="$LDFLAGS -L$ai_p"
PHP_RPATHS="$PHP_RPATHS $ai_p"
])
if test "$ext_shared" = "yes" && test -n "$2"; then
$2="-R$1 -L$1 [$]$2"
else
AC_PHP_ONCE(LIBPATH, $ai_p, [
test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p"
LDFLAGS="$LDFLAGS -L$ai_p"
PHP_RPATHS="$PHP_RPATHS $ai_p"
])
fi
fi
])
@@ -432,17 +534,30 @@ AC_DEFUN(AC_ADD_INCLUDE,[
fi
])
AC_DEFUN(PHP_X_ADD_LIBRARY,[
ifelse($2,,$3="-l$1 [$]$3", $3="[$]$3 -l$1")
])
dnl
dnl AC_ADD_LIBRARY(library[, append])
dnl AC_ADD_LIBRARY(library[, append[, shared-libadd]])
dnl
dnl add a library to the link line
dnl
AC_DEFUN(AC_ADD_LIBRARY,[
AC_PHP_ONCE(LIBRARY, $1, [
if test "$1" != "c"; then
ifelse($#, 1, LIBS="-l$1 $LIBS", LIBS="$LIBS -l$1")
fi
])
case "$1" in
c|c_r|pthread*) ;;
*)
ifelse($3,,[
PHP_X_ADD_LIBRARY($1,$2,LIBS)
],[
if test "$ext_shared" = "yes"; then
PHP_X_ADD_LIBRARY($1,$2,$3)
else
AC_ADD_LIBRARY($1,$2)
fi
])
;;
esac
])
dnl
@@ -450,9 +565,7 @@ dnl AC_ADD_LIBRARY_DEFER(library[, append])
dnl
dnl add a library to the link line (deferred)
AC_DEFUN(AC_ADD_LIBRARY_DEFER,[
AC_PHP_ONCE(LIBRARY, $1, [
ifelse($#, 1, DLIBS="-l$1 $DLIBS", DLIBS="$DLIBS -l$1")
])
ifelse($#, 1, DLIBS="-l$1 $DLIBS", DLIBS="$DLIBS -l$1")
])
dnl
@@ -470,17 +583,13 @@ ifelse($3,,[
AC_ADD_LIBRARY($1)
],[
if test "$ext_shared" = "yes"; then
$3="-l$1 [$]$3"
if test -n "$2"; then
$3="-R$2 -L$2 -l$1 [$]$3"
else
$3="-l$1 [$]$3"
AC_ADD_LIBPATH($2,$3)
fi
else
if test -n "$2"; then
AC_ADD_LIBPATH($2)
fi
AC_ADD_LIBRARY($1)
fi
AC_ADD_LIBRARY_WITH_PATH($1,$2)
fi
])
])
@@ -505,7 +614,9 @@ dnl
AC_DEFUN(AC_CHECK_CC_OPTION,[
echo "main(){return 0;}" > conftest.$ac_ext
opt="$1"
var=`echo $ac_n "$opt$ac_c"|tr -c a-zA-Z0-9 _`
changequote({,})
var=`echo $opt|sed 's/[^a-zA-Z0-9]/_/g'`
changequote([,])
AC_MSG_CHECKING([if compiler supports -$1 really])
ac_php_compile="${CC-cc} -$opt -o conftest $CFLAGS $CPPFLAGS conftest.$ac_ext 2>&1"
if eval $ac_php_compile 2>&1 | egrep "$opt" > /dev/null 2>&1 ; then
@@ -527,11 +638,11 @@ AC_DEFUN(PHP_REGEX,[
if test "$REGEX_TYPE" = "php"; then
REGEX_LIB=regex/libregex.la
REGEX_DIR=regex
AC_DEFINE(HSREGEX)
AC_DEFINE(REGEX,1)
AC_DEFINE(HSREGEX,1,[ ])
AC_DEFINE(REGEX,1,[ ])
PHP_FAST_OUTPUT(regex/Makefile)
elif test "$REGEX_TYPE" = "system"; then
AC_DEFINE(REGEX,0)
AC_DEFINE(REGEX,0,[ ])
fi
AC_MSG_CHECKING(which regex library to use)
@@ -548,10 +659,10 @@ dnl
AC_DEFUN(AC_MISSING_FCLOSE_DECL,[
AC_MSG_CHECKING([for fclose declaration])
AC_TRY_COMPILE([#include <stdio.h>],[int (*func)() = fclose],[
AC_DEFINE(MISSING_FCLOSE_DECL,0)
AC_DEFINE(MISSING_FCLOSE_DECL,0,[ ])
AC_MSG_RESULT(ok)
],[
AC_DEFINE(MISSING_FCLOSE_DECL,1)
AC_DEFINE(MISSING_FCLOSE_DECL,1,[ ])
AC_MSG_RESULT(missing)
])
])
@@ -570,9 +681,9 @@ AC_DEFUN(AC_BROKEN_SPRINTF,[
])
])
if test "$ac_cv_broken_sprintf" = "yes"; then
AC_DEFINE(BROKEN_SPRINTF, 1)
AC_DEFINE(PHP_BROKEN_SPRINTF, 1, [ ])
else
AC_DEFINE(BROKEN_SPRINTF, 0)
AC_DEFINE(PHP_BROKEN_SPRINTF, 0, [ ])
fi
])
@@ -717,13 +828,13 @@ AC_DEFUN(AC_SOCKADDR_SA_LEN,[
#include <sys/socket.h>],
[struct sockaddr s; s.sa_len;],
[ac_cv_sockaddr_sa_len=yes
AC_DEFINE(HAVE_SOCKADDR_SA_LEN)],
AC_DEFINE(HAVE_SOCKADDR_SA_LEN,1,[ ])],
[ac_cv_sockaddr_sa_len=no])
])
])
dnl ## PHP_AC_OUTPUT(file)
dnl ## PHP_OUTPUT(file)
dnl ## adds "file" to the list of files generated by AC_OUTPUT
dnl ## This macro can be used several times.
AC_DEFUN(PHP_OUTPUT,[
@@ -764,7 +875,7 @@ int main(void) {
ac_cv_ebcdic="no"
])])
if test "$ac_cv_ebcdic" = "yes"; then
AC_DEFINE(CHARSET_EBCDIC,, [Define if system uses EBCDIC])
AC_DEFINE(CHARSET_EBCDIC,1, [Define if system uses EBCDIC])
fi
])
+13 -21
View File
@@ -1,31 +1,22 @@
/* -*- C -*-
+----------------------------------------------------------------------+
| PHP HTML Embedded Scripting Language Version 3.0 |
| PHP version 4.0 |
+----------------------------------------------------------------------+
| Copyright (c) 1997,1998 PHP Development Team (See Credits file) |
| Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+----------------------------------------------------------------------+
| This program is free software; you can redistribute it and/or modify |
| it under the terms of one of the following licenses: |
| |
| A) the GNU General Public License as published by the Free Software |
| Foundation; either version 2 of the License, or (at your option) |
| any later version. |
| |
| B) the PHP License as published by the PHP Development Team and |
| included in the distribution in the file: LICENSE |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of both licenses referred to here. |
| If you did not, or have any questions about PHP licensing, please |
| contact core@php.net. |
| 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: Stig Sæther Bakken <ssb@fast.no> |
+----------------------------------------------------------------------+
*/
*/
/* $Id$ */
#define CONFIGURE_COMMAND "@CONFIGURE_COMMAND@"
#define PHP_ADA_INCLUDE ""
@@ -88,3 +79,4 @@
#define PHP_VELOCIS_INCLUDE ""
#define PHP_VELOCIS_LIBS ""
#define PHP_EXTENSION_DIR "@EXTENSION_DIR@"
#define PHP_INCLUDE_PATH "@INCLUDE_PATH@"
+34
View File
@@ -0,0 +1,34 @@
#! /bin/sh
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997, 1998, 1999, 2000 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: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# $Id$
#
# cwd must be top_srcdir
test -f build/bsd_makefile || exit 2
test -f bsd_converted && exit 0
tmpfile=`mktemp /tmp/bsd_makefile.XXXXXX 2>/dev/null` || tmpfile="tmp.$$"
for i in build/*.mk; do
sed 's/^include \(.*\)/.include "\1"/' $i >$tmpfile \
&& cp $tmpfile $i
done
rm -f $tmpfile
touch bsd_converted
exit 0
+16 -22
View File
@@ -1,28 +1,22 @@
# Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997, 1998, 1999, 2000 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: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# Redistribution and use in source and binary forms, with or without
# modification, are 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.
#
# THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``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 REGENTS 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.
#
##############################################################################
# $Id$
#
#
# Makefile to generate build tools
#
+16 -22
View File
@@ -1,27 +1,21 @@
# Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997, 1998, 1999, 2000 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: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# Redistribution and use in source and binary forms, with or without
# modification, are 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.
#
# THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``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 REGENTS 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.
# $Id$
#
##############################################################################
# $Id$
include generated_lists
+20 -1
View File
@@ -1,4 +1,23 @@
#! /bin/sh
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997, 1998, 1999, 2000 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: Stig Bakken <ssb@fast.no> |
# | Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# $Id: buildcheck.sh,v 1.3 2000-08-20 05:39:37 sas Exp $
#
echo "buildconf: checking installation..."
@@ -48,7 +67,7 @@ exit 1
fi
lt_version=`echo $lt_pversion|sed -e 's/\([a-z]*\)$/.\1/'`
IFS=.; set $lt_version; IFS=' '
if test "$1" -gt "1" || test "$2" -gt "3" || test "$2" = "3" -a "$3" -ge "3"
if test "$1" -gt "1" || test "$2" -gt "3" || test "$2" = "3" && (test "$3" = "c" || test "$3" -ge "3")
then
echo "buildconf: libtool version $lt_pversion (ok)"
else
+19
View File
@@ -1,3 +1,22 @@
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997, 1998, 1999, 2000 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: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# $Id$
#
all: all-recursive
include $(builddir)/libs.mk
+48 -33
View File
@@ -1,29 +1,22 @@
#! /bin/sh
#
# Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997, 1998, 1999, 2000 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: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# Redistribution and use in source and binary forms, with or without
# modification, are 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.
#
# THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``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 REGENTS 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.
#
##############################################################################
# $Id: fastgen.sh,v 1.6 2000-05-12 07:37:42 sas Exp $
# $Id: fastgen.sh,v 1.9 2000-09-26 11:19:38 sas Exp $
#
srcdir=$1
@@ -32,6 +25,9 @@ shift
mkdir_p=$1
shift
bsd_makefile=$1
shift
top_srcdir=`(cd $srcdir; pwd)`
top_builddir=`pwd`
@@ -41,21 +37,40 @@ else
mkdir_p="$top_srcdir/helpers/mkdir.sh"
fi
for makefile in $@; do
echo "creating $makefile"
# portable dirname
dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'`
$mkdir_p "$dir/"
if test "$bsd_makefile" = "yes"; then
(cd $top_srcdir; ./build/bsd_makefile)
(cat <<EOF
for makefile in $@; do
echo "creating $makefile"
dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'`
$mkdir_p "$dir/"
cat - $top_srcdir/$makefile.in <<EOF |sed 's/^include \(.*\)/.include "\1"/' >$makefile
top_srcdir = $top_srcdir
top_builddir = $top_builddir
srcdir = $top_srcdir/$dir
builddir = $top_builddir/$dir
VPATH = $top_srcdir/$dir
EOF
)| cat - $top_srcdir/$makefile.in > $makefile
test -z "$dir" || touch $dir/.deps
done
test -z "$dir" && dir=.
touch $dir/.deps
done
else
for makefile in $@; do
echo "creating $makefile"
dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'`
$mkdir_p "$dir/"
cat - $top_srcdir/$makefile.in <<EOF >$makefile
top_srcdir = $top_srcdir
top_builddir = $top_builddir
srcdir = $top_srcdir/$dir
builddir = $top_builddir/$dir
VPATH = $top_srcdir/$dir
EOF
test -z "$dir" && dir=.
touch $dir/.deps
done
fi
+16 -23
View File
@@ -1,30 +1,23 @@
# Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997, 1998, 1999, 2000 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: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# Redistribution and use in source and binary forms, with or without
# modification, are 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.
#
# THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``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 AUTHOR 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.
#
##############################################################################
# $Id$
#
LTLIBRARY_OBJECTS = $(LTLIBRARY_SOURCES:.c=.lo)
LTLIBRARY_OBJECTS = $(LTLIBRARY_SOURCES:.c=.lo) $(LTLIBRARY_OBJECTS_X)
$(LTLIBRARY_NAME): $(LTLIBRARY_OBJECTS) $(LTLIBRARY_DEPENDENCIES)
$(LINK) $(LTLIBRARY_LDFLAGS) $(LTLIBRARY_OBJECTS) $(LTLIBRARY_LIBADD)
+15 -22
View File
@@ -1,26 +1,19 @@
# Copyright (c) 1999 Sascha Schumann. All rights reserved.
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997, 1998, 1999, 2000 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: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# Redistribution and use in source and binary forms, with or without
# modification, are 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.
#
# THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``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 REGENTS 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.
#
##############################################################################
# $Id$
#
+75
View File
@@ -0,0 +1,75 @@
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 2000 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: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# $Id$
#
# Usage:
#
# echo top_srcdir top_builddir srcdir CPP [CPP-ARGS] filenames | \
# awk -f mkdep.awk > dependencies
{
top_srcdir=$1
top_builddir=$2
srcdir=$3
cmd=$4
for (i = 5; i <= NF; i++) {
if (match($i, "^-[A-Z]") == 0)
break;
cmd=cmd " " $i
}
dif=i-1
for (; i <= NF; i++)
filenames[i-dif]=$i
no_files=NF-dif
for(i = 1; i <= no_files; i++) {
if (system("test -r " filenames[i]) != 0)
continue
target=filenames[i]
sub(srcdir "/", "", target)
target2=target
sub("\.(c|cpp)$", ".lo", target);
sub("\.(c|cpp)$", ".slo", target2);
for (e in used)
delete used[e]
cmdx=cmd " " filenames[i]
done=0
while ((cmdx | getline) > 0) {
if (match($0, "^# [0-9]* \".*\.h\"") != 0) {
if (sub(top_srcdir, "$(top_srcdir)", $3) == 0)
sub(top_builddir, "$(top_builddir)", $3)
if (substr($3,2,1) != "/" && used[$3] != 1) {
if (done == 0)
printf(target " " target2 ":")
done=1
printf(" \\\n\t" substr($3,2,length($3)-2))
used[$3] = 1;
}
}
}
if (done == 1)
print "\n"
}
}
-91
View File
@@ -1,91 +0,0 @@
#!/usr/bin/perl
#
# $Id$
#
# Created: Thu Aug 15 11:57:33 1996 too
# Last modified: Mon Dec 27 09:23:56 1999 too
#
# Copyright (c) 1996-1999 Tomi Ollila. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are 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.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 REGENTS 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.
die "Usage: mkdep CPP-command [CPP options] file1 [file2...]\n"
if ($#ARGV < 1);
$cmdl = shift(@ARGV);
$cmdl = "$cmdl " . shift (@ARGV) while ($ARGV[0] =~ /^-[A-Z]/);
while ($file = shift(@ARGV))
{
$file =~ s/\.o$/.c/;
open(F, "$cmdl $file|");
&parseout;
close(F);
}
sub initinit
{
%used = ();
$of = $file;
$of =~ s/\.c$/.lo/;
$str = "$of:\t$file";
$len = length $str;
}
sub initstr
{
$str = "\t";
$len = length $str;
}
sub parseout
{
&initinit;
while (<F>)
{
next unless (/^# [0-9]* "(.*\.h)"/);
next if ($1 =~ /^\//);
next if $used{$1};
$used{$1} = 1;
$nlen = length($1) + 1;
if ($len + $nlen > 72)
{
print $str, "\\\n";
&initstr;
$str = $str . $1;
}
else { $str = $str . " " . $1; }
$len += $nlen;
}
print $str, "\n";
}
+15 -22
View File
@@ -1,26 +1,19 @@
# Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997, 1998, 1999, 2000 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: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# Redistribution and use in source and binary forms, with or without
# modification, are 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.
#
# THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``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 REGENTS 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.
#
##############################################################################
# $Id$
#
+20 -64
View File
@@ -1,70 +1,23 @@
# Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997, 1998, 1999, 2000 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: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# Redistribution and use in source and binary forms, with or without
# modification, are 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.
#
# THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``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 REGENTS 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.
#
##############################################################################
# $Id$
#
include $(top_builddir)/config_vars.mk
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --mode=link $(CCLD) $(CFLAGS) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@
mkinstalldirs = $(top_srcdir)/build/shtool mkdir -p
INSTALL = $(top_srcdir)/build/shtool install -c
INSTALL_DATA = $(INSTALL) -m 644
SHARED_COMPILE = $(SHARED_LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -c $< && touch $@
DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I$(top_builddir)
moduledir = $(EXTENSION_DIR)
.SUFFIXES:
.SUFFIXES: .slo .c .lo .o .s .y .l
.c.o:
$(COMPILE) -c $<
.s.o:
$(COMPILE) -c $<
.c.lo:
$(PHP_COMPILE)
.s.lo:
$(PHP_COMPILE)
.c.slo:
$(SHARED_COMPILE)
.y.c:
$(YACC) $(YFLAGS) $< && mv y.tab.c $*.c
if test -f y.tab.h; then \
if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \
else :; fi
.l.c:
$(LEX) $(LFLAGS) $< && mv $(LEX_OUTPUT_ROOT).c $@
include $(top_srcdir)/build/rules_common.mk
all: all-recursive
install: install-recursive
@@ -88,7 +41,7 @@ install-p: $(targets) $(install_targets)
distclean-p depend-p clean-p:
depend: depend-recursive
test "`echo *.c`" = '*.c' || perl $(top_srcdir)/build/mkdep.perl $(CPP) $(INCLUDES) $(EXTRA_INCLUDES) *.c > $(builddir)/.deps
@echo $(top_srcdir) $(top_builddir) $(srcdir) $(CPP) $(INCLUDES) $(EXTRA_INCLUDES) $(DEFS) $(CPPFLAGS) $(srcdir)/*.c *.c | $(AWK) -f $(top_srcdir)/build/mkdep.awk > $(builddir)/.deps || true
clean: clean-recursive clean-x
@@ -100,6 +53,9 @@ distclean: distclean-recursive clean-x
rm -f config.cache config.log config.status config_vars.mk libtool \
php_config.h stamp-h Makefile build-defs.h php4.spec libphp4.module
test: $(top_builddir)/php
@$(top_builddir)/php -f $(top_srcdir)/run-tests.php `pwd`
include $(builddir)/.deps
.PHONY: all-recursive clean-recursive install-recursive \
+76
View File
@@ -0,0 +1,76 @@
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997, 1998, 1999, 2000 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: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# $Id$
#
include $(top_builddir)/config_vars.mk
COMMON_FLAGS = $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS)
COMPILE = $(CC) $(COMMON_FLAGS) $(CFLAGS) $(EXTRA_CFLAGS)
CXX_COMPILE = $(CXX) $(COMMON_FLAGS) $(CXXFLAGS) $(EXTRA_CXXFLAGS)
SHARED_COMPILE = $(SHARED_LIBTOOL) --mode=compile $(COMPILE) -c $< && touch $@
CXX_SHARED_COMPILE = $(SHARED_LIBTOOL) --mode=compile $(CXX_COMPILE) -c $< && touch $@
LINK = $(LIBTOOL) --mode=link $(COMPILE) $(LDFLAGS) -o $@
mkinstalldirs = $(top_srcdir)/build/shtool mkdir -p
INSTALL = $(top_srcdir)/build/shtool install -c
INSTALL_DATA = $(INSTALL) -m 644
DEFS = -I. -I$(srcdir) -I$(top_builddir) -I$(top_builddir)/main
moduledir = $(EXTENSION_DIR)
CXX_SUFFIX = .cpp
.SUFFIXES:
.SUFFIXES: .slo .c $(CXX_SUFFIX) .lo .o .s .y .l
.c.o:
$(COMPILE) -c $<
$(CXX_SUFFIX).o:
$(CXX_COMPILE) -c $<
.s.o:
$(COMPILE) -c $<
.c.lo:
$(PHP_COMPILE)
$(CXX_SUFFIX).lo:
$(CXX_PHP_COMPILE)
.s.lo:
$(PHP_COMPILE)
.c.slo:
$(SHARED_COMPILE)
$(CXX_SUFFIX).slo:
$(CXX_SHARED_COMPILE)
.y.c:
$(YACC) $(YFLAGS) $< && mv y.tab.c $*.c
if test -f y.tab.h; then \
if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \
else :; fi
.l.c:
$(LEX) $(LFLAGS) $< && mv $(LEX_OUTPUT_ROOT).c $@
+17 -63
View File
@@ -1,69 +1,23 @@
# Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997, 1998, 1999, 2000 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: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# Redistribution and use in source and binary forms, with or without
# modification, are 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.
#
# THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``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 REGENTS 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.
#
##############################################################################
# $Id$
#
include $(top_builddir)/config_vars.mk
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --mode=link $(CCLD) $(CFLAGS) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@
mkinstalldirs = $(top_srcdir)/build/shtool mkdir -f -p
INSTALL = $(top_srcdir)/build/shtool install -c
INSTALL_DATA = $(INSTALL) -m 644
SHARED_COMPILE = $(SHARED_LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -c $< && touch $@
DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I$(top_builddir)
moduledir = $(EXTENSION_DIR)
.SUFFIXES:
.SUFFIXES: .slo .c .lo .o .s .y .l
.c.o:
$(COMPILE) -c $<
.s.o:
$(COMPILE) -c $<
.c.lo:
$(PHP_COMPILE)
.s.lo:
$(PHP_COMPILE)
.c.slo:
$(SHARED_COMPILE)
.y.c:
$(YACC) $(YFLAGS) $< && mv y.tab.c $*.c
if test -f y.tab.h; then \
if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \
else :; fi
.l.c:
$(LEX) $(LFLAGS) $< && mv $(LEX_OUTPUT_ROOT).c $@
include $(top_srcdir)/build/rules_common.mk
install_targets = install-modules
@@ -89,7 +43,7 @@ install-p: $(targets) $(install_targets)
distclean-p depend-p clean-p:
depend: depend-recursive
test "`echo *.c`" = '*.c' || perl $(top_srcdir)/build/mkdep.perl $(CPP) $(INCLUDES) $(EXTRA_INCLUDES) *.c > $(builddir)/.deps
@echo $(top_srcdir) $(top_builddir) $(srcdir) $(CPP) $(INCLUDES) $(EXTRA_INCLUDES) $(DEFS) $(CPPFLAGS) $(srcdir)/*.c *.c | $(AWK) -f $(top_srcdir)/build/mkdep.awk > $(builddir)/.deps || true
clean: clean-recursive clean-x
+34
View File
@@ -0,0 +1,34 @@
#! /bin/sh
# +----------------------------------------------------------------------+
# | PHP version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997, 1998, 1999, 2000 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: Sascha Schumann <sascha@schumann.cx> |
# +----------------------------------------------------------------------+
#
# $Id$
#
# cwd must be top_srcdir
test -f build/sysv_makefile || exit 2
test -f bsd_converted || exit 1
tmpfile=`mktemp /tmp/sysv_makefile.XXXXXX` || tmpfile="tmp.$$"
for i in build/*.mk; do
sed 's/^\.include "\(.*\)"/include \1/' $i >$tmpfile \
&& cp $tmpfile $i
done
rm -f $tmpfile
rm bsd_converted
exit 0
Loaded 100 of 833 files, more files were not shown because too many files have changed in this diff. Show more