Compare commits

..
Author SHA1 Message Date
SVN Migration c688aa97f3 This commit was manufactured by cvs2svn to create tag 'php_4_0b3'. 1999-11-19 15:06:58 +00:00
Stig Bakken 87d6372a14 final news update before 4.0b3 1999-11-16 15:58:38 +00:00
Stig Bakken bb6dacfb69 final changelog update before 4.0b3 1999-11-16 15:52:32 +00:00
Stig Bakken 65557ffe88 4.0b3 coming up 1999-11-16 15:37:31 +00:00
dca71900c1 ChangeLog update 1999-11-16 02:08:50 +00:00
Andrei Zmievski c1e3f5cb17 cleaning up 1999-11-15 14:35:08 +00:00
6c51d44141 ChangeLog update 1999-11-15 02:08:54 +00:00
30cfeece94 NEWS update 1999-11-15 02:08:51 +00:00
Sascha Schumann 897127d44a (php_minit_mcrypt): Also allow never versions of mcrypt 1999-11-15 00:27:47 +00:00
Sascha Schumann d019ed533f (php_minit_mhash): Don't use REGISTER_LONG_CONSTANT macro, because we
don't have a fixed size array of chars (this used to work nevertheless).
1999-11-15 00:26:35 +00:00
Sascha Schumann b85f2cba43 (PHP mhash): don't segfault, if mhash_end() returns NULL 1999-11-14 23:11:31 +00:00
Sascha Schumann 13582b4fe2 Check for db1/ndbm.h and use it in db. Fixes #2647 1999-11-14 23:03:45 +00:00
Andi Gutmans 25c56d15cd - Fixing warnings in regex 1999-11-14 20:13:54 +00:00
Thies C. Arntzen 2b08dfec28 (PHP k[r]sort) now use compare_function from libzend to be consistent with the language-core. 1999-11-14 19:59:52 +00:00
Andi Gutmans f3bcc012c6 - Remove ISAPI project from main dir as it's been copied to sapi/isapi 1999-11-14 19:46:31 +00:00
Thies C. Arntzen 6755a85a38 clearify 1999-11-14 19:44:29 +00:00
Thies C. Arntzen 4127b34a0a @- ucfirst()/ucwords() no longer modify arg1. (Thies)
(PHP ucfirst,ucwords) no longer modify arg1
1999-11-14 17:20:56 +00:00
Thies C. Arntzen f2b0c70512 @- Fixed strtr() not to modify arg1. (Thies)
(PHP strtr) no longer modifies arg1.
1999-11-14 15:34:50 +00:00
Danny Heijl 2327b6b954 (ext/informix) Added WIN32 build files for informix driver
and make it compile with ZTS
@ -Added Win32 build files for Informix driver
@  and make it compile with ZTS (danny)
1999-11-14 12:55:36 +00:00
Stig Bakken 5f8f410e51 @Added tmpfile() function (Stig)
Removed the mkstemp stuff and added tmpfile() function instead.
1999-11-14 11:05:37 +00:00
Andi Gutmans 4ebf7b85ad - Fix comment as to Joey's findings 1999-11-14 10:30:39 +00:00
db59169015 ChangeLog update 1999-11-14 02:08:53 +00:00
Andrei Zmievski c898d87aad These are inserted automatically now. 1999-11-13 20:47:33 +00:00
Andrei Zmievski 62eeb9278c It's in array.c now. 1999-11-13 20:32:49 +00:00
Andrei Zmievski 438addf331 Split array functions into separate module. 1999-11-13 20:31:54 +00:00
Sascha Schumann afc9e1257b Suck in prototypes correctly with applied aliases
(otherwise php_reg* would not be prototyped)
1999-11-13 18:33:28 +00:00
Andi Gutmans d35ea24fc0 - Fix crash with string offset assignments. 1999-11-13 18:11:34 +00:00
Andi Gutmans 3c1b362235 - Make Win32 compile again 1999-11-13 18:03:07 +00:00
Sascha Schumann 677bf03f07 Allow --with-apxs and --with-regex=apache 1999-11-13 17:29:43 +00:00
Sascha Schumann bcb2214e99 Improve regex library selection. It lets user specify whether they want
system, apache, or php's regex library by using the --with-regex option.
"php" is the default; if you use --with-apache in combination with
Apache 1.3.x, the default is "apache".
1999-11-13 16:51:33 +00:00
Sascha Schumann c166a6fb83 Remove libtool targets 1999-11-13 16:04:56 +00:00
Sascha Schumann 117ebf3ca6 - remove extra CPPFLAGS from top-level Makefile
- HSREGEX defaults to what the user wants, but can be changed now internally
1999-11-13 13:27:49 +00:00
Sascha Schumann 942c0b3521 Export CPPFLAGS to propagate additional flags 1999-11-13 12:55:47 +00:00
Sascha Schumann 194d75c3a8 Fix typo (escape sign was one off) 1999-11-13 12:51:25 +00:00
Sascha Schumann c810659379 preparing 4.0b3-RC5 1999-11-13 12:48:57 +00:00
Sascha Schumann 3dc7757a99 Remove the extra INCLUDES line from most automake Mafiles. This is not
necessary, because we can change the value of INCLUDES globally in one
place (configure.in).

Also add two defines in thread-safe mode
(_REENTRANT and POSIX_PTHREAD_SEMANTICS)
1999-11-13 12:41:09 +00:00
Sascha Schumann 7dd7f38003 (AC_EXPAND_PATH) Expand relative paths completely 1999-11-13 12:38:23 +00:00
e82ad7e9c3 ChangeLog update 1999-11-13 02:08:56 +00:00
64070d9474 NEWS update 1999-11-13 02:08:53 +00:00
Sascha Schumann ceae3847b8 Enable selective regex library compilation. 1999-11-12 20:56:30 +00:00
Sascha Schumann 6f57224890 upgrade regex library to alpha3.8
@- Upgraded regex library to alpha3.8 (Sascha)
1999-11-12 20:27:52 +00:00
Thies C. Arntzen e20e9786b3 added missing function-alias 1999-11-12 17:05:57 +00:00
Thies C. Arntzen d64e09a322 oops, didn't mean to activate this! 1999-11-12 14:34:50 +00:00
Thies C. Arntzen e61fea3029 @- Fixed selecting nested-tables in OCI8. (Thies)
fixed mested-tables again (broke it when resourcified the driver)
1999-11-12 14:31:01 +00:00
d8d8b30972 ChangeLog update 1999-11-12 02:08:57 +00:00
ea3d47b804 NEWS update 1999-11-12 02:08:54 +00:00
Rasmus Lerdorf 4a22643375 # Add some ext's here 1999-11-11 21:45:59 +00:00
Thies C. Arntzen 639354357f @- RFC-854 fix for internal FTP-Code. Commands have to end in "\r\n" (Thies)
(PHP fopen) commands send to a FTP-server need to end in "\r\n" (RFC 854)
1999-11-11 13:49:42 +00:00
78e6e79a65 ChangeLog update 1999-11-11 02:08:57 +00:00
Frank M. Kromann 3581f0d037 Fixing the use of mssql.textsize in pconnect() 1999-11-10 19:58:07 +00:00
Rasmus Lerdorf 7a4e1a9b0f # Improve the GD lib detection when GD is on the ld_path and it is
# configure using just --with-gd
1999-11-10 19:22:35 +00:00
Rasmus Lerdorf 2de9baf655 This arg is optional 1999-11-10 18:57:19 +00:00
Stig Bakken 6e4114daf0 "import" libtool file preservation code from build.mk 1999-11-10 15:26:39 +00:00
Stig Bakken 044789447c Shut up warning from automake. 1999-11-10 13:12:30 +00:00
Rasmus Lerdorf 392659fabe # Fix comments 1999-11-10 05:50:20 +00:00
Andrei Zmievski f3fb441979 Remove duplicates. 1999-11-10 05:04:56 +00:00
3f1a9fd706 ChangeLog update 1999-11-10 02:08:58 +00:00
ab5c4e2230 NEWS update 1999-11-10 02:08:55 +00:00
Sam Ruby 2cc9f1d377 add Java and MSDev outputs 1999-11-10 00:48:53 +00:00
Frank M. Kromann cc5304a9d9 Adding default mssql ini-setings 1999-11-09 20:58:43 +00:00
Stig Bakken 45c254d89c #if -> #ifdef changes for the ODBC extension (for consistency) 1999-11-09 19:53:38 +00:00
Thies C. Arntzen f6f74737d3 IRIX ld likes this order better 1999-11-09 19:48:56 +00:00
Sascha Schumann 5bb017f6d4 Move only, if the file exists. 1999-11-09 18:18:16 +00:00
Sascha Schumann 16ea76a880 automake overwrites libtool's files, if
- --add-missing was used
- *_LTLIBRARIES targets are used

Thus, we preserve our customized files while automake runs
1999-11-09 18:06:58 +00:00
Sascha Schumann e07220a006 Add libtool helper files 1999-11-09 18:04:17 +00:00
Sam Ruby 5a7943c9ed add mergesort into build 1999-11-09 17:37:35 +00:00
Stig Bakken a5317327c7 - substitute JAVA_LFLAGS (not set, but used in libphp_java_la_LIBADD)
- add .cvsignore file
1999-11-09 17:32:05 +00:00
Stig Bakken ef941dd700 4.0b3-RC4 1999-11-09 17:03:46 +00:00
Stig Bakken 2204607b10 Preserve the CVS versions of ltconfig/ltmain.sh during makedist.
#This is a temporary fix!
1999-11-09 16:57:26 +00:00
Rasmus Lerdorf 5c28619f51 Better lib detection for ucd-snmp 1999-11-09 16:01:31 +00:00
Sam Ruby 751e5d15f9 location of output.c moved. 1999-11-09 16:01:30 +00:00
Rasmus Lerdorf 20c9a79432 Find ucd-snmp include files more intelligently 1999-11-09 15:55:37 +00:00
Stig Bakken fd056d0c01 Clean up ODBC HAVE_XXX symbols, compile fixes for OpenLink and Solid.
#The Solid support still does not link, though (looks like a side-effect of
#the way the Solid libs are named and our stubborn friend libtool).
#This can wait until after 4.0b3.
1999-11-09 14:28:59 +00:00
Sascha Schumann a4ff16dd68 - set default path for cookie to the root directory ("/")
- complete session documentation in php.ini-dist
1999-11-09 14:27:56 +00:00
Sam Ruby eb231bb180 add java 1999-11-09 14:21:18 +00:00
Sascha Schumann 0c2e3e4e7d Include proper header files (replacement functions were not used). 1999-11-09 13:57:11 +00:00
Stig Bakken a14d96ef72 Fix OpenLink ODBC support
@Fix OpenLink ODBC support (Stig)
1999-11-09 13:31:16 +00:00
Stig Bakken 9e1cfb4f6e Bump version to 4.0b3-RC3.
# We release RC2 just minutes before Sam Ruby commits his Java extension.
# What timing!
1999-11-09 12:20:34 +00:00
Sam Ruby d17a12319f @ Added Zend OO syntax overloading support for Java components
#
# My lawyer made me do this:
#
Users of PHP are hereby granted a non-exclusive, irrevocable, world-wide,
royalty-free, non-transferable license to use, execute, prepare derivative
works of, and distribute (internally and externally, and including derivative
works) the code accompanying this license as part of, and integrated into PHP.
WARRANTY OF ANY KIND EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTY OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
AND ANY WARRANTY OF NON-INFRINGEMENT.  THE ENTIRE RISK ARISING OUT OF THE USE
OR PERFORMANCE OF THIS CODE REMAINS WITH USERS OF PHP.  The owner of this code
represents and warrants that it is legally entitled to grant the above license.
1999-11-09 12:02:22 +00:00
Stig Bakken 60766eff5a Makedist can now be run from outside the CVS tree. 1999-11-09 11:56:27 +00:00
Stig Bakken fdc6d630db @Fix min/max behaviour (Thies)
#Andrei: I left the convert_to_long() in there, it doesn't really make
#much of a difference.
1999-11-09 07:59:50 +00:00
86418fde5b ChangeLog update 1999-11-09 02:09:01 +00:00
e95fe291d4 NEWS update 1999-11-09 02:08:58 +00:00
Jakub Skopal ce8e31be71 "sybase" is definitelly six characters long :-) 1999-11-08 20:57:59 +00:00
Stig Bakken ecf83739f4 Cleaned up makedist a bit more.
# Also changed 4.0B3-RC2 to 4.0b3-RC2.  I don't see why we should start
# using capital letters in 4.0.
1999-11-08 16:17:53 +00:00
Stig Bakken 9542dbaf54 ignore distribution files 1999-11-08 14:41:57 +00:00
Sascha Schumann 7bc251058a Add libtool files to CVS. Advantages:
- PHP-specific changes are easier to maintain
- it removes one dependency for users (i.e. GNU vs. FreeBSD ports)

I have not removed the libtool check in buildconf, since libzend/TSRM still
depend on a local version of libtool.
1999-11-08 11:04:14 +00:00
Sascha Schumann b87228e491 Remove prototype. The prototype was not necessary for UCD SNMP 3.5.3, and
broke the build for UCD SNMP 4.0.1.
1999-11-08 10:33:06 +00:00
Stig Bakken 63d47b7735 (PHP tempnam) now uses mkstemp() if available
@- tempnam() now uses mkstemp() if available (Stig)
1999-11-08 09:18:57 +00:00
d1ecda53b7 ChangeLog update 1999-11-08 02:09:00 +00:00
Sascha Schumann e5983e9ef5 (php_ns_request_ctor) enable HTTP Access Authentication
(php_ns_hash_environment) supply PATH_TRANSLATED to scripts
1999-11-07 13:16:14 +00:00
880d7666ab ChangeLog update 1999-11-07 02:09:04 +00:00
c2e062c843 NEWS update 1999-11-07 02:09:00 +00:00
Sascha Schumann 14a870e940 - limit find to PHP's automake Makefiles
- check whether patches were applied correctly
1999-11-06 13:05:14 +00:00
Sascha Schumann 9738fdff44 Disable auto_start until we find a way to access the necessary data fields. 1999-11-06 10:14:36 +00:00
Zeev Suraski 512f4519c6 Version update 1999-11-06 10:06:37 +00:00
Zeev Suraski 0700ad3417 - Win32 fixes
- COM module improvements from Boris Wedl
1999-11-06 10:01:55 +00:00
Thies C. Arntzen c6b05b2e6b (PHP var_dump, serialize) now use php.ini's precision size when displying/serializing doubles
@- serialize() and var_dump() now honor the precision as set in php.ini
@  for doubles. (Thies)
1999-11-06 08:16:25 +00:00
b1f13fcc35 ChangeLog update 1999-11-06 02:09:09 +00:00
abac416be7 NEWS update 1999-11-06 02:09:06 +00:00
Rasmus Lerdorf 84f8583426 We need to use mysql_field_count() instead of mysql_num_fields() if
we are using MySQL 3.22.24 or newer when we want to check a mysql struct
instead of a result struct.  The reference is here:
 http://www.mysql.com/Manual_chapter/manual_Clients.html#mysql_num_fields
1999-11-05 21:43:53 +00:00
Sam Ruby d5233c482b configuration failures trap server 1999-11-05 17:52:00 +00:00
Rasmus Lerdorf f8d111d153 # Fix group email address 1999-11-05 15:37:34 +00:00
Thies C. Arntzen ce4f149734 (php3_sybase_get_column_content) initialize buffer before call to dbconvert()
@- Fixed garbage returned at the end of certain Sybase-Columns (Thies)
@  Patch submitted by: neal@wanlink.com
1999-11-05 08:48:09 +00:00
1890a59cd6 ChangeLog update 1999-11-05 02:09:27 +00:00
Andrei Zmievski 602cb959fc (PHP multisort) More work, not yet done though. 1999-11-04 21:55:47 +00:00
Andrei Zmievski 3964c92f8b Made zend_hash_rehash() callable from outside. 1999-11-04 21:02:35 +00:00
Rasmus Lerdorf 0d5a9358f0 Try to avoid IBM/Berkeley DB2 confusion 1999-11-04 20:47:19 +00:00
Stig Bakken aa3123e87b # Updated to work with the new build system. 1999-11-04 09:52:44 +00:00
Stig Bakken f2099fccfb # First shot at 4.0b3. 1999-11-04 09:40:44 +00:00
Stig Bakken a4c8d7dddc # Workaround needed to run automake in makedist. 1999-11-04 09:34:35 +00:00
Andi Gutmans 170db8b580 - Add include path. Used relative include path assuming php4 and bindlib_w32
are in the same directory.
1999-11-04 04:48:32 +00:00
35e82edf47 ChangeLog update 1999-11-04 02:09:55 +00:00
Andrei Zmievski 2fb2c11c09 *** empty log message *** 1999-11-03 20:48:42 +00:00
Frank M. Kromann 1746a30108 Added MS SQL server module 1999-11-03 20:41:24 +00:00
Frank M. Kromann d400f52ca4 Changed directory names to match project 1999-11-03 20:37:51 +00:00
Frank M. Kromann e5ca107a3d Adding MS SQL Server module for Win32 1999-11-03 20:35:58 +00:00
Andi Gutmans a79bdcc28f #- Added support for forcing a variable number of internal function arguments
#    by reference.
#-  This is done by using BYREF_FORCE_REST as the last arg_types value.
1999-11-03 20:15:50 +00:00
Andi Gutmans 6d988ec694 - Add support for BYREF_FORCE_REST 1999-11-03 19:21:56 +00:00
Evan Klinger b1c4f8978d #I hope this is the correct way to 'fix' this.
Fix compile warning
1999-11-03 02:53:52 +00:00
af07e331ac ChangeLog update 1999-11-03 02:09:28 +00:00
1e0bc24992 NEWS update 1999-11-03 02:09:21 +00:00
Sascha Schumann 358af8b9eb Add <FORM ACTION=...> tag 1999-11-02 18:35:59 +00:00
Sascha Schumann 11287bba4d Additional check for concurrent use of --with-{apache,apxs} 1999-11-02 18:27:38 +00:00
Andrei Zmievski f31c9d7d2a Remove extraneous comment.
# Pay no attention to multisort() at the moment.
1999-11-02 14:39:12 +00:00
Evan Klinger 229a26a497 (PHP getprotoby{name,number}) New Functions
@- Implemented getprotoby{name,number} (Evan)
1999-11-02 03:47:09 +00:00
3ab5606732 ChangeLog update 1999-11-02 02:09:28 +00:00
81c24791e1 NEWS update 1999-11-02 02:09:23 +00:00
Andrei Zmievski 1fe76945f7 *** empty log message *** 1999-11-01 20:58:50 +00:00
Andrei Zmievski 92f6a8b20e Added array_pad() function.
# Ignore multisort() for now.
@- Added array_pad() function. (Andrei)
1999-11-01 20:51:04 +00:00
Chuck Hagenbuch fa09e56a43 Trying to clean up the last of the body->id/body->description confusion. 1999-11-01 16:44:36 +00:00
Andrei Zmievski 1fd576485f Added new session configuration directives.
# Sascha, please document them here.
1999-11-01 16:13:41 +00:00
Sascha Schumann fb52cb2d30 Fix for #2631 1999-11-01 11:48:31 +00:00
27b22a7ee3 ChangeLog update 1999-11-01 02:09:20 +00:00
ce63a5b611 NEWS update 1999-11-01 02:09:11 +00:00
Evan Klinger f7440c020d (PHP getservby{name,port}) New functions.
@- Added new getservby{name,port} functions. (Evan)
1999-11-01 01:07:51 +00:00
Sascha Schumann 093aaaa23e Add missing initialization entry 1999-10-31 13:29:00 +00:00
Sascha Schumann 82798e99c8 Support current mcrypt. Tested with libmcrypt-2.2.4 1999-10-31 13:27:35 +00:00
Sascha Schumann 6a30ec5343 Change session.lifetime to session.cookie_lifetime. And:
@ - Added session.cookie_path and session.cookie_domain (Sascha)
1999-10-31 13:26:40 +00:00
Sam Ruby 242631c4bb @Continue processing PHP_INI_SYSTEM knownDirectives after extension=
#
# Never saw a response to PHP-DEV post of 25-OCT
#
# Given the existence of knownDirectives, I figured that option 2
# was closest to the original design intent.
1999-10-31 11:56:22 +00:00
91f068e4c5 ChangeLog update 1999-10-31 01:09:17 +00:00
Rasmus Lerdorf 5a391e843a typing in the dark 1999-10-30 14:26:42 +00:00
Rasmus Lerdorf 3bfc215091 Damn, can't see underscores correctly on this silly terminal I am on 1999-10-30 14:24:36 +00:00
Rasmus Lerdorf cf0868fec8 Clean up regex header file mess. php.h now explicitly includes php_regex.h
and php_regex.h figures out which regex header files to include and
defines symbols that prevents other stuff from including the wrong versions
of regex header files.
1999-10-30 14:22:10 +00:00
bbb1a4f8eb ChangeLog update 1999-10-30 01:09:07 +00:00
Rasmus Lerdorf 5175c71cc0 Fix typo found by hholzgra@media-engineering.de 1999-10-29 21:00:43 +00:00
Rasmus Lerdorf f160ee8782 Kill the regex header file warnings 1999-10-29 17:33:19 +00:00
Rasmus Lerdorf a3a7413be8 Looked like this was done by RedHat the way I wrote it. 1999-10-29 17:08:46 +00:00
88ca873f3a ChangeLog update 1999-10-29 01:09:23 +00:00
5d291c8ea5 NEWS update 1999-10-29 01:09:20 +00:00
Rasmus Lerdorf 990d5d72ea (IBM DB2 Support) Fix stuff to allow IBM DB2 to work with PHP 4.
Tested against DB2 6.1 UDB on Linux (RH-6.0)
@- Enable IBM DB2 support - Tested against DB2 6.1 UDB on Linux (RH-6.0)
1999-10-28 20:33:43 +00:00
Sascha Schumann 9704cd4873 Remove set-if-not-set colon, since CPPFLAGS is never set by automake. 1999-10-28 17:33:36 +00:00
Andrei Zmievski e921d0feab Fix bug #2623. 1999-10-28 16:41:17 +00:00
Andi Gutmans 83c79bb154 - Fix for Thies' leak and Andrei's crash 1999-10-28 15:53:31 +00:00
Andrei Zmievski 10fa640f5c New function. 1999-10-28 01:40:14 +00:00
8fd99b071d ChangeLog update 1999-10-28 01:09:21 +00:00
e8bccbdca9 NEWS update 1999-10-28 01:09:18 +00:00
Sam Ruby 329de3041b look for output.c in its new location in the windows build 1999-10-28 00:18:51 +00:00
Andrei Zmievski b8ecfa18c1 (PHP str_repeat) New function. 1999-10-27 22:06:05 +00:00
Thies C. Arntzen ea880d2b86 moved output.c into ext/standart and made it thread-safe.
moved output-buffering related functions from basic_functions to output.c
Win32 project need to be updated to reflect new position.
# i'm not really happy with this solution, but it seemed the easiest one!
# the whole output code is a bit hard to understand...
@- Output-Buffering system is now Thread-Safe. (Thies)
1999-10-27 18:30:41 +00:00
Thies C. Arntzen c171eecd7a @- implemented OCI8 $lob->WriteToFile() function - very useful for streaming
@  large amounts of LOB-Data without to need of a huge buffer. (Thies)
1999-10-27 17:51:22 +00:00
Andrei Zmievski 1a2f656816 Forgot to remove function entry. 1999-10-27 02:19:53 +00:00
c885fc1f53 ChangeLog update 1999-10-27 01:09:20 +00:00
Thies C. Arntzen 6b69ebf2b8 eliminated warinigs 1999-10-26 20:09:59 +00:00
Andrei Zmievski 138d5e0f79 No tabs please. 1999-10-26 19:57:27 +00:00
Andrei Zmievski 21ce8b7c64 (PHP array_map) Away with it. 1999-10-26 19:57:10 +00:00
Andrei Zmievski 377ed94b2f Some todo things. 1999-10-26 19:49:36 +00:00
ad922a272d ChangeLog update 1999-10-26 01:09:27 +00:00
Zeev Suraski 7f35cfda71 *** empty log message *** 1999-10-25 16:07:14 +00:00
Thies C. Arntzen 5d70df50ba added some more options 1999-10-25 08:23:54 +00:00
d5b0e6d820 ChangeLog update 1999-10-25 01:09:29 +00:00
Thies C. Arntzen 31b1a8fc7f kill warning 1999-10-24 18:16:16 +00:00
Thies C. Arntzen 6581d11cea folding fix (xemacs 21 loads the file again;-) 1999-10-24 18:15:42 +00:00
Sascha Schumann 387f15d895 Define USE_BCOPY, if memmove is not found (i.e. SunOS 4). Fix for #2480 1999-10-24 16:41:07 +00:00
Sam Ruby a29baa30c8 Allow CYGWIN directory to be specified as via environment variable 1999-10-24 16:32:46 +00:00
Sascha Schumann 51ea5cc70a (PHP session_register, session_unregister) always return true 1999-10-24 16:17:45 +00:00
7305cb156c ChangeLog update 1999-10-24 01:09:36 +00:00
Sam Ruby 6576719dcb Allow CYGWIN directory to be specified as via environment variable 1999-10-23 19:27:24 +00:00
Thies C. Arntzen a9dcde33e2 one can now use callbacks for custom completion functions (still work-in-progress) 1999-10-23 17:36:45 +00:00
dfbf2ea001 ChangeLog update 1999-10-23 01:09:32 +00:00
Andi Gutmans 9b83d1ca5d - Fix isset() with string offsets. 1999-10-22 22:35:16 +00:00
Sascha Schumann 23882d31c4 Add session.use_cookies option 1999-10-22 08:10:08 +00:00
Thies C. Arntzen 3e307aacc4 unserialize no longer complaints about unserializing empty-strings (started that just a few days ago) 1999-10-22 06:59:05 +00:00
280f379186 ChangeLog update 1999-10-22 01:09:30 +00:00
Sascha Schumann e9fc8bb300 Add <AREA HREF=... 1999-10-21 20:22:12 +00:00
Sascha Schumann 31f38edf35 (_ps_files_valid_key): small logic fix 1999-10-21 18:51:57 +00:00
Uwe Steinmann 01400c0c15 Added hw_mapid(), read comment in hg_comm.c 1999-10-21 15:15:27 +00:00
Sascha Schumann 4703eb404d (_ps_files_open): evaluate key (session id) before path creation 1999-10-21 12:28:36 +00:00
230556b646 ChangeLog update 1999-10-21 01:09:59 +00:00
1747a5e505 NEWS update 1999-10-21 01:09:52 +00:00
Sascha Schumann d5bde1d658 (php_ns_hash_environment): provide more CGI/1.1 variables to scripts.
Added REQUEST_METHOD, QUERY_STRING, REMOTE_ADDR
1999-10-20 19:30:37 +00:00
Andi Gutmans 8a3e0ced12 - Make COM compile again 1999-10-20 19:16:17 +00:00
Andi Gutmans 5212b2fe5b - Make CVS compile on Win32.
- Rename php3_COM.h -> php_COM.h
1999-10-20 18:09:44 +00:00
Thies C. Arntzen 33ebd52387 (PHP getcwd()) added, needs to porting to Win32
@- added getcwd() function. (Thies)
# as we do have chdir() now we have getcwd() - i think we *should* restore the
# working directory in RSHUTDOWN!
1999-10-20 16:17:30 +00:00
Sascha Schumann df6d06def4 (_display_module_info): Add anchor for module names 1999-10-20 16:16:58 +00:00
Sascha Schumann 90087382e4 (php_info_aolserver): add more information from the server context 1999-10-20 15:53:23 +00:00
Thies C. Arntzen 604c14ab00 (PHP xml_parse_into_struct) sometimes the value was truncated
@- XML_Parse_Into_Struct no longer eats data. (Thies)
1999-10-20 14:58:03 +00:00
Thies C. Arntzen 41b87a238e (PHP var_dump, serialize) fixed mem_leak. 1999-10-20 14:34:16 +00:00
Andrei Zmievski af8f84a27c Ignore shared modules directory. 1999-10-20 14:23:19 +00:00
Andrei Zmievski 1dd908b102 Ignore generated libs. 1999-10-20 14:11:59 +00:00
Thies C. Arntzen c799969a81 (PHP xml_parse_into_struct): fixed mem-leak when encountering invalid XML. 1999-10-20 14:02:32 +00:00
Sascha Schumann b31ef32c1d (php_ns_hash_environment) add SERVER_SOFTWARE, SERVER_BOOTTIME, SERVER_BUILDDATE, SERVER_PROTOCOL 1999-10-20 13:49:19 +00:00
c4d21e7632 ChangeLog update 1999-10-20 01:09:25 +00:00
1e2bf3960b NEWS update 1999-10-20 01:09:19 +00:00
Andrei Zmievski 26c019eaa1 Revert my patches to error functions. 1999-10-19 19:11:02 +00:00
Thies C. Arntzen 65b152948e added === operator support (type *and* value match) . samples:
(1 == "1") is true
(1 === "1") is false (integer != string)
(0 == false) is true
(0 === false) is false (integer != boolean)
1999-10-19 16:00:57 +00:00
Thies C. Arntzen 816627b16c fixed is_identicat_function() 1999-10-19 15:48:25 +00:00
Andrei Zmievski ee6c1ea743 (PHP extract): Fixed bug that would mess up global and referenced
variables in certain cases.
1999-10-19 14:43:48 +00:00
Andrei Zmievski f3127955ba (PHP ldap_get_entries): Fix string function name. 1999-10-19 14:42:54 +00:00
Andi Gutmans 98f025430e - Move IS_IDENTICAL next to IS_EQUAL 1999-10-19 14:19:42 +00:00
Andi Gutmans 70b41809f2 - Fix is_identical function 1999-10-19 14:11:39 +00:00
Uwe Steinmann 24d2325ecb - some tiny changes to possible improve link extraction/insertion of HTML-docs 1999-10-19 13:54:45 +00:00
Andi Gutmans 7a205f6087 - Preliminary submit of Thie's patch. Will fix the rest on Windows
as this was added on UNIX with patch. Changed IS_SAME -> IS_IDENTICAL
1999-10-19 13:33:17 +00:00
Thies C. Arntzen 578c6035c8 (parse_url) fix for #2569: parse_url('-') crashes
@- Fixed parse_url('-') crash. (Thies)
1999-10-19 11:02:05 +00:00
b69656177b ChangeLog update 1999-10-19 01:09:32 +00:00
a3f5afb1c0 NEWS update 1999-10-19 01:09:26 +00:00
Egon Schmid 4fe14a780c More forgotten prototypes. 1999-10-18 20:00:42 +00:00
Stefan Roehrich 20a7232d95 Added zlib module to list of maintained extensions. (Stefan). 1999-10-18 19:27:56 +00:00
Thies C. Arntzen 4f013f8e2d @- unserialize() now gives a notice when passed invalid data. (Thies) 1999-10-18 17:46:33 +00:00
Thies C. Arntzen cf1134787a (PHP unserialize) - fixed mem-leak. 1999-10-18 15:03:29 +00:00
Andrei Zmievski 52a30fd21b Be safe, use (). 1999-10-18 14:17:36 +00:00
670654ea87 ChangeLog update 1999-10-18 13:42:43 +00:00
1d66fd7a94 NEWS update 1999-10-18 13:42:35 +00:00
Sascha Schumann 51b1d2af6a Add PNG support. Tested with gd 1.7.3. 1999-10-17 14:57:49 +00:00
Egon Schmid 515206ec4e Looks better, but isn't wrong 1999-10-17 08:07:50 +00:00
Egon Schmid 6025dd0bda One typo corrected. 1999-10-17 07:38:35 +00:00
Andrei Zmievski d8868ab205 Fix bug #2548. 1999-10-17 00:20:17 +00:00
Andrei Zmievski 9e0017536d _php3/_php3i -> php rename 1999-10-16 16:35:20 +00:00
Andi Gutmans 133c95cf8c - It's OK if we link dynamically. 1999-10-16 11:57:52 +00:00
Andi Gutmans ad84f02efb - Get windows version to compile again. No biggy if array_map is not #if 0'd
out even if it doesn't work.
1999-10-16 10:14:47 +00:00
Andrei Zmievski e74d81f2ed *** empty log message *** 1999-10-15 22:04:59 +00:00
Andrei Zmievski 0a829ab104 (PHP array_map) Temporarily #if 0 this. 1999-10-15 21:24:15 +00:00
Andrei Zmievski db69449d9f Update mergesort() proto. 1999-10-15 21:23:37 +00:00
Andrei Zmievski c279668168 unstatic'fy is_numeric_string() 1999-10-15 20:42:26 +00:00
Andrei Zmievski e956a266e2 *** empty log message *** 1999-10-15 20:37:53 +00:00
Andrei Zmievski ce1f3a7d83 Make string copying a little more efficient. 1999-10-15 20:36:10 +00:00
Andrei Zmievski e906d4548a Small tweak in the error format. 1999-10-15 20:32:47 +00:00
Andrei Zmievski b625bbd14a (php3_log_err): Don't output error message to stderr when
running as CGI binary.
1999-10-15 20:27:38 +00:00
Andrei Zmievski 22fb5f281a Renamed a couple of functions to have proper php_ prefix. 1999-10-15 20:04:31 +00:00
Andrei Zmievski 3ee9dbea0c (php_error): finally get rid of those annoying html tags
when running as CGI binary
1999-10-15 19:55:18 +00:00
Andrei Zmievski c671332b29 Massive change of zend_error() to php_error(). 1999-10-15 19:37:44 +00:00
Andrei Zmievski 738c36932a @- Fixed shuffle() so that it no longer breaks on Solaris. (Andrei) 1999-10-15 19:25:27 +00:00
Andrei Zmievski c5149f12b6 Add mergesort.c to compilation list. 1999-10-15 19:25:04 +00:00
Andrei Zmievski 86e031d9e8 Added mergesort.c from FreeBSD. 1999-10-15 19:23:04 +00:00
Thies C. Arntzen ac997bb6c2 (is_resource, is_bool) new functions
@- Added is_resource(), is_bool() functions. (Thies)
1999-10-15 18:15:02 +00:00
Andrei Zmievski d3a39771c1 (_php_replace_in_subject)
(PHP preg_replace):
Fixed a bug that happened when regex was an array and replacement was a
single non-string value. Also changed conversions to use
convert_to_string_ex().

(PHP preg_grep): use convert_to_string_ex() for proper conversion
1999-10-15 16:57:54 +00:00
Thies C. Arntzen b5c3c7bfc9 files are now resources, file.c is thread-safe, the le_ vars are no longer shared,
but they are accessible thru "php_file_le_socket(), php_file_le_uploads()..."
i also updated the ftp, pdf and file-upload stuff to match the new requirements.
@- Cleaned up File-Module (Thies)
1999-10-15 15:22:25 +00:00
Andrei Zmievski d69d118cbd (PHP implode): Properly separate zval for another case. 1999-10-15 14:53:56 +00:00
Zeev Suraski 231fe2e1aa That should do the trick - fix implode() not to modify its arguments 1999-10-15 14:45:54 +00:00
Andrei Zmievski 62c1407a4d *** empty log message *** 1999-10-15 13:45:28 +00:00
Zeev Suraski 9295bd2577 Make ODBC work under Win32 1999-10-15 12:28:20 +00:00
Andi Gutmans 4a8cac0878 - Converted math.c to use new convert_to_number_ex() macro. 1999-10-15 06:31:40 +00:00
Andi Gutmans 4d7c162d16 - Add convert_to_number_ex() 1999-10-15 06:25:42 +00:00
Sascha Schumann e77485a8f7 Add "--disable-inline" for low-memory machines (be it limited
RAM or virtual memory). It's also useful for Digital C where
the C++ compiler thinks "inline" is an invalid specifier.
1999-10-14 22:17:22 +00:00
Sascha Schumann d58e6f2b00 Use sources from $(srcdir) 1999-10-14 17:20:25 +00:00
Thies C. Arntzen 185d90fe22 configure works for me (RH 6.1)
@- Added readline support. Works *only* in standalone mode! (Thies)
1999-10-14 16:53:51 +00:00
Thies C. Arntzen ead9008644 forgot 1999-10-14 15:20:56 +00:00
Thies C. Arntzen 1d9584c087 interface to GNU-Readline! (not yet active, autoconf needs to be done)
very neat - but only usable in standalone (command-promt) mode!
1999-10-14 15:20:40 +00:00
Sascha Schumann a4e9a5ca8f Add dba and mcrypt extensions to list. 1999-10-13 21:01:37 +00:00
Thies C. Arntzen e2d66a6d28 new api fo dl() - renamed php3_dl to php_dl (added compat header) 1999-10-13 19:55:25 +00:00
Thies C. Arntzen f5fa29184c (PHP: htmlspecialchars, htmlentities): new zend-api for html-function (not worth mentioning in NEWS) 1999-10-13 19:51:11 +00:00
Thies C. Arntzen 8bafcd3aa7 @- Upgraded math-funtions to use new Zend function API (Thies) 1999-10-13 19:43:36 +00:00
Andrei Zmievski dea3d7527a Add mhash module. 1999-10-13 18:03:38 +00:00
Sascha Schumann 2170fa6dea Do not use $< for anything but implicit rules. 1999-10-13 16:16:09 +00:00
Thies C. Arntzen e6ffafa264 (shell_exec) use pclose for FILE* that has been opened via popen!
@- Fixed zombie problem in shell_exec() and $a = `some_command`
@  constructs. (Thies)
1999-10-13 14:01:47 +00:00
Thies C. Arntzen 6e07d060fc (zend_fetch_resource) added warinig if resource is of wrong type 1999-10-13 12:59:48 +00:00
489a49d2fe ChangeLog update 1999-10-13 01:07:57 +00:00
8819b58a65 NEWS update 1999-10-13 01:07:54 +00:00
Sascha Schumann 8cc4fc6111 Disable ZEND_EXTENSIONS_SUPPORT, if RTLD_NOW is not defined.
Note that this part could be made platform independent by using
libltdl (for Solaris, Linux, *BSD, HP-UX, Win16/32, BeOS).
1999-10-13 00:17:01 +00:00
Thies C. Arntzen 0cc1641447 starting to clean-up/new API'ize and resourcify the file-stuff - nothing happened yet - just renaming things around. 1999-10-12 18:50:05 +00:00
Danny Heijl 4fe8a2c1bd (Informix driver) Thies introduced ZEND_FETCH_RESOURCE2 (Danny).
@- Thies introduced ZEND_FETCH_RESOURCE2 (Danny).
1999-10-12 17:38:19 +00:00
Thies C. Arntzen 4a39d66973 made nice 1999-10-12 15:32:40 +00:00
Thies C. Arntzen 837596dc21 add myself 1999-10-12 15:30:38 +00:00
Thies C. Arntzen a02ac0c1fc (wddx_add_vars) adjusted to new resource-API 1999-10-12 15:23:59 +00:00
Thies C. Arntzen 7dfbf440ef (php sybase_close) fixed obvious bug. 1999-10-12 15:00:10 +00:00
Thies C. Arntzen 86bb3fa0c0 new improved resource-API (i hope everything still compiles) 1999-10-12 14:53:15 +00:00
Thies C. Arntzen 6d7c18c1f5 new improved resource-API 1999-10-12 14:51:17 +00:00
Sascha Schumann fc48083437 Use DL_LAZY for OpenBSD. This seems to be a compatibility flag which
should be used for the 2nd parameter to dlopen.

http://www.openbsd.org/cgi-bin/cvsweb/src/share/man/man3/dlfcn.3?rev=1.8
1999-10-12 14:48:32 +00:00
Andrei Zmievski d6feb3c1d2 Just some formatting. 1999-10-12 13:22:30 +00:00
Andi Gutmans faa1891782 - object.ptr was made NULL in DO_FCALL but wasn't restored. Right now I
push it in DO_FCALL and at the end of do_fcall_common it always gets
  popped. We might be able to optimize it out.
1999-10-12 11:41:17 +00:00
Danny Heijl 290db7ace3 Added Informix driver to list of maintained extensions. (Danny).
@- Added Informix driver to list of maintained extensions. (Danny).
1999-10-12 06:49:34 +00:00
ff4a3a6a94 *** empty log message *** 1999-10-12 04:14:04 +00:00
79977b7fcf ChangeLog update 1999-10-12 01:08:06 +00:00
d070e7e557 NEWS update 1999-10-12 01:08:03 +00:00
Andrei Zmievski 9e773dfde2 Modified sorting functions to use updated zend_hash() prototype. 1999-10-11 21:42:42 +00:00
Andrei Zmievski 531bc520c1 *** empty log message *** 1999-10-11 21:38:18 +00:00
Andrei Zmievski 8864313c48 Modified zend_hash() to accept a pointer to sort function. 1999-10-11 21:30:23 +00:00
Andrei Zmievski 4d52ee2bc6 Added notice about LXR and Bonsai. 1999-10-11 20:45:03 +00:00
Andi Gutmans 81aa9a36b6 - No idea why this bug didn't exist before. But I'm too tired to think of it.
During a regular do_fcall we need to set object.ptr to NULL and, thus,
  push it in the beginning and pop it in the end.
  I hope this fix more or less cuts it. I just want to sleep :)
1999-10-11 20:29:55 +00:00
Andrei Zmievski cab346f50c First revision. 1999-10-11 19:36:13 +00:00
Danny Heijl e1b77165c9 *** empty log message *** 1999-10-11 16:54:41 +00:00
Danny Heijl c72b97bf5b (ext/informix) Changed ifx.ec to use the new high-performance
ZEND API now that it compiles with libtool. (Danny)
@- Informix driver : Changed ifx.ec to use the new high-performance
@  ZEND API. (Danny)
1999-10-11 15:56:01 +00:00
Danny Heijl f2939ffadd (configure) Allow IFX_LIBDIR environment variable to specify the
Informix library path to allow linking with the static
            libraries (libtool related). (Danny).
@- IXF_LIBDIR environment variable specifies alternate Informix library
   path for configure (Danny).
1999-10-11 11:53:09 +00:00
4f4e2bd506 ChangeLog update 1999-10-11 01:08:08 +00:00
Andi Gutmans 3a88d5a68e - Didn't lower refcount when doing an internal function call linked to a regular object. 1999-10-10 18:31:42 +00:00
Thies C. Arntzen 283dd53bf5 added some more autoconf/libtool stuff to be ignored 1999-10-10 18:12:41 +00:00
Sascha Schumann c42142bc03 automake scans aclocal.m4 as well 1999-10-10 18:08:31 +00:00
Thies C. Arntzen f961f0e976 (build.mk) fix suggested by sascha. 1999-10-10 17:34:13 +00:00
Thies C. Arntzen 93f294b76f (build.mk) make cvsclean now also deletes the libzend & TSRM symlinks. 1999-10-10 17:24:26 +00:00
Sascha Schumann ee06ab4069 Add stub.c for helper library. 1999-10-10 17:15:19 +00:00
Thies C. Arntzen 8a23f7e215 (build.mk) added target cvsclean: removed all files listed in all .cvsignore files found in the current tree. 1999-10-10 17:14:29 +00:00
Sascha Schumann 7573b236ea Workaround for Informix set of libraries. One library depends on
another "library" (an object file). We build a standard library
out of this object here, so that we can link it in at the right place
later.
1999-10-10 17:12:23 +00:00
Zeev Suraski 40cc9d9d7a This should fix the deadlock 1999-10-10 13:30:03 +00:00
Sascha Schumann 00bcd72637 Remove -DPIC preprocessor macros. This is defined by libtool
automatically, if a shared library is built. This would lead
to multiple definitions of get_module(). If you want to build
modules, add -DCOMPILE_DL to your CFLAGS.
1999-10-10 12:41:56 +00:00
Sascha Schumann 594f61521b Link in IFX_LIBS properly. 1999-10-10 12:10:41 +00:00
Andi Gutmans 274ce69429 - Clean up a bit. Separate before the locking so that we can use SEPARATE_ZVAL
macro.
1999-10-10 04:38:51 +00:00
Sascha Schumann ea567a73f1 Add clean target which removes standard targets 1999-10-10 02:02:13 +00:00
Sascha Schumann f2608c3fdb build.mk can be used to generate build tools. It is usually
faster than buildconf, since it rebuilds only components, if
it is necessary. To use it, run

    $ make -f build.mk
1999-10-10 01:23:15 +00:00
f331865e3b ChangeLog update 1999-10-10 01:08:21 +00:00
Sascha Schumann c2d127b3ed Clean up and add 'clean' target which removes standard targets recursively 1999-10-10 01:04:39 +00:00
Sascha Schumann aab49be24a build.mk can be used to generate build tools. It is usually
faster than buildconf, since it rebuilds only components, if
it is necessary. To use it, run

    $ make -f build.mk
1999-10-10 00:22:05 +00:00
Andi Gutmans ec04c922aa - Shouldn't be needed 1999-10-09 20:37:08 +00:00
Andi Gutmans 37159e7863 - God damn this sucked. I hopefully fixed the problems with classes although
we might need to clean stuff up a bit.
1999-10-09 20:29:36 +00:00
Sascha Schumann 1df149ec1a Define RTLD_NOW to DL_NOW, if RTLD_NOW is not defined (for OpenBSD). 1999-10-09 18:03:23 +00:00
Sascha Schumann 4c920d1da6 Remove redundant library declaration. All libtool libraries
are referenced through DEPENDENCIES now.
1999-10-09 16:50:14 +00:00
Sascha Schumann 92a10866a9 Only link with bundled regex, if the user wants it. 1999-10-09 16:45:12 +00:00
Sascha Schumann 8090041fbb POSIX_MISTAKE is enabled by default. 1999-10-09 16:44:39 +00:00
Thies C. Arntzen a19f5933d5 fix suggested by sascha for xml-build in apxs mode 1999-10-09 13:43:27 +00:00
afdb73e62f ChangeLog update 1999-10-09 05:41:53 +00:00
200052b51c NEWS update 1999-10-09 05:41:39 +00:00
Andreas Karajannis 05ed227dde Forgot to remove workaround for SQLANY_BUG which is no longer needed 1999-10-08 19:43:27 +00:00
Andreas Karajannis 2051682665 Moved Environment handle to connection struct for thread safety 1999-10-08 19:35:50 +00:00
Andrei Zmievski 405934a483 Mention php-cvs-daily list. 1999-10-08 18:05:59 +00:00
Sascha Schumann 965c9c2187 Use correct data type for mutex. 1999-10-08 16:29:33 +00:00
Sascha Schumann 9c995e93d7 Implement temporary workaround for thread-safety issues. This
serializes all request accesses. To disable, define NO_GLOBAL_LOCK
1999-10-08 16:24:31 +00:00
Andrei Zmievski 3f6108b646 More emphasis on ChangeLog and NEWS daily updates. 1999-10-08 16:09:52 +00:00
442628d935 mailing list test 1999-10-08 16:00:10 +00:00
9e870afa39 testing 1999-10-08 15:29:13 +00:00
0bbe641a91 test 1999-10-08 15:23:58 +00:00
Andrei Zmievski 85575e9a2c More information on how to use the special prefixes and the frequency
of NEWS and ChangeLog updates.
1999-10-08 13:59:27 +00:00
Sascha Schumann 3909ab4195 (php_info_aolserver): Show information about the SAPI module
(php_ns_module_main): Return early, if request startup failed
1999-10-08 13:06:28 +00:00
Jouni Ahto cfd2a241da Added the files for t1lib support. No porting from PHP3 done yet. 1999-10-08 07:56:43 +00:00
d6fd672624 ChangeLog update 1999-10-08 03:51:25 +00:00
Jouni Ahto 379889339f (PHP gmmktime) Should now give right values. Note that there was never need for
the acrobacy adjusting the time for GMT. mktime() fills
	       tm_gmtoff with just the right offset to add.
@- Fixed gmmktime() so that the following should always be true:
   gmmktime([args]) == mktime([args]) + date('Z', mktime([args])) (Jouni)
# Heh, conforming to the rules anyway...
1999-10-08 03:08:44 +00:00
Jouni Ahto 9109d8dcdd (PHP setlocale) Locale settings are now correctly restored to the values
set in environment at request shutdown.
@- setlocale doesn't anymore screw up things if you forgot to change it back
   to the original settings. (Jouni)
# Trying to conform to the rules set up by Andrei. Let's hope this works.
1999-10-08 02:10:57 +00:00
Sascha Schumann 5a6fe43d58 Apparently, we did too much cleanup. The server survives now much longer. 1999-10-07 21:47:39 +00:00
Andrei Zmievski 02795f9961 NEWS update 1999-10-07 21:41:37 +00:00
Andrei Zmievski 3652bc01ab New files.
Please read README.CVS-RULES!
1999-10-07 21:38:22 +00:00
Sascha Schumann 02553b5e7c POST works now and does not block anymore. 1999-10-07 21:23:55 +00:00
Sascha Schumann 3f1c010615 Remove SAPI_TARGET and use PHP_SAPI completely.
The target filename is now available as SAPI_PROGRAM, SAPI_SHARED, and
SAPI_STATIC.
1999-10-07 21:04:26 +00:00
Sascha Schumann 93b12f5fbd (ns_globals_struct): remove content_type member
(php_ns_request_dtor): remove content_type destructor, re-add path_translated destructor
1999-10-07 20:21:55 +00:00
Sascha Schumann 483a4642f0 Add comments to the source code and fix POST-read-data bug. 1999-10-07 20:15:26 +00:00
Andrei Zmievski cfec25f3b2 Some ChangeLog surgery. 1999-10-07 19:53:33 +00:00
Sascha Schumann 36ff78d232 Add help to get people started. 1999-10-07 19:53:20 +00:00
Andreas Karajannis 6cd07c5165 Made henv a real global var. Seems to work basically when multithreaded 1999-10-07 18:49:41 +00:00
Sascha Schumann 2a6d170dc0 nsapi => aolserver changes 1999-10-07 18:46:40 +00:00
Sascha Schumann 743b3851b1 nsapi => aolserver
"NSAPI" suggests Netscape too often.
1999-10-07 18:45:30 +00:00
Andrei Zmievski 017aff4f6d Renaming ChangeLog to NEWS. All future entries intended for public should
go into NEWS.
1999-10-07 16:56:42 +00:00
Sascha Schumann 9b654728ef PHP_SHOW_LD_LIBRARY_PATH leaked out of my test environment. 1999-10-07 16:47:53 +00:00
Uwe Steinmann 60b2d65b2b - new functions pdf_get_font, pdf_get_fontsize, pdf_get_fontname 1999-10-07 16:00:48 +00:00
Andrei Zmievski ca6cf936b8 Test commit again.
# add white space
1999-10-07 14:32:07 +00:00
Andrei Zmievski 91dffe9126 Testing commit.
@ Removed white space.
1999-10-07 14:24:18 +00:00
Andrei Zmievski 3562eb2999 Ignore generated files. 1999-10-07 14:05:08 +00:00
Andrei Zmievski ac4a798570 Put PLS_FETCH() in the correct place. 1999-10-07 14:00:18 +00:00
Andrei Zmievski 718351f882 Ignore generated files. 1999-10-07 13:53:35 +00:00
Andrei Zmievski 0d89395481 Fix for #2457. 1999-10-07 13:23:33 +00:00
Thies C. Arntzen 2148fe61a0 fix ZTS compile 1999-10-07 12:49:25 +00:00
Thies C. Arntzen b311342faf fixed hopefully last XML problem. that one was hard! 1999-10-07 12:27:40 +00:00
Thies C. Arntzen f352444541 added zval_del_ref() function 1999-10-07 12:20:40 +00:00
Sascha Schumann d480d23e97 (php_ns_request_handler): call ts_free_thread() to clean up 1999-10-07 12:00:32 +00:00
Thies C. Arntzen b6a90547f6 compiles again - and gets compiled 1999-10-07 10:56:04 +00:00
Sascha Schumann 712105cd5d Pass -avoid-version when building a shared library to avoid problems
with "installing" symbolic links. We need to do this conditional, since
    some libtool versions imply --disable-static with this option.
1999-10-07 10:03:24 +00:00
Thies C. Arntzen 601b837c56 SET_VAR_STR* expect a emalloc'ed copy of the string! 1999-10-07 09:13:39 +00:00
Andi Gutmans 5fed1466ef - Reverse my patch 1999-10-07 04:38:03 +00:00
Sascha Schumann 966b87e814 Enable hardcoding runpaths for more platforms and allow Solaris' patch to run
buildconf.
1999-10-06 23:26:36 +00:00
Sascha Schumann 1606365a12 Ignore already applied patches.
If somebody could make this work on Solaris, I'd appreciate it.
1999-10-06 19:34:36 +00:00
Sascha Schumann b2edf87b39 Allow *.a and *.o as libtool objects, and hardcode runpaths into
shared libraries.

    (Both taken from FreeBSD's libtool port.)
1999-10-06 18:58:14 +00:00
Andi Gutmans e3d0c91dbb - Fixed memory leak with this pointer. It was somtimes initialized with refcount
of 2 instead of 1.
- Also fixed a place where object.ptr_ptr is set to pointing to a zval* instead
  of zval**. I don't think this is ever used so we might be able to remove it
  altogether.
1999-10-06 17:45:15 +00:00
Andrei Zmievski 8959144837 Move random functions related defines into its own header file. 1999-10-06 16:34:36 +00:00
Thies C. Arntzen 781a53b807 *** empty log message *** 1999-10-06 15:09:44 +00:00
Thies C. Arntzen c6b91f789d fix for using resources as array indices 1999-10-06 15:09:26 +00:00
Sascha Schumann bf61827518 Fix "make clean". automake does not define an extra target for clean. 1999-10-06 14:41:36 +00:00
Sascha Schumann 4fee036f43 unidiff isn't widely recognized, change to context format. 1999-10-06 13:18:12 +00:00
Sascha Schumann bd62c63c3b Fixed pg_fetch_array() with three arguments.
Submitted by: brian@soda.berkeley.edu
1999-10-06 13:15:23 +00:00
Thies C. Arntzen 657edcd50e - replaced most getParamters against getParamtersEx calls
- removed ParamterPassedByReference where appropiate
1999-10-06 12:54:45 +00:00
Sascha Schumann 4b212d1ce6 * --copy always, since we need to change ltmain.sh
* make patch on some obscure UNIX happy
1999-10-06 12:06:48 +00:00
Uwe Steinmann 3ec401ec84 - fixed some memory leaks 1999-10-06 05:31:24 +00:00
Uwe Steinmann 0817d2a8db - as always forgot the Changelog entry 1999-10-06 05:29:18 +00:00
Uwe Steinmann 8c473e1f47 - support for mimetype application/vnd.fdf needed by fdf module
(only active if fdf support is compiled in)
1999-10-06 05:26:25 +00:00
Uwe Steinmann 6f4cca9cff - fix to work with new version of FdfTk 1999-10-06 05:23:28 +00:00
Sascha Schumann 6dea22808e FreeBSD's libtool port seems to contain a bug which is triggered by
-avoid-version. Removing it, since we don't absolutely need this option.
1999-10-05 20:59:21 +00:00
Sascha Schumann dff6e711ce Apply patch automatically at buildconf time 1999-10-05 17:43:45 +00:00
Sascha Schumann d71eb7bbe6 Fix typo (xml_globals => dir_globals) 1999-10-05 16:18:40 +00:00
Thies C. Arntzen 7fe8812d3e use reference counting for emulating child<->parent (cursor<->connection) relationships. 1999-10-05 16:06:54 +00:00
Sascha Schumann f48a4916ea Explicit casts to ulong. Some compiler don't like pointers in % 1999-10-05 15:15:01 +00:00
Sascha Schumann b510a6d11f More portability stuff 1999-10-05 15:13:22 +00:00
Thies C. Arntzen 35e7bcbb9d dir modules is now resourcified & thread-safe! 1999-10-05 14:36:00 +00:00
Sascha Schumann 693207a845 Generate files for distribution (also adds parsedate.c) 1999-10-05 14:12:43 +00:00
Sascha Schumann 2dd9f01a69 Fix typo. 1999-10-05 13:55:23 +00:00
Sascha Schumann 2785fbce1e OSF/1 V4.0 wants -lcxx 1999-10-05 13:50:13 +00:00
Sascha Schumann 60d87e1914 Add $automake_flags, to allow propagation of --copy 1999-10-05 13:47:16 +00:00
Sascha Schumann 7976bcbd28 Get rid of *_SHLIB variables. Our config scripts don't need Perl,
unfortunately the "apxs" utility does. Someone slap the creator of apxs.
1999-10-05 13:46:52 +00:00
Andrei Zmievski f71789ee71 Remove _A. 1999-10-05 13:33:57 +00:00
Sascha Schumann 84df96ef37 Fix automake dependencies 1999-10-05 13:27:37 +00:00
Thies C. Arntzen e0fe7b9c03 *** empty log message *** 1999-10-05 12:11:26 +00:00
Thies C. Arntzen 7b8ee930f4 fixed ora_close again 1999-10-05 12:10:52 +00:00
Thies C. Arntzen 5a605ae6f4 fix some warnings 1999-10-05 12:09:08 +00:00
Sascha Schumann c36bff57ca Fix logic. 1999-10-05 12:06:35 +00:00
Sascha Schumann e0d561a35b Use libtool 1999-10-05 11:48:05 +00:00
Sascha Schumann 1a4f22e4ed automake does not find all subdirectories automatically. 1999-10-05 11:33:00 +00:00
Sascha Schumann 1877b0779c This causes link problems with anything higher than -O0. 1999-10-05 11:17:04 +00:00
Sascha Schumann c27bbc4086 * Get rid of libphp_util.la
* Don't build CGI from convenience library
    * Add additional checks to regex.h (Apache build broke)
1999-10-05 11:00:48 +00:00
Sascha Schumann e74b985432 100% speedup in buildconf.
We have a top-level Makefile.am, so find becomes superflicious
1999-10-05 10:23:48 +00:00
Sascha Schumann 2e32234461 Build program static. 1999-10-05 09:51:25 +00:00
Marko Karppinen 537aefdb26 Fix a typo? (compile bustage on Solaris 2.6) 1999-10-05 07:00:10 +00:00
Andrei Zmievski cb78ebc0de Taken from PHP3 source. 1999-10-04 21:10:26 +00:00
Andrei Zmievski cec7e90996 *** empty log message *** 1999-10-04 20:35:28 +00:00
Andrei Zmievski 95c970030b test 1999-10-04 20:34:46 +00:00
Andrei Zmievski 6b2003dd2a test 1999-10-04 20:28:44 +00:00
Andrei Zmievski cbddc54b6f test 1999-10-04 19:55:16 +00:00
Sascha Schumann 337541636b -module is already set in Makefile.am 1999-10-04 19:31:36 +00:00
Andrew Skalski f1f8b8a9a2 Added delete and rename functions. 1999-10-04 18:30:37 +00:00
Sascha Schumann 7aed3d51fc * Fix header("HTTP/..") behaviour
* Fix leak WRT http_status_line
    * Update sapi/README
    * Remove %PHP_OUTPUT_FILES sort
1999-10-04 18:07:46 +00:00
Sascha Schumann cfaf694afa Move %(EXTRA_LIBS). 1999-10-04 17:18:17 +00:00
Sascha Schumann afc51baaa3 The .sym format isn't that complex. 1999-10-04 15:42:32 +00:00
Sascha Schumann 590f9c1dee Add necessary rule. 1999-10-04 15:35:16 +00:00
Sascha Schumann f18254e433 Forgot these.. 1999-10-04 15:22:18 +00:00
Sascha Schumann e67005e748 Use libtool. 1999-10-04 15:21:39 +00:00
Sascha Schumann 8ae3f4b027 Use libtool to build. 1999-10-04 15:20:12 +00:00
Sascha Schumann 232afa4816 * archive-based convenience libraries completely replaced
with libtool components

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

        * all configure scripts use the same config.cache

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

        * sapi/*/Makefile.inc are gone

        * runpath handling cleaned up

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

        * --enable-versioning uses libtool's cleaner and more
          portable -export-symbols feature
1999-10-04 15:18:26 +00:00
Sascha Schumann ec01d01400 Whoops, OSF/1 has -lpthread and -lpthreads, but defines most
pthread_* as __pthread*. According to pthread(3), -lpthread is the
    correct choice.
1999-10-04 15:00:38 +00:00
Sascha Schumann 3e202d75ff Polish this. 1999-10-04 14:29:18 +00:00
Thies C. Arntzen 95d49b10b4 upgraded the former basic_functions.c code to use new API. 1999-10-04 13:31:36 +00:00
Thies C. Arntzen ca1d1f832a use getParametersEx for all builtin functions 1999-10-04 13:27:12 +00:00
Thies C. Arntzen 008810dc29 ereg now returns a continious array 0..9 again - empty values are returned as false.
i think this is *more* compatible with PHP3 - unless anybody really dislikes it i'd prefer it like this.
1999-10-04 13:04:32 +00:00
Sascha Schumann 8266f8a515 -lpthreads is needed on OSF/1 aka Digital Unix aka Tru64 1999-10-04 12:34:04 +00:00
Thies C. Arntzen 6847fefad9 added add_*_resource() and add_*_bool() functions 1999-10-04 11:42:46 +00:00
Thies C. Arntzen b357d0eaf8 i swear, i compiled (at least) before i committed! 1999-10-04 10:39:32 +00:00
Sascha Schumann 3f1465a66e Object files are usually not found in the srcdir. 1999-10-04 09:57:00 +00:00
Thies C. Arntzen 0dbabb9871 "cc -32" on IRIX 6.4 does not like (PHP_TRACK_VARS?"1":"0") - at least not if PHP_TRACK_VARS is 0. 1999-10-04 09:56:52 +00:00
Sascha Schumann 0fe632bcee Fix typo. This caused strange errors when using --with-apxs. 1999-10-04 09:51:46 +00:00
Andi Gutmans 1c0f136405 - Hooray. This might actually work. (I hope) 1999-10-03 20:06:21 +00:00
Andi Gutmans f114050fc8 - Update changelog 1999-10-03 19:05:25 +00:00
Sascha Schumann 8617cc60ad Make config executable 1999-10-03 16:10:15 +00:00
Sascha Schumann a0296da876 Make it executable. 1999-10-03 15:49:27 +00:00
Sascha Schumann 27fb752fce *_config are executable, thus we don't need %(SHELL) 1999-10-03 15:07:41 +00:00
Sascha Schumann 079d9711ac Fix Apache-module build 1999-10-03 14:06:06 +00:00
Sascha Schumann 9e4b5f7c3a Test commit II. 1999-10-02 21:16:34 +00:00
Sascha Schumann 9009c4481b Test commit. 1999-10-02 21:16:04 +00:00
Sascha Schumann 55218a98f2 Reactivate autoheader 1999-10-02 21:14:23 +00:00
Andrei Zmievski 68d423b3ee test commit 1999-10-02 21:13:06 +00:00
Andrei Zmievski e721e560e5 test commit 1999-10-02 21:06:30 +00:00
Andi Gutmans b7e248dd06 *** empty log message *** 1999-10-02 20:50:20 +00:00
Andrei Zmievski 56af2d063e test commit 1999-10-02 20:46:41 +00:00
Andrei Zmievski bbc72d6eb6 test commit 1999-10-02 20:38:09 +00:00
Andrei Zmievski 26b5ef7435 test commit 1999-10-02 20:26:17 +00:00
Andrei Zmievski debf741e82 commit test 1999-10-02 20:22:29 +00:00
Andrei Zmievski 9387719dac test 1999-10-02 20:10:35 +00:00
Andrei Zmievski 62f0dbb0c4 test commit 1999-10-02 20:07:07 +00:00
Andrei Zmievski 34e4269172 test commit 1 1999-10-02 20:03:07 +00:00
Andrei Zmievski 32604578de test commit 1999-10-02 19:22:47 +00:00
Andi Gutmans 56834ff66a - Another locking fix. 1999-10-02 18:02:10 +00:00
Andi Gutmans e40667440d - Fixed locking problem when fetching string offsets 1999-10-02 16:40:25 +00:00
Zeev Suraski 77ddd3a35b Fix the leak reported on the PHP 3 list (isset() on string offsets) 1999-10-02 15:56:49 +00:00
Sascha Schumann be2668c027 Use the already compiled `mod_php4.o'. This avoids the trouble
apxs has with VPATH builds (assumes source dir = build dir).
1999-10-02 12:11:52 +00:00
Andi Gutmans 86357a9c27 - Move is_ref back to being an unsigned char and not a bit field. 1999-10-01 23:31:39 +00:00
Andi Gutmans 4dd47ffbc1 - Remove locking support completely 1999-10-01 23:26:00 +00:00
Andi Gutmans f67a65543d - I forgot this 1999-10-01 19:53:27 +00:00
Andrei Zmievski 23e8d1762d Added array_reverse() function. 1999-10-01 17:36:54 +00:00
Andrei Zmievski a92fb5fe3d rename. 1999-10-01 14:54:55 +00:00
Thies C. Arntzen 7e75bf8f88 one zval fix - cleanups 1999-10-01 13:44:07 +00:00
Andi Gutmans 03d354dcf9 - For Andrei. Implement references in array() initializations 1999-10-01 10:00:05 +00:00
Andrei Zmievski 6f34f1a68d test commit 1999-09-30 23:00:39 +00:00
Andrei Zmievski 7258842c29 preg_replace() now makes copies of array entries if arrays are passed in,
so that convert_to_string() preserves the originals. Is this the correct way to do it?
1999-09-30 21:59:46 +00:00
Sascha Schumann 7ed678f819 Fix typo--GD_* is for shared build mode. 1999-09-30 20:04:52 +00:00
Andrei Zmievski 97f105e450 Fix nl2br crash. 1999-09-30 20:03:32 +00:00
Sascha Schumann d926d95066 Test commit II. 1999-09-30 19:19:19 +00:00
Andrei Zmievski 7982d27528 No need for this anymore. 1999-09-30 18:56:46 +00:00
Sascha Schumann 33ba4ec2a9 Test commit. 1999-09-30 18:54:10 +00:00
Sascha Schumann 5320c897f5 Automatically add the SAPI target's Makefile to the list. This
frees us from doing this in each config.m4.
1999-09-30 12:56:24 +00:00
Thies C. Arntzen 16e1cbee07 major rework here - the refcount stuff gets better and better! 1999-09-30 08:41:45 +00:00
Sascha Schumann cf4afd61f0 * create Makefiles for ext, pcrelib, sapi/*
* copy files for Apache from $(srcdir)
1999-09-29 22:18:43 +00:00
Sascha Schumann 4db370ab9c * VPATH work
* add "--local" switch to buildconf which only recrates the local
      autoconf scripts.
1999-09-29 21:49:32 +00:00
Zeev Suraski dbccd75b06 *** empty log message *** 1999-09-29 21:46:37 +00:00
Chuck Hagenbuch 9221981fa3 cjh: closing bug #2407. 1999-09-29 21:18:35 +00:00
Thies C. Arntzen 02c0ab8d0c fix the order.. (thanx, andi) 1999-09-29 19:13:08 +00:00
Sascha Schumann 174c79dcba Fix a VPATH issue. 1999-09-29 18:35:45 +00:00
Andi Gutmans 202d7dd216 Fix leak in += with arrays 1999-09-29 17:45:44 +00:00
Andi Gutmans 06d04d15a8 - Fix SEND_VAR problem after fetch'ing a variable and not knowing the fetch type 1999-09-29 17:18:36 +00:00
Thies C. Arntzen 446e5d0fff added add_property_resource 1999-09-29 15:25:06 +00:00
Stig Bakken 16ff84429a *** empty log message *** 1999-09-29 15:17:29 +00:00
Stig Bakken 1cb0d88186 Decent configure speedup. Makefiles are now generated only for the
extensions you are including.  Got rid of configure.in.in.
Moved the last Apache-specific files into sapi/apache and made both
static and DSO build work again (it still doesn't run properly).
1999-09-29 15:17:02 +00:00
Stig Bakken db4820447f The $shared variable should normally never be used outside of a call to
AC_ARG_(ENABLE|WITH).  If it is necessary anyway, make sure it is set to
"no" before starting.
1999-09-29 15:13:25 +00:00
Andrey Hristov 2fa5e6dd6a Fix for my fix. 1999-09-29 14:25:40 +00:00
Thies C. Arntzen 284bc523d6 fixed crash in connection shutdown! 1999-09-29 14:20:27 +00:00
Thies C. Arntzen 73c8429282 just some renaming. 1999-09-29 13:35:12 +00:00
Andi Gutmans 59d5462a6a - Stop using the locking mechanism and start using refcount.
Now we know when we need to free but we still need to support it
1999-09-28 17:37:14 +00:00
Andi Gutmans cf6c92949c - Get rid of warning 1999-09-28 17:37:06 +00:00
Andi Gutmans b56fd4602f - First part of the patch which makes reads use ptr and not ptr_ptr. 1999-09-28 16:03:09 +00:00
Stig Bakken f83ff3eb73 disable --with-zeus for now. 1999-09-28 12:55:49 +00:00
Stig Bakken 4c4c8555eb Started working on the Zeus support. Zeus's ISAPI obviously differs from
Windows's, does someone have docs for the Windows API?
1999-09-28 12:08:34 +00:00
Sascha Schumann 7ed68c0f53 Provide alternative istdiostream.
This has been tested with Sun WorkShop 4.2 C++ which does not
    contain class istdiostream.
1999-09-28 11:54:02 +00:00
Thies C. Arntzen 74bc24d9d5 initialize OCI in threaded mode if ZTS is defined. 1999-09-28 11:12:32 +00:00
Thies C. Arntzen 9156c2c8d1 init in thread-safe mode if ZTS isdefined 1999-09-28 11:09:03 +00:00
Thies C. Arntzen 4c3f393743 fixed startup-deadlock. 1999-09-28 10:54:42 +00:00
Thies C. Arntzen a054e6e61e found a typo! 1999-09-28 09:59:59 +00:00
Andi Gutmans 20ba4ec0bd - Update project. 1999-09-27 19:42:53 +00:00
Sascha Schumann 9442b13939 Make an extra copy of input parameter. 1999-09-27 18:00:30 +00:00
Sascha Schumann e846baa14b * include from $(srcdir)
* use proper target for nsapi
1999-09-27 16:49:23 +00:00
Sascha Schumann 288c73580b Create directories, if they do not exist (for VPATH builds). 1999-09-27 16:42:34 +00:00
Stig Bakken 402b2a5d6d added README file with very brief docs 1999-09-27 16:37:33 +00:00
Stig Bakken 2a854ca8b9 Generalized server-API build process on UNIX. Each SAPI
implementation now has its own directory under sapi/, just like
extensions have theirs under ext/.  To make the final targets appear
in the main dir, the top-level Makefile includes sapi/NN/Makefile.inc
from the selected sapi backend.  This is a plan Makefile stub without
any autoconf substitutions.  Each SAPI backend also has its own
config.m4 like extensions (read at the end of diversion 2) and
config.h.stub files.

Each SAPI backend has to contain:

config.m4: just like for extensions, this file contains
autoconf/automake directives that end up in the configure script.  The
only difference is that the sapi config.m4 files are read in diversion
(output block) 2 instead of 3.  The sapi config.m4 files should set
two variables: PHP_SAPI (which sapi backend to choose) and SAPI_TARGET
(the name of the resulting library or program, previously BINNAME).
If they are not specified, they will default to "cgi" and "php",
respectively.

Makefile.inc: has to exist, has to define "INSTALL_IT" to the command
used to install the final target (or ":" for no operation).  It also
has to define a plain Makefile rule (without autoconf substitutions)
to build $(SAPI_TARGET)

Makefile.am: just what you think.  Make sure your target is called
"libphpsapi_NNN.a", where NNN is the value of PHP_SAPI.

Some testing and fixing probably remains.  To make everything hang
together, I've done some ugly tricks that I can imagine causing some
problems.  I've built and run the CGI version and built the Apache
DSO.
1999-09-27 16:34:28 +00:00
Sascha Schumann 154663e9a2 Remove C++ style comments from C source file. 1999-09-27 15:37:00 +00:00
Andrey Hristov 7665e9ef27 Fix for bug #2199. Redirect was returning http:// which resulted in a crash. 1999-09-27 15:17:28 +00:00
Andrey Hristov 375c85e27f I will follow portability guidelines.
I will follow portability guidelines.
I will follow portability guidelines.
I will follow...
1999-09-27 14:15:15 +00:00
Andrew Skalski 0413f52480 Added functions ftp_{pasv,size,mdtm,fget,fput}
PASV mode is now supported; file size and last-modified time can now
be fetched from servers that support them; files now may be stored to and
retrieved from open files, in addition to disk files.
1999-09-27 14:07:09 +00:00
Andrey Hristov 10591231ca Make it portable. 1999-09-27 14:05:18 +00:00
Stig Bakken 3bc6f8155c added AC_SYS_LFS from fileutils 1999-09-27 13:15:20 +00:00
Sascha Schumann b7a1130143 Actually allow to set CXXFLAGS 1999-09-26 20:59:47 +00:00
Sascha Schumann 96b6bdff27 Now thread safe version builds out of the box. libzend/TSRM
contain extra config scripts which pass the necessary libs back
    to our Makefile.
1999-09-26 20:17:28 +00:00
Sascha Schumann 0ac169b474 Build communication channel and add checks for C++ library 1999-09-26 20:12:05 +00:00
Sascha Schumann a5dbe81a76 Do not let PACKAGE/VERSION escape from tsrm_config.h. 1999-09-26 19:47:35 +00:00
Sascha Schumann feccd9f104 Undefine previously PACKAVE/VERSION macros. We should find a way
to suppress these from automake
1999-09-26 19:46:35 +00:00
Sascha Schumann 806abdb87c Use new tsrm_config script to determine libraries. 1999-09-26 19:26:54 +00:00
Sascha Schumann 17df2892bd Use helper script to determine compile time configuration for TSRM 1999-09-26 19:09:24 +00:00
Stig Bakken 1d9f6b8a57 Have to keep using AM_PROG_LIBTOOL to keep all automake versions happy. 1999-09-26 16:27:25 +00:00
Sascha Schumann 09ad17f67e Avoid specifying standard paths. This might result in compiler problems
(see #1937, #2367)
1999-09-26 15:38:58 +00:00
Sascha Schumann 182ac10749 Expand relative paths properly, otherwise build process will fail. 1999-09-26 15:00:12 +00:00
Sascha Schumann 8b462c1acf Do nothing, if PHP_RPATHS is empty. 1999-09-26 09:12:55 +00:00
Sascha Schumann df42e494d7 Disable rpaths optionally. 1999-09-26 09:05:56 +00:00
Andi Gutmans 4fff0386ac - Changed Ts{}.var to Ts{}.var.ptr_ptr. 1999-09-26 05:45:18 +00:00
Sascha Schumann 57668a27cf * Use per-thread structure for request data
* Update ChangeLog
1999-09-25 21:08:36 +00:00
Sascha Schumann 7922481919 Do not try to free NULLs. 1999-09-25 21:06:11 +00:00
Sascha Schumann b5524a0981 * use faster Ns_ConnWrite()
* access cookies correctly
    * set HTTP_* variables for script
1999-09-25 18:51:38 +00:00
Sascha Schumann 104209a328 * cleanup
* make cookies work
1999-09-25 16:51:18 +00:00
Thies C. Arntzen 091e91c051 fixed callback code -> now $parser is passed as a resource! 1999-09-25 16:42:31 +00:00
Sascha Schumann f8b9b0db69 * use consistent php_ns prefix
* improve configuration code
    * shutdown SAPI/TSRM correctly
1999-09-25 16:06:55 +00:00
Sascha Schumann dd7b4680da Add entry for AOLserver. 1999-09-25 15:41:51 +00:00
Sascha Schumann e6006d03ca * remove debugging message
* use SAPI's http response code
    * improve POST read (still blocks in Ns_ConnRead, even if there is enough
      data to read)
    * improve config data handling
1999-09-25 15:37:02 +00:00
Sascha Schumann 00b2df7b8f New Zend API 1999-09-25 12:09:50 +00:00
Sascha Schumann 9d1c26481a Use new Zend API 1999-09-25 11:55:42 +00:00
Andreas Karajannis 3ce44b1046 *** empty log message *** 1999-09-25 11:36:34 +00:00
Andreas Karajannis 7588b1bd81 odbc now uses the new Zend function api 1999-09-25 11:30:28 +00:00
Stefan Roehrich 2c9ee99743 Use new Zend API. 1999-09-25 11:23:02 +00:00
Sascha Schumann eb754de807 - support POST and HEAD requests
-   clean up module_main()
    -   allow arbitrary mappings
1999-09-25 01:06:33 +00:00
Sascha Schumann 4e8c8fd992 Initial AOLserver support. Note that the current way of creating
the shared library works only with GNU utilities. Some features
    have to be added yet (i.e. POST and cookie support).
1999-09-25 00:32:25 +00:00
Andrey Hristov bfa7b6b145 - Updated array functions to use high-performance API
- Updated preg_split() to allow returning only non-empty pieces
1999-09-24 22:44:41 +00:00
Sascha Schumann a412eb08cb PTHREADS is a custom symbol 1999-09-24 20:52:46 +00:00
Sascha Schumann 5453d0be3c Additionally check libc_r (*BSD) for pthread functions 1999-09-24 20:14:44 +00:00
Andrey Hristov 0c02153bb9 *** empty log message *** 1999-09-24 20:12:28 +00:00
Andrey Hristov ba01cefc0c Update to new high-performance function API. 1999-09-24 20:11:06 +00:00
Sascha Schumann 7a1fff1441 Use new Zend API. 1999-09-24 19:35:25 +00:00
Sascha Schumann d8895c02f7 Add _ex API implementation for booleans. 1999-09-24 19:22:25 +00:00
Sascha Schumann e303647058 Use new Zend API and some minor cleanup. 1999-09-24 19:15:17 +00:00
Andrey Hristov 5a35438c21 *** empty log message *** 1999-09-24 18:58:36 +00:00
Andrey Hristov 54fed6c652 Extended var_dump to handle IS_RESOURCE somewhat. 1999-09-24 18:57:02 +00:00
Andrey Hristov be0eeccdbc Update WDDX for new high-performance function API. 1999-09-24 18:43:34 +00:00
Thies C. Arntzen 8ad2f4a2e8 we want to know who to "blame";-) 1999-09-24 18:07:26 +00:00
Thies C. Arntzen c626d9e47b updated XML (only partly tested) 1999-09-24 18:02:58 +00:00
Stig Bakken 79e729d6b2 more high-tech shared building 1999-09-24 15:35:35 +00:00
Stig Bakken a4bc9478f8 kill another warning 1999-09-24 15:34:54 +00:00
Stig Bakken 63b101f36d kill warning 1999-09-24 15:34:30 +00:00
Stig Bakken 701bd7cfad set "phplibdir" in configure so it doesn't have to be set in Makefile.am 1999-09-24 15:34:06 +00:00
Thies C. Arntzen 032b459205 use getParameterEx 1999-09-24 15:10:13 +00:00
Stig Bakken 33a946d317 #if !HAVE_FOO -> #ifndef HAVE_FOO 1999-09-24 14:41:27 +00:00
Stig Bakken bd3132bcda AM_PROG_LIBTOOL is obsolete in libtool 1.3.3, which we now require.
Using AC_PROG_LIBTOOL instead.
1999-09-24 14:36:43 +00:00
Stig Bakken 56654596a3 Detect automake/libtool that are installed with different prefixes. 1999-09-24 14:29:28 +00:00
Thies C. Arntzen 10ec822b59 fixed warning 1999-09-24 14:18:33 +00:00
Zeev Suraski 360675cee3 Compile fixes for WDDX, XML and Zlib (untested) 1999-09-24 14:14:47 +00:00
Zeev Suraski 83a5bfdd04 This should make the Sybase CT module compile again (untested) 1999-09-24 14:11:53 +00:00
Zeev Suraski e99e7c04ba This should make the mSQL module compile again (untested) 1999-09-24 14:09:37 +00:00
Zeev Suraski 86133ef45e Ok guys, the prototype for zend_fetch_resource*() has changed - it now
accepts a zval ** instead of a zval *, to be suitable for use with the
getParametersEx() API.
You don't have to switch to the getParametersEx() API, but you will have to
go over your code and add &'s where it's applicable (of course, if you have
the mental strength to go over your code and convert it to use the Ex API,
it's best).

The MySQL module now uses the getParametersEx() API completely.
1999-09-24 14:07:15 +00:00
Zeev Suraski 85844ace95 Exify the standardized resource stuff 1999-09-24 14:03:45 +00:00
Sascha Schumann c8ac4bb069 Link with libtsrm.a, if thread-safety is chosen. 1999-09-23 20:27:17 +00:00
Sascha Schumann f0ee629b04 Exit, if subsequent configure scripts fail. 1999-09-23 20:17:07 +00:00
Sascha Schumann 8bf4fe02db Try to find ANSI/STDC compatible mode of host compiler 1999-09-23 19:34:42 +00:00
Andrew Skalski 1e573a9acd fixed php3 code problem 1999-09-23 17:54:26 +00:00
Andi Gutmans 63c15d292a - Fix bug #2364.
I haven't checked all of the conversion macros yet but there's a change
  there are more such bugs there.
1999-09-23 16:13:31 +00:00
Sascha Schumann 4efa22c84e Fix vpath build w/ thread-safe enabled on Unix. 1999-09-23 16:07:16 +00:00
Andrey Hristov 9f07657b48 Small clarification. 1999-09-23 15:37:01 +00:00
Sascha Schumann de8120f5d0 This version is finally the standard one. The last one was created
using the 'nested ifs mode' which seems to be the source of the problem.
1999-09-23 14:53:39 +00:00
Nick Gorham 7d759e6781 Added support for Easysoft ODBC-ODBC Bridge
Fixed bug in odbc_setoption
1999-09-23 14:46:35 +00:00
Andrew Skalski 1e13eb646e fixed typo in mcal_list_alarms() 1999-09-23 14:34:00 +00:00
Sascha Schumann ba8b703ba1 re2c's bit vectors appear to be not binary clean. Revert to
standard mode for the moment.
1999-09-23 14:09:42 +00:00
Thies C. Arntzen edb2032c4e tiny optimisation 1999-09-23 11:20:56 +00:00
Thies C. Arntzen 820adaddf1 Ora_Fetch_Into now resets the returned array in all cases 1999-09-23 10:23:12 +00:00
Thies C. Arntzen ed731497fe fixed NULL column
cleanups
1999-09-23 09:15:38 +00:00
Nick Gorham fd3f26c100 Added odbc metadata update log 1999-09-22 21:15:35 +00:00
Nick Gorham 21d8c984da Added support for metadata functions, odbc_tables, odbc_columns,
odbc_columnprivileges, odbc_foreignkeys, odbc_gettypeinfo,
    odbc_primarykeys, odbc_procedurecolumns, odbc_procedures,
    odbc_procedurecolumns, odbc_procedures, odbc_specialcolumns,
    odbc_statistics, odbc_tableprivileges
1999-09-22 21:14:03 +00:00
Andrew Skalski 1220513252 mcal fix 1999-09-22 20:23:34 +00:00
Andrew Skalski 4a35689b48 added null-checking in make_event_object 1999-09-22 20:21:40 +00:00
Andrew Skalski 4b0707cf32 Added optional port argument to ftp_connect() 1999-09-22 16:07:41 +00:00
Thies C. Arntzen 33de7a2ea4 i always forget something;-) 1999-09-22 15:26:16 +00:00
Thies C. Arntzen 24c5143122 fixed Ora_PLogon (rewrote ora_do_logon using php_mysql.c)
oracle_hack.c should no longer be needed!
1999-09-22 15:16:19 +00:00
Thies C. Arntzen 49c891f2cf preliminary fix for each until andi & zeev clean up! 1999-09-22 09:57:42 +00:00
Thies C. Arntzen 8c6da509f2 resourcified Oracle 1999-09-22 09:52:19 +00:00
Thies C. Arntzen 5f3515652a if you pass NULL as the resource_type_name to zend_fetch_resource*&friends the functions will not print any warnings if the resource is not found! 1999-09-22 09:46:44 +00:00
Stefan Roehrich 8b4000f4cb Added new allowable_tags for gzgetss() in ChangeLog, too. 1999-09-22 08:11:17 +00:00
Stefan Roehrich 0b1226219c Fixed gzgetss() with new _php3_strip_tags, corrected prototype. 1999-09-22 07:43:36 +00:00
Uwe Steinmann cc31ea96a5 - fixed misleading explaination of fdftk option 1999-09-22 05:27:55 +00:00
Andi Gutmans 7e5ef04b13 - Get rid of warning on win32, non-threadsafe mode. 1999-09-22 05:26:22 +00:00
Andrew Skalski 709286c0d2 removed NULL reference 1999-09-21 23:37:26 +00:00
Andrew Skalski 773a26bb22 added missing "addr.sin_family = AF_INET" to socket routines 1999-09-21 23:34:45 +00:00
Andrey Hristov 9ea5e71a75 *** empty log message *** 1999-09-21 21:39:20 +00:00
Andrey Hristov 33eb7d83ca WDDX can now serialize and deserialize objects. It uses a variable named
'php_classname' to store the class name as part of the structure. This way
WDDX modules in other languages don't get broken by extensions to DTD
we would have had to make otherwise.
1999-09-21 21:38:51 +00:00
Rasmus Lerdorf 1e57766b11 Slightly redundant to check for crypt() here again, but the TRY_RUN stuff
needs it defined in the same m4 file or it won't work, and it will just
get pulled out of the cache anyway, so it isn't a big deal.
1999-09-21 20:10:53 +00:00
Andi Gutmans 228a537bbe - Fix problem where function parameter fetches were created too late. 1999-09-21 20:00:01 +00:00
Rasmus Lerdorf cd0957112b fgetss/gzgetss fixes 1999-09-21 17:50:51 +00:00
Andrey Hristov 53fb0ea075 A couple of fixes. 1999-09-21 17:06:30 +00:00
Sascha Schumann 8771472210 AC_CRYPT_CAP depends on symbol checks performed later. 1999-09-21 15:00:22 +00:00
Sascha Schumann 5d70fbf6c1 * Do not check explicitly for symbols in the C library (fixes #2339)
* sort function checks
1999-09-21 14:51:24 +00:00
Thies C. Arntzen 8638a61df9 added krsort() function 1999-09-21 14:36:41 +00:00
Sascha Schumann 3f684e77a7 Continue, if re2c is not available.
Using the ".new" suffix, we prevent the shell from zeroing the file.
1999-09-21 12:24:41 +00:00
Sascha Schumann 240d17f12f Fix typo.
catched by: ssb
1999-09-21 08:41:31 +00:00
Sascha Schumann d47b44e3c2 Use install-sh (autoconf) script to install php. This automatically
creates the bindir path, so that the effect described in #2304 disappears.
1999-09-21 08:37:27 +00:00
Sascha Schumann cf00d75980 On at least Win32, gettimeofday() returns values in tv_usec which exceed
1,000,000.

    For portability reasons we set the integer part of our result to 0.
    This is equivalent to using tv_usec % 1000000.
1999-09-21 08:22:33 +00:00
Zeev Suraski 8b1195ffcc *** empty log message *** 1999-09-21 07:32:50 +00:00
Zeev Suraski a30f028a12 Add get_func_args() 1999-09-21 07:31:24 +00:00
Zeev Suraski 9f1d0dec47 *** empty log message *** 1999-09-21 00:46:22 +00:00
Rasmus Lerdorf 1324095627 woops 1999-09-21 00:21:01 +00:00
Rasmus Lerdorf 08389808ee Fix zlib compile problem 1999-09-21 00:15:21 +00:00
Andi Gutmans 6735ebb271 - Move some more language specific functions over to Zend.
get_class() and friends.
1999-09-20 21:29:41 +00:00
Andi Gutmans 68217ef564 - Move some more Zend internal functions from PHP 1999-09-20 21:28:37 +00:00
Sascha Schumann 7e686b1b95 Timestamp commit. I do consider removing the rule from Makefile.am 1999-09-20 21:17:26 +00:00
Egon Schmid 565c322797 Here was also something missing. 1999-09-20 20:05:26 +00:00
Andi Gutmans 5e3bbea0ff - Next part of locking fix.
$var = expr; and $var += expr; first create code for expr and later on
  for the fetch_w of $var.
1999-09-20 18:17:32 +00:00
Andrew Skalski 678c204e32 added FTP module 1999-09-20 18:12:55 +00:00
Andi Gutmans 7831d30265 - Newline for Sun's compiler 1999-09-20 17:01:38 +00:00
Andi Gutmans 06a18f169b - Add some internal functions to Zend 1999-09-20 16:56:09 +00:00
Andi Gutmans 96a19593b2 - Internal functions which are basic language functions should be in Zend
and not in PHP. I.e. strlen(), each(), error_reporting(), count(),
  get_class_name().
1999-09-20 16:56:02 +00:00
Rasmus Lerdorf c0dcedcafc Added optional allowable_tags arguments to strip_tags() and fgetss() to
allow you to specify a string of tags that are not to be stripped

Could have used flex for this, and Andrew sent me a flex file to do this,
but I could do the same thing with only minor additions to the existing
state machine and the resulting code is much smaller and tighter.
1999-09-20 15:50:56 +00:00
Andi Gutmans babad2694e - First step in fixing locking problem. Array fetches are now always done last.
Later on we will want to delay the write fetches even longer until after their
  resulting expression is parsed. The way it is now, will make it very easy
  to delay as long as we need.
1999-09-20 15:44:30 +00:00
Andrew Skalski 4247839610 php3 compatibility added 1999-09-20 15:40:22 +00:00
Andi Gutmans 82c8a9e745 - Indirect references had all of the fetches by mistakenly backpatched.
Actually all of the fetches are supposed to be read, except for the last
  one.
1999-09-20 14:45:36 +00:00
Andrey Hristov eb66458ed9 *** empty log message *** 1999-09-20 14:14:46 +00:00
Andrey Hristov f84ba1b039 - Upgraded var_dump() to take multiple arguments
- php3api_ is changed to php_
1999-09-20 14:14:26 +00:00
Andrew Skalski 85ca1dfb08 Replaced ftplib because of incompatible license. 1999-09-20 14:10:25 +00:00
Stig Bakken fffbcf5297 logic fix 1999-09-20 13:11:34 +00:00
Zeev Suraski 7a4a5944f9 Added zend_num_args() and zend_get_arg() 1999-09-20 13:00:35 +00:00
Thies C. Arntzen 6c0c410acf resource API & ZTS stuff 1999-09-20 12:51:20 +00:00
Zeev Suraski 13d840bc3f Add a file in which we can put Zend builtin functions 1999-09-20 12:24:39 +00:00
Zeev Suraski 8c75ad3dd3 *** empty log message *** 1999-09-20 11:56:45 +00:00
Zeev Suraski ee382ca76a Fixed a memory leak in the Apache per-directory directives handler 1999-09-20 11:54:06 +00:00
Thies C. Arntzen 4bb329eafb added array_count_values function. 1999-09-20 10:09:57 +00:00
Thies C. Arntzen 22d6f64f54 new API for var_dump 1999-09-20 09:34:39 +00:00
Zeev Suraski 4dcb388c0c *** empty log message *** 1999-09-19 11:07:49 +00:00
Andi Gutmans 3bfef7eef1 - Fix bug #2278 1999-09-18 23:21:33 +00:00
Andi Gutmans 1ac04fe9f4 - Try to fix the leak Rasmus reported. It's pretty sucky code so I'm really
not sure this fix is OK.I can't remember all of what we did there.
1999-09-18 22:07:12 +00:00
Andi Gutmans a5783da8a9 - Make Win32 compile again 1999-09-18 19:13:38 +00:00
Stefan Roehrich de13056307 Fixed prototype. 1999-09-18 19:03:35 +00:00
Zeev Suraski 6ddd686141 Safer behavior 1999-09-18 13:07:45 +00:00
Sascha Schumann 39dbe1d41b Aline escape signs in macro definitions. 1999-09-18 12:16:16 +00:00
Sascha Schumann a4838358f3 Pipe header names through sort and put only one on each line. This
makes them better accessible.

    Add stdlib.h to check headers.
1999-09-18 12:14:49 +00:00
Sascha Schumann dbc6964fbb There is no reason to define malloc() to xmalloc() in this context. 1999-09-18 12:13:48 +00:00
Andrey Hristov 8dbbeaf55a Make CVS quiet. 1999-09-17 22:25:00 +00:00
Thies C. Arntzen aa5102490a make SUNs c89 happy 1999-09-17 13:57:24 +00:00
Thies C. Arntzen ab185b11b5 SUN c89 doesn't like } direct after a label;-( 1999-09-17 12:32:18 +00:00
Thies C. Arntzen 20ee106672 no // in the sources please 1999-09-17 12:16:21 +00:00
Thies C. Arntzen 83bbb90d10 added newline at end of file 1999-09-17 12:14:31 +00:00
Gergely Madarász 32c7eaa9e3 note the shared modules in the changelog 1999-09-17 12:12:56 +00:00
Sascha Schumann 6780b649c6 Convert to Ex API. Does anyone have a better name for it? 1999-09-17 09:56:30 +00:00
Sascha Schumann 7d519f2f84 Use Ex API here as well. 1999-09-17 09:40:51 +00:00
Sascha Schumann c051b3868b Convert module to use Ex API. 1999-09-17 09:26:03 +00:00
Thies C. Arntzen 128b733eca fix #2316 - fetching empty LOBs via OCI8 1999-09-17 08:25:03 +00:00
Sascha Schumann 5a5646dce1 don't call empty function names 1999-09-17 05:45:52 +00:00
Sascha Schumann 55272d3df8 add user-level callbacks 1999-09-17 05:40:59 +00:00
Zeev Suraski 567b3cef6b - Fix bug #2318 1999-09-17 02:06:12 +00:00
Zeev Suraski d01370cdc2 *** empty log message *** 1999-09-17 02:06:08 +00:00
Sascha Schumann 09af5f967f supply path to xml include dir for APXS and APACI 1999-09-17 01:47:15 +00:00
Sascha Schumann 5a468e740c This format is also used by the XML module
allows us to compile with Apache's expat-lite dir
1999-09-17 01:38:10 +00:00
Sascha Schumann 61f288ced3 0' flag ignored with precision specifier and X' format 1999-09-17 01:16:54 +00:00
Sascha Schumann 79fd46c3a1 If available, use Apache's embedded expat 1999-09-17 00:57:28 +00:00
Sascha Schumann 51ad9501d1 fix Unix build 1999-09-17 00:12:58 +00:00
Zeev Suraski 98d95dd88e - Added support for unknown POST content types (Zeev)
- Introduce the convert_to_*_ex() API in strlen()
1999-09-16 23:18:15 +00:00
Zeev Suraski 52e769d883 Introduce convert_to_*_ex() 1999-09-16 23:15:34 +00:00
Zeev Suraski ec50085da3 *** empty log message *** 1999-09-16 22:42:21 +00:00
Zeev Suraski 71a4740847 *** empty log message *** 1999-09-16 22:31:33 +00:00
Zeev Suraski 13e67642fa Generalize SAPI a bit 1999-09-16 22:15:43 +00:00
Andrey Hristov f52ffb8943 Fixed memory leak. 1999-09-16 20:59:44 +00:00
Andrew Skalski 359a3af2a1 Added documentation hooks to ftp.c 1999-09-16 19:39:44 +00:00
Andrew Skalski 13a74e6979 added ftp_pwd() ftp_cdup() ftp_mkdir() and ftp_rmdir() 1999-09-16 19:03:27 +00:00
Andrew Skalski 93313c576c added ftp_systype() and ftp_listraw() functions 1999-09-16 18:38:11 +00:00
Andrew Skalski f0688ad7e2 Added rudimentary FTP support. 1999-09-16 15:57:51 +00:00
Sascha Schumann e20af627c2 improve short help messages 1999-09-16 15:35:49 +00:00
Sascha Schumann cf0ea12384 this was twice here 1999-09-16 14:07:56 +00:00
Sascha Schumann 119b85b736 this helps compiling on non-ANSI C compliant platforms 1999-09-16 14:06:35 +00:00
Rasmus Lerdorf 39df209ddd libtool check fix 1999-09-16 13:52:19 +00:00
Sascha Schumann 823a48558c . 1999-09-16 13:41:38 +00:00
Sascha Schumann 0320532962 Make some things accessible from outside for session module 1999-09-16 13:25:54 +00:00
Sascha Schumann 8ea07b1fd2 . 1999-09-16 13:00:06 +00:00
Sascha Schumann fa0f9ed367 wddx decode works as well 1999-09-16 12:55:31 +00:00
Sascha Schumann a597f24b5e wddx serialization works now 1999-09-16 12:00:58 +00:00
Sascha Schumann 92896a9945 Since Thies fixed var.c, objects work now, too. 1999-09-16 09:14:06 +00:00
Sascha Schumann efea424869 use AM_PROG_CC_STDC which covers AIX, Ultrix, OSF/1, HP-UX, and SVR4 1999-09-16 08:42:25 +00:00
Sascha Schumann e23d66fb5c silence libtool 1999-09-16 08:26:46 +00:00
Thies C. Arntzen 6ecd417b34 php4 now deserialized php3 objects correctly!
php3 will ignore objects serialized by php4 (that's the price we have to pay!)
small fix in deserializing objects with static initializers (thanx boris)
1999-09-16 08:05:17 +00:00
Thies C. Arntzen de73bd0123 when unserializing classes:
if the class is not known the standard class (no methods) will be used.
if the class is known - the created object will functional again!
1999-09-15 15:03:06 +00:00
Andrey Hristov b287aa2cf4 Fixed printf format. 1999-09-15 13:37:11 +00:00
Andrey Hristov 22ce3af972 HASH_OF is now in php.h. 1999-09-15 13:28:33 +00:00
Thies C. Arntzen e7ad3bbec2 use new API in var.c 1999-09-15 11:42:28 +00:00
Thies C. Arntzen 21a0c57cb1 i love id-strings 1999-09-15 11:09:32 +00:00
Thies C. Arntzen 3491633aa0 made serialize/unserialize work with classes! (also made the code "shorter")
CHANGES:
- the serialized string now also contains the class name (was not available in PHP3)!
- when unserializing php will create a fully working object of that class again
  therby the class has to be defined when unserializing - else you get a warning!
1999-09-15 11:08:25 +00:00
Stig Bakken 093e9f5e97 add LIBOBJS, used by AC_REPLACE_FUNCS 1999-09-15 11:08:00 +00:00
Thies C. Arntzen 328d08bd63 HASH_OF is usable enough (i hate duplicating macros all over the place) 1999-09-15 09:51:20 +00:00
Stig Bakken 1740e6ee4e Clean up the strlcat/strlcpy checks. 1999-09-15 09:35:20 +00:00
Andi Gutmans 36101a55ad - Leave this for now. 1999-09-15 05:44:59 +00:00
Andi Gutmans 100148168a - Thread-unsafe win32 compiles again
- Some strlcpy changes including one bug fix.
1999-09-15 05:42:36 +00:00
Andi Gutmans 0a7fc83253 - gettimeofday wasn't registered. 1999-09-15 05:08:45 +00:00
Andi Gutmans 0b601a7bea - Another small one. I'll leave the rest for now... 1999-09-14 20:15:32 +00:00
Andi Gutmans 37d7b91d48 - First go at using strlcat(). 1999-09-14 20:12:46 +00:00
Andi Gutmans 6a836bee6f - Support strlcpy/strlcat in windows. 1999-09-14 20:02:47 +00:00
Andrey Hristov 870a6679ff - Updated bundled PCRE library to version 2.08
- Made it possible to specify external location of the PCRE library
- Reworked PCRE extension to use updated PCRE library API

Hopefully now everything behaves just like Perl..
1999-09-14 19:24:37 +00:00
Andi Gutmans 61a3c147c3 Add strlcpy/strlcat to the build process 1999-09-14 19:12:57 +00:00
Uwe Steinmann 4b6328e052 - fixed memory leaks in pdf_open_memory_image() and pdf_add_bookmark() 1999-09-14 14:47:14 +00:00
Thies C. Arntzen cdd360043e forgot 1999-09-14 14:18:57 +00:00
Thies C. Arntzen da599af7cb is_array & friens speedups 1999-09-14 14:18:18 +00:00
Rasmus Lerdorf 0fd0323956 Fix a warning 1999-09-14 14:09:57 +00:00
Thies C. Arntzen 41da939988 count() now uses the new getParamertersEx API. 1999-09-14 13:34:27 +00:00
Thies C. Arntzen ac1a484c84 i'm sure this was left-over debugging code! 1999-09-14 13:32:54 +00:00
Thies C. Arntzen 598aaba8ca you can now position when doing lob-writes. 1999-09-14 12:41:00 +00:00
Andi Gutmans 331221eec6 - X-* is probably more standard. 1999-09-13 20:03:56 +00:00
Stig Bakken 809198b916 Added PHP_WITH_SHARED for checking "shared,*" prefix when configuring
extensions.
1999-09-13 17:17:51 +00:00
Thies C. Arntzen 95303a4bb2 added Metaphone support 1999-09-13 15:48:32 +00:00
Thies C. Arntzen c2042b1561 got rid of the define-callback stuff there's a bug in oracle-oci8! 1999-09-13 15:19:29 +00:00
Andrey Hristov 93c35c3352 Per Stig's suggestion. 1999-09-13 14:15:22 +00:00
Thies C. Arntzen c21663b3e7 ported $lob->savefile($filename) method from PHP3 1999-09-13 11:49:07 +00:00
Stig S. Bakken af1e5ad881 Make sure HAVE_LIBDL gets defined.
Disable more C++ tests when not configured for thread safety.
1999-09-13 11:29:44 +00:00
Thies C. Arntzen f858b6891c cleanups 1999-09-13 11:13:53 +00:00
Thies C. Arntzen d5bafdaa20 ported oci8 to use new class API
var_dump no longer tries to traverse avr->value.ht for objects but uses var->value.obj.properties instead
1999-09-13 10:52:54 +00:00
Zeev Suraski b88ef58a9f Modified phpinfo() to show the contents of arrays in HTTP_*_VARS[] 1999-09-13 01:11:41 +00:00
Zeev Suraski 3f0696dada Fix a buglet, and avoid crashing in phpinfo() (fixes an elusive legacy bug too) 1999-09-13 00:35:03 +00:00
Zeev Suraski b2c0acb9ec - Rewrote the GET/POST/Cookie data reader to support multi-dimensional
arrays! (Zeev)

This still needs a lot of more testing, but it seems to work more or less.
1999-09-12 23:51:12 +00:00
Zeev Suraski ce5a09ea40 Add PHP-Version header in IIS 1999-09-12 21:07:53 +00:00
Zeev Suraski 9e3315799c That's important enough to be cached 1999-09-12 20:36:48 +00:00
Zeev Suraski 5f1793e21c Make this class instanciatable 1999-09-12 19:27:50 +00:00
Sascha Schumann c656292b96 check for c++ only, if thread safety is enabled 1999-09-12 14:14:34 +00:00
Sascha Schumann 96559e91fe use static buffer for URLs instead of allocating/freeing memory
for each one
1999-09-12 13:03:10 +00:00
Sascha Schumann ac524d4b94 calculate length of cookie string correctly 1999-09-12 12:27:11 +00:00
Sascha Schumann 2e844a0799 add missing result msg 1999-09-12 12:20:59 +00:00
Sascha Schumann 691881a505 move session URL stuff to the last place before SAPI takes over 1999-09-12 11:36:45 +00:00
Sascha Schumann f2ff18e71e These shouldn't be here 1999-09-12 10:25:26 +00:00
Andi Gutmans d5968b8f21 - Oops 1999-09-12 09:57:51 +00:00
Andi Gutmans da973fe6bf - Make it compile on Win32 1999-09-12 09:55:53 +00:00
Zeev Suraski a1784083e9 Time to do that - rename the output layer prefix 1999-09-12 03:25:02 +00:00
Zeev Suraski 5a6b8653b9 *** empty log message *** 1999-09-12 03:08:29 +00:00
Sascha Schumann 036cc83ed6 expand version number 1999-09-12 00:45:38 +00:00
Sascha Schumann 3a9f68eb11 update 1999-09-12 00:44:08 +00:00
Andrey Hristov b203fb3481 Reverting to previous state. 1999-09-12 00:32:22 +00:00
Sascha Schumann 276c815f04 update macro 1999-09-12 00:31:23 +00:00
Andrey Hristov 0ac98aa95a Use global symbol table instead.. 1999-09-12 00:07:10 +00:00
Andrey Hristov 0c3ada7dd4 Use TRANS_SID macro for selective compilation.. 1999-09-12 00:05:45 +00:00
Andrey Hristov d8fc73b5c4 - Fixed mem leak when undefined variable was passed in for serialization
- Made it properly serialize object properties
1999-09-12 00:04:29 +00:00
Sascha Schumann 9531846163 add rule for url_scanner.c 1999-09-12 00:00:44 +00:00
Sascha Schumann b0f01a4778 - add standard disclaimer
- regenerate scanner with re2c -s
1999-09-11 23:53:40 +00:00
Sascha Schumann f040ce584d add transparent session id propagation
this uses a custom scanner which detects relative URIs and changes
  them appropiately.
  must be explicitly enabled with --enable-trans-sid
  (normal case is not affected, since session_adapt_uris defaults to
   void statement. Compiler should eliminate dead code in output.c then.)
1999-09-11 23:47:16 +00:00
Andrey Hristov 9706aa1daa - Added session_unset() function
- Fixed double session globals shutdown crash
- Added warning when session_destroy() is called without session_start()
1999-09-11 22:31:04 +00:00
Andrey Hristov 99caa5d43b Use OnUpdateBool for Boolean entries. 1999-09-11 20:36:47 +00:00
Sascha Schumann 2f39b484f5 avoid mmap overhead for small files 1999-09-11 18:38:34 +00:00
Sascha Schumann dda0b783df optimize fpassthru/readfile to use mmap instead of fread
which especially increases speed on large files.
1999-09-11 18:15:39 +00:00
Sascha Schumann 533ef3988b - support for external entropy sources
- extern_referer_chk => extern_referer_check
- kill a warning in mod_files.c
1999-09-11 17:20:31 +00:00
Zeev Suraski 7afbcb4fef Rename allow_builtin_links to expose_php 1999-09-11 16:32:08 +00:00
Zeev Suraski 27afe4e49b More cleanup 1999-09-11 16:16:16 +00:00
Zeev Suraski 7f42813ad8 Except for this small bug fix - it works 1999-09-11 15:36:00 +00:00
Zeev Suraski 15fee4d3a6 - Seriously optimize and clean php_parse_gpc_data()
- Added gpc_globals directive to turn global definitions of GPC variables on/off
(untested)
1999-09-11 15:04:45 +00:00
Zeev Suraski 1b6ccfe86c Cleanups & optimizations 1999-09-11 14:09:29 +00:00
Zeev Suraski fb910c64cd Cleanups 1999-09-11 13:44:23 +00:00
Sascha Schumann 177341f899 Move Linux check => more general --version-script check 1999-09-10 23:36:04 +00:00
Sascha Schumann b5c6dfdd0c add info about php3/php4 apache modules 1999-09-10 23:22:16 +00:00
Sascha Schumann 494defe52b tweak the INSTALL document a little bit 1999-09-10 22:55:32 +00:00
Sascha Schumann 9ae2115123 pass flag correctly to linker 1999-09-10 22:05:58 +00:00
Sascha Schumann 7cb18f7109 - better use of scoping
- support Solaris 2.x
1999-09-10 21:51:17 +00:00
Andrey Hristov b87e105411 Workaround for m4 weirdness. 1999-09-10 18:53:55 +00:00
Mark Musone b147536a10 lets not go down that road..were onyl going to use the internal event structure. No passing objects 1999-09-10 18:25:19 +00:00
Mark Musone 75b03f5f72 wrong preprocessor command 1999-09-10 18:21:41 +00:00
Mark Musone c8f88a0c0b ported the php3 stuff to php4. This module should work intechangably between the two versions also 1999-09-10 18:15:29 +00:00
Zeev Suraski d7357c0649 *** empty log message *** 1999-09-10 16:27:13 +00:00
Zeev Suraski ca1b3ffbc8 Shut up a warning 1999-09-10 16:16:24 +00:00
Uwe Steinmann 055472d3b4 - wrong use of php_print corrected 1999-09-10 05:23:02 +00:00
Zeev Suraski 2f9260fe4c Lost functionality in earlier fix... That should really work. 1999-09-10 02:59:37 +00:00
Zeev Suraski 7dc2579bfe That should do the trick (untested) 1999-09-10 02:55:28 +00:00
Mark Musone f2b3c3c2f6 my bad, sorry 1999-09-10 02:47:49 +00:00
Mark Musone 63243be5ac fixed memory leak 1999-09-10 02:37:46 +00:00
Andi Gutmans 22f066e708 - Add foreach() freeing code.
- Fix switch() freeing code to only free current function's switch expressions.
- I have a feeling break expr; in a switch where expr > 1 leaks because it
  won't free all of the expressions. Fix is probably not trivial.
1999-09-09 14:15:17 +00:00
Andi Gutmans 7567b96c22 - Add mcal to TS project. It seems that mcal needs to be patched a bit in
order to work TSRM. Right now it has globals.
1999-09-09 13:00:07 +00:00
Andi Gutmans f0a988a26a - Fix leak when decrementing strings which actually are longs. 1999-09-09 12:59:09 +00:00
Uwe Steinmann ca4005f623 forgot to change prototype 1999-09-09 06:41:15 +00:00
Uwe Steinmann 6bcb8eb1be pdf_setfont got optional parameter to embed fonts 1999-09-09 06:19:01 +00:00
Andi Gutmans 67daaa7aac - Fix for floating point array offsets. Same behaviour as in PHP 3.0. We
casted to (long).
1999-09-08 20:38:08 +00:00
Andrey Hristov 42e39d474b Remove extraneous debug dlerror() call which results in the subsequent
dlerror() returning NULL.
1999-09-08 19:36:18 +00:00
Andi Gutmans afecff3aa4 - Add -b option to flex++ 1999-09-08 17:16:22 +00:00
Gergely Madarász d4b10839b3 remove -Wl,--version-script from RPATHS, put it into a separate
variable
1999-09-08 14:31:57 +00:00
Danny Heijl 558d287af9 Be consistent. 1999-09-08 14:09:05 +00:00
Uwe Steinmann 66a636a6ae - add posibility to specify how objrec to objarr conversion
is performed (not ready yet)
1999-09-08 12:29:13 +00:00
Sascha Schumann b43cf1a583 add versioning support 1999-09-08 12:26:31 +00:00
Jakub Skopal bb4bc40cf9 Correct compiler warning. 1999-09-08 11:53:16 +00:00
Andi Gutmans e4e39b8263 - Update non-threadsafe project file 1999-09-07 20:42:20 +00:00
Andi Gutmans 48ab0fb57d - Fix warnings and win32 compile 1999-09-07 20:29:31 +00:00
Andrey Hristov 6101d108e0 Here you go, Egon. 1999-09-07 19:41:28 +00:00
Stefan Roehrich 06362129fa Fixed behavior with empty doc_root.
gzgetss() now uses _php3_strip_tags.
1999-09-07 19:05:37 +00:00
Stig Bakken 5c40e7c41e Add thread-safety notice here. The solution is using gethostbyname_r,
but it seems that it takes different parameters on Solaris and
Linux. ;-P We should probably make a wrapper function, and make a
configure test that checks if there is a reentrant version available,
and if not protect gethostbyname and similar calls with a mutex until
the results have been copied.  Ugly.
1999-09-07 18:46:25 +00:00
Andrey Hristov 7aacff63c9 Added second parameter to array_keys() which allows returning keys
only for a specific value in an array.
1999-09-07 18:29:59 +00:00
Andrey Hristov cff218cf54 Kill compiler warning. 1999-09-07 18:26:36 +00:00
Andrey Hristov d6c9c23ff5 Shut up, CVS. 1999-09-07 16:09:48 +00:00
Andrey Hristov 209fe717b1 Kill warnings. 1999-09-07 16:09:18 +00:00
Uwe Steinmann 51b01ca9b7 - uniqid() used the additional parameter even if it was not provided
this caused an segm fault. fixed it.
1999-09-07 10:34:17 +00:00
Stig S. Bakken 928863f85b define tests first, use after. 1999-09-07 09:02:41 +00:00
Zeev Suraski 959ad0e9ea A couple of BoundsChecker fixes 1999-09-06 22:40:27 +00:00
Andi Gutmans 4bc3097e6f - Fix win32 compile 1999-09-06 20:43:35 +00:00
Andi Gutmans f1afd5796c - Should fix Win32 compile 1999-09-06 20:43:25 +00:00
Andi Gutmans a0bad70bd1 - Make zend compile again in Win32. 1999-09-06 20:33:40 +00:00
Egon Schmid f0f7b9de53 File should here be string. 1999-09-06 20:13:23 +00:00
Danny Heijl c7cdb687da Forgot to update ChangeLog 1999-09-06 19:24:47 +00:00
Stefan Roehrich e4b7bf4ae8 Removed remaining PHP_31 defines.
First try with ZTS support, can someone with a working ZTS enabled setup test this, please?
1999-09-06 19:09:47 +00:00
Gergely Madarász 8ee14c990b Enabled shared build of gd module 1999-09-06 16:50:11 +00:00
Stig S. Bakken 2829eaeee8 ignore zend-scanner.cc 1999-09-06 16:15:52 +00:00
Stig S. Bakken 623406cf2b hand-patched some MSVC files 1999-09-06 16:15:27 +00:00
Stig S. Bakken 009025e00d * header file cleanup
* fixed --enable-thread-safety build for UNIX

I don't have a Win32 environment available, could someone please try
compiling on Win32 to see if I got all the header file stuff right there?
1999-09-06 16:14:08 +00:00
Stig S. Bakken 4d5491e285 Workaround to prevent TSRM from defining PACKAGE and VERSION.
No longer using autoheader.
1999-09-06 15:32:19 +00:00
Danny Heijl dad0716e37 - "Resourcified" the Informix driver. 1999-09-06 13:55:43 +00:00
Stig Bakken af2dca818c untabified 1999-09-06 13:35:37 +00:00
Jakub Skopal a38995a832 Workaround for crypt() getting too few characters for salt. 1999-09-06 13:24:36 +00:00
Stefan Roehrich 93252bd556 Fixed prototype. 1999-09-06 08:59:48 +00:00
Zeev Suraski f3e63d9e71 Fix the 4.0 tree (forgot to commit) 1999-09-06 05:21:45 +00:00
Jakub Skopal cb25b1222e Corrected the argument-list for getopt. -c expects argument. 1999-09-06 01:33:13 +00:00
Jakub Skopal 5cc16d86b0 Added addcslashes(), stripcslashes().
Reverted addslashes() to the very original behaviour.
1999-09-05 20:55:13 +00:00
Sascha Schumann 8aa0c92bc6 fix warning 1999-09-05 19:59:28 +00:00
Andi Gutmans 7ebbe20fb0 - Should fix short_tags and co. problem. 1999-09-05 19:49:54 +00:00
Andi Gutmans 2807ba18e1 - Oops 1999-09-05 19:37:24 +00:00
Andi Gutmans 52cb8bb275 - Make Win32 compile once again. 1999-09-05 19:36:04 +00:00
Andi Gutmans 14d9a59f1c - Make dir functions compile in Win32
- Fix too early memory manager initialization (For you Thies)
1999-09-05 19:04:40 +00:00
Andi Gutmans 99947a251e - Shift around header files. 1999-09-05 19:03:35 +00:00
Stefan Roehrich 5bcc067687 Find debian umich-ldap libraries/include files. 1999-09-05 16:28:16 +00:00
Andreas Karajannis dd509608a1 Changes for updated odbc module 1999-09-05 13:06:24 +00:00
Andreas Karajannis 361a09e5fa Renaming odbc files 1999-09-05 13:03:22 +00:00
Andreas Karajannis 8a7d806054 New resource handling for odbc module 1999-09-05 13:01:42 +00:00
Sascha Schumann 5a2189f3d3 work around gcc bug, otherwise compiler would die with
toplev.c:2261: Internal compiler error in function float_signal

in basic_functions.c
1999-09-05 11:38:01 +00:00
Andi Gutmans 04b0bc4c70 - php_error(E_ERROR,...) won't ever return so change the connection_status
before it is called.
1999-09-05 05:15:42 +00:00
Jakub Skopal 8c2f752c3d C++ comment fix... sorry. 1999-09-05 00:58:59 +00:00
Jakub Skopal 06545c3364 Appended second argument of addslashes(),
Changed php_addslashes() to add \000 instead of just \0
1999-09-05 00:55:48 +00:00
Rasmus Lerdorf bcb0020705 Forgot one 1999-09-04 22:18:43 +00:00
Rasmus Lerdorf f42659a8f1 Kill a warning 1999-09-04 22:15:51 +00:00
Zeev Suraski ce4e09daff This was actually intentional... put it back in and improve 1999-09-04 22:13:41 +00:00
Rasmus Lerdorf 54ec3a8e2f Cleanups
What the heck was that dangling (c) for in the PUTC macros?  Were they
supposed to serve some sort of purpose, because I sure don't see one for
them.
1999-09-04 22:06:12 +00:00
Zeev Suraski 7d33215124 Fix a stupid bug (from stefan@roehri.ch) 1999-09-04 21:58:51 +00:00
Stefan Roehrich fcd55e03cb First try with new resource handling in zlib module. 1999-09-04 21:51:54 +00:00
Rasmus Lerdorf 045aaef644 Oops, set_time_limit() would never have worked becase HAVE_SETITIMER
never got defined anywhere.
1999-09-04 21:33:18 +00:00
Rasmus Lerdorf 56b75920b4 Oops 1999-09-04 21:16:41 +00:00
Rasmus Lerdorf d3439023d3 Catch a timeout and add user-level interface for connection handling 1999-09-04 21:10:39 +00:00
Rasmus Lerdorf 82d975d671 Might as well bail as soon as we know we should since this is now
possible.  We still need to set our connection status bit field so a
shutdown function can figure out if a script was terminated due to an
abort, timeout or finished normally.
1999-09-04 20:37:24 +00:00
Rasmus Lerdorf 0bede914ab First part of the connection_status work. No user-callable functions
yet.  That is coming next.  Have also only done Apache and CGI so far.
Will have to crack open my ISAPI book to do that one.

Also changed the SAPI output functions to return an int.  We'll check
the connection status inside each one, but we might need the return
code at some other level and I don't see a good reason for just tossing
these return codes.
1999-09-04 20:12:47 +00:00
Andrey Hristov 8e9cd1e4ae Oops, don't need those commented out blocks. 1999-09-04 19:09:37 +00:00
Andrey Hristov 3af5f84c9d Kill compiler warnings. 1999-09-04 19:08:19 +00:00
Andrey Hristov ef943e75a5 Conform to new resource handling guidelines. 1999-09-04 19:07:57 +00:00
Zeev Suraski c12d4bc7d4 *** empty log message *** 1999-09-04 13:18:59 +00:00
Zeev Suraski 6d4ab7372d Add resource support to the Sybase CT module 1999-09-04 13:03:09 +00:00
Sascha Schumann 62fc17983a First try at WDDX serializer
(not active currently)
1999-09-04 11:25:43 +00:00
Zeev Suraski 81301ad2a9 A few fixes 1999-09-04 11:05:34 +00:00
Sascha Schumann 7e70c1ad91 cleanup 1999-09-04 08:33:31 +00:00
Sascha Schumann c49cdc9a64 remove superflicious enumaration 1999-09-04 08:21:36 +00:00
Sascha Schumann 7796f4d995 bail out, if ps_mm_instance wasn't initialized correctly
(should take place in global startup)
1999-09-04 08:21:09 +00:00
Sascha Schumann 7e50dda96b implement single directory garbage collector 1999-09-04 08:20:43 +00:00
Zeev Suraski 43523e9854 Update the mSQL module with the latest tech 1999-09-04 00:37:31 +00:00
Zeev Suraski 63b272998c Damn, forgot to commit that 1999-09-03 23:54:41 +00:00
Zeev Suraski 0d66693cc3 *** empty log message *** 1999-09-03 23:40:44 +00:00
Andrey Hristov 5e4a85f2e3 Static is good... 1999-09-03 21:12:10 +00:00
Zeev Suraski 3160cab22b Final MySQL tweaks 1999-09-03 19:54:12 +00:00
Danny Heijl a9fd483aff - backed out IS_RESOURCE stuff in favour of old php3-style IS_LONG
for now. This makes the Informix driver work again.
1999-09-03 19:50:14 +00:00
Zeev Suraski 90f67c6245 More cleanups 1999-09-03 19:37:46 +00:00
Zeev Suraski d7d966f7c6 Use the new API for resources in MySQL 1999-09-03 19:13:37 +00:00
Zeev Suraski 3feb4b3bdd Add new API for resources 1999-09-03 19:12:07 +00:00
Stefan Roehrich c1a4861eb1 Added detection of Oracle 8.1 (aka 8i) from PHP3. 1999-09-03 19:04:35 +00:00
Andrey Hristov f72897c29d Practice what you preach, I guess. 1999-09-03 19:01:19 +00:00
Sascha Schumann 3e591dabbd Add global startup/shutdown functions in Win32 version as well 1999-09-03 18:33:30 +00:00
Sascha Schumann 8e8d923fea Add prototypes for new functions in internal_functions.c.in 1999-09-03 18:32:34 +00:00
Sascha Schumann 5b293ecd4d - add global startup/shutdown handlers
- improve genif.sh to also consider all header files for inclusion
  (checks for phpext_)
- use vsnprintf in main.c to avoid buffer overflows
- improve sessions's mm module to cope better with OOM situations
  within the shared memory segment
- fix typo wrt session.auto_start
1999-09-03 17:46:39 +00:00
Sascha Schumann 690575e51f Add global startup/shutdown functions 1999-09-03 17:43:10 +00:00
Sascha Schumann 331823337c Makefile.in and other generated do not belong under CVS control 1999-09-03 17:41:58 +00:00
Gergely Madarász bc53807a17 Enabled shared build of mysql module 1999-09-03 17:13:53 +00:00
Gergely Madarász 9a17e7b6f5 Small cleanup 1999-09-03 16:37:00 +00:00
Gergely Madarász d447d17602 Enabled shared build of snmp module 1999-09-03 16:04:28 +00:00
Zeev Suraski 18d11eea40 Revert the IS_RESOURCE patch. It had some unintended behavior. 1999-09-03 15:22:04 +00:00
Gergely Madarász 94bc5f6c55 Enabled shared build of pgsql module 1999-09-03 14:58:51 +00:00
Andrey Hristov f8d9ef14b5 Fixed resource handling to conform to PHP4 guidelines. 1999-09-03 14:17:10 +00:00
Uwe Steinmann 303558e6cf - complete rewrite of object to array conversion 1999-09-03 10:21:55 +00:00
Zeev Suraski ee56524324 Version update 1999-09-03 08:26:13 +00:00
Zeev Suraski 276c876171 - Fixed several problems with output buffering and HEAD requests (Zeev)
- Fixed HTTP Status code issue with ISAPI module (Zeev)
1999-09-03 02:39:36 +00:00
Zeev Suraski 69fa5199bc Let $GLOBALS actually work... 1999-09-03 01:34:52 +00:00
Zeev Suraski 2521b5550a *** empty log message *** 1999-09-03 00:18:52 +00:00
Zeev Suraski 7b083fe5d1 Release resources when converting to other types (fix Thies's reported problem) 1999-09-03 00:11:47 +00:00
Zeev Suraski a3f77686ef Use \0NameFilenameLineno as key instead of numeric index for runtime defined functions 1999-09-02 21:06:05 +00:00
Stig Bakken 1bce4ebfd8 clean up library naming 1999-09-02 18:22:07 +00:00
Thies C. Arntzen 9e959a0b8a newest GetImageSize renamed header-file 1999-09-02 11:58:23 +00:00
Andi Gutmans 5b52d07ea6 - Small fix but it's important for people to know when B3 is released. 1999-09-02 04:26:48 +00:00
Mark Musone ed74428ca1 Added mcal module 1999-09-01 20:30:27 +00:00
Andi Gutmans b6789ae332 - Add sessions module to standard win32 build. 1999-09-01 19:28:07 +00:00
Andrey Hristov 7894c0cc1a Fix lcg.h location. 1999-09-01 14:20:15 +00:00
Uwe Steinmann 26415d0465 - Group-attribute may now appear multiple times in objrec record. 1999-09-01 06:15:46 +00:00
Stig Bakken 4092f4b8c0 ext/lcg -> ext/standard in various places 1999-08-31 18:05:22 +00:00
Stig Bakken b5375a323d oops 1999-08-31 15:57:30 +00:00
Thies C. Arntzen fb981b9650 we need DEFS when compiling this dir 1999-08-31 15:42:12 +00:00
Stig Bakken 788b25ccf8 fix for bug #2165 1999-08-31 15:39:13 +00:00
Stig Bakken b55d490ef0 fix for bug #2191 1999-08-31 15:27:31 +00:00
Stig Bakken 0e5f26c6bb compat fix, bug #2201 1999-08-31 15:20:21 +00:00
Thies C. Arntzen e8e88afd11 "fix" for #2202 1999-08-31 13:10:55 +00:00
Andreas Karajannis 125da02aa7 Add support for unixODBC 1999-08-30 10:48:23 +00:00
Stig Bakken 5600f889b2 moved lcg stuff to ext/standard 1999-08-29 20:12:12 +00:00
Sascha Schumann 869eeb62f4 PATH_TRANSLATED was not used at all, even if one comment implied
it should be used. After adding this, the CGI version works for me
w/ Apache + suexec
1999-08-29 18:25:37 +00:00
Egon Schmid 621fe70048 This one was nonesense. 1999-08-29 15:07:54 +00:00
Egon Schmid db44261039 Missing return type. 1999-08-29 15:00:18 +00:00
Egon Schmid 2c0b8b5ac8 Oops, file should be string here. 1999-08-29 09:59:12 +00:00
Rasmus Lerdorf 7c08c88a87 This check actually doesn't make a whole lot of sense. We need
something here, but if a mod_auth_* module declines, the type is
still set.  So, we need a check to see if there have been a
non-declined auth hook previously for this request.  I will ponder
a good approach to this.
1999-08-28 23:30:37 +00:00
Zeev Suraski a27ed294df Add -d switch 1999-08-28 23:06:07 +00:00
Zeev Suraski 3a52ee44f5 *** empty log message *** 1999-08-28 21:51:12 +00:00
Zeev Suraski 81e0131bc9 *** empty log message *** 1999-08-28 21:43:24 +00:00
Philippe Verdy ce6db81dce semicolon syntax error 1999-08-28 17:01:32 +00:00
Philippe Verdy 1dcee0c840 Bug in gmmktime():
it produced wrong results in New Foundland,
Central Australia, India, Iran, and Java, with
half-hour timezones.
1999-08-28 16:19:14 +00:00
Sascha Schumann 053712c95d when "track_vars" is disabled and a script which contains <?php_track_vars?> is
accessed for the first time, track vars were not created properly.
1999-08-28 14:00:44 +00:00
Sascha Schumann 52cd153723 merge in fix from php3 1999-08-28 13:53:46 +00:00
Zeev Suraski 4628f3021b New relay code 1999-08-28 11:17:28 +00:00
Sascha Schumann 563cb21539 If we stick to this style, parsing becomes easier (for humans and computers). 1999-08-28 10:31:54 +00:00
Zeev Suraski cda27ae9ac Beef up debug macros 1999-08-28 10:18:54 +00:00
Zeev Suraski 023cb6474b Fix a crash bug in case of aborted execution 1999-08-27 21:21:04 +00:00
Sascha Schumann 49824ee8cb - fix potential buffer problem in send_cookie
- fix gc probability algorithm
- don't access mod_data directly
- initial version of mm support for session data storage

  This works pretty good, but we need to create the initial mm pool
  from the parent process/thread. Still looking for a clean way to do that.
1999-08-27 21:03:22 +00:00
Zeev Suraski aa8b27ba1d Better debug macros 1999-08-27 19:17:19 +00:00
Andreas Karajannis 9eea00c086 Typo fix 1999-08-27 08:46:23 +00:00
Zeev Suraski f681b37c7b *** empty log message *** 1999-08-27 04:51:49 +00:00
Zeev Suraski afb0c684dc Tiny fixes 1999-08-27 04:39:19 +00:00
Zeev Suraski 1dadb97552 Log date&time on script logs 1999-08-27 04:31:53 +00:00
Mark Musone 6821da54f8 lets not make global functions unless we need to..actually this should be taken out someday 1999-08-27 04:22:39 +00:00
Mark Musone a92788ddd9 cleand up storing new events 1999-08-27 04:21:47 +00:00
Rasmus Lerdorf 8ccce347a3 Missing return types in prototypes 1999-08-26 14:13:14 +00:00
Andrey Hristov e0166ebc06 shut up CVS 1999-08-26 13:27:26 +00:00
Andrey Hristov aa147184ba *** empty log message *** 1999-08-26 13:26:57 +00:00
Andrey Hristov 1a218328da Fix for #2161 1999-08-26 13:25:53 +00:00
Andi Gutmans 02822cbc33 - Damn. It wasn't a correct fix. This should do it.
When the zval ** are equal we don't want to assign_ref, in any other case
  I can think of we do want to assign_ref.
1999-08-26 07:33:53 +00:00
Andi Gutmans 2c88f2950c - Fix leak when global is used in the global scope. 1999-08-26 07:26:15 +00:00
Andi Gutmans f297719cdb - Make Win32 compile again. 1999-08-26 06:49:42 +00:00
Andi Gutmans 1bfb1f7958 - Fix when redefining classes at run-time. 1999-08-26 06:47:45 +00:00
Sascha Schumann 8b44285b90 make it compile with gcc again 1999-08-25 21:54:00 +00:00
Andi Gutmans 746ce67b66 - Add hash_apply_with_arguments() 1999-08-25 19:02:13 +00:00
Sascha Schumann 3b408ce516 . 1999-08-25 16:58:01 +00:00
Sascha Schumann 33ed504ef4 AIX wants the value, not the pointer to the value.
Fixes #2149
1999-08-25 16:53:57 +00:00
Andi Gutmans 7a9ad9d0c8 Make fopen() work with URL's in Win32 1999-08-25 16:24:14 +00:00
Andi Gutmans c5d640d8af - More elegant fix for Win32 include_path 1999-08-25 13:46:52 +00:00
Andi Gutmans f065529b6d - Fix for include_path for Win32 (Zend library) 1999-08-25 12:22:45 +00:00
Andi Gutmans c7f7b1c3d6 - Temporary fix to allow Win32 MT safe version to use zend_fopen(). 1999-08-25 12:20:50 +00:00
Zeev Suraski 7e250d06f5 Add output_buffering directive 1999-08-24 23:12:50 +00:00
Mark Musone d8a322e7be argh..Finally 1999-08-24 20:56:02 +00:00
Sascha Schumann 9aea8d5bdc suppress error exit status on non Rhapsody systems 1999-08-23 23:02:09 +00:00
Sascha Schumann d9bf422f12 don't print out error message 1999-08-23 22:43:18 +00:00
Sascha Schumann a05e8e7a75 malloc.h is deprecated, use stdlib.h instead 1999-08-23 19:43:01 +00:00
Andi Gutmans 48a8b14a47 - Fixed a specific memory leak linked to locking. 1999-08-23 19:02:28 +00:00
Mark Musone 196b2350f4 changed to use the new, soon to be public libicap 0.99 1999-08-23 17:19:06 +00:00
Sascha Schumann 0e43d751ea return true to match documentation 1999-08-23 15:37:11 +00:00
Sascha Schumann d82728c4d0 This changes makes it work on egcs 1.1.2/Alpha 1999-08-22 19:43:04 +00:00
Andi Gutmans d13f6d754f - Add lcg to windows project. 1999-08-22 19:19:42 +00:00
Sascha Schumann 306c8a7fc8 . 1999-08-22 18:48:57 +00:00
Sascha Schumann 85151a61ce remove all references to RAW_RPATHs
Apache builds now correctly when shared core is used
1999-08-22 18:47:27 +00:00
Sascha Schumann 433880bc6e remove checks 1999-08-22 18:34:40 +00:00
Sascha Schumann 1dd31c38a6 - cleanup code
- add script which creates the directory tree for better scaling
  of mod_files

I have to decide yet whether we implement the garbage collection in the
module or if we simply let the user do

find path -ctime +1 | xargs rm
1999-08-22 14:14:46 +00:00
Sascha Schumann 02d6ec2a6b Use O_EXCL where possible. 1999-08-22 13:43:23 +00:00
Sascha Schumann 070dfe0833 - add session.extern_referer_chk
- use combined lcg in session id creation
1999-08-21 20:48:40 +00:00
Sascha Schumann f9b8901791 . 1999-08-21 17:34:55 +00:00
Sascha Schumann c9bb8db0ad get rid of that usleep() and add some entropy using the combined lcg 1999-08-21 17:22:08 +00:00
Zeev Suraski 6313238c63 Fix for Thies's UMR 1999-08-20 17:02:11 +00:00
Andrey Hristov e5aa4c844f *** empty log message *** 1999-08-20 13:04:05 +00:00
Andrey Hristov 01ed90ccef Fix bug #2025 1999-08-20 13:03:22 +00:00
Egon Schmid 17f132f9ee Here was also something missing 1999-08-19 20:31:57 +00:00
Mark Musone 67e81da36b *smack*...must..initialize...return...value.. 1999-08-19 19:02:22 +00:00
Uwe Steinmann c3fe95d971 On the way to make configure more robust 1999-08-19 17:07:27 +00:00
Andi Gutmans aeec4e198a - Fixed memory leaks. tsrm resource id deallocation still needs to be implemented. 1999-08-19 16:52:53 +00:00
Andi Gutmans e5fbf4414a - Make sure expr_list and echo_list are either empty or comma seperated
expressions
1999-08-19 15:15:34 +00:00
Uwe Steinmann 4747a40964 - fixed several memory leaks
- fixed broken hw_cp and hw_mv functions
1999-08-19 15:03:15 +00:00
Andrey Hristov 2bcf787a29 *** empty log message *** 1999-08-19 13:19:47 +00:00
Uwe Steinmann 7d52d5b786 missing return type 1999-08-19 06:43:44 +00:00
Rasmus Lerdorf 314f107498 TTF support tested and working now 1999-08-19 06:32:07 +00:00
Rasmus Lerdorf 7f97086631 This should fix TTF support - untested 1999-08-19 05:23:02 +00:00
Andi Gutmans fd28fec38b - Fixed typo in oci8 error message 1999-08-19 04:13:56 +00:00
Andrey Hristov c10c675f5b Fixed bug #2105 1999-08-18 17:23:01 +00:00
Chuck Hagenbuch 869c196fa0 cjh: fixing the imap_add_body crash in php4. 1999-08-18 17:19:20 +00:00
Thies C. Arntzen c1218de0d2 ZTS 1999-08-18 16:48:59 +00:00
Andrey Hristov 3f48a5524d Ported fixed for bug #2103 from PHP3. 1999-08-18 16:43:57 +00:00
Thies C. Arntzen f63da06238 ZTS fix 1999-08-18 15:40:54 +00:00
Thies C. Arntzen bed72caf06 some ZTS stuff 1999-08-18 15:39:46 +00:00
Thies C. Arntzen 9e9050a428 on unix ZTS gets defined in zend_config.h 1999-08-18 15:26:39 +00:00
Thies C. Arntzen e3aeb15678 ocifetchinto fix 1999-08-18 12:51:51 +00:00
Zeev Suraski 50bfff5502 Fix #2012 1999-08-17 22:31:45 +00:00
Zeev Suraski cd2006f8b7 Fix #2090 1999-08-17 22:06:55 +00:00
Zeev Suraski 39f6b22dae *** empty log message *** 1999-08-17 22:01:10 +00:00
Zeev Suraski 65e6d82771 Fix #2096 1999-08-17 22:00:02 +00:00
Zeev Suraski 96fd258d07 Fix #2070 1999-08-17 21:36:30 +00:00
Andi Gutmans acd6114fa7 - Add some ZENDAPI's 1999-08-17 19:25:22 +00:00
Sascha Schumann 71e3f6fde3 merge in change:
Date:   Monday June 28, 1999 @ 4:40
Author: bjh

Update of /repository/php3/functions
In directory php:/tmp/cvs-serv5697

Modified Files:
    crypt.c
Log Message:
Stop core dump using crypt() with standard DES. When PHP3_MAX_SALT_LEN = 2
adding the null terminator to the salt exceeds allocated space causing
stack corruption.
1999-08-17 18:21:04 +00:00
Sascha Schumann 52d6ab608f update 1999-08-17 18:08:37 +00:00
Sascha Schumann 1f4d09c09f HAVE_FREETYPE_H isn't defined anywhere. HAVE_LIBTTF should be sufficient 1999-08-17 18:06:39 +00:00
Sascha Schumann 4ceffd7131 fix persistency of mhash_* constants 1999-08-17 17:31:27 +00:00
Mark Musone 01b178292e dont have these library functiosn yet 1999-08-17 16:55:01 +00:00
Mark Musone b9d17aaab4 argh..heh..par for the course.. 1999-08-17 16:51:04 +00:00
Mark Musone f08430ec65 argh..bad day.. 1999-08-17 16:50:27 +00:00
Mark Musone 1d9a7c2623 please work... 1999-08-17 16:44:17 +00:00
Mark Musone 4136916e2f hrmmm 1999-08-17 15:17:01 +00:00
Mark Musone 8339e8c81d last few compile fixes 1999-08-17 15:07:22 +00:00
Mark Musone 4d738adb38 maybe it'll compile now..more php3->php4 conversions 1999-08-17 15:03:51 +00:00
Mark Musone 90e2bc1580 more changes 1999-08-17 14:41:23 +00:00
Thies C. Arntzen 3d05a0d9cc ZTS stuff 1999-08-17 14:40:28 +00:00
Mark Musone 0e1db64f8d thanks Andrey! 1999-08-17 14:31:39 +00:00
Sascha Schumann ba78cb9c53 fix flushing cached information to disk 1999-08-17 14:18:27 +00:00
Thies C. Arntzen f93ce67426 cleanups & ZTS stuff (ZTS untested!) 1999-08-17 13:54:25 +00:00
Thies C. Arntzen e30a2740cf imported diskfreespace from 3.0 1999-08-17 12:32:23 +00:00
Uwe Steinmann a5a5902fbc fixed potential segm faults 1999-08-17 09:59:19 +00:00
Andrey Hristov a0bf6b0923 Removed internal pointer reset from array_walk. 1999-08-16 14:19:49 +00:00
Philippe Verdy 236d54114c make pcre test program compile again with Zeev's
additions in the pcre_exec() function parameters
1999-08-15 23:52:37 +00:00
Andi Gutmans a08dc937c7 - Oopsie 1999-08-15 19:38:10 +00:00
Andi Gutmans b5f5e9a6d1 - Optimize the execute stack a bit. 1999-08-15 19:29:39 +00:00
Thies C. Arntzen 94ce166244 added a few PLS_FETCH() 1999-08-15 18:52:10 +00:00
Zeev Suraski 4e33a1d677 Close bug #1742 1999-08-14 16:52:28 +00:00
Andrey Hristov 796c4a021a *** empty log message *** 1999-08-14 16:45:51 +00:00
Andrey Hristov c85209985a Forgot to have internal pointer reset. 1999-08-14 16:43:38 +00:00
Danny Heijl f12728f13e more of the new ini stuff 1999-08-14 15:30:48 +00:00
Zeev Suraski 96d4220a5d Fix several class issues 1999-08-14 12:54:17 +00:00
Zeev Suraski ef5b7e212d Generate better warnings for class/function redefinitions 1999-08-14 11:50:36 +00:00
Zeev Suraski 2560bfd5f9 Rename TestClass to OverloadedTestClass 1999-08-14 11:08:26 +00:00
Zeev Suraski 55a6c270dd Fix thread unsafe version 1999-08-14 10:04:04 +00:00
Andi Gutmans 7145d1a21a - Make the non-threadsafe version compile again 1999-08-14 09:55:43 +00:00
Zeev Suraski 25829488c4 Add new-thread handlers 1999-08-14 09:35:52 +00:00
Zeev Suraski 58e24ac18a - Add PHP Modules workspace
- Get the MySQL module to compile&work under thread-safe Win32
- Fix various thread safety issues with dynamic modules
1999-08-13 21:03:27 +00:00
Andrey Hristov 5ae3f32b24 Fixed bug #2023. 1999-08-13 20:28:27 +00:00
Sascha Schumann e8f465f3d4 rerun checks if buildconf is newer than the time stamp file 1999-08-13 11:57:40 +00:00
Zeev Suraski 5fbe27828b Separate Sybase-CT from Sybase, and fix build process for Sybase-CT 1999-08-13 00:14:17 +00:00
Uwe Steinmann d13824b0bc fixed unresolved symbol pdf_open_memory_image when pdflib 2.01 is used 1999-08-12 17:45:01 +00:00
Philippe Verdy 2d3ef1b8ae no return warning removed. fixed TSRM constructor prototype 1999-08-12 11:05:43 +00:00
Philippe Verdy 646db4f072 signed/unsigned warning removed 1999-08-12 10:53:29 +00:00
Philippe Verdy 443b99805e Bison generated files 1999-08-12 10:49:04 +00:00
Uwe Steinmann d4346da6cb config for pdf module should now be similar to php3 1999-08-12 06:23:28 +00:00
Mark Musone e6241dc703 whoops, forgot to actually return the alarms :^) 1999-08-11 19:56:18 +00:00
Uwe Steinmann 205309f1c1 slight changes to config of pdf module 1999-08-10 17:07:00 +00:00
Andi Gutmans 28f9dc6e56 - Got rid of the C++ comments. 1999-08-10 15:43:32 +00:00
Stig Bakken 50f0a1b5d8 Makefile.in should not be added to CVS 1999-08-10 15:23:00 +00:00
Thies C. Arntzen 269785f95e starting to clean up 1999-08-10 14:33:59 +00:00
Thies C. Arntzen 63931ff4e8 you can now override the CFLAGS while doing make - eg:
make CFLAGS="-g"
1999-08-10 09:16:19 +00:00
Mark Musone 0076374125 more ports 1999-08-09 22:02:42 +00:00
Mark Musone f0552d929f ports to php4 1999-08-09 21:39:29 +00:00
Mark Musone c356371437 more moudle stuff 1999-08-09 21:34:52 +00:00
Mark Musone fdc253e99d added icap files from php3 sources 1999-08-09 21:22:11 +00:00
Egon Schmid 8588b58a5e More typos. 1999-08-09 20:52:58 +00:00
Egon Schmid 17bd995568 I missed that also. 1999-08-09 20:18:00 +00:00
Egon Schmid d8ad991022 Another typo. 1999-08-09 20:06:15 +00:00
Zeev Suraski 4bfcb29c46 that too 1999-08-09 18:33:22 +00:00
Andi Gutmans c791d60ad9 Go beta 2 (final) 1999-08-09 18:29:40 +00:00
Andi Gutmans 3516ee485a Fix HTTP/ header handling 1999-08-09 17:40:28 +00:00
Andi Gutmans 11781bdaa8 - Thies's crash fix. 1999-08-09 16:39:13 +00:00
Andreas Karajannis da536e8a32 Fixed odbc_fetch_into, added prototype return values.
Pconnects are not working
1999-08-09 16:35:47 +00:00
Thies C. Arntzen 5d2206d3af fixed sysv_shm* 1999-08-09 15:03:09 +00:00
Uwe Steinmann 3d8bd038d2 add changelog entries which I forget a couple of days ago 1999-08-09 08:39:28 +00:00
Philippe Verdy 26b123b7f9 solve infinite recursion error when including <signal.h> 1999-08-08 17:42:12 +00:00
Andreas Karajannis daa7982110 First shot at odbc for PHP4
Problems with LONGs to be investigated
1999-08-08 16:26:26 +00:00
Thies C. Arntzen 78f8d04e63 fix for #1995 (this module needs some more work.) 1999-08-08 11:37:50 +00:00
Zeev Suraski 720d32f581 Fix a few leaks 1999-08-07 23:04:01 +00:00
Danny Heijl 7ceaa82d30 More zend-izing. 1999-08-07 20:32:54 +00:00
Zeev Suraski 1e6c159422 Built-in phpinfo() links are now turned off by default. They can be
turned on using the allow_builtin_links INI directive
1999-08-07 18:21:35 +00:00
Zeev Suraski 9b09f412bf - Changed phpinfo() to list modules that have no info function 1999-08-07 17:52:11 +00:00
Andrey Hristov a7d6450ea1 *** empty log message *** 1999-08-07 16:44:32 +00:00
Andrey Hristov fd87bb3321 Modified array_walk() function so that the userland callback is passed
a key and possible user data in addition to the value.  It's still backward
compatible with one argument version.
1999-08-07 16:43:25 +00:00
Zeev Suraski 1701a9e22f Fix for bug #1980 1999-08-07 16:32:50 +00:00
Zeev Suraski 9f2e9c5140 Fix for bug #1754 1999-08-07 16:02:48 +00:00
Philippe Verdy 6c40fa15b6 unreferenced variable warning 1999-08-07 15:58:51 +00:00
Stefan Roehrich 4f3f4699ea Corrected spelling. 1999-08-07 15:50:26 +00:00
Zeev Suraski 125300b563 Fix&improve conversion scripts 1999-08-07 15:31:57 +00:00
Zeev Suraski 0487650536 Fix a bug in call_user_func_ex() 1999-08-06 21:43:49 +00:00
Zeev Suraski 6393ab1486 Now that's an annoying bug. 1999-08-06 16:54:32 +00:00
Zeev Suraski 53aea140df bump up the version number 1999-08-06 15:55:34 +00:00
Zeev Suraski edabed5604 count/sizeof had their arguments setup wrong (messup between Beta 1 and 2) 1999-08-06 15:34:51 +00:00
Zeev Suraski 37d7d08482 - Improved register_shutdown_function() - you may now supply arguments that
will be passed to the shutdown function
- Improved call_user_func() and call_user_method() - they now support passing
  arguments by reference
- Fixed usort() and uksort()
1999-08-06 15:25:11 +00:00
Zeev Suraski f95edc016b Introduce call_user_func_ex() 1999-08-06 15:24:10 +00:00
Zeev Suraski 65ee58da41 *** empty log message *** 1999-08-06 13:41:27 +00:00
Zeev Suraski 4f2dd59e24 *** empty log message *** 1999-08-06 11:12:08 +00:00
Uwe Steinmann 7ef3076a56 Made Hypwerwave module threat safe 1999-08-06 10:42:00 +00:00
Thies C. Arntzen 4b8a100ec9 fix for #1947 1999-08-06 08:56:15 +00:00
Uwe Steinmann 104de20298 Fdf module should now be up to date 1999-08-06 06:52:06 +00:00
Uwe Steinmann 96ab2781ab Order of freeing memory cause segm fault since efree seems to wipe
out the memory.
1999-08-06 06:39:55 +00:00
Uwe Steinmann 6b5f0dde77 renamed file 1999-08-05 19:28:07 +00:00
Uwe Steinmann f81c6b18f4 zend_hash_update() seems to be a bit different form php3_hash_update 1999-08-05 17:39:35 +00:00
Uwe Steinmann d172a6b581 Huge patch to update the hyperwave and pdflib module.
Only pdflib >2.0 is supported.
None is tested yet. Hyperwave seems to be broken now.
1999-08-05 16:25:10 +00:00
Andrey Hristov 48c3643753 Fixed. 1999-08-05 13:41:17 +00:00
Thies C. Arntzen 2c73cc3b29 hope i haven't missed anything - but we're no longer in the 3.x tree 1999-08-05 07:42:46 +00:00
Zeev Suraski b56086ae33 *** empty log message *** 1999-08-04 22:34:39 +00:00
Zeev Suraski 1a6f498b8c Fix makedist to work with the libtool enabled distribution 1999-08-04 22:33:18 +00:00
Zeev Suraski 7c7fe83615 * Fix bug #1963
* Support large ISAPI server variables
1999-08-04 22:21:29 +00:00
Steven Lawrance 9a1edceb46 Added a note about the SNMP changes 1999-08-04 21:47:56 +00:00
Steven Lawrance f09d8b68ab Fixed a little boo-boo I made during the PHP3->PHP4 conversion. 1999-08-04 21:12:57 +00:00
Steven Lawrance 2aa4138668 Updated the files so that they have all the functionality of
PHP 3.0.12.  These include snmpwalkoid, snmp_get_quick_print, snmp_set_quick_print, and snmpset.
1999-08-04 20:56:33 +00:00
Mike Gerdts 1570c5b30e Fix bug #1949: -rdynamic not handled properly with Sun's C compiler 1999-08-03 20:56:13 +00:00
Rasmus Lerdorf f2fe56ff69 [s]printf fix for bug #1952
(note, [s]printf doesn't work in PHP4 yet)
1999-08-03 20:08:33 +00:00
Andi Gutmans bbe27ffae9 - Initialize extended value's and put the fetch_type in it's own variable
name.
1999-08-03 18:54:49 +00:00
Mike Gerdts ecc1aa80e7 Last character of file not a newline, causing problems with Sun's C compiler 1999-08-03 16:49:33 +00:00
Mike Gerdts a36fa329a2 file did not end with a newline, causing problems for Sun's C compiler 1999-08-03 15:27:19 +00:00
Zeev Suraski 1207465e59 This should sort the buildconf bug... 1999-08-02 21:43:37 +00:00
Stefan Roehrich 5d10addd01 Fix for Redhat libc 2.1 and dynamic loading in zlib module.
Adapted zlib module to new PHP_Mxxx macros.
1999-08-02 21:12:16 +00:00
Zeev Suraski dcf9114329 AIX needs this include... 1999-08-02 19:59:04 +00:00
Zeev Suraski 30569aac45 Go Beta 2 1999-08-02 19:20:54 +00:00
Zeev Suraski 3cb1eb0471 Removed '3' from key functions in PHP (maintained compatibility through
php3_compat.h)
1999-08-02 19:17:14 +00:00
Andi Gutmans 07e0885519 Make set_compiled_filename() return a pointer to the allocated file name 1999-08-02 18:40:10 +00:00
Andrey Hristov 42c586b97c Fix function declarations. 1999-08-02 17:28:32 +00:00
Andrey Hristov 33d27f5bfe More symbol work. 1999-08-02 16:06:13 +00:00
Andrey Hristov 05585132ca More symbol work. 1999-08-02 15:02:52 +00:00
Andrey Hristov 98037c425d Updated proto 1999-08-02 14:31:41 +00:00
Egon Schmid b55a6c9185 Another forgotten prototype. Andrey, why is preg_grep in PHP3 missing? 1999-08-01 18:18:40 +00:00
Andi Gutmans 91ec4763fd Support resource type in gettype() 1999-08-01 17:56:09 +00:00
Zeev Suraski e2f17b298c Fix bug #1872 1999-08-01 00:33:03 +00:00
Zeev Suraski 7297f5196e Final IMAP fixes 1999-08-01 00:25:58 +00:00
Zeev Suraski 2dda8d7f97 More IMAP fixes 1999-07-31 20:21:07 +00:00
Zeev Suraski 2639ab7d03 Fix another compile warning 1999-07-31 19:53:02 +00:00
Zeev Suraski 41cf3b96db That should fix bug #1903 1999-07-31 19:23:22 +00:00
Zeev Suraski 698459ea93 Fix problem with include/require of URLs (bug #1832) 1999-07-31 19:06:36 +00:00
Zeev Suraski afeb7704c9 Fix problem with include/require of URLs 1999-07-31 18:57:41 +00:00
Zeev Suraski 01c2701a0f These aren't necessary 1999-07-31 18:48:47 +00:00
Zeev Suraski eb3d12c6dd Fix bug #1914 1999-07-31 16:20:06 +00:00
Zeev Suraski 338405d343 Declaration fix 1999-07-31 10:38:33 +00:00
Zeev Suraski ba290e05a8 Ok, that should be a good start. Can somebody verify that this actually compiles,
and perhaps check if it runs?
1999-07-30 23:36:20 +00:00
Zeev Suraski 6aefb8bae3 Early steps towards making the IMAP module PHP 4.0 compatible
(and readable - indent people, INDENT)
1999-07-30 23:14:01 +00:00
Zeev Suraski 3ee8c8f0da This should fix the implode() problem 1999-07-30 22:17:51 +00:00
Zeev Suraski 620d013499 Support symbols in any symbol table, not just the active one 1999-07-30 14:17:08 +00:00
Andrey Hristov e1a84e442e Fix for bug #1907. 1999-07-30 13:17:29 +00:00
Andi Gutmans 447eb3b031 - Damn that's more like it. 1999-07-30 12:27:04 +00:00
Andi Gutmans 2c32cc81dd - Cut&paste crap 1999-07-30 12:23:12 +00:00
Andi Gutmans e9e7bc6db3 - Add ptr_stack_n_{push,pop} in order to speed up function calls a bit.
There seems to be no reason for stack->top in the ptr_stack except for
  when realloc()'in the stack. I think I'll remove it.
1999-07-30 11:55:53 +00:00
Zeev Suraski 48ffdd79f7 * Setting variables in the global scope wasn't handling is_ref's properly 1999-07-30 02:49:12 +00:00
Andi Gutmans 739132e58d - Fixed a leak when doing inheritance. The parent class name wasn't being freed.
- Fixed a stack leak. Functions that had late argument binding were set up as
  INIT_FCALL_BY_NAME but were using DO_FCALL and not the corresponding
  DO_FCALL_BY_NAME.
1999-07-29 12:24:58 +00:00
Andi Gutmans e3246872e3 -Tiny fix 1999-07-29 04:03:03 +00:00
Andi Gutmans 7d0715d53d - Added function documentation prototypes. Thanks to Egon Schmid for
straightening me out :)
1999-07-29 03:48:29 +00:00
Andi Gutmans 741ca16711 - Fixed various inheritance problems & Andrey's leak 1999-07-28 17:59:55 +00:00
Andi Gutmans a7af382874 - Added get_class($obj), get_parent_class($obj) and method_exists($obj,"name") 1999-07-28 17:58:38 +00:00
Andrey Hristov 5aa3eff94f Fix link functions problem. 1999-07-28 13:59:35 +00:00
Danny Heijl d69ec49dc6 Make it compile again 1999-07-28 11:26:58 +00:00
Philippe Verdy e1b5df4b55 Commited changes in php3 function/soundex 1.32 1999-07-28 07:04:26 +00:00
Zeev Suraski fc478e5935 License update 1999-07-27 21:01:41 +00:00
Zeev Suraski 879bfc7a34 Inherit parent's constructor 1999-07-27 20:34:31 +00:00
Zeev Suraski d49b53b5e1 *** empty log message *** 1999-07-27 20:33:42 +00:00
Zeev Suraski c4bc4871ee Fix runtime inheritence (child functions/members should have higher precedence) 1999-07-27 20:14:58 +00:00
Andrey Hristov 07d691174b Symbol work. 1999-07-27 19:44:46 +00:00
Andi Gutmans bb8046c4a9 - Update Changelog 1999-07-27 18:38:01 +00:00
Andi Gutmans 348b2f0730 - Add missing lock 1999-07-27 18:35:22 +00:00
Andi Gutmans 71ffa09f41 - strttotime is compiled in on win32 again. 1999-07-27 17:30:45 +00:00
Andi Gutmans 88322d2ea0 - Fix up the new operator a bit more. 1999-07-27 17:30:16 +00:00
Andrey Hristov a99ccfc6ef Oops. 1999-07-27 17:17:05 +00:00
Andrey Hristov c6840056a9 More symbol work. 1999-07-27 17:09:35 +00:00
Andrey Hristov 15d87d2452 check for nKeyLength not arKey 1999-07-27 16:26:30 +00:00
Andrey Hristov 6b79bbe842 *** empty log message *** 1999-07-27 16:19:10 +00:00
Andrey Hristov cd0dd562f0 Fix for bug #1887. 1999-07-27 16:17:58 +00:00
Andrey Hristov ad671669ce Fix for bug #1891 1999-07-27 13:40:54 +00:00
Stig Bakken 55b31d5103 forgot to mention the password 1999-07-27 13:10:15 +00:00
Stig Bakken 9bee15a080 spoonfeed 1999-07-27 13:09:23 +00:00
Danny Heijl 3bea592273 >... If you can, please update your module to use these macros.
I could, so I did.
1999-07-27 11:29:36 +00:00
Zeev Suraski 9d0d2e5a69 Set reference count and is_ref values for new objects 1999-07-27 00:14:34 +00:00
Zeev Suraski 09628fd51e - Fixed a memory leak when using assignment-op operators with lvalue of type
string (or array/object)
1999-07-26 21:56:45 +00:00
Zeev Suraski 4215a17639 Fix bug #1867 1999-07-26 21:55:51 +00:00
Zeev Suraski 075146773f *** empty log message *** 1999-07-26 21:31:40 +00:00
Zeev Suraski 41308d4b43 Fix a bug in inheritence from classes defined in include files, that are
inherited from require()'d files
1999-07-26 21:18:35 +00:00
Zeev Suraski 980c803cd7 Fix bug #1851 1999-07-26 21:17:05 +00:00
Andrey Hristov 1b2c932cc2 More symbol work.
I've defined a few macros to help with module/request init/startup function definitions.
Basically:

PHP_MINIT_FUNCTION(module)
PHP_MSHUTDOWN_FUNCTION(module)
PHP_RINIT_FUNCTION(module)
PHP_RSHUTDOWN_FUNCTION(module)
PHP_MINFO_FUNCTION(module)

These will expand to proper function prototypes.

Now to specify these in the module entry, use:

PHP_MINIT(module)
PHP_MSHUTDOWN(module)
PHP_RINIT(module)
PHP_RSHUTDOWN(module)
PHP_MINFO(module)

I've updated all modules in ext/standard and everything from ext/apache to ext/db.
If you can, please update your module to use these macros.
1999-07-26 20:09:08 +00:00
Andi Gutmans 7af5579e3f - Oops I erased this by mistake 1999-07-26 19:35:57 +00:00
Andi Gutmans 7d77a63342 - Should be a complete fix now. This break away code should maybe be made
somewhat generic
1999-07-26 19:32:13 +00:00
Andi Gutmans fe0fbdc5b6 - Temporary fix for "this". Have to fix it tomorrow. 1999-07-26 19:24:54 +00:00
Andi Gutmans 221c80d26d - Fix compile error. Weird that Visual didn't catch this one. 1999-07-26 18:56:54 +00:00
Andi Gutmans 8f51f72dc6 - Fix the new operator incompatibility.
- I commented PHP_FUNCTION(strtotime) in datetime.c because it stopped
  win32 from compiling. This needs to be fixed!!!
- Check out libzend to compile the tree now.
1999-07-26 16:57:06 +00:00
Stig Bakken bc781c94ed "gd", not "-lgd" 1999-07-25 15:06:49 +00:00
Stig Bakken c901d4c528 use AC_ADD_ macros 1999-07-25 14:46:33 +00:00
Stig Bakken ac7768adbf final php3.ini -> php.ini renaming? 1999-07-25 12:57:50 +00:00
Andrey Hristov 736f4831a5 A bunch of grunt work updating function entries and declarations. 1999-07-24 22:16:54 +00:00
Sascha Schumann f6f0f285cc overlooked them 1999-07-24 21:40:37 +00:00
Andrey Hristov 97c496fc9d Remove buildconf.stamp on make distclean 1999-07-24 21:19:54 +00:00
Zeev Suraski fff675c448 Congrats Andrey 1999-07-24 20:36:31 +00:00
Stig Bakken 46783929a3 more Solaris fun 1999-07-24 19:10:17 +00:00
Stig Bakken 7c2f1384d4 added workaround for Solaris PIC weirdness.
added RPM spec file for a future "official" RPM, work-in-progress
1999-07-24 19:02:38 +00:00
Stig Bakken b81789eb1e temporary icon for RPMs until Colin gets back and can make us a spiffy new one 1999-07-24 19:00:06 +00:00
Zeev Suraski 68e32f6ac3 * Make Win32 build work again
* Make error_reporting value prior to the standard initialization be
  set so that errors show up
1999-07-24 16:52:00 +00:00
Stig Bakken 24eb90c524 Solaris 7 fix 1999-07-24 14:54:24 +00:00
Zeev Suraski ae64b9096e *** empty log message *** 1999-07-24 14:40:08 +00:00
Zeev Suraski 0cdb7d6a29 Fix that memory leak... nested function issue remains 1999-07-24 14:38:05 +00:00
Zeev Suraski 2b2bda778e * Fix a warning
* Update ChangeLog
1999-07-24 14:36:48 +00:00
Danny Heijl 4199c6d6a0 Get rid of most compiler warnings. 1999-07-24 14:28:29 +00:00
Zeev Suraski 9c754da0fc Fix RETURN & SWITCH memory leak issue 1999-07-24 11:43:21 +00:00
Zeev Suraski 1b6fae101a Thoroughly fix the SWITCH problem. No RETURN handling yet. 1999-07-24 11:24:19 +00:00
Rasmus Lerdorf b0c60bd249 Changelog 1999-07-24 02:44:53 +00:00
Rasmus Lerdorf d9f6ea2fc3 Fix broken build 1999-07-24 02:43:22 +00:00
Rasmus Lerdorf 8de073782c Bring rand.c up to date 1999-07-24 02:30:37 +00:00
Sascha Schumann cd8d7c7c8a fix for missing include path in CFLAGS 1999-07-24 00:56:56 +00:00
Sascha Schumann cb2ab20a11 Bourne Shell does not have -nt. 1999-07-24 00:46:47 +00:00
Andrey Hristov 974f278257 Added function entry for similar_text(). 1999-07-23 22:47:24 +00:00
Andrey Hristov 244cc30c14 Added function entry for strip_tags. 1999-07-23 22:35:14 +00:00
Andrey Hristov a30af3e355 Ignore generated file. 1999-07-23 21:24:53 +00:00
Andrey Hristov ecc51ad6de *** empty log message *** 1999-07-23 21:24:30 +00:00
Andrey Hristov 1d3b055eba Ignore parsedate.c 1999-07-23 21:22:20 +00:00
Andrey Hristov a100c51f51 Fixed a bug in WDDX that occured when a number was passed in instead
of a variable name.
1999-07-23 21:21:33 +00:00
Stig Bakken e4252b8092 generated and not required by windows 1999-07-23 20:47:59 +00:00
Stig Bakken 830be36b56 required for the Windows build, re-adding 1999-07-23 20:47:17 +00:00
Andrey Hristov 58cb2362c6 *** empty log message *** 1999-07-23 19:52:18 +00:00
Andrey Hristov 9dd45ec800 Ported strtotime() function. 1999-07-23 19:51:27 +00:00
Sascha Schumann 270be258d3 Improve speed on subsequent runs of buildconf 1999-07-23 19:37:59 +00:00
Andrey Hristov 63a48afcd5 Fix for compatibility. 1999-07-23 19:22:28 +00:00
Zeev Suraski 028cf1a368 Fix bug #1812 1999-07-23 18:41:58 +00:00
Zeev Suraski 76bef75836 Fix bug #1807 (requires libzend update) 1999-07-23 16:03:18 +00:00
Zeev Suraski 84aa8cce64 * Add an API macro users can use to ensure an array member can be modifed
before they modify it.
* Fix a bug and remove redundant code in convert_to_long() (booleans and
  resources weren't changing their types
1999-07-23 16:02:51 +00:00
Sascha Schumann 33f30aee64 gdttf update 1999-07-23 15:56:47 +00:00
Stig Bakken 2c2e4c463f run libtoolize during buildconf since we depend on libtool anyway 1999-07-23 15:53:50 +00:00
Stig Bakken 8bf949b5d6 generated file 1999-07-23 15:32:07 +00:00
Stig Bakken beceb905cd in case ltconfig isn't checked out executable 1999-07-23 15:29:57 +00:00
Stig Bakken 083b2df569 good boy 1999-07-23 15:22:36 +00:00
Stig Bakken 6d0fa9bdae updated the docstring for --with-xml 1999-07-23 15:20:48 +00:00
Zeev Suraski 00238ad1ba Added check for freetype.h 1999-07-23 15:18:37 +00:00
Stig Bakken b291b0902d small fix to libtool check 1999-07-23 15:13:22 +00:00
Stig Bakken 6c856de82d require libtool to be installed as well 1999-07-23 15:08:54 +00:00
Andi Gutmans 6cdea551cc - Make Win32 compile again. 1999-07-23 14:14:42 +00:00
Andrey Hristov 64ed8f7141 Changeloggin' 1999-07-23 13:47:57 +00:00
Danny Heijl 78d420e9fe ChangeLog 1999-07-23 12:26:26 +00:00
513 changed files with 60882 additions and 22213 deletions

No files matched your search

+9356 -19
View File
File diff suppressed because it is too large. Load diff
-860
View File
@@ -1,860 +0,0 @@
PHP 3.0 CHANGE LOG ChangeLog
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
December 24 1998, Version 3.0.6
- Fix GetImageSize() to work with non-standard jpg images
- Add Mersenne Twister functions (mt_rand, mt_srand, etc)
- Add str_replace() function
- Add chunk_split() function
- Fixed a bug in the memory limit code, in cases where $php_errormsg was
also used.
- Add iptcparse() function
- Adobe FDF supported
- getallheaders() NULL string fix <michale@utko.fee.vutbr.cz>
- Add all configuration directives to phpinfo() page
- Functions pack() and unpack() rewritten to be binary and buffer overrun
safe and behave like the Perl functions for all implemented format codes.
- Ensured that msql_error() will not return error messages generated by
previously-run scripts.
- Add base_convert() function
- Make sprintf() and printf() output binary safe
- Made gzgetc binary safe
- Add convert_cyr_string() and quoted_printable_decode() functions
- Fix ldap_free_result() core dump bug
- Add support for current OpenLDAP-2.0-devel library
- Add php3_asp_tags directive so it can be set from Apache config files
- Added UTF-8 support in the XML extension
- Make rand(min,max) safer on older platforms where the low-order bits have
short cycles.
- Added new pdf (Portable Document Format) module
- Added an XML parsing extension using James Clark's "expat" library
- Optimized parts of the token cache code.
- Terminate on out-of-memory errors. Until now, PHP could crash in out of
memory situations (clean-up, no real effect).
- Unterminated comments in include files were being reported with the wrong line
number. Fixed.
- Added ImageCopy() and ImageColorDeallocate(). ImageCopy() is about
20% faster than ImageCopyResized(). ImageColorDeallocate() marks
palette entries free for reuse (by <mka@satama.com>).
- In the CGI version, it was impossible to access resources (e.g. SQL links,
images) from user-defined shutdown functions. Fixed.
- Added optional third parameter to strpos() to specify the offset to
start searching from.
- Fixed a crash bug in unset() when unsetting illegal variables (rare).
- Made ImageInterlace and ImageTransparentColor parameters optional, and made
them return the current/new settings.
- Optimized GetImageSize() <thies@digicol.de>.
- Made odbc_autocommit() without args return status
- Added connect workaround for OpenLink ODBC
- Added minimal InterBase support. Tested only on 4.0 & Linux.
- Fixed some memory leaks and bogus error messages in the URL handler of
the various file open functions. Should only affect error handling
in bad URLs.
October 5 1998 Version 3.0.5
- mysql_field_flags now reports all MySQL flags and the result is suitable
for automatic parsing. Compatibility warning: The result format has
changed. If you have scripts parsing the result of this function, you
may need to adapt them.
- Made nl2br() binary safe (not that it's of much use).
- Fixed a bug in the API function getThis(). It affected mostly the dir
functions, if nested within objects.
- Fixed a problem in require() in conjunction with switch(), and in some other
cases. Also fixed an identical problem with the call_user_function() API
function.
- Removed -lpthread when compiling with MySQL support. It caused various
serious problems when compiled into Apache.
- Add serialize() and unserialize() functions from jkl@njet.net
- Fix in_addr_t check for systems with in_addr_t in netinet/in.h
- Add atan2() function
September 22 1998 Version 3.0.4
- Added uksort() - array key sort using a user defined comparison function.
- Added 'j' support to date() - generates the day of the month, without
possible leading zeros.
- Added support for multiple crypt() encryptions if the system supports it
- Added optional support for ASP-style <% %> and <%= tags
- Fixed data loss problems with very large numeric array indices on 64-bit
platforms (e.g. DEC UNIX).
- 2 cursor_type parameters for ifx_query() and ifx_prepare changed
to 1 (bitmask). Added a few constants for use in Informix module.
- Added php3.ini option ifx.charasvarchar. If set, trailing blanks
are stripped from fixed-length char columns. (Makes life easier
for people using Informix SE.)
- Static SNMP module which compiles with ucd-snmp 3.5.2
- fixed imap_header & header_info from crashing when a header line
is > 1024 characters.
- Added patch for rfc822_parse_adr to return an array of objects instead
of a single object.
- Informix Online 7.x & SE 7.x support now fairly complete and stable
- Add dbase_get_record_with_names() function
- Added a special case for open_basedir. When open_basedir is set to "."
the directory in which the script is stored will be used as basedir.
- Include alloca.c in the distribution for platforms without alloca().
- Improved stripping of URL passwords from error messages - the length of the
username/password isn't obvious now, and all protocols are handled properly
(most importantly, http).
- Copying objects that had member functions with static variables produced
undetermined results. Fixed.
- Added function lstat() and cleaned up the status functions,
added tests for file status functions (this may break on some plattforms)
- Fixed is_link() - it was returning always false.
- Fixed apache_note() - it was corrupting memory.
- New Function. void get_meta_tags(string filename); Parses filename until
closing head tag and turns all meta tags into variables prefixed with 'meta_'.
The below meta tag would produce $meta_test="some string here"
<meta name="test" content="some string here">
- Generalized some internal functions in order to better support calling
user-level functions from C code. Fixes a few sporadic problems related
to constructors inside eval() and more.
- Fixed an endless loop in explode(), strstr() and strpos() in case of an
invalid empty delimiter.
- rand() now accepts two optional arguments, which denote the requested range
of the generated number. E.g., rand(3,7) would generate a random number
between 3 and 7.
- Added M_PI constant.
- Added deg2rad() and rad2deg() for converting radians<->degrees.
- ImageArc() misbehaved when given negative angles, fixed.
- Fixed a bug in ereg() that may have caused buglets under some circumstances.
- Added imap_status
- Shutdown functions, registered via register_shutdown_function(), could never
generate output in the Apache module version. Fixed.
- Brought IMAP docs into sync with acutal imap code
- imap_fetchstructure now takes in optional flags
- Fix potential core dumps in imap_append and imap_fetchtext_full
- Fix problem in SetCookie() function related to long cookies
- Add uasort() function to go along with usort (like sort() and asort())
- Add port number to Host header as per section 14.23 of the HTTP 1.1 RFC
- Fix imap_reopen to only take 2 arguments with an optional 3rd flags arg
- Add optional 2nd argument to imap_close
- Add CL_EXPUNGE flag to imap_open() flags
- Fix 4th arg on imap_append(). It was getting converted to a long by mistake.
- Fix shutdown warning in the LDAP module
- *COMPATIBILITY WARNING* imap_fetchstructure() "parametres" object and property
name changed to "parameters" to match the documentation and to be consistent
with the rest of the API.
- Delete uploaded temporary files automatically at the end of a request
- Add upload_max_filesize and correponsing php3_upload_max_filesize directive
to control the maximum size of an uploaded file. Setting this to 0 would
completely eliminate file uploads.
- Force $PHP_SELF to PATH_INFO value when running in CGI FORCE_CGI_REDIRECT mode
- Add apache_lookup_uri() function which does an internal sub-request lookup
and returns an object containing the request_rec fields for the URI. (Yes,
you have to be a bit of a gearhead to figure this one out)
- Fix a few signed char problems causing functions like ucfirst() not to work
correctly with non-English charsets
- md5() function not binary safe - fixed
August 15 1998 Version 3.0.3
- Changed the name of fopen_basedir to open_basedir, to be a little more
accurate about what it does.
- Added Hyperwave module
- Added config-option (php3_)enable_dl <on/off>. This enables/disables the
dl() function. In safe-mode dl() is always disabled.
- Auto-prepended files were crashing under some circumstances - fixed.
- Win32 mail fixes provided by walton@nordicdms.com
- Comparing between arrays and/or objects now generates a warning (it always
returns false, as it used to; no comparison is made)
- Fixed a bug in the syntax highlighting code, that made ending-double-quotes
appear twice under certain circumstances.
- Fix bug in filetype() function related to symlinks
- Started integrating Informix SE support to PHP configure/makefile setup.
- gdttf roundoff fixes from ellson@lucent.com
- Added initial Informix SE support files from Danny Heijl - This code still
needs to be integrated into the PHP configure/makefile setup and the code
itself needs more work.
- return in the global scope now terminates the execution of the current file.
- Added the ability to register shutdown function(s), via
register_shutdown_function($function_name).
- Clean up const warnings
- Add write support to ftp fopen wrappers
- Add strspn() and strcspn() functions
- On systems without strerror use Apache version if compiling as Apache module
- The PHP start tag was being ignored under some circumstances - fixed.
- The db, dbase and filepro functions are now Safe-Mode aware.
- Added config-option (php3_)fopen_basedir <path>. This limits the directory-
tree scripts can open files in to <path>.
- Fixed pg_loreadall that didn't always return all the contents in a PostgreSQL
large object. Also, doesn't pass through anything if method is HEAD.
- configure fix to create target Apache module dir
- Fix core dump in imageTTFtext() function
- Added static IMAP support
- Syntax highlighting was generating additional whitespace - fixed.
- Added ucwords. Works like ucfirst, but works on all words within a string.
- Added array_walk() - apply user function to every element of an array
- Added usort() - array sort that accepts a user defined comparison function!
- Added the ability to call user-level functions and object methods on demand
from the C source using a completely generalized, slick API function.
Miracles do happen every once in a while.
- Added constructors. Don't even squeek about destructors! :) (we mean that)
- Make pg_lowrite() binary safe
- Fixed mod_charset option in ./setup
- Fixed rewinddir() and dir()::rewind() under Win32 (they didn't work before).
- Add Win32 COM support! By-name referencing is supported using the IDispatch
interface (automation). Available functions - COM_Load(), COM_Invoke(),
COM_PropGet() and COM_PropSet().
July 20 1998 Version 3.0.2a
- Fix a quirk in the configuration file parser, the endless fountain of joy
and fun.
- Fix a bug in the API function add_method() that made dir() crash.
July 18 1998 Version 3.0.2
- Compile cleanups for *BSD
- Add support for the OpenLink ODBC Drivers
- Add PHP_SELF, PHP_AUTH_* and HTTP_*_VARS PHP variables to phpinfo() output
- Add workaround for broken makes
- Add Apache 1.3.1 support (some Apache header files were moved around)
- Added apache_note() function.
- Fix order of system libraries and detect libresolv correctly
- Fixed a bug in the Sybase-DB module. Several numeric field types were
getting truncated when having large values.
- Added testpages for unified odbc
- Fix php -s seg fault when filename was missing
- Made getdate() without args default to current time
- Added ImageColorResolve() and some fixes to the freetype support.
- Added strcasecmp()
- Added error_prepend_string and error_append_string .ini and .conf directives
to make it possible to configure the look of error messages displayed by PHP
to some extent
- Added E_ERROR, E_WARNING, E_NOTICE, E_PARSE and E_ALL constants, that can be
used in conjunction with error_reporting()
(e.g. error_reporting(E_ERROR|E_WARNING|E_NOTICE);
- Fixed a crash problem with classes that contained function(s) with default
values.
- Fixed a problem in the browscap module. Browscap files weren't being read
properly.
- Fix -L path in libphp4.module to make ApacheSSL compile without errors
- Fix StripSlashes so it correctly decodes a \0 to a NUL
July 04 1998 Version 3.0.1
- echo/print of empty strings don't trigger sending the header anymore.
- Implemented shift left and shift right operators (<< and >>)
- Compile fix for cc on HP-UX.
- Look for beta-version Solid libraries as well.
- Make GD module show more info in phpinfo().
- Compile fix for NextStep 3.0.
- Fix for Oracle extension on OSF/1.
- Fix gd 1.3 bug in ImageColorAt().
- pg_loread() hopefully handles binary data now.
- Turned off some warnings in dns.c
- Added ImageTTFBBox() and made ImageTTFText() return bounding box.
- Added constants for Ora_Bind()'s modes.
- Renamed all hash_*() routines to _php3_hash_*() to avoid clashes with other
libraries.
- Changed uodbc default LONG behaviour: longreadlen 4096 bytes, binmode 1.
The module now actually uses the php.ini settings.
- New PostgreSQL functions: pg_fetch_row(), pg_fetch_array()
and pg_fetch_object()
- Fix a segmentation fault when calling invalid functions in certain
circumstances
- Fix bug that caused link-related functions to not pay attention to
run-time safe mode setting (it was using whatever was set at compile time).
- Fix bug in exec() function when used in safe mode
June 6 1998 Version 3.0
- Add checkdnsrr function (check availability DNS records)
- Add getmxrr function (get MX hostnames and weights)
- Fixed bug in nl2br() function
- Fix for an RC5 related problem in the Sybase module, when dealing
with very long data types.
- Speed up string concatenation by roughly a factor of 2
- Add escape-handling to date function
- Make base64 functions binary safe
- Add strrpos function to complement strpos function added in RC5
- Add ltrim function (strips only at the start of string)
- Add rtrim as an alias to chop() for completeness sake
- Add trim function (similar to chop, except it strips at the start as well)
- Added 2 optional args to fsockopen function - errno and errstr
- Fixed bug in split() function related to leading matches
- Fixed problem in error_log() function (thanks to Jan Legenhausen)
- empty("0") was returning true - fixed
- Removed the old sybsql module. Use the new sybase_*() functions instead.
- Several fixes to the configuration file parser
- LDAP fixes - fixed return values on several functions
May 23 1998 Version 3.0RC5
- The BC math library functions now compile in by default.
- Fixed a bug in virtual() and other types of SSI's (e.g. <!--#exec). Under
certain circumstances, this used to result in random problems.
- Fixed a bug in virtual(). It was misbehaving if it was called before any
other output.
- Added mysql.default_port, mysql.default_host, mysql.default_user and
mysql.default_password ini-file directives.
- Improved handling of the MySQL default port. It now honors /etc/services
and $MYSQL_TCP_PORT.
- Fixed a crash in opening of broken ftp:// URLs, and improved error reporting
in opening of URLs.
- Fixed several non-critical scanner issues with syntax highlighting mode and
the <script language=php> tag.
- Fixed fseek on windows. (windows only): fseek will not return proper results
on files opened as text mode. PHP uses binary mode as the default for file
operations, but this can be overiden by fopen. Do not open files in text
mode and use fseek on them!
- Add strpos() function
- Added zlib module, requires zlib >= 1.0.9
- Improved the module API implementation. Dynamic modules may now register
persistent resources (not that it makes much sense, but at least PHP
won't crash). The API itself remains unchanged.
- bcmod() wasn't always behaving like modulus should behave (it was behaving
exactly like GNU bc's % operator). Fixed.
- Changed the Sybase-DB module to always return strings, instead of auto-typing
result sets. This was done for consistency with the other database modules,
and in order to avoid overflows due to the platform-dependant limitations
of the numeric data types of PHP. You can turn compatability mode on using
the sybase.compatability_mode directive in the php3.ini file.
- Fixed problems with the TINYINT field in the Sybase-CT module.
- Applied some small speed optimizations to the Sybase-DB module querying code.
- Added 'numeric' and 'type' properties to the object returned by
sybase_fetch_field().
- The 'new' operator doesn't accept all expressions anymore. Instead, it
accepts a class name, or a variable reference (scalar, array element, etc).
- Add ora_numcols() function
- Add ora_do() and ora_fetch_into() functions to Oracle driver
- Add persistent connection support to Oracle driver
- Make Oracle driver clean up open connections and open cursors automatically
- Added fread() and fwrite() that properly handle binary data.
- Add Ora_ColumnSize() to Oracle code
- The string "0" means FALSE again. This was done in order to maintain type
conversion consistency.
- Added solid_fetch_prev() for fetching the previous result row from Solid.
- Huge integers are now automatically converted to floating point numbers
(that have a wider range).
- Floating point numbers are now displayed using scientific notation when
they're extremely big or extremely small. The 'precision' php3.ini directive
no longer designates the number of decimal digits, but rather, the maximum
number of significant digits required.
- Added support for scientific notation for floating point numbers (e.g. 1E7)
throughout the entire language.
- Fixed a potential/probable memory corruption problem with HEAD request
handling.
- Using un-encapsulated strings now generates a NOTICE-level warning
(e.g. $a = foo; instead of $a = "foo";)
- Added defined("name") function to check if a certain constant is defined
or not.
- Support new Apache mechanism for setting SERVER_SUBVERSION
- Added PHP_OS and PHP_VERSION constants
- Added the ability to define constants in runtime! Constants are script-wide,
(there's no scope, once the constant is defined, it's valid everywhere).
Syntax is define("name", $value [, $case_insensitive]). 'name' can be any name
that is a valid variable name, *without* the $ prefix. 'value' can be
any *scalar* value. If the optional 'case_insensitive' parameter is 1,
then the constant is created case-insensitive (the default is case
sensitive). Note: define() is currently *NOT* supported in preprocessed
scripts.
- Added general support for constants. The Syslog constants (e.g.
LOG_ERR, LOG_CRIT, etc.) should be accessed as constants from now on (that
is, without a $ prefix). You can still set define_syslog_variables to On
in the php3.ini file if you want to define the various $ variables. The
default for this directive in the php3.ini-dist file has been changed to
Off.
- The configuration file path variable now expands . and .. into their
respective directories. You can obtain the path of the php3.ini file
that was used by printing get_cfg_var("cfg_file_path").
- Fixed a crash-recovery parser crash ($a=7; $a[3]+=5;)
- Add gmmktime() function
- Fixed a crash with implode() and empty arrays.
- Fixed a bug that, under fairly rare circumstances, caused PHP not to
recognize if(), require() and other statements as statements, and
to complain about them as being unsupported functions.
- Beautified php3.ini-dist and added more comments to it. Also changed
the behavior of the configuration file parser to be brighter about
the various constants (TRUE/FALSE/ON/OFF etc).
- Fixed a bug in openlog() - the specified device name was being mangled.
- Memory leaks were sometimes reported erroneously - fixed.
- Improved the convertor to handle some quirks of the PHP/FI 2 parser with
comments.
- Fixed number_format() to properly handle negative numbers, and optimized it
a bit.
- Fixed static variables inside class member functions. Note that using such
static variables inside member functions usually defeats the purpose of
objects, so it is not recommended.
- Fixed a bug in fpassthru() (the file was being closed twice).
- Added strftime().
- Add set_socket_blocking() function to control blocking on socket fd's
- The sendmail_path in php3.ini was being ignored - fixed.
- Fixed a bug with file upload, with files that contained the MIME boundary
inside them.
- Fixed a bug with form variables of type array, with spaces in their
index (e.g. name="foo[bar bar]").
- gd-1.3 autodetect and support
- Year 2000 compliance is now togglable from the php3.ini file. Setting PHP
to be y2k compliant effects the way it creates cookies, and means it'll
NOT work with many browsers out there that are not y2k compliant! For
that reason, the default for this option is off.
- safe mode / fix from monti@vesatec.com
- Integrated the FreeType support in the GD extension.
- Added --with-gd=DIR and --without-gd options to configure
April 18 1998 Version 3.0 Release Candidate 4
- Auto-prepended and auto-appended files were reporting the wrong filename
in errors and in __FILE__ - fixed.
- Fix GPC problem related to mixed scalar and array vars with the same name
- Made putenv() Apache-safe. Environment variables may no longer leak in
between requests.
- The trailing semicolon is no longer required in class declarations.
- Fixed a memory leak in the (array) and (object) operators under certain
conditions.
- <script> tags weren't working unless short tags were enabled - Fixed.
- Fixed a bug in certain array indices that weren't treated as numbers
even though they looked like numbers (e.g. "10", "20").
- Changes to support renamed API functions in Apache-1.3
- Fixed the -p and -e command line switches
- Fix a segfault when calling command line version without parameters
- Fix for feof() when used on a socket
- Fix off-by-one error in fgets() when used on a socket
- Fix bug in ImageSetPixel() (Thanks to ecain@Phosphor.net)
March 31 1998 Version 3.0 Release Candidate 3
- Tiny bugfix for magic_quotes_sybase
- Fix Apache build problems introduced in RC2
- $a["0"]==$a[0] fix
- Apache-1.3 build changes to support 100% automatic builds and shared library
module builds. See INSTALL file.
March 30 1998 Version 3.0 Release Candidate 2
- Changed the socket implementation under UNIX to not use FILE pointers, in
order to work around the buggy Solaris libc (and possibly buggy libc's
in other platforms).
- Fixed a bug in min() and max() with certain arrays.
- *WARNING* Move Apache 1.3 php3 file install to src/modules/php4 instead of
src/modules/extra. Make sure you change your AddModule line correctly
in your Apache Configuration file. This change is to take advantage of
new Apache-1.3 configuration mechanism which makes it easier to build an
Apache server with PHP automatically enabled. It will also help building
a shared library module version of PHP soon.
- Fixed a crash bug with auto-appended files.
- Made --enable-discard-path work on all Unix servers #!/path/php CGI scripts
should now work everywhere. I have tested on Apache, WN and Netscape 2.0
- Made $a["123"] and $a[123] be identical. $a["0123"] is still different,
though.
- Added 'precision' ini directive, to set the number of decimal digits
displayed for floating point numbers (default - 6).
- Made integer/integer divisions evaluate to floating point numbers when
applicable (e.g., 5/2==2.5(float), but 4/2==2(int))
- Get rid of reliance on tied streams and move all socket reads and writes
to recv/send calls
- Cleaned up head.c a bit and fixed CGI SetCookie order problem
- Changed default variable parsing order to Get-Cookie-Post (GPC)
- Fixed setup so it has all configure options and defaults.
- Added optional decimal point and thousands seperator to number_format()
e.g., number_format(1500,2,',','.') == 1.500,00
- Fixed cgi bug in windows that prevented files from being parsed on many
systems and servers.
March 23 1998 Version 3.0 Release Candidate
- Added support for the Raima database (ALPHA)
- Fixed a bug in persistent PostgreSQL links and the connection-string method.
- Added EXTENSION_STATUS file, that specifies the stability and status of
every module in the distribution.
- Added optional parameters to user functions with default values, variables
that are forced to be passed by reference and variables that can be
optionally passed by reference. The ini file directive
'ignore_missing_userfunc_args' is no longer supported.
- Added fhttpd support (by Alex Belits)
- Improved performance by approximately 20-30%.
- Added mysql_error(), mysql_errno() (if available) and msql_error().
Errors coming back from the database backend no longer issue warnings.
Instead, use these functions to retreive the error.
- Patched count(), each(), prev(), next(), reset() and end() to work around
the implementation side effects of unset(). As far as the users are
concerned, this should be transparent now (even though it's slower now,
until it's thoroughly fixed in 3.1).
- Added number_format(). number_format(2499,2)=='2,499.00'.
- error_reporting() now sets the error reporting level to the supplied
argument, without any interpretations.
- Fixed a lookahead parser bug that occured under rare circumstances.
- Change the comparison operators to compare numeric strings as numbers. If
you want to compare them as strings, you can use the new C-like strcmp()
- Fixed Ora_GetColumn() bug when fetching strings
- Added Ora_ColumnName() and Ora_ColumnType()
- Preliminary LONG and LONG RAW support in Oracle extension
- Add \123 and \xAB style octal and hex escapes to "" and `` strings
- Add "-c" command line flag for specifying path to php3.ini file
- Improved list() so that elements can be skipped, for example:
list($name,,,$realname) = explode(":",fgets($passwd_file));
- Fixed a tiny bug in the hash initialization which caused excessive use of
memory. Report and fix by short@k332.feld.cvut.cz
- Fixed strtolower() and strtoupper() to work with 8-bit chars
- Fixed to compile and run on SunOS 4.1
- Fixed a crash in soundex() of an empty string
- Fixed parse_str() - it wasn't always defining the right variables,
and didn't work with arrays.
- Made [m,My]SQL create/drop database functions return success status
- Fixed some memory leak/crash problems in the Adabas module
- Added each() in order to allow for easy and correct array traversing.
- Make Apache module version respect LOCALE setting
- Add support for Apache 1.3b6+ ap_config.h file
- Fixed a nasty corruption bug in eval() and show_source() that resulted in
script termination (e.g. eval("exit();").
- Fixed a syntax highlighting problem with keywords used as variable
names.
- Fixed a possible crash and/or file descriptor leak
- Fixed line number being off by one in #! shell style execution
- Made it possible to disable auto_prepend/append with "none" filename
- Allow safe CGI calling through #!php style scripts
March 2 1998 Version 3.0b6
- Made [s]printf handle %ld
- Changed CGI version to only open regular files as input script
- Added ignore_missing_userfunc_args directive to suppress warnings messages
about missing arguments to user-defined functions
- Added Postgres function - pg_cmdtuples(), by Vladimir Litovka
- Disabled command line options if used as CGI
- Changed CGI version to use PATH_TRANSLATED as the script file name
- Link with solid shared library instead of static one
- Fixed a crash with functions that aren't being called correctly
- Fixed file descriptor leak in auto-prepend/append
- Imap module is usable. See README in dl/imap.
February 24 1998 Version 3.0b5
- Made the URL aware file functions be enabled by default
- Fixed an unlikely crash bug in the parser, with uninitialized array elements
which are refered to as objects.
- Fixed several fields that were being incorrectly read in Sybase CT.
- Fix Apache-1.3 related SIGHUP problem which was preventing php3.ini from
getting re-read on a SIGHUP
- *** WARNING *** Downwards incompatible change: The plus operator (+) is not
longer overloaded as concatenation for strings. Instead, it converts its
arguments to numbers and performs numeric addition.
- Add Stig and Tin's bdf2gdfont script to extra/gd directory
- Added join() as an alias to implode()
- Made implode() accept arguments in the order used by explode() as well
- Made $php_errormsg local in function calls
- Fixed Apache configuration directive bugs
- Added a number of .ini directives to Apache .conf directive list
- Fixed a 'memory leak' with strtok()
- echo/print now handle binary data correctly.
- NEW now accepts any expression for the class name argument.
- Add ImageDashedLine() GD function
- Add arg_separator .ini directive so the '&' GET method separator can be
changed to ';' for example. Corresponding php3_arg_separator Apache .conf
directive works as well.
- Walked around an implementation side effect of switch(). <? switch(expr) { ?>
now works.
- Added memory caching, resulting in a significant performance boost
- Added support for for(): .. endfor; loops
- Added a new predicate - empty($var). Returns true if $var is not set,
or is FALSE. Returns false otherwise.
- Added is_integer() (same as is_long()) and is_real() (same as is_double()).
- Added sizeof() as an alias to the count() function
- Added --enable-force-cgi-redirect, to prevent the CGI from working if
someone directly accesses PHP not through Apache's CGI redirect
(off by default).
- Fixed marking of deleted dBase records. Noticed by Simon Gornall
<simon@oyster.co.uk>.
- Fixed fixed "%%" bug in [s]printf
- Fixed a UMR (initialized memory read) in the Oracle code
- Potential fix for mysql-related SIGPIPE problem which caused httpd to spin
- Made PHP responsive to the Apache link status (stop executing if the link
dies).
- Fixed a crash bug with StrongHold and secure pages
- Fixed StrongHold installation
- Optimized the function call sequence a bit.
- Fixed Sybase/CT date/datetime/money fields work to correctly.
- Fixed Apache module startup problems - php3_module_startup should only be
called once.
- Fixed ord() with characters >127
- Fixed bug in file_exists() function
- Fixed stripslashes() to remove the escaping quote (instead of backslash)
in case magic_quotes_sybase is true.
- Also make echo and print automatically remove trailing decimal zeros.
- Added htmlentities(), currently handling only ISO-8859-1 entities
- "0" is no longer considered false, the only string which is false is the
empty string "".
- Added 'true' and 'false' keywords
- Added 'xor' (logical exclusive or)
- Automatic conversion from double to string removes decimal trailing zeros.
- Added arsort() and rsort() to sort in descending order.
- Turned on "XLATOPT_NOCNV" by default for uODBC/Solid.
- Added support for a port number in the mysql_(p)connect() functions
- Fixed a file descriptor leak in the configuration parser.
- Fixed a few buglets with syntax highlighting with certain language keywords
- Added functions to control minimum severity level of Sybase messages to
display.
- Added highlight_string() - behaves like highlight_file(), only instead
of highlighting a file, it syntax highlights the contents of its
argument.
- Renamed show_source() to highlight_file(). show_source() is still
supported for downwards compatability.
- Fixed a bug in class inheritence - member functions with upper case
letters in their names couldn't be redefined.
- Made chown(), chgrp() and chmod() return TRUE/FALSE instead of 0/-1.
February 02 1998 Version 3.0b4
- Fixed a segfault bug in one of the unified ODBC error messages.
- Set default file modes to binary on Win32 (solved a lot of bs)
- Fixed file copy on Win32
- MIME file uploads fixed on Win32
- Added contributed icons by Colin Viebrock (undex extra/icons)
- Fixed the debugger enough to call it "beta code".
- Fixed some leaks in the Oracle module, tidied up the code a bit.
- Added __FILE__ and __LINE__ which evaluate to the currently parsed file
and currently parsed line respectively.
- Added ImageColorAt(), ImageColorSet(), ImageColorsForIndex(), and
ImageColorsTotal() to allow manipulating the palette of GIF images.
- Rename '--enable-url-includes' option to '--enable-url-fopen-wrapper' to
better describe what it does, and pay attention to the setting.
- Added optional parameter to the file(), readfile() and fopen() functions
to look for files located in the include path.
- Fixed bug that allowed the file() and readfile() to open files in the
include path inadvertantly.
- Fixed a (documented) bug in printf()/sprintf() with hard limited strings
and alignment (e.g. %-.20s).
- Optimized several quoted string routines.
- Added error_log ini directive to select where errors get logged when
log_errors is turned on or the error_log() function is used.
- Added the ability to direct errors to log files instead of or in addition
to the script output. Use the new display_errors and log_errors
php3.ini directives.
- Made environment variables uneraseable by POST/GET/Cookie variables.
- Fixed a bug in the elseif() construct. The expression was being evaluated
even if a previous if/elseif already evaluated to true and got executed.
- Fixed a bug in the exit code parameter of system()
- Tighten up all exec() related functions in safe mode
- Added error_log() function to log messages to the server error log, or
stderr for the CGI version.
- Added support for a general memory limit of scripts.
- Fixed a segfault bug that occured under certain circumstances with shell
escapes ($foo = `...`)
- Made keywords be valid property names of objects.
- Fixed a segfault bug when creating new objects of an unknown class.
- Fixed a problem with the maximum execution time limit, that may have
prevented this feature from working on certain platforms.
- PHP would now warn you with E_NOTICE about unknown escape characters,
e.g. "\f". It would still be considered as a backslash followed by f,
but the proper way of writing this is "\\f" or '\f'.
- Added support for ${...} inside encapsulated strings. Supported: ${foo},
${foo[bar]}, ${foo[0]}, ${$foo[$bar]}, ${$foo->bar} and ${$foo}
- Fixed a bug in automatic persistent link reconnect of the Sybase/DB module.
Thanks to Steve Willer for finding that 'stealth' bug!
- Fixed a crash bug in the GET/POST/Cookie parser in case of regular
and array variables with the same name.
- Added round() function.
- Can't use encapsed strings as variable names anymore, ie. $"blah blah".
- Fixed bug in gethostby*() functions that resulted in a core dump.
(Noticed by torben@coastnet.com.)
- Fixed bug in dbase_get_record that prevented number and date fields
from being properly decoded. (Thanks again to colins@infofind.com.)
- Make dbase_get_record include a 'deleted' field that indicates whether
that record had been marked for deletion.
- Fixed bug in dbase library that stomped on the deleted flag of the first
record in the file if it was set. (Thanks to colins@infofind.com.)
- Fixed putenv() to not report a memory leak and possibly prevent a bug
from that memory being freed.
- Added setlocale()
- Added pg_fieldisnull() (by Stephan Duehr)
- Changed pg_exec() to always return a result identifier on succees
- Solid linking fixes (tries to find the right library)
- Fixed a but with date() and the 'w' element.
- Tried to eliminate unimportant memory leak notifications.
- Made min() and max() backwards compatible and able to handle doubles.
- Add fgetc() function
- Fixed bug in getmyuid(), getmyinode() and getlastmod(). Thanks to
khim@sch57.msk.ru for pointing this out.
- Fixed http:// URL includes with no path specified send request for /.
- Added GetAllHeaders() (Apache-only)
- Added workaround that made the Image text functions 8-bit clean
- Made snmp internally compilable for Win32 (not the unix one though),
only adds 2k to binary size, so no reason not to have it there.
- Fixed ldap loading on Win32
- Fixed MySQL Info function on Win32 platform
- Fixed compilation of syntax highlighting mode
January 17 1998 Version 3.0b3
- Added mysql support under windows ;) happy happy joy joy
- Fixed dbase.dll for Win32 to actualy load now.
- Enhanced the convertor to recognize ?> as a php-close-block as well.
- Fixed potential SetCookie() core dumps
- Changed print to be an expression instead of a statement. That means you can
now do stuff like foobar() or print("Unable to foobar!"). echo has NOT been
changed.
- Removed the flex optimization flags to reduce the size of the scanner
- Added memory leak logging into apache log files (apache module only)
- Fixed a nasty bug in one of the internal stacks. This may have caused
random crashes in several occassions.
- Fixed bug in ImageGif() making it hang sometimes
- Added ImageLoadFont(), ImageFontWidth() and ImageFontHeight()
- error_reporting() now returns the old error reporting level
- Fixed url includes/opens not working under Win32
- Fixed errorneous handling of multipart/form-data input
- Added rawurlencode(), rawurldecode() and changed urlencode() and urldecode()
a bit too.
- Fixed a bug in [s]printf, sign was forgotten for doubles.
- Fixed a segfault bug in pg_fieldprtlen(), and made it accept field names
in addition to field offsets.
- Made the setup script a little more user-friendly.
- Added is_long(), is_double(), is_string(), is_array() and is_object()
- Fixed a bug in freeing of mSQL results.
- Improved pg_exec() to properly return true or false with queries that don't
return rows (i.e. insert, update, create, etc)
- Added get_cfg_var() to enable checking cfg file directives from within
a script.
- Fixed a bug with urlencode() and characters 0x80-0xff
- Changed the behaviour of ereg_replace to more intuitive. The
backslashes other than valid existing back references in the second
argument are no more evaluated as escape sequences.
- Fixed a bug in the configuration file loader and safe mode.
- Fixed a bug with configuration variables taken from the environment.
- Added <script language=php> </script> as PHP open/close tags, to allow
the use of editors such as Microsoft Frontpage.
- Fixed a bug in the default php3.ini directory - it wasn't defaulting to
/usr/local/lib properly.
- Added support for \r\n line endings
- Fixed a bug that may have prevented POST method variables from working
with certain scripts when using the CGI version.
- Convertor: Added support for single-quoted strings
- Fixed segfault bug in the Adabas module, with queries that don't return
rows (update, insert, etc).
December 22 1997 Version 3.0b2
- Changed variable type conversions that do not specify base to always use
base 10. "010" is no more 8, it is 10. Use intval ($x, 0) to get C-style
octal and hex numbers recognized.
- Fixed a possible segfault bug in several functions, when using the concat
operator and possibly other operators/functions.
- # is no longer accepted as a comment in php3.ini. Use ; instead.
- Added browscap support
- Configuration file directives are now case-sensitive
- Fixed msql_tablename() and msql_dbname()
- Added a PHP/FI 2.0 -> PHP 3.0 convertor
- Added support for shell/perl-style single quotes
- Added support for execution of external programs using backquotes ($a=`ls -l`)
- fixed mail() on windows, also fixed memory leaks in mail on windows
- added sendmail_from to handle return route on windows
- Changed the way the config file is searched. The file name is now
php3.ini (hardcoded), and it'll be looked for in: local directory, $PHPRC
and builtin path designated by ./configure under UNIX or Windows directory
under Windows.
- Fixed ereg_replace replacing empty matches and a one off buffer overflow
- Fixed File upload on windows platform
- Fixed a bug that caused 'HTTP/1.1 100 Continue' messages with
Internet Explorer 4.0 and certain scripts that receive POST variables
- Get/POST/Cookie data variables are from now *ALWAYS* strings. If you want
to use them in integer/real context, you must explicitly change their types.
This was done in order to avoid possible loss of data when doing these
conversions automatically.
- Variables named as keywords are now allowed (e.g. $function, $class, etc)
- Fixed a problem with msql() and mysql() with NULL fields
- Fixed a segfault bug with class declarations
- Fixed bugs with FOR loops and include() from within eval()
- Changed include() to be executed conditionally. PHP-3.0 efficient
unconditional include is now require()
December 08 1997 Version 3.0b1
- Switched to public beta test phase
- Generalized unset() and isset() to work on any type of variables, including
specific array indices or object properties (e.g., unset($a[4]) now works).
- Added support for object references inside encapsulated strings
(for example, 'echo "Username: $user->name"' now works)
- Added arbitary precision math support (basic operations with
unlimited range numbers, and support for unlimited decimal digits)
- Apache module can now handle preprocessed scripts (by using:
AddType application/x-httpd-php3-preprocessed .php3p
in the Apache configuration)
- Made settype() pass its first parameter by value. Improved it to be able
to convert to arrays and objects (originally by Steve Willer)
- Implemented CPU time limit on scripts when setitimer() is available
- Computed field names in the Sybase/CT and Sybase/DB modules are now named
computed, computed1, computed2, ...
- Added Sybase/CT client/server message handlers and updated the Sybase/DB ones
- Made the regexp function automatically take arguments by reference
when necessary
- Added builtin support for auto append and prepend in the parser level
- Improved the Sybase/CT sybase_query(). Should be more stable now, and
hopefully work with a wider range of queries. It's difficult to work
without docs, though, so it may still not be 100% right...
- Changed error messages to show error type, file and line with bold
- Added support for autoprepend and autoprepend
- Added some more warning flags if gcc is used
December 03 1997 Version 3.0a4
- Improved the internal functions API - no need to explicitly pass
parameters by reference to internal functions that specifically
require them, e.g. sort(), ksort(), reset(), count(), etc.
This is *STILL* downwards compatible with the previous alphas,
in the sense that you can explicitly pass the arguments by reference
if you want to.
- use srandom/random instead of srand/rand if available
- Added [m,My]sql_listfields() for downwards compatability
- -p now replaces .php3 extension with .php3p (otherwise it adds .php3p)
- Added C++ style comments (// comment)
- Fixed # commenting to terminate at a close PHP tag
- Added \0 back reference for full string match to *reg*_replace and
added backslash escaping to replace string
- Fixed a few bugs in the Sybase DB-library module.
- Added Sybase CT-library support. It should be considered experimental.
Syntax is identical to the one of the DB-library. Allows people to
connect to MS-SQL servers from Linux without having to pay for a
library!
- Beautified phpinfo()
- Add ImageColorClosest() and ImageColorExact() GD functions
- Make all .ini directives work as Apache .conf directives as well
- Added PHP2-like File() function with PHP3 URL support
- Upgraded the Sybase interface. It's practically MySQL compatible now!
Among other things, added sybase_fetch_array() and sybase_fetch_object().
- Fixed problem in multi dimensional array handling and self modifying
operators (+=, -=, etc).
- Safe Mode file open implementation
- SVR3 portability problem fix
November 23 1997 Version 3.0a3
- Made the global statement behave like PHP 2 with undefined variables
- Added msql_fetch_object() and msql_fetch_array()
- Switched between the 1st and 2nd parameters to explode(), so that it acts
like split()
- Fixed passthru(), exec() and system() functions
- Implemented second optional parameter to intval() to specify conversion base
(The default is to assume you want to do a base 10 conversion.)
- Implemented SQL safe mode for MySQL
- Read UploadTmpDir from php3.ini instead of apache conf files
- Added mysql_fetch_object() and mysql_fetch_array()
- Changed function->old_function. function is now an alias to cfunction.
- Split the magic_quotes directive to get/post/data and other
- Added generic copy() function
- Added a $GLOBALS[] array, which contains all global variables
- Fix broken getimagesize() function
- Made mysql_fetch_field() and msql_fetch_field() optionally accept a 2nd argument
- Fixed mysql_data_seek() and msql_data_seek()
- Changed list assignment to list(...) and array init to array(...)
- Made <?php_track_vars?> work
- cgi when not in debug mode uses regular malloc(), free() functions now
- Added preliminary support for perl-style list assignments
- Fixed a bug in mysql_result() and msql_result() when specifying table
- renamed internal error-handling function and levels
- Added basename and dirname functions similar to sh counterparts
- Added base64_encode() and base64_decode()
- Support Basic authorization for http url includes
- Added parse_url() function to extract url components
- Made it possible to use anonymous ftp on URL includes
- Fixed url includes to handle different URLs better
- Fixed mysql_field*() functions
- Made mysql_connect() smarter, after a mysql_close() (applies to msql and pgsql too)
November 6 1997 Version 3.0a2
- Fixed a segfault bug caused by non-persistent connect in [m,My,Postgres]SQL modules
- Fix command line argument handling
- Made empty array list assignments work ($a=({});)
- Made '$' escaping optional when a variable name parsing isn't possible
- Added support for mysql_[p]connect(host) and mysql_[p]connect(host,user)
- New layout in phpinfo()
- Update Oracle extension to use php3_list functions
- Add includepath support
- Add #!php shell script escape support
- Change name of CGI/command line version from php3.cgi to php
- Add SNMP extension
- show_source() support
- Parsing of command-line args for CGI version
- Support for backreferences in ereg_replace
- Support for hexadecimal numbers directly at the scanner level
- Support octal numbers directly at the scanner level
- Fixed problem with huge html files (with little or no php code)
- Fix eval() empty string argument core dump
- renamed 'install' to 'setup' to be more accurate and avoid name conflict
- Fixed Oracle compilation
- Fixed mSQL 1.0 compilation
- Fixed a problem in the mSQL, MySQL and PostgresSQL drivers and NULL fields.
- Fixed the GLOBAL statement to be able to declare an array.
October 29 1997 Version 3.0a1
- Start with excellent new parser from Andi and Zeev
+43 -14
View File
@@ -1,25 +1,28 @@
Installation Instructions for PHP 4.0
-------------------------------------
For the impatient here is a quick set of steps that will build PHP
as an Apache module for Apache 1.3.0 with MySQL support. A more verbose
Note! As of 4.0b3, PHP will require GNU make.
For the impatient here is a quick set of steps that will build PHP as
an Apache module for Apache 1.3.x with MySQL support. A more verbose
explanation follows.
QUICK INSTALL
gunzip apache_1.3.x.tar.gz
tar xvf apache_1.3.x.tar
gunzip php-4.0.x.tar.gz
tar xvf php-4.0.x.tar
cd apache_1.3.x
./configure --prefix=/www
cd ../php-4.0.x
./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars
make
make install
cd ../apache_1.3.x
./configure --prefix=/www --activate-module=src/modules/php4/libphp4.a
$ gunzip -c apache_1.3.x.tar.gz | tar xf -
$ cd apache_1.3.x
$ ./configure
$ cd ..
$ gunzip -c php-4.0.x.tar.gz | tar xf -
$ cd php-4.0.x
$ ./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars
$ make
$ make install
$ cd ../apache_1.3.x
$ ./configure --prefix=/www --activate-module=src/modules/php4/libphp4.a
(The above line is correct! Yes, we know libphp4.a does not exist at this
stage. It isn't supposed to. It will be created.)
make
@@ -157,3 +160,29 @@ Installing PHP can be done in four simple steps:
When you are finished making changes to your srm.conf file, you can
start up your server.
USING PHP3 AND PHP4 AS CONCURRENT APACHE MODULES
Recent operating systems provide the ability to perform versioning and
scoping. This features make it possible to let PHP3 and PHP4 run as
concurrent modules in one Apache server.
This feature is known to work on the following platforms:
- Linux with recent binutils (binutils 2.9.1.0.25 tested)
- Solaris 2.5 or better
- FreeBSD (3.2, 4.0 tested)
To enable it, configure PHP3 and PHP4 to use APXS (--with-apxs) and the
necessary link extensions (--enable-versioning). Otherwise, all standard
installations instructions apply. For example:
$ ./configure \
--with-apxs=/apache/bin/apxs \
--enable-versioning \
--with-mysql \
--enable-track-vars
If this also works on your platform or if you know a way to do it, please
report it to our bug database at http://bugs.php.net
+20 -13
View File
@@ -1,5 +1,5 @@
--------------------------------------------------------------------
The PHP License, version 2.0
The PHP License, version 2.01
Copyright (c) 1999 The PHP Group. All rights reserved.
--------------------------------------------------------------------
@@ -17,25 +17,32 @@ are met:
3. The name "PHP" must not be used to endorse or promote products
derived from this software without prior permission from the
PHP Group. This does not apply to add-on libraries or tools
that work in conjunction with PHP. In such a case the PHP
name may be used to indicate that the product supports PHP.
PHP Group. This does not apply to add-on libraries or tools
that work in conjunction with PHP. In such a case the PHP
name may be used to indicate that the product supports PHP.
4. The PHP Group reserves the right to modify the PHP license at
any time and without prior notice, as long as the changes keep
the free and open source nature of PHP.
4. The PHP Group may publish revised and/or new versions of the
license from time to time. Each version will be given a
distinguishing version number.
Once covered code has been published under a particular version
of the license, you may always continue to use it under the
terms of that version. You may also choose to use such covered
code under the terms of any subsequent version of the license
published by the PHP Group. No one other than the PHP Group has
the right to modify the terms applicable to covered code created
under this License.
5. Redistributions of any form whatsoever must retain the following
acknowledgment:
"This product includes PHP, freely available from
http://www.php.net/".
http://www.php.net/".
6. Permission to freely distribute and use Zend as an integrated
part of PHP is granted, under the conditions of version 0.91
of the Zend License.
The license is bundled with the Zend engine, and is available
at http://www.zend.com/license/0_91.txt, or by contacting
license@zend.com.
of the Zend License.
The license is bundled with the Zend engine, and is available
at http://www.zend.com/license/0_91.txt, or by contacting
license@zend.com.
@@ -57,7 +64,7 @@ OF THE POSSIBILITY OF SUCH DAMAGE.
This software consists of voluntary contributions made by many
individuals on behalf of the PHP Group.
The PHP Group can be contacted via Email at php-group@php.net.
The PHP Group can be contacted via Email at group@php.net.
For more information on the PHP Group and the PHP project,
please see <http://www.php.net>.
+97
View File
@@ -0,0 +1,97 @@
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: 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: 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
--------------------------------------------------------------------------------
+3
View File
@@ -15,3 +15,6 @@ oci8 Working (but no blob-support yet)
oracle Working
iptc Working
informix Working
zlib Working
sysvshm Working
odbc Working (except for persistent connections)
+41
View File
@@ -0,0 +1,41 @@
AUTOMAKE_OPTIONS = foreign
ZEND_DIR = $(srcdir)/libzend
SUBDIRS = libzend ext sapi $(TSRM_DIR) $(REGEX_DIR)
BUILDLDFLAGS = $(EXTRA_LDFLAGS) $(LDFLAGS)
phptemp_LTLIBRARIES = libphp4.la
libphp4_la_SOURCES = \
main.c internal_functions.c snprintf.c php3_sprintf.c \
configuration-parser.y configuration-scanner.l request_info.c \
safe_mode.c fopen-wrappers.c php3_realpath.c alloca.c \
php_ini.c SAPI.c rfc1867.c dlist.c php_content_types.c strlcpy.c \
strlcat.c mergesort.c
libphp4_la_DEPENDENCIES = \
libzend/libzend.la \
sapi/$(PHP_SAPI)/libphpsapi_$(PHP_SAPI).la \
$(REGEX_LIB) \
$(EXT_LTLIBS) \
$(TSRM_LIB)
libphp4_la_LIBADD = $(libphp4_la_DEPENDENCIES) $(EXTRA_LIBS)
libphp4_la_LDFLAGS = $(BUILDLDFLAGS) $(PHP_RPATHS)
configuration-parser.h configuration-parser.c: configuration-parser.y
$(YACC) -p cfg -v -d $< -o configuration-parser.c
configuration-scanner.c: configuration-scanner.l
$(LEX) -Pcfg -o$@ -i $<
EXTRA_PROGRAMS = php
noinst_PROGRAMS = $(PHP_PROGRAM)
php_SOURCES = stub.c
php_LDADD = libphp4.la
php_LDFLAGS = -export-dynamic
install-data-local:
$(INSTALL_IT)
-238
View File
@@ -1,238 +0,0 @@
# +----------------------------------------------------------------------+
# | PHP HTML Embedded Scripting Language Version 4.0 |
# +----------------------------------------------------------------------+
# | Copyright (c) 1997-1999 PHP Development Team (See Credits file) |
# +----------------------------------------------------------------------+
# | 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. |
# +----------------------------------------------------------------------+
#
# $Id$
#
prefix = @prefix@
exec_prefix = @exec_prefix@
srcdir = @srcdir@
VPATH = @srcdir@
bindir = @bindir@
top_builddir = .
ZEND_DIR = $(srcdir)/libzend
SUBDIRS=libzend ext @TSRM_DIR@
PACKAGE = @PACKAGE@
VERSION = @VERSION@
LN_S = @LN_S@
CC = @CC@
AR = ar rc
BINNAME = @BINNAME@
INSTALL_IT = @INSTALL_IT@
EXTRA_LIBS = @EXTRA_LIBS@
EXT_LIBS = @EXT_LIBS@
INCLUDES = @INCLUDES@
INCLUDE = -I$(srcdir) -I. -I$(ZEND_DIR) -I$(srcdir)/TSRM $(INCLUDES)
PROF_CFLAGS =
CFLAGS_SHLIB = @CFLAGS_SHLIB@
LDFLAGS_SHLIB = @LDFLAGS_SHLIB@
LDFLAGS_SHLIB_EXPORT = @LDFLAGS_SHLIB_EXPORT@
CPPFLAGS = @CPPFLAGS@
CFLAGS = @CFLAGS@ $(CFLAGS_SHLIB) $(CPPFLAGS) $(INCLUDE) @DEBUG_CFLAGS@ @STRONGHOLD@ $(PROF_CFLAGS)
LDFLAGS = @RPATHS@ @LDFLAGS@ $(LDFLAGS_SHLIB) $(LDFLAGS_SHLIB_EXPORT) -L$(ZEND_DIR)
REGCFLAGS = $(CFLAGS)
RANLIB = @RANLIB@
YACC = @YACC@
MAINT = @MAINT@
APXS = @APXS@
APXS_LDFLAGS = $(EXTRA_LIBS) $(LIBS)
APXS_EXP = @APXS_EXP@
WARNING_LEVEL = @WARNING_LEVEL@
LEX_CFLAGS = -w$(WARNING_LEVEL) @LEX_CFLAGS@
EXT_SHARED = @EXT_SHARED@
SOURCE = main.c internal_functions.c snprintf.c php3_sprintf.c \
configuration-parser.c configuration-scanner.c request_info.c \
safe_mode.c fopen-wrappers.c php3_realpath.c alloca.c output.c \
php_ini.c SAPI.c cgi_main.c rfc1867.c dlist.c
OBJS = main.o internal_functions.o snprintf.o php3_sprintf.o \
configuration-parser.o configuration-scanner.o request_info.o \
safe_mode.o fopen-wrappers.o php3_realpath.o alloca.o output.o \
php_ini.o SAPI.o cgi_main.o rfc1867.o dlist.o
PHPLIBS = -Llibzend -lzend -Lext -lphpext
LIBS = $(PHPLIBS) $(EXTRA_LIBS) @LIBS@
all: $(BINNAME)
all-recursive clean-recursive distclean-recursive \
maintainer-clean-depend-recursive:
@set fnord $(MAKEFLAGS); amf=$$2; \
for subdir in $(SUBDIRS); do \
target=`echo $@ | sed s/-recursive//`; \
echo "Making $$target in $$subdir"; \
(cd $$subdir && $(MAKE) $$target) || fail=yes; \
done && test -z "$$fail"
# CGI binary or fhttpd module
php: all-recursive $(OBJS) @REGEX_LIB@ @FHTTPD_LIB@ @TSRM_LIB@
$(CC) $(CFLAGS) -o $(BINNAME) $(LDFLAGS) $(OBJS) $(LIBS)
# Apache modules
libphp4.a libmodphp4.a: all-recursive $(OBJS) @REGEX_LIB@
$(AR) $@.tmp $(OBJS)
$(srcdir)/scripts/armerge $@ $@.tmp ext/libphpext.a libzend/libzend.a @TSRM_LIB@
@rm -f $@.tmp
$(RANLIB) $(BINNAME)
# Apache modules
libmodphp4-so.a: all-recursive $(OBJS) @REGEX_LIB@
$(AR) $@.tmp $(OBJS)
$(srcdir)/scripts/armerge $@ $@.tmp ext/libphpext.a libzend/libzend.a @TSRM_LIB@
@rm -f $@.tmp
$(RANLIB) libmodphp4-so.a
# Apache 1.3 shared module
libphp4.so: $(srcdir)/mod_php4.c libmodphp4-so.a @REGEX_LIB@
-@test -f ./mod_php4.c || test -L ./mod_php4.c || $(LN_S) $(srcdir)/mod_php4.c ./mod_php4.c
-@test -f ./mod_php4.c || test -h ./mod_php4.c || $(LN_S) $(srcdir)/mod_php4.c ./mod_php4.c
$(APXS) $(INCLUDE) -c -o libphp4.so @RPATHS@ ./mod_php4.c libmodphp4-so.a $(APXS_LDFLAGS) $(APXS_EXP)
regex/libregex.a:
(cd regex; $(MAKE) lib)
configuration-parser.h configuration-parser.c: $(srcdir)/configuration-parser.y
bison -p cfg -v -d $(srcdir)/configuration-parser.y -o configuration-parser.c
configuration-scanner.o: configuration-scanner.c
$(CC) $(CFLAGS) $(LEX_CFLAGS) -c configuration-scanner.c
configuration-scanner.c: $(srcdir)/configuration-scanner.l
flex -Pcfg -oconfiguration-scanner.c -i $(srcdir)/configuration-scanner.l
clean: clean-recursive
-rm -f libphp4.a libmodphp4.a libphp4.so php *.o
-rm -f test/php.desc test/php.in test/php.out test/php.test
-rm -f test/a.tmp test/b.tmp test/test.dbm*
distclean: clean distclean-recursive
-rm -f *-parser.[ch] *-scanner.c *.output
-rm -f config.status config.cache config.log
-rm -f Makefile Makefile.depend php_config.h build-defs.h
-rm -f libphp4.module stamp-h
-rm -f regex/*.o regex/*.a regex/*.ih
-rm -f doc/checkdoc doc/funcparse doc/version.ent
-rm -f do-conf test/test.log
-rm -f doc/Makefile regex/Makefile
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
dist: distdir
-chmod -R a+r $(distdir)
tar chozf $(distdir).tar.gz $(distdir)
-rm -rf $(distdir)
distdir:
-rm -rf $(distdir)
files=`echo *` ;\
mkdir $(distdir) ;\
for file in $$files ; do \
d=$(srcdir); \
if test -d $$d/$$file ; then \
cp -pr $$d/$$file $(distdir)/$$file; \
else \
test -f $(distdir)/$$file \
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
(cd $(distdir) ; $(MAKE) distclean)
cd $(distdir)/libzend ;\
flex -Pzend -ozend-scanner.c -i zend-scanner.l ;\
bison -p zend -v -d zend-parser.y -o zend-parser.c
cd $(distdir) ;\
flex -Pcfg -oconfiguration-scanner.c -i configuration-scanner.l ;\
bison -p cfg -v -d configuration-parser.y -o configuration-parser.c
find $(distdir) -name CVS -o -name .cvsignore | xargs rm -rf
maintainer-clean-depend: maintainer-clean-depend-recursive
bench: $(BINNAME)
./$(BINNAME) -c. tests/bench.phtml
# can't use a single rule for this because 'test' is a directory
test: regression
regression check: $(BINNAME)
cd test && ./testall
config.status: configure
./config.status --recheck
build-defs.h php_config.h: stamp-h
stamp-h: php_config.h.in config.status
CONFIG_FILES='build-defs.h stamp-h' ./config.status
Makefile: Makefile.in config.status
CONFIG_FILES=$@ CONFIG_HEADERS= ./config.status
#
# You must use '--enable-maintainer-mode' with configure to enable
# these rules, which requires autoconf be installed.
#
configure: @MAINT@ configure.in aclocal.m4
cd $(srcdir) && autoconf
php_config.h.in: @MAINT@ stamp-h.in
stamp-h.in: configure.in aclocal.m4 acconfig.h
cd ${srcdir} && autoheader && touch ${srcdir}/stamp-h.in
install: install-recursive $(BINNAME)
$(INSTALL_IT)
install-recursive:
if test "$(EXT_SHARED)" != ""; then \
for dir in X $(EXT_SHARED); do \
test -d ext/$$dir && (cd ext/$$dir; $(MAKE) install); \
done; \
fi
indent: clean
indent -v -kr -cli4 -ts4 \
-T pval -T HashTable -T Bucket -T Token -T TokenCache -T TokenCacheManager \
-T switch_expr -T internal_function -T control_structure_data \
-T MemoryHashTable -T MemoryBucket \
-T pvalue_value -T Stack *.c *.h
rm -f *~
.c.o:
@rm -f $@
$(CC) $(CFLAGS) -c $< -o $@
# @bn=`echo $@ | sed -e 's#functions/##'`; test -f $@ || \
# (test "$@" != "$$bn" && test -f "$$bn" && mv $$bn $@)
parser-scanner: configuration-parser.c configuration-scanner.c
depend: parser-scanner
$(CC) $(CFLAGS) -MM $(SOURCE) | perl -pe 's|regex/regex.h||;' > Makefile.depend
$(CC) $(CFLAGS) -MM $(FUNCTIONS_SOURCE) | perl -pe 's|^(.+\.o)|functions/$$1|; s|regex/regex.h||;' >> Makefile.depend
# Local Variables:
# tab-width: 4
# End:
+302
View File
@@ -0,0 +1,302 @@
PHP 4.0 NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
November 16 1999, Version 4.0 Beta 3
- ucfirst()/ucwords() no longer modify arg1. (Thies)
- Fixed strtr() not to modify arg1. (Thies)
- Added Win32 build files for Informix driver and make it
compile with ZTS (danny)
- Added tmpfile() function (Stig)
- Upgraded regex library to alpha3.8 (Sascha)
- Fixed selecting nested-tables in OCI8. (Thies)
- RFC-854 fix for internal FTP-Code. Commands have to end in "\r\n" (Thies)
- Fix OpenLink ODBC support (Stig)
- min(),max(),a[r]sort(),[r]sort(),k[r]sort() now work consistent with the
language-core. (Thies)
- tempnam() now uses mkstemp() if available (Stig)
- serialize() and var_dump() now honor the precision as set in php.ini
for doubles. (Thies)
- Improved the Win32 COM module to support [out] parameters (Boris Wedl)
- Fixed garbage returned at the end of certain Sybase-Columns (Thies)
Patch submitted by: neal@wanlink.com
- Added Microsoft SQL Server module for Win32 (Frank)
- Added support for forcing a variable number of internal function arguments
by reference. (Andi & Zeev, Zend library)
- Implemented getprotoby{name,number} (Evan)
- Added array_pad() function. (Andrei)
- Added new getservby{name,port} functions. (Evan)
- Added session.cookie_path and session.cookie_domain (Sascha)
- Continue processing PHP_INI_SYSTEM knownDirectives after extension=
(Sam Ruby)
- Enable IBM DB2 support - Tested against DB2 6.1 UDB on Linux (Rasmus)
- Added new str_repeat() function. (Andrei)
- Output-Buffering system is now Thread-Safe. (Thies)
- implemented OCI8 $lob->WriteToFile() function - very useful for streaming
large amounts of LOB-Data without to need of a huge buffer. (Thies)
- Added session.use_cookies option (Sascha)
- Added getcwd() function. (Thies)
- XML_Parse_Into_Struct no longer eats data. (Thies)
- Fixed parse_url('-') crash. (Thies)
- added === operator support. (Andi & Thies, Zend library)
- unserialize() now gives a notice when passed invalid data. (Thies)
- Fixed shuffle() so that it no longer breaks on Solaris. (Andrei)
- Added is_resource(), is_bool() functions. (Thies)
- Cleaned up File-Module (Thies)
- Upgraded math-funtions to use new Zend function API (Thies)
- Fixed zombie problem in shell_exec() and $a = `some_command`
constructs. (Thies)
- Thies introduced ZEND_FETCH_RESOURCE2 (Danny).
- Added Informix driver to list of maintained extensions. (Danny).
- Informix driver : Changed ifx.ec to use the new high-performance
ZEND API. (Danny)
- IXF_LIBDIR environment variable specifies alternate Informix library
path for configure (Danny).
- Fixed gmmktime() so that the following should always be true:
gmmktime([args]) == mktime([args]) + date('Z', mktime([args])) (Jouni)
- setlocale doesn't anymore screw up things if you forgot to change it back
to the original settings. (Jouni)
- Switched to new system where ChangeLog is automagically updated from commit
messages. NEWS file is now the place for public announcements. (Andrei)
- Fixed refcount problem in XML module. (Thies)
- Fixed crash in HTTP_RAW_POST_DATA handling (Thies)
- You can use resources as array-indices again (Thies, Zend library)
- Fixed pg_fetch_array() with three arguments (Sascha)
Patch submitted by: brian@soda.berkeley.edu
- Upgraded a lot internal functions to use new Zend function API (Thies)
- fdf support ported; not completely tested with latest version 4.0 for
glibc (Uwe)
- OCI8 connections are now kept open as long as they are referenced (Thies)
- Cleaned up Directory-Module (Thies)
- Small fix in Ora_Close (Thies)
- Ported range() and shuffle() from PHP3 to PHP4 (Andrei)
- Fixed header("HTTP/..."); behaviour (Sascha)
- Improved UNIX build system. Now utilizes libtool (Sascha)
- Upgrade some more internal functions to use new Zend function API. (Thies,
Zend library)
- Fixed backwards incompatibility with ereg() (Thies)
- Updated Zend garbage collection with a much more thorough method.
(Andi, Zend library)
- Added the ability to use variable references in the array() construct.
For example, array("foo" => &$foo). (Andi, Zend library)
- Added array_reverse() function (Andrei)
- Some more XML fixes/cleanups (Thies)
- Updated preg_replace() so that if any argument passed in is an array
it will make a copy of each entry before converting it to string so that
the original is intact. If the subject is an array then it will preserve
the keys in the output as well (Andrei)
- Updated OCI8 to use the new high-performance Zend function API. (Thies)
- Configure speedup (Stig)
- Fixed LOB/Persistent-Connection related OCI8-Crash (Thies)
- Generalized server-API build procedure on UNIX (Stig)
- Added '--disable-rpath' option (Sascha)
- Added AOLserver SAPI module (Sascha)
- Fixed XML Callbacks. (Thies)
- Updated ODBC to use the new high-performance Zend function API (kara)
- Updated zlib to use the new high-performance Zend function API. (Stefan)
- Updated preg_split() to allow returning only non-empty pieces (Andrei)
- Updated PCRE to use the new high-performance Zend function API (Andrei)
- Updated session, dba, mhash, mcrypt, sysvshm, sysvsem, gettext modules to use
the new high-performance Zend function API (Sascha)
- Extended var_dump to handle resource type somewhat (Andrei)
- Updated WDDX to use the new high-performance Zend function API (Andrei)
- Updated XML to use the new high-performance Zend function API. (Thies)
- Updated Oracle to use the new high-performance Zend function API. (Thies)
- Improved the performance of the MySQL module significantly by using the new
high-performance Zend function API. (Zeev)
- Add support for the Easysoft ODBC-ODCB Bridge (martin@easysoft.com)
- Fix bug in odbc_setoption, getParameter call incorrect (martin@easysoft.com)
- Ora_Fetch_Into now resets the returned array in all cases (Thies)
- Fixed NULL-Column problem in Oracle-Driver (Thies)
- Added extra metadata functions to ODBC, SQLTables etc (nick@easysoft.com)
- Fixed SEGV in mcal make_event_object() and
typo in mcal_list_alarms() (Andrew Skalski)
- Fixed Ora_PLogon (Thies)
- Resourcified Oracle (Thies)
- Implemented object serialization/deserialization in WDDX (Andrei)
- Added krsort() function (Thies)
- Added func_num_args(), func_get_arg() and func_get_args() for standard
access to variable number of arguments functions (Zeev)
- Added FTP support (Andrew Skalski)
- Added optional allowable_tags arguments to strip_tags(), gzgetss() and
fgetss() to allow you to specify a string of tags that are not to be
stripped (Rasmus)
- Upgraded var_dump() to take multiple arguments (Andrei)
- Resourcified XML (Thies)
- Fixed a memory leak in the Apache per-directory directives handler (Zeev)
- Added array_count_values() function. (Thies)
- snmp, pgsql, mysql and gd modules can be built as dynamically loaded
modules (Greg)
- OCI8 fix for fetching empty LOBs (Thies)
- Added user-level callbacks for session module (Sascha)
- Added support for unknown POST content types (Zeev)
- Added "wddx" serialization handler for session module (Sascha)
(automatically enabled, if you compile with --with-wddx)
- Fixed unserializing objects (Thies)
- PHP 4.0 now serializes Objects as 'O' (not understood by PHP 3.0), but
unserializes PHP 3.0 serialized objects as expected. (Thies)
- Made serialize/unserialize work on classes. If the class is known at
unserialize() time, you'll get back a fully working object! (Thies)
- Reworked preg_* functions according to the new PCRE API, which also made
them behave much more like Perl ones (Andrei)
- Made it possible to specify external location of PCRE library (Andrei)
- Updated bundled PCRE library to version 2.08 (Andrei)
- count()/is_array/is_object... speedups. (Thies)
- OCI8 supports appending and positioning when saving LOBs (Thies)
- Added metaphone support (Thies)
- OCI8 doesn't use define callbacks any longer. (Thies)
- OCI8 Driver now supports LOBs like PHP 3.0. (Thies)
- var_dump now dumps the properties of an object (Thies)
- Rewrote the GET/POST/Cookie data reader to support multi-dimensional
arrays! (Zeev)
- Renamed allow_builtin_links to expose_php (defaults to On). This directive
tells PHP whether it may expose its existence to the outside world, e.g.
by adding itself to the Web server header (Zeev)
- Added support for transparent session id propagation (Sascha)
- Made WDDX serialize object properties properly (Andrei)
- Fixed WDDX mem leak when undefined variable is passed in
for serialization (Andrei)
- Added session_unset() function (Andrei)
- Fixed double session globals shutdown crash (Andrei)
- Fixed crash related to ignore_user_abort ini entry (Andrei)
- Added support for external entropy sources for session id creation
(on Unices /dev/random and /dev/urandom) (Sascha)
- Added gpc_globals variable directive to php.ini. By default it is On, but
if it is set to Off, GET, POST and Cookie variables will not be inserted
to the global scope. Mostly makes sense when coupled with track_vars (Zeev)
- Added versioning support for shared library (Sascha)
This allows concurrent use of PHP 3.0 and PHP 4.0 as Apache modules. See
the end of the INSTALL file for more information.
- Added second parameter to array_keys which specifies search value
for which the key should be returned (Andrei)
- Resourcified Informix driver (Danny)
- New resource handling for odbc, renamed to php_odbc.[ch]
- Make set_time_limit() work on Unix (Rasmus)
- Added connection handling support (Rasmus)
- Improved the Sybase-CT module to make use of resources (Zeev)
- Improved the mSQL module to make use of resources (Zeev)
- Changed mysql_query() and mysql_db_query() to return false in case of saving
the result set data fails (Zeev)
- Improved the resource mechanism - resources were not getting freed as soon
as they could (Zeev)
- Added shared memory module for session data storage (Sascha)
- Fixed session.auto_start (Sascha)
- Fixed several problems with output buffering and HEAD requests (Zeev)
- Fixed HTTP Status code issue with ISAPI module (Zeev)
- Fixed a problem that prevented $GLOBALS from working properly (Zeev, Zend
library)
- Ported newest GetImageSize (Thies)
- Added session compile support in Win32 (Andi)
- Added -d switch to the CGI binary that allows overriding php.ini values
from the command line (Zeev)
- Fixed a crash that would occur if wddx_deserialize did not receive
a valid packet (Andrei)
- Fixed a bugglet when redefining a class at run-time (Andi, Zend library)
- Fixed sem_get() on AIX (Sascha)
- Fixed fopen() to work with URL's in Win32 (Andi & Zeev)
- Fixed include_path for Win32 (Andi, Zend library)
- Fixed bug in ISAPI header sending function (Charles)
- Fixed memory leak when using undefined values (Andi & Zeev, Zend library)
- Added output_buffering directive to php.ini, to enable output buffering
for all PHP scripts - default is off (Zeev).
- Fixed some more class inheritance issues (Zeev, Zend library)
- Fixed Apache build wrt to shared modules on FreeBSD/Linux (Sascha)
- Added session.extern_referer_chk which checks whether session ids were
referred to by an external site and eliminates them (Sascha)
- Improved session id generation (Sascha)
- Improved speed of uniqid() by using the combined LCG and removing
the extra usleep() (Sascha)
- Introduced general combined linear congruential generator (Sascha)
- Made ldap_close back into an alias for ldap_unbind (Andrei)
- OciFetchInto now resets the returned array in all cases (Thies)
- Fixed mysql_errno() to work with recent versions of MySQL (Zeev)
- Fixed a problem with define() and boolean values (Zeev)
- Fixed inclusion of gd/freetype functions (Sascha)
- Fixed persistency of MHASH_* constants (Sascha)
- Oracle is now ZTS-Safe (Thies)
- Fixed flushing of cached information to disk in DBA's DB2 module (Sascha)
- OCI8 is now ZTS-Safe (Thies)
- Fixed is_writeable/is_writable problem; they are both defined now (Andrei)
- Imported PHP 3.0 diskfreespace() function (Thies)
- Fixed thread-safety issues in the MySQL module (Zeev)
- Fixed thread-safe support for dynamic modules (Zeev)
- Fixed Sybase CT build process (Zeev)
August 9 1999, Version 4.0 Beta 2
- Fixed a problem when sending HTTP/1.x header lines using header() (Zeev)
- Win32 builds now include the ODBC module built-in (Zeev)
- Fixed SYSV-SHM interface (Thies).
- Updated hyperwave module, made it thread safe
- Updated pdflib module, version 0.6 of pdflib no longer supported
- Updated fdf module
- Built-in phpinfo() links are now turned off by default. They can be turned
on using the allow_builtin_links INI directive (Zeev)
- Changed phpinfo() to list modules that have no info function (Zeev)
- Modified array_walk() function so that the userland callback is passed
a key and possible user data in addition to the value (Andrei)
- Fixed ldap_search(), ldap_read() and ldap_list() (Zeev)
- Fixed Apache information in phpinfo() (sam@breakfree.com)
- Improved register_shutdown_function() - you may now supply arguments that
will be passed to the shutdown function (Zeev)
- Improved call_user_func() and call_user_method() - they now support passing
arguments by reference (Zeev)
- Fixed usort() and uksort() (Zeev)
- Fixed md5() in the Apache module (Thies)
- Introduced build process for dynamic modules (Stig)
- Improved ISAPI module to supprt large server variables (Zeev)
- Imported PHP 3.0 fixes for problem with PHP as a dynamic module and Redhat
libc2.1 in zlib module (Stefan)
- Fixed sybase_fetch_object() (Zeev)
- Made the IMAP module work with PHP 4.0 (Zeev)
- Fixed a problem with include()/require() of URLs (Sascha, Zeev)
- Fixed a bug in implode() that caused it to corrupt its arguments (Zeev)
- Added get_class($obj), get_parent_class($obj) and method_exists($obj,"name")
(Andi & Zeev)
- Fixed various inheritance problems (Andi & Zeev, Zend library)
- Children now inherit their parent's constructor, if they do not supply a
constructor of their own.
- Fixed runtime inheritance of classes (parent methods/properties were
overriding their children) (Zeev, Zend library)
- Fixed backwards incompatibility with the "new" operator (Andi, Zend library)
- Fixed bugs in uksort() and ksort() sort ordering (Andrei)
- Fixed a memory leak when using assignment-op operators with lvalue of type
string (Zeev, Zend library)
- Fixed a problem in inheritance from classes that are defined in include()d
files (Zeev, Zend library)
- Fixed a problem with the PHP error handler that could result in a crash
on certain operating systems (Zeev)
- Apache php_flag values only recognized 'On' (case sensitive) - changed
to case insensitive (Zeev)
- Fixed a memory leak with switch statement containing return statements
(Andi & Zeev, Zend library)
- Fixed a crash problem in switch statements that had a string offset
as a conditional (Andi & Zeev, Zend library)
- Imported PHP 3.0 fixes for rand() and mt_rand() (Rasmus)
- Added function entries for strip_tags() and similar_text() (Andrei)
- Fixed a bug in WDDX that would cause a crash if a number was passed in
instead of a variable name (Andrei)
- Ported strtotime() function from PHP 3.0 (Andrei)
- Merged in gdttf stuff from PHP 3.0 (Sascha)
- buildconf now checks your installation (Stig)
- XML module now built dynamically with --with-xml=shared (Stig)
- Added a check for freetype.h - fixed build on RedHat 6.0 (Zeev)
- Fixed array_walk() to work in PHP 4.0 (Andrei)
- Ported all remaining date() format options from PHP 3.0 (Andrei)
- $php_errormsg now works (Andrei)
- Added locale support for Perl Compatible Regexp functions (Andrei)
- Informix module ported (Danny)
- Removed --with-shared-apache (Sascha)
- Added patch for reverse lookup table in base64_decode (Sascha)
Submitted by bfranklin@dct.com
- Merged in PHP 3.0 version of str_replace (Sascha)
- Added DBA module (Sascha)
- Added session id detection within REQUEST_URI (Sascha)
- Merged in HP-UX/ANSI compatibility switch from PHP 3.0 (Sascha)
- Fixed rpath handling for utilitites built during Apache build (Sascha)
- Added missing E_ error level constants (Zeev, Zend library)
- Fixed a bug in sending multiple HTTP Cookies under Apache (Zeev)
- Fixed implicit connect on the MySQL, mSQL, PostgreSQL and Sybase
modules (Zeev)
- Gave PHP 4.0's SNMP extension all the functionality of PHP 3.0.12 (SteveL)
July 19 1999, Version 4.0 Beta 1
- First public beta of PHP 4.0
+102
View File
@@ -0,0 +1,102 @@
This is the first file you should be reading after you get your CVS account.
We'll assume you're basically familiar with CVS, but feel free to post
your questions on the mailing list.
PHP is developed through the efforts of a large number of people.
Collaboration is a Good Thing(tm), and CVS lets us do this. Thus, following
some basic rules with regards to CVS usage will:
a. Make everybody happier, especially those responsible for maintaining
the CVS itself.
b. Keep the changes consistently well documented and easily trackable.
c. Prevent some of those 'Oops' moments.
d. Increase the general level of good will on planet Earth.
Having said that, here are the organizational rules:
1. Respect other people working on the project.
2. Discuss any significant changes on the list before committing.
3. Look at MAINTANERS file to see who is the primary maintainer of
the code you want to contribute to.
4. If you "strongly disagree" about something another person did, don't
start fighting publicly - take it up in private email.
5. If you don't know how to do something, ask first!
6. Test your changes before committing them. We mean it. Really.
The next few rules are more of a technical nature.
1. DO NOT TOUCH ChangeLog! It is automagically updated from the commit
messages every day. Woe be to those who attempt to mess with it.
2. All news updates intended for public viewing, such as new features,
bug fixes, improvements, etc., should go into the NEWS file. Also see
the note below about automatically updating NEWS in your commit message.
3. Do not commit multiple file and dump all messages in one commit. If you
modified several unrelated files, commit each group separately and
provide a nice commit message for each one. See example below.
4. Do write your commit message in such a way that it makes sense even
without the corresponding diff. One should be able to look at it, and
immediately know what was modified. Definitely include the function name
in the message as shown below.
5. In your commit messages, keep each line shorter than 80 characters. And
try to align your lines vertically, if they wrap. It looks bad otherwise.
6. If you modified a function that is callable from PHP, prepend PHP to
the function name as shown below.
The format of the commit messages is pretty simple.
If a line begins with #, it is taken to be a comment and will not appear
in the ChangeLog. If the line begins with @, it will be redirected to the
NEWS file. Everything else goes into the ChangeLog.
It is important to note that if your comment or news logline spans multiple
lines, you have to put # or @ at the beginning of _every_ such line.
Example. Say you modified two files, datetime.c and string.c. In datetime.c
you added a new format option for date() function, and in string.c you fixed
a memory leak in php_trim(). Don't commit both of these at once. Commit them
separately and try to make sure your commit messages look something like the
following.
For datetime.c:
(PHP date) Added new 'K' format modifier for printing out number of
days until New Year's Eve.
@- Added new 'K' format modifier that will output the number of days
@ until New Year's Eve. (Bob)
For string.c:
(php_trim) Fixed a memory leak resulting from improper use of zval_dtor().
# Man, that thing was leaking all over the place!
@- Memory leak in trim() function has finally been fixed. (Bob)
The lines above marked with @ will go into NEWS file automagically, and the
# lines will be omitted from the ChangeLog. Alternatively, you might want
to modify NEWS file directly and not use the @ lines.
If you don't see your messages in ChangeLog and NEWS right away, don't worry!
These files are updated once a day, so your stuff will not show up until
somewhat later. Don't go adding stuff to NEWS by hand if you already put @
lines in the commit message.
You can use LXR (http://lxr.php.net/) and Bonsai (http://bonsai.php.net/)
to look at PHP CVS repository in various ways.
To receive daily updates to ChangeLog and NEWS, send an empty message to
php-cvs-daily-subscribe@lists.php.net.
Happy hacking,
PHP Team
+7
View File
@@ -0,0 +1,7 @@
Things to do or at least think about doing in the future. Name in
parenthesis means that person has taken on this project.
ext/standard
------------
* strpad() (Andrei)
* advanced sort (Andrei)
-8
View File
@@ -35,12 +35,6 @@ March 1 1999, Version 3.0.7
variables.
- Clean up apxs build
- Add INSTALL.REDHAT file to walk RedHat users through the install
- Added optional second argument to mysql_fetch_array(); MYSQL_ASSOC will
cause the resulting array to contain the associative indices only,
MYSQL_NUM will cause the array to contain the numeric indices only (like
mysql_fetch_row()) and MYSQL_BOTH would cause them both to be defined
(default).
- Backport the Zend debugging memory manager into the PHP 3.0.x tree.
- Add function_exists() function.
- Add another version of WDDX module
(we need to pick a single implementation here)
@@ -76,8 +70,6 @@ March 1 1999, Version 3.0.7
- Fix bug in pdf_close() function
- Add WDDX support (see http://www.wddx.org for more info)
- Add similar_text() function
- Constructors of parent classes weren't accessible to derived classes (as
of 3.0.6). Fixed.
- Introduce simple regex compilation cache
+4
View File
@@ -0,0 +1,4 @@
## process this file with automake to produce Makefile.am
AUTOMAKE_OPTIONS=foreign
noinst_LTLIBRARIES=libtsrm.la
libtsrm_la_SOURCES = TSRM.c
+434
View File
@@ -0,0 +1,434 @@
/*
+----------------------------------------------------------------------+
| Thread Safe Resource Manager |
+----------------------------------------------------------------------+
| Copyright (c) 1998, 1999 Zeev Suraski |
+----------------------------------------------------------------------+
| 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> |
+----------------------------------------------------------------------+
*/
#include "TSRM.h"
#include <stdio.h>
#include <stdlib.h>
#if HAVE_STDARG_H
#include <stdarg.h>
#endif
typedef struct _tsrm_tls_entry tsrm_tls_entry;
struct _tsrm_tls_entry {
void **storage;
int count;
THREAD_T thread_id;
tsrm_tls_entry *next;
};
typedef struct {
size_t size;
void (*ctor)(void *resource);
void (*dtor)(void *resource);
} tsrm_resource_type;
/* The memory manager table */
static tsrm_tls_entry **tsrm_tls_table;
static int tsrm_tls_table_size;
static ts_rsrc_id id_count;
/* The resource sizes table */
static tsrm_resource_type *resource_types_table;
static int resource_types_table_size;
static MUTEX_T tsmm_mutex; /* thread-safe memory manager mutex */
/* New thread handlers */
static void (*tsrm_new_thread_begin_handler)();
static void (*tsrm_new_thread_end_handler)();
/* Debug support */
static int tsrm_debug(const char *format, ...);
static int tsrm_debug_status;
/* Startup TSRM (call once for the entire process) */
TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_status)
{
tsrm_tls_table_size = expected_threads;
tsrm_tls_table = (tsrm_tls_entry **) calloc(tsrm_tls_table_size, sizeof(tsrm_tls_entry *));
if (!tsrm_tls_table) {
return 0;
}
id_count=0;
resource_types_table_size = expected_resources;
resource_types_table = (tsrm_resource_type *) calloc(resource_types_table_size, sizeof(tsrm_resource_type));
if (!resource_types_table) {
free(tsrm_tls_table);
return 0;
}
tsmm_mutex = tsrm_mutex_alloc();
tsrm_new_thread_begin_handler = tsrm_new_thread_end_handler = NULL;
tsrm_debug_status = debug_status;
tsrm_debug("Started up TSRM, %d expected threads, %d expected resources\n", expected_threads, expected_resources);
return 1;
}
/* Shutdown TSRM (call once for the entire process) */
TSRM_API void tsrm_shutdown()
{
int i;
if (tsrm_tls_table) {
for (i=0; i<tsrm_tls_table_size; i++) {
tsrm_tls_entry *p = tsrm_tls_table[i], *next_p;
while (p) {
int j;
next_p = p->next;
for (j=0; j<id_count; j++) {
free(p->storage[j]);
}
free(p->storage);
free(p);
p = next_p;
}
}
free(tsrm_tls_table);
}
if (resource_types_table) {
free(resource_types_table);
}
tsrm_mutex_free(tsmm_mutex);
tsrm_debug("Shutdown TSRM\n");
}
/* allocates a new thread-safe-resource id */
TSRM_API ts_rsrc_id ts_allocate_id(size_t size, void (*ctor)(void *resource), void (*dtor)(void *resource))
{
ts_rsrc_id new_id;
int i;
tsrm_debug("Obtaining a new resource id, %d bytes\n", size);
tsrm_mutex_lock(tsmm_mutex);
/* obtain a resource id */
new_id = id_count++;
tsrm_debug("Obtained resource id %d\n", new_id);
/* store the new resource type in the resource sizes table */
if (resource_types_table_size < id_count) {
resource_types_table = (tsrm_resource_type *) realloc(resource_types_table, sizeof(tsrm_resource_type)*id_count);
if (!resource_types_table) {
return -1;
}
resource_types_table_size = id_count;
}
resource_types_table[new_id].size = size;
resource_types_table[new_id].ctor = ctor;
resource_types_table[new_id].dtor = dtor;
/* enlarge the arrays for the already active threads */
for (i=0; i<tsrm_tls_table_size; i++) {
tsrm_tls_entry *p = tsrm_tls_table[i];
while (p) {
if (p->count < id_count) {
int j;
p->storage = (void *) realloc(p->storage, sizeof(void *)*id_count);
for (j=p->count; j<id_count; j++) {
p->storage[j] = (void *) malloc(resource_types_table[j].size);
if (resource_types_table[j].ctor) {
resource_types_table[j].ctor(p->storage[j]);
}
}
p->count = id_count;
}
p = p->next;
}
}
tsrm_mutex_unlock(tsmm_mutex);
tsrm_debug("Successfully allocated new resource id %d\n", new_id);
return new_id;
}
static void allocate_new_resource(tsrm_tls_entry **thread_resources_ptr, THREAD_T thread_id)
{
int i;
(*thread_resources_ptr) = (tsrm_tls_entry *) malloc(sizeof(tsrm_tls_entry));
(*thread_resources_ptr)->storage = (void **) malloc(sizeof(void *)*id_count);
(*thread_resources_ptr)->count = id_count;
(*thread_resources_ptr)->thread_id = thread_id;
(*thread_resources_ptr)->next = NULL;
tsrm_mutex_unlock(tsmm_mutex);
if (tsrm_new_thread_begin_handler) {
tsrm_new_thread_begin_handler(thread_id);
}
for (i=0; i<id_count; i++) {
(*thread_resources_ptr)->storage[i] = (void *) malloc(resource_types_table[i].size);
if (resource_types_table[i].ctor) {
resource_types_table[i].ctor((*thread_resources_ptr)->storage[i]);
}
}
if (tsrm_new_thread_end_handler) {
tsrm_new_thread_end_handler(thread_id);
}
}
/* fetches the requested resource for the current thread */
void *ts_resource(ts_rsrc_id id)
{
THREAD_T thread_id = tsrm_thread_id();
int hash_value;
tsrm_tls_entry *thread_resources;
void *resource;
tsrm_debug("Fetching resource id %d for thread %ld\n", id, (long) thread_id);
tsrm_mutex_lock(tsmm_mutex);
hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
thread_resources = tsrm_tls_table[hash_value];
if (!thread_resources) {
allocate_new_resource(&tsrm_tls_table[hash_value], thread_id);
return ts_resource(id);
/* thread_resources = tsrm_tls_table[hash_value]; */
} else {
do {
if (thread_resources->thread_id == thread_id) {
break;
}
if (thread_resources->next) {
thread_resources = thread_resources->next;
} else {
allocate_new_resource(&thread_resources->next, thread_id);
return ts_resource(id);
/*
* thread_resources = thread_resources->next;
* break;
*/
}
} while (thread_resources);
}
resource = thread_resources->storage[id];
tsrm_mutex_unlock(tsmm_mutex);
tsrm_debug("Successfully fetched resource id %d for thread id %ld - %x\n", id, (long) thread_id, (long) resource);
return resource;
}
/* frees all resources allocated for the current thread */
void ts_free_thread()
{
THREAD_T thread_id = tsrm_thread_id();
int hash_value;
tsrm_tls_entry *thread_resources;
tsrm_tls_entry *last=NULL;
tsrm_mutex_lock(tsmm_mutex);
hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
thread_resources = tsrm_tls_table[hash_value];
while (thread_resources) {
if (thread_resources->thread_id == thread_id) {
int i;
for (i=0; i<thread_resources->count; i++) {
if (resource_types_table[i].dtor) {
resource_types_table[i].dtor(thread_resources->storage[i]);
}
free(thread_resources->storage[i]);
}
free(thread_resources->storage);
if (last) {
last->next = thread_resources->next;
} else {
tsrm_tls_table[hash_value]=NULL;
}
free(thread_resources);
break;
}
if (thread_resources->next) {
last = thread_resources;
}
thread_resources = thread_resources->next;
}
tsrm_mutex_unlock(tsmm_mutex);
}
/* deallocates all occurrences of a given id */
void ts_free_id(ts_rsrc_id id)
{
}
/*
* Utility Functions
*/
/* Obtain the current thread id */
TSRM_API THREAD_T tsrm_thread_id(void)
{
#ifdef WIN32
return GetCurrentThreadId();
#elif defined(PTHREADS)
return pthread_self();
#elif defined(NSAPI)
return systhread_current();
#elif defined(PI3WEB)
return PIThread_getCurrent();
#endif
}
/* Allocate a mutex */
TSRM_API MUTEX_T tsrm_mutex_alloc( void )
{
MUTEX_T mutexp;
#ifdef WIN32
mutexp = CreateMutex(NULL,FALSE,NULL);
#elif defined(PTHREADS)
mutexp = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
pthread_mutex_init(mutexp,NULL);
#elif defined(NSAPI)
mutexp = crit_init();
#elif defined(PI3WEB)
mutexp = PIPlatform_allocLocalMutex();
#endif
#ifdef THR_DEBUG
printf("Mutex created thread: %d\n",mythreadid());
#endif
return( mutexp );
}
/* Free a mutex */
TSRM_API void tsrm_mutex_free( MUTEX_T mutexp )
{
if (mutexp) {
#ifdef WIN32
CloseHandle(mutexp);
#elif defined(PTHREADS)
free(mutexp);
#elif defined(NSAPI)
crit_terminate(mutexp);
#elif defined(PI3WEB)
PISync_delete(mutexp)
#endif
}
#ifdef THR_DEBUG
printf("Mutex freed thread: %d\n",mythreadid());
#endif
}
/* Lock a mutex */
TSRM_API int tsrm_mutex_lock( MUTEX_T mutexp )
{
#if 0
tsrm_debug("Mutex locked thread: %ld\n",tsrm_thread_id());
#endif
#ifdef WIN32
return WaitForSingleObject(mutexp,1000);
#elif defined(PTHREADS)
return pthread_mutex_lock(mutexp);
#elif defined(NSAPI)
return crit_enter(mutexp);
#elif defined(PI3WEB)
return PISync_lock(mutexp);
#endif
}
/* Unlock a mutex */
TSRM_API int tsrm_mutex_unlock( MUTEX_T mutexp )
{
#if 0
tsrm_debug("Mutex unlocked thread: %ld\n",tsrm_thread_id());
#endif
#ifdef WIN32
return ReleaseMutex(mutexp);
#elif defined(PTHREADS)
return pthread_mutex_unlock(mutexp);
#elif defined(NSAPI)
return crit_exit(mutexp);
#elif defined(PI3WEB)
return PISync_unlock(mutexp);
#endif
}
TSRM_API void *tsrm_set_new_thread_begin_handler(void (*new_thread_begin_handler)(THREAD_T thread_id))
{
void *retval = (void *) tsrm_new_thread_begin_handler;
tsrm_new_thread_begin_handler = new_thread_begin_handler;
return retval;
}
TSRM_API void *tsrm_set_new_thread_end_handler(void (*new_thread_end_handler)(THREAD_T thread_id))
{
void *retval = (void *) tsrm_new_thread_end_handler;
tsrm_new_thread_end_handler = new_thread_end_handler;
return retval;
}
/*
* Debug support
*/
static int tsrm_debug(const char *format, ...)
{
if (tsrm_debug_status) {
va_list args;
int size;
va_start(args, format);
size = vprintf(format, args);
va_end(args);
return size;
} else {
return 0;
}
}
void tsrm_debug_set(int status)
{
tsrm_debug_status = status;
}
+100
View File
@@ -0,0 +1,100 @@
# Microsoft Developer Studio Project File - Name="TSRM" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=TSRM - Win32 Debug_TS
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "TSRM.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "TSRM.mak" CFG="TSRM - Win32 Debug_TS"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "TSRM - Win32 Debug_TS" (based on "Win32 (x86) Static Library")
!MESSAGE "TSRM - Win32 Release_TS" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "TSRM - Win32 Debug_TS"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "TSRM___Win32_Debug_TS"
# PROP BASE Intermediate_Dir "TSRM___Win32_Debug_TS"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug_TS"
# PROP Intermediate_Dir "Debug_TS"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "C:\Projects\TSRM" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_DEBUG" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD BASE RSC /l 0x40d /d "_DEBUG"
# ADD RSC /l 0x40d /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TS"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "TSRM___Win32_Release_TS"
# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TS"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release_TS"
# PROP Intermediate_Dir "Release_TS"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "TSRM_EXPORTS" /YX /FD /c
# ADD BASE RSC /l 0x40d /d "NDEBUG"
# ADD RSC /l 0x40d /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ENDIF
# Begin Target
# Name "TSRM - Win32 Debug_TS"
# Name "TSRM - Win32 Release_TS"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\TSRM.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\TSRM.h
# End Source File
# End Group
# End Target
# End Project
+104
View File
@@ -0,0 +1,104 @@
/*
+----------------------------------------------------------------------+
| Thread Safe Resource Manager |
+----------------------------------------------------------------------+
| Copyright (c) 1998, 1999 Zeev Suraski |
+----------------------------------------------------------------------+
| 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> |
+----------------------------------------------------------------------+
*/
#ifndef _TSRM_H
#define _TSRM_H
#ifdef HAVE_CONFIG_H
# undef PACKAGE
# undef VERSION
# include "tsrm_config.h"
# undef PACKAGE
# undef VERSION
#endif
#if WIN32||WINNT
# include <windows.h>
#elif defined(PTHREADS)
# include <pthread.h>
#endif
typedef int ts_rsrc_id;
#if WIN32||WINNT
# ifdef TSRM_EXPORTS
# define TSRM_API __declspec(dllexport)
# else
# define TSRM_API __declspec(dllimport)
# endif
#else
# define TSRM_API
#endif
/* Define THREAD_T and MUTEX_T */
#if defined(WIN32)
# define THREAD_T DWORD
# define MUTEX_T void *
#elif defined(PTHREADS)
# define THREAD_T pthread_t
# define MUTEX_T pthread_mutex_t *
#elif defined(NSAPI)
# define THREAD_T SYS_THREAD
# define MUTEX_T CRITICAL
#elif defined(PI3WEB)
# define THREAD_T PIThread *
# define MUTEX_T PISync *
#endif
typedef void (*ts_allocate_ctor)(void *);
#define THREAD_HASH_OF(thr,ts) (unsigned long)thr%(unsigned long)ts
#ifdef __cplusplus
extern "C" {
#endif
/* startup/shutdown */
TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_status);
TSRM_API void tsrm_shutdown();
/* allocates a new thread-safe-resource id */
TSRM_API ts_rsrc_id ts_allocate_id(size_t size, ts_allocate_ctor ctor, void (*dtor)(void *resource));
/* fetches the requested resource for the current thread */
TSRM_API void *ts_resource(ts_rsrc_id id);
/* frees all resources allocated for the current thread */
TSRM_API void ts_free_thread();
/* deallocates all occurrences of a given id */
TSRM_API void ts_free_id(ts_rsrc_id id);
/* Debug support */
TSRM_API void tsrm_debug_set(int status);
/* utility functions */
TSRM_API THREAD_T tsrm_thread_id(void);
TSRM_API MUTEX_T tsrm_mutex_alloc(void);
TSRM_API void tsrm_mutex_free(MUTEX_T mutexp);
TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp);
TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp);
TSRM_API void *tsrm_set_new_thread_begin_handler(void (*new_thread_begin_handler)(THREAD_T thread_id));
TSRM_API void *tsrm_set_new_thread_end_handler(void (*new_thread_end_handler)(THREAD_T thread_id));
#ifdef __cplusplus
}
#endif
#endif /* _TSRM_H */
+1
View File
@@ -0,0 +1 @@
#undef PTHREADS
+5
View File
@@ -0,0 +1,5 @@
AC_DEFUN(AM_SET_LIBTOOL_VARIABLE,[
LIBTOOL='$(SHELL) $(top_builddir)/libtool $1'
])
+43
View File
@@ -0,0 +1,43 @@
# Makefile to generate build tools
#
# Standard usage:
# make -f build.mk
#
# Written by Sascha Schumann
#
# $Id$
LT_TARGETS = ltmain.sh ltconfig
config_h_in = tsrm_config.h.in
makefile_am_files = Makefile.am
makefile_in_files = $(makefile_am_files:.am=.in)
makefile_files = $(makefile_am_files:e.am=e)
targets = $(makefile_in_files) $(LT_TARGETS) configure $(config_h_in)
all: $(targets)
clean:
rm -f $(targets)
$(LT_TARGETS):
rm -f $(LT_TARGETS)
libtoolize --automake $(AMFLAGS) -f
$(makefile_in_files): $(makefile_am_files)
automake -a -i $(AMFLAGS) $(makefile_files)
aclocal.m4: configure.in acinclude.m4
aclocal
$(config_h_in): configure.in acconfig.h
# explicitly remove target since autoheader does not seem to work
# correctly otherwise (timestamps are not updated)
@rm -f $@
autoheader
configure: aclocal.m4 configure.in
autoconf
Executable
+33
View File
@@ -0,0 +1,33 @@
#!/bin/sh
case "$1" in
--copy)
automake_flags=--copy
shift
;;
esac
libtoolize --force --automake $automake_flags
mv aclocal.m4 aclocal.m4.old 2>/dev/null
aclocal
if cmp aclocal.m4.old aclocal.m4 > /dev/null 2>&1; then
echo "buildconf: keeping ${1}aclocal.m4"
mv aclocal.m4.old aclocal.m4
else
echo "buildconf: created or modified ${1}aclocal.m4"
fi
autoheader
automake --add-missing --include-deps $automake_flags
mv configure configure.old 2>/dev/null
autoconf
if cmp configure.old configure > /dev/null 2>&1; then
echo "buildconf: keeping ${1}configure"
mv configure.old configure
else
echo "buildconf: created or modified ${1}configure"
fi
+33
View File
@@ -0,0 +1,33 @@
dnl $Id$
dnl
dnl Minimalistic configure.in for TSRM.
dnl
AC_INIT(TSRM.c)
AM_INIT_AUTOMAKE(TSRM, 1.0)
AM_CONFIG_HEADER(tsrm_config.h)
AC_PROG_CC
AM_PROG_CC_STDC
AC_PROG_CC_C_O
AC_PROG_RANLIB
AM_PROG_LIBTOOL
if test "$enable_debug" != "yes"; then
AM_SET_LIBTOOL_VARIABLE([--silent])
fi
AC_CHECK_LIB(c_r, pthread_kill)
AC_CHECK_LIB(pthread, pthread_kill)
AC_CHECK_FUNCS(pthread_kill)
if test "$ac_cv_func_pthread_kill" != "yes"; then
AC_MSG_ERROR(You need pthreads to build TSRM.)
fi
AC_DEFINE(PTHREADS)
AC_CHECK_HEADERS(stdarg.h)
AC_OUTPUT(Makefile)
+20 -8
View File
@@ -2,23 +2,35 @@
#CLEANFILES = zend-parser.c zend-parser.h zend-scanner.c zend-parser.output
ZEND_SCANNER = @ZEND_SCANNER@
AUTOMAKE_OPTIONS=foreign
noinst_LIBRARIES=libzend.a
libzend_a_SOURCES=\
zend-parser.y zend-scanner.l \
EXTRA_LTLIBRARIES=libzend_cc.la libzend_c.la
noinst_LTLIBRARIES=$(ZEND_SCANNER) libzend.la
libzend_cc_la_SOURCES=zend-scanner-cc.cc
libzend_c_la_SOURCES=zend-scanner.c
libzend_la_SOURCES=\
zend-parser.y \
zend_alloc.c zend_compile.c zend_constants.c \
zend_execute.c zend_execute_API.c zend_highlight.c zend_llist.c \
zend_opcode.c zend_operators.c zend_ptr_stack.c zend_stack.c \
zend_variables.c zend.c zend_API.c zend_extensions.c zend_hash.c \
zend_list.c zend_indent.c
zend_list.c zend_indent.c zend_builtin_functions.c
libzend_la_LIBADD = $(ZEND_SCANNER)
libzend_la_LDFLAGS = @EXTRA_LIBS@
# automake isn't too clever about "non-standard" use of lex and yacc
zend-scanner.c: zend-scanner.l
$(LEX) -Pzend -ozend-scanner.c -i $(srcdir)/zend-scanner.l
zend-scanner.l: zend-parser.h
zend-scanner.cc: zend-scanner.l
$(LEX) -+ -S$(srcdir)/flex.skl -Pzend -ozend-scanner.cc -i $(srcdir)/zend-scanner.l
zend-scanner.c: zend-scanner.l
$(LEX) -Pzend -o$@ -i $(srcdir)/zend-scanner.l
zend-scanner-cc.cc: zend-scanner.l
$(LEX) -+ -B -i -S$(srcdir)/flex.skl -Pzend -o$@ $(srcdir)/zend-scanner.l
zend-parser.h: zend-parser.c
zend-parser.c: zend-parser.y
+16 -16
View File
@@ -4,7 +4,7 @@
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend_execute.h"\
".\zend_llist.h"\
".\zend_ptr_stack.h"\
@@ -17,7 +17,7 @@
.\alloca.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_hash.h"\
@@ -27,7 +27,7 @@
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend_execute.h"\
".\zend_llist.h"\
".\modules.h"\
@@ -46,7 +46,7 @@
.\zend_constants.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend_constants.h"\
".\zend_operators.h"\
".\zend_variables.h"\
@@ -59,7 +59,7 @@
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend_constants.h"\
".\zend_execute.h"\
".\zend_llist.h"\
@@ -80,7 +80,7 @@
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend_execute.h"\
".\zend_highlight.h"\
".\zend_llist.h"\
@@ -96,7 +96,7 @@
.\zend_llist.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend_llist.h"\
".\zend.h"\
".\zend_errors.h"\
@@ -107,7 +107,7 @@
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend_execute.h"\
".\zend_llist.h"\
".\modules.h"\
@@ -127,7 +127,7 @@
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend_execute.h"\
".\zend_llist.h"\
".\zend_operators.h"\
@@ -143,7 +143,7 @@
.\zend_ptr_stack.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend_ptr_stack.h"\
".\zend.h"\
".\zend_errors.h"\
@@ -153,7 +153,7 @@
.\zend_stack.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend_stack.h"\
".\zend.h"\
".\zend_errors.h"\
@@ -164,7 +164,7 @@
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend_constants.h"\
".\zend_execute.h"\
".\zend_llist.h"\
@@ -184,7 +184,7 @@
.\zend.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend_operators.h"\
".\zend_variables.h"\
".\zend.h"\
@@ -196,7 +196,7 @@
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\zend_compile.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend_constants.h"\
".\zend_execute.h"\
".\zend_llist.h"\
@@ -216,7 +216,7 @@
.\zend_hash.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_hash.h"\
@@ -225,7 +225,7 @@
.\zend_ini.c : \
"..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\
".\zend_alloc.h"\
".\config.w32.h"\
".\zend_config.w32.h"\
".\zend.h"\
".\zend_errors.h"\
".\zend_hash.h"\
+55 -16
View File
@@ -1,3 +1,9 @@
#undef HAVE_CLASS_ISTDIOSTREAM
#define ZEND_API
@TOP@
/* This is the default configuration file to read */
#define USE_CONFIG_FILE 1
@@ -11,19 +17,6 @@
/* 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 */
#define HAVE_DIRENT_H 0
/* Define if you have struct flock */
#define HAVE_STRUCT_FLOCK 0
/* Define if you have the resolv library (-lresolv). */
#define HAVE_LIBRESOLV 0
/* Undefine if you want stricter XML/SGML compliance by default */
/* (this disables "<?expression?>" by default) */
#define T_DEFAULT_SHORT_OPEN_TAG 1
@@ -32,9 +25,6 @@
#define REGEX 0
#define HSREGEX 0
/* Define if you have libdl (used for dynamic linking) */
#define HAVE_LIBDL 0
#undef ZEND_DEBUG
/* Define if you want to enable bc style precision math support */
@@ -48,3 +38,52 @@
/* Define to compile Zend thread safe */
#undef ZTS
#undef HAVE_LIBDL
@BOTTOM@
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_STRING_H
# include <string.h>
#else
# include <strings.h>
#endif
/* Define if you have stdiostream.h */
#undef HAVE_STDIOSTREAM_H
#ifdef HAVE_DLFCN_H
# include <dlfcn.h>
#endif
#if defined(HAVE_LIBDL) && defined(RTLD_NOW)
# define DL_LOAD(libname) dlopen(libname, RTLD_NOW)
# define DL_UNLOAD dlclose
# define DL_FETCH_SYMBOL dlsym
# define DL_HANDLE void *
# define ZEND_EXTENSIONS_SUPPORT 1
#else
# define DL_HANDLE void *
# define ZEND_EXTENSIONS_SUPPORT 0
#endif
#if ZEND_BROKEN_SPRINTF
int zend_sprintf(char *buffer, const char *format, ...);
#else
# define zend_sprintf sprintf
#endif
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
+9 -4
View File
@@ -5,16 +5,21 @@ dnl This file contains local autoconf functions.
dnl
dnl Check for broken sprintf()
dnl
AC_DEFUN(AC_BROKEN_SPRINTF,[
AC_DEFUN(AC_ZEND_BROKEN_SPRINTF,[
AC_MSG_CHECKING([for broken sprintf])
AC_TRY_RUN([main() { char buf[20]; exit (sprintf(buf,"testing 123")!=11); }],[
AC_DEFINE(BROKEN_SPRINTF,0)
AC_DEFINE(ZEND_BROKEN_SPRINTF,0)
AC_MSG_RESULT(ok)
],[
AC_DEFINE(BROKEN_SPRINTF,1)
AC_DEFINE(ZEND_BROKEN_SPRINTF,1)
AC_MSG_RESULT(broken)
],[
AC_DEFINE(BROKEN_SPRINTF,0)
AC_DEFINE(ZEND_BROKEN_SPRINTF,0)
AC_MSG_RESULT(cannot check, guessing ok)
])
])
AC_DEFUN(AM_SET_LIBTOOL_VARIABLE,[
LIBTOOL='$(SHELL) $(top_builddir)/libtool $1'
])
+43
View File
@@ -0,0 +1,43 @@
# Makefile to generate build tools
#
# Standard usage:
# make -f build.mk
#
# Written by Sascha Schumann
#
# $Id$
LT_TARGETS = ltmain.sh ltconfig
config_h_in = zend_config.h.in
makefile_am_files = Makefile.am
makefile_in_files = $(makefile_am_files:.am=.in)
makefile_files = $(makefile_am_files:e.am=e)
targets = $(makefile_in_files) $(LT_TARGETS) configure $(config_h_in)
all: $(targets)
clean:
rm -f $(targets)
$(LT_TARGETS):
rm -f $(LT_TARGETS)
libtoolize --automake $(AMFLAGS) -f
$(makefile_in_files): $(makefile_am_files)
automake -a -i $(AMFLAGS) $(makefile_files)
aclocal.m4: configure.in acinclude.m4
aclocal
$(config_h_in): configure.in acconfig.h
# explicitly remove target since autoheader does not seem to work
# correctly otherwise (timestamps are not updated)
@rm -f $@
autoheader
configure: aclocal.m4 configure.in
autoconf
+10 -1
View File
@@ -1,5 +1,14 @@
#!/bin/sh
case "$1" in
--copy)
automake_flags=--copy
shift
;;
esac
libtoolize --force --automake $automake_flags
mv aclocal.m4 aclocal.m4.old 2>/dev/null
aclocal
if cmp aclocal.m4.old aclocal.m4 > /dev/null 2>&1; then
@@ -11,7 +20,7 @@ fi
autoheader
automake --add-missing --include-deps
automake --add-missing --include-deps $automake_flags
mv configure configure.old 2>/dev/null
autoconf
+81 -25
View File
@@ -24,10 +24,19 @@ else
AC_MSG_RESULT($1.$2 (ok))
fi
AC_PROG_CC
AC_PROG_RANLIB
if test "$enable_thread_safety" = "yes" ; then
AC_PROG_CXX
fi
AC_PROG_CC_C_O
AM_PROG_LEX
AM_PROG_LIBTOOL
if test "$enable_debug" != "yes"; then
AM_SET_LIBTOOL_VARIABLE([--silent])
fi
AM_PROG_CC_STDC
AC_C_INLINE
dnl Hack to work around a Mac OS X cpp problem
dnl Known versions needing this workaround are 5.3 and 5.4
if test "$ac_cv_prog_gcc" = "yes" -a "`uname -s`" = "Rhapsody"; then
@@ -56,39 +65,33 @@ AC_CHECK_LIB(c, dlopen, [
LIBS="-ldl $LIBS"
AC_DEFINE(HAVE_LIBDL) ], []) ])
dnl The sin may be in a library which need not be specifed
dnl as well as res_search resides in libsocket
AC_CHECK_LIB(c, sin, [:], [
AC_CHECK_LIB(m, sin) ])
dnl Checks for header files.
AC_HEADER_STDC
dnl In QNX opendir resides in libc but dirent.h is still required
if test "`uname -s 2>/dev/null`" != "QNX"; then
AC_HEADER_DIRENT
else
AC_CHECK_HEADERS(dirent.h)
fi
dnl QNX requires unix.h to allow functions in libunix to work properly
AC_CHECK_HEADERS(fcntl.h unistd.h crypt.h sys/file.h memory.h pwd.h grp.h sys/socket.h sys/wait.h syslog.h string.h sys/varargs.h stdarg.h sys/resource.h sys/time.h signal.h netinet/in.h dlfcn.h limits.h sys/types.h sys/statvfs.h sys/statfs.h unix.h db.h ndbm.h)
AC_CHECK_HEADERS(limits.h malloc.h string.h unistd.h stdarg.h sys/types.h signal.h unix.h dlfcn.h)
if test "$enable_thread_safety" = "yes" ; then
dnl C++ specific header files
AC_LANG_CPLUSPLUS
AC_CHECK_HEADER(stdiostream.h, [ AC_DEFINE(HAVE_STDIOSTREAM_H) ])
AC_LANG_C
fi
dnl Checks for types
AC_TYPE_SIZE_T
AC_TYPE_SIGNAL
dnl This is required for QNX and may be some BSD derived systems
AC_CHECK_TYPE( uint, unsigned int )
AC_CHECK_TYPE( ulong, unsigned long )
AC_CHECK_SIZEOF(void *, 4)
dnl Checks for library functions.
AC_FUNC_VPRINTF
AC_CHECK_FUNCS(memcpy memmove strdup strerror strcasecmp strstr flock lockf putenv tempnam usleep setlocale gettimeofday setvbuf srand48 lrand48 srandom random link symlink regcomp getlogin cuserid vsnprintf snprintf gcvt utime crypt setitimer rint unsetenv strftime setsockopt tzset statvfs statfs inet_aton getpid kill)
AC_FUNC_UTIME_NULL
AC_FUNC_MEMCMP
AC_FUNC_ALLOCA
AC_BROKEN_SPRINTF
AC_REPLACE_FUNCS(getopt)
AC_CHECK_FUNCS(memcpy strdup getpid kill strtod strtol)
AC_ZEND_BROKEN_SPRINTF
AC_MSG_CHECKING(whether to include debugging symbols)
AC_ARG_ENABLE(debug,
@@ -114,6 +117,23 @@ AC_ARG_ENABLE(debug,
AC_SUBST(DEBUG_CFLAGS)
CFLAGS="$CFLAGS $DEBUG_CFLAGS"
RESULT=yes
AC_MSG_CHECKING(whether to enable inline)
AC_ARG_ENABLE(inline,
[ --disable-inline Disable the inline specifier],
[
if test "$enableval" = "no"; then
RESULT=no
fi
])
AC_MSG_RESULT($RESULT)
if test "$RESULT" = "yes"; then
AC_C_INLINE
else
AC_DEFINE(inline, [])
fi
AC_MSG_CHECKING(whether to enable a memory limit)
AC_ARG_ENABLE(memory-limit,
[ --enable-memory-limit Compile with memory limit support. ],
@@ -131,23 +151,59 @@ AC_ARG_ENABLE(memory-limit,
])
ZEND_SCANNER_TYPE=c
dnl Sigh. This will probably break automake's automatic dependencies..
AC_MSG_CHECKING(whether to build Zend thread-safe)
AC_ARG_ENABLE(thread-safety,
[ --enable-thread-safety Whether to build Zend thread-safe.],[
AC_DEFINE(ZTS)
AC_MSG_RESULT(yes)
if test "$enableval" = "yes"; then
AC_DEFINE(ZTS)
ZEND_SCANNER_TYPE=cc
CPPFLAGS="$CPPFLAGS -I../TSRM"
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
],[
AC_MSG_RESULT(no)
])
AC_SUBST(TSRM_DIR)
AC_SUBST(TSRM_LIB)
ZEND_SCANNER="libzend_${ZEND_SCANNER_TYPE}.la"
AC_SUBST(ZEND_SCANNER)
AC_SUBST(CFLAGS_SHLIB)
AC_SUBST(LDFLAGS_SHLIB)
AC_SUBST(LDFLAGS_SHLIB_EXPORT)
if test "$enable_thread_safety" = "yes" ; then
AC_CHECK_LIB(C, cin)
AC_CHECK_LIB(g++, cin)
AC_CHECK_LIB(stdc++, cin)
dnl Digital Unix 4.0
AC_CHECK_LIB(cxx, cin)
AC_CHECK_LIB(cxxstd, __array_delete)
AC_OUTPUT(Makefile, [], [])
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
AC_MSG_CHECKING(for class istdiostream)
AC_TRY_COMPILE([
#include <sys/types.h>
#include <unistd.h>
#include <fstream.h>
#include <stdiostream.h>
],[
istdiostream *foo = new istdiostream((FILE *) 0);
],[
AC_DEFINE(HAVE_CLASS_ISTDIOSTREAM, 1)
AC_MSG_RESULT(yes)
],[
AC_MSG_RESULT(no)
])
AC_LANG_RESTORE
fi
EXTRA_LIBS="$LIBS"
LIBS=""
AC_SUBST(EXTRA_LIBS)
AC_OUTPUT(Makefile)
# Local Variables:
# tab-width: 4
+16 -6
View File
@@ -102,6 +102,10 @@ SOURCE=.\zend_API.c
# End Source File
# Begin Source File
SOURCE=.\zend_builtin_functions.c
# End Source File
# Begin Source File
SOURCE=.\zend_compile.c
# End Source File
# Begin Source File
@@ -170,10 +174,6 @@ SOURCE=.\zend_variables.c
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\config.w32.h
# End Source File
# Begin Source File
SOURCE=.\FlexLexer.h
# End Source File
# Begin Source File
@@ -202,10 +202,18 @@ SOURCE=.\zend_API.h
# End Source File
# Begin Source File
SOURCE=.\zend_builtin_functions.h
# End Source File
# Begin Source File
SOURCE=.\zend_compile.h
# End Source File
# Begin Source File
SOURCE=.\zend_config.w32.h
# End Source File
# Begin Source File
SOURCE=.\zend_constants.h
# End Source File
# Begin Source File
@@ -275,7 +283,8 @@ InputDir=.
InputPath=".\zend-parser.y"
BuildCmds= \
bison --output=zend-parser.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" -p zend zend-parser.y
if not "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "%CYGWIN%\share\bison.simple" -p zend zend-parser.y \
if "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" -p zend zend-parser.y
"$(InputDir)\zend-parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -291,7 +300,8 @@ InputDir=.
InputPath=".\zend-parser.y"
BuildCmds= \
bison --output=zend-parser.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" -p zend zend-parser.y
if not "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "%CYGWIN%\share\bison.simple" -p zend zend-parser.y \
if "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" -p zend zend-parser.y
"$(InputDir)\zend-parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
+21 -7
View File
@@ -102,6 +102,10 @@ SOURCE=.\zend_API.c
# End Source File
# Begin Source File
SOURCE=.\zend_builtin_functions.c
# End Source File
# Begin Source File
SOURCE=.\zend_compile.c
# End Source File
# Begin Source File
@@ -170,10 +174,6 @@ SOURCE=.\zend_variables.c
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\config.w32.h
# End Source File
# Begin Source File
SOURCE=.\FlexLexer.h
# End Source File
# Begin Source File
@@ -202,10 +202,18 @@ SOURCE=.\zend_API.h
# End Source File
# Begin Source File
SOURCE=.\zend_builtin_functions.h
# End Source File
# Begin Source File
SOURCE=.\zend_compile.h
# End Source File
# Begin Source File
SOURCE=.\zend_config.w32.h
# End Source File
# Begin Source File
SOURCE=.\zend_constants.h
# End Source File
# Begin Source File
@@ -226,6 +234,10 @@ SOURCE=.\zend_globals.h
# End Source File
# Begin Source File
SOURCE=.\zend_globals_macros.h
# End Source File
# Begin Source File
SOURCE=.\zend_hash.h
# End Source File
# Begin Source File
@@ -275,7 +287,8 @@ InputDir=.
InputPath=".\zend-parser.y"
BuildCmds= \
bison --output=zend-parser.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" -p zend zend-parser.y
if not "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "%CYGWIN%\share\bison.simple" -p zend zend-parser.y \
if "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" -p zend zend-parser.y
"$(InputDir)\zend-parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -291,7 +304,8 @@ InputDir=.
InputPath=".\zend-parser.y"
BuildCmds= \
bison --output=zend-parser.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" -p zend zend-parser.y
if not "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "%CYGWIN%\share\bison.simple" -p zend zend-parser.y \
if "X%CYGWIN%"=="X" bison --output=zend-parser.c -v -d -S "C:\Program Files\Cygnus\share\bison.simple" -p zend zend-parser.y
"$(InputDir)\zend-parser.c" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
$(BuildCmds)
@@ -327,7 +341,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
+39 -32
View File
@@ -56,7 +56,7 @@
%left '|'
%left '^'
%left '&'
%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL
%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL
%nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL
%left T_SL T_SR
%left '+' '-' '.'
@@ -348,9 +348,8 @@ class_variable_decleration:
| T_VARIABLE '=' static_scalar { do_declare_property(&$1, &$3 CLS_CC); }
;
echo_expr_list:
/* empty */
| echo_expr_list ',' expr { do_echo(&$3 CLS_CC); }
| expr { do_echo(&$1 CLS_CC); }
;
@@ -358,27 +357,31 @@ echo_expr_list:
for_expr:
/* empty */ { $$.op_type = IS_CONST; $$.u.constant.type = IS_BOOL; $$.u.constant.value.lval = 1; }
| for_expr ',' { do_free(&$1 CLS_CC); } expr { $$ = $4; }
| non_empty_for_expr { $$ = $1; }
;
non_empty_for_expr:
non_empty_for_expr ',' { do_free(&$1 CLS_CC); } expr { $$ = $4; }
| expr { $$ = $1; }
;
expr_without_variable:
T_LIST '(' { do_list_init(CLS_C); } assignment_list ')' '=' expr { do_list_end(&$$, &$7 CLS_CC); }
| w_cvar '=' expr { do_assign(&$$, &$1, &$3 CLS_CC); }
| w_cvar '=' '&' w_cvar { do_assign_ref(&$$, &$1, &$4 CLS_CC); }
| cvar '=' expr { do_end_variable_parse(BP_VAR_W, 0 CLS_CC); do_assign(&$$, &$1, &$3 CLS_CC); }
| cvar '=' '&' w_cvar { do_end_variable_parse(BP_VAR_W, 0 CLS_CC); do_assign_ref(&$$, &$1, &$4 CLS_CC); }
| T_NEW class_name { do_extended_fcall_begin(CLS_C); do_begin_new_object(&$1, &$2 CLS_CC); } ctor_arguments { do_end_new_object(&$$, &$2, &$1, &$4 CLS_CC); do_extended_fcall_end(CLS_C);}
| rw_cvar T_PLUS_EQUAL expr { do_binary_assign_op(ZEND_ASSIGN_ADD, &$$, &$1, &$3 CLS_CC); }
| rw_cvar T_MINUS_EQUAL expr { do_binary_assign_op(ZEND_ASSIGN_SUB, &$$, &$1, &$3 CLS_CC); }
| rw_cvar T_MUL_EQUAL expr { do_binary_assign_op(ZEND_ASSIGN_MUL, &$$, &$1, &$3 CLS_CC); }
| rw_cvar T_DIV_EQUAL expr { do_binary_assign_op(ZEND_ASSIGN_DIV, &$$, &$1, &$3 CLS_CC); }
| rw_cvar T_CONCAT_EQUAL expr { do_binary_assign_op(ZEND_ASSIGN_CONCAT, &$$, &$1, &$3 CLS_CC); }
| rw_cvar T_MOD_EQUAL expr { do_binary_assign_op(ZEND_ASSIGN_MOD, &$$, &$1, &$3 CLS_CC); }
| rw_cvar T_AND_EQUAL expr { do_binary_assign_op(ZEND_ASSIGN_BW_AND, &$$, &$1, &$3 CLS_CC); }
| rw_cvar T_OR_EQUAL expr { do_binary_assign_op(ZEND_ASSIGN_BW_OR, &$$, &$1, &$3 CLS_CC); }
| rw_cvar XT_OR_EQUAL expr { do_binary_assign_op(ZEND_ASSIGN_BW_XOR, &$$, &$1, &$3 CLS_CC); }
| rw_cvar T_SL_EQUAL expr { do_binary_assign_op(ZEND_ASSIGN_SL, &$$, &$1, &$3 CLS_CC); }
| rw_cvar T_SR_EQUAL expr { do_binary_assign_op(ZEND_ASSIGN_SR, &$$, &$1, &$3 CLS_CC); }
| cvar T_PLUS_EQUAL expr { do_end_variable_parse(BP_VAR_RW, 0 CLS_CC); do_binary_assign_op(ZEND_ASSIGN_ADD, &$$, &$1, &$3 CLS_CC); }
| cvar T_MINUS_EQUAL expr { do_end_variable_parse(BP_VAR_RW, 0 CLS_CC); do_binary_assign_op(ZEND_ASSIGN_SUB, &$$, &$1, &$3 CLS_CC); }
| cvar T_MUL_EQUAL expr { do_end_variable_parse(BP_VAR_RW, 0 CLS_CC); do_binary_assign_op(ZEND_ASSIGN_MUL, &$$, &$1, &$3 CLS_CC); }
| cvar T_DIV_EQUAL expr { do_end_variable_parse(BP_VAR_RW, 0 CLS_CC); do_binary_assign_op(ZEND_ASSIGN_DIV, &$$, &$1, &$3 CLS_CC); }
| cvar T_CONCAT_EQUAL expr { do_end_variable_parse(BP_VAR_RW, 0 CLS_CC); do_binary_assign_op(ZEND_ASSIGN_CONCAT, &$$, &$1, &$3 CLS_CC); }
| 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_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); }
| T_INC rw_cvar { do_pre_incdec(&$$, &$2, ZEND_PRE_INC CLS_CC); }
| rw_cvar T_DEC { do_post_incdec(&$$, &$1, ZEND_POST_DEC CLS_CC); }
@@ -403,6 +406,7 @@ expr_without_variable:
| '-' 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_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); }
@@ -413,15 +417,15 @@ expr_without_variable:
| 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); }
| T_STRING '(' { do_extended_fcall_begin(CLS_C); do_begin_function_call(&$1 CLS_CC); }
| T_STRING '(' { do_extended_fcall_begin(CLS_C); $2.u.opline_num = do_begin_function_call(&$1 CLS_CC); }
function_call_parameter_list
')' { do_end_function_call(&$1, &$$, &$4, 0 CLS_CC); do_extended_fcall_end(CLS_C); }
')' { 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); }
function_call_parameter_list
')' { do_end_function_call(&$1, &$$, &$4, 0 CLS_CC); do_extended_fcall_end(CLS_C);}
')' { 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); }
function_call_parameter_list
')' { do_end_function_call(&$3, &$$, &$6, 1 CLS_CC); do_extended_fcall_end(CLS_C);}
')' { do_end_function_call(&$3, &$$, &$6, 1, 1 CLS_CC); do_extended_fcall_end(CLS_C);}
| internal_functions_in_yacc { $$ = $1; }
| T_INT_CAST expr { do_cast(&$$, &$2, IS_LONG CLS_CC); }
| T_DOUBLE_CAST expr { do_cast(&$$, &$2, IS_DOUBLE CLS_CC); }
@@ -507,17 +511,17 @@ expr:
r_cvar:
cvar { do_end_variable_parse(BP_VAR_R CLS_CC); $$ = $1; }
cvar { do_end_variable_parse(BP_VAR_R, 0 CLS_CC); $$ = $1; }
;
w_cvar:
cvar { do_end_variable_parse(BP_VAR_W CLS_CC); $$ = $1; }
cvar { do_end_variable_parse(BP_VAR_W, 0 CLS_CC); $$ = $1; }
;
rw_cvar:
cvar { do_end_variable_parse(BP_VAR_RW CLS_CC); $$ = $1; }
cvar { do_end_variable_parse(BP_VAR_RW, 0 CLS_CC); $$ = $1; }
;
@@ -570,7 +574,7 @@ object_property:
scalar_object_property:
T_STRING { $$ = $1; }
| '{' expr '}' { $$ = $2; }
| cvar_without_objects { do_end_variable_parse(BP_VAR_R CLS_CC); $$ = $1; }
| cvar_without_objects { do_end_variable_parse(BP_VAR_R, 0 CLS_CC); $$ = $1; }
;
@@ -599,20 +603,23 @@ assignment_list_element:
array_pair_list:
/* empty */ { do_init_array(&$$, NULL, NULL CLS_CC); }
/* empty */ { do_init_array(&$$, NULL, NULL, 0 CLS_CC); }
| non_empty_array_pair_list { $$ = $1; }
;
non_empty_array_pair_list:
non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr { do_add_array_element(&$$, &$5, &$3 CLS_CC); }
| non_empty_array_pair_list ',' expr { do_add_array_element(&$$, &$3, NULL CLS_CC); }
| expr T_DOUBLE_ARROW expr { do_init_array(&$$, &$3, &$1 CLS_CC); }
| expr { do_init_array(&$$, &$1, NULL CLS_CC); }
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); }
| expr T_DOUBLE_ARROW expr { do_init_array(&$$, &$3, &$1, 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); }
;
encaps_list:
encaps_list encaps_var { do_end_variable_parse(BP_VAR_R CLS_CC); do_add_variable(&$$, &$1, &$2 CLS_CC); }
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); }
+47 -19
View File
@@ -40,15 +40,6 @@
#include <errno.h>
#ifdef ZTS
#include <fstream.h>
# if WIN32||WINNT
# include <strstrea.h>
# else
# include <strstream.h>
# endif
#endif
#include "zend.h"
#include "zend_alloc.h"
#include "zend_compile.h"
@@ -58,12 +49,27 @@
#include "zend_variables.h"
#include "zend_operators.h"
#if HAVE_STDARG_H
#include <stdarg.h>
#ifdef ZTS
# include <fstream.h>
# ifdef HAVE_STDIOSTR_H
# include <stdiostr.h>
# endif
# ifdef HAVE_STDIOSTREAM_H
# include <stdiostream.h>
# endif
# if WIN32||WINNT
# include <strstrea.h>
# else
# include <strstream.h>
# endif
#endif
#if HAVE_UNISTD_H
#include <unistd.h>
#ifdef HAVE_STDARG_H
# include <stdarg.h>
#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#ifdef ZTS
@@ -79,6 +85,16 @@
# define MY_INPUT input
#endif
#if defined(ZTS) && !defined(HAVE_CLASS_ISTDIOSTREAM)
class istdiostream : public istream
{
private:
stdiobuf _file;
public:
istdiostream (FILE* __f) : istream(), _file(__f) { init(&_file); }
};
#endif
#define YY_FATAL_ERROR zend_fatal_scanner_error
#define HANDLE_NEWLINES(s,l) \
@@ -170,7 +186,7 @@ BEGIN_EXTERN_C()
ZEND_API void zend_open_file_dtor(void *f)
{
#ifdef ZTS
delete *((ifstream **) f);
delete *((istream **) f);
#else
fclose(*((FILE **) f));
#endif
@@ -187,7 +203,7 @@ ZEND_API void zend_close_file_handle(zend_file_handle *file_handle CLS_DC)
}
ZEND_API inline int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
ZEND_API int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
{
#ifndef ZTS
switch (file_handle->type) {
@@ -218,14 +234,22 @@ ZEND_API inline int open_file_for_scanning(zend_file_handle *file_handle CLS_DC)
file_handle->handle.is = new ifstream(file_handle->handle.fd);
break;
case ZEND_HANDLE_FILENAME:
file_handle->handle.is = new ifstream(file_handle->filename, ios::nocreate|ios::in|ios::binary);
break;
{
file_handle->handle.fp = zend_fopen(file_handle->filename);
if (!file_handle->handle.fp) {
return FAILURE;
}
file_handle->handle.is = new istdiostream(file_handle->handle.fp);
break;
}
case ZEND_HANDLE_FP:
if (file_handle->handle.fp==stdin) {
file_handle->handle.is = (ifstream *) &cin;
} else {
fclose(file_handle->handle.fp);
file_handle->handle.is = new ifstream(file_handle->filename, ios::nocreate|ios::in|ios::binary);
if (!file_handle->handle.fp) {
return FAILURE;
}
file_handle->handle.is = new istdiostream(file_handle->handle.fp);
}
break;
}
@@ -799,6 +823,10 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
return T_DEC;
}
<ST_IN_SCRIPTING>"===" {
return T_IS_IDENTICAL;
}
<ST_IN_SCRIPTING>"==" {
return T_IS_EQUAL;
}
+14 -11
View File
@@ -26,6 +26,7 @@
#include "zend_constants.h"
#include "zend_list.h"
#include "zend_API.h"
#include "zend_builtin_functions.h"
#ifdef ZTS
# define GLOBAL_FUNCTION_TABLE global_function_table
@@ -42,10 +43,10 @@ ZEND_API zend_class_entry zend_standard_class_def;
ZEND_API int (*zend_printf)(const char *format, ...);
ZEND_API int (*zend_write)(const char *str, uint str_length);
ZEND_API void (*zend_error)(int type, const char *format, ...);
void (*zend_message_dispatcher)(long message, void *data);
FILE *(*zend_fopen)(const char *filename);
void (*zend_block_interruptions)();
void (*zend_unblock_interruptions)();
ZEND_API void (*zend_message_dispatcher)(long message, void *data);
ZEND_API FILE *(*zend_fopen)(const char *filename);
ZEND_API void (*zend_block_interruptions)();
ZEND_API void (*zend_unblock_interruptions)();
ZEND_API int (*zend_get_ini_entry)(char *name, uint name_length, zval *contents);
#ifdef ZTS
@@ -226,7 +227,7 @@ static void register_standard_class()
zend_standard_class_def.handle_property_set = NULL;
zend_standard_class_def.refcount = (int *) malloc(sizeof(int));
*zend_standard_class_def.refcount = 1;
zend_hash_add(GLOBAL_CLASS_TABLE, "stdClass", sizeof("stdClass"), &zend_standard_class_def, sizeof(zend_class_entry), NULL);
zend_hash_add(GLOBAL_CLASS_TABLE, "stdclass", sizeof("stdclass"), &zend_standard_class_def, sizeof(zend_class_entry), NULL);
}
@@ -262,7 +263,7 @@ static void compiler_globals_dtor(zend_compiler_globals *compiler_globals)
static void executor_globals_ctor(zend_executor_globals *executor_globals)
{
if (global_constants_table) {
zend_startup_constants(executor_globals->zend_constants ELS_CC);
zend_startup_constants(ELS_C);
zend_copy_constants(executor_globals->zend_constants, global_constants_table);
}
init_resource_plist(ELS_C);
@@ -278,7 +279,7 @@ static void executor_globals_dtor(zend_executor_globals *executor_globals)
static void alloc_globals_ctor(zend_alloc_globals *alloc_globals)
{
start_memory_manager();
start_memory_manager(ALS_C);
}
#endif
@@ -291,10 +292,10 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions)
zend_executor_globals *executor_globals;
alloc_globals_id = ts_allocate_id(sizeof(zend_alloc_globals), alloc_globals_ctor, NULL);
#else
start_memory_manager(ALS_C);
#endif
start_memory_manager();
/* Set up utility functions and values */
zend_error = utility_functions->error_function;
zend_printf = utility_functions->printf_function;
@@ -334,10 +335,10 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions)
compiler_globals_dtor(compiler_globals);
compiler_globals->function_table = GLOBAL_FUNCTION_TABLE;
compiler_globals->class_table = GLOBAL_CLASS_TABLE;
zend_startup_constants(EG(zend_constants), executor_globals);
zend_startup_constants(executor_globals);
GLOBAL_CONSTANTS_TABLE = EG(zend_constants);
#else
zend_startup_constants(EG(zend_constants));
zend_startup_constants();
#endif
zend_register_standard_constants(ELS_C);
@@ -345,6 +346,8 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions)
init_resource_plist(ELS_C);
#endif
zend_startup_builtin_functions();
return SUCCESS;
}
+76 -25
View File
@@ -23,7 +23,6 @@
#define ZEND_VERSION "0.90"
#ifdef __cplusplus
#define BEGIN_EXTERN_C() extern "C" {
#define END_EXTERN_C() }
@@ -32,40 +31,71 @@
#define END_EXTERN_C()
#endif
#include <stdio.h>
/*
* general definitions
*/
#if WINNT||WIN32
#include "config.w32.h"
#if (defined(WINNT) && WINNT) || (defined(WIN32) && WIN32)
# include "zend_config.w32.h"
#else
#include "zend_config.h"
#include "config.unix.h"
# include "zend_config.h"
#endif
/* all HAVE_XXX test have to be after the include of zend_config above */
#ifdef HAVE_UNIX_H
# include <unix.h>
#endif
#ifdef HAVE_STDARG_H
# include <stdarg.h>
#endif
#if ZEND_DEBUG
#define ZEND_FILE_LINE_D char *__zend_filename, uint __zend_lineno
#define ZEND_FILE_LINE_DC , ZEND_FILE_LINE_D
#define ZEND_FILE_LINE_ORIG_D char *__zend_orig_filename, uint __zend_orig_lineno
#define ZEND_FILE_LINE_ORIG_DC , ZEND_FILE_LINE_ORIG_D
#define ZEND_FILE_LINE_RELAY_C __zend_filename, __zend_lineno
#define ZEND_FILE_LINE_RELAY_CC , ZEND_FILE_LINE_RELAY_C
#define ZEND_FILE_LINE_C __FILE__, __LINE__
#define ZEND_FILE_LINE_CC , ZEND_FILE_LINE_C
#define ZEND_FILE_LINE_EMPTY_C NULL, 0
#define ZEND_FILE_LINE_EMPTY_CC , ZEND_FILE_LINE_EMPTY_C
#define ZEND_FILE_LINE_ORIG_RELAY_C __zend_orig_filename, __zend_orig_lineno
#define ZEND_FILE_LINE_ORIG_RELAY_CC , ZEND_FILE_LINE_ORIG_RELAY_C
#else
#define ZEND_FILE_LINE_D
#define ZEND_FILE_LINE_DC
#define ZEND_FILE_LINE_ORIG_D
#define ZEND_FILE_LINE_ORIG_DC
#define ZEND_FILE_LINE_RELAY_C
#define ZEND_FILE_LINE_RELAY_CC
#define ZEND_FILE_LINE_C
#define ZEND_FILE_LINE_CC
#define ZEND_FILE_LINE_EMPTY_C
#define ZEND_FILE_LINE_EMPTY_CC
#define ZEND_FILE_LINE_ORIG_RELAY_C
#define ZEND_FILE_LINE_ORIG_RELAY_CC
#endif /* ZEND_DEBUG */
#include "zend_errors.h"
#include "zend_alloc.h"
/* this is a workaround for a bug in gcc */
#if SIZEOF_VOID_P == 8 || (1)
typedef unsigned int zend_bool;
#else
typedef unsigned char zend_bool;
#endif
#undef SUCCESS
#undef FAILURE
#define SUCCESS 0
#define FAILURE -1 /* this MUST stay a negative number, or it may effect functions! */
#define FAILURE -1 /* this MUST stay a negative number, or it may affect functions! */
#include "zend_hash.h"
#include "zend_llist.h"
#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, HashTable *list, HashTable *plist, zval *this_ptr
#define INTERNAL_FUNCTION_PARAM_PASSTHRU ht, return_value, list, plist, this_ptr
@@ -95,10 +125,7 @@ struct _zval_struct {
/* Variable information */
zvalue_value value; /* value */
unsigned char type; /* active type */
struct {
unsigned int locks:7;
unsigned int is_ref:1;
} EA;
unsigned char is_ref;
short refcount;
};
@@ -124,6 +151,8 @@ typedef struct _zend_overloaded_element {
zval element;
} zend_overloaded_element;
/* excpt.h on Digital Unix 4.0 defines function_table */
#undef function_table
struct _zend_class_entry {
char type;
@@ -196,7 +225,7 @@ ZEND_API extern char *empty_string;
ZEND_API extern char *undefined_variable_string;
#define STR_FREE(ptr) if (ptr && ptr!=empty_string && ptr!=undefined_variable_string) { efree(ptr); }
#define STR_FREE_REL(ptr) if (ptr && ptr!=empty_string && ptr!=undefined_variable_string) { efree_rel(ptr); }
/* output support */
#define ZEND_WRITE(str, str_len) zend_write((str), (str_len))
@@ -207,10 +236,10 @@ BEGIN_EXTERN_C()
extern ZEND_API int (*zend_printf)(const char *format, ...);
extern ZEND_API int (*zend_write)(const char *str, uint str_length);
extern ZEND_API void (*zend_error)(int type, const char *format, ...);
extern FILE *(*zend_fopen)(const char *filename);
extern void (*zend_block_interruptions)();
extern void (*zend_unblock_interruptions)();
extern void (*zend_message_dispatcher)(long message, void *data);
extern ZEND_API FILE *(*zend_fopen)(const char *filename);
extern ZEND_API void (*zend_block_interruptions)();
extern ZEND_API void (*zend_unblock_interruptions)();
extern ZEND_API void (*zend_message_dispatcher)(long message, void *data);
extern ZEND_API int (*zend_get_ini_entry)(char *name, uint name_length, zval *contents);
END_EXTERN_C()
@@ -238,11 +267,33 @@ extern zend_utility_values zend_uv;
#define INIT_PZVAL(z) \
(z)->refcount = 1; \
(z)->EA.is_ref = 0; \
(z)->EA.locks = 0;
(z)->is_ref = 0;
#define MAKE_STD_ZVAL(zv) \
#define MAKE_STD_ZVAL(zv) \
zv = (zval *) emalloc(sizeof(zval)); \
INIT_PZVAL(zv);
#define SEPARATE_ZVAL(ppzv) \
{ \
zval *orig_ptr = *(ppzv); \
\
if (orig_ptr->refcount>1) { \
orig_ptr->refcount--; \
*(ppzv) = (zval *) emalloc(sizeof(zval)); \
**(ppzv) = *orig_ptr; \
zval_copy_ctor(*(ppzv)); \
(*(ppzv))->refcount=1; \
(*(ppzv))->is_ref = 0; \
} \
}
#define ZEND_MAX_RESERVED_RESOURCES 1
#endif /* _ZEND_H */
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
+85 -9
View File
@@ -26,8 +26,8 @@
#include "zend_constants.h"
#include "zend_operators.h"
#if HAVE_STDARG_H
#include <stdarg.h>
#ifdef HAVE_STDARG_H
# include <stdarg.h>
#endif
/* these variables are true statics/globals, and have to be mutex'ed on every access */
@@ -226,6 +226,13 @@ ZEND_API inline int object_init(zval *arg)
}
ZEND_API inline int add_assoc_function(zval *arg, char *key,void (*function_ptr)(INTERNAL_FUNCTION_PARAMETERS))
{
zend_error(E_WARNING, "add_assoc_function() is no longer supported");
return FAILURE;
}
ZEND_API inline int add_assoc_long(zval *arg, char *key, long n)
{
zval *tmp = (zval *) emalloc(sizeof(zval));
@@ -237,6 +244,28 @@ ZEND_API inline int add_assoc_long(zval *arg, char *key, long n)
}
ZEND_API inline int add_assoc_bool(zval *arg, char *key, int b)
{
zval *tmp = (zval *) emalloc(sizeof(zval));
tmp->type = IS_BOOL;
tmp->value.lval = b;
INIT_PZVAL(tmp);
return zend_hash_update(arg->value.ht, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
}
ZEND_API inline int add_assoc_resource(zval *arg, char *key, int r)
{
zval *tmp = (zval *) emalloc(sizeof(zval));
tmp->type = IS_RESOURCE;
tmp->value.lval = r;
INIT_PZVAL(tmp);
return zend_hash_update(arg->value.ht, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
}
ZEND_API inline int add_assoc_double(zval *arg, char *key, double d)
{
zval *tmp = (zval *) emalloc(sizeof(zval));
@@ -280,13 +309,6 @@ ZEND_API inline int add_assoc_stringl(zval *arg, char *key, char *str, uint leng
}
ZEND_API inline int add_assoc_function(zval *arg, char *key,void (*function_ptr)(INTERNAL_FUNCTION_PARAMETERS))
{
zend_error(E_WARNING, "add_assoc_function() is no longer supported");
return FAILURE;
}
ZEND_API inline int add_index_long(zval *arg, uint index, long n)
{
zval *tmp = (zval *) emalloc(sizeof(zval));
@@ -298,6 +320,28 @@ ZEND_API inline int add_index_long(zval *arg, uint index, long n)
}
ZEND_API inline int add_index_bool(zval *arg, uint index, int b)
{
zval *tmp = (zval *) emalloc(sizeof(zval));
tmp->type = IS_BOOL;
tmp->value.lval = b;
INIT_PZVAL(tmp);
return zend_hash_index_update(arg->value.ht, index, (void *) &tmp, sizeof(zval *),NULL);
}
ZEND_API inline int add_index_resource(zval *arg, uint index, int r)
{
zval *tmp = (zval *) emalloc(sizeof(zval));
tmp->type = IS_RESOURCE;
tmp->value.lval = r;
INIT_PZVAL(tmp);
return zend_hash_index_update(arg->value.ht, index, (void *) &tmp, sizeof(zval *),NULL);
}
ZEND_API inline int add_index_double(zval *arg, uint index, double d)
{
zval *tmp = (zval *) emalloc(sizeof(zval));
@@ -352,6 +396,28 @@ ZEND_API inline int add_next_index_long(zval *arg, long n)
}
ZEND_API inline int add_next_index_bool(zval *arg, int b)
{
zval *tmp = (zval *) emalloc(sizeof(zval));
tmp->type = IS_BOOL;
tmp->value.lval = b;
INIT_PZVAL(tmp);
return zend_hash_next_index_insert(arg->value.ht, &tmp, sizeof(zval *), NULL);
}
ZEND_API inline int add_next_index_resource(zval *arg, int r)
{
zval *tmp = (zval *) emalloc(sizeof(zval));
tmp->type = IS_RESOURCE;
tmp->value.lval = r;
INIT_PZVAL(tmp);
return zend_hash_next_index_insert(arg->value.ht, &tmp, sizeof(zval *), NULL);
}
ZEND_API inline int add_next_index_double(zval *arg, double d)
{
zval *tmp = (zval *) emalloc(sizeof(zval));
@@ -491,6 +557,16 @@ ZEND_API inline int add_property_long(zval *arg, char *key, long n)
return zend_hash_update(arg->value.obj.properties, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
}
ZEND_API inline int add_property_resource(zval *arg, char *key, long n)
{
zval *tmp = (zval *) emalloc(sizeof(zval));
tmp->type = IS_RESOURCE;
tmp->value.lval = n;
INIT_PZVAL(tmp);
return zend_hash_update(arg->value.obj.properties, key, strlen(key)+1, (void *) &tmp, sizeof(zval *), NULL);
}
ZEND_API inline int add_property_double(zval *arg, char *key, double d)
{
+93 -47
View File
@@ -80,6 +80,7 @@ ZEND_API void wrong_param_count(void);
#define BYREF_NONE 0
#define BYREF_FORCE 1
#define BYREF_ALLOW 2
#define BYREF_FORCE_REST 3
#if !(WIN32||WINNT)
#define DLEXPORT
@@ -90,31 +91,43 @@ int zend_startup_module(zend_module_entry *module);
ZEND_API int array_init(zval *arg);
ZEND_API int object_init(zval *arg);
ZEND_API int object_init_ex(zval *arg, zend_class_entry *ce);
/* no longer supported */
ZEND_API int add_assoc_function(zval *arg, char *key,void (*function_ptr)(INTERNAL_FUNCTION_PARAMETERS));
ZEND_API int add_assoc_long(zval *arg, char *key, long n);
ZEND_API int add_assoc_bool(zval *arg, char *key, int b);
ZEND_API int add_assoc_resource(zval *arg, char *key, int r);
ZEND_API int add_assoc_double(zval *arg, char *key, double d);
ZEND_API int add_assoc_string(zval *arg, char *key, char *str, int duplicate);
ZEND_API int add_assoc_stringl(zval *arg, char *key, char *str, uint length, int duplicate);
ZEND_API int add_assoc_function(zval *arg, char *key,void (*function_ptr)(INTERNAL_FUNCTION_PARAMETERS));
ZEND_API int add_index_long(zval *arg, uint idx, long n);
ZEND_API int add_index_bool(zval *arg, uint idx, int b);
ZEND_API int add_index_resource(zval *arg, uint idx, int r);
ZEND_API int add_index_double(zval *arg, uint idx, double d);
ZEND_API int add_index_string(zval *arg, uint idx, char *str, int duplicate);
ZEND_API int add_index_stringl(zval *arg, uint idx, char *str, uint length, int duplicate);
ZEND_API int add_next_index_long(zval *arg, long n);
ZEND_API int add_next_index_bool(zval *arg, int b);
ZEND_API int add_next_index_resource(zval *arg, int r);
ZEND_API int add_next_index_double(zval *arg, double d);
ZEND_API int add_next_index_string(zval *arg, char *str, int duplicate);
ZEND_API int add_next_index_stringl(zval *arg, char *str, uint length, int duplicate);
ZEND_API int add_get_assoc_string(zval *arg, char *key, char *str, void **dest, int duplicate);
ZEND_API int add_get_assoc_stringl(zval *arg, char *key, char *str, uint length, void **dest, int duplicate);
ZEND_API int add_get_index_long(zval *arg, uint idx, long l, void **dest);
ZEND_API int add_get_index_double(zval *arg, uint idx, double d, void **dest);
ZEND_API int add_get_assoc_string(zval *arg, char *key, char *str, void **dest, int duplicate);
ZEND_API int add_get_assoc_stringl(zval *arg, char *key, char *str, uint length, void **dest, int duplicate);
ZEND_API int add_get_index_string(zval *arg, uint idx, char *str, void **dest, int duplicate);
ZEND_API int add_get_index_stringl(zval *arg, uint idx, char *str, uint length, void **dest, int duplicate);
ZEND_API int call_user_function(HashTable *function_table, zval *object, zval *function_name, zval *retval, int param_count, zval *params[]);
ZEND_API int call_user_function_ex(HashTable *function_table, zval *object, zval *function_name, zval *retval, int param_count, zval **params[], int no_separation);
ZEND_API int add_property_long(zval *arg, char *key, long l);
ZEND_API int add_property_resource(zval *arg, char *key, long r);
ZEND_API int add_property_double(zval *arg, char *key, double d);
ZEND_API int add_property_string(zval *arg, char *key, char *str, int duplicate);
ZEND_API int add_property_stringl(zval *arg, char *key, char *str, uint length, int duplicate);
@@ -182,51 +195,84 @@ ZEND_API int add_property_stringl(zval *arg, char *key, char *str, uint length,
#define RETURN_FALSE { RETVAL_FALSE; return; }
#define RETURN_TRUE { RETVAL_TRUE; return; }
#define SET_VAR_STRING(n,v) { \
{ \
zval *var = (zval *) emalloc(sizeof(zval)); \
\
char *str=v; /* prevent 'v' from being evaluated more than once */ \
var->value.str.val = (str); \
var->value.str.len = strlen((str)); \
var->type = IS_STRING; \
INIT_PZVAL(var); \
zend_hash_update(&EG(symbol_table), (n), strlen((n))+1, &var, sizeof(zval *), NULL); \
} \
}
#define SET_VAR_STRINGL(n,v,l) { \
{ \
zval *var = (zval *) emalloc(sizeof(zval)); \
\
char *name=(n); \
var->value.str.val = (v); \
var->value.str.len = (l); \
var->type = IS_STRING; \
INIT_PZVAL(var); \
zend_hash_update(&EG(symbol_table), name, strlen(name)+1, &var, sizeof(zval *), NULL); \
} \
}
#define SET_VAR_LONG(n,v) { \
{ \
zval *var = (zval *) emalloc(sizeof(zval)); \
\
var->value.lval = (v); \
var->type = IS_LONG; \
INIT_PZVAL(var); \
zend_hash_update(&EG(symbol_table), (n), strlen((n))+1, &var, sizeof(zval *), NULL); \
} \
}
#define SET_VAR_DOUBLE(n,v) { \
{ \
zval *var = (zval *) emalloc(sizeof(zval)); \
\
var->value.dval = (v); \
var->type = IS_DOUBLE; \
INIT_PZVAL(var); \
zend_hash_update(&EG(symbol_table)), (n), strlen((n))+1, &var, sizeof(zval *), NULL); \
} \
#define SET_VAR_STRING(n,v) { \
{ \
zval *var = (zval *) emalloc(sizeof(zval)); \
char *str=(v); /* prevent 'v' from being evaluated more than once */ \
\
var->value.str.val = (str); \
var->value.str.len = strlen((str)); \
var->type = IS_STRING; \
ZEND_SET_GLOBAL_VAR(n, var); \
} \
}
#define SET_VAR_STRINGL(n,v,l) { \
{ \
zval *var = (zval *) emalloc(sizeof(zval)); \
\
var->value.str.val = (v); \
var->value.str.len = (l); \
var->type = IS_STRING; \
ZEND_SET_GLOBAL_VAR(n, var); \
} \
}
#define SET_VAR_LONG(n,v) { \
{ \
zval *var = (zval *) emalloc(sizeof(zval)); \
\
var->value.lval = (v); \
var->type = IS_LONG; \
ZEND_SET_GLOBAL_VAR(n, var); \
} \
}
#define SET_VAR_DOUBLE(n,v) { \
{ \
zval *var = (zval *) emalloc(sizeof(zval)); \
\
var->value.dval = (v); \
var->type = IS_DOUBLE; \
ZEND_SET_GLOBAL_VAR(n, var); \
} \
}
#define ZEND_SET_SYMBOL(symtable, name, var) \
{ \
char *_name = (name); \
\
ZEND_SET_SYMBOL_WITH_LENGTH(symtable, _name, strlen(_name)+1, var); \
}
#define ZEND_SET_SYMBOL_WITH_LENGTH(symtable, name, name_length, var) \
{ \
zval **orig_var; \
\
if (zend_hash_find(symtable, (name), (name_length), (void **) &orig_var)==SUCCESS \
&& PZVAL_IS_REF(*orig_var)) { \
(var)->refcount = (*orig_var)->refcount; \
(var)->is_ref = 1; \
\
zval_dtor(*orig_var); \
**orig_var = *(var); \
efree(var); \
} else { \
INIT_PZVAL((var)); \
zend_hash_update(symtable, (name), (name_length), &(var), sizeof(zval *), NULL); \
} \
}
#define ZEND_SET_GLOBAL_VAR(name, var) \
ZEND_SET_SYMBOL(&EG(symbol_table), name, var)
#define ZEND_SET_GLOBAL_VAR_WITH_LENGTH(name, name_length, var) \
ZEND_SET_SYMBOL_WITH_LENGTH(&EG(symbol_table), name, name_length, var)
#define HASH_OF(p) ((p)->type==IS_ARRAY ? (p)->value.ht : (((p)->type==IS_OBJECT ? (p)->value.obj.properties : NULL)))
#endif /* _ZEND_API_H */
+44 -83
View File
@@ -23,11 +23,11 @@
#include "zend.h"
#include "zend_alloc.h"
#include "zend_globals.h"
#if HAVE_SIGNAL_H
#include <signal.h>
#ifdef HAVE_SIGNAL_H
# include <signal.h>
#endif
#if HAVE_UNISTD_H
#include <unistd.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#ifndef ZTS
@@ -46,7 +46,7 @@ static zend_alloc_globals alloc_globals;
# if MEMORY_LIMIT
# if ZEND_DEBUG
#define CHECK_MEMORY_LIMIT(s) _CHECK_MEMORY_LIMIT(s,filename,lineno)
#define CHECK_MEMORY_LIMIT(s) _CHECK_MEMORY_LIMIT(s ZEND_FILE_LINE_RELAY_CC)
# else
#define CHECK_MEMORY_LIMIT(s) _CHECK_MEMORY_LIMIT(s,NULL,0)
# endif
@@ -97,11 +97,7 @@ static zend_alloc_globals alloc_globals;
#if ZEND_DEBUG
ZEND_API void *_emalloc(size_t size, char *filename, uint lineno)
#else
ZEND_API void *_emalloc(size_t size)
#endif
ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
mem_header *p;
ALS_FETCH();
@@ -111,8 +107,10 @@ ZEND_API void *_emalloc(size_t size)
if ((size < MAX_CACHED_MEMORY) && (AG(cache_count)[size] > 0)) {
p = AG(cache)[size][--AG(cache_count)[size]];
#if ZEND_DEBUG
p->filename = filename;
p->lineno = lineno;
p->filename = __zend_filename;
p->lineno = __zend_lineno;
p->orig_filename = __zend_orig_filename;
p->orig_lineno = __zend_orig_lineno;
p->magic = MEM_BLOCK_START_MAGIC;
p->reported = 0;
#endif
@@ -126,7 +124,7 @@ ZEND_API void *_emalloc(size_t size)
if (!p) {
fprintf(stderr,"FATAL: emalloc(): Unable to allocate %ld bytes\n", (long) size);
#if ZEND_DEBUG && HAVE_KILL && HAVE_GETPID
#if ZEND_DEBUG && defined(HAVE_KILL) && defined(HAVE_GETPID)
kill(getpid(), SIGSEGV);
#else
exit(1);
@@ -138,8 +136,10 @@ ZEND_API void *_emalloc(size_t size)
ADD_POINTER_TO_LIST(p);
p->size = size;
#if ZEND_DEBUG
p->filename = filename;
p->lineno = lineno;
p->filename = __zend_filename;
p->lineno = __zend_lineno;
p->orig_filename = __zend_orig_filename;
p->orig_lineno = __zend_orig_lineno;
p->magic = MEM_BLOCK_START_MAGIC;
p->reported = 0;
*((long *)(((char *) p) + sizeof(mem_header)+size+PLATFORM_PADDING+END_ALIGNMENT(size))) = MEM_BLOCK_END_MAGIC;
@@ -152,17 +152,13 @@ ZEND_API void *_emalloc(size_t size)
}
#if ZEND_DEBUG
ZEND_API void _efree(void *ptr, char *filename, uint lineno)
#else
ZEND_API void _efree(void *ptr)
#endif
ZEND_API void _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
mem_header *p = (mem_header *) ((char *)ptr - sizeof(mem_header) - PLATFORM_PADDING);
ALS_FETCH();
#if ZEND_DEBUG
if (!_mem_block_check(ptr, 1, filename, lineno)) {
if (!_mem_block_check(ptr, 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC)) {
return;
}
memset(ptr, 0x5a, p->size);
@@ -188,21 +184,13 @@ ZEND_API void _efree(void *ptr)
}
#if ZEND_DEBUG
ZEND_API void *_ecalloc(size_t nmemb, size_t size, char *filename, uint lineno)
#else
ZEND_API void *_ecalloc(size_t nmemb, size_t size)
#endif
ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
void *p;
int final_size=size*nmemb;
HANDLE_BLOCK_INTERRUPTIONS();
#if ZEND_DEBUG
p = _emalloc(final_size,filename,lineno);
#else
p = emalloc(final_size);
#endif
p = _emalloc(final_size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
if (!p) {
HANDLE_UNBLOCK_INTERRUPTIONS();
return (void *) p;
@@ -213,22 +201,14 @@ ZEND_API void *_ecalloc(size_t nmemb, size_t size)
}
#if ZEND_DEBUG
ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure, char *filename, uint lineno)
#else
ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure)
#endif
ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
mem_header *p = (mem_header *) ((char *)ptr-sizeof(mem_header)-PLATFORM_PADDING);
mem_header *orig = p;
ALS_FETCH();
if (!ptr) {
#if ZEND_DEBUG
return _emalloc(size, filename, lineno);
#else
return emalloc(size);
#endif
return _emalloc(size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
}
HANDLE_BLOCK_INTERRUPTIONS();
REMOVE_POINTER_FROM_LIST(p);
@@ -248,8 +228,8 @@ ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure)
}
ADD_POINTER_TO_LIST(p);
#if ZEND_DEBUG
p->filename = filename;
p->lineno = lineno;
p->filename = __zend_filename;
p->lineno = __zend_lineno;
p->magic = MEM_BLOCK_START_MAGIC;
*((long *)(((char *) p) + sizeof(mem_header)+size+PLATFORM_PADDING+END_ALIGNMENT(size))) = MEM_BLOCK_END_MAGIC;
#endif
@@ -263,22 +243,14 @@ ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure)
}
#if ZEND_DEBUG
ZEND_API char *_estrdup(const char *s, char *filename, uint lineno)
#else
ZEND_API char *_estrdup(const char *s)
#endif
ZEND_API char *_estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
int length;
char *p;
length = strlen(s)+1;
HANDLE_BLOCK_INTERRUPTIONS();
#if ZEND_DEBUG
p = (char *) _emalloc(length,filename,lineno);
#else
p = (char *) emalloc(length);
#endif
p = (char *) _emalloc(length ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
if (!p) {
HANDLE_UNBLOCK_INTERRUPTIONS();
return (char *)NULL;
@@ -289,20 +261,12 @@ ZEND_API char *_estrdup(const char *s)
}
#if ZEND_DEBUG
ZEND_API char *_estrndup(const char *s, uint length, char *filename, uint lineno)
#else
ZEND_API char *_estrndup(const char *s, uint length)
#endif
ZEND_API char *_estrndup(const char *s, uint length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
char *p;
HANDLE_BLOCK_INTERRUPTIONS();
#if ZEND_DEBUG
p = (char *) _emalloc(length+1,filename,lineno);
#else
p = (char *) emalloc(length+1);
#endif
p = (char *) _emalloc(length+1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
if (!p) {
HANDLE_UNBLOCK_INTERRUPTIONS();
return (char *)NULL;
@@ -343,10 +307,8 @@ ZEND_API int zend_set_memory_limit(unsigned int memory_limit)
}
ZEND_API void start_memory_manager(void)
ZEND_API void start_memory_manager(ALS_D)
{
ALS_FETCH();
AG(phead) = AG(head) = NULL;
#if MEMORY_LIMIT
@@ -362,7 +324,7 @@ ZEND_API void start_memory_manager(void)
ZEND_API void shutdown_memory_manager(int silent, int clean_cache)
{
mem_header *p, *t;
#ifdef ZEND_DEBUG
#if ZEND_DEBUG
int had_leaks=0;
#endif
ALS_FETCH();
@@ -424,7 +386,7 @@ void zend_debug_alloc_output(char *format, ...)
}
ZEND_API int _mem_block_check(void *ptr, int silent, char *filename, int lineno)
ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
mem_header *p = (mem_header *) ((char *)ptr - sizeof(mem_header) - PLATFORM_PADDING);
int no_cache_notice=0;
@@ -442,7 +404,10 @@ ZEND_API int _mem_block_check(void *ptr, int silent, char *filename, int lineno)
if (!silent) {
zend_message_dispatcher(ZMSG_LOG_SCRIPT_NAME, NULL);
zend_debug_alloc_output("---------------------------------------\n");
zend_debug_alloc_output("%s(%d) : Block 0x%0.8lX status:\n", filename, lineno, (long) p);
zend_debug_alloc_output("%s(%d) : Block 0x%0.8lX status:\n" ZEND_FILE_LINE_RELAY_CC, (long) p);
if (__zend_orig_filename) {
zend_debug_alloc_output("%s(%d) : Actual location (location was relayed)\n" ZEND_FILE_LINE_ORIG_RELAY_CC);
}
zend_debug_alloc_output("%10s\t","Beginning: ");
}
@@ -457,7 +422,7 @@ ZEND_API int _mem_block_check(void *ptr, int silent, char *filename, int lineno)
zend_debug_alloc_output("Freed\n");
had_problems=1;
} else {
return _mem_block_check(ptr, 0, filename, lineno);
return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
}
break;
case MEM_BLOCK_CACHED_MAGIC:
@@ -468,7 +433,7 @@ ZEND_API int _mem_block_check(void *ptr, int silent, char *filename, int lineno)
}
} else {
if (!no_cache_notice) {
return _mem_block_check(ptr, 0, filename, lineno);
return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
}
}
break;
@@ -476,7 +441,7 @@ ZEND_API int _mem_block_check(void *ptr, int silent, char *filename, int lineno)
if (!silent) {
zend_debug_alloc_output("Overrun (magic=0x%0.8lX, expected=0x%0.8lX)\n", p->magic, MEM_BLOCK_START_MAGIC);
} else {
return _mem_block_check(ptr, 0, filename, lineno);
return _mem_block_check(ptr, 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
}
had_problems=1;
valid_beginning=0;
@@ -492,7 +457,7 @@ ZEND_API int _mem_block_check(void *ptr, int silent, char *filename, int lineno)
int i;
if (silent) {
return _mem_block_check(ptr, 0, filename, lineno);
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(mem_header)+p->size+PLATFORM_PADDING;
@@ -534,7 +499,7 @@ ZEND_API int _mem_block_check(void *ptr, int silent, char *filename, int lineno)
}
ZEND_API void _full_mem_check(int silent, char *filename, uint lineno)
ZEND_API void _full_mem_check(int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
mem_header *p;
int errors=0;
@@ -544,31 +509,27 @@ ZEND_API void _full_mem_check(int silent, char *filename, uint lineno)
zend_debug_alloc_output("------------------------------------------------\n");
zend_debug_alloc_output("Full Memory Check at %s:%d\n", filename, lineno);
zend_debug_alloc_output("Full Memory Check at %s:%d\n" ZEND_FILE_LINE_RELAY_CC);
while (p) {
if (!_mem_block_check((void *)((char *)p + sizeof(mem_header) + PLATFORM_PADDING), (silent?2:3), filename, lineno)) {
if (!_mem_block_check((void *)((char *)p + sizeof(mem_header) + PLATFORM_PADDING), (silent?2:3) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC)) {
errors++;
}
p = p->pNext;
}
zend_debug_alloc_output("End of full memory check %s:%d (%d errors)\n", filename, lineno, errors);
zend_debug_alloc_output("End of full memory check %s:%d (%d errors)\n" ZEND_FILE_LINE_RELAY_CC, errors);
zend_debug_alloc_output("------------------------------------------------\n");
}
#endif
#if ZEND_DEBUG
ZEND_API void _persist_alloc(void *ptr, char *filename, uint lineno)
#else
ZEND_API void _persist_alloc(void *ptr)
#endif
ZEND_API void _persist_alloc(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
{
mem_header *p = (mem_header *) ((char *)ptr-sizeof(mem_header)-PLATFORM_PADDING);
ALS_FETCH();
#if ZEND_DEBUG
_mem_block_check(ptr, 1, filename, lineno);
_mem_block_check(ptr, 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
#endif
HANDLE_BLOCK_INTERRUPTIONS();
+37 -39
View File
@@ -23,6 +23,8 @@
#include <stdio.h>
#include "zend_globals_macros.h"
#define MEM_BLOCK_START_MAGIC 0x7312F8DCL
#define MEM_BLOCK_END_MAGIC 0x2A8FCC84L
#define MEM_BLOCK_FREED_MAGIC 0x99954317L
@@ -34,6 +36,8 @@ typedef struct _mem_header {
char *filename;
uint lineno;
int reported;
char *orig_filename;
uint orig_lineno;
#endif
struct _mem_header *pNext;
struct _mem_header *pLast;
@@ -58,40 +62,35 @@ ZEND_API char *zend_strndup(const char *s, unsigned int length);
BEGIN_EXTERN_C()
#if ZEND_DEBUG
ZEND_API void *_emalloc(size_t size, char *filename, uint lineno);
ZEND_API void _efree(void *ptr, char *filename, uint lineno);
ZEND_API void *_ecalloc(size_t nmemb, size_t size, char *filename, uint lineno);
ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure, char *filename, uint lineno);
ZEND_API char *_estrdup(const char *s, char *filename, uint lineno);
ZEND_API char *_estrndup(const char *s, unsigned int length, char *filename, uint lineno);
ZEND_API void _persist_alloc(void *ptr, char *filename, uint lineno);
#define emalloc(size) _emalloc((size),__FILE__,__LINE__)
#define efree(ptr) _efree((ptr),__FILE__,__LINE__)
#define ecalloc(nmemb,size) _ecalloc((nmemb),(size),__FILE__,__LINE__)
#define erealloc(ptr,size) _erealloc((ptr),(size),0,__FILE__,__LINE__)
#define erealloc_recoverable(ptr,size) _erealloc((ptr),(size),1,__FILE__,__LINE__)
#define estrdup(s) _estrdup((s),__FILE__,__LINE__)
#define estrndup(s,length) _estrndup((s),(length),__FILE__,__LINE__)
#define persist_alloc(p) _persist_alloc((p),__FILE__,__LINE__)
#else
ZEND_API void *_emalloc(size_t size);
ZEND_API void _efree(void *ptr);
ZEND_API void *_ecalloc(size_t nmemb, size_t size);
ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure);
ZEND_API char *_estrdup(const char *s);
ZEND_API char *_estrndup(const char *s, unsigned int length);
ZEND_API void _persist_alloc(void *ptr);
#define emalloc(size) _emalloc((size))
#define efree(ptr) _efree((ptr))
#define ecalloc(nmemb,size) _ecalloc((nmemb),(size))
#define erealloc(ptr,size) _erealloc((ptr),(size),0)
#define erealloc_recoverable(ptr,size) _erealloc((ptr),(size),1)
#define estrdup(s) _estrdup((s))
#define estrndup(s,length) _estrndup((s),(length))
#define persist_alloc(p) _persist_alloc((p))
#endif
ZEND_API void *_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void *_erealloc(void *ptr, size_t size, int allow_failure ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API char *_estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API char *_estrndup(const char *s, unsigned int length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void _persist_alloc(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
/* Standard wrapper macros */
#define emalloc(size) _emalloc((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define efree(ptr) _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define ecalloc(nmemb,size) _ecalloc((nmemb), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define erealloc(ptr,size) _erealloc((ptr), (size),0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define erealloc_recoverable(ptr,size) _erealloc((ptr), (size),1 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define estrdup(s) _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define estrndup(s,length) _estrndup((s), (length) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define persist_alloc(p) _persist_alloc((p) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
/* Relay wrapper macros */
#define emalloc_rel(size) _emalloc((size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define efree_rel(ptr) _efree((ptr) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define ecalloc_rel(nmemb, size) _ecalloc((nmemb), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define erealloc_rel(ptr, size) _erealloc((ptr), (size), 0 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define erealloc_recoverable_rel(ptr, size) _erealloc((ptr), (size), 1 ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define estrdup_rel(s) _estrdup((s) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define estrndup_rel(s, length) _estrndup((s), (length) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
#define persist_alloc_rel(p) _persist_alloc((p) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC)
/* Selective persistent/non persistent allocation macros */
#define pemalloc(size,persistent) ((persistent)?malloc(size):emalloc(size))
#define pefree(ptr,persistent) ((persistent)?free(ptr):efree(ptr))
#define pecalloc(nmemb,size,persistent) ((persistent)?calloc((nmemb),(size)):ecalloc((nmemb),(size)))
@@ -104,15 +103,14 @@ ZEND_API void _persist_alloc(void *ptr);
ZEND_API int zend_set_memory_limit(unsigned int memory_limit);
ZEND_API void start_memory_manager(void);
ZEND_API void start_memory_manager(ALS_D);
ZEND_API void shutdown_memory_manager(int silent, int clean_cache);
#if ZEND_DEBUG
ZEND_API int _mem_block_check(void *ptr, int silent, char *filename, int lineno);
ZEND_API void _full_mem_check(int silent, char *filename, uint lineno);
#define mem_block_check(ptr, silent) _mem_block_check(ptr, silent, __FILE__, __LINE__)
#define mem_block_check(ptr, silent) _mem_block_check(ptr, silent, __FILE__, __LINE__)
#define full_mem_check(silent) _full_mem_check(silent, __FILE__, __LINE__)
ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
ZEND_API void _full_mem_check(int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
#define mem_block_check(ptr, silent) _mem_block_check(ptr, silent ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#define full_mem_check(silent) _full_mem_check(silent ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
#else
#define mem_block_check(type, ptr, silent)
#define full_mem_check(silent)
+423
View File
@@ -0,0 +1,423 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998, 1999 Andi Gutmans, Zeev Suraski |
+----------------------------------------------------------------------+
| This source file is subject to version 0.91 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_91.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#include "zend.h"
#include "zend_API.h"
#include "zend_builtin_functions.h"
#include "zend_operators.h"
#include "zend_variables.h"
#include "zend_constants.h"
static ZEND_FUNCTION(zend_version);
static ZEND_FUNCTION(func_num_args);
static ZEND_FUNCTION(func_get_arg);
static ZEND_FUNCTION(func_get_args);
static ZEND_FUNCTION(strlen);
static ZEND_FUNCTION(strcmp);
static ZEND_FUNCTION(strcasecmp);
static ZEND_FUNCTION(each);
static ZEND_FUNCTION(error_reporting);
static ZEND_FUNCTION(define);
static ZEND_FUNCTION(defined);
static ZEND_FUNCTION(get_class);
static ZEND_FUNCTION(get_parent_class);
static ZEND_FUNCTION(method_exists);
static ZEND_FUNCTION(leak);
extern unsigned char first_arg_force_ref[];
static zend_function_entry builtin_functions[] = {
ZEND_FE(zend_version, NULL)
ZEND_FE(func_num_args, NULL)
ZEND_FE(func_get_arg, NULL)
ZEND_FE(func_get_args, NULL)
ZEND_FE(strlen, NULL)
ZEND_FE(strcmp, NULL)
ZEND_FE(strcasecmp, NULL)
ZEND_FE(each, first_arg_force_ref)
ZEND_FE(error_reporting, NULL)
ZEND_FE(define, NULL)
ZEND_FE(defined, NULL)
ZEND_FE(get_class, NULL)
ZEND_FE(get_parent_class, NULL)
ZEND_FE(method_exists, NULL)
ZEND_FE(leak, NULL)
{ NULL, NULL, NULL }
};
int zend_startup_builtin_functions()
{
return zend_register_functions(builtin_functions, NULL);
}
ZEND_FUNCTION(zend_version)
{
RETURN_STRINGL(ZEND_VERSION, sizeof(ZEND_VERSION)-1, 1);
}
ZEND_FUNCTION(func_num_args)
{
void **p;
int arg_count;
ELS_FETCH();
p = EG(argument_stack).top_element-1;
arg_count = (ulong) *p; /* this is the amount of arguments passed to func_num_args(); */
p = EG(argument_stack).top_element-1-arg_count-1;
if (p>=EG(argument_stack).elements) {
RETURN_LONG((ulong) *p);
} else {
zend_error(E_WARNING, "func_num_args(): Called from the global scope - no function context");
RETURN_LONG(-1);
}
}
ZEND_FUNCTION(func_get_arg)
{
void **p;
int arg_count;
zval **z_requested_offset;
zval *arg;
long requested_offset;
ELS_FETCH();
if (ARG_COUNT(ht)!=1 || getParametersEx(1, &z_requested_offset)==FAILURE) {
RETURN_FALSE;
}
convert_to_long_ex(z_requested_offset);
requested_offset = (*z_requested_offset)->value.lval;
p = EG(argument_stack).top_element-1;
arg_count = (ulong) *p; /* this is the amount of arguments passed to func_num_args(); */
p = EG(argument_stack).top_element-1-arg_count-1;
if (p<EG(argument_stack).elements) {
zend_error(E_WARNING, "func_get_arg(): Called from the global scope - no function context");
RETURN_FALSE;
}
arg_count = (ulong) *p;
if (requested_offset>arg_count) {
zend_error(E_WARNING, "func_get_arg(): Only %d arguments passed to function (argument %d requested)", arg_count, requested_offset);
RETURN_FALSE;
}
arg = *(p-(arg_count-requested_offset));
*return_value = *arg;
zval_copy_ctor(return_value);
}
ZEND_FUNCTION(func_get_args)
{
void **p;
int arg_count;
int i;
ELS_FETCH();
p = EG(argument_stack).top_element-1;
arg_count = (ulong) *p; /* this is the amount of arguments passed to func_num_args(); */
p = EG(argument_stack).top_element-1-arg_count-1;
if (p<EG(argument_stack).elements) {
zend_error(E_WARNING, "func_get_args(): Called from the global scope - no function context");
RETURN_FALSE;
}
arg_count = (ulong) *p;
array_init(return_value);
for (i=0; i<arg_count; i++) {
zval *element;
element = (zval *) emalloc(sizeof(zval));
*element = **((zval **) (p-(arg_count-i)));
zval_copy_ctor(element);
INIT_PZVAL(element);
zend_hash_next_index_insert(return_value->value.ht, &element, sizeof(zval *), NULL);
}
}
/* {{{ proto int strlen(string str)
Get string length */
ZEND_FUNCTION(strlen)
{
zval **str;
if (ARG_COUNT(ht) != 1 || getParametersEx(1, &str) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string_ex(str);
RETVAL_LONG((*str)->value.str.len);
}
/* }}} */
/* {{{ proto int strcmp(string str1, string str2)
Binary safe string comparison */
ZEND_FUNCTION(strcmp)
{
zval **s1, **s2;
if (ARG_COUNT(ht) != 2 || getParametersEx(2, &s1, &s2) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string_ex(s1);
convert_to_string_ex(s2);
RETURN_LONG(zend_binary_strcmp(*s1,*s2));
}
/* }}} */
/* {{{ proto int strcasecmp(string str1, string str2)
Binary safe case-insensitive string comparison */
ZEND_FUNCTION(strcasecmp)
{
zval **s1, **s2;
if (ARG_COUNT(ht)!=2 || getParametersEx(2, &s1, &s2) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string_ex(s1);
convert_to_string_ex(s2);
RETURN_LONG(zend_binary_strcasecmp(*s1, *s2));
}
/* }}} */
ZEND_FUNCTION(each)
{
zval **array,*entry,**entry_ptr, *tmp;
char *string_key;
ulong num_key;
zval **inserted_pointer;
HashTable *target_hash;
if (ARG_COUNT(ht) != 1 || getParametersEx(1, &array) == FAILURE) {
WRONG_PARAM_COUNT;
}
target_hash = HASH_OF(*array);
if (!target_hash) {
zend_error(E_WARNING,"Variable passed to each() is not an array or object");
return;
}
if (zend_hash_get_current_data(target_hash, (void **) &entry_ptr)==FAILURE) {
RETURN_FALSE;
}
array_init(return_value);
entry = *entry_ptr;
/* add value elements */
if (entry->is_ref) {
tmp = (zval *)emalloc(sizeof(zval));
*tmp = *entry;
zval_copy_ctor(tmp);
tmp->is_ref=0;
tmp->refcount=0;
entry=tmp;
}
zend_hash_index_update(return_value->value.ht, 1, &entry, sizeof(zval *), NULL);
entry->refcount++;
zend_hash_update_ptr(return_value->value.ht, "value", sizeof("value"), entry, sizeof(zval *), NULL);
entry->refcount++;
/* add the key elements */
switch (zend_hash_get_current_key(target_hash, &string_key, &num_key)) {
case HASH_KEY_IS_STRING:
add_get_index_string(return_value,0,string_key,(void **) &inserted_pointer,0);
break;
case HASH_KEY_IS_LONG:
add_get_index_long(return_value,0,num_key, (void **) &inserted_pointer);
break;
}
zend_hash_update(return_value->value.ht, "key", sizeof("key"), inserted_pointer, sizeof(zval *), NULL);
(*inserted_pointer)->refcount++;
zend_hash_move_forward(target_hash);
}
ZEND_FUNCTION(error_reporting)
{
zval **arg;
int old_error_reporting;
ELS_FETCH();
old_error_reporting = EG(error_reporting);
switch (ARG_COUNT(ht)) {
case 0:
break;
case 1:
if (getParametersEx(1,&arg) == FAILURE) {
RETURN_FALSE;
}
convert_to_long_ex(arg);
EG(error_reporting)=(*arg)->value.lval;
break;
default:
WRONG_PARAM_COUNT;
break;
}
RETVAL_LONG(old_error_reporting);
}
ZEND_FUNCTION(define)
{
zval **var, **val, **non_cs;
int case_sensitive;
zend_constant c;
ELS_FETCH();
switch(ARG_COUNT(ht)) {
case 2:
if (getParametersEx(2, &var, &val)==FAILURE) {
RETURN_FALSE;
}
case_sensitive = CONST_CS;
break;
case 3:
if (getParametersEx(3, &var, &val, &non_cs)==FAILURE) {
RETURN_FALSE;
}
convert_to_long_ex(non_cs);
if ((*non_cs)->value.lval) {
case_sensitive = 0;
} else {
case_sensitive = CONST_CS;
}
break;
default:
WRONG_PARAM_COUNT;
break;
}
switch((*val)->type) {
case IS_LONG:
case IS_DOUBLE:
case IS_STRING:
case IS_BOOL:
case IS_RESOURCE:
break;
default:
zend_error(E_WARNING,"Constants may only evaluate to scalar values");
RETURN_FALSE;
break;
}
convert_to_string_ex(var);
c.value = **val;
zval_copy_ctor(&c.value);
c.flags = case_sensitive | ~CONST_PERSISTENT; /* 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;
}
ZEND_FUNCTION(defined)
{
zval **var;
zval c;
if (ARG_COUNT(ht)!=1 || getParametersEx(1, &var)==FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string_ex(var);
if (zend_get_constant((*var)->value.str.val, (*var)->value.str.len, &c)) {
zval_dtor(&c);
RETURN_LONG(1);
} else {
RETURN_LONG(0);
}
}
/* {{{ proto string get_class(object object)
Retrieves the class name ...
*/
ZEND_FUNCTION(get_class)
{
zval **arg;
if (ARG_COUNT(ht)!=1 || getParametersEx(1, &arg)==FAILURE) {
RETURN_FALSE;
}
if ((*arg)->type != IS_OBJECT) {
RETURN_FALSE;
}
RETURN_STRINGL((*arg)->value.obj.ce->name, (*arg)->value.obj.ce->name_length, 1);
}
/* }}} */
/* {{{ proto string get_parent_class(object object)
Retrieves the parent class name ...
*/
ZEND_FUNCTION(get_parent_class)
{
zval **arg;
if (ARG_COUNT(ht)!=1 || getParametersEx(1, &arg)==FAILURE) {
RETURN_FALSE;
}
if (((*arg)->type != IS_OBJECT) || !(*arg)->value.obj.ce->parent) {
RETURN_FALSE;
}
RETURN_STRINGL((*arg)->value.obj.ce->parent->name, (*arg)->value.obj.ce->parent->name_length, 1);
}
/* }}} */
/* {{{ proto bool method_exists(object object, string method)
Checks if the class method exists ...
*/
ZEND_FUNCTION(method_exists)
{
zval **arg1, **arg2;
if (ARG_COUNT(ht)!=2 || getParametersEx(2, &arg1, &arg2)==FAILURE) {
RETURN_FALSE;
}
if ((*arg1)->type != IS_OBJECT) {
RETURN_FALSE;
}
convert_to_string_ex(arg2);
if(zend_hash_exists(&(*arg1)->value.obj.ce->function_table, (*arg2)->value.str.val, (*arg2)->value.str.len+1)) {
RETURN_TRUE;
} else {
RETURN_FALSE;
}
}
/* }}} */
ZEND_FUNCTION(leak)
{
int leakbytes=3;
zval **leak;
if (ARG_COUNT(ht)>=1) {
if (getParametersEx(1, &leak)==SUCCESS) {
convert_to_long_ex(leak);
leakbytes = (*leak)->value.lval;
}
}
emalloc(leakbytes);
}
@@ -5,7 +5,7 @@
| Copyright (c) 1998, 1999 Andi Gutmans, Zeev Suraski |
+----------------------------------------------------------------------+
| This source file is subject to version 0.91 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| 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_91.txt. |
| If you did not receive a copy of the Zend license and are unable to |
@@ -17,43 +17,10 @@
+----------------------------------------------------------------------+
*/
#ifndef _CONFIG_UNIX_H
#define _CONFIG_UNIX_H
#define ZEND_API
#ifndef _ZEND_BUILTIN_FUNCTIONS_H
#define _ZEND_BUILTIN_FUNCTIONS_H
#include <stdlib.h>
int zend_startup_builtin_functions();
#if HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#if HAVE_STRING_H
#include <string.h>
#else
#include <strings.h>
#endif
#if HAVE_LIBDL
# include <dlfcn.h>
# define DL_LOAD(libname) dlopen(libname, RTLD_NOW)
# define DL_UNLOAD dlclose
# define DL_FETCH_SYMBOL dlsym
# define DL_HANDLE void *
# define ZEND_EXTENSIONS_SUPPORT 1
#else
# define DL_HANDLE void *
# define ZEND_EXTENSIONS_SUPPORT 0
#endif
#if BROKEN_SPRINTF
int zend_sprintf(char *buffer, const char *format, ...);
#else
# define zend_sprintf sprintf
#endif
#if ZEND_DEBUG
# define inline
#endif
#endif /* _CONFIG_UNIX_H */
#endif /* _ZEND_BUILTIN_FUNCTIONS_H */
+260 -83
View File
@@ -55,11 +55,34 @@ static void free_filename(void *p)
}
static void build_runtime_defined_function_key(zval *result, zval *name, zend_op *opline)
{
char lineno_buf[32];
uint lineno_len;
char *filename;
lineno_len = zend_sprintf(lineno_buf, "%d", opline->lineno);
if (opline->filename) {
filename = opline->filename;
} else {
filename = "-";
}
/* NULL, name length, filename length, line number length */
result->value.str.len = 1+name->value.str.len+strlen(filename)+lineno_len+1;
result->value.str.val = (char *) emalloc(result->value.str.len+1);
sprintf(result->value.str.val, "%c%s%s%s", '\0', name->value.str.val, filename, lineno_buf);
result->type = IS_STRING;
result->refcount = 1;
}
void init_compiler(CLS_D ELS_DC)
{
zend_stack_init(&CG(bp_stack));
zend_stack_init(&CG(function_call_stack));
zend_stack_init(&CG(switch_cond_stack));
zend_stack_init(&CG(foreach_copy_stack));
zend_stack_init(&CG(object_stack));
CG(active_class_entry) = NULL;
zend_llist_init(&CG(list_llist), sizeof(list_llist_element), NULL, 0);
@@ -80,6 +103,7 @@ void shutdown_compiler(CLS_D)
zend_stack_destroy(&CG(bp_stack));
zend_stack_destroy(&CG(function_call_stack));
zend_stack_destroy(&CG(switch_cond_stack));
zend_stack_destroy(&CG(foreach_copy_stack));
zend_stack_destroy(&CG(object_stack));
zend_llist_destroy(&CG(filenames_list));
zend_hash_apply(CG(function_table), (int (*)(void *)) is_not_internal_function);
@@ -88,13 +112,14 @@ void shutdown_compiler(CLS_D)
}
ZEND_API void zend_set_compiled_filename(char *new_compiled_filename)
ZEND_API char *zend_set_compiled_filename(char *new_compiled_filename)
{
char *p = estrdup(new_compiled_filename);
CLS_FETCH();
zend_llist_add_element(&CG(filenames_list), &p);
CG(compiled_filename) = p;
return p;
}
@@ -171,28 +196,40 @@ void do_fetch_globals(znode *varname CLS_DC)
}
}
void fetch_simple_variable(znode *result, znode *varname, int bp CLS_DC)
void fetch_simple_variable_ex(znode *result, znode *varname, int bp, int op CLS_DC)
{
int next_op_number = get_next_op_number(CG(active_op_array));
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
zend_op opline;
zend_op *opline_ptr;
zend_llist *fetch_list_ptr;
opline->opcode = ZEND_FETCH_W; /* the default mode must be Write, since fetch_simple_variable() is used to define function arguments */
opline->result.op_type = IS_VAR;
opline->result.u.EA.type = 0;
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->op1 = *varname;
*result = opline->result;
SET_UNUSED(opline->op2);
opline->op2.u.constant.value.lval = ZEND_FETCH_LOCAL;
if (bp) {
opline_ptr = &opline;
init_op(opline_ptr CLS_CC);
} else {
opline_ptr = get_next_op(CG(active_op_array) CLS_CC);
}
opline_ptr->opcode = op;
opline_ptr->result.op_type = IS_VAR;
opline_ptr->result.u.EA.type = 0;
opline_ptr->result.u.var = get_temporary_variable(CG(active_op_array));
opline_ptr->op1 = *varname;
*result = opline_ptr->result;
SET_UNUSED(opline_ptr->op2);
opline_ptr->op2.u.fetch_type = ZEND_FETCH_LOCAL;
if (bp) {
zend_stack_top(&CG(bp_stack), (void **) &fetch_list_ptr);
zend_llist_add_element(fetch_list_ptr, &next_op_number);
zend_llist_add_element(fetch_list_ptr, opline_ptr);
}
}
void fetch_simple_variable(znode *result, znode *varname, int bp CLS_DC)
{
/* the default mode must be Write, since fetch_simple_variable() is used to define function arguments */
fetch_simple_variable_ex(result, varname, bp, ZEND_FETCH_W CLS_CC);
}
void fetch_array_begin(znode *result, znode *varname, znode *first_dim CLS_DC)
{
@@ -204,21 +241,21 @@ void fetch_array_begin(znode *result, znode *varname, znode *first_dim CLS_DC)
void fetch_array_dim(znode *result, znode *parent, znode *dim CLS_DC)
{
int next_op_number = get_next_op_number(CG(active_op_array));
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
zend_op opline;
zend_llist *fetch_list_ptr;
opline->opcode = ZEND_FETCH_DIM_W; /* the backpatching routine assumes W */
opline->result.op_type = IS_VAR;
opline->result.u.EA.type = 0;
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->op1 = *parent;
opline->op2 = *dim;
opline->extended_value = ZEND_FETCH_STANDARD;
*result = opline->result;
init_op(&opline CLS_CC);
opline.opcode = ZEND_FETCH_DIM_W; /* the backpatching routine assumes W */
opline.result.op_type = IS_VAR;
opline.result.u.EA.type = 0;
opline.result.u.var = get_temporary_variable(CG(active_op_array));
opline.op1 = *parent;
opline.op2 = *dim;
opline.extended_value = ZEND_FETCH_STANDARD;
*result = opline.result;
zend_stack_top(&CG(bp_stack), (void **) &fetch_list_ptr);
zend_llist_add_element(fetch_list_ptr, &next_op_number);
zend_llist_add_element(fetch_list_ptr, &opline);
}
@@ -459,23 +496,27 @@ void do_begin_variable_parse(CLS_D)
{
zend_llist fetch_list;
zend_llist_init(&fetch_list, sizeof(int), NULL, 0);
/* 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));
}
void do_end_variable_parse(int type CLS_DC)
void do_end_variable_parse(int type, int arg_offset CLS_DC)
{
zend_llist *fetch_list_ptr;
zend_llist_element *le;
zend_op *opline;
zend_op *opline, *opline_ptr;
zend_stack_top(&CG(bp_stack), (void **) &fetch_list_ptr);
le = fetch_list_ptr->head;
while (le) {
opline = &CG(active_op_array)->opcodes[*((int *) le->data)];
opline_ptr = (zend_op *)le->data;
opline = get_next_op(CG(active_op_array) CLS_CC);
memcpy(opline, opline_ptr, sizeof(zend_op));
switch (type) {
case BP_VAR_R:
if (opline->opcode == ZEND_FETCH_DIM_W && opline->op2.op_type == IS_UNUSED) {
@@ -490,6 +531,11 @@ void do_end_variable_parse(int type CLS_DC)
break;
case BP_VAR_IS:
opline->opcode += 6; /* 3+3 */
break;
case BP_VAR_FUNC_ARG:
opline->opcode += 9; /* 3+3+3 */
opline->extended_value = arg_offset;
break;
}
le = le->next;
}
@@ -588,7 +634,6 @@ void do_free(znode *op1 CLS_DC)
&& opline->result.u.var == op1->u.var) {
opline->result.u.EA.type |= EXT_TYPE_UNUSED;
} else {
/* This should be an object instanciation
* Find JMP_NO_CTOR, mark the preceding ASSIGN and the
* proceeding INIT_FCALL_BY_NAME as unused
@@ -627,14 +672,14 @@ void do_begin_function_declaration(znode *function_token, znode *function_name,
opline->opcode = ZEND_DECLARE_FUNCTION_OR_CLASS;
opline->op1.op_type = IS_CONST;
opline->op1.u.constant.type = IS_LONG;
opline->op1.u.constant.value.lval = zend_hash_next_free_element(CG(function_table));
build_runtime_defined_function_key(&opline->op1.u.constant, &function_name->u.constant, opline);
opline->op2.op_type = IS_CONST;
opline->op2.u.constant.type = IS_STRING;
opline->op2.u.constant.value.str.val = estrndup(name, name_len);
opline->op2.u.constant.value.str.len = name_len;
opline->op2.u.constant.refcount = 1;
opline->extended_value = ZEND_DECLARE_FUNCTION;
zend_hash_next_index_insert(CG(function_table), &op_array, sizeof(zend_op_array), (void **) &CG(active_op_array));
zend_hash_update(CG(function_table), opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, &op_array, sizeof(zend_op_array), (void **) &CG(active_op_array));
}
if (CG(extended_info)) {
@@ -645,6 +690,19 @@ void do_begin_function_declaration(znode *function_token, znode *function_name,
SET_UNUSED(opline->op1);
SET_UNUSED(opline->op2);
}
{
/* Push a seperator to the switch and foreach stacks */
zend_switch_entry switch_entry;
switch_entry.cond.op_type = IS_UNUSED;
switch_entry.default_case = 0;
switch_entry.control_var = 0;
zend_stack_push(&CG(switch_cond_stack), (void *) &switch_entry, sizeof(switch_entry));
zend_stack_push(&CG(foreach_copy_stack), (void *) &switch_entry.cond, sizeof(znode));
}
}
@@ -652,6 +710,10 @@ void do_end_function_declaration(znode *function_token CLS_DC)
{
pass_two(CG(active_op_array));
CG(active_op_array) = function_token->u.op_array;
/* Pop the switch and foreach seperators */
zend_stack_del_top(&CG(switch_cond_stack));
zend_stack_del_top(&CG(foreach_copy_stack));
}
@@ -684,7 +746,7 @@ void do_receive_arg(int op, znode *var, znode *offset, znode *initialization, un
}
void do_begin_function_call(znode *function_name CLS_DC)
int do_begin_function_call(znode *function_name CLS_DC)
{
zend_function *function;
@@ -694,7 +756,7 @@ void do_begin_function_call(znode *function_name CLS_DC)
zval_copy_ctor(&tmp.u.constant);
do_begin_dynamic_function_call(&tmp CLS_CC);
return;
return 1; /* Dynamic */
}
switch (function->type) {
@@ -711,6 +773,7 @@ void do_begin_function_call(znode *function_name CLS_DC)
}
break;
}
return 0;
}
@@ -749,12 +812,12 @@ 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 CLS_DC)
void do_end_function_call(znode *function_name, znode *result, znode *argument_list, int is_method, int is_dynamic_fcall CLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
ELS_FETCH();
if (function_name->op_type==IS_CONST && !is_method) {
if (function_name->op_type==IS_CONST && !is_method && !is_dynamic_fcall) {
opline->opcode = ZEND_DO_FCALL;
} else {
opline->opcode = ZEND_DO_FCALL_BY_NAME;
@@ -772,7 +835,7 @@ void do_end_function_call(znode *function_name, znode *result, znode *argument_l
void do_pass_param(znode *param, int op, int offset CLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
zend_op *opline;
unsigned char *arg_types;
int original_op=op;
zend_function **function_ptr_ptr, *function_ptr;
@@ -781,10 +844,8 @@ void do_pass_param(znode *param, int op, int offset CLS_DC)
function_ptr = *function_ptr_ptr;
if (function_ptr) {
arg_types = function_ptr->common.arg_types;
opline->extended_value = ZEND_DO_FCALL;
} else {
arg_types = NULL;
opline->extended_value = ZEND_DO_FCALL_BY_NAME;
}
if (op == ZEND_SEND_VAL) {
@@ -798,8 +859,9 @@ void do_pass_param(znode *param, int op, int offset CLS_DC)
break;
}
}
if (arg_types && offset<=arg_types[0]
&& arg_types[offset]==BYREF_FORCE) {
if (ARG_SHOULD_BE_SENT_BY_REF(offset, 1, arg_types)) {
/* change to passing by reference */
switch (param->op_type) {
case IS_VAR:
@@ -815,17 +877,23 @@ void do_pass_param(znode *param, int op, int offset CLS_DC)
switch(op) {
case ZEND_SEND_VAR:
if (function_ptr) {
do_end_variable_parse(BP_VAR_R CLS_CC);
do_end_variable_parse(BP_VAR_R, 0 CLS_CC);
} else {
do_end_variable_parse(BP_VAR_W CLS_CC);
do_end_variable_parse(BP_VAR_FUNC_ARG, offset CLS_CC);
}
break;
case ZEND_SEND_REF:
do_end_variable_parse(BP_VAR_W CLS_CC);
do_end_variable_parse(BP_VAR_W, 0 CLS_CC);
break;
}
}
opline = get_next_op(CG(active_op_array) CLS_CC);
if (function_ptr) {
opline->extended_value = ZEND_DO_FCALL;
} else {
opline->extended_value = ZEND_DO_FCALL_BY_NAME;
}
opline->opcode = op;
opline->op1 = *param;
opline->op2.u.opline_num = offset;
@@ -833,9 +901,51 @@ void do_pass_param(znode *param, int op, int offset CLS_DC)
}
static int generate_free_switch_expr(zend_switch_entry *switch_entry CLS_DC)
{
zend_op *opline;
if (switch_entry->cond.op_type == IS_UNUSED) {
return 1;
}
opline = get_next_op(CG(active_op_array) CLS_CC);
opline->opcode = ZEND_SWITCH_FREE;
opline->op1 = switch_entry->cond;
SET_UNUSED(opline->op2);
return 0;
}
static int generate_free_foreach_copy(znode *foreach_copy CLS_DC)
{
zend_op *opline;
if (foreach_copy->op_type == IS_UNUSED) {
return 1;
}
opline = get_next_op(CG(active_op_array) CLS_CC);
opline->opcode = ZEND_FREE;
opline->op1 = *foreach_copy;
SET_UNUSED(opline->op2);
return 0;
}
void do_return(znode *expr CLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
zend_op *opline;
#ifdef ZTS
zend_stack_apply_with_argument(&CG(switch_cond_stack), (int (*)(void *element, void *)) generate_free_switch_expr, ZEND_STACK_APPLY_TOPDOWN CLS_CC);
zend_stack_apply_with_argument(&CG(foreach_copy_stack), (int (*)(void *element, void *)) generate_free_foreach_copy, ZEND_STACK_APPLY_TOPDOWN CLS_CC);
#else
zend_stack_apply(&CG(switch_cond_stack), (int (*)(void *element)) generate_free_switch_expr, ZEND_STACK_APPLY_TOPDOWN);
zend_stack_apply(&CG(foreach_copy_stack), (int (*)(void *element)) generate_free_foreach_copy, ZEND_STACK_APPLY_TOPDOWN);
#endif
opline = get_next_op(CG(active_op_array) CLS_CC);
opline->opcode = ZEND_RETURN;
if (expr) {
@@ -857,26 +967,52 @@ static void function_add_ref(zend_function *function)
}
ZEND_API void do_bind_function_or_class(zend_op *opline, HashTable *function_table, HashTable *class_table)
static void do_inherit_parent_constructor(zend_class_entry *ce)
{
if (ce->parent
&& !zend_hash_exists(&ce->function_table, ce->name, ce->name_length+1)) {
zend_function *function;
if (zend_hash_find(&ce->parent->function_table, ce->parent->name, ce->parent->name_length+1, (void **) &function)==SUCCESS) {
/* inherit parent's constructor */
zend_hash_update(&ce->function_table, ce->name, ce->name_length+1, function, sizeof(zend_function), NULL);
function_add_ref(function);
}
}
}
ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_table, HashTable *class_table, int compile_time)
{
switch (opline->extended_value) {
case ZEND_DECLARE_FUNCTION: {
zend_function *function;
zend_hash_index_find(function_table, opline->op1.u.constant.value.lval, (void **) &function);
zend_hash_find(function_table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, (void **) &function);
(*function->op_array.refcount)++;
if (zend_hash_add(function_table, opline->op2.u.constant.value.str.val, opline->op2.u.constant.value.str.len+1, function, sizeof(zend_function), NULL)==FAILURE) {
zend_error(E_COMPILE_ERROR, "Cannot redeclare %s()", opline->op2.u.constant.value.str.val);
if (!compile_time) {
zend_error(E_ERROR, "Cannot redeclare %s()", opline->op2.u.constant.value.str.val);
}
return FAILURE;
} else {
return SUCCESS;
}
}
break;
case ZEND_DECLARE_CLASS: {
zend_class_entry *ce;
zend_hash_index_find(class_table, opline->op1.u.constant.value.lval, (void **) &ce);
zend_hash_find(class_table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, (void **) &ce);
(*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) {
zend_error(E_COMPILE_ERROR, "Cannot redeclare class %s", opline->op2.u.constant.value.str.val);
(*ce->refcount)--;
if (!compile_time) {
zend_error(E_ERROR, "Cannot redeclare class %s", opline->op2.u.constant.value.str.val);
}
return FAILURE;
} else {
return SUCCESS;
}
}
break;
@@ -886,49 +1022,72 @@ ZEND_API void do_bind_function_or_class(zend_op *opline, HashTable *function_tab
zend_function tmp_zend_function;
zval *tmp;
zend_hash_index_find(class_table, opline->op1.u.constant.value.lval, (void **) &ce);
zend_hash_find(class_table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, (void **) &ce);
(*ce->refcount)++;
/* 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_COMPILE_ERROR, "Invalid runtime class entry");
zend_error(E_CORE_ERROR, "Invalid runtime class entry");
}
*class_name++ = 0;
/* Obtain parent class */
if (zend_hash_find(class_table, parent_name, strlen(parent_name)+1, (void **) &parent_ce)==FAILURE) {
zend_error(E_COMPILE_ERROR, "Class %s: Cannot inherit from undefined class %s", class_name, parent_name);
if (!compile_time) {
zend_error(E_ERROR, "Class %s: Cannot inherit from undefined class %s", class_name, parent_name);
}
(*ce->refcount)--;
*(class_name-1) = ':';
return FAILURE;
}
/* Perform inheritence */
zend_hash_copy(&ce->function_table, &parent_ce->function_table, (void (*)(void *)) function_add_ref, &tmp_zend_function, sizeof(zend_function));
zend_hash_copy(&ce->default_properties, &parent_ce->default_properties, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *));
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);
/* Register the derived class */
if (zend_hash_add(class_table, class_name, strlen(class_name)+1, ce, sizeof(zend_class_entry), NULL)==FAILURE) {
zend_error(E_COMPILE_ERROR, "Cannot redeclare class %s", opline->op2.u.constant.value.str.val);
if (!compile_time) {
zend_error(E_ERROR, "Cannot redeclare class %s", opline->op2.u.constant.value.str.val);
}
(*ce->refcount)--;
zend_hash_destroy(&ce->function_table);
zend_hash_destroy(&ce->default_properties);
return FAILURE;
}
return SUCCESS;
}
break;
}
return FAILURE;
}
void do_early_binding(CLS_D)
{
zend_op *opline = &CG(active_op_array)->opcodes[CG(active_op_array)->last-1];
HashTable *table;
do_bind_function_or_class(opline, CG(function_table), CG(class_table));
if (do_bind_function_or_class(opline, CG(function_table), CG(class_table), 1)==FAILURE) {
return;
}
switch (opline->extended_value) {
case ZEND_DECLARE_FUNCTION:
zend_hash_index_del(CG(function_table), opline->op1.u.constant.value.lval);
table = CG(function_table);
break;
case ZEND_DECLARE_CLASS:
zend_hash_index_del(CG(class_table), opline->op1.u.constant.value.lval);
table = CG(class_table);
break;
default:
zend_error(E_COMPILE_ERROR, "Invalid binding type");
return;
}
zend_hash_del(table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len);
zval_dtor(&opline->op1.u.constant);
zval_dtor(&opline->op2.u.constant);
opline->opcode = ZEND_NOP;
SET_UNUSED(opline->op1);
@@ -1096,7 +1255,10 @@ void do_switch_end(znode *case_list CLS_DC)
CG(active_op_array)->current_brk_cont = CG(active_op_array)->brk_cont_array[CG(active_op_array)->current_brk_cont].parent;
/* emit free for the switch condition*/
do_free(&switch_entry_ptr->cond CLS_CC);
opline = get_next_op(CG(active_op_array) CLS_CC);
opline->opcode = ZEND_SWITCH_FREE;
opline->op1 = switch_entry_ptr->cond;
SET_UNUSED(opline->op2);
if (switch_entry_ptr->cond.op_type == IS_CONST) {
zval_dtor(&switch_entry_ptr->cond.u.constant);
}
@@ -1237,9 +1399,12 @@ void do_begin_class_declaration(znode *class_name, znode *parent_class_name CLS_
/* copy default properties */
zend_hash_copy(&CG(class_entry).default_properties, &parent_class->default_properties, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *));
CG(class_entry).parent = parent_class;
zval_dtor(&parent_class_name->u.constant);
} else {
runtime_inheritence = 1;
CG(class_entry).parent = NULL;
}
} else {
CG(class_entry).parent = NULL;
@@ -1251,10 +1416,10 @@ 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;
opline->op1.u.constant.type = IS_LONG;
opline->op1.u.constant.value.lval = zend_hash_next_free_element(CG(class_table));
build_runtime_defined_function_key(&opline->op1.u.constant, &class_name->u.constant, opline);
opline->op2.op_type = IS_CONST;
opline->op2.u.constant.type = IS_STRING;
opline->op2.u.constant.refcount = 1;
if (runtime_inheritence) {
char *full_class_name;
@@ -1266,6 +1431,7 @@ void do_begin_class_declaration(znode *class_name, znode *parent_class_name CLS_
full_class_name[0] = ':';
full_class_name++;
memcpy(full_class_name, CG(class_entry).name, CG(class_entry).name_length);
zval_dtor(&parent_class_name->u.constant);
full_class_name += CG(class_entry).name_length;
full_class_name[0] = 0;
opline->extended_value = ZEND_DECLARE_INHERITED_CLASS;
@@ -1275,12 +1441,13 @@ void do_begin_class_declaration(znode *class_name, znode *parent_class_name CLS_
opline->extended_value = ZEND_DECLARE_CLASS;
}
zend_hash_next_index_insert(CG(class_table), &CG(class_entry), sizeof(zend_class_entry), (void **) &CG(active_class_entry));
zend_hash_update(CG(class_table), opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, &CG(class_entry), sizeof(zend_class_entry), (void **) &CG(active_class_entry));
}
void do_end_class_declaration(CLS_D)
{
do_inherit_parent_constructor(CG(active_class_entry));
CG(active_class_entry) = NULL;
}
@@ -1299,20 +1466,20 @@ void do_declare_property(znode *var_name, znode *value CLS_DC)
void do_fetch_property(znode *result, znode *object, znode *property CLS_DC)
{
int next_op_number = get_next_op_number(CG(active_op_array));
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
zend_op opline;
zend_llist *fetch_list_ptr;
opline->opcode = ZEND_FETCH_OBJ_W; /* the backpatching routine assumes W */
opline->result.op_type = IS_VAR;
opline->result.u.EA.type = 0;
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->op1 = *object;
opline->op2 = *property;
*result = opline->result;
init_op(&opline CLS_CC);
opline.opcode = ZEND_FETCH_OBJ_W; /* the backpatching routine assumes W */
opline.result.op_type = IS_VAR;
opline.result.u.EA.type = 0;
opline.result.u.var = get_temporary_variable(CG(active_op_array));
opline.op1 = *object;
opline.op2 = *property;
*result = opline.result;
zend_stack_top(&CG(bp_stack), (void **) &fetch_list_ptr);
zend_llist_add_element(fetch_list_ptr, &next_op_number);
zend_llist_add_element(fetch_list_ptr, &opline);
}
@@ -1343,8 +1510,8 @@ void do_begin_new_object(znode *new_token, znode *class_name CLS_DC)
opline->op1 = *class_name;
SET_UNUSED(opline->op2);
//*result = opline->result;
//do_assign(result, variable, &opline->result CLS_CC);
/* *result = opline->result;
do_assign(result, variable, &opline->result CLS_CC); */
new_token->u.opline_num = get_next_op_number(CG(active_op_array));
@@ -1372,7 +1539,7 @@ void do_end_new_object(znode *result, znode *class_name, znode *new_token, znode
if (class_name->op_type == IS_CONST) {
zval_copy_ctor(&class_name->u.constant);
}
do_end_function_call(class_name, &ctor_result, argument_list, 1 CLS_CC);
do_end_function_call(class_name, &ctor_result, argument_list, 1, 0 CLS_CC);
do_free(&ctor_result CLS_CC);
CG(active_op_array)->opcodes[new_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array));
@@ -1435,7 +1602,7 @@ void do_shell_exec(znode *result, znode *cmd CLS_DC)
void do_init_array(znode *result, znode *expr, znode *offset CLS_DC)
void do_init_array(znode *result, znode *expr, znode *offset, int is_ref CLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
@@ -1454,10 +1621,11 @@ void do_init_array(znode *result, znode *expr, znode *offset CLS_DC)
SET_UNUSED(opline->op1);
SET_UNUSED(opline->op2);
}
opline->extended_value = is_ref;
}
void do_add_array_element(znode *result, znode *expr, znode *offset CLS_DC)
void do_add_array_element(znode *result, znode *expr, znode *offset, int is_ref CLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
@@ -1469,6 +1637,7 @@ void do_add_array_element(znode *result, znode *expr, znode *offset CLS_DC)
} else {
SET_UNUSED(opline->op2);
}
opline->extended_value = is_ref;
}
@@ -1613,7 +1782,7 @@ void do_fetch_global_or_static_variable(znode *varname, znode *static_assignment
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->op1 = *varname;
SET_UNUSED(opline->op2);
opline->op2.u.constant.value.lval = fetch_type;
opline->op2.u.fetch_type = fetch_type;
if (varname->op_type == IS_CONST) {
zval_copy_ctor(&varname->u.constant);
@@ -1658,10 +1827,13 @@ void do_indirect_references(znode *result, znode *num_references, znode *variabl
{
int i;
for (i=1; i<=num_references->u.constant.value.lval; i++) {
fetch_simple_variable(result, variable, 1 CLS_CC);
do_end_variable_parse(BP_VAR_R, 0 CLS_CC);
for (i=1; i<num_references->u.constant.value.lval; i++) {
fetch_simple_variable_ex(result, variable, 0, ZEND_FETCH_R CLS_CC);
*variable = *result;
}
do_begin_variable_parse(CLS_C);
fetch_simple_variable(result, variable, 1 CLS_CC);
}
@@ -1688,7 +1860,7 @@ void do_isset_or_isempty(int type, znode *result, znode *variable CLS_DC)
{
zend_op *opline;
do_end_variable_parse(BP_VAR_IS CLS_CC);
do_end_variable_parse(BP_VAR_IS, 0 CLS_CC);
opline = get_next_op(CG(active_op_array) CLS_CC);
opline->opcode = ZEND_ISSET_ISEMPTY;
@@ -1713,6 +1885,8 @@ void do_foreach_begin(znode *foreach_token, znode *array, znode *open_brackets_t
SET_UNUSED(opline->op2);
*open_brackets_token = opline->result;
zend_stack_push(&CG(foreach_copy_stack), (void *) &opline->result, sizeof(znode));
/* save the location of the beginning of the loop (array fetching) */
foreach_token->u.opline_num = get_next_op_number(CG(active_op_array));
@@ -1784,6 +1958,7 @@ void do_foreach_end(znode *foreach_token, znode *open_brackets_token CLS_DC)
opline->opcode = ZEND_JMP;
opline->op1.u.opline_num = foreach_token->u.opline_num;
SET_UNUSED(opline->op1);
SET_UNUSED(opline->op2);
CG(active_op_array)->opcodes[foreach_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array));
@@ -1792,6 +1967,8 @@ void do_foreach_end(znode *foreach_token, znode *open_brackets_token CLS_DC)
do_free(open_brackets_token CLS_CC);
zend_stack_del_top(&CG(foreach_copy_stack));
DEC_BPC(CG(active_op_array));
}
+157 -107
View File
@@ -23,8 +23,8 @@
#include "zend.h"
#if HAVE_STDARG_H
#include <stdarg.h>
#ifdef HAVE_STDARG_H
# include <stdarg.h>
#endif
#include "zend_llist.h"
@@ -34,9 +34,9 @@
#define DEBUG_ZEND 0
#ifndef ZTS
#define SUPPORT_INTERACTIVE 1
# define SUPPORT_INTERACTIVE 1
#else
#define SUPPORT_INTERACTIVE 0
# define SUPPORT_INTERACTIVE 0
#endif
#define FREE_PNODE(znode) zval_dtor(&znode->u.constant);
@@ -62,6 +62,7 @@ typedef struct _znode {
int var;
int opline_num;
int fetch_type;
zend_op_array *op_array;
struct {
int var; /* dummy */
@@ -93,6 +94,7 @@ struct _zend_op_array {
int type; /* MUST be the first element of this struct! */
unsigned char *arg_types; /* MUST be the second element of this struct! */
char *function_name; /* MUST be the third element of this struct! */
int *refcount;
@@ -101,7 +103,6 @@ struct _zend_op_array {
int T;
char *function_name;
zend_brk_cont_element *brk_cont_array;
int last_brk_cont;
@@ -117,7 +118,7 @@ struct _zend_op_array {
int backpatch_count;
#endif
void *reserved[4];
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};
@@ -125,9 +126,9 @@ typedef struct _zend_internal_function {
int type; /* MUST be the first element of this struct! */
unsigned char *arg_types; /* MUST be the second element of this struct */
char *function_name; /* MUST be the third element of this struct */
void (*handler)(INTERNAL_FUNCTION_PARAMETERS);
char *function_name;
} zend_internal_function;
@@ -136,6 +137,7 @@ typedef union _zend_function {
struct {
int type; /* never used */
unsigned char *arg_types;
char *function_name;
} common;
zend_op_array op_array;
@@ -146,7 +148,7 @@ typedef union _zend_function {
typedef struct _zend_function_state {
HashTable *function_symbol_table;
zend_function *function;
void *reserved[4];
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
} zend_function_state;
@@ -200,7 +202,7 @@ int lex_scan(zval *zendlval CLS_DC);
void startup_scanner(CLS_D);
void shutdown_scanner(CLS_D);
ZEND_API void zend_set_compiled_filename(char *new_compiled_filename);
ZEND_API char *zend_set_compiled_filename(char *new_compiled_filename);
ZEND_API void zend_restore_compiled_filename(char *original_compiled_filename);
ZEND_API char *zend_get_compiled_filename();
@@ -218,6 +220,7 @@ void do_binary_assign_op(int op, znode *result, znode *op1, znode *op2 CLS_DC);
void do_assign(znode *result, znode *variable, znode *value CLS_DC);
void do_assign_ref(znode *result, znode *lvar, znode *rvar CLS_DC);
void fetch_simple_variable(znode *result, znode *varname, int bp CLS_DC);
void fetch_simple_variable_ex(znode *result, znode *varname, int bp, int op CLS_DC);
void do_indirect_references(znode *result, znode *num_references, znode *variable CLS_DC);
void do_fetch_global_or_static_variable(znode *varname, znode *static_assignment, int fetch_type CLS_DC);
void do_fetch_globals(znode *varname CLS_DC);
@@ -248,7 +251,7 @@ void do_pre_incdec(znode *result, znode *op1, int op CLS_DC);
void do_post_incdec(znode *result, znode *op1, int op CLS_DC);
void do_begin_variable_parse(CLS_D);
void do_end_variable_parse(int type CLS_DC);
void do_end_variable_parse(int type, int arg_offset CLS_DC);
void do_free(znode *op1 CLS_DC);
@@ -260,12 +263,12 @@ void do_add_variable(znode *result, znode *op1, znode *op2 CLS_DC);
void do_begin_function_declaration(znode *function_token, znode *function_name, int is_method CLS_DC);
void do_end_function_declaration(znode *function_token CLS_DC);
void do_receive_arg(int op, znode *var, znode *offset, znode *initialization, unsigned char pass_type CLS_DC);
void do_begin_function_call(znode *function_name CLS_DC);
int do_begin_function_call(znode *function_name CLS_DC);
void do_begin_dynamic_function_call(znode *function_name CLS_DC);
void do_begin_class_member_function_call(znode *class_name, znode *function_name CLS_DC);
void do_end_function_call(znode *function_name, znode *result, znode *argument_list, int is_method CLS_DC);
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 CLS_DC);
ZEND_API void do_bind_function_or_class(zend_op *opline, HashTable *function_table, HashTable *class_table);
ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_table, HashTable *class_table, int compile_time);
void do_early_binding(CLS_D);
void do_pass_param(znode *param, int op, int offset CLS_DC);
@@ -302,8 +305,8 @@ void do_fetch_constant(znode *result, znode *constant_name, int mode CLS_DC);
void do_shell_exec(znode *result, znode *cmd CLS_DC);
void do_init_array(znode *result, znode *expr, znode *offset CLS_DC);
void do_add_array_element(znode *result, znode *expr, znode *offset CLS_DC);
void do_init_array(znode *result, znode *expr, znode *offset, int is_ref CLS_DC);
void do_add_array_element(znode *result, znode *expr, znode *offset, int is_ref CLS_DC);
void do_add_static_array_element(znode *result, znode *offset, znode *expr);
void do_list_init();
void do_list_end(znode *result, znode *expr CLS_DC);
@@ -347,7 +350,7 @@ ZEND_API zend_op_array *compile_files(int mark_as_ref CLS_DC, int file_count, ..
ZEND_API zend_op_array *v_compile_files(int mark_as_ref 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_filename(zval *filename CLS_DC);
ZEND_API inline int open_file_for_scanning(zend_file_handle *file_handle CLS_DC);
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 initial_ops_size);
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);
@@ -362,6 +365,7 @@ void zend_class_add_ref(zend_class_entry *ce);
#define ZEND_CLASS_DTOR (int (*)(void *)) destroy_zend_class
zend_op *get_next_op(zend_op_array *op_array CLS_DC);
void init_op(zend_op *op CLS_DC);
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);
@@ -391,111 +395,116 @@ int zendlex(znode *zendlval CLS_DC);
#define ZEND_BW_NOT 12
#define ZEND_BOOL_NOT 13
#define ZEND_BOOL_XOR 14
#define ZEND_IS_EQUAL 15
#define ZEND_IS_NOT_EQUAL 16
#define ZEND_IS_SMALLER 17
#define ZEND_IS_SMALLER_OR_EQUAL 18
#define ZEND_CAST 19
#define ZEND_QM_ASSIGN 20
#define ZEND_IS_IDENTICAL 15
#define ZEND_IS_EQUAL 16
#define ZEND_IS_NOT_EQUAL 17
#define ZEND_IS_SMALLER 18
#define ZEND_IS_SMALLER_OR_EQUAL 19
#define ZEND_CAST 20
#define ZEND_QM_ASSIGN 21
#define ZEND_ASSIGN_ADD 21
#define ZEND_ASSIGN_SUB 22
#define ZEND_ASSIGN_MUL 23
#define ZEND_ASSIGN_DIV 24
#define ZEND_ASSIGN_MOD 25
#define ZEND_ASSIGN_SL 26
#define ZEND_ASSIGN_SR 27
#define ZEND_ASSIGN_CONCAT 28
#define ZEND_ASSIGN_BW_OR 29
#define ZEND_ASSIGN_BW_AND 30
#define ZEND_ASSIGN_BW_XOR 31
#define ZEND_ASSIGN_ADD 22
#define ZEND_ASSIGN_SUB 23
#define ZEND_ASSIGN_MUL 24
#define ZEND_ASSIGN_DIV 25
#define ZEND_ASSIGN_MOD 26
#define ZEND_ASSIGN_SL 27
#define ZEND_ASSIGN_SR 28
#define ZEND_ASSIGN_CONCAT 29
#define ZEND_ASSIGN_BW_OR 30
#define ZEND_ASSIGN_BW_AND 31
#define ZEND_ASSIGN_BW_XOR 32
#define ZEND_PRE_INC 32
#define ZEND_PRE_DEC 33
#define ZEND_POST_INC 34
#define ZEND_POST_DEC 35
#define ZEND_PRE_INC 33
#define ZEND_PRE_DEC 34
#define ZEND_POST_INC 35
#define ZEND_POST_DEC 36
#define ZEND_ASSIGN 36
#define ZEND_ASSIGN_REF 37
#define ZEND_ASSIGN 37
#define ZEND_ASSIGN_REF 38
#define ZEND_ECHO 38
#define ZEND_PRINT 39
#define ZEND_ECHO 39
#define ZEND_PRINT 40
#define ZEND_JMP 40
#define ZEND_JMPZ 41
#define ZEND_JMPNZ 42
#define ZEND_JMPZNZ 43
#define ZEND_JMPZ_EX 44
#define ZEND_JMPNZ_EX 45
#define ZEND_CASE 46
#define ZEND_BRK 47
#define ZEND_CONT 48
#define ZEND_BOOL 49
#define ZEND_JMP 41
#define ZEND_JMPZ 42
#define ZEND_JMPNZ 43
#define ZEND_JMPZNZ 44
#define ZEND_JMPZ_EX 45
#define ZEND_JMPNZ_EX 46
#define ZEND_CASE 47
#define ZEND_SWITCH_FREE 48
#define ZEND_BRK 49
#define ZEND_CONT 50
#define ZEND_BOOL 51
#define ZEND_INIT_STRING 50
#define ZEND_ADD_CHAR 51
#define ZEND_ADD_STRING 52
#define ZEND_ADD_VAR 53
#define ZEND_INIT_STRING 52
#define ZEND_ADD_CHAR 53
#define ZEND_ADD_STRING 54
#define ZEND_ADD_VAR 55
#define ZEND_BEGIN_SILENCE 54
#define ZEND_END_SILENCE 55
#define ZEND_BEGIN_SILENCE 56
#define ZEND_END_SILENCE 57
#define ZEND_INIT_FCALL_BY_NAME 56
#define ZEND_DO_FCALL 57
#define ZEND_DO_FCALL_BY_NAME 58
#define ZEND_RETURN 59
#define ZEND_INIT_FCALL_BY_NAME 58
#define ZEND_DO_FCALL 59
#define ZEND_DO_FCALL_BY_NAME 60
#define ZEND_RETURN 61
#define ZEND_RECV 60
#define ZEND_RECV_INIT 61
#define ZEND_RECV 62
#define ZEND_RECV_INIT 63
#define ZEND_SEND_VAL 62
#define ZEND_SEND_VAR 63
#define ZEND_SEND_REF 64
#define ZEND_SEND_VAL 64
#define ZEND_SEND_VAR 65
#define ZEND_SEND_REF 66
#define ZEND_NEW 65
#define ZEND_JMP_NO_CTOR 66
#define ZEND_FREE 67
#define ZEND_NEW 67
#define ZEND_JMP_NO_CTOR 68
#define ZEND_FREE 69
#define ZEND_INIT_ARRAY 68
#define ZEND_ADD_ARRAY_ELEMENT 69
#define ZEND_INIT_ARRAY 70
#define ZEND_ADD_ARRAY_ELEMENT 71
#define ZEND_INCLUDE_OR_EVAL 70
#define ZEND_INCLUDE_OR_EVAL 72
#define ZEND_UNSET_VAR 71
#define ZEND_UNSET_DIM_OBJ 72
#define ZEND_ISSET_ISEMPTY 73
#define ZEND_UNSET_VAR 73
#define ZEND_UNSET_DIM_OBJ 74
#define ZEND_ISSET_ISEMPTY 75
#define ZEND_FE_RESET 74
#define ZEND_FE_FETCH 75
#define ZEND_FE_RESET 76
#define ZEND_FE_FETCH 77
#define ZEND_EXIT 76
#define ZEND_EXIT 78
/* the following 12 opcodes are 4 groups of 3 opcodes each, and must
/* the following 15 opcodes are 5 groups of 3 opcodes each, and must
* remain in that order!
*/
#define ZEND_FETCH_R 77
#define ZEND_FETCH_DIM_R 78
#define ZEND_FETCH_OBJ_R 79
#define ZEND_FETCH_W 80
#define ZEND_FETCH_DIM_W 81
#define ZEND_FETCH_OBJ_W 82
#define ZEND_FETCH_RW 83
#define ZEND_FETCH_DIM_RW 84
#define ZEND_FETCH_OBJ_RW 85
#define ZEND_FETCH_IS 86
#define ZEND_FETCH_DIM_IS 87
#define ZEND_FETCH_OBJ_IS 88
#define ZEND_FETCH_R 79
#define ZEND_FETCH_DIM_R 80
#define ZEND_FETCH_OBJ_R 81
#define ZEND_FETCH_W 82
#define ZEND_FETCH_DIM_W 83
#define ZEND_FETCH_OBJ_W 84
#define ZEND_FETCH_RW 85
#define ZEND_FETCH_DIM_RW 86
#define ZEND_FETCH_OBJ_RW 87
#define ZEND_FETCH_IS 88
#define ZEND_FETCH_DIM_IS 89
#define ZEND_FETCH_OBJ_IS 90
#define ZEND_FETCH_FUNC_ARG 91
#define ZEND_FETCH_DIM_FUNC_ARG 92
#define ZEND_FETCH_OBJ_FUNC_ARG 93
#define ZEND_FETCH_DIM_TMP_VAR 89
#define ZEND_FETCH_CONSTANT 90
#define ZEND_FETCH_DIM_TMP_VAR 94
#define ZEND_FETCH_CONSTANT 95
#define ZEND_DECLARE_FUNCTION_OR_CLASS 91
#define ZEND_DECLARE_FUNCTION_OR_CLASS 96
#define ZEND_EXT_STMT 92
#define ZEND_EXT_FCALL_BEGIN 93
#define ZEND_EXT_FCALL_END 94
#define ZEND_EXT_NOP 95
#define ZEND_EXT_STMT 97
#define ZEND_EXT_FCALL_BEGIN 98
#define ZEND_EXT_FCALL_END 99
#define ZEND_EXT_NOP 100
/* end of block */
@@ -508,11 +517,12 @@ int zendlex(znode *zendlval CLS_DC);
#define ZEND_FETCH_STATIC 2
/* var status for backpatching */
#define BP_VAR_R 0
#define BP_VAR_W 1
#define BP_VAR_RW 2
#define BP_VAR_IS 3
#define BP_VAR_NA 4 /* if not applicable */
#define BP_VAR_R 0
#define BP_VAR_W 1
#define BP_VAR_RW 2
#define BP_VAR_IS 3
#define BP_VAR_NA 4 /* if not applicable */
#define BP_VAR_FUNC_ARG 5
#define ZEND_INTERNAL_FUNCTION 1
@@ -549,11 +559,51 @@ int zendlex(znode *zendlval CLS_DC);
#define ZEND_CTOR_CALL 1<<1
#define PZVAL_IS_REF(z) ((z)->EA.is_ref)
#define PZVAL_IS_LOCKED(z) ((z)->EA.locks>0)
#define AI_USE_PTR(ai) \
if ((ai).ptr_ptr) { \
(ai).ptr = *((ai).ptr_ptr); \
(ai).ptr_ptr = &((ai).ptr); \
} else { \
(ai).ptr = NULL; \
}
#define PZVAL_LOCK(z) (z)->EA.locks++
#define PZVAL_UNLOCK(z) (z)->EA.locks--
#define PZVAL_IS_REF(z) ((z)->is_ref)
#define PZVAL_LOCK(z) ((z)->refcount++)
#define PZVAL_UNLOCK(z) { ((z)->refcount--); \
if (!(z)->refcount) { \
EG(garbage)[EG(garbage_ptr)++] = (z); \
if (EG(garbage_ptr) == 4) { \
zval_dtor(EG(garbage)[0]); \
efree(EG(garbage)[0]); \
zval_dtor(EG(garbage)[1]); \
efree(EG(garbage)[1]); \
EG(garbage)[0] = EG(garbage)[2]; \
EG(garbage)[1] = EG(garbage)[3]; \
EG(garbage_ptr) -= 2; \
} \
} \
}
#define SELECTIVE_PZVAL_LOCK(pzv, pzn) if (!((pzn)->u.EA.type & EXT_TYPE_UNUSED)) { PZVAL_LOCK(pzv); }
/* Lost In Stupid Parentheses */
#define ARG_SHOULD_BE_SENT_BY_REF(offset, conduct_check, arg_types) \
( \
conduct_check \
&& arg_types \
&& \
( \
( \
offset<=arg_types[0] \
&& arg_types[offset]==BYREF_FORCE \
) \
|| ( \
offset>=arg_types[0] \
&& arg_types[arg_types[0]]==BYREF_FORCE_REST \
) \
) \
)
#endif /* _COMPILE_H */
+10 -4
View File
@@ -29,12 +29,18 @@ typedef unsigned long ulong;
typedef unsigned int uint;
#define HAVE_ALLOCA 1
#define HAVE_LIMITS_H 1
#include <malloc.h>
#define HAVE_DIRENT_H 0
#define HAVE_KILL 0
#define HAVE_GETPID 1
#undef HAVE_KILL
#define HAVE_GETPID 1
/* #define HAVE_ALLOCA_H 1 */
#define HAVE_MEMCPY 1
#define HAVE_STRDUP 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_STDIOSTR_H 1
#define HAVE_CLASS_ISTDIOSTREAM
#define istdiostream stdiostream
#ifdef inline
#undef inline
+2 -2
View File
@@ -78,7 +78,7 @@ void clean_module_constants(int module_number)
}
int zend_startup_constants(HashTable *constants ELS_DC)
int zend_startup_constants(ELS_D)
{
#if WIN32|WINNT
DWORD dwBuild=0;
@@ -102,7 +102,7 @@ void zend_register_standard_constants(ELS_D)
/* ZEND_FIX: Move to PHP */
#if 0
#if WIN32|WINNT
// Get build numbers for Windows NT or Win95
/* Get build numbers for Windows NT or Win95 */
if (dwVersion < 0x80000000){
php3_os="WINNT";
} else {
+1 -1
View File
@@ -46,7 +46,7 @@ typedef struct _zend_constant {
void clean_module_constants(int module_number);
int free_zend_constant(zend_constant *c);
int zend_startup_constants(HashTable *constants ELS_DC);
int zend_startup_constants(ELS_D);
int zend_shutdown_constants(ELS_D);
void zend_register_standard_constants(ELS_D);
void clean_non_persistent_constants(void);
+394 -280
View File
File diff suppressed because it is too large. Load diff
+5 -2
View File
@@ -26,9 +26,12 @@
typedef union _temp_variable {
zval tmp_var;
zval **var;
struct {
zval **var_dummy; /* a dummy */
zval **ptr_ptr;
zval *ptr;
} var;
struct {
zval tmp_var; /* a dummy */
zval *str;
int offset;
+62 -23
View File
@@ -84,12 +84,10 @@ void init_executor(CLS_D ELS_DC)
var_uninit(&EG(uninitialized_zval));
var_uninit(&EG(error_zval));
EG(uninitialized_zval).refcount = 1;
EG(uninitialized_zval).EA.is_ref=0;
EG(uninitialized_zval).EA.locks = 0;
EG(uninitialized_zval).is_ref=0;
EG(uninitialized_zval_ptr)=&EG(uninitialized_zval);
EG(error_zval).refcount = 1;
EG(error_zval).EA.is_ref=0;
EG(error_zval).EA.locks = 0;
EG(error_zval).is_ref=0;
EG(error_zval_ptr)=&EG(error_zval);
zend_ptr_stack_init(&EG(arg_types_stack));
zend_stack_init(&EG(overloaded_objects_stack));
@@ -116,12 +114,13 @@ void init_executor(CLS_D ELS_DC)
zend_llist_apply(&zend_extensions, (void (*)(void *)) zend_extension_activator);
EG(opline_ptr) = NULL;
EG(garbage_ptr) = 0;
}
void shutdown_executor(ELS_D)
{
zval_dtor(EG(return_value));
zval_dtor(&EG(global_return_value));
zend_ptr_stack_destroy(&EG(arg_types_stack));
zend_stack_destroy(&EG(overloaded_objects_stack));
@@ -145,6 +144,10 @@ void shutdown_executor(ELS_D)
#if ZEND_DEBUG
signal(SIGSEGV, original_sigsegv_handler);
#endif
while (EG(garbage_ptr)--) {
zval_dtor(EG(garbage)[EG(garbage_ptr)]);
efree(EG(garbage)[EG(garbage_ptr)]);
}
}
@@ -202,10 +205,8 @@ ZEND_API inline void safe_free_zval_ptr(zval *p)
}
ZEND_API int zval_ptr_dtor(zval **zval_ptr)
ZEND_API int _zval_ptr_dtor(zval **zval_ptr ZEND_FILE_LINE_DC)
{
int locked = PZVAL_IS_LOCKED(*zval_ptr);
#if DEBUG_ZEND>=2
printf("Reducing refcount for %x (%x): %d->%d\n", *zval_ptr, zval_ptr, (*zval_ptr)->refcount, (*zval_ptr)->refcount-1);
#endif
@@ -214,11 +215,7 @@ ZEND_API int zval_ptr_dtor(zval **zval_ptr)
zval_dtor(*zval_ptr);
safe_free_zval_ptr(*zval_ptr);
}
if (locked) {
return 0; /* don't kill the container bucket */
} else {
return 1;
}
return 1;
}
@@ -267,6 +264,7 @@ ZEND_API void zval_update_constant(zval *p)
{
if (p->type == IS_CONSTANT) {
zval c;
int refcount = p->refcount;
if (!zend_get_constant(p->value.str.val, p->value.str.len, &c)) {
zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
@@ -278,10 +276,27 @@ ZEND_API void zval_update_constant(zval *p)
*p = c;
}
INIT_PZVAL(p);
p->refcount = refcount;
}
}
int call_user_function(HashTable *function_table, zval *object, zval *function_name, zval *retval, int param_count, zval *params[])
{
zval ***params_array = (zval ***) emalloc(sizeof(zval **)*param_count);
int i;
int ex_retval;
for (i=0; i<param_count; i++) {
params_array[i] = &params[i];
}
ex_retval = call_user_function_ex(function_table, object, function_name, retval, param_count, params_array, 1);
efree(params_array);
return ex_retval;
}
int call_user_function_ex(HashTable *function_table, zval *object, zval *function_name, zval *retval, int param_count, zval **params[], int no_separation)
{
int i;
zval *original_return_value;
@@ -305,14 +320,37 @@ int call_user_function(HashTable *function_table, zval *object, zval *function_n
return FAILURE;
}
for (i=0; i<param_count; i++) {
zval *param;
param = (zval *) emalloc(sizeof(zval));
*param = *(params[i]);
INIT_PZVAL(param);
zval_copy_ctor(param);
if (function_state.function->common.arg_types
&& i<function_state.function->common.arg_types[0]
&& function_state.function->common.arg_types[i+1]==BYREF_FORCE
&& !PZVAL_IS_REF(*params[i])) {
if ((*params[i])->refcount>1) {
zval *new_zval;
if (no_separation) {
return FAILURE;
}
new_zval = (zval *) emalloc(sizeof(zval));
*new_zval = **params[i];
zval_copy_ctor(new_zval);
new_zval->refcount = 1;
(*params[i])->refcount--;
*params[i] = new_zval;
}
(*params[i])->refcount++;
(*params[i])->is_ref = 1;
param = *params[i];
} else if (*params[i] != &EG(uninitialized_zval)) {
(*params[i])->refcount++;
param = *params[i];
} else {
param = (zval *) emalloc(sizeof(zval));
*param = **(params[i]);
INIT_PZVAL(param);
}
zend_ptr_stack_push(&EG(argument_stack), param);
}
@@ -421,7 +459,8 @@ ZEND_API inline void zend_assign_to_variable_reference(znode *result, zval **var
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==&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);
@@ -438,8 +477,7 @@ ZEND_API inline void zend_assign_to_variable_reference(znode *result, zval **var
zendi_zval_copy_ctor(*value_ptr);
}
value_ptr->refcount = 1;
value_ptr->EA.is_ref = 1;
value_ptr->EA.locks = 0;
value_ptr->is_ref = 1;
}
*variable_ptr_ptr = value_ptr;
@@ -449,8 +487,9 @@ ZEND_API inline void zend_assign_to_variable_reference(znode *result, zval **var
}
if (result && (result->op_type != IS_UNUSED)) {
Ts[result->u.var].var = variable_ptr_ptr;
PZVAL_LOCK(*variable_ptr_ptr);
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);
}
}
+2 -2
View File
@@ -91,11 +91,11 @@ int zend_load_extension(char *path)
(ZTS_V?"is":"isn't"));
DL_UNLOAD(handle);
return FAILURE;
} else if (ZEND_DEBUG_V!=extension_version_info->debug) {
} else if (ZEND_DEBUG!=extension_version_info->debug) {
fprintf(stderr, "Cannot load %s - it %s debug information, whereas Zend %s\n",
new_extension->name,
(extension_version_info->debug?"contains":"does not contain"),
(ZEND_DEBUG_V?"does":"does not"));
(ZEND_DEBUG?"does":"does not"));
DL_UNLOAD(handle);
return FAILURE;
}
+1 -7
View File
@@ -78,15 +78,9 @@ ZEND_API int zend_get_resource_handle();
#define ZTS_V 0
#endif
#ifdef ZEND_DEBUG
#define ZEND_DEBUG_V 1
#else
#define ZEND_DEBUG_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_V }
ZEND_EXT_API zend_extension_version_info extension_version_info = { ZEND_EXTENSION_API_NO, "0.90", ZTS_V, ZEND_DEBUG }
#define STANDARD_ZEND_EXTENSION_PROPERTIES NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1
+15 -67
View File
@@ -21,8 +21,11 @@
#ifndef _T_GLOBALS_H
#define _T_GLOBALS_H
#include <setjmp.h>
#include "zend_globals_macros.h"
#include "zend_stack.h"
#include "zend_ptr_stack.h"
#include "zend_hash.h"
@@ -46,80 +49,19 @@ END_EXTERN_C()
#endif
typedef struct _zend_compiler_globals zend_compiler_globals;
typedef struct _zend_executor_globals zend_executor_globals;
typedef struct _zend_alloc_globals zend_alloc_globals;
#define SYMTABLE_CACHE_SIZE 32
/* Compiler */
#ifdef ZTS
# define CLS_D zend_compiler_globals *compiler_globals
# define CLS_DC , CLS_D
# define CLS_C compiler_globals
# define CLS_CC , CLS_C
# define CG(v) (((zend_compiler_globals *) compiler_globals)->v)
# define CLS_FETCH() zend_compiler_globals *compiler_globals = (zend_compiler_globals *) ts_resource(compiler_globals_id)
# define YYPARSE_PARAM compiler_globals
# define YYLEX_PARAM compiler_globals
BEGIN_EXTERN_C()
int zendparse(void *compiler_globals);
END_EXTERN_C()
#else
# define CLS_D
# define CLS_DC
# define CLS_C
# define CLS_CC
# define CG(v) (compiler_globals.v)
# define CLS_FETCH()
extern ZEND_API zend_compiler_globals compiler_globals;
int zendparse();
#endif
/* Executor */
#ifdef ZTS
# define ELS_D zend_executor_globals *executor_globals
# define ELS_DC , ELS_D
# define ELS_C executor_globals
# define ELS_CC , ELS_C
# define EG(v) (executor_globals->v)
# define ELS_FETCH() zend_executor_globals *executor_globals = (zend_executor_globals *) ts_resource(executor_globals_id)
#else
# define ELS_D
# define ELS_DC
# define ELS_C
# define ELS_CC
# define EG(v) (executor_globals.v)
# define ELS_FETCH()
extern ZEND_API zend_executor_globals executor_globals;
#endif
/* Memory Manager */
#ifdef ZTS
# define ALS_D zend_alloc_globals *alloc_globals
# define ALS_DC , ALS_D
# define ALS_C alloc_globals
# define ALS_CC , ALS_C
# define AG(v) (((zend_alloc_globals *) alloc_globals)->v)
# define ALS_FETCH() zend_alloc_globals *alloc_globals = (zend_alloc_globals *) ts_resource(alloc_globals_id)
#else
# define ALS_D
# define ALS_DC
# define ALS_C
# define ALS_CC
# define AG(v) (alloc_globals.v)
# define ALS_FETCH()
#endif
#include "zend_compile.h"
#include "zend_execute.h"
/* excpt.h on Digital Unix 4.0 defines function_table */
#undef function_table
struct _zend_compiler_globals {
zend_stack bp_stack;
zend_stack switch_cond_stack;
zend_stack foreach_copy_stack;
zend_stack object_stack;
zend_class_entry class_entry, *active_class_entry;
@@ -201,14 +143,20 @@ struct _zend_executor_globals {
long precision;
/* for extended information support */
unsigned char no_extensions;
zend_bool no_extensions;
HashTable regular_list;
HashTable persistent_list;
zend_ptr_stack argument_stack;
int free_op1, free_op2;
int (*unary_op)(zval *result, zval *op1);
int (*binary_op)(zval *result, zval *op1, zval *op2);
void *reserved[4];
zval *garbage[4];
int garbage_ptr;
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
#if SUPPORT_INTERACTIVE
int interactive;
#endif
+90
View File
@@ -0,0 +1,90 @@
/*
+----------------------------------------------------------------------+
| Zend Engine |
+----------------------------------------------------------------------+
| Copyright (c) 1998, 1999 Andi Gutmans, Zeev Suraski |
+----------------------------------------------------------------------+
| This source file is subject to version 0.91 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_91.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef _ZEND_GLOBALS_MACROS_H
#define _ZEND_GLOBALS_MACROS_H
typedef struct _zend_compiler_globals zend_compiler_globals;
typedef struct _zend_executor_globals zend_executor_globals;
typedef struct _zend_alloc_globals zend_alloc_globals;
/* Compiler */
#ifdef ZTS
# define CLS_D zend_compiler_globals *compiler_globals
# define CLS_DC , CLS_D
# define CLS_C compiler_globals
# define CLS_CC , CLS_C
# define CG(v) (((zend_compiler_globals *) compiler_globals)->v)
# define CLS_FETCH() zend_compiler_globals *compiler_globals = (zend_compiler_globals *) ts_resource(compiler_globals_id)
# define YYPARSE_PARAM compiler_globals
# define YYLEX_PARAM compiler_globals
BEGIN_EXTERN_C()
int zendparse(void *compiler_globals);
END_EXTERN_C()
#else
# define CLS_D
# define CLS_DC
# define CLS_C
# define CLS_CC
# define CG(v) (compiler_globals.v)
# define CLS_FETCH()
extern ZEND_API struct _zend_compiler_globals compiler_globals;
int zendparse();
#endif
/* Executor */
#ifdef ZTS
# define ELS_D zend_executor_globals *executor_globals
# define ELS_DC , ELS_D
# define ELS_C executor_globals
# define ELS_CC , ELS_C
# define EG(v) (executor_globals->v)
# define ELS_FETCH() zend_executor_globals *executor_globals = (zend_executor_globals *) ts_resource(executor_globals_id)
#else
# define ELS_D
# define ELS_DC
# define ELS_C
# define ELS_CC
# define EG(v) (executor_globals.v)
# define ELS_FETCH()
extern ZEND_API zend_executor_globals executor_globals;
#endif
/* Memory Manager */
#ifdef ZTS
# define ALS_D zend_alloc_globals *alloc_globals
# define ALS_DC , ALS_D
# define ALS_C alloc_globals
# define ALS_CC , ALS_C
# define AG(v) (((zend_alloc_globals *) alloc_globals)->v)
# define ALS_FETCH() zend_alloc_globals *alloc_globals = (zend_alloc_globals *) ts_resource(alloc_globals_id)
#else
# define ALS_D
# define ALS_DC
# define ALS_C
# define ALS_CC
# define AG(v) (alloc_globals.v)
# define ALS_FETCH()
#endif
#endif /* _ZEND_GLOBALS_MACROS_H */
+42 -11
View File
@@ -18,12 +18,17 @@
*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include "zend.h"
#include <stdio.h>
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif
#ifdef HAVE_LIMITS_H
# include <limits.h>
#endif
#define HANDLE_NUMERIC(key,length,func) { \
register char *tmp=key; \
@@ -55,7 +60,6 @@ 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};
static int if_full_do_resize(HashTable *ht);
static int zend_hash_rehash(HashTable *ht);
static uint nNumPrimeNumbers = sizeof(PrimeNumbers) / sizeof(ulong);
@@ -650,7 +654,7 @@ static int if_full_do_resize(HashTable *ht)
return SUCCESS;
}
static int zend_hash_rehash(HashTable *ht)
ZEND_API int zend_hash_rehash(HashTable *ht)
{
Bucket *p;
uint nIndex;
@@ -744,9 +748,6 @@ ZEND_API void zend_hash_destroy(HashTable *ht)
}
if (delete_bucket) {
pefree(q,ht->persistent);
} else {
int i;
i=2;
}
}
pefree(ht->arBuckets,ht->persistent);
@@ -822,6 +823,35 @@ ZEND_API void zend_hash_apply_with_argument(HashTable *ht,int (*destruct) (void
}
ZEND_API void zend_hash_apply_with_arguments(HashTable *ht,int (*destruct)(void *, int, va_list, zend_hash_key *), int num_args, ...)
{
Bucket *p, *q;
va_list args;
zend_hash_key hash_key;
va_start(args, num_args);
p = ht->pListHead;
while (p != NULL) {
q = p;
p = p->pListNext;
hash_key.arKey = q->arKey;
hash_key.nKeyLength = q->nKeyLength;
hash_key.h = q->h;
if (destruct(q->pData, num_args, args, &hash_key)) {
if (q->nKeyLength == 0) {
zend_hash_index_del(ht, q->h);
} else {
zend_hash_del(ht,q->arKey,q->nKeyLength);
}
}
}
va_end(args);
}
ZEND_API void zend_hash_copy(HashTable *target, HashTable *source, void (*pCopyConstructor) (void *pData), void *tmp, uint size)
{
Bucket *p;
@@ -1067,7 +1097,8 @@ ZEND_API int zend_hash_get_current_data(HashTable *ht, void **pData)
}
ZEND_API int zend_hash_sort(HashTable *ht, int (*compar) (const void *, const void *), int renumber)
ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func,
compare_func_t compar, int renumber)
{
Bucket **arTmp;
Bucket *p;
@@ -1088,7 +1119,7 @@ ZEND_API int zend_hash_sort(HashTable *ht, int (*compar) (const void *, const vo
i++;
}
qsort((void *) arTmp, i, sizeof(Bucket *), compar);
(*sort_func)((void *) arTmp, i, sizeof(Bucket *), compar);
HANDLE_BLOCK_INTERRUPTIONS();
ht->pListHead = arTmp[0];
+19 -3
View File
@@ -62,6 +62,8 @@ typedef struct hashtable {
unsigned char persistent;
} HashTable;
typedef int (*compare_func_t) (const void *, const void *);
typedef void (*sort_func_t) (void *, size_t, register size_t, compare_func_t);
BEGIN_EXTERN_C()
@@ -98,13 +100,26 @@ ZEND_API int zend_hash_index_update_or_next_insert(HashTable *ht, ulong h, void
ZEND_API int zend_hash_pointer_update(HashTable *ht, char *arKey, uint nKeyLength, void *pData);
typedef struct _zend_hash_key {
char *arKey;
uint nKeyLength;
ulong h;
} zend_hash_key;
#define ZEND_STD_HASH_APPLIER \
int (*)(void *element, int num_args, va_list args, zend_hash_key *hash_key)
ZEND_API int zend_hash_pointer_index_update_or_next_insert(HashTable *ht, ulong h, void *pData, int flag);
#define zend_hash_pointer_index_update(ht,h,pData) \
zend_hash_pointer_index_update_or_next_insert(ht,h,pData,HASH_UPDATE)
#define zend_hash_next_index_pointer_insert(ht,pData) \
zend_hash_pointer_index_update_or_next_insert(ht,0,pData,HASH_NEXT_INSERT)
ZEND_API void zend_hash_apply(HashTable *ht,int (*destruct) (void *));
ZEND_API void zend_hash_apply_with_argument(HashTable *ht,int (*destruct) (void *, void *), void *);
ZEND_API void zend_hash_apply(HashTable *ht,int (*destruct)(void *));
ZEND_API void zend_hash_apply_with_argument(HashTable *ht,int (*destruct)(void *, void *), void *);
ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, ZEND_STD_HASH_APPLIER, int, ...);
@@ -141,11 +156,12 @@ ZEND_API void zend_hash_internal_pointer_end(HashTable *ht);
/* Copying, merging and sorting */
ZEND_API void zend_hash_copy(HashTable *target, HashTable *source, void (*pCopyConstructor) (void *pData), void *tmp, uint size);
ZEND_API void zend_hash_merge(HashTable *target, HashTable *source, void (*pCopyConstructor) (void *pData), void *tmp, uint size, int overwrite);
ZEND_API int zend_hash_sort(HashTable *ht, int (*compar) (const void *, const void *), int renumber);
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_minmax(HashTable *ht, int (*compar) (const void *, const void *), int flag, void **pData);
ZEND_API int zend_hash_num_elements(HashTable *ht);
ZEND_API int zend_hash_rehash(HashTable *ht);
ZEND_API ulong hashpjw(char *arKey, uint nKeyLength);
+68 -1
View File
@@ -18,12 +18,13 @@
*/
/* resource lists */
#include "zend.h"
#include "zend_list.h"
#include "zend_API.h"
#include "zend_globals.h"
ZEND_API int le_index_ptr;
static inline int zend_list_do_insert(HashTable *list,void *ptr, int type)
@@ -137,6 +138,72 @@ 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)
{
int rsrc_id;
rsrc_id = zend_list_insert(rsrc_pointer, rsrc_type);
if (rsrc_result) {
rsrc_result->value.lval = rsrc_id;
rsrc_result->type = IS_RESOURCE;
}
return rsrc_id;
}
ZEND_API void *zend_fetch_resource(zval **passed_id, int default_id, char *resource_type_name, int *found_resource_type, int num_resource_types, ...)
{
int id;
int actual_resource_type;
void *resource;
va_list resource_types;
int i;
if (default_id==-1) { /* use id */
if (!passed_id) {
if (resource_type_name) {
zend_error(E_WARNING, "No %s resource supplied", resource_type_name);
}
return NULL;
} else if ((*passed_id)->type != IS_RESOURCE) {
if (resource_type_name) {
zend_error(E_WARNING, "Supplied argument is not a valid %s resource", resource_type_name);
}
return NULL;
}
id = (*passed_id)->value.lval;
} else {
id = default_id;
}
resource = zend_list_find(id, &actual_resource_type);
if (!resource) {
if (resource_type_name)
zend_error(E_WARNING, "%d is not a valid %s resource", id, resource_type_name);
return NULL;
}
va_start(resource_types, num_resource_types);
for (i=0; i<num_resource_types; i++) {
if (actual_resource_type == va_arg(resource_types, int)) {
va_end(resource_types);
if (found_resource_type) {
*found_resource_type = actual_resource_type;
}
return resource;
}
}
va_end(resource_types);
if (resource_type_name)
zend_error(E_WARNING, "Supplied resource is not a valid %s resource", resource_type_name);
return NULL;
}
int list_entry_destructor(void *ptr)
{
list_entry *le = (list_entry *) ptr;
+19
View File
@@ -63,6 +63,25 @@ ZEND_API int zend_plist_delete(int id);
ZEND_API void *zend_list_find(int id, int *type);
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, ...);
extern ZEND_API int le_index_ptr; /* list entry type for index pointers */
#define ZEND_VERIFY_RESOURCE(rsrc) \
if (!rsrc) { \
RETURN_FALSE; \
}
#define ZEND_FETCH_RESOURCE(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type) \
rsrc = (rsrc_type) zend_fetch_resource(passed_id, default_id, resource_type_name, NULL, 1, resource_type); \
ZEND_VERIFY_RESOURCE(rsrc);
#define ZEND_FETCH_RESOURCE2(rsrc, rsrc_type, passed_id, default_id, resource_type_name, resource_type1,resource_type2) \
rsrc = (rsrc_type) zend_fetch_resource(passed_id, default_id, resource_type_name, NULL, 2, resource_type1, resource_type2); \
ZEND_VERIFY_RESOURCE(rsrc);
#define ZEND_REGISTER_RESOURCE(rsrc_result, rsrc_pointer, rsrc_type) \
zend_register_resource(rsrc_result, rsrc_pointer, rsrc_type);
#endif
+8 -4
View File
@@ -27,8 +27,10 @@
#define SHUTDOWN_FUNC_ARGS_PASSTHRU type, module_number
#define ZEND_MODULE_INFO_FUNC_ARGS zend_module_entry *zend_module
#define STANDARD_MODULE_PROPERTIES 0, 0, 0, NULL, 0
#define STANDARD_MODULE_PROPERTIES_EX 0, 0, 0, NULL, 0
#define STANDARD_MODULE_PROPERTIES \
NULL, NULL, STANDARD_MODULE_PROPERTIES_EX
#define MODULE_PERSISTENT 1
#define MODULE_TEMPORARY 2
@@ -43,6 +45,8 @@ struct _zend_module_entry {
int (*request_startup_func)(INIT_FUNC_ARGS);
int (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS);
void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS);
int (*global_startup_func)(void);
int (*global_shutdown_func)(void);
int request_started, module_started;
unsigned char type;
void *handle;
@@ -52,9 +56,9 @@ struct _zend_module_entry {
extern HashTable module_registry;
extern void module_destructor(zend_module_entry *module);
extern int module_registry_cleanup(zend_module_entry *module);
extern int module_registry_request_startup(zend_module_entry *module);
void module_destructor(zend_module_entry *module);
int module_registry_cleanup(zend_module_entry *module);
int module_registry_request_startup(zend_module_entry *module);
#define ZEND_MODULE_DTOR (int (*)(void *)) module_destructor
#endif
+21 -5
View File
@@ -190,6 +190,20 @@ ZEND_API void destroy_op_array(zend_op_array *op_array)
}
void init_op(zend_op *op CLS_DC)
{
op->lineno = CG(zend_lineno);
op->filename = zend_get_compiled_filename();
op->result.op_type = IS_UNUSED;
op->extended_value = 0;
op->op1.u.EA.var = 0;
op->op1.u.EA.type = 0;
op->op2.u.EA.var = 0;
op->op2.u.EA.type = 0;
op->result.u.EA.var = 0;
op->result.u.EA.type = 0;
}
zend_op *get_next_op(zend_op_array *op_array CLS_DC)
{
int next_op_num = op_array->last++;
@@ -211,9 +225,8 @@ zend_op *get_next_op(zend_op_array *op_array CLS_DC)
}
next_op = &(op_array->opcodes[next_op_num]);
next_op->lineno = CG(zend_lineno);
next_op->filename = zend_get_compiled_filename();
next_op->result.op_type = IS_UNUSED;
init_op(next_op CLS_CC);
return next_op;
}
@@ -298,10 +311,10 @@ void pass_include_eval(zend_op_array *op_array)
while (opline<end) {
if (opline->op1.op_type==IS_CONST) {
opline->op1.u.constant.EA.is_ref = 1;
opline->op1.u.constant.is_ref = 1;
}
if (opline->op2.op_type==IS_CONST) {
opline->op2.u.constant.EA.is_ref = 1;
opline->op2.u.constant.is_ref = 1;
}
opline++;
}
@@ -367,6 +380,9 @@ ZEND_API void *get_binary_op(int opcode)
case ZEND_ASSIGN_CONCAT:
return (void *) concat_function;
break;
case ZEND_IS_IDENTICAL:
return (void *) is_identical_function;
break;
case ZEND_IS_EQUAL:
return (void *) is_equal_function;
break;
+170 -123
View File
@@ -28,13 +28,12 @@
#include "zend_operators.h"
#include "zend_variables.h"
#include "zend_globals.h"
#include "zend_list.h"
#if WITH_BCMATH
#include "functions/number.h"
#endif
static inline int is_numeric_string(char *str, int length, long *lval, double *dval);
ZEND_API void convert_scalar_to_number(zval *op)
{
char *strval;
@@ -59,92 +58,100 @@ ZEND_API void convert_scalar_to_number(zval *op)
break;
}
STR_FREE(strval);
} else if (op->type == IS_BOOL || op->type==IS_RESOURCE) {
} else if (op->type==IS_BOOL || op->type==IS_RESOURCE) {
op->type = IS_LONG;
}
}
#define zendi_convert_scalar_to_number(op, holder) \
if ((op)->type == IS_STRING) { \
switch (((holder).type=is_numeric_string((op)->value.str.val, (op)->value.str.len, &(holder).value.lval, &(holder).value.dval))) { \
case IS_DOUBLE: \
case IS_LONG: \
break; \
case IS_BC: \
(holder).type = IS_DOUBLE; /* may have lost significant digits */ \
break; \
default: \
(holder).value.lval = strtol((op)->value.str.val, NULL, 10); \
(holder).type = IS_LONG; \
break; \
} \
(op) = &(holder); \
} else if ((op)->type==IS_BOOL || (op)->type==IS_RESOURCE) { \
(holder) = *(op); \
(holder).type = IS_LONG; \
(op) = &(holder); \
#define zendi_convert_scalar_to_number(op, holder, result) \
if (op==result) { \
convert_scalar_to_number(op); \
} else if ((op)->type == IS_STRING) { \
switch (((holder).type=is_numeric_string((op)->value.str.val, (op)->value.str.len, &(holder).value.lval, &(holder).value.dval))) { \
case IS_DOUBLE: \
case IS_LONG: \
break; \
case IS_BC: \
(holder).type = IS_DOUBLE; /* may have lost significant digits */ \
break; \
default: \
(holder).value.lval = strtol((op)->value.str.val, NULL, 10); \
(holder).type = IS_LONG; \
break; \
} \
(op) = &(holder); \
} else if ((op)->type==IS_BOOL || (op)->type==IS_RESOURCE) { \
(holder).value.lval = (op)->value.lval; \
(holder).type = IS_LONG; \
(op) = &(holder); \
}
#define zendi_convert_to_long(op, holder) \
if ((op)->type != IS_LONG) { \
switch ((op)->type) { \
case IS_BOOL: \
case IS_RESOURCE: \
break; \
case IS_DOUBLE: \
(holder).value.lval = (long) (op)->value.dval; \
break; \
case IS_STRING: \
(holder).value.lval = strtol((op)->value.str.val, NULL, 10); \
break; \
case IS_ARRAY: \
(holder).value.lval = (zend_hash_num_elements((op)->value.ht)?1:0); \
break; \
case IS_OBJECT: \
(holder).value.lval = (zend_hash_num_elements((op)->value.obj.properties)?1:0); \
break; \
default: \
zend_error(E_WARNING, "Cannot convert to ordinal value"); \
(holder).value.lval = 0; \
break; \
} \
(holder).type = IS_LONG; \
(op) = &(holder); \
#define zendi_convert_to_long(op, holder, result) \
if (op==result) { \
convert_to_long(op); \
} else if ((op)->type==IS_BOOL || (op)->type==IS_RESOURCE) { \
(holder).value.lval = (op)->value.lval; \
(holder).type = IS_LONG; \
(op) = &(holder); \
} else if ((op)->type != IS_LONG) { \
switch ((op)->type) { \
case IS_DOUBLE: \
(holder).value.lval = (long) (op)->value.dval; \
break; \
case IS_STRING: \
(holder).value.lval = strtol((op)->value.str.val, NULL, 10); \
break; \
case IS_ARRAY: \
(holder).value.lval = (zend_hash_num_elements((op)->value.ht)?1:0); \
break; \
case IS_OBJECT: \
(holder).value.lval = (zend_hash_num_elements((op)->value.obj.properties)?1:0); \
break; \
default: \
zend_error(E_WARNING, "Cannot convert to ordinal value"); \
(holder).value.lval = 0; \
break; \
} \
(holder).type = IS_LONG; \
(op) = &(holder); \
}
#define zendi_convert_to_boolean(op, holder) \
if ((op)->type != IS_BOOL) { \
switch ((op)->type) { \
case IS_LONG: \
case IS_RESOURCE: \
(holder).value.lval = ((op)->value.lval ? 1 : 0); \
break; \
case IS_DOUBLE: \
(holder).value.lval = ((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')) { \
(holder).value.lval = 0; \
} else { \
(holder).value.lval = 1; \
} \
break; \
case IS_ARRAY: \
(holder).value.lval = (zend_hash_num_elements((op)->value.ht)?1:0); \
break; \
case IS_OBJECT: \
(holder).value.lval = (zend_hash_num_elements((op)->value.obj.properties)?1:0); \
break; \
default: \
(holder).value.lval = 0; \
break; \
} \
(holder).type = IS_BOOL; \
(op) = &(holder); \
} \
#define zendi_convert_to_boolean(op, holder, result) \
if (op==result) { \
convert_to_boolean(op); \
} else if ((op)->type != IS_BOOL) { \
switch ((op)->type) { \
case IS_RESOURCE: \
case IS_LONG: \
(holder).value.lval = ((op)->value.lval ? 1 : 0); \
break; \
case IS_DOUBLE: \
(holder).value.lval = ((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')) { \
(holder).value.lval = 0; \
} else { \
(holder).value.lval = 1; \
} \
break; \
case IS_ARRAY: \
(holder).value.lval = (zend_hash_num_elements((op)->value.ht)?1:0); \
break; \
case IS_OBJECT: \
(holder).value.lval = (zend_hash_num_elements((op)->value.obj.properties)?1:0); \
break; \
default: \
(holder).value.lval = 0; \
break; \
} \
(holder).type = IS_BOOL; \
(op) = &(holder); \
}
ZEND_API void convert_to_long(zval *op)
@@ -159,37 +166,32 @@ ZEND_API void convert_to_long_base(zval *op, int base)
long tmp;
switch (op->type) {
case IS_BOOL:
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
return;
break;
case IS_DOUBLE:
op->value.lval = (long) op->value.dval;
op->type = IS_LONG;
break;
case IS_STRING:
strval = op->value.str.val;
op->value.lval = strtol(strval, NULL, base);
op->type = IS_LONG;
STR_FREE(strval);
break;
case IS_ARRAY:
tmp = (zend_hash_num_elements(op->value.ht)?1:0);
zval_dtor(op);
op->value.lval = tmp;
op->type = IS_LONG;
break;
case IS_OBJECT:
tmp = (zend_hash_num_elements(op->value.obj.properties)?1:0);
zval_dtor(op);
op->value.lval = tmp;
op->type = IS_LONG;
break;
default:
zend_error(E_WARNING, "Cannot convert to ordinal value");
zval_dtor(op);
op->value.lval = 0;
op->type = IS_LONG;
break;
}
@@ -203,8 +205,8 @@ ZEND_API void convert_to_double(zval *op)
double tmp;
switch (op->type) {
case IS_BOOL:
case IS_RESOURCE:
case IS_BOOL:
case IS_LONG:
op->value.dval = (double) op->value.lval;
op->type = IS_DOUBLE;
@@ -248,8 +250,8 @@ ZEND_API void convert_to_boolean(zval *op)
switch (op->type) {
case IS_BOOL:
break;
case IS_LONG:
case IS_RESOURCE:
case IS_LONG:
op->value.lval = (op->value.lval ? 1 : 0);
break;
case IS_DOUBLE:
@@ -403,14 +405,22 @@ ZEND_API int add_function(zval *result, zval *op1, zval *op2)
if (op1->type == IS_ARRAY && op2->type == IS_ARRAY) {
zval *tmp;
*result = *op1;
zval_copy_ctor(result);
if ((result == op1) && (result == op2)) {
/* $a += $a */
return SUCCESS;
}
if (result != op1) {
/* $a += $b */
*result = *op1;
zval_copy_ctor(result);
}
zend_hash_merge(result->value.ht, op2->value.ht, (void (*)(void *pData)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0);
return SUCCESS;
}
zendi_convert_scalar_to_number(op1, op1_copy);
zendi_convert_scalar_to_number(op2, op2_copy);
zendi_convert_scalar_to_number(op1, op1_copy, result);
zendi_convert_scalar_to_number(op2, op2_copy, result);
if (op1->type == IS_LONG && op2->type == IS_LONG) {
double dval = (double) op1->value.lval + (double) op2->value.lval;
@@ -446,8 +456,8 @@ ZEND_API int sub_function(zval *result, zval *op1, zval *op2)
{
zval op1_copy, op2_copy;
zendi_convert_scalar_to_number(op1, op1_copy);
zendi_convert_scalar_to_number(op2, op2_copy);
zendi_convert_scalar_to_number(op1, op1_copy, result);
zendi_convert_scalar_to_number(op2, op2_copy, result);
if (op1->type == IS_LONG && op2->type == IS_LONG) {
double dval = (double) op1->value.lval - (double) op2->value.lval;
@@ -483,8 +493,8 @@ ZEND_API int mul_function(zval *result, zval *op1, zval *op2)
{
zval op1_copy, op2_copy;
zendi_convert_scalar_to_number(op1, op1_copy);
zendi_convert_scalar_to_number(op2, op2_copy);
zendi_convert_scalar_to_number(op1, op1_copy, result);
zendi_convert_scalar_to_number(op2, op2_copy, result);
if (op1->type == IS_LONG && op2->type == IS_LONG) {
double dval = (double) op1->value.lval * (double) op2->value.lval;
@@ -519,8 +529,8 @@ ZEND_API int div_function(zval *result, zval *op1, zval *op2)
{
zval op1_copy, op2_copy;
zendi_convert_scalar_to_number(op1, op1_copy);
zendi_convert_scalar_to_number(op2, op2_copy);
zendi_convert_scalar_to_number(op1, op1_copy, result);
zendi_convert_scalar_to_number(op2, op2_copy, result);
if ((op2->type == IS_LONG && op2->value.lval == 0) || (op2->type == IS_DOUBLE && op2->value.dval == 0.0)) {
zend_error(E_WARNING, "Division by zero");
@@ -559,8 +569,8 @@ ZEND_API int mod_function(zval *result, zval *op1, zval *op2)
{
zval op1_copy, op2_copy;
zendi_convert_to_long(op1, op1_copy);
zendi_convert_to_long(op2, op2_copy);
zendi_convert_to_long(op1, op1_copy, result);
zendi_convert_to_long(op2, op2_copy, result);
if (op2->value.lval == 0) {
var_reset(result);
@@ -579,12 +589,12 @@ ZEND_API int boolean_or_function(zval *result, zval *op1, zval *op2)
result->type = IS_BOOL;
zendi_convert_to_boolean(op1, op1_copy);
zendi_convert_to_boolean(op1, op1_copy, result);
if (op1->value.lval) {
result->value.lval = 1;
return SUCCESS;
}
zendi_convert_to_boolean(op2, op2_copy);
zendi_convert_to_boolean(op2, op2_copy, result);
if (op2->value.lval) {
result->value.lval = 1;
return SUCCESS;
@@ -600,12 +610,12 @@ ZEND_API int boolean_and_function(zval *result, zval *op1, zval *op2)
result->type = IS_BOOL;
zendi_convert_to_boolean(op1, op1_copy);
zendi_convert_to_boolean(op1, op1_copy, result);
if (!op1->value.lval) {
result->value.lval = 0;
return SUCCESS;
}
zendi_convert_to_boolean(op2, op2_copy);
zendi_convert_to_boolean(op2, op2_copy, result);
if (!op2->value.lval) {
result->value.lval = 0;
return SUCCESS;
@@ -621,8 +631,8 @@ ZEND_API int boolean_xor_function(zval *result, zval *op1, zval *op2)
result->type = IS_BOOL;
zendi_convert_to_boolean(op1, op1_copy);
zendi_convert_to_boolean(op2, op2_copy);
zendi_convert_to_boolean(op1, op1_copy, result);
zendi_convert_to_boolean(op2, op2_copy, result);
result->value.lval = op1->value.lval ^ op2->value.lval;
return SUCCESS;
}
@@ -632,7 +642,7 @@ ZEND_API int boolean_not_function(zval *result, zval *op1)
{
zval op1_copy;
zendi_convert_to_boolean(op1, op1_copy);
zendi_convert_to_boolean(op1, op1_copy, result);
result->type = IS_BOOL;
result->value.lval = !op1->value.lval;
@@ -694,8 +704,8 @@ ZEND_API int bitwise_or_function(zval *result, zval *op1, zval *op2)
}
return SUCCESS;
}
zendi_convert_to_long(op1, op1_copy);
zendi_convert_to_long(op2, op2_copy);
zendi_convert_to_long(op1, op1_copy, result);
zendi_convert_to_long(op2, op2_copy, result);
result->type = IS_LONG;
result->value.lval = op1->value.lval | op2->value.lval;
@@ -728,8 +738,8 @@ ZEND_API int bitwise_and_function(zval *result, zval *op1, zval *op2)
}
zendi_convert_to_long(op1, op1_copy);
zendi_convert_to_long(op2, op2_copy);
zendi_convert_to_long(op1, op1_copy, result);
zendi_convert_to_long(op2, op2_copy, result);
result->type = IS_LONG;
result->value.lval = op1->value.lval & op2->value.lval;
@@ -761,8 +771,8 @@ ZEND_API int bitwise_xor_function(zval *result, zval *op1, zval *op2)
return SUCCESS;
}
zendi_convert_to_long(op1, op1_copy);
zendi_convert_to_long(op2, op2_copy);
zendi_convert_to_long(op1, op1_copy, result);
zendi_convert_to_long(op2, op2_copy, result);
result->type = IS_LONG;
result->value.lval = op1->value.lval ^ op2->value.lval;
@@ -774,8 +784,8 @@ ZEND_API int shift_left_function(zval *result, zval *op1, zval *op2)
{
zval op1_copy, op2_copy;
zendi_convert_to_long(op1, op1_copy);
zendi_convert_to_long(op2, op2_copy);
zendi_convert_to_long(op1, op1_copy, result);
zendi_convert_to_long(op2, op2_copy, result);
result->value.lval = op1->value.lval << op2->value.lval;
result->type = IS_LONG;
return SUCCESS;
@@ -786,8 +796,8 @@ ZEND_API int shift_right_function(zval *result, zval *op1, zval *op2)
{
zval op1_copy, op2_copy;
zendi_convert_to_long(op1, op1_copy);
zendi_convert_to_long(op2, op2_copy);
zendi_convert_to_long(op1, op1_copy, result);
zendi_convert_to_long(op2, op2_copy, result);
result->value.lval = op1->value.lval >> op2->value.lval;
result->type = IS_LONG;
return SUCCESS;
@@ -870,19 +880,19 @@ ZEND_API int compare_function(zval *result, zval *op1, zval *op2)
zval op1_copy, op2_copy;
if (op1->type == IS_STRING && op2->type == IS_STRING) {
zendi_smart_strcmp(result,op1,op2);
zendi_smart_strcmp(result, op1, op2);
return SUCCESS;
}
if (op1->type == IS_BOOL || op2->type == IS_BOOL) {
zendi_convert_to_boolean(op1, op1_copy);
zendi_convert_to_boolean(op2, op2_copy);
zendi_convert_to_boolean(op1, op1_copy, result);
zendi_convert_to_boolean(op2, op2_copy, result);
result->type = IS_LONG;
result->value.lval = op1->value.lval - op2->value.lval;
return SUCCESS;
}
zendi_convert_scalar_to_number(op1, op1_copy);
zendi_convert_scalar_to_number(op2, op2_copy);
zendi_convert_scalar_to_number(op1, op1_copy, result);
zendi_convert_scalar_to_number(op2, op2_copy, result);
if (op1->type == IS_LONG && op2->type == IS_LONG) {
result->type = IS_LONG;
@@ -904,6 +914,42 @@ ZEND_API int compare_function(zval *result, zval *op1, zval *op2)
}
ZEND_API int is_identical_function(zval *result, zval *op1, zval *op2)
{
result->type = IS_BOOL;
if (op1->type != op2->type) {
result->value.lval = 0;
return SUCCESS;
}
switch (op1->type) {
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)
&& (!memcmp(op1->value.str.val, op2->value.str.val, op1->value.str.len))) {
result->value.lval = 1;
} else {
result->value.lval = 0;
}
return SUCCESS;
break;
case IS_ARRAY:
case IS_OBJECT:
zend_error(E_WARNING,"Cannot compare arrays or objects");
break;
}
var_reset(result);
return FAILURE;
}
ZEND_API int is_equal_function(zval *result, zval *op1, zval *op2)
{
if (compare_function(result, op1, op2) == FAILURE) {
@@ -1106,6 +1152,7 @@ ZEND_API int decrement_function(zval *op1)
op1->type = IS_LONG;
break;
} else if (is_numeric_string(op1->value.str.val, op1->value.str.len, &lval, NULL)==IS_LONG) { /* long */
STR_FREE(op1->value.str.val);
op1->value.lval = lval-1;
op1->type = IS_LONG;
break;
@@ -1224,7 +1271,7 @@ ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2)
*/
#if 1
static inline int is_numeric_string(char *str, int length, long *lval, double *dval)
ZEND_API inline int is_numeric_string(char *str, int length, long *lval, double *dval)
{
long local_lval;
double local_dval;
+58
View File
@@ -42,9 +42,11 @@ ZEND_API int shift_right_function(zval *result, zval *op1, zval *op2);
ZEND_API int concat_function(zval *result, zval *op1, zval *op2);
ZEND_API int is_equal_function(zval *result, zval *op1, zval *op2);
ZEND_API int is_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);
ZEND_API int increment_function(zval *op1);
ZEND_API int decrement_function(zval *op2);
@@ -70,4 +72,60 @@ ZEND_API int zend_binary_strcmp(zval *s1, zval *s2);
ZEND_API int zend_binary_strcasecmp(zval *s1, zval *s2);
ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2);
#define convert_to_long_ex(ppzv) \
if ((*ppzv)->type!=IS_LONG) { \
if (!(*ppzv)->is_ref) { \
SEPARATE_ZVAL(ppzv); \
} \
convert_to_long(*ppzv); \
}
#define convert_to_double_ex(ppzv) \
if ((*ppzv)->type!=IS_DOUBLE) { \
if (!(*ppzv)->is_ref) { \
SEPARATE_ZVAL(ppzv); \
} \
convert_to_double(*ppzv); \
}
#define convert_to_string_ex(ppzv) \
if ((*ppzv)->type!=IS_STRING) { \
if (!(*ppzv)->is_ref) { \
SEPARATE_ZVAL(ppzv); \
} \
convert_to_string(*ppzv); \
}
#define convert_to_array_ex(ppzv) \
if ((*ppzv)->type!=IS_ARRAY) { \
if (!(*ppzv)->is_ref) { \
SEPARATE_ZVAL(ppzv); \
} \
convert_to_array(*ppzv); \
}
#define convert_to_object_ex(ppzv) \
if ((*ppzv)->type!=IS_OBJECT) { \
if (!(*ppzv)->is_ref) { \
SEPARATE_ZVAL(ppzv); \
} \
convert_to_object(*ppzv); \
}
#define convert_to_boolean_ex(ppzv) \
if ((*ppzv)->type!=IS_BOOL) { \
if (!(*ppzv)->is_ref) { \
SEPARATE_ZVAL(ppzv); \
} \
convert_to_boolean(*ppzv); \
}
#define convert_scalar_to_number_ex(ppzv) \
if ((*ppzv)->type!=IS_LONG && (*ppzv)->type!=IS_DOUBLE) { \
if (!(*ppzv)->is_ref) { \
SEPARATE_ZVAL(ppzv); \
} \
convert_scalar_to_number(*ppzv); \
}
#endif
+42 -6
View File
@@ -20,12 +20,14 @@
#include "zend.h"
#include "zend_ptr_stack.h"
#ifdef HAVE_STDARG_H
# include <stdarg.h>
#endif
ZEND_API void zend_ptr_stack_init(zend_ptr_stack *stack)
{
stack->top_element = stack->elements = (void **) emalloc(sizeof(void *)*STACK_BLOCK_SIZE);
stack->max = STACK_BLOCK_SIZE;
stack->top_element = stack->elements = (void **) emalloc(sizeof(void *)*PTR_STACK_BLOCK_SIZE);
stack->max = PTR_STACK_BLOCK_SIZE;
stack->top = 0;
}
@@ -33,15 +35,49 @@ ZEND_API void zend_ptr_stack_init(zend_ptr_stack *stack)
ZEND_API inline void zend_ptr_stack_push(zend_ptr_stack *stack, void *ptr)
{
if (stack->top >= stack->max) { /* we need to allocate more memory */
short diff = stack->top_element-stack->elements;
stack->elements = (void **) erealloc(stack->elements, (sizeof(void *) * (stack->max *= 2 )));
stack->top_element = stack->elements+diff;
stack->top_element = stack->elements+stack->top;
}
stack->top++;
*(stack->top_element++) = ptr;
}
ZEND_API inline void zend_ptr_stack_n_push(zend_ptr_stack *stack, int count,...)
{
va_list ptr;
void *elem;
if (stack->top+count > stack->max) { /* we need to allocate more memory */
stack->max *= 2;
stack->max += count;
stack->elements = (void **) erealloc(stack->elements, (sizeof(void *) * (stack->max)));
stack->top_element = stack->elements+stack->top;
}
va_start(ptr, count);
while (count>0) {
elem = va_arg(ptr, void *);
stack->top++;
*(stack->top_element++) = elem;
count--;
}
va_end(ptr);
}
ZEND_API inline void zend_ptr_stack_n_pop(zend_ptr_stack *stack, int count,...)
{
va_list ptr;
void **elem;
va_start(ptr, count);
while (count>0) {
elem = va_arg(ptr, void **);
*elem = *(--stack->top_element);
stack->top--;
count--;
}
va_end(ptr);
}
ZEND_API inline void *zend_ptr_stack_pop(zend_ptr_stack *stack)
{
+3 -1
View File
@@ -28,11 +28,13 @@ typedef struct _zend_ptr_stack {
} zend_ptr_stack;
#define STACK_BLOCK_SIZE 64
#define PTR_STACK_BLOCK_SIZE 64
ZEND_API void zend_ptr_stack_init(zend_ptr_stack *stack);
ZEND_API void zend_ptr_stack_push(zend_ptr_stack *stack, void *ptr);
ZEND_API void zend_ptr_stack_n_push(zend_ptr_stack *stack, int count,...);
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 *));
+2 -2
View File
@@ -22,8 +22,8 @@
#include "zend.h"
#if HAVE_STDARG_H
#include <stdarg.h>
#ifdef HAVE_STDARG_H
# include <stdarg.h>
#endif
#if BROKEN_SPRINTF
+46
View File
@@ -116,3 +116,49 @@ ZEND_API int zend_stack_count(zend_stack *stack)
{
return stack->top;
}
ZEND_API void zend_stack_apply(zend_stack *stack, int (*apply_function)(void *element), int type)
{
int i;
switch (type) {
case ZEND_STACK_APPLY_TOPDOWN:
for (i=stack->top-1; i>=0; i--) {
if (apply_function(stack->elements[i])) {
break;
}
}
break;
case ZEND_STACK_APPLY_BOTTOMUP:
for (i=0; i<stack->top; i++) {
if (apply_function(stack->elements[i])) {
break;
}
}
break;
}
}
ZEND_API void zend_stack_apply_with_argument(zend_stack *stack, int (*apply_function)(void *element, void *arg), int type, void *arg)
{
int i;
switch (type) {
case ZEND_STACK_APPLY_TOPDOWN:
for (i=stack->top-1; i>=0; i--) {
if (apply_function(stack->elements[i], arg)) {
break;
}
}
break;
case ZEND_STACK_APPLY_BOTTOMUP:
for (i=0; i<stack->top; i++) {
if (apply_function(stack->elements[i], arg)) {
break;
}
}
break;
}
}
+4
View File
@@ -38,6 +38,10 @@ ZEND_API int zend_stack_is_empty(zend_stack *stack);
ZEND_API int zend_stack_destroy(zend_stack *stack);
ZEND_API void **zend_stack_base(zend_stack *stack);
ZEND_API int zend_stack_count(zend_stack *stack);
ZEND_API void zend_stack_apply(zend_stack *stack, int (*apply_function)(void *element), int type);
ZEND_API void zend_stack_apply_with_argument(zend_stack *stack, int (*apply_function)(void *element, void *arg), int type, void *arg);
#define ZEND_STACK_APPLY_TOPDOWN 1
#define ZEND_STACK_APPLY_BOTTOMUP 2
#endif /* _ZEND_STACK_H */
+42 -11
View File
@@ -51,7 +51,7 @@ ZEND_API inline void var_uninit(zval *var)
}
ZEND_API int zval_dtor(zval *zvalue)
ZEND_API int _zval_dtor(zval *zvalue ZEND_FILE_LINE_DC)
{
if (zvalue->type==IS_LONG) {
return 1;
@@ -59,20 +59,20 @@ ZEND_API int zval_dtor(zval *zvalue)
switch(zvalue->type) {
case IS_STRING:
case IS_CONSTANT:
STR_FREE(zvalue->value.str.val);
STR_FREE_REL(zvalue->value.str.val);
break;
case IS_ARRAY: {
ELS_FETCH();
if (zvalue->value.ht && (zvalue->value.ht != &EG(symbol_table))) {
zend_hash_destroy(zvalue->value.ht);
efree(zvalue->value.ht);
efree_rel(zvalue->value.ht);
}
}
break;
case IS_OBJECT:
zend_hash_destroy(zvalue->value.obj.properties);
efree(zvalue->value.obj.properties);
efree_rel(zvalue->value.obj.properties);
break;
case IS_RESOURCE:
/* destroy resource */
@@ -89,15 +89,23 @@ ZEND_API int zval_dtor(zval *zvalue)
}
void zval_del_ref(zval **p)
{
(*p)->refcount--;
if ((*p)->refcount==0) {
zval_dtor(*p);
efree(*p);
}
}
void zval_add_ref(zval **p)
{
(*p)->refcount++;
}
ZEND_API int zval_copy_ctor(zval *zvalue)
ZEND_API int _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC)
{
switch (zvalue->type) {
case IS_RESOURCE:
@@ -117,18 +125,20 @@ ZEND_API int zval_copy_ctor(zval *zvalue)
return SUCCESS;
}
}
zvalue->value.str.val = (char *) estrndup(zvalue->value.str.val, zvalue->value.str.len);
zvalue->value.str.val = (char *) estrndup_rel(zvalue->value.str.val, zvalue->value.str.len);
break;
case IS_ARRAY: {
zval *tmp;
HashTable *original_ht = zvalue->value.ht;
ELS_FETCH();
if (!zvalue->value.ht || zvalue->value.ht==&EG(symbol_table)) {
if (!zvalue->value.ht) {
var_reset(zvalue);
return FAILURE;
} else if (zvalue->value.ht==&EG(symbol_table)) {
return SUCCESS; /* do nothing */
}
zvalue->value.ht = (HashTable *) emalloc(sizeof(HashTable));
zvalue->value.ht = (HashTable *) emalloc_rel(sizeof(HashTable));
zend_hash_init(zvalue->value.ht, 0, NULL, PVAL_PTR_DTOR, 0);
zend_hash_copy(zvalue->value.ht, original_ht, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *));
}
@@ -137,7 +147,7 @@ ZEND_API int zval_copy_ctor(zval *zvalue)
zval *tmp;
HashTable *original_ht = zvalue->value.obj.properties;
zvalue->value.obj.properties = (HashTable *) emalloc(sizeof(HashTable));
zvalue->value.obj.properties = (HashTable *) emalloc_rel(sizeof(HashTable));
zend_hash_init(zvalue->value.obj.properties, 0, NULL, PVAL_PTR_DTOR, 0);
zend_hash_copy(zvalue->value.obj.properties, original_ht, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *));
}
@@ -153,6 +163,27 @@ ZEND_API int zend_print_variable(zval *var)
}
#if ZEND_DEBUG
ZEND_API int _zval_copy_ctor_wrapper(zval *zvalue)
{
return zval_copy_ctor(zvalue);
}
ZEND_API int _zval_dtor_wrapper(zval *zvalue)
{
return zval_dtor(zvalue);
}
ZEND_API int _zval_ptr_dtor_wrapper(zval **zval_ptr)
{
return zval_ptr_dtor(zval_ptr);
}
#endif
/*
* Local variables:
* tab-width: 4
+26 -7
View File
@@ -25,16 +25,35 @@
ZEND_API int zend_print_variable(zval *var);
BEGIN_EXTERN_C()
ZEND_API int zval_copy_ctor(zval *zvalue);
ZEND_API int zval_dtor(zval *zvalue);
ZEND_API int _zval_copy_ctor(zval *zvalue ZEND_FILE_LINE_DC);
ZEND_API int _zval_dtor(zval *zvalue ZEND_FILE_LINE_DC);
ZEND_API int _zval_ptr_dtor(zval **zval_ptr ZEND_FILE_LINE_DC);
#define zval_copy_ctor(zvalue) _zval_copy_ctor((zvalue) ZEND_FILE_LINE_CC)
#define zval_dtor(zvalue) _zval_dtor((zvalue) ZEND_FILE_LINE_CC)
#define zval_ptr_dtor(zval_ptr) _zval_ptr_dtor((zval_ptr) ZEND_FILE_LINE_CC)
#if ZEND_DEBUG
ZEND_API int _zval_copy_ctor_wrapper(zval *zvalue);
ZEND_API int _zval_dtor_wrapper(zval *zvalue);
ZEND_API int _zval_ptr_dtor_wrapper(zval **zval_ptr);
#define zval_copy_ctor_wrapper _zval_copy_ctor_wrapper
#define zval_dtor_wrapper _zval_dtor_wrapper
#define zval_ptr_dtor_wrapper _zval_ptr_dtor_wrapper
#else
#define zval_copy_ctor_wrapper _zval_copy_ctor
#define zval_dtor_wrapper _zval_dtor
#define zval_ptr_dtor_wrapper _zval_ptr_dtor
#endif
END_EXTERN_C()
ZEND_API int zval_ptr_dtor(zval **zval_ptr);
void zval_add_ref(zval **p);
#define PVAL_DESTRUCTOR (int (*)(void *)) zval_dtor
#define PVAL_PTR_DTOR (int (*)(void *)) zval_ptr_dtor
#define PVAL_COPY_CTOR (void (*)(void *)) zval_copy_ctor
void zval_add_ref(zval **p);
void zval_del_ref(zval **p);
#define PVAL_DESTRUCTOR (int (*)(void *)) zval_dtor_wrapper
#define PVAL_PTR_DTOR (int (*)(void *)) zval_ptr_dtor_wrapper
#define PVAL_COPY_CTOR (void (*)(void *)) zval_copy_ctor_wrapper
ZEND_API void var_reset(zval *var);
ZEND_API void var_uninit(zval *var);
+9 -1
View File
@@ -4,10 +4,12 @@
#undef PACKAGE
#undef VERSION
#undef HAVE_AOLSERVER
#undef HAVE_STRUCT_FLOCK
#undef HAVE_TM_GMTOFF
#define CONFIGURATION_FILE_PATH "php3.ini"
#define CONFIGURATION_FILE_PATH "php.ini"
#define USE_CONFIG_FILE 1
#undef HAVE_DMALLOC
@@ -116,3 +118,9 @@
/* 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
+213 -36
View File
@@ -2,6 +2,27 @@ dnl $Id$
dnl
dnl This file contains local autoconf functions.
dnl
dnl PHP_BUILD_SHARED
dnl
AC_DEFUN(PHP_BUILD_SHARED,[
php_build_target=shared
])
dnl
dnl PHP_BUILD_STATIC
dnl
AC_DEFUN(PHP_BUILD_STATIC,[
php_build_target=static
])
dnl
dnl PHP_BUILD_PROGRAM
dnl
AC_DEFUN(PHP_BUILD_PROGRAM,[
php_build_target=program
])
dnl
dnl AC_PHP_ONCE(namespace, variable, code)
dnl
@@ -25,7 +46,9 @@ AC_DEFUN(AC_EXPAND_PATH,[
if test -z "$1" || echo "$1" | grep '^/' >/dev/null ; then
$2="$1"
else
$2="`pwd`/$1"
ep_dir="`dirname \"$1\"`"
ep_realdir="`(cd \"$ep_dir\" && pwd)`"
$2="$ep_realdir/`basename \"$1\"`"
fi
])
@@ -35,16 +58,29 @@ dnl
dnl add a library to linkpath/runpath
dnl
AC_DEFUN(AC_ADD_LIBPATH,[
AC_EXPAND_PATH($1, ai_p)
AC_PHP_ONCE(LIBPATH, $ai_p, [
EXTRA_LIBS="$EXTRA_LIBS -L$ai_p"
RAW_RPATHS="$RAW_RPATHS ${raw_runpath_switch}$ai_p"
if test -n "$APXS" ; then
RPATHS="$RPATHS ${apxs_runpath_switch}$ai_p'"
else
RPATHS="$RPATHS ${ld_runpath_switch}$ai_p"
fi
])
if test "$1" != "/usr/lib"; then
AC_EXPAND_PATH($1, ai_p)
AC_PHP_ONCE(LIBPATH, $ai_p, [
EXTRA_LIBS="$EXTRA_LIBS -L$ai_p"
PHP_RPATHS="$PHP_RPATHS $ai_p"
])
fi
])
dnl
dnl AC_BUILD_RPATH()
dnl
dnl builds RPATH from PHP_RPATHS
dnl
AC_DEFUN(AC_BUILD_RPATH,[
if test "$enable_rpath" = "yes" && test -n "$PHP_RPATHS"; then
OLD_RPATHS="$PHP_RPATHS"
PHP_RPATHS=""
for i in $OLD_RPATHS; do
PHP_RPATHS="$PHP_RPATHS -R $i"
NATIVE_RPATHS="$NATIVE_RPATHS ${ld_runpath_switch}$i"
done
fi
])
dnl
@@ -53,10 +89,12 @@ dnl
dnl add a include path
dnl
AC_DEFUN(AC_ADD_INCLUDE,[
AC_EXPAND_PATH($1, ai_p)
AC_PHP_ONCE(INCLUDEPATH, $ai_p, [
INCLUDES="$INCLUDES -I$ai_p"
])
if test "$1" != "/usr/include"; then
AC_EXPAND_PATH($1, ai_p)
AC_PHP_ONCE(INCLUDEPATH, $ai_p, [
INCLUDES="$INCLUDES -I$ai_p"
])
fi
])
dnl
@@ -81,6 +119,10 @@ AC_DEFUN(AC_ADD_LIBRARY_WITH_PATH,[
])
AC_DEFUN(AM_SET_LIBTOOL_VARIABLE,[
LIBTOOL='$(SHELL) $(top_builddir)/libtool $1'
])
dnl
dnl Check for cc option
dnl
@@ -89,16 +131,41 @@ AC_DEFUN(AC_CHECK_CC_OPTION,[
opt="$1"
var=`echo $ac_n "$opt$ac_c"|tr -c a-zA-Z0-9 _`
AC_MSG_CHECKING([if compiler supports -$1 really])
ac_php_compile="${CC-cc} -$opt -c $CFLAGS $CPPFLAGS conftest.$ac_ext 2>&1"
if eval $ac_php_compile | egrep "$opt" > /dev/null 2>&1 ; then
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
eval php_cc_$var=no
AC_MSG_RESULT(no)
else
eval php_cc_$var=yes
AC_MSG_RESULT(yes)
if eval ./conftest 2>/dev/null ; then
eval php_cc_$var=yes
AC_MSG_RESULT(yes)
else
eval php_cc_$var=no
AC_MSG_RESULT(no)
fi
fi
])
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)
elif test "$REGEX_TYPE" = "system"; then
AC_DEFINE(REGEX,0)
elif test "$REGEX_TYPE" = "apache"; then
AC_DEFINE(REGEX,2)
fi
AC_MSG_CHECKING(which regex library to use)
AC_MSG_RESULT($REGEX_TYPE)
AC_SUBST(REGEX_DIR)
AC_SUBST(REGEX_LIB)
AC_SUBST(HSREGEX)
])
dnl
dnl See if we have broken header files like SunOS has.
@@ -132,29 +199,139 @@ AC_DEFUN(AC_BROKEN_SPRINTF,[
])
dnl
dnl Stuff to do when setting up a new extension.
dnl XXX have to change the hardcoding of ".a" when we want to be able
dnl to make dynamic libraries as well.
dnl PHP_EXTENSION(extname [, shared])
dnl
dnl Includes an extension in the build.
dnl
dnl "extname" is the name of the ext/ subdir where the extension resides
dnl "shared" can be set to "shared" or "yes" to build the extension as
dnl a dynamically loadable library.
dnl
AC_DEFUN(PHP_EXTENSION,[
EXT_SUBDIRS="$EXT_SUBDIRS $1"
if test "$2" != "shared" -a "$2" != "yes"; then
_extlib="libphpext_$1.a"
EXT_LIBS="$EXT_LIBS $1/$_extlib"
EXTINFO_DEPS="$EXTINFO_DEPS ../ext/$1/extinfo.c.stub"
EXT_STATIC="$EXT_STATIC $1"
else
EXT_SHARED="$EXT_SHARED $1"
if test -d "$cwd/$srcdir/ext/$1" ; then
EXT_SUBDIRS="$EXT_SUBDIRS $1"
if test "$2" != "shared" -a "$2" != "yes"; then
_extlib="libphpext_$1.a"
EXT_LTLIBS="$EXT_LTLIBS ext/$1/libphpext_$1.la"
EXT_LIBS="$EXT_LIBS $1/$_extlib"
EXT_STATIC="$EXT_STATIC $1"
else
EXT_SHARED="$EXT_SHARED $1"
fi
PHP_OUTPUT(ext/$1/Makefile)
fi
dnl EXT_INCLUDE_CODE="\#include \"ext/$1/php3_$1.h\"\\n$EXT_INCLUDE_CODE"
dnl EXT_MODULE_PTRS="phpext_$1_ptr, $EXT_MODULE_PTRS"
dnl "
])
AC_SUBST(EXT_SUBDIRS)
AC_SUBST(EXT_STATIC)
AC_SUBST(EXT_SHARED)
AC_SUBST(EXT_LIBS)
AC_SUBST(EXTINFO_DEPS)
dnl AC_SUBST(EXT_INCLUDE_CODE)
dnl AC_SUBST(EXT_MODULES_PTRS)
AC_SUBST(EXT_LTLIBS)
dnl
dnl Solaris requires main code to be position independent in order
dnl to let shared objects find symbols. Weird. Ugly.
dnl
dnl Must be run after all --with-NN options that let the user
dnl choose dynamic extensions, and after the gcc test.
dnl
AC_DEFUN(PHP_SOLARIS_PIC_WEIRDNESS,[
AC_MSG_CHECKING(whether -fPIC is required)
if test "$EXT_SHARED" != ""; then
os=`uname -sr 2>/dev/null`
case "$os" in
"SunOS 5.6"|"SunOS 5.7")
case "$CC" in
gcc*|egcs*) CFLAGS="$CFLAGS -fPIC";;
*) CFLAGS="$CFLAGS -fpic";;
esac
AC_MSG_RESULT(yes);;
*)
AC_MSG_RESULT(no);;
esac
else
AC_MSG_RESULT(no)
fi
])
dnl
dnl Checks whether $withval is "shared" or starts with "shared,XXX"
dnl and sets $shared to "yes" or "no", and removes "shared,?" stuff
dnl from $withval.
dnl
AC_DEFUN(PHP_WITH_SHARED,[
case $withval in
shared)
shared=yes
withval=yes
;;
shared,*)
shared=yes
withval=`echo $withval | sed -e 's/^shared,//'`
;;
*)
shared=no
;;
esac
])
dnl The problem is that the default compilation flags in Solaris 2.6 won't
dnl let programs access large files; you need to tell the compiler that
dnl you actually want your programs to work on large files. For more
dnl details about this brain damage please see:
dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
dnl Written by Paul Eggert <eggert@twinsun.com>.
AC_DEFUN(AC_SYS_LFS,
[dnl
# If available, prefer support for large files unless the user specified
# one of the CPPFLAGS, LDFLAGS, or LIBS variables.
AC_MSG_CHECKING(whether large file support needs explicit enabling)
ac_getconfs=''
ac_result=yes
ac_set=''
ac_shellvars='CPPFLAGS LDFLAGS LIBS'
for ac_shellvar in $ac_shellvars; do
case $ac_shellvar in
CPPFLAGS) ac_lfsvar=LFS_CFLAGS ;;
*) ac_lfsvar=LFS_$ac_shellvar ;;
esac
eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar
(getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; }
ac_getconf=`getconf $ac_lfsvar`
ac_getconfs=$ac_getconfs$ac_getconf
eval ac_test_$ac_shellvar=\$ac_getconf
done
case "$ac_result$ac_getconfs" in
yes) ac_result=no ;;
esac
case "$ac_result$ac_set" in
yes?*) ac_result="yes, but $ac_set is already set, so use its settings"
esac
AC_MSG_RESULT($ac_result)
case $ac_result in
yes)
for ac_shellvar in $ac_shellvars; do
eval $ac_shellvar=\$ac_test_$ac_shellvar
done ;;
esac
])
AC_DEFUN(AC_SOCKADDR_SA_LEN,[
AC_CACHE_CHECK([for field sa_len in struct sockaddr],ac_cv_sockaddr_sa_len,[
AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/socket.h>],
[struct sockaddr s; s.sa_len;],
[ac_cv_sockaddr_sa_len=yes
AC_DEFINE(HAVE_SOCKADDR_SA_LEN)],
[ac_cv_sockaddr_sa_len=no])
])
])
dnl ## PHP_AC_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,[
PHP_OUTPUT_FILES="$PHP_OUTPUT_FILES $1"
])
+1 -1
View File
@@ -1,5 +1,5 @@
##
## Apache 1.3 Makefile template for PHP3 Module
## Apache 1.3 Makefile template for PHP 4.0 Module
## [src/modules/php4/Makefile.tmpl]
##
+4 -6
View File
@@ -57,6 +57,10 @@
#define PHP_MYSQL_INCLUDE ""
#define PHP_MYSQL_LFLAGS ""
#define PHP_MYSQL_LIBS ""
#define PHP_ODBC_TYPE "@ODBC_TYPE@"
#define PHP_ODBC_INCLUDE "@ODBC_INCLUDE@"
#define PHP_ODBC_LFLAGS "@ODBC_LFLAGS@"
#define PHP_ODBC_LIBS "@ODBC_LIBS@"
#define PHP_ORACLE_HOME ""
#define PHP_ORACLE_INCLUDE ""
#define PHP_ORACLE_LFLAGS ""
@@ -84,9 +88,3 @@
#define PHP_VELOCIS_INCLUDE ""
#define PHP_VELOCIS_LIBS ""
#define ODBC_TYPE ""
#define ODBC_INCDIR ""
#define ODBC_INCLUDE ""
#define ODBC_LIBDIR ""
#define ODBC_LFLAGS ""
#define ODBC_LIBS ""
+91
View File
@@ -0,0 +1,91 @@
# Makefile to generate build tools
#
# Standard usage:
# make -f build.mk
#
# To prepare a self-contained distribution:
# make -f build.mk dist
#
#
# Written by Sascha Schumann
#
# $Id$
LT_TARGETS = ltmain.sh ltconfig
LT_PATCHES = patch-aa patch-ab
SUBDIRS = libzend TSRM
makefile_am_files = Makefile.am $(shell find ext sapi regex -name Makefile.am)
makefile_in_files = $(makefile_am_files:.am=.in)
makefile_files = $(makefile_am_files:e.am=e)
config_h_in = php_config.h.in
config_h_files = \
$(shell echo ext/*/config.h.stub sapi/*/config.h.stub)
config_m4_files = \
$(shell echo ext/*/config.m4 sapi/*/config.m4)
acconfig_h_SOURCES = acconfig.h.in $(config_h_files)
targets = $(makefile_in_files) $(LT_TARGETS) configure $(config_h_in)
all: $(targets)
@for i in $(SUBDIRS); do \
test -d $$i || (test -d ../$$i && ln -s ../$$i $$i); \
(cd $$i && $(MAKE) -f build.mk AMFLAGS=$(AMFLAGS)); \
done
dist:
@rm -f $(SUBDIRS) 2>/dev/null || true
@for i in $(SUBDIRS); do \
test -d $$i || (test -d ../$$i && cp -rp ../$$i $$i); \
done
@find . -type l -exec rm {} \;
$(MAKE) AMFLAGS=--copy -f build.mk
clean:
rm -f $(targets)
@for i in $(SUBDIRS); do \
(cd $$i && $(MAKE) -f build.mk clean); \
done
cvsclean:
@for i in $(shell find . -follow -name .cvsignore); do \
(cd `dirname $$i` && rm -rf `cat .cvsignore`); \
done
@rm -f $(SUBDIRS) 2>/dev/null || true
acconfig.h: $(acconfig_h_SOURCES)
@echo rebuilding $@
@cat $(acconfig_h_SOURCES) > $@
$(LT_TARGETS): $(LT_PATCHES)
rm -f $(LT_TARGETS)
libtoolize --automake -c -f
patch ltconfig < patch-aa
patch ltmain.sh < patch-ab
@grep compile_rpath ltconfig >/dev/null 2>&1 || (\
echo "patching libtool components failed."; \
exit 1)
$(makefile_in_files): $(makefile_am_files) aclocal.m4
@echo rebuilding Makefile.in\'s
@automake -a -i $(AMFLAGS) $(makefile_files) 2>&1 \
| grep -v PHP_OUTPUT_FILES || true >&2
aclocal.m4: configure.in acinclude.m4
aclocal
$(config_h_in): configure.in acconfig.h
# explicitly remove target since autoheader does not seem to work
# correctly otherwise (timestamps are not updated)
@rm -f $@
autoheader
configure: aclocal.m4 configure.in $(config_m4_files)
autoconf
+67 -10
View File
@@ -1,8 +1,13 @@
#!/bin/sh
supplied_flag=$1
# do some version checking for the tools we use
if test "$1" = "--force"; then
shift
# this is a posix correct "test -nt"
elif test "`ls -t buildconf buildconf.stamp 2>/dev/null |head -1`" != "buildconf"; then
:
else
echo "buildconf: checking installation..."
@@ -42,31 +47,67 @@ else
echo "buildconf: automake version $am_version (ok)"
fi
# The stuff from libtool we need is in CVS right now, so it is
# not required to run buildconf.
# libtool 1.3.3 or newer
lt_pversion=`libtool --version 2>/dev/null|sed -e 's/^[^0-9]*//' -e 's/[- ].*//'`
if test "$lt_pversion" = ""; then
echo "buildconf: libtool not found."
echo " You need libtool version 1.3 or newer installed"
echo " to build PHP from CVS."
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"
then
echo "buildconf: libtool version $lt_pversion (ok)"
else
echo "buildconf: libtool version $lt_pversion found."
echo " You need libtool version 1.3.3 or newer installed"
echo " to build PHP from CVS."
exit 1
fi
touch buildconf.stamp
fi
if test "$1" = "--copy"; then
am_prefix=`which automake | sed -e 's#/[^/]*/[^/]*$##'`
lt_prefix=`which libtool | sed -e 's#/[^/]*/[^/]*$##'`
if test "$am_prefix" != "$lt_prefix"; then
echo "buildconf: WARNING: automake and libtool are installed in different"
echo " directories. This may cause aclocal to fail."
echo "buildconf: continuing anyway"
fi
if test "$supplied_flag" = "--copy"; then
automake_flags=--copy
fi
if ! test -d libzend; then
if test ! -d libzend; then
if test -d ../libzend; then
echo "buildconf: linking ../libzend to ./libzend"
ln -s ../libzend .
else
echo "buildconf: can not find libzend"
echo " libzend should be installed in . or .."
echo " libzend should be installed in . or .., how to fetch:"
echo ""
echo " cvs -d :pserver:cvsread@cvs.zend.com:/repository login"
echo " (password \"zend\")"
echo " cvs -d :pserver:cvsread@cvs.zend.com:/repository co libzend"
echo ""
exit 1
fi
fi
if ! test -d TSRM; then
if test ! -d TSRM; then
if test -d ../TSRM; then
echo "buildconf: linking ../TSRM to ./TSRM"
ln -s ../TSRM .
else
echo "buildconf: can not find TSRM"
echo " TSRM should be installed in . or .."
echo " TSRM should be installed in . or .., how to fetch:"
echo ""
echo " cvs -d :pserver:cvsread@cvs.zend.com:/repository login"
echo " (password \"zend\")"
echo " cvs -d :pserver:cvsread@cvs.zend.com:/repository co TSRM"
echo ""
exit 1
fi
fi
@@ -75,6 +116,15 @@ fi
mv aclocal.m4 aclocal.m4.old 2>/dev/null
aclocal
if test "$?" != "0" -a "$am_prefix" != "$lt_prefix"; then
echo "buildconf: ERROR: aclocal failed, probably because automake and"
echo " libtool are installed with different prefixes;"
echo " automake is installed in $am_prefix, but libtool in $lt_prefix."
echo " Please re-install automake and/or libtool with a common prefix"
echo " and try again."
exit 1
fi
if cmp aclocal.m4.old aclocal.m4 > /dev/null 2>&1; then
echo "buildconf: keeping aclocal.m4"
mv aclocal.m4.old aclocal.m4
@@ -84,7 +134,12 @@ fi
autoheader
automake --add-missing --include-deps $automake_flags
# find all Makefile.ams
files="Makefile `find ext sapi regex -name Makefile.am | sed 's#\.am##' | tr '\n' ' '`"
# suppress stupid automake warning
automake --add-missing --include-deps $automake_flags $files 2>&1 | grep -v \$PHP_OUTPUT_FILES >&2
mv configure configure.old 2>/dev/null
autoconf
@@ -95,5 +150,7 @@ else
echo "buildconf: created or modified configure"
fi
(cd libzend; ./buildconf libzend/)
(cd TSRM; ./buildconf TSRM/)
if test "$supplied_flag" != "--local"; then
(cd libzend; ./buildconf $automake_flags libzend/)
(cd TSRM; ./buildconf $automake_flags TSRM/)
fi
+130 -40
View File
@@ -1,6 +1,7 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
# Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -36,6 +37,20 @@
# (but try to keep the structure clean).
#
# Use $HOST_CC if defined. $CC may point to a cross-compiler
if test x"$CC_FOR_BUILD" = x; then
if test x"$HOST_CC" != x; then
CC_FOR_BUILD="$HOST_CC"
else
if test x"$CC" != x; then
CC_FOR_BUILD="$CC"
else
CC_FOR_BUILD=cc
fi
fi
fi
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 8/24/94.)
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
@@ -78,7 +93,7 @@ main:
ret \$31,(\$26),1
.end main
EOF
${CC-cc} $dummy.s -o $dummy 2>/dev/null
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
if test "$?" = 0 ; then
./$dummy
case "$?" in
@@ -100,7 +115,13 @@ EOF
esac
fi
rm -f $dummy.s $dummy
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
exit 0 ;;
Alpha\ *:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# Should we change UNAME_MACHINE based on the output of uname instead
# of the specific Alpha model?
echo alpha-pc-interix
exit 0 ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
@@ -144,7 +165,7 @@ EOF
SR2?01:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp
exit 0;;
Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|MIS*:SMP_DC-OSx*:*:*)
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
if test "`(/bin/universe) 2>/dev/null`" = att ; then
echo pyramid-pyramid-sysv3
@@ -203,6 +224,32 @@ EOF
atari*:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
# The situation for MiNT is a little confusing. The machine name
# can be virtually everything (everything which is not
# "atarist" or "atariste" at least should have a processor
# > m68000). The system name ranges from "MiNT" over "FreeMiNT"
# to the lowercase version "mint" (or "freemint"). Finally
# the system name "TOS" denotes a system which is actually not
# MiNT. But MiNT is downward compatible to TOS, so this should
# be no problem.
atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
exit 0 ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
exit 0 ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
exit 0 ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
echo m68k-milan-mint${UNAME_RELEASE}
exit 0 ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
echo m68k-hades-mint${UNAME_RELEASE}
exit 0 ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
echo m68k-unknown-mint${UNAME_RELEASE}
exit 0 ;;
sun3*:NetBSD:*:*)
echo m68k-sun-netbsd${UNAME_RELEASE}
exit 0 ;;
@@ -236,7 +283,7 @@ EOF
VAX*:ULTRIX*:*:*)
echo vax-dec-ultrix${UNAME_RELEASE}
exit 0 ;;
2020:CLIX:*:*)
2020:CLIX:*:* | 2430:CLIX:*:*)
echo clipper-intergraph-clix${UNAME_RELEASE}
exit 0 ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
@@ -260,7 +307,7 @@ EOF
exit (-1);
}
EOF
${CC-cc} $dummy.c -o $dummy \
$CC_FOR_BUILD $dummy.c -o $dummy \
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
&& rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
@@ -326,7 +373,7 @@ EOF
exit(0);
}
EOF
${CC-cc} $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo rs6000-ibm-aix3.2.5
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
@@ -374,7 +421,7 @@ EOF
case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;;
9000/6?? | 9000/7?? | 9000/80[024] | 9000/8?[136790] | 9000/892 )
9000/[678][0-9][0-9])
sed 's/^ //' << EOF >$dummy.c
#include <stdlib.h>
#include <unistd.h>
@@ -406,7 +453,7 @@ EOF
exit (0);
}
EOF
(${CC-cc} $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
rm -f $dummy.c $dummy
esac
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
@@ -438,7 +485,7 @@ EOF
exit (0);
}
EOF
${CC-cc} $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo unknown-hitachi-hiuxwe2
exit 0 ;;
@@ -448,10 +495,7 @@ EOF
9000/8??:4.3bsd:*:*)
echo hppa1.0-hp-bsd
exit 0 ;;
*9??*:MPE*:*:*)
echo hppa1.0-hp-mpeix
exit 0 ;;
*9??*:MPE*:*:*)
*9??*:MPE/iX:*:*)
echo hppa1.0-hp-mpeix
exit 0 ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
@@ -470,6 +514,9 @@ EOF
parisc*:Lites*:*:*)
echo hppa1.1-hp-lites
exit 0 ;;
hppa*:OpenBSD:*:*)
echo hppa-unknown-openbsd
exit 0 ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
exit 0 ;;
@@ -509,7 +556,7 @@ EOF
echo cray2-cray-unicos
exit 0 ;;
F300:UNIX_System_V:*:*)
FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit 0 ;;
@@ -522,12 +569,12 @@ EOF
hp300:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
sparc*:BSD/OS:*:*)
echo sparc-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
exit 0 ;;
sparc*:BSD/OS:*:*)
echo sparc-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
*:BSD/OS:*:*)
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
@@ -552,6 +599,15 @@ EOF
i*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit 0 ;;
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
# UNAME_MACHINE based on the output of uname instead of i386?
echo i386-pc-interix
exit 0 ;;
i*:UWIN*:*)
echo ${UNAME_MACHINE}-pc-uwin
exit 0 ;;
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin
exit 0 ;;
@@ -562,16 +618,17 @@ EOF
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;;
*:Linux:*:*)
# # uname on the ARM produces all sorts of strangeness, and we need to
# # filter it out.
# case "$UNAME_MACHINE" in
# armv*) UNAME_MACHINE=$UNAME_MACHINE ;;
# arm* | sa110*) UNAME_MACHINE="arm" ;;
# esac
# uname on the ARM produces all sorts of strangeness, and we need to
# filter it out.
case "$UNAME_MACHINE" in
armv*) UNAME_MACHINE=$UNAME_MACHINE ;;
arm* | sa110*) UNAME_MACHINE="arm" ;;
esac
# The BFD linker knows what the default object file format is, so
# first see if it will tell us.
ld_help_string=`ld --help 2>&1`
# first see if it will tell us. cd to the root directory to prevent
# problems with other programs or directories called `ld' in the path.
ld_help_string=`cd /; ld --help 2>&1`
ld_supported_emulations=`echo $ld_help_string \
| sed -ne '/supported emulations:/!d
s/[ ][ ]*/ /g
@@ -584,8 +641,36 @@ EOF
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
elf32arm) echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0 ;;
elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;;
elf32ppc)
# Determine Lib Version
cat >$dummy.c <<EOF
#include <features.h>
#if defined(__GLIBC__)
extern char __libc_version[];
extern char __libc_release[];
#endif
main(argc, argv)
int argc;
char *argv[];
{
#if defined(__GLIBC__)
printf("%s %s\n", __libc_version, __libc_release);
#else
printf("unkown\n");
#endif
return 0;
}
EOF
LIBC=""
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
if test "$?" = 0 ; then
./$dummy | grep 1\.99 > /dev/null
if test "$?" = 0 ; then
LIBC="libc1"
fi
fi
rm -f $dummy.c $dummy
echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;;
esac
if test "${UNAME_MACHINE}" = "alpha" ; then
@@ -607,7 +692,7 @@ EOF
.end main
EOF
LIBC=""
${CC-cc} $dummy.s -o $dummy 2>/dev/null
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
if test "$?" = 0 ; then
./$dummy
case "$?" in
@@ -652,7 +737,7 @@ EOF
return 0;
}
EOF
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
else
# Either a pre-BFD a.out linker (linux-gnuoldld)
@@ -695,7 +780,7 @@ EOF
return 0;
}
EOF
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
fi ;;
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
@@ -718,6 +803,14 @@ EOF
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
fi
exit 0 ;;
i?86:*:5:7*)
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586
(/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686
(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE}
exit 0 ;;
i?86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
@@ -727,18 +820,15 @@ EOF
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
(/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
&& UNAME_MACHINE=i686
(/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
&& UNAME_MACHINE=i686
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
else
echo ${UNAME_MACHINE}-pc-sysv32
fi
exit 0 ;;
i?86:UnixWare:*:*)
if /bin/uname -X 2>/dev/null >/dev/null ; then
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
&& UNAME_MACHINE=i586
fi
echo ${UNAME_MACHINE}-unixware-${UNAME_RELEASE}-${UNAME_VERSION}
exit 0 ;;
pc:*:*:*)
# uname -m prints for DJGPP always 'pc', but it prints nothing about
# the processor, so we play safe by assuming i386.
@@ -825,7 +915,7 @@ EOF
news*:NEWS-OS:*:6*)
echo mips-sony-newsos6
exit 0 ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
echo mips-nec-sysv${UNAME_RELEASE}
else
@@ -959,7 +1049,7 @@ main ()
}
EOF
${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
# Apollos put the system type in the environment.
Vendored
+271 -35
View File
@@ -1,6 +1,6 @@
#! /bin/sh
# Configuration validation subroutine script, version 1.1.
# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
# Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc.
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can.
@@ -98,11 +98,21 @@ case $os in
os=
basic_machine=$1
;;
-sim | -cisco | -oki | -wec | -winbond)
os=
basic_machine=$1
;;
-scout)
;;
-wrs)
os=vxworks
basic_machine=$1
;;
-hiux*)
os=-hiuxwe2
;;
-sco5)
os=sco3.2v5
os=-sco3.2v5
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-sco4)
@@ -121,6 +131,9 @@ case $os in
os=-sco3.2v2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-udk*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
-isc)
os=-isc2.2
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
@@ -151,15 +164,21 @@ case $basic_machine in
# Some are omitted here because they have special meanings below.
tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
| 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \
| hppa2.0w \
| alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
| i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
| mips64 | mipsel | mips64el | mips64orion | mips64orionel \
| mipstx39 | mipstx39el | armv[34][lb] \
| sparc | sparclet | sparclite | sparc64 | v850)
| 580 | i960 | h8300 \
| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
| alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \
| we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
| mips64orion | mips64orionel | mipstx39 | mipstx39el \
| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
| mips64vr5000 | miprs64vr5000el \
| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
| thumb | d10v)
basic_machine=$basic_machine-unknown
;;
m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65)
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users.
@@ -175,25 +194,41 @@ case $basic_machine in
vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
| power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
| xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \
| hppa2.0w-* \
| alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
| ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
| power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
| xmp-* | ymp-* \
| hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
| alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \
| we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
| clipper-* | orion-* \
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
| sparc64-* | mips64-* | mipsel-* | armv[34][lb]-*\
| mips64el-* | mips64orion-* | mips64orionel-* \
| sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
| mips64el-* | mips64orion-* | mips64orionel-* \
| mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
| mipstx39-* | mipstx39el-* \
| f301-* | armv*-*)
| f301-* | armv*-* | t3e-* \
| m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
| thumb-* | v850-* | d30v-* | tic30-* | c30-* )
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
386bsd)
basic_machine=i386-unknown
os=-bsd
;;
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
basic_machine=m68000-att
;;
3b*)
basic_machine=we32k-att
;;
a29khif)
basic_machine=a29k-amd
os=-udi
;;
adobe68k)
basic_machine=m68010-adobe
os=-scout
;;
alliant | fx80)
basic_machine=fx80-alliant
;;
@@ -223,6 +258,10 @@ case $basic_machine in
basic_machine=m68k-apollo
os=-sysv
;;
apollo68bsd)
basic_machine=m68k-apollo
os=-bsd
;;
aux)
basic_machine=m68k-apple
os=-aux
@@ -299,6 +338,10 @@ case $basic_machine in
encore | umax | mmax)
basic_machine=ns32k-encore
;;
es1800 | OSE68k | ose68k | ose | OSE)
basic_machine=m68k-ericsson
os=-ose
;;
fx2800)
basic_machine=i860-alliant
;;
@@ -317,6 +360,14 @@ case $basic_machine in
basic_machine=h8300-hitachi
os=-hms
;;
h8300xray)
basic_machine=h8300-hitachi
os=-xray
;;
h8500hms)
basic_machine=h8500-hitachi
os=-hms
;;
harris)
basic_machine=m88k-harris
os=-sysv3
@@ -332,13 +383,30 @@ case $basic_machine in
basic_machine=m68k-hp
os=-hpux
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
basic_machine=hppa1.0-hp
;;
hp9k2[0-9][0-9] | hp9k31[0-9])
basic_machine=m68000-hp
;;
hp9k3[2-9][0-9])
basic_machine=m68k-hp
;;
hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
hp9k6[0-9][0-9] | hp6[0-9][0-9])
basic_machine=hppa1.0-hp
;;
hp9k7[0-79][0-9] | hp7[0-79][0-9])
basic_machine=hppa1.1-hp
;;
hp9k78[0-9] | hp78[0-9])
# FIXME: really hppa2.0-hp
basic_machine=hppa1.1-hp
;;
hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
# FIXME: really hppa2.0-hp
basic_machine=hppa1.1-hp
;;
hp9k8[0-9][13679] | hp8[0-9][13679])
basic_machine=hppa1.1-hp
;;
hp9k8[0-9][0-9] | hp8[0-9][0-9])
@@ -347,13 +415,13 @@ case $basic_machine in
hppa-next)
os=-nextstep3
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
basic_machine=hppa1.0-hp
os=-mpeix
hppaosf)
basic_machine=hppa1.1-hp
os=-osf
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
basic_machine=hppa1.0-hp
os=-mpeix
hppro)
basic_machine=hppa1.1-hp
os=-proelf
;;
i370-ibm* | ibm*)
basic_machine=i370-ibm
@@ -376,6 +444,22 @@ case $basic_machine in
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-solaris2
;;
i386mach)
basic_machine=i386-mach
os=-mach
;;
i386-vsta | vsta)
basic_machine=i386-unknown
os=-vsta
;;
i386-go32 | go32)
basic_machine=i386-unknown
os=-go32
;;
i386-mingw32 | mingw32)
basic_machine=i386-unknown
os=-mingw32
;;
iris | iris4d)
basic_machine=mips-sgi
case $os in
@@ -404,6 +488,10 @@ case $basic_machine in
miniframe)
basic_machine=m68000-convergent
;;
*mint | *MiNT)
basic_machine=m68k-atari
os=-mint
;;
mipsel*-linux*)
basic_machine=mipsel-unknown
os=-linux-gnu
@@ -418,10 +506,22 @@ case $basic_machine in
mips3*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
;;
monitor)
basic_machine=m68k-rom68k
os=-coff
;;
msdos)
basic_machine=i386-unknown
os=-msdos
;;
ncr3000)
basic_machine=i486-ncr
os=-sysv4
;;
netbsd386)
basic_machine=i386-unknown
os=-netbsd
;;
netwinder)
basic_machine=armv4l-corel
os=-linux
@@ -438,6 +538,10 @@ case $basic_machine in
basic_machine=mips-sony
os=-newsos
;;
necv70)
basic_machine=v70-nec
os=-sysv
;;
next | m*-next )
basic_machine=m68k-next
case $os in
@@ -463,9 +567,25 @@ case $basic_machine in
basic_machine=i960-intel
os=-nindy
;;
mon960)
basic_machine=i960-intel
os=-mon960
;;
np1)
basic_machine=np1-gould
;;
op50n-* | op60c-*)
basic_machine=hppa1.1-oki
os=-proelf
;;
OSE68000 | ose68000)
basic_machine=m68000-ericsson
os=-ose
;;
os68k)
basic_machine=m68k-none
os=-os68k
;;
pa-hitachi)
basic_machine=hppa1.1-hitachi
os=-hiuxwe2
@@ -483,19 +603,19 @@ case $basic_machine in
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
pentium | p5 | k5 | nexen)
pentium | p5 | k5 | k6 | nexen)
basic_machine=i586-pc
;;
pentiumpro | p6 | k6 | 6x86)
pentiumpro | p6 | 6x86)
basic_machine=i686-pc
;;
pentiumii | pentium2)
basic_machine=i786-pc
;;
pentium-* | p5-* | k5-* | nexen-*)
pentium-* | p5-* | k5-* | k6-* | nexen-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumpro-* | p6-* | k6-* | 6x86-*)
pentiumpro-* | p6-* | 6x86-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumii-* | pentium2-*)
@@ -519,12 +639,20 @@ case $basic_machine in
ps2)
basic_machine=i386-ibm
;;
rom68k)
basic_machine=m68k-rom68k
os=-coff
;;
rm[46]00)
basic_machine=mips-siemens
;;
rtpc | rtpc-*)
basic_machine=romp-ibm
;;
sa29200)
basic_machine=a29k-amd
os=-udi
;;
sequent)
basic_machine=i386-sequent
;;
@@ -532,6 +660,10 @@ case $basic_machine in
basic_machine=sh-hitachi
os=-hms
;;
sparclite-wrs)
basic_machine=sparclite-wrs
os=-vxworks
;;
sps7)
basic_machine=m68k-bull
os=-sysv2
@@ -539,6 +671,13 @@ case $basic_machine in
spur)
basic_machine=spur-unknown
;;
st2000)
basic_machine=m68k-tandem
;;
stratus)
basic_machine=i860-stratus
os=-sysv4
;;
sun2)
basic_machine=m68000-sun
;;
@@ -583,6 +722,10 @@ case $basic_machine in
basic_machine=i386-sequent
os=-dynix
;;
t3e)
basic_machine=t3e-cray
os=-unicos
;;
tx39)
basic_machine=mipstx39-unknown
;;
@@ -600,6 +743,10 @@ case $basic_machine in
basic_machine=a29k-nyu
os=-sym1
;;
v810 | necv810)
basic_machine=v810-nec
os=-none
;;
vaxv)
basic_machine=vax-dec
os=-sysv
@@ -623,6 +770,14 @@ case $basic_machine in
basic_machine=a29k-wrs
os=-vxworks
;;
w65*)
basic_machine=w65-wdc
os=-none
;;
w89k-*)
basic_machine=hppa1.1-winbond
os=-proelf
;;
xmp)
basic_machine=xmp-cray
os=-unicos
@@ -630,6 +785,10 @@ case $basic_machine in
xps | xps100)
basic_machine=xps100-honeywell
;;
z8k-*-coff)
basic_machine=z8k-unknown
os=-sim
;;
none)
basic_machine=none-none
os=-none
@@ -637,6 +796,15 @@ case $basic_machine in
# Here we handle the default manufacturer of certain CPU types. It is in
# some cases the only manufacturer, in others, it is the most popular.
w89k)
basic_machine=hppa1.1-winbond
;;
op50n)
basic_machine=hppa1.1-oki
;;
op60c)
basic_machine=hppa1.1-oki
;;
mips)
if [ x$os = x-linux-gnu ]; then
basic_machine=mips-unknown
@@ -659,7 +827,7 @@ case $basic_machine in
we32k)
basic_machine=we32k-att
;;
sparc)
sparc | sparcv9)
basic_machine=sparc-sun
;;
cydra)
@@ -671,6 +839,16 @@ case $basic_machine in
orion105)
basic_machine=clipper-highlevel
;;
mac | mpw | mac-mpw)
basic_machine=m68k-apple
;;
pmac | pmac-mpw)
basic_machine=powerpc-apple
;;
c4x*)
basic_machine=c4x-none
os=-coff
;;
*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
@@ -724,14 +902,21 @@ case $os in
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -rhapsody* \
| -openstep* | -mpeix* | -oskit*)
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
| -macos* | -mpw* | -magic* | -mon960* | -lnews*)
;;
-mac*)
os=`echo $os | sed -e 's|mac|macos|'`
;;
-linux*)
os=`echo $os | sed -e 's|linux|linux-gnu|'`
;;
@@ -756,6 +941,9 @@ case $os in
-acis*)
os=-aos
;;
-386bsd)
os=-bsd
;;
-ctix* | -uts*)
os=-sysv
;;
@@ -787,9 +975,18 @@ case $os in
# This must come after -sysvr4.
-sysv*)
;;
-ose*)
os=-ose
;;
-es1800*)
os=-ose
;;
-xenix)
os=-xenix
;;
-*mint | -*MiNT)
os=-mint
;;
-none)
;;
*)
@@ -839,6 +1036,15 @@ case $basic_machine in
# default.
# os=-sunos4
;;
m68*-cisco)
os=-aout
;;
mips*-cisco)
os=-elf
;;
mips*-*)
os=-elf
;;
*-tti) # must be before sparc entry or we get the wrong os.
os=-sysv3
;;
@@ -851,6 +1057,15 @@ case $basic_machine in
*-ibm)
os=-aix
;;
*-wec)
os=-proelf
;;
*-winbond)
os=-proelf
;;
*-oki)
os=-proelf
;;
*-hp)
os=-hpux
;;
@@ -914,6 +1129,18 @@ case $basic_machine in
f301-fujitsu)
os=-uxpv
;;
*-rom68k)
os=-coff
;;
*-*bug)
os=-coff
;;
*-apple)
os=-macos
;;
*-atari*)
os=-mint
;;
*)
os=-none
;;
@@ -935,10 +1162,10 @@ case $basic_machine in
-aix*)
vendor=ibm
;;
-hpux*)
vendor=hp
-beos*)
vendor=be
;;
-mpeix*)
-hpux*)
vendor=hp
;;
-mpeix*)
@@ -971,6 +1198,15 @@ case $basic_machine in
-aux*)
vendor=apple
;;
-hms*)
vendor=hitachi
;;
-mpw* | -macos*)
vendor=apple
;;
-*mint | -*MiNT)
vendor=atari
;;
esac
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
;;
+239 -428
View File
@@ -1,37 +1,20 @@
dnl $Id$ -*- sh -*-
dnl Process this file with autoconf to produce a configure script.
dnl ## $Id$ -*- sh -*-
dnl ## Process this file with autoconf to produce a configure script.
divert(0)
AC_INIT(main.c)
recurse=yes
for arg in $@; do
case $arg in
## This is to prevent "./config.status --recheck" from
## running configure in libzend again.
--no-recursion) recurse=no;;
--enable-thread-safety) threadsafe=yes;;
*) ;;
esac
done
if test "$with_shared_apache" != "no" && test -n "$with_shared_apache" ; then
echo ""
echo "ERROR: --with-shared-apache is not supported."
echo " Please read INSTALL.DSO for instructions on using APXS."
exit 1
AC_MSG_ERROR(--with-shared-apache is not supported. Please refer to the documentation for using APXS)
fi
if test -n "$with_apache" && test -n "$with_apxs"; then
AC_MSG_ERROR(--with-apache and --with-apxs cannot be used together)
fi
cwd=`pwd`
cachefile=$cwd/config.cache
if test "$recurse" = "yes"; then
(set -x; test -d libzend || mkdir libzend ; cd libzend; $cwd/$srcdir/libzend/configure --cache-file=$cachefile $@)
if test "$threadsafe" = "yes"; then
(set -x; test -d TSRM || mkdir TSRM; cd TSRM; $cwd/$srcdir/TSRM/configure --cache-file=$cachefile $@)
fi
fi
(set -x; cd $srcdir; ./ltconfig --disable-static --enable-dlopen --cache-file=$cachefile ltmain.sh)
passthru="$@"
dnl ## Diversion 1 is the initial checking of OS features, programs,
dnl ## libraries and so on.
@@ -39,7 +22,7 @@ dnl ## libraries and so on.
dnl ## In diversion 2 we check for compile-time options to the PHP
dnl ## core and how to deal with different system dependencies. This
dnl ## includes what regex library is used and whether debugging or short
dnl ## tags are enabled, and the default behaviour of php3.ini options.
dnl ## tags are enabled, and the default behaviour of php.ini options.
dnl ## This is also where an SAPI interface is selected (choosing between
dnl ## Apache module, CGI etc.)
@@ -51,9 +34,7 @@ dnl ## Diversion 4 is the last one. Here we generate files and clean up.
divert(1)
dnl ## This is where the version number is changed from now on!
AM_INIT_AUTOMAKE(php, 4.0b2-dev)
AM_INIT_AUTOMAKE(php, 4.0b3)
PHP_VERSION=$VERSION
echo "/* automatically generated by configure */" > php_version.h.new
@@ -71,24 +52,28 @@ AC_SUBST(PHP_VERSION)
AM_CONFIG_HEADER(php_config.h)
AM_MAINTAINER_MODE
phplibdir=$libdir/php
AC_SUBST(phplibdir)
dnl We want this one before the checks, so the checks can modify CFLAGS.
test -z "$CFLAGS" && auto_cflags=1
dnl If we're using cc on HP-UX, add the -Ae to CFLAGS
if test -n "$auto_cflags" && test "`uname -s 2>/dev/null`" = "HP-UX"; then
test -n "$GCC" || CFLAGS="-Ae $CFLAGS -D_HPUX_SOURCE"
fi
dnl If we're using cc on HP-UX, add -Ae -D_HPUX_SOURCE [obsolete]
dnl if test -n "$auto_cflags" && test "`uname -s 2>/dev/null`" = "HP-UX"; then
dnl test -n "$GCC" || CFLAGS="-Ae $CFLAGS -D_HPUX_SOURCE"
dnl fi
dnl Checks for programs.
AM_PROG_LIBTOOL
AC_PROG_YACC
if test "$YACC" != "bison -y"; then
AC_MSG_WARN(You will need bison if you want to regenerate the PHP parsers.)
else
AC_MSG_CHECKING(bison version)
set `$YACC --version| sed -e 's/^GNU Bison version //' -e 's/\./ /'`
oldIFS=$IFS; IFS=.
set `bison -V | sed -e 's/^GNU Bison version //'`
IFS=$oldIFS
if test "$1" = "1" -a "$2" -lt "25"; then
AC_MSG_WARN(You will need bison 1.25 if you want to regenerate the PHP parsers (found $1.$2).)
AC_MSG_WARN(Bison 1.25 or newer needed to regenerate parsers (found $1.$2).)
fi
AC_MSG_RESULT($1.$2 (ok))
fi
@@ -98,11 +83,14 @@ dnl## OLDLIBS=$LIBS; LIBS=""
AC_PROG_CC
dnl## LIBS=$OLDLIBS
AM_PROG_CC_STDC
AC_PROG_RANLIB
AC_PROG_CC_C_O
AC_PROG_LN_S
AC_PATH_PROG(PERL_PATH, perl)
AM_PROG_LEX
dnl Make flex scanners use const if they can, even if __STDC__ is not
dnl true, for compilers like Sun's that only set __STDC__ true in
@@ -119,11 +107,6 @@ if test "$ac_cv_prog_gcc" = "yes" -a "`uname -s`" = "Rhapsody"; then
CPPFLAGS="$CPPFLAGS -traditional-cpp"
fi
if test "`uname -sv`" = "AIX 4" -a "$GCC" != "yes"; then
APXS_EXP="-bE:mod_php4.exp"
fi
AC_SUBST(APXS_EXP)
dnl Ugly hack to get around a problem with gcc on AIX.
if test "$CC" = "gcc" -a "$ac_cv_prog_cc_g" = "yes" -a \
"`uname -sv`" = "AIX 4"; then
@@ -140,8 +123,6 @@ AC_CACHE_VAL(php_cv_cc_dashr,[
AC_MSG_RESULT($php_cv_cc_dashr)
if test $php_cv_cc_dashr = "yes"; then
ld_runpath_switch="-R"
raw_runpath_switch="-R"
apxs_runpath_switch="-Wl,-R'"
else
AC_MSG_CHECKING([if compiler supports -Wl,-rpath,])
AC_CACHE_VAL(php_cv_cc_rpath,[
@@ -152,36 +133,12 @@ else
AC_MSG_RESULT($php_cv_cc_rpath)
if test $php_cv_cc_rpath = "yes"; then
ld_runpath_switch="-Wl,-rpath,"
raw_runpath_switch="-rpath "
apxs_runpath_switch="-Wl,'-rpath "
else
dnl something innocuous
ld_runpath_switch="-L"
raw_runpath_switch="-L"
apxs_runpath_switch="-L'"
fi
fi
dnl Check compiler support for -rdynamic
AC_MSG_CHECKING(if compiler supports -rdynamic)
AC_CACHE_VAL(php_cc_rdynamic,[
SAVE_LIBS="${LIBS}"
LIBS="-rdynamic ${LIBS}"
AC_TRY_LINK([], [], php_cc_rdynamic=yes, php_cc_rdynamic=no)
LIBS="${SAVE_LIBS}"])
AC_MSG_RESULT($php_cc_rdynamic)
if test $php_cc_rdynamic = "yes"; then
AC_CHECK_CC_OPTION(rdynamic)
fi
if test $php_cc_rdynamic = "yes"; then
LDFLAGS="${LDFLAGS} -rdynamic"
RDYNAMIC_LFLAGS="-rdynamic"
else
RDYNAMIC_LFLAGS=""
fi
AC_SUBST(RDYNAMIC_LFLAGS)
dnl AC_PROG_INSTALL
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
@@ -197,32 +154,28 @@ if test -d /usr/pkg/include -a -d /usr/pkg/lib ; then
LDFLAGS="$LDFLAGS -L/usr/pkg/lib"
fi
INCLUDES="-I\$(top_builddir)/libzend -I\$(top_builddir)/TSRM"
INCLUDES="-I\$(top_builddir)/libzend -I\$(top_srcdir) -I\$(top_srcdir)/libzend"
AC_SUBST(INCLUDES)
AC_CHECK_LIB(nsl, gethostname, [
LIBS="-lnsl $LIBS"
AC_DEFINE(HAVE_LIBNSL) ], [])
AC_ADD_LIBRARY(nsl)
AC_DEFINE(HAVE_LIBNSL) ], [])
AC_CHECK_LIB(c, socket, [:], [
AC_CHECK_LIB(socket, socket, [
LIBS="-lsocket $LIBS"
AC_DEFINE(HAVE_LIBSOCKET) ], []) ])
AC_CHECK_LIB(socket, socket, [
AC_ADD_LIBRARY(socket)
AC_DEFINE(HAVE_LIBSOCKET) ], [])
AC_CHECK_LIB(c, gethostbyaddr, [:], [
AC_CHECK_LIB(nsl, gethostbyaddr, [
LIBS="-lnsl $LIBS"
AC_DEFINE(HAVE_LIBNSL) ], []) ])
AC_CHECK_LIB(nsl, gethostbyaddr, [
AC_ADD_LIBRARY(nsl)
AC_DEFINE(HAVE_LIBNSL) ], [])
AC_CHECK_LIB(c, crypt, [:], [
AC_CHECK_LIB(crypt, crypt, [
LIBS="-lcrypt $LIBS"
AC_DEFINE(HAVE_LIBCRYPT) ], []) ])
AC_CHECK_LIB(crypt, crypt, [
AC_ADD_LIBRARY(crypt)
AC_DEFINE(HAVE_LIBCRYPT) ], [])
dnl The sin may be in a library which need not be specifed
dnl as well as res_search resides in libsocket
AC_CHECK_LIB(c, sin, [:], [
AC_CHECK_LIB(m, sin) ])
AC_CHECK_LIB(m, sin)
dnl The res_search may be in libsocket as well, and if it is
dnl make sure to check for dn_skipname in libresolv, or if res_search
@@ -252,7 +205,35 @@ else
fi
AC_MISSING_FCLOSE_DECL
dnl QNX requires unix.h to allow functions in libunix to work properly
AC_CHECK_HEADERS(fcntl.h unistd.h crypt.h sys/file.h memory.h pwd.h grp.h sys/socket.h sys/wait.h syslog.h string.h sys/varargs.h stdarg.h sys/time.h signal.h netinet/in.h dlfcn.h limits.h sys/types.h unix.h arpa/inet.h locale.h)
AC_CHECK_HEADERS(
arpa/inet.h \
crypt.h \
dlfcn.h \
fcntl.h \
grp.h \
limits.h \
locale.h \
memory.h \
netinet/in.h \
pwd.h \
signal.h \
stdarg.h \
stdlib.h \
string.h \
sys/file.h \
sys/mman.h \
sys/select.h \
sys/socket.h \
sys/statfs.h \
sys/statvfs.h \
sys/time.h \
sys/types.h \
sys/varargs.h \
sys/wait.h \
syslog.h \
unistd.h \
unix.h \
)
dnl Checks for typedefs, structures, and compiler characteristics.
AC_STRUCT_TM
@@ -310,7 +291,51 @@ AC_CHECK_TYPE( ulong, unsigned long )
dnl Checks for library functions.
AC_FUNC_VPRINTF
AC_CHECK_FUNCS(memcpy memmove strdup strerror strcasecmp strstr flock lockf putenv tempnam usleep setlocale gettimeofday setvbuf srand48 lrand48 srandom random link symlink regcomp getlogin cuserid vsnprintf snprintf gcvt utime crypt rint unsetenv strftime setsockopt tzset shutdown inet_aton)
AC_CHECK_FUNCS(
crypt \
cuserid \
flock \
gcvt \
getlogin \
gethostbyaddr \
gettimeofday \
inet_aton \
link \
lockf \
lrand48 \
memcpy \
memmove \
mmap \
putenv \
random \
regcomp \
rint \
setitimer \
setlocale \
setsockopt \
setvbuf \
shutdown \
sin \
snprintf \
srand48 \
srandom \
statfs \
statvfs \
strcasecmp \
strdup \
strerror \
strftime \
strstr \
symlink \
tempnam \
tzset \
unsetenv \
usleep \
utime \
vsnprintf \
)
AC_REPLACE_FUNCS(strlcat strlcpy)
AC_FUNC_UTIME_NULL
AC_FUNC_ALLOCA
dnl## OLDLIBS=$LIBS; LIBS=""
@@ -347,259 +372,23 @@ abs_builddir=`pwd`
AC_SUBST(abs_srcdir)
AC_SUBST(abs_builddir)
AC_MSG_CHECKING(for Apache module support via DSO through APXS)
AC_ARG_WITH(apxs,
[ --with-apxs[=FILE] Build shared Apache module. FILE is the optional
pathname to the Apache apxs tool; defaults to "apxs".
(This option needs Perl installed)],
RESULT=no
AC_MSG_CHECKING(whether to enable versioning)
AC_ARG_ENABLE(versioning,
[ --enable-versioning Take advantage of versioning and scoping.
See INSTALL for more information],
[
if test "$withval" = "yes"; then
withval=apxs
fi
AC_EXPAND_PATH($withval, APXS)
APXS_LDFLAGS="@SYBASE_LFLAGS@ @SYBASE_LIBS@ @SYBASE_CT_LFLAGS@ @SYBASE_CT_LIBS@"
APACHE_INCLUDE="-I`$APXS -q INCLUDEDIR`"
BINNAME=libphp4.so
INSTALL_IT="\$(APXS) -i -a -n php4 $BINNAME"
CFLAGS_SHLIB=`perl -V:cccdlflags | cut -d\' -f2`
LDFLAGS_SHLIB=`perl -V:lddlflags | cut -d\' -f2`
LDFLAGS_SHLIB_EXPORT=`perl -V:ccdlflags | cut -d\' -f2`
PHP_LIBS=
STRONGHOLD=
INCLUDES="$INCLUDES $APACHE_INCLUDE"
AC_DEFINE(APACHE)
AC_SUBST(APXS)
AC_SUBST(APXS_LDFLAGS)
AC_SUBST(BINNAME)
AC_SUBST(INSTALL_IT)
AC_SUBST(PHP_LIBS)
AC_SUBST(APACHE_INCLUDE)
AC_DEFINE(HAVE_AP_CONFIG_H)
AC_DEFINE(HAVE_AP_COMPAT_H)
AC_MSG_RESULT(yes)
],[
AC_MSG_RESULT(no)
if test "$enableval" = "yes" ; then
EXTRA_LDFLAGS="-export-symbols \$(srcdir)/php.sym"
RESULT="yes"
fi
])
APACHE_INSTALL_FILES="$srcdir/mod_php4.* libphp4.module"
if test "$BINNAME" != "libmodphp4-so.a"; then
if test "$BINNAME" != "libphp4.so"; then
AC_MSG_CHECKING(for Apache module support)
AC_ARG_WITH(apache,
[ --with-apache[=DIR] Build Apache module. DIR is the top-level Apache
build directory, defaults to /usr/local/etc/httpd.],
[
if test "$withval" = "yes"; then
# Apache's default directory
withval=/usr/local/etc/httpd
fi
if test "$withval" != "no"; then
rpath_raw=yes
# For Apache 1.2.x
AC_EXPAND_PATH($withval, withval)
if test -f $withval/src/httpd.h; then
APACHE_INCLUDE=-I$withval/src
APACHE_TARGET=$withval/src
BINNAME=libphp4.a
INSTALL_IT="mkdir -p $APACHE_TARGET; cp $BINNAME $APACHE_INSTALL_FILES $APACHE_TARGET"
PHP_LIBS="-L. -lphp3"
AC_DEFINE(APACHE)
AC_MSG_RESULT(yes - Apache 1.2.x)
STRONGHOLD=
if test -f $withval/src/ap_config.h; then
AC_DEFINE(HAVE_AP_CONFIG_H)
fi
# For Apache 1.3.x
elif test -f $withval/src/main/httpd.h; then
APACHE_INCLUDE="-I$withval/src/main -I$withval/src/os/unix -I$withval/src/ap"
APACHE_TARGET=$withval/src/modules/php4
if test ! -d $APACHE_TARGET; then
mkdir $APACHE_TARGET
fi
BINNAME=libmodphp4.a
INSTALL_IT="mkdir -p $APACHE_TARGET; cp $BINNAME $APACHE_INSTALL_FILES $APACHE_TARGET; cp $srcdir/apMakefile.tmpl $APACHE_TARGET/Makefile.tmpl; cp $srcdir/apMakefile.libdir $APACHE_TARGET/Makefile.libdir"
PHP_LIBS="-Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4"
AC_DEFINE(APACHE)
AC_MSG_RESULT(yes - Apache 1.3.x)
STRONGHOLD=
if test -f $withval/src/include/ap_config.h; then
AC_DEFINE(HAVE_AP_CONFIG_H)
fi
if test -f $withval/src/include/ap_compat.h; then
AC_DEFINE(HAVE_AP_COMPAT_H)
if test ! -f $withval/src/include/ap_config_auto.h; then
AC_MSG_ERROR(Please run Apache's configure or src/Configure program once and try again)
fi
else
if test -f $withval/src/include/compat.h; then
AC_DEFINE(HAVE_OLD_COMPAT_H)
fi
fi
# Also for Apache 1.3.x
elif test -f $withval/src/include/httpd.h; then
APACHE_INCLUDE="-I$withval/src/include -I$withval/src/os/unix"
APACHE_TARGET=$withval/src/modules/php4
if test ! -d $APACHE_TARGET; then
mkdir $APACHE_TARGET
fi
BINNAME=libmodphp4.a
PHP_LIBS="-Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4"
INSTALL_IT="mkdir -p $APACHE_TARGET; cp $BINNAME $APACHE_INSTALL_FILES $APACHE_TARGET; cp $srcdir/apMakefile.tmpl $APACHE_TARGET/Makefile.tmpl; cp $srcdir/apMakefile.libdir $APACHE_TARGET/Makefile.libdir"
AC_DEFINE(APACHE)
AC_MSG_RESULT(yes - Apache 1.3.x)
STRONGHOLD=
if test -f $withval/src/include/ap_config.h; then
AC_DEFINE(HAVE_AP_CONFIG_H)
fi
if test -f $withval/src/include/ap_compat.h; then
AC_DEFINE(HAVE_AP_COMPAT_H)
if test ! -f $withval/src/include/ap_config_auto.h; then
AC_MSG_ERROR(Please run Apache's configure or src/Configure program once and try again)
fi
else
if test -f $withval/src/include/compat.h; then
AC_DEFINE(HAVE_OLD_COMPAT_H)
fi
fi
# For StrongHold 2.2
elif test -f $withval/apache/httpd.h; then
APACHE_INCLUDE=-"I$withval/apache -I$withval/ssl/include"
APACHE_TARGET=$withval/apache
BINNAME=libmodphp4.a
PHP_LIBS="-Lmodules/php4 -L../modules/php4 -L../../modules/php4 -lmodphp4"
INSTALL_IT="mkdir -p $APACHE_TARGET; cp $BINNAME $APACHE_INSTALL_FILES $APACHE_TARGET"
STRONGHOLD=-DSTRONGHOLD=1
AC_DEFINE(APACHE)
AC_MSG_RESULT(yes - StrongHold)
if test -f $withval/apache/ap_config.h; then
AC_DEFINE(HAVE_AP_CONFIG_H)
fi
if test -f $withval/src/ap_compat.h; then
AC_DEFINE(HAVE_AP_COMPAT_H)
if test ! -f $withval/src/include/ap_config_auto.h; then
AC_MSG_ERROR(Please run Apache's configure or src/Configure program once and try again)
fi
else
if test -f $withval/src/compat.h; then
AC_DEFINE(HAVE_OLD_COMPAT_H)
fi
fi
else
AC_MSG_RESULT(no)
AC_MSG_ERROR(Invalid Apache directory - unable to find httpd.h under $withval)
fi
else
AC_MSG_RESULT(no)
BINNAME=php
INSTALL_IT="cp $BINNAME \$(bindir)"
fi
],[
AC_MSG_RESULT(no)
BINNAME=php
INSTALL_IT="cp $BINNAME \$(bindir)"
])
INCLUDES="$INCLUDES $APACHE_INCLUDE"
dnl## AC_SUBST(APACHE_INCLUDE)
AC_SUBST(APACHE_TARGET)
AC_SUBST(INSTALL_IT)
AC_SUBST(BINNAME)
AC_SUBST(STRONGHOLD)
AC_SUBST(PHP_LIBS)
fi
fi
AC_MSG_CHECKING(whether to use bundled regex library)
AC_ARG_WITH(system-regex,
[ --with-system-regex Do not use the bundled regex library],
[
if test -n "$APXS"; then
if test -n "`$APXS -q CFLAGS | grep USE_HSREGEX`"; then
HSREGEX=yes
else
HSREGEX=no
fi
else
if test "$withval" = "no"; then
HSREGEX=yes
else
HSREGEX=no
fi
fi
],[
if test -n "$APXS"; then
if test -n "`$APXS -q CFLAGS | grep USE_HSREGEX`"; then
HSREGEX=yes
else
HSREGEX=no
fi
else
HSREGEX=yes
fi
])
AC_MSG_RESULT($HSREGEX)
if test "$HSREGEX" = "yes"; then
REGEX_LIB=regex/libregex.a
EXTRA_LIBS="-L$abs_builddir/regex -lregex $EXTRA_LIBS"
AC_DEFINE(HSREGEX)
AC_DEFINE(REGEX,1)
else
REGEX_LIB=
AC_DEFINE(REGEX,0)
fi
AC_SUBST(REGEX_LIB)
AC_SUBST(HSREGEX)
AC_MSG_CHECKING(for mod_charset compatibility option)
AC_ARG_WITH(mod_charset,
[ --with-mod_charset Enable transfer tables for mod_charset (Rus Apache).],
[
AC_MSG_RESULT(yes)
AC_DEFINE(USE_TRANSFER_TABLES)
],[
AC_MSG_RESULT(no)
])
AC_MSG_CHECKING(for fhttpd module support)
AC_ARG_WITH(fhttpd,
[ --with-fhttpd[=DIR] Build fhttpd module. DIR is the fhttpd sources
directory, defaults to /usr/local/src/fhttpd.],
[
if test "$withval" = "yes"; then
# fhttpd source directory
withval=/usr/local/src/fhttpd
fi
if test "$withval" != "no"; then
# For fhttpd 0.3.x
if test -f $withval/servproc.h; then
FHTTPD_INCLUDE=-I$withval/
FHTTPD_LIB=$withval/servproc.o
FHTTPD_TARGET=$withval/
BINNAME=php
AC_DEFINE(FHTTPD)
AC_MSG_RESULT(yes - fhttpd 0.3.x)
else
AC_MSG_RESULT(no)
AC_MSG_ERROR(Invalid fhttpd directory - unable to find servproc.h under $withval)
fi
else
AC_MSG_RESULT(no)
fi
],[
AC_MSG_RESULT(no)
])
INCLUDES="$INCLUDES $FHTTPD_INCLUDE"
dnl## AC_SUBST(FHTTPD_INCLUDE)
AC_SUBST(FHTTPD_LIB)
AC_SUBST(FHTTPD_TARGET)
AC_MSG_RESULT($RESULT)
AC_MSG_CHECKING(whether to use a configuration file)
AC_ARG_WITH(config-file-path,
[ --with-config-file-path=PATH Sets the path in which to look for php3.ini
[ --with-config-file-path=PATH
Sets the path in which to look for php.ini.
defaults to /usr/local/lib],
[
if test "$withval" = "yes"; then
@@ -727,78 +516,20 @@ AC_ARG_ENABLE(magic-quotes,
])
AC_MSG_CHECKING(whether to build PHP thread-safe)
AC_ARG_ENABLE(thread-safety,
[ --enable-thread-safety Whether to build PHP thread-safe.],[
TSRM_LIB='TSRM/libtsrm.a'
TSRM_DIR=TSRM
AC_DEFINE(ZTS)
AC_MSG_CHECKING(whether to enable runpaths)
AC_ARG_ENABLE(rpath,
[ --disable-rpath Disable passing additional runtime library
search paths],
[
if test "$enableval" = "no"; then
enable_rpath=no
else
enable_rpath=yes
fi
],[
TSRM_DIR=""
enable_rpath=yes
])
AC_SUBST(TSRM_DIR)
AC_SUBST(TSRM_LIB)
dnl AC_MSG_CHECKING(whether to enable PHP RPC support)
dnl AC_ARG_ENABLE(php-rpc,
dnl [ --enable-php-rpc Compile with PHP RPC support.],
dnl [
dnl if test "$enableval" = "yes"; then
dnl AC_DEFINE(PHP_RPC, 1)
dnl AC_MSG_RESULT(yes)
dnl else
dnl AC_DEFINE(PHP_RPC, 0)
dnl AC_MSG_RESULT(no)
dnl fi
dnl ],[
dnl AC_DEFINE(PHP_RPC, 0)
dnl AC_MSG_RESULT(no)
dnl ])
if test "$BINNAME" = "php"; then
AC_MSG_CHECKING(whether to force Apache CGI redirect)
AC_ARG_ENABLE(force-cgi-redirect,
[ --enable-force-cgi-redirect Enable the security check for internal server
redirects. You should use this if you are
running the CGI version with Apache. ],
[
if test "$enableval" = "yes"; then
AC_DEFINE(FORCE_CGI_REDIRECT, 1)
AC_MSG_RESULT(yes)
REDIRECT=1
else
AC_DEFINE(FORCE_CGI_REDIRECT, 0)
AC_MSG_RESULT(no)
REDIRECT=0
fi
],[
AC_DEFINE(FORCE_CGI_REDIRECT, 0)
AC_MSG_RESULT(no)
REDIRECT=0
])
AC_MSG_CHECKING(whether to discard path_info + path_translated)
AC_ARG_ENABLE(discard_path,
[ --enable-discard-path If this is enabled, the PHP CGI binary
can safely be placed outside of the
web tree and people will not be able
to circumvent .htaccess security. ],
[
if test "$enableval" = "yes"; then
AC_DEFINE(DISCARD_PATH, 1)
AC_MSG_RESULT(yes)
DISCARD_PATH=1
else
AC_DEFINE(DISCARD_PATH, 0)
AC_MSG_RESULT(no)
DISCARD_PATH=0
fi
],[
AC_DEFINE(DISCARD_PATH, 0)
AC_MSG_RESULT(no)
DISCARD_PATH=0
])
fi
AC_MSG_RESULT($enable_rpath)
AC_MSG_CHECKING(whether to enable short tags by default)
AC_ARG_ENABLE(short-tags,
@@ -818,8 +549,9 @@ AC_ARG_ENABLE(short-tags,
AC_MSG_CHECKING(whether to enable the URL-aware fopen wrapper)
AC_ARG_ENABLE(url-fopen-wrapper,
[ --disable-url-fopen-wrapper Disable the URL-aware fopen wrapper that allows
accessing files via http or ftp.],
[ --disable-url-fopen-wrapper
Disable the URL-aware fopen wrapper that allows
accessing files via http or ftp.],
[
if test "$enableval" = "yes"; then
AC_DEFINE(PHP3_URL_FOPEN, 1)
@@ -836,7 +568,7 @@ AC_ARG_ENABLE(url-fopen-wrapper,
DMALLOC_RESULT=no
AC_MSG_CHECKING(whether to enable dmalloc)
AC_ARG_ENABLE(dmalloc,
[ --enable-dmalloc Enable dmalloc],
[ --enable-dmalloc Enable dmalloc],
[
if test "$enableval" = "yes" ; then
AC_DEFINE(HAVE_DMALLOC, 1)
@@ -847,23 +579,81 @@ AC_ARG_ENABLE(dmalloc,
])
AC_MSG_RESULT($DMALLOC_RESULT)
dnl ## This is the default server API.
PHP_SAPI=cgi
PHP_BUILD_PROGRAM
dnl paths to the targets relative to the build directory
SAPI_PROGRAM=php
SAPI_SHARED=libs/libphp4.so
SAPI_STATIC=libs/libphp4.a
esyscmd(./scripts/config-stubs sapi)
divert(3)
AC_SUBST(EXTRA_LIBS)
AC_SUBST(EXTRA_LDFLAGS)
# reading config stubs
esyscmd(./scripts/config-stubs)
esyscmd(./scripts/config-stubs ext)
PHP_OUTPUT(sapi/$PHP_SAPI/Makefile)
divert(4)
dnl If we're using gcc and the user hasn't specified CFLAGS, add -O2.
enable_shared=yes
enable_static=yes
case "$php_build_target" in
program)
enable_shared=no
PHP_PROGRAM=php
passthru="$passthru --disable-shared"
;;
shared)
enable_static=no
passthru="$passthru --disable-static"
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -avoid-version"
;;
static)
enable_shared=no
passthru="$passthru --disable-shared"
;;
esac
AM_PROG_LIBTOOL
if test "$enable_debug" != "yes"; then
AM_SET_LIBTOOL_VARIABLE([--silent])
fi
PHP_REGEX
dnl If we are using gcc and the user has not specified CFLAGS, add -O2.
test -n "$auto_cflags" && test -n "$GCC" && CFLAGS="$CFLAGS -O2"
dnl If we're using cc on HP-UX, add the -Ae to CFLAGS
if test -n "$auto_cflags" && test "`uname -s 2>/dev/null`" = "HP-UX"; then
test -n "$GCC" || CFLAGS="-Ae $CFLAGS"
fi
AC_MSG_CHECKING(whether to build PHP thread-safe)
AC_ARG_ENABLE(thread-safety,
[ --enable-thread-safety Whether to build PHP thread-safe.],[
if test "$enableval" = "yes"; then
TSRM_LIB='TSRM/libtsrm.la'
TSRM_DIR=TSRM
AC_DEFINE(ZTS)
INCLUDES="$INCLUDES -I\$(top_builddir)/TSRM -I\$(top_srcdir)/TSRM"
CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
export CPPFLAGS
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
],[
TSRM_DIR=""
TSRM_LIB=""
AC_MSG_RESULT(no)
])
AC_SUBST(TSRM_DIR)
AC_SUBST(TSRM_LIB)
dnl *** Commented out - generates slow code and consumes a lot of
dnl *** resources during compilation - we need to figure out how
@@ -871,13 +661,23 @@ dnl *** to supply it only when absolutely necessary
dnl If we are using gcc add -fpic to make dl() work on some platforms
dnl test -n "$GCC" && CFLAGS="$CFLAGS -fpic"
dnl add -fPIC option on Solaris if we are building dynamic extensions
dnl PHP_SOLARIS_PIC_WEIRDNESS
AC_BUILD_RPATH
phplibdir="`pwd`/modules"
phptempdir="`pwd`/libs"
AC_SUBST(phplibdir)
AC_SUBST(phptempdir)
EXTRA_LIBS="$LIBS $EXTRA_LIBS"
LIBS=""
AC_SUBST(CFLAGS)
AC_SUBST(PROG_SENDMAIL)
AC_SUBST(CFLAGS_SHLIB)
AC_SUBST(LDFLAGS_SHLIB)
AC_SUBST(LDFLAGS_SHLIB_EXPORT)
AC_SUBST(RPATHS)
AC_SUBST(RAW_RPATHS)
AC_SUBST(PHP_RPATHS)
AC_SUBST(NATIVE_RPATHS)
AC_SUBST(PHP_PROGRAM)
PHP_BUILD_DATE=`date '+%Y-%m-%d'`
AC_SUBST(PHP_BUILD_DATE)
@@ -887,10 +687,13 @@ AC_DEFINE_UNQUOTED(PHP_UNAME,"$PHP_UNAME")
PHP_OS=`uname`
AC_DEFINE_UNQUOTED(PHP_OS,"$PHP_OS")
AC_OUTPUT(Makefile libphp4.module
scripts/mkextlib regex/Makefile
@@EXT_MAKEFILES@@ build-defs.h, [
], [
AC_SUBST(PHP_LIBS)
AC_SUBST(PHP_SAPI)
AC_SUBST(INSTALL_IT)
#libphp4.module
AC_OUTPUT([Makefile php4.spec ext/Makefile sapi/Makefile $PHP_OUTPUT_FILES
scripts/mkextlib regex/Makefile build-defs.h], [], [
if test ! -f $srcdir/ext/bcmath/number.c; then
echo "creating number.c"
@@ -899,8 +702,16 @@ if test ! -f $srcdir/ext/bcmath/number.c; then
echo "/* Dummy File */" > $srcdir/ext/bcmath/number.h
fi
if test "" = ""; then
if test "$no_recursion" != "yes"; then
(set -x; test -d libzend || mkdir libzend; cd libzend; $cwd/$srcdir/libzend/configure --cache-file=../$cache_file $passthru) || exit 1
if test "$enable_thread_safety" = "yes"; then
(set -x; test -d TSRM || mkdir TSRM; cd TSRM && $cwd/$srcdir/TSRM/configure --cache-file=../$cache_file $passthru) || exit 1
fi
dnl (set -x; cd $srcdir; sh ltconfig --disable-static --enable-dlopen --cache-file=$cache_file ltmain.sh)
fi
# run this only when generating all the files?
if true; then
chmod +x scripts/mkextlib
# Hacking while airborne considered harmful.
#
@@ -916,7 +727,7 @@ if test "" = ""; then
fi
# Warn about CGI version with no extra security options.
if test "$BINNAME" = "php"; then
if test "$PHP_SAPI" = "cgi"; then
if test "$REDIRECT" = "0"; then
if test "$DISCARD_PATH" = "0"; then
echo "+--------------------------------------------------------------------+"
@@ -945,6 +756,6 @@ fi
divert
# Local Variables:
# tab-width: 4
# End:
dnl ## Local Variables:
dnl ## tab-width: 4
dnl ## End:
+4 -1
View File
@@ -18,6 +18,9 @@
* -----------------
*
* $Log$
* Revision 1.1 1999/07/19 18:58:44 andrey
* Moving dlist stuff into core.
*
* Revision 1.2 1999/05/11 00:01:42 zeev
* * Get Apache to work. POST doesn't work yet.
* * There are now -I directives for the absolute path of php4, php4/libzend and the builddir for
@@ -61,7 +64,7 @@
#endif
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <signal.h>
#include "dlist.h"
-6
View File
@@ -1,10 +1,4 @@
## Process this file with automake to produce Makefile.in
SUBDIRS = @EXT_SUBDIRS@
EXT_STATIC = @EXT_STATIC@
noinst_LIBRARIES=libphpext.a
libphpext.a: @EXT_LIBS@
top_srcdir=$(top_srcdir) $(top_builddir)/scripts/mkextlib $@ $(EXT_STATIC)
-@test "`uname -s`" = "Rhapsody" && $(RANLIB) $@
+2 -3
View File
@@ -1,6 +1,5 @@
# $Id$
INCLUDES=@INCLUDES@ -I@top_srcdir@ -I@top_srcdir@/libzend
noinst_LIBRARIES=libphpext_apache.a
libphpext_apache_a_SOURCES=apache.c
noinst_LTLIBRARIES=libphpext_apache.la
libphpext_apache_la_SOURCES=apache.c
+63 -59
View File
@@ -24,7 +24,7 @@
#include "php_globals.h"
#include "php_ini.h"
#include "SAPI.h"
#include "mod_php4.h"
#include "sapi/apache/mod_php4.h"
#include "ext/standard/info.h"
#include <stdlib.h>
@@ -46,15 +46,16 @@ extern module *top_module;
PHP_FUNCTION(virtual);
PHP_FUNCTION(getallheaders);
PHP_FUNCTION(apachelog);
void php3_info_apache(ZEND_MODULE_INFO_FUNC_ARGS);
PHP_FUNCTION(apache_note);
PHP_FUNCTION(apache_lookup_uri);
PHP_MINFO_FUNCTION(apache);
function_entry apache_functions[] = {
{"virtual", php3_virtual, NULL},
{"getallheaders", php3_getallheaders, NULL},
{"apache_note", php3_apache_note,NULL},
{"apache_lookup_uri", php3_apache_lookup_uri,NULL},
PHP_FE(virtual, NULL)
PHP_FE(getallheaders, NULL)
PHP_FE(apache_note, NULL)
PHP_FE(apache_lookup_uri, NULL)
{NULL, NULL, NULL}
};
@@ -98,14 +99,14 @@ PHP_INI_BEGIN()
PHP_INI_END()
static int php_apache_minit(INIT_FUNC_ARGS)
static PHP_MINIT_FUNCTION(apache)
{
REGISTER_INI_ENTRIES();
return SUCCESS;
}
static int php_apache_mshutdown(SHUTDOWN_FUNC_ARGS)
static PHP_MSHUTDOWN_FUNCTION(apache)
{
UNREGISTER_INI_ENTRIES();
return SUCCESS;
@@ -113,7 +114,7 @@ static int php_apache_mshutdown(SHUTDOWN_FUNC_ARGS)
php3_module_entry apache_module_entry = {
"Apache", apache_functions, php_apache_minit, php_apache_mshutdown, NULL, NULL, php3_info_apache, STANDARD_MODULE_PROPERTIES
"Apache", apache_functions, PHP_MINIT(apache), PHP_MSHUTDOWN(apache), NULL, NULL, PHP_MINFO(apache), STANDARD_MODULE_PROPERTIES
};
/* {{{ proto string apache_note(string note_name [, string note_value])
@@ -146,7 +147,7 @@ PHP_FUNCTION(apache_note)
}
/* }}} */
void php3_info_apache(ZEND_MODULE_INFO_FUNC_ARGS)
PHP_MINFO_FUNCTION(apache)
{
module *modp = NULL;
char output_buf[128];
@@ -164,6 +165,51 @@ void php3_info_apache(ZEND_MODULE_INFO_FUNC_ARGS)
serv = ((request_rec *) SG(server_context))->server;
PUTS("<table border=5 width=\"600\">\n");
php_info_print_table_header(2, "Entry", "Value");
#if WIN32|WINNT
PUTS("Apache for Windows 95/NT<br>");
#else
php_info_print_table_row(2, "APACHE_INCLUDE", PHP_APACHE_INCLUDE);
php_info_print_table_row(2, "APACHE_TARGET", PHP_APACHE_TARGET);
#endif
php_info_print_table_row(2, "Apache Version", SERVER_VERSION);
#ifdef APACHE_RELEASE
sprintf(output_buf, "%d", APACHE_RELEASE);
php_info_print_table_row(2, "Apache Release", output_buf);
#endif
sprintf(output_buf, "%d", MODULE_MAGIC_NUMBER);
php_info_print_table_row(2, "Apache API Version", output_buf);
sprintf(output_buf, "%s:%u", serv->server_hostname,serv->port);
php_info_print_table_row(2, "Hostname/Port", output_buf);
#if !defined(WIN32) && !defined(WINNT)
sprintf(output_buf, "%s(%d)/%d", user_name,(int)user_id,(int)group_id);
php_info_print_table_row(2, "User/Group", output_buf);
sprintf(output_buf, "per child: %d<br>keep alive: %s<br>max per connection: %d",max_requests_per_child,serv->keep_alive ? "on":"off", serv->keep_alive_max);
php_info_print_table_row(2, "Max Requests", output_buf);
#endif
sprintf(output_buf, "connection: %d<br>keep-alive: %d",serv->timeout,serv->keep_alive_timeout);
php_info_print_table_row(2, "Timeouts", output_buf);
#if !defined(WIN32) && !defined(WINNT)
php_info_print_table_row(2, "Server Root", server_root);
PUTS("<tr><td valign=\"top\" bgcolor=\"" PHP_ENTRY_NAME_COLOR "\">Loaded modules</td><td bgcolor=\"" PHP_CONTENTS_COLOR "\">");
for(modp = top_module; modp; modp = modp->next) {
strlcpy(name, modp->name, sizeof(name));
if ((p = strrchr(name, '.'))) {
*p='\0'; /* Cut off ugly .c extensions on module names */
}
PUTS(name);
if (modp->next) {
PUTS(", ");
}
}
#endif
PUTS("</td></tr>\n");
PUTS("</table>\n");
{
register int i;
array_header *arr;
@@ -214,49 +260,6 @@ void php3_info_apache(ZEND_MODULE_INFO_FUNC_ARGS)
PUTS("</table>\n\n");
}
PUTS("<table border=5 width=\"600\">\n");
php_info_print_table_header(2, "Entry", "Value");
#if WIN32|WINNT
PUTS("Apache for Windows 95/NT<br>");
#else
php_info_print_table_row(2, "APACHE_INCLUDE", PHP_APACHE_INCLUDE);
php_info_print_table_row(2, "APACHE_TARGET", PHP_APACHE_TARGET);
#endif
php_info_print_table_row(2, "Apache Version", SERVER_VERSION);
#ifdef APACHE_RELEASE
sprintf(output_buf, "%d", APACHE_RELEASE);
php_info_print_table_row(2, "Apache Release", output_buf);
#endif
sprintf(output_buf, "%d", MODULE_MAGIC_NUMBER);
php_info_print_table_row(2, "Apache API Version", output_buf);
sprintf(output_buf, "%s:%u", serv->server_hostname,serv->port);
php_info_print_table_row(2, "Hostname/Port", output_buf);
#if !defined(WIN32) && !defined(WINNT)
sprintf(output_buf, "%s(%d)/%d", user_name,(int)user_id,(int)group_id);
php_info_print_table_row(2, "User/Group", output_buf);
sprintf(output_buf, "per child: %d<br>keep alive: %s<br>max per connection: %d",max_requests_per_child,serv->keep_alive ? "on":"off", serv->keep_alive_max);
php_info_print_table_row(2, "Max Requests", output_buf);
#endif
sprintf(output_buf, "connection: %d<br>keep-alive: %d",serv->timeout,serv->keep_alive_timeout);
php_info_print_table_row(2, "Timeouts", output_buf);
#if !defined(WIN32) && !defined(WINNT)
php_info_print_table_row(2, "Server Root", server_root);
PUTS("<tr><td valign=\"top\" bgcolor=\"" PHP_ENTRY_NAME_COLOR "\">Loaded modules</td><td bgcolor=\"" PHP_CONTENTS_COLOR "\">");
for(modp = top_module; modp; modp = modp->next) {
strncpy(name, modp->name, sizeof(name) - 1);
if ((p = strrchr(name, '.'))) {
*p='\0'; /* Cut off ugly .c extensions on module names */
}
PUTS(name);
if (modp->next) {
PUTS(", ");
}
}
#endif
PUTS("</td></tr>\n");
PUTS("</table>\n");
}
/* This function is equivalent to <!--#include virtual...-->
@@ -281,13 +284,13 @@ PHP_FUNCTION(virtual)
convert_to_string(filename);
if (!(rr = sub_req_lookup_uri (filename->value.str.val, ((request_rec *) SG(server_context))))) {
php3_error(E_WARNING, "Unable to include '%s' - URI lookup failed", filename->value.str.val);
php_error(E_WARNING, "Unable to include '%s' - URI lookup failed", filename->value.str.val);
if (rr) destroy_sub_req (rr);
RETURN_FALSE;
}
if (rr->status != 200) {
php3_error(E_WARNING, "Unable to include '%s' - error finding URI", filename->value.str.val);
php_error(E_WARNING, "Unable to include '%s' - error finding URI", filename->value.str.val);
if (rr) destroy_sub_req (rr);
RETURN_FALSE;
}
@@ -295,14 +298,14 @@ PHP_FUNCTION(virtual)
/* Cannot include another PHP file because of global conflicts */
if (rr->content_type &&
!strcmp(rr->content_type, PHP3_MIME_TYPE)) {
php3_error(E_WARNING, "Cannot include a PHP file "
php_error(E_WARNING, "Cannot include a PHP file "
"(use <code>&lt;?include \"%s\"&gt;</code> instead)", filename->value.str.val);
if (rr) destroy_sub_req (rr);
RETURN_FALSE;
}
if (run_sub_req(rr)) {
php3_error(E_WARNING, "Unable to include '%s' - request execution failed", filename->value.str.val);
php_error(E_WARNING, "Unable to include '%s' - request execution failed", filename->value.str.val);
if (rr) destroy_sub_req (rr);
RETURN_FALSE;
} else {
@@ -320,6 +323,7 @@ PHP_FUNCTION(getallheaders)
table_entry *tenv;
int i;
SLS_FETCH();
PLS_FETCH();
if (array_init(return_value) == FAILURE) {
RETURN_FALSE;
@@ -353,7 +357,7 @@ PHP_FUNCTION(apache_lookup_uri)
convert_to_string(filename);
if(!(rr = sub_req_lookup_uri(filename->value.str.val, ((request_rec *) SG(server_context))))) {
php3_error(E_WARNING, "URI lookup failed", filename->value.str.val);
php_error(E_WARNING, "URI lookup failed", filename->value.str.val);
RETURN_FALSE;
}
object_init(return_value);
@@ -427,7 +431,7 @@ PHP_FUNCTION(apache_exec_uri)
convert_to_string(filename);
if(!(rr = ap_sub_req_lookup_uri(filename->value.str.val, ((request_rec *) SG(server_context))))) {
php3_error(E_WARNING, "URI lookup failed", filename->value.str.val);
php_error(E_WARNING, "URI lookup failed", filename->value.str.val);
RETURN_FALSE;
}
RETVAL_LONG(ap_run_sub_req(rr));
-3
View File
@@ -1,5 +1,2 @@
dnl $Id$
if test -n "$APACHE_INCLUDE"; then
PHP_EXTENSION(apache)
fi
+2 -3
View File
@@ -1,6 +1,5 @@
# $Id$
INCLUDES=@INCLUDES@ -I@top_srcdir@ -I@top_srcdir@/libzend
noinst_LIBRARIES=libphpext_aspell.a
libphpext_aspell_a_SOURCES=aspell.c
noinst_LTLIBRARIES=libphpext_aspell.la
libphpext_aspell_la_SOURCES=aspell.c
+16 -15
View File
@@ -37,17 +37,17 @@
#include <aspell-c.h>
function_entry aspell_functions[] = {
{"aspell_new", php3_aspell_new, NULL},
{"aspell_check", php3_aspell_check, NULL},
{"aspell_check_raw", php3_aspell_check_raw, NULL},
{"aspell_suggest", php3_aspell_suggest, NULL},
PHP_FE(aspell_new, NULL)
PHP_FE(aspell_check, NULL)
PHP_FE(aspell_check_raw, NULL)
PHP_FE(aspell_suggest, NULL)
{NULL, NULL, NULL}
};
static int le_aspell;
php3_module_entry aspell_module_entry = {
"Aspell", aspell_functions, php3_minit_aspell, NULL, NULL, NULL, php3_info_aspell, STANDARD_MODULE_PROPERTIES
"Aspell", aspell_functions, PHP_MINIT(aspell), NULL, NULL, NULL, PHP_MINFO(aspell), STANDARD_MODULE_PROPERTIES
};
@@ -55,7 +55,7 @@ php3_module_entry aspell_module_entry = {
DLEXPORT php3_module_entry *get_module(void) { return &aspell_module_entry; }
#endif
int php3_minit_aspell(INIT_FUNC_ARGS)
PHP_MINIT_FUNCTION(aspell)
{
le_aspell = register_list_destructors(php3_aspell_close,NULL);
return SUCCESS;
@@ -68,7 +68,7 @@ void php3_aspell_close(aspell *sc)
/* {{{ proto int aspell_new(string master[, string personal])
Load a dictionary */
void php3_aspell_new(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(aspell_new)
{
pval *master, *personal;
int argc;
@@ -93,9 +93,10 @@ void php3_aspell_new(INTERNAL_FUNCTION_PARAMETERS)
}
/* }}} */
/* {{{ proto array aspell_suggest(aspell int,string word)
Return array of Suggestions */
void php3_aspell_suggest(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(aspell_suggest)
{
pval *scin, *word;
int argc;
@@ -114,7 +115,7 @@ void php3_aspell_suggest(INTERNAL_FUNCTION_PARAMETERS)
sc= (aspell *) php3_list_find(scin->value.lval, &type);
if(!sc)
{
php3_error(E_WARNING, "%d is not a ASPELL result index", scin->value.lval);
php_error(E_WARNING, "%d is not a ASPELL result index", scin->value.lval);
RETURN_FALSE;
}
@@ -132,7 +133,7 @@ void php3_aspell_suggest(INTERNAL_FUNCTION_PARAMETERS)
/* {{{ proto int aspell_check(aspell int,string word)
Return if word is valid */
void php3_aspell_check(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(aspell_check)
{
int type;
pval *scin,*word;
@@ -148,7 +149,7 @@ void php3_aspell_check(INTERNAL_FUNCTION_PARAMETERS)
sc= (aspell *) php3_list_find(scin->value.lval, &type);
if(!sc)
{
php3_error(E_WARNING, "%d is not a ASPELL result index", scin->value.lval);
php_error(E_WARNING, "%d is not a ASPELL result index", scin->value.lval);
RETURN_FALSE;
}
if (aspell_check(sc, word->value.str.val))
@@ -164,7 +165,7 @@ void php3_aspell_check(INTERNAL_FUNCTION_PARAMETERS)
/* {{{ proto int aspell_check_raw(aspell int,string word)
Return if word is valid, ignoring case or trying to trim it in any way*/
void php3_aspell_check_raw(INTERNAL_FUNCTION_PARAMETERS)
PHP_FUNCTION(aspell_check_raw)
{
pval *scin,*word;
int type;
@@ -180,7 +181,7 @@ void php3_aspell_check_raw(INTERNAL_FUNCTION_PARAMETERS)
sc= (aspell *) php3_list_find(scin->value.lval, &type);
if(!sc)
{
php3_error(E_WARNING, "%d is not a ASPELL result index", scin->value.lval);
php_error(E_WARNING, "%d is not a ASPELL result index", scin->value.lval);
RETURN_FALSE;
}
if (aspell_check_raw(sc, word->value.str.val))
@@ -194,9 +195,9 @@ void php3_aspell_check_raw(INTERNAL_FUNCTION_PARAMETERS)
}
/* }}} */
void php3_info_aspell(ZEND_MODULE_INFO_FUNC_ARGS)
PHP_MINFO_FUNCTION(aspell)
{
php3_printf("ASpell support enabled");
php_printf("ASpell support enabled");
}
+7 -6
View File
@@ -36,13 +36,14 @@
extern php3_module_entry aspell_module_entry;
#define aspell_module_ptr &aspell_module_entry
extern int php3_minit_aspell(INIT_FUNC_ARGS);
extern void php3_info_aspell(ZEND_MODULE_INFO_FUNC_ARGS);
extern PHP_MINIT_FUNCTION(aspell);
extern PHP_MINFO_FUNCTION(aspell);
extern void php3_aspell_close();
void php3_aspell_new(INTERNAL_FUNCTION_PARAMETERS);
void php3_aspell_check(INTERNAL_FUNCTION_PARAMETERS);
void php3_aspell_check_raw(INTERNAL_FUNCTION_PARAMETERS);
void php3_aspell_suggest(INTERNAL_FUNCTION_PARAMETERS);
PHP_FUNCTION(aspell_new);
PHP_FUNCTION(aspell_check);
PHP_FUNCTION(aspell_check_raw);
PHP_FUNCTION(aspell_suggest);
#else
#define aspell_module_ptr NULL
+2 -3
View File
@@ -1,5 +1,4 @@
# $Id$
INCLUDES=@INCLUDES@ -I@top_srcdir@ -I@top_srcdir@/libzend
noinst_LIBRARIES=libphpext_bcmath.a
libphpext_bcmath_a_SOURCES=bcmath.c number.c
noinst_LTLIBRARIES=libphpext_bcmath.la
libphpext_bcmath_la_SOURCES=bcmath.c number.c
+24 -24
View File
@@ -24,20 +24,20 @@
#include "php3_bcmath.h"
function_entry bcmath_functions[] = {
{"bcadd", php3_bcmath_add, NULL},
{"bcsub", php3_bcmath_sub, NULL},
{"bcmul", php3_bcmath_mul, NULL},
{"bcdiv", php3_bcmath_div, NULL},
{"bcmod", php3_bcmath_mod, NULL},
{"bcpow", php3_bcmath_pow, NULL},
{"bcsqrt", php3_bcmath_sqrt, NULL},
{"bcscale", php3_bcmath_set_scale, NULL},
{"bccomp", php3_bcmath_comp, NULL},
PHP_FE(bcadd, NULL)
PHP_FE(bcsub, NULL)
PHP_FE(bcmul, NULL)
PHP_FE(bcdiv, NULL)
PHP_FE(bcmod, NULL)
PHP_FE(bcpow, NULL)
PHP_FE(bcsqrt, NULL)
PHP_FE(bcscale, NULL)
PHP_FE(bccomp, NULL)
{NULL, NULL, NULL}
};
php3_module_entry bcmath_module_entry = {
"bcmath", bcmath_functions, NULL, NULL, php3_rinit_bcmath, php3_rend_bcmath, NULL, STANDARD_MODULE_PROPERTIES
"bcmath", bcmath_functions, NULL, NULL, PHP_RINIT(bcmath), PHP_RSHUTDOWN(bcmath), NULL, STANDARD_MODULE_PROPERTIES
};
#if COMPILE_DL
@@ -48,7 +48,7 @@ php3_module_entry *get_module() { return &bcmath_module_entry; };
static long bc_precision;
#endif
int php3_rinit_bcmath(INIT_FUNC_ARGS)
PHP_RINIT_FUNCTION(bcmath)
{
init_numbers();
if (cfg_get_long("bcmath.scale",&bc_precision)==FAILURE) {
@@ -57,7 +57,7 @@ int php3_rinit_bcmath(INIT_FUNC_ARGS)
return SUCCESS;
}
int php3_rend_bcmath(SHUTDOWN_FUNC_ARGS)
PHP_RSHUTDOWN_FUNCTION(bcmath)
{
destruct_numbers();
return SUCCESS;
@@ -65,7 +65,7 @@ int php3_rend_bcmath(SHUTDOWN_FUNC_ARGS)
/* {{{ proto string bcadd(string left_operand, string right_operand [, int scale])
Returns the sum of two arbitrary precision numbers */
PHP_FUNCTION(bcmath_add)
PHP_FUNCTION(bcadd)
{
pval *left, *right,*scale_param;
bc_num first, second, result;
@@ -108,7 +108,7 @@ PHP_FUNCTION(bcmath_add)
/* {{{ proto string bcsub(string left_operand, string right_operand [, int scale])
Returns the difference between two arbitrary precision numbers (subtration) */
PHP_FUNCTION(bcmath_sub)
PHP_FUNCTION(bcsub)
{
pval *left, *right,*scale_param;
bc_num first, second, result;
@@ -151,7 +151,7 @@ PHP_FUNCTION(bcmath_sub)
/* {{{ proto string bcmul(string left_operand, string right_operand [, int scale])
Returns the multiplication of two arbitrary precision numbers */
PHP_FUNCTION(bcmath_mul)
PHP_FUNCTION(bcmul)
{
pval *left, *right,*scale_param;
bc_num first, second, result;
@@ -194,7 +194,7 @@ PHP_FUNCTION(bcmath_mul)
/* {{{ proto string bcdiv(string left_operand, string right_operand [, int scale])
Returns the quotient of two arbitrary precision numbers (division) */
PHP_FUNCTION(bcmath_div)
PHP_FUNCTION(bcdiv)
{
pval *left, *right,*scale_param;
bc_num first, second, result;
@@ -231,7 +231,7 @@ PHP_FUNCTION(bcmath_div)
return_value->type = IS_STRING;
break;
case -1: /* division by zero */
php3_error(E_WARNING,"Division by zero");
php_error(E_WARNING,"Division by zero");
break;
}
free_num(&first);
@@ -243,7 +243,7 @@ PHP_FUNCTION(bcmath_div)
/* {{{ proto string bcmod(string left_operand, string right_operand)
Returns the modulus of the two arbitrary precision operands */
PHP_FUNCTION(bcmath_mod)
PHP_FUNCTION(bcmod)
{
pval *left, *right;
bc_num first, second, result;
@@ -272,7 +272,7 @@ PHP_FUNCTION(bcmath_mod)
return_value->type = IS_STRING;
break;
case -1:
php3_error(E_WARNING,"Division by zero");
php_error(E_WARNING,"Division by zero");
break;
}
free_num(&first);
@@ -284,7 +284,7 @@ PHP_FUNCTION(bcmath_mod)
/* {{{ proto string bcpow(string x, string y [, int scale])
Returns the value of an arbitrary precision number raised to the power of another */
PHP_FUNCTION(bcmath_pow)
PHP_FUNCTION(bcpow)
{
pval *left, *right,*scale_param;
bc_num first, second, result;
@@ -327,7 +327,7 @@ PHP_FUNCTION(bcmath_pow)
/* {{{ proto string bcsqrt(string operand [, int scale])
Returns the square root of an arbitray precision number */
PHP_FUNCTION(bcmath_sqrt)
PHP_FUNCTION(bcsqrt)
{
pval *left,*scale_param;
bc_num result;
@@ -358,7 +358,7 @@ PHP_FUNCTION(bcmath_sqrt)
return_value->value.str.len = strlen(return_value->value.str.val);
return_value->type = IS_STRING;
} else {
php3_error(E_WARNING,"Square root of negative number");
php_error(E_WARNING,"Square root of negative number");
}
free_num(&result);
return;
@@ -367,7 +367,7 @@ PHP_FUNCTION(bcmath_sqrt)
/* {{{ proto string bccomp(string left_operand, string right_operand [, int scale])
Compares two arbitrary precision numbers */
PHP_FUNCTION(bcmath_comp)
PHP_FUNCTION(bccomp)
{
pval *left, *right, *scale_param;
bc_num first, second;
@@ -409,7 +409,7 @@ PHP_FUNCTION(bcmath_comp)
/* {{{ proto string bcscale(int scale)
Sets default scale parameter for all bc math functions */
PHP_FUNCTION(bcmath_set_scale)
PHP_FUNCTION(bcscale)
{
pval *new_scale;
+3 -3
View File
@@ -2,9 +2,9 @@ dnl $Id$
AC_MSG_CHECKING(whether to enable bc style precision math functions)
AC_ARG_ENABLE(bcmath,
[ --enable-bcmath Compile with bc style precision math functions.
Read README-BCMATH for instructions on how to
get this module installed. ],
[ --enable-bcmath Compile with bc style precision math functions.
Read README-BCMATH for instructions on how to
get this module installed. ],
[
if test "$enableval" = "yes"; then
AC_DEFINE(WITH_BCMATH, 1)
+11 -11
View File
@@ -43,17 +43,17 @@
extern php3_module_entry bcmath_module_entry;
#define phpext_bcmath_ptr &bcmath_module_entry
extern int php3_rinit_bcmath(INIT_FUNC_ARGS);
extern int php3_rend_bcmath(SHUTDOWN_FUNC_ARGS);
PHP_FUNCTION(bcmath_add);
PHP_FUNCTION(bcmath_sub);
PHP_FUNCTION(bcmath_mul);
PHP_FUNCTION(bcmath_div);
PHP_FUNCTION(bcmath_mod);
PHP_FUNCTION(bcmath_pow);
PHP_FUNCTION(bcmath_sqrt);
PHP_FUNCTION(bcmath_comp);
PHP_FUNCTION(bcmath_set_scale);
extern PHP_RINIT_FUNCTION(bcmath);
extern PHP_RSHUTDOWN_FUNCTION(bcmath);
PHP_FUNCTION(bcadd);
PHP_FUNCTION(bcsub);
PHP_FUNCTION(bcmul);
PHP_FUNCTION(bcdiv);
PHP_FUNCTION(bcmod);
PHP_FUNCTION(bcpow);
PHP_FUNCTION(bcsqrt);
PHP_FUNCTION(bccomp);
PHP_FUNCTION(bcscale);
#else
+6 -6
View File
@@ -1,16 +1,16 @@
#ifndef _PHP3_COM_H
#define _PHP3_COM_H
#ifndef _PHP_COM_H
#define _PHP_COM_H
#if WIN32|WINNT
extern int php3_minit_COM(INIT_FUNC_ARGS);
extern int php3_mshutdown_COM(SHUTDOWN_FUNC_ARGS);
extern PHP_MINIT_FUNCTION(COM);
extern PHP_MSHUTDOWN_FUNCTION(COM);
PHP_FUNCTION(COM_load);
PHP_FUNCTION(COM_invoke);
PHP_FUNCTION(com_propget);
PHP_FUNCTION(com_propput);
extern php3_module_entry COM_module_entry;
extern zend_module_entry COM_module_entry;
#define COM_module_ptr &COM_module_entry
#else
@@ -21,4 +21,4 @@ extern php3_module_entry COM_module_entry;
#define phpext_COM_ptr COM_module_ptr
#endif /* _PHP3_COM_H */
#endif /* _PHP_COM_H */
+2 -3
View File
@@ -1,6 +1,5 @@
# $Id$
INCLUDES=@INCLUDES@ -I@top_srcdir@ -I@top_srcdir@/libzend
noinst_LIBRARIES=libphpext_dav.a
libphpext_dav_a_SOURCES=dav.c
noinst_LTLIBRARIES=libphpext_dav.la
libphpext_dav_la_SOURCES=dav.c
+2 -3
View File
@@ -1,6 +1,5 @@
# $Id$
INCLUDES=@INCLUDES@ -I@top_srcdir@ -I@top_srcdir@/libzend
noinst_LIBRARIES=libphpext_db.a
libphpext_db_a_SOURCES=db.c
noinst_LTLIBRARIES=libphpext_db.la
libphpext_db_la_SOURCES=db.c
+2
View File
@@ -4,6 +4,8 @@ dnl don't forget to call PHP_EXTENSION(db)
divert(1)
AC_CHECK_HEADERS(db1/ndbm.h)
# Checks for libraries.
# Prefer gdbm, Berkeley DB and ndbm/dbm, in that order
AC_DEFUN(AC_PREFERRED_DB_LIB,[
+54 -53
View File
@@ -20,22 +20,16 @@
/* $Id$ */
#define IS_EXT_MODULE
#if COMPILE_DL
#ifdef PHP_31
# include "../phpdl.h"
#else
# ifdef THREAD_SAFE
# undef THREAD_SAFE
# endif
# include "dl/phpdl.h"
#endif
#endif
#if 0
#if 1
#include "php.h"
#include "php_globals.h"
#include "safe_mode.h"
#include "fopen-wrappers.h"
#include "ext/standard/flock_compat.h"
#include <stdlib.h>
#include <string.h>
@@ -85,8 +79,12 @@
#define DB_DBM_HSEARCH 1
#include <db.h>
#else
#ifdef HAVE_DB1_NDBM_H
#include <db1/ndbm.h>
#else
#include <ndbm.h>
#endif
#endif
#define DBM_TYPE DBM *
#define DBM_MODE_TYPE int
@@ -182,9 +180,9 @@ dbm_info *_php3_finddbm(pval *id,HashTable *list)
DBM_TLS_VARS;
if (id->type == IS_STRING) {
numitems = _php3_hash_num_elements(list);
numitems = zend_hash_num_elements(list);
for (i=1; i<=numitems; i++) {
if (_php3_hash_index_find(list, i, (void **) &le)==FAILURE) {
if (zend_hash_index_find(list, i, (void **) &le)==FAILURE) {
continue;
}
if (le->type == DBM_GLOBAL(le_db)) {
@@ -240,9 +238,9 @@ static char *php3_get_info_db(void)
}
void php3_info_db(ZEND_MODULE_INFO_FUNC_ARGS)
PHP_MINFO_FUNCTION(db)
{
php3_printf(php3_get_info_db());
php_printf(php3_get_info_db());
}
PHP_FUNCTION(dblist)
@@ -288,9 +286,10 @@ dbm_info *_php3_dbmopen(char *filename, char *mode) {
DBM_TYPE dbf=NULL;
DBM_MODE_TYPE imode;
PLS_FETCH();
if (filename == NULL) {
php3_error(E_WARNING, "NULL filename passed to _php3_dbmopen()");
php_error(E_WARNING, "NULL filename passed to _php3_dbmopen()");
return NULL;
}
@@ -336,7 +335,7 @@ dbm_info *_php3_dbmopen(char *filename, char *mode) {
lockfd = open(lockfn,O_RDWR|O_CREAT,0644);
close(lockfd);
} else {
php3_error(E_WARNING, "File appears to be locked [%s]\n",lockfn);
php_error(E_WARNING, "File appears to be locked [%s]\n",lockfn);
return -1;
}
#else /* NFS_HACK */
@@ -347,7 +346,7 @@ dbm_info *_php3_dbmopen(char *filename, char *mode) {
flock(lockfd,LOCK_EX);
close(lockfd);
} else {
php3_error(E_WARNING, "Unable to establish lock: %s",filename);
php_error(E_WARNING, "Unable to establish lock: %s",filename);
}
#endif /* else NFS_HACK */
@@ -364,7 +363,7 @@ dbm_info *_php3_dbmopen(char *filename, char *mode) {
if (dbf) {
info = (dbm_info *)emalloc(sizeof(dbm_info));
if (!info) {
php3_error(E_ERROR, "problem allocating memory!");
php_error(E_ERROR, "problem allocating memory!");
return NULL;
}
@@ -376,7 +375,7 @@ dbm_info *_php3_dbmopen(char *filename, char *mode) {
return info;
} else {
#if GDBM
php3_error(E_WARNING, "dbmopen_gdbm(%s): %d [%s], %d [%s]",filename,gdbm_errno,gdbm_strerror(gdbm_errno),errno,strerror(errno));
php_error(E_WARNING, "dbmopen_gdbm(%s): %d [%s], %d [%s]",filename,gdbm_errno,gdbm_strerror(gdbm_errno),errno,strerror(errno));
if (gdbm_errno)
ret = gdbm_errno;
else if (errno)
@@ -386,13 +385,13 @@ dbm_info *_php3_dbmopen(char *filename, char *mode) {
#else
#if NDBM
#if DEBUG
php3_error(E_WARNING, "dbmopen_ndbm(%s): errno = %d [%s]\n",filename,errno,strerror(errno));
php_error(E_WARNING, "dbmopen_ndbm(%s): errno = %d [%s]\n",filename,errno,strerror(errno));
#endif
if (errno) ret=errno;
else ret = -1;
#else
#if DEBUG
php3_error(E_WARNING, "dbmopen_flatfile(%s): errno = %d [%s]\n",filename,errno,strerror(errno));
php_error(E_WARNING, "dbmopen_flatfile(%s): errno = %d [%s]\n",filename,errno,strerror(errno));
#endif
if (errno) ret=errno;
else ret = -1;
@@ -472,7 +471,7 @@ PHP_FUNCTION(dbminsert)
info = _php3_finddbm(id,list);
if (!info) {
php3_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
}
@@ -485,8 +484,8 @@ int _php3_dbminsert(dbm_info *info, char *key, char *value) {
int ret;
DBM_TYPE dbf;
_php3_stripslashes(key,NULL);
_php3_stripslashes(value,NULL);
php_stripslashes(key,NULL);
php_stripslashes(value,NULL);
value_datum.dptr = estrdup(value);
value_datum.dsize = strlen(value);
@@ -499,7 +498,7 @@ int _php3_dbminsert(dbm_info *info, char *key, char *value) {
dbf = info->dbf;
if (!dbf) {
php3_error(E_WARNING, "Unable to locate dbm file");
php_error(E_WARNING, "Unable to locate dbm file");
return 1;
}
@@ -525,7 +524,7 @@ PHP_FUNCTION(dbmreplace)
info = _php3_finddbm(id,list);
if (!info) {
php3_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
}
@@ -540,8 +539,8 @@ int _php3_dbmreplace(dbm_info *info, char *key, char *value) {
PLS_FETCH();
if (PG(magic_quotes_runtime)) {
_php3_stripslashes(key,NULL);
_php3_stripslashes(value,NULL);
php_stripslashes(key,NULL);
php_stripslashes(value,NULL);
}
value_datum.dptr = estrdup(value);
@@ -555,7 +554,7 @@ int _php3_dbmreplace(dbm_info *info, char *key, char *value) {
dbf = info->dbf;
if (!dbf) {
php3_error(E_WARNING, "Unable to locate dbm file");
php_error(E_WARNING, "Unable to locate dbm file");
return 1;
}
@@ -579,7 +578,7 @@ PHP_FUNCTION(dbmfetch)
info = _php3_finddbm(id,list);
if (!info) {
php3_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
}
@@ -608,7 +607,7 @@ char *_php3_dbmfetch(dbm_info *info, char *key) {
dbf = info->dbf;
if (!dbf) {
php3_error(E_WARNING, "Unable to locate dbm file");
php_error(E_WARNING, "Unable to locate dbm file");
return(NULL);
}
@@ -632,7 +631,7 @@ char *_php3_dbmfetch(dbm_info *info, char *key) {
ret = NULL;
if (ret && PG(magic_quotes_runtime)) {
ret = _php3_addslashes(ret, value_datum.dsize, NULL, 1);
ret = php_addslashes(ret, value_datum.dsize, NULL, 1);
}
return(ret);
}
@@ -651,7 +650,7 @@ PHP_FUNCTION(dbmexists)
info = _php3_finddbm(id,list);
if (!info) {
php3_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
}
@@ -672,7 +671,7 @@ int _php3_dbmexists(dbm_info *info, char *key) {
dbf = info->dbf;
if (!dbf) {
php3_error(E_WARNING, "Unable to locate dbm file");
php_error(E_WARNING, "Unable to locate dbm file");
return(0);
}
@@ -694,7 +693,7 @@ PHP_FUNCTION(dbmdelete)
info = _php3_finddbm(id,list);
if (!info) {
php3_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
}
@@ -715,7 +714,7 @@ int _php3_dbmdelete(dbm_info *info, char *key) {
dbf = info->dbf;
if (!dbf) {
php3_error(E_WARNING, "Unable to locate dbm file");
php_error(E_WARNING, "Unable to locate dbm file");
return(0);
}
@@ -735,7 +734,7 @@ PHP_FUNCTION(dbmfirstkey)
info = _php3_finddbm(id,list);
if (!info) {
php3_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
}
@@ -756,7 +755,7 @@ char *_php3_dbmfirstkey(dbm_info *info) {
dbf = info->dbf;
if (!dbf) {
php3_error(E_WARNING, "Unable to locate dbm file");
php_error(E_WARNING, "Unable to locate dbm file");
return(NULL);
}
@@ -793,7 +792,7 @@ PHP_FUNCTION(dbmnextkey)
info = _php3_finddbm(id,list);
if (!info) {
php3_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
php_error(E_WARNING, "not a valid database identifier %d", id->value.lval);
RETURN_FALSE;
}
@@ -821,7 +820,7 @@ char *_php3_dbmnextkey(dbm_info *info, char *key) {
dbf = info->dbf;
if (!dbf) {
php3_error(E_WARNING, "Unable to locate dbm file");
php_error(E_WARNING, "Unable to locate dbm file");
return(NULL);
}
@@ -847,7 +846,7 @@ char *_php3_dbmnextkey(dbm_info *info, char *key) {
else ret=NULL;
if (ret && PG(magic_quotes_runtime)) {
ret = _php3_addslashes(ret, ret_datum.dsize, NULL, 1);
ret = php_addslashes(ret, ret_datum.dsize, NULL, 1);
}
return(ret);
}
@@ -1079,7 +1078,7 @@ datum flatfile_nextkey(FILE *dbf) {
#endif
int php3_minit_db(INIT_FUNC_ARGS)
PHP_MINIT_FUNCTION(db)
{
#if defined(THREAD_SAFE)
dbm_global_struct *dbm_globals;
@@ -1104,7 +1103,8 @@ int php3_minit_db(INIT_FUNC_ARGS)
return SUCCESS;
}
static int php3_mend_db(void){
static PHP_MSHUTDOWN_FUNCTION(db)
{
DBM_TLS_VARS;
#ifdef THREAD_SAFE
PHP3_TLS_THREAD_FREE(dbm_globals);
@@ -1121,7 +1121,8 @@ static int php3_mend_db(void){
return SUCCESS;
}
int php3_rinit_db(INIT_FUNC_ARGS) {
PHP_RINIT_FUNCTION(db)
{
#if !GDBM && !NDBM
CurrentFlatFilePos = 0L;
#endif
@@ -1130,21 +1131,21 @@ int php3_rinit_db(INIT_FUNC_ARGS) {
function_entry dbm_functions[] = {
{"dblist", php3_dblist, NULL},
{"dbmopen", php3_dbmopen, NULL},
{"dbmclose", php3_dbmclose, NULL},
{"dbminsert", php3_dbminsert, NULL},
{"dbmfetch", php3_dbmfetch, NULL},
{"dbmreplace", php3_dbmreplace, NULL},
{"dbmexists", php3_dbmexists, NULL},
{"dbmdelete", php3_dbmdelete, NULL},
{"dbmfirstkey", php3_dbmfirstkey, NULL},
{"dbmnextkey", php3_dbmnextkey, NULL},
PHP_FE(dblist, NULL)
PHP_FE(dbmopen, NULL)
PHP_FE(dbmclose, NULL)
PHP_FE(dbminsert, NULL)
PHP_FE(dbmfetch, NULL)
PHP_FE(dbmreplace, NULL)
PHP_FE(dbmexists, NULL)
PHP_FE(dbmdelete, NULL)
PHP_FE(dbmfirstkey, NULL)
PHP_FE(dbmnextkey, NULL)
{NULL,NULL,NULL}
};
php3_module_entry dbm_module_entry = {
"DBM", dbm_functions, php3_minit_db, php3_mend_db, php3_rinit_db, NULL, php3_info_db, STANDARD_MODULE_PROPERTIES
"DBM", dbm_functions, PHP_MINIT(db), PHP_MSHUTDOWN(db), PHP_RINIT(db), NULL, PHP_MINFO(db), STANDARD_MODULE_PROPERTIES
};
#if COMPILE_DL
+4 -3
View File
@@ -74,9 +74,10 @@ char *_php3_dbmfirstkey(dbm_info *info);
char *_php3_dbmnextkey(dbm_info *info, char *key);
/* db file functions */
int php3_minit_db(INIT_FUNC_ARGS);
int php3_rinit_db(INIT_FUNC_ARGS);
void php3_info_db(ZEND_MODULE_INFO_FUNC_ARGS);
PHP_MINIT_FUNCTION(db);
PHP_RINIT_FUNCTION(db);
PHP_MINFO_FUNCTION(db);
PHP_FUNCTION(dblist);
PHP_FUNCTION(dbmopen);
PHP_FUNCTION(dbmclose);
+2 -3
View File
@@ -1,7 +1,6 @@
# $Id$
INCLUDES=@INCLUDES@ -I@top_srcdir@ -I@top_srcdir@/libzend
noinst_LIBRARIES=libphpext_dba.a
libphpext_dba_a_SOURCES=dba.c dba_cdb.c dba_db2.c dba_dbm.c dba_gdbm.c \
noinst_LTLIBRARIES=libphpext_dba.la
libphpext_dba_la_SOURCES=dba.c dba_cdb.c dba_db2.c dba_dbm.c dba_gdbm.c \
dba_ndbm.c
+2 -2
View File
@@ -108,7 +108,7 @@ AC_MSG_CHECKING(for NDBM support)
AC_DBA_STD_RESULT
AC_ARG_WITH(db2,
[ --with-db2[=DIR] Include DB2 support],[
[ --with-db2[=DIR] Include Berkeley DB2 support],[
if test "$withval" != "no"; then
for i in /usr/local /usr /usr/BerkeleyDB $withval; do
if test -f "$i/db2/db.h"; then
@@ -149,7 +149,7 @@ AC_ARG_WITH(db2,
AC_DBA_STD_ATTACH
fi
])
AC_MSG_CHECKING(for DB2 support)
AC_MSG_CHECKING(for Berkeley DB2 support)
AC_DBA_STD_RESULT
AC_ARG_WITH(dbm,
+52 -49
View File
@@ -57,16 +57,16 @@ function_entry dba_functions[] = {
{NULL,NULL,NULL}
};
static int php3_minit_dba(INIT_FUNC_ARGS);
static int php3_mshutdown_dba(SHUTDOWN_FUNC_ARGS);
static void php3_info_dba(ZEND_MODULES_INFO_FUNC_ARGS);
static PHP_MINIT_FUNCTION(dba);
static PHP_MSHUTDOWN_FUNCTION(dba);
static PHP_MINFO_FUNCTION(dba);
php3_module_entry dba_module_entry = {
"DataBase API", dba_functions,
php3_minit_dba,
php3_mshutdown_dba,
PHP_MINIT(dba),
PHP_MSHUTDOWN(dba),
NULL, NULL,
php3_info_dba,
PHP_MINFO(dba),
STANDARD_MODULE_PROPERTIES
};
@@ -86,31 +86,35 @@ typedef struct dba_handler {
/* {{{ macromania */
#define DBA_ID_PARS pval *id; dba_info *info = NULL; int type, ac = ARG_COUNT(ht)
#define DBA_ID_PARS \
pval **id; \
dba_info *info = NULL; \
int type, ac = ARG_COUNT(ht)
/* these are used to get the standard arguments */
#define DBA_GET1 \
if(ac != 1 || getParameters(ht, ac, &id) != SUCCESS) { \
WRONG_PARAM_COUNT; \
#define DBA_GET1 \
if(ac != 1 || getParametersEx(ac, &id) != SUCCESS) { \
WRONG_PARAM_COUNT; \
}
#define DBA_GET2 \
pval *key; \
if(ac != 2 || getParameters(ht, ac, &key, &id) != SUCCESS) { \
WRONG_PARAM_COUNT; \
} \
convert_to_string(key)
#define DBA_GET2 \
pval **key; \
if(ac != 2 || getParametersEx(ac, &key, &id) != SUCCESS) { \
WRONG_PARAM_COUNT; \
} \
convert_to_string_ex(key)
#define DBA_IF_NOT_CORRECT_TYPE(link_id) \
info = php3_list_find(link_id, &type); \
#define DBA_IF_NOT_CORRECT_TYPE(link_id) \
info = php3_list_find(link_id, &type); \
if(!info || (type != GLOBAL(le_db) && type != GLOBAL(le_pdb)))
#define DBA_ID_GET \
convert_to_long(id); \
DBA_IF_NOT_CORRECT_TYPE(id->value.lval) { \
php3_error(E_WARNING, "Unable to find DBA identifier %d", id->value.lval); \
RETURN_FALSE; \
#define DBA_ID_GET \
convert_to_long_ex(id); \
DBA_IF_NOT_CORRECT_TYPE((*id)->value.lval) { \
php_error(E_WARNING, "Unable to find DBA identifier %d", \
(*id)->value.lval); \
RETURN_FALSE; \
}
#define DBA_ID_GET1 DBA_ID_PARS; DBA_GET1; DBA_ID_GET
@@ -128,7 +132,7 @@ typedef struct dba_handler {
/* check whether the user has write access */
#define DBA_WRITE_CHECK \
if(info->mode != DBA_WRITER && info->mode != DBA_TRUNC && info->mode != DBA_CREAT) { \
php3_error(E_WARNING, "you cannot perform a modification to a database without proper access"); \
php_error(E_WARNING, "you cannot perform a modification to a database without proper access"); \
RETURN_FALSE; \
}
@@ -174,9 +178,9 @@ static void dba_close(dba_info *info)
/* }}} */
/* {{{ php3_minit_dba */
static int php3_minit_dba(INIT_FUNC_ARGS)
static PHP_MINIT_FUNCTION(dba)
{
_php3_hash_init(&ht_keys, 0, NULL, NULL, 1);
zend_hash_init(&ht_keys, 0, NULL, NULL, 1);
GLOBAL(le_db) = register_list_destructors(dba_close, NULL);
GLOBAL(le_pdb) = register_list_destructors(NULL, dba_close);
return SUCCESS;
@@ -184,15 +188,15 @@ static int php3_minit_dba(INIT_FUNC_ARGS)
/* }}} */
/* {{{ php3_mshutdown_dba */
static int php3_mshutdown_dba(SHUTDOWN_FUNC_ARGS)
static PHP_MSHUTDOWN_FUNCTION(dba)
{
_php3_hash_destroy(&ht_keys);
zend_hash_destroy(&ht_keys);
return SUCCESS;
}
/* }}} */
/* {{{ php3_info_dba */
static void php3_info_dba(ZEND_MODULE_INFO_FUNC_ARGS)
static PHP_MINFO_FUNCTION(dba)
{
dba_handler *hptr;
@@ -208,13 +212,13 @@ static void php3_info_dba(ZEND_MODULE_INFO_FUNC_ARGS)
static void _php3_dba_update(INTERNAL_FUNCTION_PARAMETERS, int mode)
{
DBA_ID_PARS;
pval *val, *key;
pval **val, **key;
if(ac != 3 || getParameters(ht, ac, &key, &val, &id) != SUCCESS) {
if(ac != 3 || getParametersEx(ac, &key, &val, &id) != SUCCESS) {
WRONG_PARAM_COUNT;
}
convert_to_string(key);
convert_to_string(val);
convert_to_string_ex(key);
convert_to_string_ex(val);
DBA_ID_GET;
DBA_WRITE_CHECK;
@@ -230,7 +234,7 @@ static void _php3_dba_update(INTERNAL_FUNCTION_PARAMETERS, int mode)
static void _php3_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
{
pval **args = (pval **) NULL;
pval ***args = (pval ***) NULL;
int ac = ARG_COUNT(ht);
dba_mode_t modenr;
dba_info *info;
@@ -246,15 +250,15 @@ static void _php3_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
/* we pass additional args to the respective handler */
args = emalloc(ac * sizeof(pval *));
if(getParametersArray(ht, ac, args) != SUCCESS) {
if(getParametersArrayEx(ac, args) != SUCCESS) {
FREENOW;
WRONG_PARAM_COUNT;
}
/* we only take string arguments */
for(i = 0; i < ac; i++) {
convert_to_string(args[i]);
keylen += args[i]->value.str.len;
convert_to_string_ex(args[i]);
keylen += (*args[i])->value.str.len;
}
if(persistent) {
@@ -263,27 +267,26 @@ static void _php3_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
keylen = 0;
for(i = 0; i < ac; i++) {
memcpy(key+keylen,args[i]->value.str.val,args[i]->value.str.len);
keylen += args[i]->value.str.len;
memcpy(key+keylen,(*args[i])->value.str.val,(*args[i])->value.str.len);
keylen += (*args[i])->value.str.len;
}
if(_php3_hash_find(&ht_keys, key, keylen, (void **) &info) == SUCCESS) {
if(zend_hash_find(&ht_keys, key, keylen, (void **) &info) == SUCCESS) {
FREENOW;
RETURN_LONG(php3_list_insert(info, GLOBAL(le_pdb)));
}
}
/* this is O(n) and could be improved */
for(hptr = handler; hptr->name &&
strcasecmp(hptr->name, args[2]->value.str.val); hptr++);
strcasecmp(hptr->name, (*args[2])->value.str.val); hptr++);
if(!hptr->name) {
php3_error(E_WARNING, "no such handler: %s", args[2]->value.str.val);
php_error(E_WARNING, "no such handler: %s", (*args[2])->value.str.val);
FREENOW;
RETURN_FALSE;
}
switch(args[1]->value.str.val[0]) {
switch((*args[1])->value.str.val[0]) {
case 'c':
modenr = DBA_CREAT;
break;
@@ -297,14 +300,14 @@ static void _php3_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
modenr = DBA_TRUNC;
break;
default:
php3_error(E_WARNING,"illegal DBA mode: %s",args[1]->value.str.val);
php_error(E_WARNING,"illegal DBA mode: %s",(*args[1])->value.str.val);
FREENOW;
RETURN_FALSE;
}
info = malloc(sizeof(*info));
memset(info, 0, sizeof(info));
info->path = strdup(args[0]->value.str.val);
info->path = strdup((*args[0])->value.str.val);
info->mode = modenr;
info->argc = ac - 3;
info->argv = args + 3;
@@ -312,7 +315,7 @@ static void _php3_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
if(hptr->open(info) != SUCCESS) {
dba_close(info);
php3_error(E_WARNING, "driver initialization failed");
php_error(E_WARNING, "driver initialization failed");
FREENOW;
RETURN_FALSE;
}
@@ -322,7 +325,7 @@ static void _php3_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
listid = php3_list_insert(info, persistent?GLOBAL(le_pdb):GLOBAL(le_db));
if(persistent) {
_php3_hash_update(&ht_keys, key, keylen, info, sizeof(*info), NULL);
zend_hash_update(&ht_keys, key, keylen, info, sizeof(*info), NULL);
}
FREENOW;
@@ -354,7 +357,7 @@ PHP_FUNCTION(dba_close)
{
DBA_ID_GET1;
php3_list_delete(id->value.lval);
php3_list_delete((*id)->value.lval);
}
/* }}} */
+3 -3
View File
@@ -78,8 +78,8 @@ DBA_OPEN_FUNC(db2)
return FAILURE;
if(info->argc > 0) {
convert_to_long(info->argv[0]);
filemode = info->argv[0]->value.lval;
convert_to_long_ex(info->argv[0]);
filemode = (*info->argv[0])->value.lval;
}
if(!db_open(info->path, type, gmode, filemode, NULL, NULL, &dbp)) {
@@ -96,7 +96,7 @@ DBA_CLOSE_FUNC(db2)
DB2_DATA;
if(dba->cursor) dba->cursor->c_close(dba->cursor);
dba->dbp->close(dba->dbp, DB_NOSYNC);
dba->dbp->close(dba->dbp, 0);
free(dba);
}
+2 -2
View File
@@ -66,8 +66,8 @@ DBA_OPEN_FUNC(dbm)
int filemode = 0644;
if(info->argc > 0) {
convert_to_long(info->argv[0]);
filemode = info->argv[0]->value.lval;
convert_to_long_ex(info->argv[0]);
filemode = (*info->argv[0])->value.lval;
}
if(info->mode == DBA_TRUNC) {
+2 -2
View File
@@ -59,8 +59,8 @@ DBA_OPEN_FUNC(gdbm)
return FAILURE;
if(info->argc > 0) {
convert_to_long(info->argv[0]);
filemode = info->argv[0]->value.lval;
convert_to_long_ex(info->argv[0]);
filemode = (*info->argv[0])->value.lval;
}
dbf = gdbm_open(info->path, 0, gmode, filemode, NULL);
Loaded 100 of 513 files, more files were not shown because too many files have changed in this diff. Show more