Compare commits

...
Author SHA1 Message Date
SVN Migration 6ab1f1c0e5 This commit was manufactured by cvs2svn to create tag
'PRE_FUNC_RETURNS_OBJECT_PATCH'.
2001-12-13 16:55:05 +00:00
Andi Gutmans f4b832d277 - Fix crash bug in startup code.
- Start work on being able to reference global and local scope
2001-12-13 16:55:04 +00:00
Sterling Hughes c55f8b96c9 MFB 2001-12-13 16:27:39 +00:00
Hartmut Holzgraefe 39fcedd78c more proto descriptions and fixes 2001-12-13 14:40:40 +00:00
Rui Hirokawa 75687f2f11 added mbstring to EXTENSIONS. 2001-12-13 14:32:39 +00:00
Rui Hirokawa 5f8a57efec added mbstring to maintainers list. 2001-12-13 14:31:16 +00:00
Thies C. Arntzen b8b0a6ac27 typo 2001-12-13 12:23:32 +00:00
Sascha Schumann 5c2d995f0b Provide access to ini settings.
Properly block the thread, if IO is not ready on a fd.
2001-12-13 11:15:56 +00:00
Hartmut Holzgraefe 4fb28d67b6 - new parameter parsing api used
- added proto descriptions (not complete)
- swapped x/y arguments
- indentation style fix (no seperate WS fix as most of the file changed anyway)
2001-12-13 09:06:11 +00:00
8a21e6bcbe ChangeLog update 2001-12-13 01:13:17 +00:00
Hartmut Holzgraefe 3686d84a68 editor preferences for XML files updated 2001-12-12 20:49:44 +00:00
Andi Gutmans ce98c73f82 - Infrastructure changes for allowing to access the global scope from
- within a class scope.
- Fix the Zend.dsp project a bit. It seems someone pretty much killed it
- when commiting their own personal configuration. Please be careful in
- future.
2001-12-12 20:45:38 +00:00
Andrei Zmievski 6bd64164d5 Always output config.nice for standalone extensions. (Really helps with
PHP-GTK).
2001-12-12 20:26:13 +00:00
Andi Gutmans 74efc41fc3 - Make classes have scope and function/constant lookups default to the class 2001-12-12 17:38:37 +00:00
foobar 657ce39a28 Fixed a typo and added [] around the message text. 2001-12-12 15:42:25 +00:00
foobar 97a29e07c9 More ZTS fixes. 2001-12-12 15:32:08 +00:00
foobar bc033a67db Fixed some compile problems (in ZTS mode) 2001-12-12 15:04:23 +00:00
Sebastian Bergmann 515e8c2c0e Move PHPDoc extension to PECL. 2001-12-12 11:21:43 +00:00
Jan Kneschke 63a566c65a added the new PHPDoc extension which transform PHP-Code into a XML
representation.

The XML output will be used by PHPDoc as it provides more accuracy and
speed.
2001-12-12 09:46:27 +00:00
Andrei Zmievski 14ea586525 Since PHP method names are case-insensitive, we have to fold access to 'FOO'
and 'foo' properties into a call to the same accessor.
2001-12-12 02:53:05 +00:00
Andrei Zmievski 727ef4b94f Ack, apparently in statically linked-in extensions we have to clean the
hash of overloaded classes on request shutdown. Also, added some fold
markers and rearranged some defines.
2001-12-12 02:27:49 +00:00
Stig Bakken dd969337a0 return boolean where appropriate 2001-12-12 01:36:07 +00:00
Stig Bakken aef2b692c1 * implemented "upgrade"
* report install/uninstall errors
2001-12-12 01:35:03 +00:00
Stig Bakken 035cf39d34 * install PEAR/Autoloader.php 2001-12-12 01:32:01 +00:00
Stig Bakken 4adfb80edc * implemented upgrade 2001-12-12 01:30:56 +00:00
Stig Bakken 491a2f5219 * PEAR_Registry::updatePackage now takes an optional 2nd arg for
replacing package info instead of merging
2001-12-12 01:29:27 +00:00
913578add9 ChangeLog update 2001-12-12 01:17:34 +00:00
Stig Bakken 64349569de * make do without overload function 2001-12-12 00:10:47 +00:00
Tomas V.V.Cox 18f2ffeead fixed bug #14414 2001-12-11 20:52:58 +00:00
Hartmut Holzgraefe cc4b274a58 ereg functions will now take in account the real number of
subexpressions instead of simply assuming a fixed count of 10
2001-12-11 19:28:31 +00:00
Andi Gutmans 4214a056a1 - Merge from ZE1 2001-12-11 18:51:02 +00:00
Andi Gutmans 4cb97fa3b9 - Rename zend_class_entry.constants -> zend_class_entry.constants_table 2001-12-11 18:46:43 +00:00
Andi Gutmans 1dcef1e4ea - Start making scope change correctly when calling namespace functions.
- When inside a namespace fallback to global namespace when function
- or constant is not found.
2001-12-11 17:56:57 +00:00
Sebastian Bergmann 5b0b5b6ed5 Forgot to update the LICENSE. 2001-12-11 17:38:49 +00:00
Sebastian Bergmann 5704fcb29d Fix ChangeLog entry. 2001-12-11 15:43:56 +00:00
Sebastian Bergmann 38933514e1 Update headers. 2001-12-11 15:32:16 +00:00
Sebastian Bergmann d863d52a5d Update headers. 2001-12-11 15:16:21 +00:00
Andrei Zmievski db9da7b423 Adding overload extension. 2001-12-11 14:23:32 +00:00
Sascha Schumann d032a8e6f6 thttpd/ircg update 2001-12-11 11:26:43 +00:00
Zeev Suraski f09884ad54 Forward-port 4.1.0 changes 2001-12-11 10:06:06 +00:00
foobar 26f3ec7c03 Some typo, consistency fixes and removed some stuff that is not needed. 2001-12-11 10:02:16 +00:00
Sebastian Bergmann 4345f8a0b5 MFZE1 (AIX fixes) 2001-12-11 09:17:38 +00:00
Stig Bakken 180cce6f63 * fixed the sub-command option parsing
* added -r option to install/uninstall (registers package without
  installing any files, for use by rpm and the like)
2001-12-11 08:39:56 +00:00
Stig Bakken 131acf55f7 * added "register_only" option for install/uninstall 2001-12-11 08:39:01 +00:00
Yasuo Ohgaki 02c1e81a54 More README update. 2001-12-11 08:15:25 +00:00
Markus Fischer d28ef151e0 - Update NEWS entry about latest domxml changes. 2001-12-11 08:11:01 +00:00
Yasuo Ohgaki f4eff912d9 README update 2001-12-11 07:57:48 +00:00
Yasuo Ohgaki 35cc422378 Added README file for pgsql module
Added my self to CREDIT
2001-12-11 07:44:46 +00:00
Sebastian Bergmann ff4cc2c6e2 MFZE1 (added zend_strip mode in the highliter) 2001-12-11 06:30:30 +00:00
Andrei Zmievski 51a29e57f8 Show example of property-specific accessors. 2001-12-11 04:45:58 +00:00
Andrei Zmievski b197b8d104 This commit implements property-specific accessors.
When overload() is called, it not only scans for general handlers, but
also for any methods beginning with __get_ and __set_ and saves a list of
them. Then when a property is accessed, e.g. $obj->x, the extension will first
check whether __get_x() is available, and will call it if it is, otherwise
it will invoke the general __get() handler.
2001-12-11 04:41:15 +00:00
84eaf5e1c8 ChangeLog update 2001-12-11 01:13:03 +00:00
Jouni Ahto 558cce8323 - Yasuo Ohgaki <yohgaki@php.net> is the new maintainer of pgsql module.
# ... and I hope he has enough karma to do it.
2001-12-10 22:49:55 +00:00
Andi Gutmans 3bfee898db - More namespaces work.
- Nuke memory leak.
2001-12-10 18:57:17 +00:00
Andrei Zmievski 0c509e5cf8 Modified __call() handler to accept a byref return value parameter that
should be filled in. The __call() handler is now supposed to return true
or false, depending on whether it was successful or not.
2001-12-10 17:20:04 +00:00
Sebastian Bergmann ae9de3ed37 Enable ext/overload by default on Win32, too. 2001-12-10 17:14:42 +00:00
Stig Bakken 79f5dcf7d6 * now using ext/overload
# how to use:
#
# $remote = new PEAR_Remote;
# $remote->package_listAll();
# $remote->user_activate("johndoe");
#
# (when using overloading, "_" is replaced with "." before doing
#  the xmlrpc call)
2001-12-10 17:04:56 +00:00
Stig Bakken b26e4a97c9 * PEAR_Registry::packageInfo now takes a second arg for returning a single
attribute
2001-12-10 17:01:32 +00:00
Stig Bakken 936923a3b6 * added fold marks, moved around some code and silenced some Archive_Tar
notices
2001-12-10 17:00:32 +00:00
Stig Bakken 2c96b5856f * renamed check methods to checkXxx
* completed the extension check method
* added checks for os, php version, programs and sapi backend
2001-12-10 16:59:17 +00:00
Stig Bakken cd9f1f828e * fix phpdoc comments 2001-12-10 16:40:30 +00:00
Stig Bakken 883e3395f0 * stop parsing arguments when encoutering the first non-option arg 2001-12-10 16:38:44 +00:00
Sascha Schumann 92a6f2c344 Sent proper encodings for gzip/compress files, otherwise IE won't
display them.

Refer to section 3.5, RFC 2616 -- these are IANA registered.

Patch submitted to author.
2001-12-10 14:09:08 +00:00
Sascha Schumann ef72a765bf Add a nocache feature: If documents are stored under /nocache/,
appropiate HTTP headers will be sent which prevent client/proxy caching.
2001-12-10 13:31:41 +00:00
Sterling Hughes 737b6f8b13 Spaces -> Tabs 2001-12-10 13:22:48 +00:00
Sergey Kartashoff 678613b9d8 - mnogosearch example updated to include searchd support 2001-12-10 07:21:50 +00:00
Sergey Kartashoff f9f46598a9 - Fixed search daemon support in mnogosearch module. 2001-12-10 07:11:50 +00:00
Yasuo Ohgaki 9b405fa636 Fix proto 2001-12-10 06:14:03 +00:00
Yasuo Ohgaki db8bb9f23c Added async query functions 2001-12-10 04:02:08 +00:00
Stig Bakken b11d1eb440 * initial commit of PEAR method autoloader 2001-12-10 01:50:11 +00:00
foobar 5d1040309c - Fixed the version detection of Bison.
# The nice people who work on Bison decided to change the --version output.
2001-12-10 01:44:17 +00:00
3fa179752a ChangeLog update 2001-12-10 01:10:28 +00:00
foobar 1066633281 Enable it for real. 2001-12-10 00:38:18 +00:00
Stig Bakken 70ea4df4af * enable overload extension by default 2001-12-10 00:33:01 +00:00
foobar 9b81440b76 This was needed afterall. Without this Apache segfaulted when accessing PHP scripts. 2001-12-09 23:43:20 +00:00
Stig Bakken f22f8adedd * use macros in error messages 2001-12-09 22:39:24 +00:00
Andrei Zmievski 0ba80e7943 *** empty log message *** 2001-12-09 04:34:54 +00:00
Andrei Zmievski 2f4035c833 Adjust to account for latest changes. 2001-12-09 04:31:33 +00:00
Andrei Zmievski 36c4708a84 - Only destroy the current object if it was received from the __get() handler.
- Changed the way method arguments are passed to __call() handler. They are
  now encapsulated inside of an array, which makes it easier to pass them
  to call_user_func_array().
2001-12-09 04:28:23 +00:00
foobar 068be1721f Fixed a typo. 2001-12-09 02:02:44 +00:00
Sterling Hughes c8ef634f1b Align comments in xslt.c
First try at fixing funny resource free'ing problems with objects, don't
perform a zval seperation when we're directly saving a pointer to the SAX
or Scheme handlers
2001-12-09 01:18:20 +00:00
437ea23723 ChangeLog update 2001-12-09 01:10:58 +00:00
6a1f79bf8d NEWS update 2001-12-09 01:10:55 +00:00
Zeev Suraski 216e81db96 Undo (per Jani's request) 2001-12-09 01:00:57 +00:00
Derick Rethans a7b9d5590b - Remove debug code 2001-12-08 23:46:19 +00:00
Derick Rethans 3cb1db985e - Added var_export, which shows a representation of a variable, much like
var_dump, but in such a way you can use it as PHP code.
@- Added var_export, which shows a representation of a variable, much like
@  var_dump, but in such a way you can use it as PHP code. (Derick)
2001-12-08 23:44:34 +00:00
Andi Gutmans 8460372395 - Fix crash with unhandled exceptions 2001-12-08 20:58:20 +00:00
Thies C. Arntzen f026dae4f2 @- Added -w option to the cgi-version. This will remove all comments and
@  whitespace from teh script. (Thies)
2001-12-08 12:27:01 +00:00
6dd36a0df6 ChangeLog update 2001-12-08 01:11:43 +00:00
Andrei Zmievski 7b7f46aa2d - Fix memory leak when accessing undefined index or property.
- Only invoke call_get_handler() on an object in the chain if it's overloaded.
2001-12-07 22:03:19 +00:00
Markus Fischer 363a8b69c9 - Fix crash with invalid option to xslt_set_scheme_handlers(). 2001-12-07 18:16:29 +00:00
Sterling Hughes 751d155b96 Jani's AIX fixes 2001-12-07 17:37:00 +00:00
Rasmus Lerdorf ff3774d1ee Let's not crash when no error str has been set 2001-12-07 17:29:53 +00:00
Dan Kalowsky 89aa330637 Fix for bug #13628.
# basically handles a SQL_ERROR case for all odbc_execute()'s
2001-12-07 17:21:49 +00:00
Thies C. Arntzen 9fff2f7bbe fix #13801 (imap_rfc822_parse_adrlist changes arg1) 2001-12-07 16:48:36 +00:00
Andrei Zmievski 480d2b5624 Make sure refcount is 1 on stack zval. 2001-12-07 14:30:55 +00:00
Hartmut Holzgraefe 8e29c1e9ee old stuff removed 2001-12-07 14:25:10 +00:00
Sterling Hughes d95a4e2c19 Fix long2ip's handling of unsigned longs, by accepting a string argument and
then manually converting the string to an unsigned long using strtoul()
2001-12-07 13:20:18 +00:00
Hartmut Holzgraefe 836e8af6ff proto fixes 2001-12-07 10:17:20 +00:00
Hartmut Holzgraefe 7c8dc40fe3 proto fix 2001-12-07 10:10:47 +00:00
Hartmut Holzgraefe 126e776bb1 - proto descriptions
- changed to new parameter parser api
- changed to K&R style
- various cleanups
2001-12-07 09:49:26 +00:00
Egon Schmid b847333273 Fixed one proto. 2001-12-07 09:47:35 +00:00
Egon Schmid 9f456af68b Fixed some protos. 2001-12-07 09:34:50 +00:00
Stig Bakken 9b17045bdd * configure help indent fix 2001-12-07 09:08:02 +00:00
Hartmut Holzgraefe 94737d086f proto fix 2001-12-07 07:27:00 +00:00
Hartmut Holzgraefe 15515da8a2 protos prepared 2001-12-07 07:21:05 +00:00
Andrei Zmievski 1ec143228a All right, let people RTFM. 2001-12-07 06:19:20 +00:00
Andrei Zmievski 9a1f3b48a9 Add fold markers in strategic places and improve MINIT function a bit. 2001-12-07 06:15:02 +00:00
Andrei Zmievski ecd484ac21 If the method exists in object's function table, call it directly without
using __call() handler.
2001-12-07 06:08:15 +00:00
Andrei Zmievski 9789e43af1 Support overloaded method calls via __call(). 2001-12-07 05:46:02 +00:00
Doug MacEachern 1b35f3bcfc apr_table_elts are now const 2001-12-07 05:34:44 +00:00
Doug MacEachern 27018c0ff0 rename functions to match those supported in the apache 1.3 module:
apache_sub_request -> virtual
 get_all_headers    -> getallheaders
2001-12-07 05:31:07 +00:00
3c03232b35 ChangeLog update 2001-12-07 01:10:36 +00:00
8e4a4d2d60 NEWS update 2001-12-07 01:10:33 +00:00
Hartmut Holzgraefe 8b95f1005f added protos (but without description yet) 2001-12-06 22:27:49 +00:00
Hartmut Holzgraefe 6ebc57505c some cleanup of ext_skel stuff 2001-12-06 21:55:34 +00:00
Hartmut Holzgraefe bd1ac39821 whitespace/indent 2001-12-06 21:51:52 +00:00
Hartmut Holzgraefe 49cc65cdae renamed rot13 to str_rot13() 2001-12-06 21:39:01 +00:00
Hartmut Holzgraefe 7a3c3e85ad proto fix 2001-12-06 19:18:41 +00:00
Doug MacEachern 543d76185d need to call ap_destroy_sub_req() before RETURN_TRUE in apache_sub_req()
(Jon Parise <jon@php.net>)
2001-12-06 19:03:29 +00:00
Hartmut Holzgraefe 71028d46cf ported rot13() from php3 2001-12-06 19:02:27 +00:00
foobar 7decb9dae5 Fix shared extension linking when compiling with e.g. CGI sapi. 2001-12-06 19:01:43 +00:00
Hartmut Holzgraefe c1626365f9 proto fixes 2001-12-06 18:59:22 +00:00
Hartmut Holzgraefe 552ee2a247 proto fixes 2001-12-06 18:37:05 +00:00
Andi Gutmans 055709538c - Support constants. The following works now:
<?
	class foo {
		const GC = "foo constant\n";
	}

	define("GC", "Global constant\n");

	namespace;
	print GC;
	namespace foo;
	print GC;
	namespace;
	print foo::GC;

?>
2001-12-06 18:05:18 +00:00
Hartmut Holzgraefe 250aded265 proto fixes 2001-12-06 17:51:48 +00:00
Andi Gutmans 42486196ad - Initial work on changing namespace scope. Only methods & variables
- right now.
<?
	$hey = "Global hey\n";

	class foo {
		static $hey = "Namespace hey\n";
		function bar()
		{
			print "in foo::bar()\n";
		}
	}
	function bar()
	{
		print "in bar()\n";
	}

	bar();
	namespace foo;
	bar();
	namespace;
	bar();
	namespace foo;
	$bar_indirect = "bar";
	$bar_indirect();

	namespace;
	print $hey;
	namespace foo;
	print $hey;
	$hey = "Namespace hey #2\n";
	namespace;
	print $hey;
	$hey = "Global hey #2\n";
	namespace foo;
	print $hey;
?>
2001-12-06 17:47:04 +00:00
Andi Gutmans fe94f59427 - Nuke the namespace work I did. It'll be redone differently. 2001-12-06 17:23:08 +00:00
Hartmut Holzgraefe 75b47ad142 fixing the proto fixes 2001-12-06 17:18:10 +00:00
Hartmut Holzgraefe 38472b48d7 proto fix 2001-12-06 17:15:59 +00:00
Hartmut Holzgraefe b74a38968a proto fix (sort of) 2001-12-06 17:11:42 +00:00
Hartmut Holzgraefe e5f4a7541d proto fixes 2001-12-06 17:09:09 +00:00
Zeev Suraski 990e2612cc Work around a quirk in the MySQL client library to fix unbuffered queries 2001-12-06 15:04:23 +00:00
Zeev Suraski a702dc02f9 Fix session_unregister() 2001-12-06 14:20:20 +00:00
Zeev Suraski 2258453ba3 Remove PS_DEL_VAR macro, always use PS_DEL_VARL() 2001-12-06 13:33:10 +00:00
Sterling Hughes 84ed9d387f use PHP_INFO_ALL and PHP_CREDITS_ALL instead of hardcoding them 2001-12-06 13:31:34 +00:00
Sterling Hughes 91c6db000f 2 arguments, not 3 2001-12-06 11:44:38 +00:00
Markus Fischer 2b615c3ba4 - Prototype new parameter which forces the creation of new links. 2001-12-06 09:56:24 +00:00
foobar d46f919bc1 Ignore .reg files created by pear_registry test. 2001-12-06 05:42:28 +00:00
Jason Greene 49c3d762ee Fix broken format string in socket_recv -> zend_parse_parameters
Rewrote socket_setopt and socket_getopt to be cleaner
@Added support for SO_RCVTIMEO and SO_SNDTIMEO to ext/sockets (Jason)
2001-12-06 04:44:23 +00:00
foobar 686380b824 Fix test when allow_call_time_pass_reference = Off 2001-12-06 04:43:58 +00:00
Doug MacEachern 52b711521f destroy subrequests returned from ap_sub_req_lookup_uri 2001-12-06 01:25:48 +00:00
935347ee42 ChangeLog update 2001-12-06 01:10:43 +00:00
Doug MacEachern 6adebbf162 call to ap_sub_req_lookup_uri() needs to pass ctx->f->next rather than
NULL for next_filter argument in order for ap_run_sub_req() output to
end up where expected.  ("William A. Rowe, Jr." <wrowe@rowe-clan.net>)
2001-12-06 00:53:58 +00:00
Hartmut Holzgraefe c08d1ad74c proto fix 2001-12-05 23:07:13 +00:00
Hartmut Holzgraefe 2c93a6ac2d proto fixes 2001-12-05 23:01:21 +00:00
Hartmut Holzgraefe 6a42e63dee proto fix 2001-12-05 22:43:21 +00:00
Hartmut Holzgraefe 41d93ca3fd proto fixes 2001-12-05 22:38:49 +00:00
Sascha Schumann ab38ad27a5 increase timestamp, because make tries to regenerate this file without any reason 2001-12-05 21:45:33 +00:00
Zeev Suraski 56986a4ab8 Remove redundant include 2001-12-05 13:46:36 +00:00
Sebastian Bergmann 8b34428167 Document recent changes. 2001-12-05 07:04:16 +00:00
b49f07a92d ChangeLog update 2001-12-05 01:10:23 +00:00
foobar 2605bd4b30 Store the read bytes so that some sapi modules know how much to read. 2001-12-05 00:44:17 +00:00
foobar 1d062f3f6e Make it more clear what session.referer_check is about. 2001-12-05 00:32:23 +00:00
Frank M. Kromann 66d7578c36 Remove check for "To:" in headers. If "Reply-To:" exists the the To: entry was not created.
This is WIn32 only.
2001-12-04 23:33:52 +00:00
Hartmut Holzgraefe 648648ff1b proto fix 2001-12-04 22:57:16 +00:00
Hartmut Holzgraefe d9f641aa34 proto fix 2001-12-04 22:49:53 +00:00
Hartmut Holzgraefe e3fdc42dfa proto fixes 2001-12-04 22:46:06 +00:00
Hartmut Holzgraefe df6f8ba35a proto fix 2001-12-04 22:14:28 +00:00
Hartmut Holzgraefe a1cc1fddd8 proto fixes 2001-12-04 21:18:26 +00:00
Sterling Hughes 886ad91adf Make the length parameter to fgets optional (defaults to 1024) 2001-12-04 19:40:48 +00:00
Frank M. Kromann 08978fc3f4 Enable imap_mail() on win32 2001-12-04 18:47:32 +00:00
Frank M. Kromann 86a884e538 modified to enable imap_mail() on win32 2001-12-04 18:47:07 +00:00
Frank M. Kromann d9763dd63a Adding files to enable imap_mail() on win32 2001-12-04 18:46:49 +00:00
Andi Gutmans 5476706142 - Damn Zeev :) 2001-12-04 17:58:32 +00:00
Sebastian Bergmann a9b9c68b8a Mark sapi/servlet as what it is: experimental. 2001-12-04 13:20:26 +00:00
Sebastian Bergmann 46c3d99a9c Mark ext/java as what it is: experimental. 2001-12-04 13:19:42 +00:00
Sebastian Bergmann 3705cd3f6d Add Win32 specific files to .cvsignore. 2001-12-04 13:19:04 +00:00
Sebastian Bergmann 63de1783fa Add XMLRPC extension. 2001-12-04 05:32:07 +00:00
b99a07a935 ChangeLog update 2001-12-04 01:10:53 +00:00
e7bb6187eb NEWS update 2001-12-04 01:10:50 +00:00
foobar 9c462b0d01 typo fix 2001-12-04 00:28:36 +00:00
foobar c247b8081e - Let's not default to any set of extra libraries. This way any kind of
builds of pdflib work. And this configure stays simple.
2001-12-03 23:54:10 +00:00
Shane Caraveo 7b03b7571b Make xmlrpc module compilable on windows. compiles, but untested. 2001-12-03 22:33:32 +00:00
Andi Gutmans 288d96229e - Missed one 2001-12-03 20:55:59 +00:00
Andi Gutmans 67122717a4 - Nuke REGISTER_MAIN_*. Extension maintainers please make sure I didn't
- change something I wasn't supposed to. It should be fine IMO.
2001-12-03 20:54:23 +00:00
Sascha Schumann 74de59dff1 Fix declarations of static variables. Builds on AIX now. 2001-12-03 15:32:12 +00:00
Sterling Hughes 80f4a863f9 Add a content length field to perhaps eliminate null truncation 2001-12-03 12:24:03 +00:00
Sterling Hughes fa58a95035 Re-add support for HTTP file uploads 2001-12-03 09:19:14 +00:00
Sterling Hughes 734708319f MFB 2001-12-03 08:28:12 +00:00
Derick Rethans 1f14640b3e - Added ob_get_level, which returns the nesting level of the output buffering
mechanism. (patch by Yasuo Ohgaki <yasuo_ohgaki@yahoo.com>)
@- Added ob_get_level, which returns the nesting level of the output buffering
@  mechanism. (Yasuo, Derick)
2001-12-03 07:43:53 +00:00
Frank M. Kromann 03b5cb6775 Make php_reg_replace available from shared extensions 2001-12-03 05:15:29 +00:00
Frank M. Kromann e7ef5041d5 Make php_MD5* functions available from shared extensions 2001-12-03 05:14:28 +00:00
Frank M. Kromann 8e40864770 Make _php_math_number_format available from shared extensions 2001-12-03 05:12:48 +00:00
Frank M. Kromann c07cf5c2a5 Make php_startpage and php_getlastmod available from shared extensions 2001-12-03 05:11:29 +00:00
Frank M. Kromann b4d9b70c6e Make php_setcookie available from shared extensions 2001-12-03 05:10:10 +00:00
ad1cb8205b ChangeLog update 2001-12-03 01:10:54 +00:00
Harald Radi 8d8f148d98 added mssql_fetch_assoc() to be more mysql conform
changed mssql_fetch_array() back to its default behaviour (MSSQL_BOTH)
2001-12-02 21:10:15 +00:00
Hartmut Holzgraefe 34feef0d6b - switch to new paramter parser
- make sure To: and Subject: do not end with a newline character
2001-12-02 17:57:17 +00:00
Markus Fischer 3f9f54dcca Please Egon. 2001-12-02 17:40:38 +00:00
Bernd Roemer 99639f5812 Allow unserializer_callback_func to be turned off. 2001-12-02 17:31:11 +00:00
Tomas V.V.Cox 4bffed7769 Rename Dependencie.php to Dependency.php 2001-12-02 16:29:37 +00:00
Markus Fischer 949d0d7002 - Standardize function to accept either $obj->foo or domxml_foo($obj)
where they should.
- Use xml*Len functions where available.
- Workaround in set_content() to prevent crash.
- Cleaned up php_xpathptr_eval().
- Added NO_ARGS check where missing; moved check for $this always
  before arg parsing.
2001-12-02 16:17:51 +00:00
Daniel Beulshausen bfb066ee96 fix CFLAGS, how could this have worked before? 2001-12-02 14:01:22 +00:00
Daniel Beulshausen 71355c7917 remove outdated txts 2001-12-02 13:56:22 +00:00
Daniel Beulshausen f8cb29d636 cleanup workspace 2001-12-02 13:53:03 +00:00
Daniel Beulshausen ce75d26996 fix php_win_err (wasn't threadsafe) 2001-12-02 13:34:40 +00:00
Markus Fischer 31a74b4aec - Reverted macro moving stupidity (thx to Sterling). 2001-12-02 12:21:50 +00:00
Derick Rethans 896faf0b34 - Fix a bug in timezones +0100 and -0100 2001-12-02 11:35:28 +00:00
Sergey Kartashoff 77111db912 - Added synonym stuff support to mnogosearch module. Slightly changed
stored API. Example updated.
2001-12-02 10:24:39 +00:00
Egon Schmid 3c01151a08 I hope that this is a better explanation as unknown. 2001-12-02 10:00:15 +00:00
Egon Schmid 286d420740 Fixed some protos. 2001-12-02 09:41:27 +00:00
Egon Schmid 90e15c04c9 Fixed two protos. 2001-12-02 09:29:09 +00:00
Sergey Kartashoff 8b99a7385d - Mnogosearch module stored API slightly changed. Example updated. 2001-12-02 07:25:26 +00:00
e6e19800dc ChangeLog update 2001-12-02 01:10:14 +00:00
Rasmus Lerdorf 0c5e2d2439 Oops, FOO_VERSION doesn't exist 2001-12-02 00:59:44 +00:00
Tomas V.V.Cox 3898513fbd Class for checking dependencies 2001-12-02 00:44:02 +00:00
Rasmus Lerdorf 8dce85c2f2 Make ext_skel generate backward compatible module sources
(flight from London to Paris is too short for any real work)
2001-12-02 00:42:22 +00:00
Sergey Kartashoff 6687828100 - Added stored API to mnoGoSearch module. Now you can check
if URL is places at the stored database ot not. Example updated.
2001-12-01 20:09:15 +00:00
Markus Fischer 222fe23275 Last commit:
- Fix segfault in xmldoc().
- Proper free zval in php_xpathptr_eval().

This one:
- Fix segfault in php_xpathptr_eval().
- Fix win32 build (TSRMLS_FETCH issues).
- More sanity checking in php_xpath_get_object(), php_xpath_get_context()
  and php_dom_get_object().
- Moved macros into header file.
- Register le_domxmldtd, le_domxmlcdatap (removes anoying warning message on shutdown).
- Fig segfault in node_children() with unsupported node types.
- Fix leak in php_domobject_new() with unsupported note types.
- Fix leak when freeing xpath context/objects.
- Reverted behaviour change to append_child() [old crashes].
- set_content() also sets the node->content property.

# Testers/patches/contribs welcome.
2001-12-01 19:42:34 +00:00
Tomas V.V.Cox f4299a90e2 check for version for not building broken packages (thanks Markus) 2001-12-01 17:55:47 +00:00
Derick Rethans 29cd309944 - Fix a crash when passing e.g. NULL to basename(). (Patch by Markus
Fischer <mfischer@guru.josefine.at>)
#- Simplyfied code using zend_parse_parameters().
2001-12-01 15:45:55 +00:00
Thies C. Arntzen 0fd809a770 improve last patch:
non existant object variables are now serialized as NULL, this saves us from
buffering the serialized data.
2001-12-01 15:17:50 +00:00
Thies C. Arntzen 7ff5198c53 serialized data would be incoorect if __sleep() returned a variable-name
which is non-existant in the object.
submitted by: Bernd Roemer <berndr@bonn.edu>
2001-12-01 15:06:37 +00:00
Sergey Kartashoff 16344800b2 - mnoGoSearch module usage example (searchlite) updated to support
StoreDoc stuff.
2001-12-01 14:12:27 +00:00
Sergey Kartashoff f70e998794 - StoreDOC support has been added to mnogoSearch module. 2001-12-01 14:05:13 +00:00
Andi Gutmans 94cfe03da5 - Revert one of the changes because it might be before the memory
- manager has started.
2001-12-01 08:46:02 +00:00
Andi Gutmans bb9a36cad1 - Use alloca() when possible. 2001-12-01 08:33:48 +00:00
c45f699830 ChangeLog update 2001-12-01 01:10:20 +00:00
bef4389b5d NEWS update 2001-12-01 01:10:17 +00:00
foobar 8a8741a1fe This makes the configure --help output more readable. 2001-12-01 00:59:43 +00:00
Stig Venaas 80d8e554d3 ldap_first_attribute and ldap_next_attribute has been completely broken
for 6 months!! Fixed (I think), might be a memory leak there...
2001-11-30 23:37:43 +00:00
Brian Bruns 8a33c1cace Detect FreeTDS to work around different library sets 2001-11-30 22:12:31 +00:00
foobar f43b57190c Added missing cvs ids and unified configure messages. 2001-11-30 19:01:32 +00:00
foobar f1397d5339 Unified the configure messages. 2001-11-30 19:00:13 +00:00
Andi Gutmans e858d27888 - Initial support for class constants. There are still a few semantic
- issues which need to be looked into but basically it seems to work.
- Example:
<?php
	class foo
	{
		const hey = "hello";
	}

	print foo::hey;
?>
2001-11-30 16:29:47 +00:00
Andi Gutmans 7f66d5e99a - Fix typo 2001-11-30 11:42:30 +00:00
Derick Rethans 9190271cef - Added ob_flush and ob_clean functions, which do not end the buffer like
ob_end_flush and ob_end_clean do.
@- Added ob_flush and ob_clean functions, which flush and clean an
@  output buffer without destroying the buffer. (Derick)
2001-11-30 10:48:38 +00:00
Derick Rethans 2afc5d6924 - Fix for bug 8909 and 12680 (timezone problem) 2001-11-30 09:29:15 +00:00
foobar 2b88417b8c This is better way to configure. PDFlib 3/4 can be compiled with external libs too.. 2001-11-30 04:46:36 +00:00
8d030236d6 ChangeLog update 2001-11-30 01:10:33 +00:00
Stig Venaas 088c7a6044 Adding ldap_set_rebind_proc() for APIs with V3 3 arg variant, need more
testing.
2001-11-29 20:26:20 +00:00
Stig Venaas ce4c65a60d Making the link resource point to a structure that contains the LDAP
link, rather than point to it directly.
# This makes it much easier to store and retrieve per-connection PHP state.
2001-11-29 20:17:17 +00:00
Sterling Hughes d30044c969 Update to the latest apr api (patch by Clif Woolley) 2001-11-29 11:29:11 +00:00
Thies C. Arntzen 3ee263e348 i'm sure i had this compile before;-) 2001-11-29 08:18:50 +00:00
Thies C. Arntzen 5a67b295e6 fix a crash in socket_connect (if hostname was not resolvable)
initialize max_fd in various fdset function
fix error checking in _read and _write
2001-11-29 08:09:39 +00:00
35f82bcd6b ChangeLog update 2001-11-29 01:10:31 +00:00
Uwe Steinmann 9ed2694ce0 - introduced several macros to simply code (done by Markus Fischer) 2001-11-28 12:07:17 +00:00
540471fc09 ChangeLog update 2001-11-28 01:12:08 +00:00
Andi Gutmans f289014922 - Support syntax for class constants (doesn't do anything yet but
- required some reworking of the grammar).
2001-11-27 17:46:31 +00:00
c0273c47d7 ChangeLog update 2001-11-27 01:10:08 +00:00
Frank M. Kromann 1436374c40 Removing winutil.c from this project. the functions needed are found in php4ts.dll 2001-11-27 00:08:36 +00:00
foobar cc196f5b54 Show the registered ini entry in phpinfo() 2001-11-26 22:56:36 +00:00
foobar ef64e8336f Updated file since .re changed. 2001-11-26 22:46:15 +00:00
Derick Rethans 534b0f7e06 - Also patch the file from which var_unserializer.c is generated 2001-11-26 22:33:44 +00:00
Derick Rethans 06cdf297a8 - Adding a callback mechanism to the unserializer. (patch by Bernd
Roemer <berndr@bonn.edu>)
#- An explainatory e-mail will be send to php-dev
2001-11-26 21:04:21 +00:00
Sterling Hughes b91a66699c Z_TYPE(filehandle)?? ok.. whatever... ;) 2001-11-26 18:57:44 +00:00
Andi Gutmans 7cd6ccc0ec - Support static $var = 0; style initialization of static class
- members. For example:
-	class foo {
-		static $my_static = 5;
-
-	}
-
-	print foo::$my_static;
2001-11-26 18:05:01 +00:00
Sebastian Bergmann 7c4daf11c0 Nuke ext/sablot entries. 2001-11-26 10:55:46 +00:00
dc613f099c ChangeLog update 2001-11-26 01:10:42 +00:00
Rui Hirokawa ac39c13b1c fixed a link error in configure script. 2001-11-25 22:20:27 +00:00
Egon Schmid feee0f5a08 Fixed some protos. If pi means processing instruction, it should be written IMHO in uppercase characters. 2001-11-25 19:22:51 +00:00
Egon Schmid 15b5b127da Fixed some protos. 2001-11-25 18:51:00 +00:00
Andi Gutmans 0d559f17cd - Fix crash and leak 2001-11-25 12:29:08 +00:00
Zeev Suraski 6cacbd75e7 Fix build if PHP_ENABLE_SEH is not defined 2001-11-25 10:01:49 +00:00
Andi Gutmans 4f3eaaa854 - Whitespace 2001-11-25 08:58:59 +00:00
Andi Gutmans d2da63f629 - Support static members. The following script works:
<?
	class foo
	{
		class bar
		{
			function init_values()
			{
				for ($i=1; $i<10; $i++) {
					foo::bar::$hello[$i] = $i*$i;
				}
			}

			function print_values()
			{
				for ($i=1; $i<10; $i++) {
					print foo::bar::$hello[$i] . "\n";
				}
			}
		}
	}

	foo::bar::init_values();
	foo::bar::print_values();

	for ($i=1; $i<10; $i++) {
		print $hello[$i]?"Shouldn't be printed\n":"";
	}
?>
2001-11-25 08:49:09 +00:00
3d741d71c6 ChangeLog update 2001-11-25 01:10:22 +00:00
foobar 6f5fc0be54 Added missing ini directive: always_populate_raw_po st_data 2001-11-24 23:47:10 +00:00
foobar 18f7a8ca61 Added missing CVS Id tag. 2001-11-24 23:38:08 +00:00
Andi Gutmans 559d611a86 - MFZE1 2001-11-24 18:27:20 +00:00
foobar 6083eb1030 - Handle more error types when uploading files. 2001-11-24 18:23:35 +00:00
Zeev Suraski ee111cf9c8 whitespace 2001-11-24 16:07:05 +00:00
Zeev Suraski a25ccbec2e whitespace 2001-11-24 16:05:22 +00:00
Zeev Suraski 9950eaecd7 Honor error_reporting (in general and @ in particular) for IMAP notices 2001-11-24 15:32:00 +00:00
Zeev Suraski a3ef7170b1 Save entries in $_SESSION even if register_globals is on 2001-11-24 02:41:58 +00:00
Zeev Suraski 8c1f1f15c5 Entries registered with session_register() and altered by changing
$_SESSION (or $HTTP_SESSION_VARS) were not properly saved.  Fixed.
2001-11-24 02:14:45 +00:00
09f96051dd ChangeLog update 2001-11-24 01:10:23 +00:00
Zeev Suraski 66be507ac3 whitespace 2001-11-24 01:08:05 +00:00
Derick Rethans 983e41b7be - Reverse slight mistake (patch by Markus Fischer) 2001-11-23 11:46:01 +00:00
Rui Hirokawa 506eec88b4 restriction is relaxed because output handler couldn't be used even if zlib.output_compression is set to off. 2001-11-23 02:53:16 +00:00
062713a58d ChangeLog update 2001-11-23 01:10:12 +00:00
199b95c8d6 NEWS update 2001-11-23 01:10:09 +00:00
Derick Rethans f1f5a325c1 - Beautifying 2001-11-22 22:46:31 +00:00
foobar a4a8f6719b WS fix. 2001-11-22 15:14:49 +00:00
Derick Rethans e39fbeae16 - Fix crach bug if the parameter to shm_remove is not a valid identifier. 2001-11-22 14:33:35 +00:00
Derick Rethans 2d6842b103 - Added a parameter to mysql_connect to force a new database link to be
created. (patch by Markus Fischer <mfischer@guru.josefine.at>)
@- Added a parameter to mysql_connect to force a new database link to be
@  created. (Markus, Derick)
2001-11-22 07:58:37 +00:00
Derick Rethans 3eded520ef - Fix for bug #14169 2001-11-22 07:48:59 +00:00
2cbd22b9c8 ChangeLog update 2001-11-22 01:11:02 +00:00
4af0eeded6 NEWS update 2001-11-22 01:10:59 +00:00
Frank M. Kromann e184ed1ed3 Allow php_win_err() to be called from extenstions 2001-11-21 22:47:54 +00:00
Stig Venaas 2ea46ef6cc Added ldap_sort() function
@- Added ldap_sort() function. (Stig Venaas)
2001-11-21 20:14:17 +00:00
Uwe Steinmann 6affe84ee7 - add functions clone_node(), is_blank_node(), create_entity_reference()
- fixed bug in node_name()
- fixed behavior of append_child(), it now adds a child a not a sibling
2001-11-21 17:01:19 +00:00
Sean Bright 4312c5f9e0 Fix typo. 2001-11-21 02:00:02 +00:00
d5a1d55901 ChangeLog update 2001-11-21 01:10:26 +00:00
Harald Radi affac19132 added blabla 2001-11-21 00:36:20 +00:00
Sterling Hughes e7aa85c011 Fix a crash bug in CURLOPT_POSTFIELDS by using curl_formadd instead of
curl_formparse

Fix a crash bug when CURLOPT_INFILE is not properly specified.
2001-11-20 11:29:54 +00:00
James Moore 9a17664431 Remove sablot from php_modules.dsw, its no longer in repository 2001-11-20 10:47:20 +00:00
a975676399 ChangeLog update 2001-11-20 01:10:04 +00:00
Andrei Zmievski 0722546b20 Fix NEWS. 2001-11-19 15:47:50 +00:00
Derick Rethans 48475a52af - Added a bugfix 2001-11-19 15:20:26 +00:00
Zeev Suraski 312a226707 Fix set_time_limit() to affect only the current request (fix bug #13711) 2001-11-19 14:59:38 +00:00
857a051616 ChangeLog update 2001-11-19 01:11:38 +00:00
72c05b07d5 NEWS update 2001-11-19 01:11:34 +00:00
foobar 41b21156cc Fixed bugs: #14034, #11647 (can not find any others) 2001-11-19 00:51:06 +00:00
foobar e65ae0e7fd Fixed bug: #14014. 2001-11-18 23:52:11 +00:00
foobar 4b8709ef5c Test before commit..test before commit.. 2001-11-18 23:08:47 +00:00
foobar 48697c5f5c Now this might even work. 2001-11-18 22:54:18 +00:00
Doug MacEachern 8dd296dd7d AIX compiler doesn't like having a comma at the end of the enum
(Ryan Bloom <rbb@apache.org>)
2001-11-18 20:08:43 +00:00
Derick Rethans f17f3371be - Added md5_file(), which calculaties the MD5 sum of a file.
(patch by: Alessandro Astarita <aleast@capri.it>) (Derick)
@- Added md5_file(), which calculaties the MD5 sum of a file.
@  (patch by: Alessandro Astarita <aleast@capri.it>) (Derick)
2001-11-18 18:48:17 +00:00
Derick Rethans c1f93729b8 - MFB 2001-11-18 13:57:22 +00:00
Sterling Hughes 2aaa2cc409 Remove the .cvsignore file 2001-11-18 13:21:33 +00:00
Sterling Hughes 631f476abe Remove the sablotron extension
# HOOOOOOOOOOOORAY :)Remove the sablotron extension

# HOOOOOOOOOOOORAY :)Remove the sablotron extension

# HOOOOOOOOOOOORAY :)Remove the sablotron extension

# HOOOOOOOOOOOORAY :)Remove the sablotron extension

# HOOOOOOOOOOOORAY :)Remove the sablotron extension

# HOOOOOOOOOOOORAY :)Remove the sablotron extension

# HOOOOOOOOOOOORAY :)Remove the sablotron extension

# HOOOOOOOOOOOORAY :)Remove the sablotron extension

# HOOOOOOOOOOOORAY :)
2001-11-18 13:20:37 +00:00
Derick Rethans a72dce7da9 - Fix build on FreeBSD (patch by Markus Fischer) 2001-11-18 12:01:54 +00:00
foobar fc3906e93a WS fix 2001-11-18 03:34:23 +00:00
Andrei Zmievski a2f95abb6d - Added support for parsing recordsets.
- Fixed a bug that sometimes would corrupt top-level element
  if it was a scalar one.
2001-11-18 01:16:03 +00:00
3744720899 ChangeLog update 2001-11-18 01:10:14 +00:00
Zeev Suraski 23c0362aec Fix bug 13143 2001-11-17 21:15:38 +00:00
29312b2ec8 ChangeLog update 2001-11-17 01:10:30 +00:00
David Reid 4f0eab7f6c s/\t/ / 2001-11-16 17:31:13 +00:00
Sascha Schumann 9f3362933a Fix two incidents which have been reported about the new unserializer.
#1: forgot to handle negative numbers
#2: added zval_ptr_dtor which was not in the original code which
    might lead to crash

PR: #14082
2001-11-16 16:34:14 +00:00
Andrei Zmievski fcd83424cf Add todo item. 2001-11-16 15:04:12 +00:00
Rasmus Lerdorf e68a9c6bfa Use the macro here and add an E_NOTICE 2001-11-16 11:59:04 +00:00
foobar 1e5e73e0ae - Nuked some memleaks
- Changed the error to be set always. Otherwise the index for error
  wouldn't be correct in case of uploading multiple files within array.
  ( <input type="file" name="test[]"> )
2001-11-16 03:34:26 +00:00
c44f5ec495 ChangeLog update 2001-11-16 01:10:18 +00:00
foobar 37dec69a7c No use of populating the hash if there is no file saved. 2001-11-16 01:06:48 +00:00
Zeev Suraski 08615c6f68 MFZE1 2001-11-15 23:26:52 +00:00
foobar ae82e1ccf2 In case of submitting form without any files selected don't set
the tmp_name.
2001-11-15 15:37:02 +00:00
Stanislav Malyshev 39f3075500 Check in ftok() function by Andrew Sitnikov <sitnikov@infonet.ee> 2001-11-15 09:53:40 +00:00
Tomas V.V.Cox 15f0f8ae23 implemented "uninstall" command 2001-11-15 01:24:35 +00:00
df92e90d50 ChangeLog update 2001-11-15 01:10:15 +00:00
Stig Venaas 3dd9845e98 Fixed some memory leaks and removed some unnecessary checks due to
ZEND_FETCH_RESOURCE returning on error
2001-11-14 22:05:33 +00:00
Frank M. Kromann 3c06e3c4bb Prevent fbsql_num_rows from looping 2001-11-14 20:42:38 +00:00
Frank M. Kromann 95d99c9ba9 Fixing debug build 2001-11-14 17:56:26 +00:00
Sterling Hughes 42b9349d8b Many other reasons that setvbuf can fail than "wrong arguments", returning
false should be enough
2001-11-14 12:57:06 +00:00
Christian Stocker 57d908ea1f adding PEAR/Registry.php 2001-11-14 09:55:38 +00:00
Derick Rethans b278435074 - Fix crashbug on dtor 2001-11-14 09:48:14 +00:00
Christian Stocker fde1575ba2 checking if package.xml.gz exists, before checking if it's writeable 2001-11-14 09:22:00 +00:00
5598d6f0b1 ChangeLog update 2001-11-14 01:10:16 +00:00
Doug MacEachern 898099adba setup standard CGI variables 2001-11-13 21:40:01 +00:00
Frank M. Kromann de46a16e43 Fixing compile error 2001-11-13 19:20:26 +00:00
Frank M. Kromann dd714b617c Fixing debug build 2001-11-13 19:19:09 +00:00
Stig Venaas 80ccb3f7f7 Minor changes in ldap_connect(): fixed crash with OpenLDAP 2 libs when
called without args and also use ldap_init() rather than ldap_open();
simplified code a little
2001-11-13 18:05:47 +00:00
Stig Venaas ca476ecaa4 Removed some old cruft (some commented code and non-used globals), fixed
a proto typo, and make sure ldap_base_dn and ldap_filter are initialized
in php_ldap_do_search()
2001-11-13 17:10:08 +00:00
foobar 6f84c93e45 Fixed some problems in configuring e.g. shared module. 2001-11-13 13:59:13 +00:00
Rasmus Lerdorf a9fe559f60 Be explicit here and cast it 2001-11-13 13:53:11 +00:00
Rasmus Lerdorf 55d9b2ad9c Fix most of these tests - still think there is a bug in the long->float
conversion stuff somewhere
2001-11-13 13:12:46 +00:00
Rasmus Lerdorf f78f4364a0 Different operating systems handle the group x bit differently, so
simplify this test to test the user x bit instead
2001-11-13 12:39:21 +00:00
foobar 2e3fbf41f9 Make these tests work regardless of the register_globals setting. 2001-11-13 12:20:31 +00:00
Zeev Suraski 8b40f3c231 Improve OpenSSL compatibility 2001-11-13 11:47:52 +00:00
foobar a6d9db7dc1 Fixed bug introduced by my last commit. 2001-11-13 11:38:22 +00:00
Sterling Hughes 5fc1552c04 "Fix" last commit, to compile cURL with SSL support you must also use the
OpenSSL extension -- sorry...

The last commit caused bad things to happen if you were compiling cURL and
PHP on Win32 or if you compiled PHP --with-openssl, ie, re-initializing things
that were already initialized
2001-11-13 10:59:15 +00:00
Derick Rethans 3ca8006a8d - Fix scheme/sax handlers (patch by Lenar Lõhmus <lenar@vision.ee>) 2001-11-13 09:54:06 +00:00
bc6f6d9e83 ChangeLog update 2001-11-13 01:11:02 +00:00
Stig Bakken f705826052 * command name changes 2001-11-13 01:07:36 +00:00
Stig Bakken e6f95ee99b * rename files to .reg (not .inf) 2001-11-13 01:06:48 +00:00
Stig Bakken 79f0345166 * error message cleanup
* store registry object as property
2001-11-13 01:05:46 +00:00
Zeev Suraski 6d7be11454 Import patch from bug #14023 2001-11-13 01:01:47 +00:00
foobar 12cfb76b65 Fixed the wrong logic in ini_get_all() function.
Now it behaves same as how phpinfo() outputs the ini entries.

If there is a local value, then the global one is the 'original one' if
there is such. Otherwise global value is same as local. :)
2001-11-13 00:37:49 +00:00
Martin Jansen 62f57095a0 * shame on me ... 2001-11-12 10:52:41 +00:00
Martin Jansen 98bda8de71 * typo 2001-11-12 10:51:42 +00:00
Jon Parise 1c7f015c4d Provide the full URL to pear.php.net. 2001-11-12 03:04:06 +00:00
Markus Fischer abe67fdb83 Unified error/warning messages. 2001-11-12 01:54:55 +00:00
4d1daeb9bd ChangeLog update 2001-11-12 01:11:05 +00:00
821458c4d6 NEWS update 2001-11-12 01:11:02 +00:00
Markus Fischer 80a58cd23c WS 2001-11-12 01:07:17 +00:00
Markus Fischer 6cc12e1450 Fix #14020 and some minor leaks. 2001-11-12 00:58:16 +00:00
Rui Hirokawa 975ed901aa fixed output problem with output buffering handler. 2001-11-11 23:11:23 +00:00
Jeroen van Wolffelaar 5ccdb1d352 Fix all (at least, I tried to catch all) proto's in file.c 2001-11-11 20:33:27 +00:00
Jeroen van Wolffelaar 788b1552a7 Add warning when set_file_buffer() fails 2001-11-11 19:42:31 +00:00
Derick Rethans 78e4644fa1 - Renaming key_exists to array_key_exists
@- Renamed key_exists tp array_key_exists. (Derick)
#- Not sure if this belongs in NEWS, but it was already in a released
#  version. And yes, I know I'm breaking BC here, but as it was not documented
#  yet, that doesn't matter.
2001-11-11 18:28:43 +00:00
Stanislav Malyshev 88c66d4859 Fix crash bug on malformed .ini file 2001-11-11 12:41:14 +00:00
Thies C. Arntzen 66411756dd compile fix 2001-11-11 11:08:31 +00:00
Markus Fischer 3a1b1142fe Add missing loop variable $i.
Suppress more warnings when using the option separator '--'.
2001-11-11 04:09:08 +00:00
Markus Fischer d672226d6f Suppress warning on long-options without an additional argument. 2001-11-11 03:59:22 +00:00
Rasmus Lerdorf 035c6c83e6 Fix for 14012 2001-11-11 02:58:11 +00:00
foobar b893e59095 Make the filesize 0 when upload fails. And changed the error messages to be different from each other. 2001-11-11 01:51:17 +00:00
0515870902 ChangeLog update 2001-11-11 01:12:10 +00:00
8b4b057518 NEWS update 2001-11-11 01:12:07 +00:00
foobar 7d479f4abb Fix for bug: #14008. Still needs some minor changes but should give idea about this. 2001-11-11 00:45:31 +00:00
Andrei Zmievski 2bc39cfebc Clean up. 2001-11-11 00:06:47 +00:00
Andrei Zmievski 90cbb8e02b Crash fix news. 2001-11-10 23:58:23 +00:00
Andrei Zmievski 3942e2a8bd Fixed bug #13635. 2001-11-10 23:45:00 +00:00
Andrei Zmievski 98a7a1ba1f Fixed bug #13901. 2001-11-10 23:44:04 +00:00
Sebastian Bergmann d247632b5b No need to 'include' a .re file here. 2001-11-10 22:31:48 +00:00
Shane Caraveo 5664afaadc Make the win32 fastcgi compilable with the php4ts projects. 2001-11-10 22:11:03 +00:00
Sascha Schumann f341f630d3 Rewrite of unserializer which should be more maintainable and extensible.
Changes pass `make test´ and a couple of custom tests.

Enjoy.
2001-11-10 21:18:34 +00:00
Derick Rethans 88c6758d4e - Fixing this bad idea 2001-11-10 18:06:28 +00:00
James Moore 4f78737000 Fix apache win32 dso build.
(This is untested on linux but shouldnt break anything)
2001-11-10 17:24:02 +00:00
Rasmus Lerdorf e202deaec4 # More low-oxygen plane hacking
Fix ImageColorsForIndex() and ImageColorAt() to work for TrueColor images.
@- Fix ImageColorsForIndex() and ImageColorAt() to work for TrueColor
@  images. (Rasmus)
2001-11-10 15:06:09 +00:00
Derick Rethans 23db803b34 - Correcting Goba's name, and adding me to QA team 2001-11-10 14:22:36 +00:00
Martin Jansen 13fb78bab1 * some minor improvements 2001-11-10 10:37:24 +00:00
foobar 13ed1f43c1 Fixed bug: #13955.Checks now for png_write_image(). 2001-11-10 09:51:47 +00:00
Frank M. Kromann 95ee25ace6 Make fbsql_list_fields work as documented 2001-11-10 07:43:23 +00:00
ad6607332b ChangeLog update 2001-11-10 01:10:52 +00:00
412cca6f6f NEWS update 2001-11-10 01:10:47 +00:00
Jon Parise 8f26c3f326 @ Added support for bind_textdomain_codeset(). (rudib@email.si) 2001-11-09 16:27:09 +00:00
Alan Brown 8ee38d9d75 Not all components populate every field in the ExceptInfo structure. Thus we sometimes would try to convert NULL strings and see php_OLECHAR_to_char errors while displaying Exception information. This version is a little smarter about the member derefencing and the resulting error string. 2001-11-09 14:20:28 +00:00
58abda0e58 ChangeLog update 2001-11-09 01:10:14 +00:00
Derick Rethans 43eb67855f - oops :) 2001-11-08 23:38:38 +00:00
Derick Rethans b1d60772d8 - Let it also work with pdflib 3 again 2001-11-08 23:37:34 +00:00
Rui Hirokawa da8b28cf1c fixed a bug in http input processing patched by Yasuo Ohgaki. 2001-11-08 22:23:04 +00:00
Egon Schmid d3ea04bb66 Some protos fixed. 2001-11-08 22:11:41 +00:00
Egon Schmid 4396a984a8 More protos fixed. 2001-11-08 22:05:56 +00:00
Egon Schmid 6fbe1dbcae Fixed some protos and many more will follow the next hour. 2001-11-08 21:48:34 +00:00
Adam Dickmeiss 43f34af575 Use PHP_ADD_LIBRARY_DEFER and PHP_ADD_LIBPATH instead of
PHP_EVAL_LIBLINE to prevent configure error.
2001-11-08 21:37:49 +00:00
Egon Schmid 65429fbaac There are some rules. 2001-11-08 21:32:48 +00:00
Derick Rethans ea83d64507 - prototypes
#- Thanks to Zak for pointing this out during his talk
2001-11-08 20:23:33 +00:00
Derick Rethans a345d2ce86 - Prototypes 2001-11-08 20:21:01 +00:00
Tomas V.V.Cox 878fb495fe - By default DB_FETCHMODE_OBJECT will do a cast to object from the row
array (twice fast than with DB_Row)
- API Doc updates/fixs
2001-11-08 13:53:44 +00:00
Sebastian Bergmann 1a082a349c Add php_w32api.dll 2001-11-08 07:07:11 +00:00
Sebastian Bergmann 26d0435146 Add ext/w32api 2001-11-08 07:03:38 +00:00
34c165a274 ChangeLog update 2001-11-08 01:10:09 +00:00
db9d9523a6 NEWS update 2001-11-08 01:10:06 +00:00
James Moore 70941fe41b @ - Add generic Win 32 API extension (jmoore) 2001-11-07 14:31:03 +00:00
James Moore f111b84e05 @ - Fix Bug 9878 (patch by bfoddy@mediaone.net) (jmoore) 2001-11-07 14:22:15 +00:00
Stig Bakken 61cad20c12 * store registry data in PEAR_INSTALL_DIR/.registry instead of /var/something 2001-11-07 10:43:04 +00:00
Stig Bakken b1976de01b * fix "list" command 2001-11-07 09:25:39 +00:00
Stig Bakken 81b5aabb33 typo 2001-11-07 09:24:55 +00:00
a8d6e94635 ChangeLog update 2001-11-07 01:10:11 +00:00
5f8982d048 NEWS update 2001-11-07 01:10:08 +00:00
Chuck Hagenbuch 352e52716a fix the singleton and factory methods for
a). php 4.0.6 (where include_once might return false)
b). to use references and not copy so many objects
2001-11-06 21:46:41 +00:00
Jon Parise 2c5764d46f It doesn't look like we use a fourth pointer. 2001-11-06 18:02:04 +00:00
MySQL Team e982012daf (PHP mysql_connect) Removed warning message regarding NONEXISTENT character
set, when the server's default character set != latin1.
@- Removed a warning message about a NONEXISTENT character set from
@  mysql_connect(), when the server's default character set != latin1.
2001-11-06 16:59:07 +00:00
Jon Parise f8fb5e5d98 Include <sys/socket.h> for 'struct sockaddr'.
# This fixes my FreeBSD build.
2001-11-06 14:35:26 +00:00
Sterling Hughes ef537403e6 @ Add Direct I/O extension for lowlevel access to the POSIX layer. (sterling) 2001-11-06 12:24:09 +00:00
afa2c22e9c ChangeLog update 2001-11-06 01:10:55 +00:00
f34c1ee368 NEWS update 2001-11-06 01:10:52 +00:00
Tomas V.V.Cox 5695709fb7 E_ALL fixes 2001-11-06 01:05:28 +00:00
Tomas V.V.Cox 16f8af514f E_ALL fixes 2001-11-06 00:22:18 +00:00
Sergey Kartashoff 962216c201 @- Added Udm_Check_Charset function (gluke)
- Added Udm_Check_Charset function (gluke)
2001-11-05 19:07:25 +00:00
Alex Waugh e06c1d7c7e New SAPI module for the WebJames server on RISC OS
@- New SAPI module for the WebJames server on RISC OS (Alex Waugh)
2001-11-05 12:07:49 +00:00
Stig Venaas 92843788fa Fixed seg fault when using ldap_add (or modify) with value array not
indexed as 0, 1, ... In some cases it didn't give seg fault, but used
previously added value. Now gives warning.
@- Made ldap_add (and modify) give warning with illegal value arrays.
@  Previously seg faulted or added wrong value (Stig Venaas)
2001-11-05 11:50:52 +00:00
1251756d54 ChangeLog update 2001-11-05 01:10:08 +00:00
Stig S. Bakken 78f108d31a add newline at end of file to avoid warnings 2001-11-05 00:17:28 +00:00
Stig S. Bakken 9382ddec52 non-zts compile fix 2001-11-05 00:16:33 +00:00
Andi Gutmans a332f826a7 - Support instantiation of nested class. The following script now should
- work:
-<?php
-	class foo
-	{
-		function bar()
-		{
-			print "bar() in class bar\n";
-		}
-
-		class barbara
-		{
-			function bar()
-			{
-				print "bar() in class foo::barbara\n";
-			}
-		}
-	}
-
-	$obj = new foo();
-	$obj->bar();
-
-	$obj = new foo::barbara();
-	$obj->bar();
-
2001-11-04 19:30:49 +00:00
Alex Waugh bddb9539f7 Convert PATH_TRANSLATED for RISC OS 2001-11-04 12:46:30 +00:00
Alex Waugh f1e32a8c82 Undefine AF_UNIX when compiled for RISC OS 2001-11-04 12:40:45 +00:00
Alex Waugh 0bdd62c8ac Make sure uint et al are undefined before typedefing them 2001-11-04 12:38:33 +00:00
Alex Waugh bc26250413 Included header files needed by RISC OS 2001-11-04 12:35:49 +00:00
Stig Bakken db44b1086c * expectError() now accepts "*" as a catch-all
* updated tests
2001-11-04 09:07:17 +00:00
Sergey Kartashoff c4b7501956 # more mnoGoSearch example fixes 2001-11-04 09:02:25 +00:00
Sergey Kartashoff e475621f2c - mnoGoSearch extension example updated to support words hilighting (gluke) 2001-11-04 08:46:55 +00:00
foobar 488b76b95d ws fix 2001-11-04 02:09:55 +00:00
foobar 2c9ed05832 missing cvsignore 2001-11-04 01:54:26 +00:00
c20a1c1be6 ChangeLog update 2001-11-04 01:10:21 +00:00
3d000d9521 NEWS update 2001-11-04 01:10:15 +00:00
Sergey Kartashoff 411725b01c @- mnoGoSearch module example updates for 3.2.x compatibility
- mnoGoSearch module example updates for 3.2.x compatibility
2001-11-03 22:37:50 +00:00
Sergey Kartashoff eb4754441f @- Some mnogosearch-3.2.x compilation bugs fixes.
@  Make crosswords and weight sections work with mnogosearch-3.2.x
@  UDM_PARAM_HLBEG, UDM_PARAM_HLEND mnoGoSearch Agent parameters
@  has been added (gluke)
- Some mnogosearch-3.2.x compilation bugs fixes.
Make crosswords and weight sections work with mnogosearch-3.2.x
UDM_PARAM_HLBEG, UDM_PARAM_HLEND mnoGoSearch Agent parameters
has been added (gluke)
2001-11-03 21:45:50 +00:00
Derick Rethans 0f20565919 - Fix for bug #13918 2001-11-03 20:27:09 +00:00
Andi Gutmans 48e54e0c7a - RISC OS patch by Alex Waugh 2001-11-03 13:35:14 +00:00
Andi Gutmans de64d45439 - RISC OS patches by Alex Waugh 2001-11-03 13:33:21 +00:00
James Moore a67459f581 @ - Fix bug 13885 (gmdate timezone handling on windows) (jmoore)
- relying on timezone and tzname isnt OK for gmdate etc, the only behaviour
   that might not be right is the handling of T formatter under gmdate
   should it return the machines timezone or GMT Standard Time??
2001-11-03 12:42:41 +00:00
Andi Gutmans 2eccd95ca4 - Add some initializations 2001-11-03 12:19:52 +00:00
Andi Gutmans b87194e0c6 - Add constructor to the zend_class_entry instead of looking it up each
- time by name.
- This will allow the next patch of being able to instantiate nested
- classes such as new foo::bar::barbara();
2001-11-03 11:59:14 +00:00
02293b6bee ChangeLog update 2001-11-03 01:10:28 +00:00
e74c6b1674 NEWS update 2001-11-03 01:10:25 +00:00
Rui Hirokawa 702e243d98 added private_no_expire mode on session patched by Yasuo Ohgaki. 2001-11-02 22:27:07 +00:00
James Moore 2ace2ccd00 WS fix 2001-11-02 19:31:57 +00:00
James Moore c8896a38ae @- Fix behaviour of strtok. Bug 13866 (jmoore)
# I have brought the behaviour of strtok into line with how the
# libc strtok's behave. currently given
# <string1><token><string2><token><token>string>
# three recursive calls to strtok returns <string1>. <string2>, <token><string3>
# it now returns <string1>, <string2>, <string3>. (there was some
# debate in #php.bugs if it should return <string1>, <string2>, false, <string3>
# but php's strtok now behaves the same way as the libc version.
2001-11-02 19:19:24 +00:00
Christian Stocker 288871505b typo 2001-11-02 17:57:17 +00:00
foobar 6fce86d5ed Missing entry 2001-11-02 14:34:11 +00:00
foobar 5a81882c03 This was conditionally included if HAVE_MYSQL_REAL_CONNECT was defined. 2001-11-02 07:08:48 +00:00
foobar 9ba2c90e16 Make the extension work with MySQL 4.0 2001-11-02 06:42:12 +00:00
foobar ab94fecde3 This propably fixes couple of problems with compiling with external libs. 2001-11-02 01:32:33 +00:00
b1085a21e5 ChangeLog update 2001-11-02 01:10:52 +00:00
Tomas V.V.Cox 3a0e43cb54 use feautres property instead of options 2001-11-02 00:38:23 +00:00
Markus Fischer dceb1e7814 Remove prototype warnings under linux. 2001-11-01 22:40:43 +00:00
Harald Radi 93a58dbed2 no message 2001-11-01 20:53:41 +00:00
Daniel Beulshausen 54ca6f05b1 nuke remaining warnings 2001-11-01 20:10:17 +00:00
Daniel Beulshausen d0433b6d1c make this function static 2001-11-01 17:25:56 +00:00
Daniel Beulshausen 2fba036202 - convert to use new zend_parse_parameters API
- unify errormessages + add socket_last_error()
- fix linklibrary under windows
- some streamlining
2001-11-01 16:51:59 +00:00
Tomas V.V.Cox fa15d6069c - Added row limit support for fetchInto and fetchRow
- Added getRowCounter method for DB_result to get the row number
  you are fetching in limited queries
2001-11-01 15:14:17 +00:00
Derick Rethans 2830e45fe7 - Applied patch by Yasuo Ohgaki <yasuo_ohgaki@yahoo.com> 2001-11-01 10:57:49 +00:00
deeb3407ff ChangeLog update 2001-11-01 01:10:04 +00:00
Sebastian Bergmann b1322f570c Synch with persistant -> persistent changes to ext/fbsql. 2001-10-31 18:09:17 +00:00
Andrei Zmievski 7d2334f48d Fix. 2001-10-31 14:19:30 +00:00
Stig Bakken 8a7f7d5cae * pearweb xmlrpc layer now handles PEAR errors 2001-10-31 06:21:11 +00:00
Stig Bakken b0a803d127 * update tests 2001-10-31 05:52:41 +00:00
Stig Bakken 2c05c7e0ac * removed error_prepend and error_append properties 2001-10-31 05:48:16 +00:00
Stig Bakken b5dc4f7ce0 renamed "debuginfo" property declaration to "userinfo" 2001-10-31 05:44:19 +00:00
Stig Bakken f0df3f5f82 * added "pear info" and "pear show-config" commands
* "pear install" now using the package registry
2001-10-31 05:39:11 +00:00
dc5e38cf19 ChangeLog update 2001-10-31 01:11:06 +00:00
97be9bc1d5 NEWS update 2001-10-31 01:11:02 +00:00
foobar 91a6ed234d Works now with phpize 2001-10-31 00:20:34 +00:00
foobar 8ea8ebd2de ws fix 2001-10-30 23:27:27 +00:00
foobar 43825a76bb Installing into non-existing dir is not very good idea.. 2001-10-30 23:22:10 +00:00
Sebastian Bergmann 1bbdd3bce1 Cocoon/lib -> xml-cocoon2/lib 2001-10-30 16:55:56 +00:00
Stig Bakken 3a97065f87 * disable case-folding in the xml parser (for consistency now that the
DTD is all lowercase)
2001-10-30 12:29:55 +00:00
Stig Bakken 9a8854b5b1 * improved error reporting in PEAR_Remote::call 2001-10-30 12:28:39 +00:00
Stig Bakken ed03a30603 * added getKeys method 2001-10-30 12:27:58 +00:00
Stig Bakken 4fc273adda ws 2001-10-30 12:19:36 +00:00
Stig Bakken 31391b8df3 * moved <filelist> from <package> to <release>
* added <state> element
2001-10-30 12:08:07 +00:00
Markus Fischer 963226543b Fix possible leak. 2001-10-30 06:40:06 +00:00
Dan Libby 194e17cd11 patches to sync with sourceforge project, version 0.50. primary change: adds support for SOAP v 1.1 2001-10-30 02:33:13 +00:00
cc0b737e51 ChangeLog update 2001-10-30 01:09:58 +00:00
43a2fe1cd8 NEWS update 2001-10-30 01:09:55 +00:00
Frank M. Kromann 75b32c64ff Reset the error (or message) from the server when calling fetch_row functions.
If the user conected and changed the database the message from the change was reported
when the user checked the error function after a failed fetch.
This cased problems in PEAR/DB.
If the fetch fails for other resons than a fetch after the last row, the message from the server will still be reported.
2001-10-29 23:41:15 +00:00
Frank M. Kromann e9c09b86e1 Adding nextResult() function allowing batches of sql statements to be
executed with one call to the query function.
2001-10-29 23:37:27 +00:00
Frank M. Kromann 8b0ac98fe4 A more acurate fix to the fbsql_num_rows function returning
x7fffffff when the server is unable to tell the number of rows.
2001-10-29 21:40:48 +00:00
Frank M. Kromann fc412af04a Fixing spelling of persistent 2001-10-29 21:27:31 +00:00
Frank M. Kromann 51ef66ed67 Adding fbsql.php to PEAR install 2001-10-29 19:28:22 +00:00
foobar d6adcc98b5 After discussing with Rasmus, this line should be enough. Speak up if it is not. 2001-10-29 19:12:43 +00:00
foobar 3be12d1d9b - Added myself to authors.
- Modified the clause about Apache to say what exactly was borrowed.

  Should there be the Apache license included in this file?
2001-10-29 18:58:15 +00:00
Frank M. Kromann 4ccb92fcd0 Fixing wrong count on fbsql_num_rows.
@fbsql_num_rows now return the correct value on all select statements
2001-10-29 18:53:52 +00:00
Andi Gutmans 0a682c6d70 - Fix internal classes 2001-10-29 18:10:36 +00:00
Andi Gutmans 26578c386d - Initial support for nested class definitions 2001-10-29 17:19:02 +00:00
Stig Bakken 7ab89b02c4 * started working on "pear list" command 2001-10-29 14:15:43 +00:00
Stig Bakken b60aedc275 * PEAR_Registry: renamed "upgradePackage" to "updatePackage"
* added tests for PEAR_Config and PEAR_Registry
2001-10-29 12:17:37 +00:00
Stig Bakken f8055473a4 * moved System.php out of Experimental/ 2001-10-29 12:15:53 +00:00
Zeev Suraski 2f08cb119c more ws 2001-10-29 09:45:47 +00:00
Stig Bakken dc9fc4155e * typo 2001-10-29 07:21:08 +00:00
Frank M. Kromann 688cdc581d Fixing parsing of list's returned by extract database, extract license and other extract commands 2001-10-29 01:51:08 +00:00
Zeev Suraski 66a2690700 Fix pointer mess 2001-10-29 01:18:10 +00:00
edcd5d08b6 ChangeLog update 2001-10-29 01:10:07 +00:00
Sebastian Bergmann e2b0768e96 Leftover. 2001-10-28 23:49:59 +00:00
Sebastian Bergmann 6b8670b267 Whitespace changes. 2001-10-28 23:49:03 +00:00
Stig Bakken c62fdf8f11 * added listPackages
* made packageInfo param optional, if not specified returns info for
  all packages
2001-10-28 23:35:10 +00:00
Stig Bakken fd42c6afba * nuked PEAR_Packlist class and added PEAR_Registry instead 2001-10-28 23:22:17 +00:00
Zeev Suraski c06c27af73 Whitespace fixes
Don't Adafy the code, Jani :)
2001-10-28 22:51:58 +00:00
Sebastian Bergmann 43bd681c34 Refinements. 2001-10-28 17:38:37 +00:00
Sebastian Bergmann 610bc7a194 More work on the README. 2001-10-28 15:22:50 +00:00
Sebastian Bergmann 2fa4b31386 javac 1.3 could not find reflect.class before. Also use -O flag when compiling a Release build. 2001-10-28 09:59:00 +00:00
Sebastian Bergmann 6719d80101 Add missing footnotes. 2001-10-28 09:07:37 +00:00
Sebastian Bergmann 1ffea56325 More work on the sapi/servlet documentation. This is still a work in progress. 2001-10-28 09:01:58 +00:00
2928fcbb2c ChangeLog update 2001-10-28 00:11:47 +00:00
ae9f65537e NEWS update 2001-10-28 00:11:41 +00:00
Sebastian Bergmann eff53313f5 Another fix for Tomcat 4. 2001-10-27 23:17:19 +00:00
Sebastian Bergmann cb6e751008 Fix for Tomcat 4. 2001-10-27 23:14:49 +00:00
Derick Rethans 10fe28c8ab - fix crash bug 2001-10-27 18:22:56 +00:00
Derick Rethans 6a5bcfef8d - Fix for bugs #9640 and #13789 2001-10-27 17:50:26 +00:00
Rasmus Lerdorf 374a351444 These were supposed to match 2001-10-27 12:22:22 +00:00
Sascha Schumann 1f6f91035e Get rid of post_off-hack which was only suitable for POST data
which fit into the small thttpd read buffer.  Do a small recv
after content-length bytes have been read to accomodate non-conforming
user-agents.
2001-10-27 12:08:10 +00:00
Sascha Schumann a3368ababa Improved handling of posts 2001-10-27 11:27:39 +00:00
foobar 5ee719bae0 Modified the error message a bit. Happy now Andi? :) 2001-10-27 10:14:14 +00:00
Zeev Suraski 8b53a129f7 MFTGZE1 2001-10-27 09:43:38 +00:00
Stig Bakken cd0fb34562 * actually implement -s/-S options :-) 2001-10-27 07:52:12 +00:00
foobar 4a99c5ee5c Fixed bug: #13844 2001-10-27 06:26:02 +00:00
foobar 44b68122c2 @- Fixed HTTP file upload support to handle big files better. (Jani)
# There are some minor memleaks still..I tried to eliminate them but
# without luck. I'd be glad if someone could check this code out.
# Also, this uses the Apache libapreq. So there might be need to add some
# license thingie there too?
2001-10-27 05:26:24 +00:00
foobar 609271e651 - Prevent PHP from starting if output_handler is set and
zlib.output_compression is on
- Added notes to the bundled php.ini files about this.
2001-10-27 05:22:19 +00:00
Andrei Zmievski 2890b57e46 @- Added array_chunk() function that splits an array into chunks of specified
@  size. (Andrei)
2001-10-27 05:11:15 +00:00
dc107bf495 ChangeLog update 2001-10-27 00:10:14 +00:00
Andrei Zmievski 5da651fcd2 Convert to use new parameter parsing API. 2001-10-26 21:07:59 +00:00
Stig Bakken 475796a0d7 removed 2001-10-26 20:05:34 +00:00
Frank M. Kromann afd6890a78 Typo in constant naming. 2001-10-26 18:42:46 +00:00
Harald Radi 059cbc13d3 fix visual studio .net warning 2001-10-26 17:52:41 +00:00
Frank M. Kromann 2384eb7d62 Removed unused code 2001-10-26 17:50:33 +00:00
Sebastian Bergmann ae13c5c551 Add Win32 generated files. 2001-10-26 14:54:46 +00:00
Andrei Zmievski b3d49ab0e4 Convert to use new parameter parsing API. 2001-10-26 14:50:58 +00:00
Andi Gutmans 89a0e85251 - Fix Zeev's MFZE1 2001-10-26 14:13:42 +00:00
Thies C. Arntzen ca38506fb7 ZTS fixes 2001-10-26 12:54:55 +00:00
Stig Bakken c278bfc448 * implemented "pear list-packages", the first sub-command using xmlrpc 2001-10-26 11:45:21 +00:00
Sterling Hughes e967627ad6 no need to free these it seems 2001-10-26 11:17:34 +00:00
Stig Bakken f197cf3630 * PEAR_Config class to maintain system and per-user configuration for
PEAR installations
* PEAR_Remote class to communicate with the backend server (xmlrpc)
* change pear script's option parsing to "-d foo=bar" style
* added -c/-C (user/system config file) and -s/-S (store user/system config)
  options
2001-10-26 10:07:43 +00:00
6586cf7216 ChangeLog update 2001-10-26 00:10:08 +00:00
Thies C. Arntzen 2977edaacd make it compile again and nuke most warnings 2001-10-25 06:51:13 +00:00
18ccd87eb9 ChangeLog update 2001-10-25 00:10:18 +00:00
Rasmus Lerdorf db75202426 Let's suppress this warning if always_populate is enabled 2001-10-24 20:10:30 +00:00
foobar 35ace375a9 Fixed logic bug introduced by me. Bug: #13796 2001-10-24 10:42:31 +00:00
foobar 201aeb2bb5 C++ comment pollution removed. 2001-10-24 09:06:33 +00:00
Uwe Steinmann 9290bf04e8 - switched src and dest in memcpy. This caused a segm fault in hw_new_document_from_file() 2001-10-24 08:33:09 +00:00
Uwe Steinmann 90544a10ee - freeing memory wasn't always done right 2001-10-24 08:31:54 +00:00
92535e9fa6 ChangeLog update 2001-10-24 00:13:09 +00:00
77318b5186 NEWS update 2001-10-24 00:13:06 +00:00
Rasmus Lerdorf 42ec547950 Ok, now actually make it work - maybe... 2001-10-23 20:48:30 +00:00
Rasmus Lerdorf 550550f746 Minor tweaks 2001-10-23 19:57:45 +00:00
Rasmus Lerdorf 71d341e2c0 @- $HTTP_RAW_POST_DATA was not populated on a missing content-type even when
@  always_populate_raw_post_data was on - fixed. (Rasmus)
$HTTP_RAW_POST_DATA was not populated on a missing content-type even when
always_populate_raw_post_data was on - fixed. (Rasmus)
2001-10-23 19:34:29 +00:00
Rasmus Lerdorf 72fc6bc4b1 As suggested on php-dev, array_fill() is probably a better name for this
function.
2001-10-23 18:46:35 +00:00
Frank M. Kromann 991e30668f Patch for correct handling of DATETIME values.
The patch is implemented with a parameter in php.ini controling if
datetime values are converted with the new or the old method.
Thanks to Michael Bretterklieber <mbretter@jawa.at>
2001-10-23 16:34:52 +00:00
foobar f73ee14bd9 Check that realpath is available. Bug: #9469
# TSRM still uses it without checking. I can't fix that.
2001-10-23 11:14:51 +00:00
foobar 76fcdc1afb Fix these to give correct results even if register_globals=off or
register_argc_argv=off.
2001-10-23 11:11:29 +00:00
foobar 0b2af004c1 Fixed bug: #13782 2001-10-23 10:31:56 +00:00
foobar 19cfee427f Support also --with-gd (without path). Please test this! 2001-10-23 09:19:11 +00:00
foobar cf65fad63a This patch should reduce the amount of 'bogus' bug reports when people
have two or more different versions of GD library installed.
2001-10-23 08:52:14 +00:00
Zeev Suraski aecd5b89ee MFZE1 2001-10-23 01:23:36 +00:00
Zeev Suraski c767809b2f Prolong the death of dl() for a little while longer. 2001-10-23 01:18:54 +00:00
c2da7dc4a9 ChangeLog update 2001-10-23 00:10:31 +00:00
deea4d7f2c NEWS update 2001-10-23 00:10:28 +00:00
Rasmus Lerdorf d98c96fc6c Use references instead of making a copy each time in array_init(). About
twice as fast for a high number of elements.  2.80 seconds for the copy
of 1,000,000 elements and 1.39s for the reference version.  Need to chunk
it every 62k or so because refcount is a short.
2001-10-22 20:49:27 +00:00
Andrei Zmievski b31c3e04bc Fix-up. 2001-10-22 20:37:11 +00:00
Andrei Zmievski 27d63c5b8d Adding some docs for new parameter parsing API. They really should be more
fleshed out.
2001-10-22 20:28:57 +00:00
Andrei Zmievski 801cadc3b8 Remove redundant conversion. 2001-10-22 19:46:48 +00:00
Hartmut Holzgraefe a575980813 new-style parameter parsing 2001-10-22 19:36:46 +00:00
Andrei Zmievski adc9e9b587 Fix build. 2001-10-22 16:25:43 +00:00
Andrei Zmievski 4b5527ef2a Fix ZTS build. 2001-10-22 16:07:34 +00:00
Andrei Zmievski 1beb9b21e5 @- Added session_cache_expire() function. (patch from anuradha@gnu.org) 2001-10-22 15:18:06 +00:00
Jeroen van Wolffelaar 43f1b676bb .cvsignore now everywhere in ext/standard 2001-10-22 09:48:44 +00:00
Jeroen van Wolffelaar 43b3da1396 Make math tests pass, round & co don't work this way, and there was an error
in expected output
2001-10-22 09:44:27 +00:00
foobar 4c4c34aaeb Yet another missing .cvsignore file 2001-10-22 05:18:33 +00:00
foobar 035ffebe16 Missing .cvsignore files added. 2001-10-22 02:53:39 +00:00
foobar 8d8903b8d3 Use of deprecated stuff and having error_reporting(E_ALL) made the tests fail. 2001-10-22 02:53:08 +00:00
foobar db388374ed Deprecated style used 2001-10-22 02:49:34 +00:00
foobar f8b0353fec Added missing entry. 2001-10-22 02:38:19 +00:00
foobar 701b1a548e Fixed bug: #12617 2001-10-22 02:35:10 +00:00
foobar 4fdf886f5c Fixed bug: #12443 2001-10-22 02:28:00 +00:00
foobar 626c663b26 Missing .cvsignore file 2001-10-22 02:18:33 +00:00
24b033170f ChangeLog update 2001-10-22 00:11:40 +00:00
c24a1e3022 NEWS update 2001-10-22 00:11:36 +00:00
Rasmus Lerdorf 8064e685be Check if PCRE support is compiled in and only use the pcre functions if
it is.  Otherwise just set the realm to the safe mode user id if it isn't.
2001-10-21 17:41:15 +00:00
Sterling Hughes 2b8e0d43e9 MFB 2001-10-21 17:23:39 +00:00
Rasmus Lerdorf 4d60dbb9ef Oops, leftover crud 2001-10-21 07:45:32 +00:00
Rasmus Lerdorf 798ec79319 Motivated by bug #13607 I wrote up a simple array_init() function that
lets you quickly create an array and initialize each element to a certain
value.
@ Add array_init() function (Rasmus)
2001-10-21 07:42:35 +00:00
foobar 884cb737f0 missing entry 2001-10-21 03:02:40 +00:00
foobar 5db38caece Fixed bugs: #13251, #9827, #11363 2001-10-21 03:01:17 +00:00
cc0c2ea603 ChangeLog update 2001-10-21 00:12:45 +00:00
efd46d53b5 NEWS update 2001-10-21 00:12:40 +00:00
Rasmus Lerdorf 95dff71df7 This made no sense before. Hide Authorization in getallheaders() but
display it from phpinfo()?  Ouch!
@ Hide Authorization header from phpinfo() output in safe_mode (Rasmus)
2001-10-21 00:03:55 +00:00
Rasmus Lerdorf 02e25f0a1e # Butt-ugly looking code here, but I need regular expressions to do this.
Re-instated safe-mode realm mangling as it was in php 2 and 3 albeit
in a somewhat more robust way.
@ Re-instated safe-mode realm mangling (Rasmus)
2001-10-20 22:01:56 +00:00
Andrei Zmievski 3ead31449f MFHZ1 2001-10-20 13:55:47 +00:00
Andrei Zmievski 5c90e7a78f Fix warning, 2001-10-20 13:45:29 +00:00
Derick Rethans 6852a1e704 - Fix for bug #13413 2001-10-20 10:58:33 +00:00
fc05a725eb ChangeLog update 2001-10-20 00:10:16 +00:00
Andrei Zmievski 030e873758 convert to use new parameter parsing API. 2001-10-19 19:48:35 +00:00
Andrei Zmievski 1ed249ddbc Converting to use new parameter parsing API. 2001-10-19 19:21:58 +00:00
Egon Schmid 1f852425d1 Fixed other protos. 2001-10-19 19:21:28 +00:00
Jason Greene 86bd61aace Fix news entry 2001-10-19 18:45:33 +00:00
Egon Schmid 28575499df Fixed another proto. 2001-10-19 18:42:25 +00:00
Andrei Zmievski 65da5375ea Conver to use new parameter parsing API. 2001-10-19 18:26:30 +00:00
Edin Kadribasic c0efc001af Fixed last argument in strlcat() call. 2001-10-19 18:06:37 +00:00
Andrei Zmievski 8a54c2929f Convert to use new parameter parsing API. 2001-10-19 17:16:12 +00:00
Edin Kadribasic 86959aaf62 Changed strncpy=>strlcpy; strncat=>strlcat 2001-10-19 15:54:05 +00:00
7e1fb1c7b7 ChangeLog update 2001-10-19 00:09:58 +00:00
Frank M. Kromann 583b24b682 Reverting the last fix for ZTS and adding TSRMLS_FETCH() to make it work. 2001-10-18 19:24:51 +00:00
Frank M. Kromann d682cf90cf Adding include path for having curl header and libraries in php_build\curl 2001-10-18 17:47:35 +00:00
Frank M. Kromann d3dfc03108 Fixing ZTS build on win32 2001-10-18 17:46:57 +00:00
Sterling Hughes 454d13652e fix ws issue introduce in my use_trans_sid commit...
# still getting used to emacs
2001-10-18 09:12:39 +00:00
Sterling Hughes 009b5575fa fix formatting, this line really was too long ;) 2001-10-18 09:10:05 +00:00
Sterling Hughes 4c9c90eea2 force use of the session.use_trans_sid setting 2001-10-18 09:05:16 +00:00
Sebastian Bergmann 6c5d688dee Add php_overload.dll. 2001-10-18 08:53:08 +00:00
Sebastian Bergmann 7a2d291d50 Add ext/overload to modules workspace. 2001-10-18 08:49:37 +00:00
Harald Radi 73dbeb6f6f fixed wrong constant definition 2001-10-18 08:25:39 +00:00
Harald Radi b266763335 fix linkage error 2001-10-18 08:14:56 +00:00
d5478b94a6 ChangeLog update 2001-10-18 00:10:29 +00:00
fe72ba4684 NEWS update 2001-10-18 00:10:25 +00:00
Egon Schmid 8f4109e8cb Fixed some protos. 2001-10-17 18:52:33 +00:00
Frank M. Kromann 29c090934b Return a warning when fbsql_read_blob or fbsql_read_clob is called with an invalid handle 2001-10-17 18:36:32 +00:00
Andrei Zmievski a90e5f5a6b @- Fixed a bug in preg_replace() that would change the type of the replacement
@  array entries to string. (Andrei)
2001-10-17 18:20:19 +00:00
Harald Radi 67e663efbf rename com module entry 2001-10-17 12:50:44 +00:00
Harald Radi d5f1b1b60f rename module entry 2001-10-17 12:50:12 +00:00
Harald Radi c232516005 fixed unicode bug 2001-10-17 12:48:26 +00:00
Harald Radi db4021bc7c win32 project file 2001-10-17 00:57:12 +00:00
e8922acc53 ChangeLog update 2001-10-17 00:11:34 +00:00
Frank M. Kromann 2aefe30f18 Adding new functions to retreive LOB data.
fbsql_set_lob_mode() is used to switch from FBSQL_LOB_DIRECT to FBSQL_LOB_HANDLE

when LOBS are retreived as FBSQL_LOB_HANDLE the user must call fbsql_read_blob() or fbsql_read_clob() to get the data.
2001-10-16 23:08:38 +00:00
foobar d9c26ab299 fixed proto 2001-10-16 17:08:11 +00:00
c1872382ac ChangeLog update 2001-10-16 00:10:12 +00:00
Edin Kadribasic 96a04d4ab7 Fixed bug #13083 in http_fopen_wrapper.c which is now able to handle
non absolute redirects.
2001-10-15 23:30:40 +00:00
Andrei Zmievski 88d4de1da9 Adding user-space object overloading extension. 2001-10-15 20:32:56 +00:00
Sebastian Bergmann cb37652ca5 Bump version. 2001-10-15 20:18:02 +00:00
Stig Bakken b5e6cabb8e * bump version 2001-10-15 18:58:48 +00:00
Stig Bakken 0130405168 fix bug #13479 2001-10-15 18:36:43 +00:00
Frank M. Kromann dbe9e0bfc2 Fixing problem with indirect blobs 2001-10-15 17:33:14 +00:00
Stig Bakken d7acbbe2c3 * set PHP_EXTENSION_DIR to c:\php4 and change the default
PHP_INCLUDE_PATH to c:\php4\pear
2001-10-15 08:29:00 +00:00
Stig Bakken e638a3d354 * this line is from php-gtk. hum. 2001-10-15 08:20:03 +00:00
Stig Bakken 8d86cc6efe * fix Windows default include path 2001-10-15 05:47:07 +00:00
Stig Bakken c06ad9f9c0 * updated version numbers, moved extension version change to 4.1.0 2001-10-15 05:40:31 +00:00
a10c309e63 ChangeLog update 2001-10-15 00:10:52 +00:00
7bdfc6fbe8 NEWS update 2001-10-15 00:10:48 +00:00
Egon Schmid 8a5402c232 Fixed some spelling errors. 2001-10-14 09:24:37 +00:00
Markus Fischer 1a247ba1d8 Made error returning on missing extensions consistent across all backends 2001-10-14 01:23:07 +00:00
872da0aa0a ChangeLog update 2001-10-14 00:10:59 +00:00
Sascha Schumann a92fa9b2bc Either sizeof(struct stat) or sizeof f_stat, but not sizeof stat. 2001-10-13 23:43:49 +00:00
Adam Dickmeiss 7904bff7ad Fixed thread-safe compile. Thanks to Jani Taskinen. 2001-10-13 22:35:11 +00:00
foobar 7e88a009d2 Fixed bug: #13652 2001-10-13 15:06:14 +00:00
foobar 67b53c04eb This file is generated. 2001-10-13 14:55:51 +00:00
foobar eea391830a ws fix. 2001-10-13 13:12:30 +00:00
Martin Jansen 4d54d1919c * updated email adress 2001-10-13 09:32:34 +00:00
Adam Dickmeiss 6b934d9243 Fix backwards source compatibility. 2001-10-13 07:38:32 +00:00
Martin Jansen e9eb586106 * fixed problem with copyright header on some systems. 2001-10-13 06:22:09 +00:00
7a43e77e58 ChangeLog update 2001-10-13 00:10:43 +00:00
Martin Jansen d37016f26d * streamlined the copyright header
* changed path names in pear.bat to more typical values
# The GUI installer on Win32 installs PHP to c:\php by default, so we
# should make that the predefined value in the PEAR batch file.
2001-10-12 20:39:50 +00:00
Alexander Merz 8d66ae62e9 typo 2001-10-12 19:46:21 +00:00
Alexander Merz 262bcc637d win version of pear the pear script 2001-10-12 19:43:58 +00:00
Sterling Hughes cdc5600880 revert removal of zend_parse_parameters and properly use
zend_parse_parameters (ie zval * instead of zval **).
2001-10-12 19:16:39 +00:00
Sebastian Bergmann 01850714ee MFZE1: Introduced extension version numbers (Stig) 2001-10-12 18:40:30 +00:00
Sterling Hughes ce6dde342b fix segv's, zend_parse_parameters seems not to be able to handle
resources.

# emacs is cool
2001-10-12 15:07:05 +00:00
Stig Bakken 0cee8df65e * fix module struct in rest of sapi modules 2001-10-12 12:11:48 +00:00
Thies C. Arntzen 838a7a9566 make it work again 2001-10-12 07:50:52 +00:00
foobar de8ff3170e Fixed bug: #13556 2001-10-12 00:21:09 +00:00
8a06f6635e ChangeLog update 2001-10-12 00:10:35 +00:00
26a315308d NEWS update 2001-10-12 00:10:32 +00:00
Stig Bakken 689252082c * zend_module_entry change: apino, debug and zts are moved first,
see README.EXTENSIONS file for upgrade help.
@Introduced extension version numbers (Stig)
2001-10-11 23:33:59 +00:00
Stig Bakken 405142087c * replaced PEAR::phpVersionIs with version_compare 2001-10-11 22:11:34 +00:00
Stig Bakken b26fbe41b1 * version_compare() is included from 4.0.7 2001-10-11 10:46:29 +00:00
Stig Bakken 925ff7f2b2 * remove version_{lt,le,gt,ge,eq} functions, added a third optional
parameter to version_compare doing the same thing
2001-10-11 10:35:59 +00:00
Stig Bakken 1f40bd4cd9 * updated line numbers 2001-10-11 01:23:53 +00:00
Stig Bakken 3c98893a01 * make test pass 2001-10-11 00:41:15 +00:00
Mark L. Woodward bb5398c687 Allow msession to build without ext/session 2001-10-11 00:36:24 +00:00
1f3cd999e5 ChangeLog update 2001-10-11 00:12:00 +00:00
96a8cc1a44 NEWS update 2001-10-11 00:11:54 +00:00
Frank M. Kromann 8d88fb8bf3 Changed return value for BLOB/CLOB values to a string. and returning false if no handle is created. 2001-10-10 22:24:57 +00:00
Tomas V.V.Cox 692d30b7be fix a problem with the propagation of baseinstalldir and role 2001-10-10 18:42:23 +00:00
Sergey Kartashoff aa9098cd46 @- Make UDM_PARAM_ISPELL_PREFIXES work under mnogosearch-3.2.x (gluke)
- Make UDM_PARAM_ISPELL_PREFIXES work under mnogosearch-3.2.x (gluke)
2001-10-10 17:39:04 +00:00
Stig Bakken 99687096ca * fix default path in configure help text 2001-10-10 16:14:25 +00:00
Stig Bakken f0c30a0662 * added function entries for version_{lt,le,gt,ge,eq} 2001-10-10 10:32:16 +00:00
Stig Bakken f3d2d4c630 @Added version_{lt,le,gt,ge,eq} functions (Stig) 2001-10-10 10:14:51 +00:00
Frank M. Kromann ffd40bf495 Adding support for BLOB and CLOB 2001-10-10 00:42:00 +00:00
70a60c43ab ChangeLog update 2001-10-10 00:10:23 +00:00
91b3f7b570 NEWS update 2001-10-10 00:10:20 +00:00
Stig Venaas de894ef098 Added ldap_start_tls() function
@- Added ldap_start_tls() function (Stig Venaas, patch by kuenne@rentec.com)
2001-10-09 21:14:14 +00:00
Derick Rethans 27fb33e8b7 - More <br> to <br /> fixes 2001-10-09 19:19:21 +00:00
Sascha Schumann 49b44d537f Make the information available whether we are using HTTP/1.1 2001-10-09 15:15:55 +00:00
Rainer Schaaf 06111162cf added new configure option --with-pdflib3
Therefore --with-pdflib will only work with PDFlib 4.x from now on, if one wants
to build PHP with PDFlib V3.x he has to use the new option --with-pdflib3.

This makes configuration of PDFlib much easier, as no additional libraries
are needed anymore. This is possible, because PDFlib has built in libraries
for tiff/jpg/zlib since V4.
2001-10-09 12:24:44 +00:00
Derick Rethans e4ebe9f1ff - Changed <br> to - in PHP_INFO output. 2001-10-09 09:41:10 +00:00
Egon Schmid 251c275305 Fixed some protos. 2001-10-09 05:30:21 +00:00
Tomas V.V.Cox d557151ce7 more clean up/fixes 2001-10-09 02:56:33 +00:00
3bf9d3d82f ChangeLog update 2001-10-09 00:10:19 +00:00
08fe09e9d2 NEWS update 2001-10-09 00:10:16 +00:00
Frank M. Kromann 42cce22f2d use strdup to alloc memory refeed with free! 2001-10-08 22:24:59 +00:00
Frank M. Kromann 6e9e37be3a Oops. Removed too much code. 2001-10-08 22:21:16 +00:00
jim winstead a7bea2f140 handle dbase files with padded field headers. (patch from
Landon Bradshaw <landon@bradshaw.org>)
2001-10-08 21:52:26 +00:00
jim winstead 6fab353df1 handle 'I' field type, just another name for the 'N' field type (patch
from Landon Bradshaw <landon@bradshaw.org>)
2001-10-08 21:51:12 +00:00
Egon Schmid 116671a8fb Fixed some protos. 2001-10-08 18:39:42 +00:00
Tomas V.V.Cox 13682462c7 some clean up 2001-10-08 16:52:33 +00:00
Sergey Kartashoff 012840d145 @- Added support for word match mnogosearch-3.2 command and for stopfile
@  command. StopTable will not be supported by mnogosearch-3.2.x
- Added support for word match mnogosearch-3.2 command and for stopfile
  command. StopTable will not be supported by mnogosearch-3.2.x
2001-10-08 16:50:13 +00:00
Frank M. Kromann 3629062ab6 Fixing prototypes and removing unused code 2001-10-08 16:42:19 +00:00
Rainer Schaaf 6a0dce93af fixed PDF_get_value for parameters
- capheight
- ascender
- descender

had to ajust modifier by PDFLIB_FONT_OFFSET
2001-10-08 16:12:12 +00:00
Derick Rethans 009b8470eb - Fix for bug #13592 (Patch by Markus Fischer <mfischer@guru.josefine.at>) 2001-10-08 06:28:16 +00:00
Tomas V.V.Cox c7239f2b00 more work on Windows support 2001-10-08 06:12:13 +00:00
Tomas V.V.Cox 5f5bbfd3f3 added mkTempDir to create temporal directories 2001-10-08 06:10:54 +00:00
Tomas V.V.Cox fb487bc38d detect and report error 2001-10-08 03:31:14 +00:00
Tomas V.V.Cox 28f5a1e6e9 use Tar.php class and clean up some unused properties 2001-10-08 03:29:34 +00:00
60f7b32e4d ChangeLog update 2001-10-08 00:10:29 +00:00
ece41debc9 NEWS update 2001-10-08 00:10:25 +00:00
Tomas V.V.Cox 5b0e540882 work on Windows support (use Tar class and System class) 2001-10-07 20:16:41 +00:00
Tomas V.V.Cox b46e7d76b4 use the new System class for common file opperations 2001-10-07 20:14:11 +00:00
foobar 4cf3fd2752 make this entry readable. 2001-10-07 19:37:53 +00:00
Derick Rethans 62fb3d63c5 @- Added mmapfile(), read a file into a variabele with mmap (Ilia A, Derick)
- Added mmapfile(), read a file into a variabele with mmap (Patch by:
  Ilia A. <ilia@prohost.org>)
2001-10-07 18:34:44 +00:00
Jeroen van Wolffelaar 78b881f389 Fix naming inside php_search_array, comp_func is not a compare function. 2001-10-07 13:49:08 +00:00
Sterling Hughes f04497bab2 fix sp 2001-10-07 11:59:14 +00:00
Sterling Hughes 3a50a0322f @ Have rand() and mt_rand() seed automatically if srand() or mt_srand() has
@ not been called. (Sterling)
2001-10-07 11:52:09 +00:00
bf59a8db85 ChangeLog update 2001-10-07 00:10:03 +00:00
10ee55abf5 NEWS update 2001-10-07 00:10:00 +00:00
Stig Bakken 89bd184ea0 @Added version_compare() function (Stig) 2001-10-06 23:22:37 +00:00
Derick Rethans a0bbfb590c - <br> -> <br /> 2001-10-06 20:13:39 +00:00
Sterling Hughes af1c7070f7 fix execution order 2001-10-06 18:59:39 +00:00
Sterling Hughes 16da751e3b avoid TSRMLS_FETCH() 2001-10-06 18:55:09 +00:00
Sterling Hughes 1bceefb2da @ Don't through a file does not exist warning for the is_dir(), is_writeable(),
@ is_readable(), is_executable(), is_link() and is_file() functions. (Sterling)
2001-10-06 18:52:37 +00:00
Sascha Schumann 2965b8c1fc rand_mt.c, rand_sys.c are gone, remove them from the workspace file. 2001-10-06 18:02:23 +00:00
Edin Kadribasic 2ebefcf3b9 Made session test pass on systems with short open tags disabled. 2001-10-06 09:54:23 +00:00
Edin Kadribasic 26389258bb Made assert test pass on systems with short open tags disabled.
Added .cvsignore
2001-10-06 09:38:29 +00:00
Sebastian Bergmann 17ef8dba77 Fix Win32 build. 2001-10-06 06:05:36 +00:00
Rui Hirokawa 8b8d3d35c2 fixed name of global variables in ext/skelton. 2001-10-06 04:39:37 +00:00
f2fbed70fd ChangeLog update 2001-10-06 00:10:55 +00:00
f46dbef810 NEWS update 2001-10-06 00:10:52 +00:00
Stig Bakken 9ce638248d * prototype of version_compare, doesn't work yet 2001-10-05 23:56:19 +00:00
Jeroen van Wolffelaar a1c2b86701 Fix the pow-test, it now succeeds on my machine 2001-10-05 23:37:08 +00:00
Stig Bakken 91880600c7 cvsignore file 2001-10-05 22:25:33 +00:00
Jeroen van Wolffelaar 5541451085 Add test for array_search and in_array
(should be expanded though)
2001-10-05 22:01:04 +00:00
Jeroen van Wolffelaar 62feefddc7 Fix array_search and in_array. Now binary safe, and faster (returns when
found, and doesn't duplicate the key each time, but only when necessary)

Patch also by Edin Kadribasic
2001-10-05 21:58:41 +00:00
Jeroen van Wolffelaar 89ea50a588 Fix bug 13567 and don't depend on a boolean int-value to be either 1 or 0 2001-10-05 20:14:33 +00:00
Edin Kadribasic e78b61542d Added array_change_key_case() function that returns array with
with all string keys lowercased or uppercased
@- Added array_change_key_case() function that returns array with
@  with all string keys lowercased or uppercased (EdinK)
2001-10-05 18:38:53 +00:00
Daniel Beulshausen 1ac3aa7e08 nuke unnecessary force-by-ref declarations + name the needed in a proper way 2001-10-05 15:56:42 +00:00
Tomas V.V.Cox 20505d8483 added tests for PHP version comparing functions 2001-10-05 13:02:08 +00:00
Tomas V.V.Cox b244f61139 changed the logic of version comparation 2001-10-05 12:46:21 +00:00
Sascha Schumann 0c79e85ede fix declaration 2001-10-05 12:22:12 +00:00
Sterling Hughes 1c7e920a9e make this work under OSX 2001-10-05 07:12:27 +00:00
Tomas V.V.Cox 1f470ecca6 E_ALL fixes 2001-10-05 01:32:13 +00:00
Tomas V.V.Cox 0ebee4d29f get rid of the RC part of php versions 2001-10-05 00:28:36 +00:00
98a8ea2203 ChangeLog update 2001-10-05 00:11:33 +00:00
Daniel Beulshausen a58e996039 fix gd2 preprocessor definitions 2001-10-04 20:21:19 +00:00
Daniel Beulshausen 1fa1b9a60c undo last changes 2001-10-04 20:19:46 +00:00
Daniel Beulshausen c4ee7a403e fix macro 2001-10-04 20:14:17 +00:00
Daniel Beulshausen 377d88cec0 use maxpathlen instead of path_max 2001-10-04 20:10:58 +00:00
Tomas V.V.Cox 0786889de0 added method phpVersionIs() to find if a PHP version is minor, greater
or both (see in-line doc for more info)
2001-10-04 19:05:09 +00:00
Harald Radi 27744e892a no message 2001-10-04 18:24:44 +00:00
Derick Rethans 744d1fc1ea - 'Fix' for bug #13543 2001-10-04 15:25:39 +00:00
Sebastian Bergmann 43c7615c51 MFZE1 2001-10-04 14:18:52 +00:00
Sascha Schumann ee63d3400a update 2001-10-04 09:31:11 +00:00
Jon Parise c6bed4ce3d Search for the '@' symbol in the DSN from the right instead of the left.
That will allow the password element to include a '@' symbol without
confusing the DSN parser.

Submitted by: Alex L <admin@networkessence.net>
2001-10-04 00:29:37 +00:00
d452cf054e ChangeLog update 2001-10-04 00:10:38 +00:00
Stanislav Malyshev 73b5401fc9 Fix typo - comment is ; not ' 2001-10-03 11:35:51 +00:00
Jason Greene dc7d5df048 Add cleanup on an exec failure
Remove debug comments
2001-10-03 03:48:27 +00:00
4039c24ad5 ChangeLog update 2001-10-03 00:10:10 +00:00
Sascha Schumann 3db3d65d2e typo fix by zoot@zotikos.com 2001-10-02 14:54:46 +00:00
Andrei Zmievski 56e6d6ae77 Fix. 2001-10-02 13:57:29 +00:00
3e91f4fadc ChangeLog update 2001-10-02 00:11:54 +00:00
3c6bf08a47 NEWS update 2001-10-02 00:11:50 +00:00
Sascha Schumann 4eb7611155 @$(mkinstalldirs) $(INSTALL_ROOT)$(bindir)
may fail.
2001-10-01 21:03:05 +00:00
Mark L. Woodward 758b775d34 Removed PHOENIX_INCLUDE, I don't need it to compile and it seems like
it causes a conflict with ext/mhash. (Phoenix has a file called mhash.h
and that is being found when mhash is being built.)
2001-10-01 11:04:56 +00:00
bd15cd8ef9 ChangeLog update 2001-10-01 00:12:07 +00:00
a9bae61ca3 NEWS update 2001-10-01 00:12:02 +00:00
Sascha Schumann 6db3f409d8 Add QUERY_STRING, HTTP_HOST, HTTP_ACCEPT_LANGUAGE to the script
environment.

Also support setting the INI path from the outside.
2001-09-30 18:23:28 +00:00
Andi Gutmans 2eabb14dc7 - Merge the NAMESPACES_BRANCH. It wasn't a good idea to have a branch when
- the whole CVS tree is work in progress
2001-09-30 17:29:55 +00:00
Jon Parise 516b8bc723 Ignore generated files. 2001-09-30 16:20:05 +00:00
Jon Parise 362140868d Allow the location of the Phoenix library to be specified on the configure
commandline.
2001-09-30 16:13:52 +00:00
Stig Venaas b055912861 Didn't compile, replaced some TSRMLS_C with TSRMLS_CC 2001-09-30 13:30:18 +00:00
Jason Greene 8a705b8cd9 @Added new function pcntl_exec, which behaves similar to execve. 2001-09-30 06:59:12 +00:00
Rasmus Lerdorf 94d789e5d7 I could have sworn I test compiled this when I committed it a couple of
days ago.  Must have been hallucinating.
2001-09-30 04:42:08 +00:00
d21db564a3 ChangeLog update 2001-09-30 00:09:40 +00:00
147ae17bad NEWS update 2001-09-30 00:09:37 +00:00
Sergey Kartashoff bf3de43044 Search frontend example has been updated. 2001-09-29 14:09:42 +00:00
Sergey Kartashoff 2d91428732 @- initial support of mnogosearch-3.2.x has been added. Not all features
@  are implemented currently.
- initial support of mnogosearch-3.2.x has been added. Not all features
  are implemented currently.
2001-09-29 13:58:18 +00:00
Sergey Kartashoff 9edfe2e4d3 # fixed typo 2001-09-29 09:25:22 +00:00
Rui Hirokawa 69ae8f1903 ming-0.2a needs rint() in libm. 2001-09-29 08:15:39 +00:00
Mark L. Woodward c4c4626551 Doh! Return nothing when there is nothing back from a plugin 2001-09-29 00:53:07 +00:00
Tomas V.V.Cox e3e28c8f59 extract only the package.xml file instead of all files 2001-09-29 00:38:24 +00:00
cf1e1e0ddd ChangeLog update 2001-09-29 00:09:47 +00:00
Mark L. Woodward 38f3435f06 Added msession_set_array and msession_plugin 2001-09-28 12:41:06 +00:00
Tomas V.V.Cox 15ac0567f9 implemented infoFromTgzFile() 2001-09-28 00:55:16 +00:00
cb9991d9db ChangeLog update 2001-09-28 00:10:13 +00:00
ffd256654d NEWS update 2001-09-28 00:10:10 +00:00
Tomas V.V.Cox 73b5ff0389 tab vs ws 2001-09-27 23:59:16 +00:00
Tomas V.V.Cox 95d19651f3 don't want "-" in package names 2001-09-27 23:31:15 +00:00
Jeroen van Wolffelaar f512ec4331 Typo 2001-09-27 20:07:16 +00:00
Jeroen van Wolffelaar eb38ca844b Undo Z_ subst for sapi and ext/yaz 2001-09-27 20:01:23 +00:00
Jeroen van Wolffelaar 6d9c04e823 Undo Z_ subst 2001-09-27 19:43:06 +00:00
David Eriksson 6f7cf88a98 Patch from Sander Steffann <sander@steffann.nl> to prevent crash. 2001-09-27 12:28:10 +00:00
Andi Gutmans 279b468bf7 - Bump it up in the right place 2001-09-27 08:08:33 +00:00
Rasmus Lerdorf c8280238de Fix segfault and check for truecolor image in ImageColorAt
@- Fix segfault and check for truecolor image in ImageColorAt (Rasmus)
2001-09-27 07:36:34 +00:00
Derick Rethans be52d66f4b - Fix crashbug in php_chunk_split() 2001-09-27 06:55:23 +00:00
Dan Libby 061cd20400 include php_compat.h, so that we use php_XML_* if necessary. Better to do it in expat.h, so that other libs, eg xmlrpc, inherit this behavior and we can link 2001-09-27 00:29:34 +00:00
Zeev Suraski 7e42c73a50 Another leak bites the dust? 2001-09-27 00:21:21 +00:00
ba670f561e ChangeLog update 2001-09-27 00:11:04 +00:00
5fb05df977 NEWS update 2001-09-27 00:11:01 +00:00
Harald Radi d1199bd2c7 fixed Z_* conversion errors 2001-09-26 22:52:17 +00:00
Jeroen van Wolffelaar 39e47f5a98 Revert macro-subst, because wasn't necessary here, and those who were
substitued weren't zvals
2001-09-26 22:24:44 +00:00
Zeev Suraski 99a71e4418 More accurate NEWS entry 2001-09-26 21:46:04 +00:00
Zeev Suraski dd01c11ee3 Fix pg_last_notice() 2001-09-26 21:44:48 +00:00
Derick Rethans 51e2a6b84e - nl2br now handles different styles of line endings in one string. (Patch
by Boian Bonev <boian@bonev.com>)
@- nl2br now handles all styles of line-endings in one string. (Boian,
@  Derick)
2001-09-26 19:34:46 +00:00
Derick Rethans 5a34b26972 - This patch adds proper header file detection on system which
simultaneously isntallied libxml1 and libxml2 (eg. Debian) (patch by
  Markus Fischer <mfischer@php.net>)
2001-09-26 19:02:33 +00:00
Sascha Schumann bfef93878c Force proper alignment of php_sockaddr_storage. Sparc will throw
a SIGBUS, when accessing the family part of a char-aligned structure.
2001-09-26 15:12:20 +00:00
Derick Rethans 9d4c81e925 - whitespace fix 2001-09-26 12:44:34 +00:00
Derick Rethans 6b0196b652 - Fixed error introduced by the macro substitution 2001-09-26 12:34:30 +00:00
David Eriksson 9a4500d056 Fixed Jeroen's macrofication 2001-09-26 11:09:10 +00:00
David Eriksson e1c448e8be leave on first directory 2001-09-26 10:45:22 +00:00
Jeroen van Wolffelaar 0916fd50c0 5th and probably/hopefully last run of conv_z_macros 2001-09-26 09:21:58 +00:00
Jeroen van Wolffelaar d85b39e532 Typo 2001-09-26 09:11:49 +00:00
Jeroen van Wolffelaar 23a942c795 Fix build 2001-09-26 09:09:40 +00:00
Jeroen van Wolffelaar 0729948990 Parse-fix 2001-09-26 09:00:30 +00:00
Jeroen van Wolffelaar 6a8a5767c2 4rd run... now also var.Z_* 2001-09-26 08:53:37 +00:00
Jeroen van Wolffelaar 6693d112d2 Fix the fix 2001-09-26 08:51:53 +00:00
Jeroen van Wolffelaar 8ec9e5bca0 Fix parse-error 2001-09-26 08:41:05 +00:00
Jeroen van Wolffelaar 21f2b9277f 3rd run in back-substitutin Z_* macro's. The val->Z_ cases are all solved now. 2001-09-26 08:35:48 +00:00
Jeroen van Wolffelaar b0468809ff Now fixes virtually everything.
Sorry, but I assumed that the original script was correct. Unfortunately, that
wasn't the case.
2001-09-26 08:32:55 +00:00
Derick Rethans cdae7d9b7c - Fix NEWS 2001-09-26 07:59:04 +00:00
Jeroen van Wolffelaar f9d71bc3fb And now correctly... and up until 3 levels 2001-09-26 07:58:32 +00:00
Jeroen van Wolffelaar fe000a7391 This fixes most var->Z_* problems 2001-09-26 07:55:13 +00:00
Frank M. Kromann b77c39ea65 Fixing Win32 build...after the last macro convertions. 2001-09-26 03:43:34 +00:00
Frank M. Kromann 448e9d49cc Fixing Win32 build... 2001-09-26 03:24:19 +00:00
deb81174b0 ChangeLog update 2001-09-26 00:10:05 +00:00
Harald Radi 23c65b60a0 no message 2001-09-25 23:39:50 +00:00
Jeroen van Wolffelaar 6cfba2a3ea 2nd phase in back-substitution those macro's
I've got pretty much everything now...
2001-09-25 22:49:04 +00:00
Jeroen van Wolffelaar 0ddd124d1d Should've used my own script... 3rd try. 2001-09-25 22:34:57 +00:00
Jeroen van Wolffelaar c033288573 Back-substitute for Z_* macro's. If it breaks some extension (the script isn't optimal, it parses for example var->zval.value incorrect) please let me know. 2001-09-25 21:58:48 +00:00
Daniel Beulshausen 158d34c9a5 fix release_ts_dbg libpath 2001-09-25 17:16:27 +00:00
Daniel Beulshausen e014d58e46 nuke VARIANT module 2001-09-25 17:08:02 +00:00
Jeroen van Wolffelaar eb9390771c Just in case... 2001-09-25 16:06:39 +00:00
Jeroen van Wolffelaar ab0acab993 Enhance to also process objects, and be more verbose 2001-09-25 15:57:58 +00:00
Mark L. Woodward ad2113e635 Added REQ_RANDSTR to support msession_randstr 2001-09-25 12:21:45 +00:00
Mark L. Woodward 622fe4d488 Changed config.m4 to a better default, updated README. 2001-09-25 12:12:48 +00:00
Mark L. Woodward 32b196e4f7 Added msession_randstr, creates a random string from a single
source.
2001-09-25 12:11:25 +00:00
Sterling Hughes bb2d4e3126 add a 7.9 version check 2001-09-25 07:07:22 +00:00
d05661abd2 ChangeLog update 2001-09-25 00:10:25 +00:00
Sterling Hughes 2e79759f50 fix constant 2001-09-24 18:45:08 +00:00
Harald Radi a491db4e2d removed VARIANT module and put the VARIANT class into
the COM module.
also fixed a few bugs.
2001-09-24 15:56:18 +00:00
Derick Rethans f1ce7daccd - Fix crash bug (patch by <chocolateboy@lunomail.com>) 2001-09-24 08:33:51 +00:00
f3b1bc8bc2 ChangeLog update 2001-09-24 00:09:58 +00:00
Andi Gutmans 315c894da8 - Commit fix for bug #11998 by Ralf Bolte <r.bolte@gmx.net> 2001-09-23 19:17:44 +00:00
Jeroen van Wolffelaar f61dfce39c Make chop the alias and rtrim the main function, in order to get automagically
generated alias-listings correct.
2001-09-23 18:32:46 +00:00
Derick Rethans db1fe4b060 - Don't return from the function, so that mcrypt get properly initialized
(fix for bug #13399)
2001-09-23 14:39:08 +00:00
Derick Rethans 9c610ae87f - Added mcrypt_generic_deinit and added a warning about mcrypt_generic_end
being deprecated.
- Reordened constants, and added MCRYPT_3DES to the 2.4 set of constants
2001-09-23 14:14:27 +00:00
Rui Hirokawa 1b78716661 mbstring is no more in experimental status. 2001-09-23 13:42:00 +00:00
524b089127 ChangeLog update 2001-09-23 00:09:59 +00:00
1eda5996cc NEWS update 2001-09-23 00:09:55 +00:00
foobar f78cf8ee67 Moved the check for mcrypt_generic_deinit to the right place. 2001-09-22 17:55:16 +00:00
foobar 6bcd0ae557 Check if mcrypt lib has mcrypt_generic_deinit 2001-09-22 17:51:07 +00:00
Sebastian Bergmann 76ccb015e8 Keep ZEND_CHANGES up-to-date. 2001-09-22 17:03:05 +00:00
Sterling Hughes 958675c067 fix compile 2001-09-22 16:56:21 +00:00
Zeev Suraski e42ab2c95f MFZE1 2001-09-22 14:03:27 +00:00
Rasmus Lerdorf 1df380da5a new apache_setenv()
@- add apache_setenv() function for injecting variables into Apache's
@  subprocess_env table.
2001-09-22 10:11:53 +00:00
foobar b46354b7bc removed autogenerated file from cvs 2001-09-22 01:59:24 +00:00
Jeroen van Wolffelaar 929ae94c64 Let settype also accept 'int', 'bool', 'float' and 'null'
@Let settype also accept 'int', 'bool', 'float' and 'null' (Jeroen)
2001-09-22 01:39:14 +00:00
Sterling Hughes f8e78a00f2 update to curl 7.9 (when it comes out :)
make REGISTER_CURL_CONSTANT() only take one argument
couple of speed-up's
few style fixes
2001-09-22 00:38:59 +00:00
0002bae3bf ChangeLog update 2001-09-22 00:12:16 +00:00
Zeev Suraski 17352812a3 MFZE1 2001-09-22 00:09:24 +00:00
Hartmut Holzgraefe 03f7406711 proto fixes "double" -> "float" 2001-09-21 21:59:27 +00:00
Hartmut Holzgraefe 8f01638bf6 local resource fix 2001-09-21 21:57:41 +00:00
Hartmut Holzgraefe 2c275bf793 renamed doubleval to floatval and made doubleval an alias to floatval
made is_float the function entry and is_double the alias
2001-09-21 21:29:14 +00:00
Sascha Schumann 4582d38519 Fix warning on Win32 (thanks to Sebastian) 2001-09-21 17:21:50 +00:00
Sascha Schumann 0a8677167d don't use boyer_str_to_str. It is experimental 2001-09-21 16:17:14 +00:00
Sascha Schumann 9002e37e4e Always seed the LCG from the request-init hook, otherwise the seed
would be shared among the threads which is quite pointless.  Also
use a function of the current time as one factor.

Use gettimeofday() instead of time(), because it is faster on some
operating systems.
2001-09-21 13:38:44 +00:00
Sascha Schumann 78fb121a61 indentation fix 2001-09-21 13:13:10 +00:00
b08e6310fb ChangeLog update 2001-09-21 00:10:28 +00:00
Andi Gutmans d58240d0f5 - Nuke unused enum 2001-09-20 15:50:11 +00:00
Mark L. Woodward d1a1ef3d9b (Removed Makefile, added accidentally.)
Eliminated mod_msession in ext/session, and moved that code into msesion.c
2001-09-20 12:21:01 +00:00
Sascha Schumann f45555e62f Rework some string-to-number and vice-versa functions to work smarter
(e.g. without using functions that use slow locales, without allocating
 extra memory and with fewer integer/float operations)
2001-09-20 08:22:44 +00:00
a16eadb1ef ChangeLog update 2001-09-20 00:10:58 +00:00
6320f1aa3e NEWS update 2001-09-20 00:10:54 +00:00
Zeev Suraski 483fc4c73a MFZE1 2001-09-19 22:34:11 +00:00
Stig Venaas 7d2a912335 Not using _free_ldap_result destructor for le_result_entry, leads to
crashes due to freeing same memory several times in some cases
2001-09-19 19:43:59 +00:00
Andy Sautins 810dd37b90 Collections core-dump fix. ocicollgetelem was using OCIInd instead
of OCIInd * in call to OCICollGetElem
2001-09-19 19:25:43 +00:00
Stig Venaas 926d1506e0 Added IPv6 support to gethostbyaddr()
@- Added IPv6 support to gethostbyaddr()
@  (Patch by Matthias Wimmer <matthias@charente.de> and venaas)
2001-09-19 18:08:15 +00:00
Frank M. Kromann a46c6157de Fixing debug build on Win32 2001-09-19 17:48:34 +00:00
Hartmut Holzgraefe cc17f92947 argument count fix plus beginning local query support 2001-09-19 17:14:14 +00:00
Mark L. Woodward 49c66ea47e The extension should not be GPL. 2001-09-19 15:46:20 +00:00
Wez Furlong ad72c064bc doh\! 2001-09-19 15:12:30 +00:00
Mark L. Woodward ba2bc65d31 Added 2001-09-19 13:14:24 +00:00
Sascha Schumann e261d310a0 quickly fix newly introdued off-by-one 2001-09-19 11:03:58 +00:00
Wez Furlong c6a957e012 Fix silly bugs 2001-09-19 10:59:12 +00:00
Sascha Schumann e4ace6cde6 Rewrite _php_match_basetozval to need only one multiplication
per iteration and avoid the U?LONG_MAX hassle.
2001-09-19 10:57:50 +00:00
Andi Gutmans 88d408ee11 - MFZE1 2001-09-19 10:41:35 +00:00
Sebastian Bergmann 3bdddb4910 MFZE1 2001-09-19 10:25:04 +00:00
Sebastian Bergmann da5a79d185 MFZE1 2001-09-19 10:06:09 +00:00
Sascha Schumann ed50e0e155 Fix indentation of ./configure --help 2001-09-19 09:17:56 +00:00
Sascha Schumann 0215031834 Kill unnecessary quoting, and set host_alias to host, if only the latter
is defined.
2001-09-19 09:01:05 +00:00
Sascha Schumann 91985677a6 add missing dependency 2001-09-19 08:56:58 +00:00
Joey Smith 0098833e86 Don't manually register the resource, let php_domobject_new do it for us.
This fixes and elusive SIGSEGV.
Bug id'd and fixed by Ivo Hulinsky <huld@fido.cz>.

This fixes #13322.
2001-09-19 02:24:05 +00:00
1a92100ce1 ChangeLog update 2001-09-19 00:10:08 +00:00
Frank M. Kromann 975ebe3524 Fixing win32 debug build 2001-09-18 23:39:25 +00:00
Hartmut Holzgraefe d330072db9 argument count fix 2001-09-18 20:42:37 +00:00
Sterling Hughes 563c0670e5 another attempt at fixing compile warnings... 2001-09-18 20:05:05 +00:00
Sterling Hughes 8092460830 hopefully fix win32 compile warnings
# I really wish i had a box to compile php with win32 on
2001-09-18 05:48:49 +00:00
c3edc73ecc ChangeLog update 2001-09-18 00:10:02 +00:00
Hartmut Holzgraefe 30df2b3073 yet another ncurses 4.x fix 2001-09-17 22:11:55 +00:00
Hartmut Holzgraefe 38ab8708f2 editor hints added 2001-09-17 22:00:38 +00:00
Hartmut Holzgraefe 2f59bb576d whitespace 2001-09-17 21:59:15 +00:00
Hartmut Holzgraefe bc631cce3e some keyboard constants 2001-09-17 21:57:09 +00:00
Hartmut Holzgraefe a965a1759f some more function implementations 2001-09-17 21:54:25 +00:00
Sterling Hughes bcb426a207 Merge in qsort changes 2001-09-17 21:02:53 +00:00
David Benson d6cecfc213 Change duration of temporary lobs to avoid leakage of temporary lob
space (dbenson).
2001-09-17 20:52:31 +00:00
Hartmut Holzgraefe 0edb79a3d4 some proto fixes (not all done yet) 2001-09-17 19:55:22 +00:00
Hartmut Holzgraefe 75095ce66c got rid of strtok and added some comments 2001-09-17 19:49:17 +00:00
Hartmut Holzgraefe 891443e15f will now configure out functions not available in ncurses 4.2 2001-09-17 16:24:11 +00:00
Brian Moon b285fae0bc adding RFC for loose type requirements for functions 2001-09-17 16:01:20 +00:00
Daniel Beulshausen 60812553d4 fix macros 2001-09-17 13:37:11 +00:00
Daniel Beulshausen 75aa3cfc51 fix fcntl 2001-09-17 13:21:10 +00:00
Hartmut Holzgraefe 311fe215aa fixed a warning regarding incompatible function pointer types 2001-09-17 13:02:26 +00:00
Daniel Beulshausen 3a386f8684 fix macro + nuke warning 2001-09-17 12:22:35 +00:00
30042dc883 ChangeLog update 2001-09-17 00:10:09 +00:00
4f6c17b4f5 NEWS update 2001-09-17 00:10:05 +00:00
Andy Sautins 16ef3439f4 Collection fix. getelem method now handles returning nulls
correctly and gives warning when accessing an index that does
not exist.
2001-09-16 21:53:58 +00:00
Sterling Hughes 97fea0931c Make rand thread safe when ZTS is defined. 2001-09-16 20:49:57 +00:00
Sterling Hughes 96763e8372 Hopefully fix compile warnings on win32 systems 2001-09-16 17:37:19 +00:00
Zeev Suraski f88c25b60e MFZE1 2001-09-16 16:48:38 +00:00
Andi Gutmans 11e733ce29 - Start giving the notes extension an indentation face lift but I got
- tried half way through :)
2001-09-16 16:23:58 +00:00
Sascha Schumann 7c161fe069 WS-fix and directly use ap_psprintf instead of sprintf/ap_pstrdup 2001-09-16 16:03:49 +00:00
Thies C. Arntzen 9938137725 fixed memory_peak resetting 2001-09-16 15:45:25 +00:00
Hartmut Holzgraefe 639a36a3dd compiles without warnings now 2001-09-16 15:18:03 +00:00
Sterling Hughes 47f3851a00 for the daft folks that think 0 is a good seed. 2001-09-16 03:50:04 +00:00
Sterling Hughes 373fc12bb1 @ Make the seed options to srand() and mt_srand() optional, if the seed is
@ not specified, the generate the most random seed possible. (Sterling)

Please, if anyone has any comments on the way I generate this seed, speak up!
This seems to be the most "random" seed I could come up with...

This commit is 100% backwards compatible :)

Add myself to the authors list cause of recent work on the file
2001-09-16 03:46:59 +00:00
d477d490b2 ChangeLog update 2001-09-16 00:10:12 +00:00
8828af0bd5 NEWS update 2001-09-16 00:10:09 +00:00
Sterling Hughes ca5fdbf537 fix this in a couple of other places and use estrndup() when we have the
string length.
2001-09-15 16:05:38 +00:00
Sterling Hughes 236bcdb514 properly grab field and value pairs, plus avoid a segfault when errmsg isn't
defined
2001-09-15 16:00:47 +00:00
Sergey Kartashoff 55d84825c1 A bug fixed when trying to return NULL strings.
Added a new example of building search frontend based on mnoGoSearch
extension.
@- A bug fixed when tryint to return NULL strings.
@  Added a new example of building search frontend based on mnoGoSearch
@  extension.
2001-09-15 12:20:37 +00:00
Rui Hirokawa 9c5580c7d4 Added support for japanese encoding to htmlentites() and htmlspecialchars(). @ Added support for japanese encoding to htmlentites() and htmlspecialchars(). (Rui) 2001-09-15 04:48:48 +00:00
7c6b7baac9 ChangeLog update 2001-09-15 00:09:56 +00:00
7343b4da7a ChangeLog update 2001-09-14 00:09:58 +00:00
Hartmut Holzgraefe c403d6846b more data types supported (and warn if unsupported encountered) 2001-09-13 19:52:57 +00:00
Thies C. Arntzen e929389eeb fix strtr() when called with two parameters. this has been broken for some time!
guys, when "optimizing" functions you _shoudl_ write a testcase for the
working function and make _sure_ that it works afterwards!
2001-09-13 10:48:41 +00:00
567f6c7a27 ChangeLog update 2001-09-13 00:11:26 +00:00
Hartmut Holzgraefe d4bee942d6 be more flexible in finding a db++ installation 2001-09-12 19:54:46 +00:00
foobar 5275b60398 Enable chroot() only if SAPI is CGI. 2001-09-12 02:07:46 +00:00
8d88df3437 ChangeLog update 2001-09-12 00:09:59 +00:00
Andy Sautins 6e4e8e94d9 oops. Used C++ style comments. Make C style 2001-09-11 23:16:32 +00:00
Andy Sautins 5abba5ee0e Collection fix. Fix core dump when accessing an element that is
not in the collection.
2001-09-11 23:15:18 +00:00
Andy Sautins 23fea6461d Handle assign/append of NULL values to collections correctly. Now
works consistently with how the rest of the library operates.  If
the value passed in is a null string, the value is set to null
2001-09-11 21:03:58 +00:00
Sascha Schumann 919e7e9f69 revert last commit. Guys, discuss such things first, then commit. Mkay? 2001-09-11 10:16:01 +00:00
Sterling Hughes e302d6a5e8 Add an API function for setting the session id from a session module...
# The SRM folks wanted/needed this
2001-09-11 10:13:44 +00:00
Sascha Schumann fdd6f08aec Always return something from non-void function 2001-09-11 08:55:44 +00:00
Sascha Schumann 4c69a970d3 Remove some unused variables 2001-09-11 07:52:55 +00:00
Sascha Schumann f037e5b2da Similar to autoconf-2.5x, say who is doing what. 2001-09-11 07:50:53 +00:00
Sascha Schumann a7d71f9708 Ignore "AC_PROG_LEX invoked multiple times" 2001-09-11 07:47:31 +00:00
Sascha Schumann b14cb5c3ff Remove obselete message and drop "divert(6)" which caused
problems with autoconf 2.5x.
2001-09-11 07:30:45 +00:00
Egon Schmid 88713e4d8d Fixed some protos. Haven't read the source code, so some protos could be wrong. bool notext=true looks very strange to me. 2001-09-11 01:03:59 +00:00
Wez Furlong 671b46a0db Revise the xxx_export api so that exporting to files is comfortable. 2001-09-11 00:33:25 +00:00
e8f195c427 ChangeLog update 2001-09-11 00:10:19 +00:00
Wez Furlong 0f835fdf28 Arrrgghh!
Fix munched file.
# Dunno how that happened.
2001-09-11 00:03:58 +00:00
Wez Furlong 3b8f3cc439 Added some preliminary x509 cert and csr creation/signing functions.
Also, some problems with CGI initialization should be eliminated.
Renamed some pkey functions to be more consistent.
# Added aliases for older names; not sure if we should keep those.
2001-09-10 23:57:10 +00:00
foobar 8f9813031e fix build. 2001-09-10 23:34:42 +00:00
Daniel Beulshausen 1f9629d466 fix resource destruction 2001-09-10 19:28:50 +00:00
Sascha Schumann 2547f86060 Use $(LINK) for libraries, but $(LINK_CLEAN) for creating programs.
Also pass only $(CFLAGS_CLEAN) into thttpd's Makefile.
2001-09-10 17:15:03 +00:00
Derick Rethans a4f9a16225 - Fix for bug #13230 2001-09-10 17:14:38 +00:00
Sascha Schumann 2ee197b4c6 Fix a problem when withval pointed to a symlink and automatic
detection for the java libraries failed
2001-09-10 16:59:31 +00:00
Daniel Beulshausen 87d7284e46 don't forget TSRMLS_CC when using zend_parse_parameters 2001-09-10 14:30:10 +00:00
Daniel Beulshausen d504c7ca4f let apache2 filter build under win32 2001-09-10 13:04:24 +00:00
Sascha Schumann 2bbbec107b A round of "d'ohs" for me, please.
We must not stop scanning after finding a "?", because we
need the information regarding the "#".
2001-09-10 11:22:43 +00:00
Sascha Schumann d5e22e2a29 Use proper macro to return string with unknown length 2001-09-10 11:06:15 +00:00
Harald Radi 21b9a2ca2a removed ->is_ref check, doesn't make sense and causes bugs 2001-09-10 09:25:32 +00:00
Harald Radi d1a2dbfd9d IDispatchs got released if they were passed to another component 2001-09-10 09:22:40 +00:00
Stig Bakken 3b52256bd1 .cvsignore 2001-09-10 08:02:38 +00:00
Stig Bakken 4d90ca0aea * build fix 2001-09-10 07:56:23 +00:00
Sterling Hughes 2e890a36d4 Revert, this is max error size, not strlen(error) 2001-09-10 00:25:59 +00:00
Sterling Hughes 5830ffeb48 RETURN_STRING -> RETURN_STRINGL 2001-09-10 00:24:29 +00:00
7a03473347 ChangeLog update 2001-09-10 00:10:25 +00:00
Zeev Suraski 9f61e47c24 MFZE1 (nuke cplusplus code) 2001-09-10 00:08:24 +00:00
Zeev Suraski b06440bceb MFZE1 (support return value in execute_scripts) 2001-09-10 00:07:32 +00:00
Zeev Suraski 517bd3018c Do some justice to the doc team 2001-09-09 23:37:55 +00:00
Sascha Schumann de963ce9c6 Better fix for mark problem 2001-09-09 14:52:39 +00:00
Sascha Schumann c86c9f52b4 Fix mark-handling 2001-09-09 14:38:12 +00:00
Derick Rethans 78747bd2df - Don't wrap lines... this is annoying while coding. 2001-09-09 13:29:31 +00:00
Derick Rethans 61d4f7fe65 - Really fix nl2br now... it's actaulyl faster now 2001-09-09 12:55:48 +00:00
Derick Rethans 176cd90bd7 - Fix for bug 11904
#- This is possibly not the best solution... feel free to improve
2001-09-09 11:42:36 +00:00
Sterling Hughes ff2bc83c08 remove ARG_COUNT(ht)
# Is there any reason that the set_compare_func call is passed SORT_STRING
# instead of SORT_REGULAR??
2001-09-09 11:03:31 +00:00
Sterling Hughes 6963ac4050 export the mt rand functions... 2001-09-09 10:44:12 +00:00
Derick Rethans eede70a84f - Removed duplicate FETCH() 2001-09-09 10:42:52 +00:00
Sterling Hughes 71dca8c23e add DOMXML news 2001-09-09 10:06:31 +00:00
Sterling Hughes b5d77099fe have this go through php's error warning system 2001-09-09 09:58:49 +00:00
Sterling Hughes 6ee9f04f87 ws fix, MFB 2001-09-09 09:51:02 +00:00
Sterling Hughes 645a98ef99 Change DOM-XML's error reporting to E_WARNING which is more appropriate 2001-09-09 09:41:40 +00:00
fd07b94b0f ChangeLog update 2001-09-09 00:11:33 +00:00
Harald Radi 9a6fe9631e com_*() functions returned an oo-resource instead of an resource id,
thus subsequent com_*() calls to com-returnvalues failed.
2001-09-08 20:40:56 +00:00
André Langhorst d4b86e1c5b fix curl build for curl >= 7.8 2001-09-08 16:51:00 +00:00
Stig S. Bakken d07cfabce4 remove bogus comment :) 2001-09-08 11:17:25 +00:00
Stig S. Bakken b07b4c6029 RFC document for namespaces 2001-09-08 11:02:06 +00:00
Stig S. Bakken 4585ae9fb1 wrapped to 80 columns :) 2001-09-08 08:55:42 +00:00
Sterling Hughes 1c3b3ad8f3 tense, tense, tense 2001-09-08 00:42:25 +00:00
Sterling Hughes bdb4cb5271 I'll stop annoying the list if this doesn't shed light :) 2001-09-08 00:11:12 +00:00
1ab4c740b5 ChangeLog update 2001-09-08 00:10:12 +00:00
Sterling Hughes 186605c62f Doesn't fix the subject problem, but debugging 2001-09-08 00:09:00 +00:00
Sterling Hughes bbe7050e71 revert (I'll fix the subject stuff in a second) 2001-09-07 23:57:38 +00:00
Sterling Hughes c41913db4d testing 2001-09-07 23:56:19 +00:00
Wez Furlong 3ed4cc33ac API update: use zend_parse_parameters 2001-09-07 17:09:56 +00:00
Andi Gutmans d7536a8a5f - Shift around the variable parsing code to make it simpler. 2001-09-07 14:46:12 +00:00
Daniel Beulshausen 2da75a405f build fixes 2001-09-07 13:53:28 +00:00
Daniel Beulshausen a0acfe4375 fix def. 2001-09-07 13:35:32 +00:00
Daniel Beulshausen 0a543a9014 don't use ifx_free_result here 2001-09-07 13:29:50 +00:00
Daniel Beulshausen da0c69d7b9 fix result freeing
# some of the work in (zif_)ifx_free_result should
# probably be done in the list destructor as well
2001-09-07 13:20:33 +00:00
Wez Furlong 5569abe1ee Fix for bug #13190 2001-09-07 12:12:19 +00:00
Sterling Hughes 92390db7e6 MFB 2001-09-07 11:39:00 +00:00
Daniel Beulshausen ff5e95b9e3 fix zts build 2001-09-07 11:20:13 +00:00
Sterling Hughes a5828bbfa9 add a news entry 2001-09-07 10:33:04 +00:00
Sterling Hughes b8cf53d8a5 get rid of global mess 2001-09-07 10:29:06 +00:00
Sterling Hughes 1bc80e6048 register a list destructor 2001-09-07 10:25:26 +00:00
Derick Rethans 2e153ddae1 - Fix for bug #13052 2001-09-07 07:31:39 +00:00
Andi Gutmans fc1abec531 - Fix warning (was fixed in ZE1 and not merged at some point). Please make
sure you merge patches!
2001-09-07 06:40:03 +00:00
foobar 8d8e26577d Cleanup. 2001-09-07 00:58:23 +00:00
foobar c8751fc8a5 Almost missed this one.. 2001-09-07 00:25:11 +00:00
foobar e4df7dc7bf if test -f /usr/local/lib/libexample.s?; then <-- no workie
if test -f /usr/local/lib/libexample.so; then   <-- workie
#
# You can all point at me and laugh now..  :(
#
2001-09-07 00:24:06 +00:00
f6dfcb5641 ChangeLog update 2001-09-07 00:10:54 +00:00
Rasmus Lerdorf afa9e65ff4 Damn, went to head instead of the branch - revert 2001-09-06 23:35:39 +00:00
Rasmus Lerdorf 6a2d84ba06 Oops, forgot to add sapi_apache.c to the apache_hooks branch 2001-09-06 23:32:59 +00:00
foobar 3c64473b71 Fixed bug: #13172 2001-09-06 23:10:37 +00:00
Sterling Hughes 198e6f3ea7 no need to cast a 'HashTable *' to 'HashTable *' 2001-09-06 22:51:47 +00:00
foobar 14152e7ca6 Introduce the good practise of using [] around output messages. 2001-09-06 21:05:57 +00:00
foobar acb7d69ff7 Always quote the messages. 2001-09-06 20:55:24 +00:00
foobar 95ff1ab10f Hope this reduces the amount of bogus bug reports when people use wrong paths.. 2001-09-06 18:13:49 +00:00
Frank M. Kromann 059f1cc922 Fixing spelling 2001-09-06 16:49:17 +00:00
Andrei Zmievski 12eef9d6d6 Clean-up NEWS. 2001-09-06 14:03:59 +00:00
Dan Libby 79e6063a5e fix various build errors. default to no xmlrpc 2001-09-06 09:36:58 +00:00
Sterling Hughes 25d4500a86 I should really learn how to spell 2001-09-06 08:56:24 +00:00
Sterling Hughes b7ba9e007d avoid lowercasing the string 2001-09-06 08:54:54 +00:00
Sterling Hughes 33fc6e2d5f add missing ) 2001-09-06 07:33:45 +00:00
Sebastian Bergmann 4bfa51ad89 Fix Win32 build. 2001-09-06 07:00:39 +00:00
Sterling Hughes 8a156d9a39 fix ms compile warnings 2001-09-06 06:41:16 +00:00
Dan Libby 6883b92116 adding xmlrpc extension, per Stig's request 2001-09-06 04:13:30 +00:00
Sterling Hughes 903c831be5 spaces -> tabs work cont. 2001-09-06 00:40:02 +00:00
Sterling Hughes a4c905ff16 ws fix 2001-09-06 00:18:13 +00:00
4f10dd7985 ChangeLog update 2001-09-06 00:10:56 +00:00
167ea5e6e6 NEWS update 2001-09-06 00:10:53 +00:00
Sterling Hughes a1b11f0755 Fix ts build
# I've gotta start compiling --enable-experimental-zts...  anyway we can make
# this the default when compiling from cvs?  It'll help a large portion of
# compile issues with patches
2001-09-05 21:46:44 +00:00
Sterling Hughes e121eaaef5 Straight out da bronx, I be using zend_parse_parameters()
# Word out to my peeps on Connor st.
2001-09-05 21:38:49 +00:00
Sterling Hughes 5ec58914fe stray tabs and spaces 2001-09-05 21:04:30 +00:00
Sterling Hughes f0c5631778 change range macro semantics
# Kinda torn between the two, thoughts?
2001-09-05 20:59:24 +00:00
Sterling Hughes d930a72cd7 remove inline 2001-09-05 20:56:15 +00:00
Sterling Hughes 1b0f00d67f a bit of api cleanup... move range stuff into a macro (properly :) 2001-09-05 20:52:45 +00:00
foobar 3a044786f8 revert bad commit 2001-09-05 19:48:28 +00:00
foobar 42b5521af5 revert bad commit. 2001-09-05 19:47:55 +00:00
Dan Kalowsky 24b54b866f Patch to stop the crashing behavior exhibited by PHP/ODBC in SOLID/DB2
submitted by Walter Franzini (walter@sys-net.it)
@Fix for LONG_VARCHAR type crashing submitted by Walter Franzini (walter@sys-net.it)
#Should this also be put into the 4.0.7 RC cycle?
2001-09-05 16:19:48 +00:00
Rasmus Lerdorf dbc9a93fba Interbase changes should get a NEWS entry 2001-09-05 15:41:08 +00:00
Jason Greene 54905782b6 Prevent incorrect warning message from occuring on an EOF of socket_read. 2001-09-05 15:30:34 +00:00
Andrei Zmievski 91606e5264 Fix. 2001-09-05 14:43:49 +00:00
foobar 032b263129 Fixes commit / link problems with certain compilers.
# Please use PHP_CHECK_LIBRARY() always instead of AC_CHECK_LIB
# if you need to pass extra libs/libpaths to the test.
2001-09-05 13:18:09 +00:00
Stanislav Malyshev d082fb373d MFZE1 2001-09-05 09:29:28 +00:00
Sterling Hughes b9edf7c17c API Update 2001-09-05 06:55:37 +00:00
foobar b54ce06e96 Removed unused lines. 2001-09-05 01:03:50 +00:00
fe0bfa6dbb ChangeLog update 2001-09-05 00:11:04 +00:00
472a5b029c ChangeLog update 2001-09-05 00:11:03 +00:00
Jason Greene 9fe46a52d4 Much better fix for non forte compilers on Solaris.
Removed pragma hack.
Renamed socket struct to bsd_socket.
2001-09-04 22:27:30 +00:00
Frank M. Kromann a219643b2b Adding function to set transaction locking and isolation. 2001-09-04 21:51:11 +00:00
Rasmus Lerdorf 9a5fdae381 ok, hand-patched this one in 2001-09-04 21:50:27 +00:00
Rasmus Lerdorf 7101179c8d Interbase extension fixes by Jeremy Bettis
(.dsp patch looked funky, but these ones look ok)
2001-09-04 21:47:05 +00:00
Egon Schmid 8820474d4a Fixed some protos. 2001-09-04 21:46:27 +00:00
Egon Schmid e7e88a25d1 Fixed some protos. 2001-09-04 21:07:17 +00:00
Egon Schmid 03fbbb098c Fixed some protos. 2001-09-04 10:44:28 +00:00
Sterling Hughes 38cacba117 Thanks sebastian
# I really like this whole qa team thingy
2001-09-04 10:13:55 +00:00
Sterling Hughes 536c96969b update php_trim as well... 2001-09-04 09:35:53 +00:00
Sterling Hughes c661449ebf fix crash bug 2001-09-04 09:33:30 +00:00
Andi Gutmans 17765221df - Fix namespace collisions. 2001-09-04 07:41:20 +00:00
Sterling Hughes 0935217091 fix proto 2001-09-04 06:21:48 +00:00
Sterling Hughes e55315a375 tabs -> spaces 2001-09-04 06:20:23 +00:00
Sterling Hughes fe03f6f4c2 Begin cleanup, api wise... 2001-09-04 06:18:11 +00:00
Sterling Hughes 3151916113 pval -> zval 2001-09-04 06:08:42 +00:00
Stig Bakken f12896d23b * hopefully the only changes required for the initials->user rename 2001-09-04 03:34:59 +00:00
Stig Bakken 04439c305b * rename "initials" to "user" for clarity 2001-09-04 03:23:56 +00:00
Daniel Beulshausen 83df136d28 update workspaces 2001-09-04 02:20:49 +00:00
Daniel Beulshausen 9b8886410d fix zts+win32 build 2001-09-04 02:19:30 +00:00
8d07a0178f ChangeLog update 2001-09-04 00:10:39 +00:00
Sterling Hughes dda004bcfb - update to php4 api
- expand case statements, ie:

case 1: case 2: case 3:

to

case 1:
case 2:
case 3:

- Remove un-necessary brackets and parentheses (only when it takes away from
readability, I know this is quite arbitrary, but I did my best :)
2001-09-03 23:30:33 +00:00
Sterling Hughes 55b600d03c fix compile on sun forte cc 2001-09-03 21:54:27 +00:00
Andi Gutmans 1ecd31b66c - Fix thread safe mode.
- Please don't use Java style function braces.
2001-09-03 20:21:00 +00:00
Rasmus Lerdorf 00ef03186e This is a list of char *'s, not zvals (caught by Nick - see bug #13107) 2001-09-03 18:58:00 +00:00
Derick Rethans 383691eec2 - Fix broken build
#- Please test before commit!
2001-09-03 17:38:10 +00:00
Andi Gutmans 7c4a0cc6cf - CLS_CC -> TSRMLS_CC 2001-09-03 16:57:49 +00:00
Stanislav Malyshev 0a143cf655 Add _php_math_zvaltobase and _php_math_basetozval
This allows to use bindec, etc. functions to convert numbers longer
than fits in long, using floats instead.
Note: the functions like decbin still don't use the zval-ed functions,
so they work only on longs yet.
2001-09-03 16:26:31 +00:00
Jeroen van Wolffelaar dc8386e30d Removed outdated comment until I've got a better one 2001-09-03 12:01:50 +00:00
Jeroen van Wolffelaar efb83df9f9 Kill some warnings/errors (reported by Sebastian, more to come, but
could take some time. Update of ZTS-builderrors is welcome)
2001-09-03 11:57:15 +00:00
Sterling Hughes 79c27f0cd2 should be this 2001-09-03 08:47:45 +00:00
Sterling Hughes b417b96fb8 - Update to the PHP4 API (newer macros)
- Improve error reporting from split()
- Some minor speed improvements
2001-09-03 08:44:02 +00:00
Sterling Hughes f6d73d73fb stray tabs 2001-09-03 06:10:45 +00:00
Sterling Hughes f14ada19ac cleanup sscanf() just a tiny bit, just so it looks like the rest of the code
in the string.c file.
2001-09-03 04:49:36 +00:00
foobar e46decaa32 First step for chunkifying the HTTP uploads. 2001-09-03 02:31:56 +00:00
Jeroen van Wolffelaar 0cb6a31906 Fix array_rand and array_suffle to use php_rand correctly 2001-09-03 01:54:04 +00:00
Jeroen van Wolffelaar b0300e26df Fix prototype 2001-09-03 01:46:03 +00:00
Jeroen van Wolffelaar bf81c36cb3 Added RAND_REDESIGN change to NEWS (could be more elaborate, but IMHO
that should be in the manual?)
2001-09-03 01:40:06 +00:00
Jeroen van Wolffelaar 72c7ae080b Fix SIGSEGV because HAS_SRAND didn't check wether the entry existed at
all
2001-09-03 01:25:24 +00:00
Jeroen van Wolffelaar 1a68fe49cb Add forgotten files to MAIN 2001-09-03 01:10:29 +00:00
Jeroen van Wolffelaar 92f1248a49 Update credits 2001-09-03 01:09:35 +00:00
Jeroen van Wolffelaar f7306ce010 Merge RAND_REDESIGN into MAIN 2001-09-03 01:06:23 +00:00
d4197ea703 ChangeLog update 2001-09-03 00:10:58 +00:00
Jesus M. Castagnetto 22dc6f2a3b s/fileList/filelist/ 2001-09-02 00:11:44 +00:00
d44ee0670f ChangeLog update 2001-09-02 00:10:26 +00:00
Jesus M. Castagnetto 2f9b7b8737 Changed element and attribute names to lowercase to match the changes
in the package.xml files
2001-09-02 00:09:52 +00:00
Sascha Schumann c52b0e935c . 2001-09-01 17:23:17 +00:00
Zeev Suraski 9e8a2e5ba9 Update API number 2001-09-01 14:55:29 +00:00
f8907afacc ChangeLog update 2001-09-01 00:12:54 +00:00
84e163a900 NEWS update 2001-09-01 00:12:51 +00:00
foobar e29994166a WS 2001-08-31 22:03:24 +00:00
Sterling Hughes c57ed1b93b spaces->tabs 2001-08-31 21:55:43 +00:00
Sterling Hughes 498f7fd90f MFZE1 2001-08-31 21:52:44 +00:00
Sterling Hughes 69c7346f0e MFZE1 2001-08-31 21:47:26 +00:00
Zeev Suraski f7e7b42d4b Restore session_adapt_url() 2001-08-31 20:03:09 +00:00
foobar cb386234ea fixed NEWS entry 2001-08-31 19:55:54 +00:00
Zeev Suraski b080ddb867 Cleanup and clarify 2001-08-31 19:26:12 +00:00
Zeev Suraski 642eab8b46 define_sid updates 2001-08-31 19:22:08 +00:00
Tomas V.V.Cox a95fb10461 renumber error lines 2001-08-31 19:21:02 +00:00
Tomas V.V.Cox 2567b428b2 fix for DB/tests/db_error2.phpt 2001-08-31 19:13:24 +00:00
Tomas V.V.Cox bf0ab08fb8 fix problem when mixing different error modes under certain circumstances
(pear/test/pear_error3.phpt)
2001-08-31 17:56:44 +00:00
Tomas V.V.Cox 409b87d41e make some tests to work. Still left the Notice of the deprecated use of
call_user_method, no way to shut it down.
2001-08-31 16:43:08 +00:00
Tomas V.V.Cox 4861c0cf99 Use _default_error_options as the options for PEAR_ERROR_CALLBACK.
Depreciate the use of _default_error_callback
2001-08-31 16:12:33 +00:00
Zeev Suraski 357dfd5f14 Support multiple chunked output buffering layers 2001-08-31 15:56:48 +00:00
Zeev Suraski b2b50ab525 Fix trans_sid handler registration logic 2001-08-31 15:22:10 +00:00
Zeev Suraski 5c1c22764a Fix double freeing 2001-08-31 15:16:15 +00:00
Zeev Suraski 6bba521dd3 API update 2001-08-31 14:34:40 +00:00
Tomas V.V.Cox cc747779ce fix userinfo msg in Pear_Error::toString() when callback mode is selected
and style
2001-08-31 13:27:46 +00:00
Zeev Suraski 819ea51d00 MFZE1 2001-08-31 13:11:52 +00:00
Andrei Zmievski 392e1edee8 @- Made in_array() and search_array() allow the needle to be an array in
@  itself. (Andrei)
2001-08-31 04:52:10 +00:00
217059fdc7 ChangeLog update 2001-08-31 00:11:32 +00:00
5595973ea9 NEWS update 2001-08-31 00:11:29 +00:00
Tomas V.V.Cox 567c10ba4c killed obscure bug in pushErrorHandling 2001-08-30 19:55:57 +00:00
Zeev Suraski 17209a7088 Try to fix TSRM.dsp 2001-08-30 18:06:30 +00:00
foobar d340c5b2bf @- Added ini_get_all() function which returns all registered ini entries
or the entries for the specified extension. (Jani)
2001-08-30 17:47:04 +00:00
Andi Gutmans 619702157b - Make it compile in thread-safe mode. 2001-08-30 17:27:43 +00:00
foobar 67b9fb4912 KISS. And the search order must be reversed always. Last one counts. 2001-08-30 16:29:36 +00:00
Sebastian Bergmann 452c41ec9e HEAD has been 4.0.8-dev for some time now, so name it accordingly. 2001-08-30 15:33:43 +00:00
Andi Gutmans 560606d210 - Get rid of warning and C++ comments 2001-08-30 15:31:35 +00:00
Tomas V.V.Cox 0fdc143d9e The "actual" mode must be taken, not the error object mode 2001-08-30 15:27:55 +00:00
Andi Gutmans 29f5dbe10b - Initial support for exceptions. 2001-08-30 15:26:30 +00:00
Zeev Suraski ab48027b3e Fix unclean shutdown value 2001-08-30 13:38:33 +00:00
Zeev Suraski 4684d5f405 MFZE1 2001-08-30 12:08:23 +00:00
828aed1f40 ChangeLog update 2001-08-30 00:10:37 +00:00
foobar 5dd2b6e2fd According to Zeev this code is just for showing how to create overloaded classes. 2001-08-29 23:53:22 +00:00
Joey Smith a4a1543753 Fix bug #13025. 2001-08-29 22:26:04 +00:00
foobar 08a521572f WS fixes and indenting. 2001-08-29 16:00:30 +00:00
Andrei Zmievski 942f34e126 Fix changelog. 2001-08-29 13:38:08 +00:00
Wez Furlong efdc50c175 fix build 2001-08-29 13:13:24 +00:00
Wez Furlong e6c7f6f22c fix bug# 13017 - patch from tsukada@fminn.nagano.nagano.jp 2001-08-29 11:29:52 +00:00
f824bf94f3 ChangeLog update 2001-08-29 00:10:38 +00:00
43baccbf05 NEWS update 2001-08-29 00:10:33 +00:00
64c7c88af0 ChangeLog update 2001-08-29 00:10:21 +00:00
Wez Furlong b9c4dc4a05 @- Added mailparse_uudecode_all() which extracts all uuencoded attachments
(Wez)
2001-08-28 21:52:11 +00:00
Rasmus Lerdorf 563ffb8984 Kill a warning 2001-08-28 21:50:37 +00:00
Wez Furlong 1164abcdab fix uudecode 2001-08-28 21:50:29 +00:00
Wez Furlong 9a8c9439e8 fix cp1252 -> wchar conversion 2001-08-28 18:26:46 +00:00
Tomas V.V.Cox 176bf835e4 added the Mail/mime.php file 2001-08-28 13:39:50 +00:00
Stig Bakken b3745665dd * tidy up "make install" output 2001-08-28 13:07:33 +00:00
Stig Bakken 821ea15431 * Archive_Tar is no longer experimental 2001-08-28 12:26:47 +00:00
Stig Bakken 43c2025ac2 * output brief usage when called without params 2001-08-28 12:15:01 +00:00
Stig Bakken c93ec77f15 * Log/Observer.php rename fix 2001-08-28 12:11:32 +00:00
Stig Bakken 36c27603b1 * started work on php file support 2001-08-28 11:18:08 +00:00
Zeev Suraski b392fe4497 MFZE1 2001-08-28 09:23:22 +00:00
Stig Bakken f7fcf3a701 * fold case when parsing package.xml 2001-08-28 08:52:03 +00:00
Doug MacEachern 23f1b515a6 add php version component 2001-08-28 06:23:27 +00:00
Doug MacEachern c614a9ed3d not all MPMs support child_init,
so move php_apache_server_startup to the post_config phase
(happens at server startup)
2001-08-28 06:19:58 +00:00
1424e42326 ChangeLog update 2001-08-28 00:10:11 +00:00
foobar 6cc6e1e668 Coding style. 2001-08-27 22:26:49 +00:00
Stig Bakken 2ccffc5600 * fixes to make package.xml parsing case insensitive 2001-08-27 21:25:16 +00:00
Stig Bakken 5cd46bb2e0 * typo 2001-08-27 20:37:06 +00:00
Stig Bakken fb610787ff * add the directory where php.exe was found to PATH to help Windows
find its DLLs
2001-08-27 20:29:33 +00:00
Stig Bakken d1d848c171 * Windows fix 2001-08-27 20:17:36 +00:00
Chuck Hagenbuch 1c6bfcaa33 shorter protos 2001-08-27 20:05:11 +00:00
Andi Gutmans 0378e545a0 - Add sample RFC 2001-08-27 18:43:20 +00:00
Chuck Hagenbuch 0aca825435 add ngettext() support from Walter Franzini <walter@sys-net.it>, and use Z_*
macros.
2001-08-27 18:43:07 +00:00
Andrei Zmievski 30562acbb2 Moved to 4.0.7. 2001-08-27 16:53:39 +00:00
Stig Bakken 2186ced3a6 * MTH (merge _to_ head) 2001-08-27 16:39:49 +00:00
Zeev Suraski d7149ba8fc Cleanup 2001-08-27 02:06:32 +00:00
Zeev Suraski b781720b36 More fixes and refinements 2001-08-27 00:23:55 +00:00
151c872bc9 ChangeLog update 2001-08-27 00:10:55 +00:00
Stanislav Malyshev 2a0a07b883 Add dlsym underscore detection, by Jani Taskinen 2001-08-26 15:25:55 +00:00
Andi Gutmans b0970f1421 - MFZE1 2001-08-26 15:16:06 +00:00
Andi Gutmans e2efa0196f - Merge Andrei's fix from Engine 1. Please commit patches to both trees! 2001-08-26 15:14:45 +00:00
Hartmut Holzgraefe 05af99cd35 whitespace 2001-08-26 14:26:36 +00:00
Hartmut Holzgraefe 739716883b removed dbplus_change function
moved db++ specific includes to .c files
2001-08-26 14:25:48 +00:00
Hartmut Holzgraefe 521084f661 implementation of missing functionality
implementation and build improvements
2001-08-26 14:24:34 +00:00
Hartmut Holzgraefe b693782c36 removed as all functions from the perl interface have now been implemented 2001-08-26 14:20:51 +00:00
Hartmut Holzgraefe c7b55925a1 added symbolic constatns for error codes
removed dbplus_change function
some build improvements
2001-08-26 14:19:47 +00:00
Hartmut Holzgraefe b073c312b3 added -lm to LIBS, whitespae 2001-08-26 14:15:39 +00:00
Hartmut Holzgraefe 57d971d2ef whitespace 2001-08-26 14:12:27 +00:00
Zeev Suraski d697a558ac Fix my session updates.
trans_sid handling will no longer slow down performance unless a session
is actually in use.
2001-08-26 11:49:43 +00:00
Joey Smith 5d451c9885 Fix 1st case of #9893. 2nd case was already fixed in previous commit. 2001-08-26 11:36:27 +00:00
Zeev Suraski dc9769ea96 Fix trans-sid.
Still need to figure out how to turn trans-sid only when sessions
are actually used.
2001-08-26 11:14:35 +00:00
Rasmus Lerdorf 70c581b820 Test your changes please Jani 2001-08-26 01:10:10 +00:00
Zeev Suraski 7b73aee40f Make the session module more independent 2001-08-26 01:09:20 +00:00
41562f6ca2 ChangeLog update 2001-08-26 00:10:09 +00:00
Zeev Suraski d5e5e376ab This option is no longer needed 2001-08-25 16:19:57 +00:00
Zeev Suraski b8763a6f8c Get rid of TRANS_SID - it's always possible to use it now. 2001-08-25 16:09:23 +00:00
Zeev Suraski 13ff183225 Move the trans-sid mechanism to use the output buffering mechanism.
Advantages:
- Would work with the output buffering mechanism in general, and with
  output compression in particular
- Should yield better performance (untested as of yet)
2001-08-25 15:57:42 +00:00
Zeev Suraski bc596544a1 add struct name 2001-08-25 12:47:12 +00:00
Wez Furlong 2121989d4d This test needed a newline after an echo.
# However, the test still fails on my system
2001-08-25 09:23:10 +00:00
Wez Furlong cda7f49324 Windows-1252 encoding awareness 2001-08-25 09:21:43 +00:00
Wez Furlong 08073a5c60 TSRMLS fix 2001-08-25 09:20:18 +00:00
Jeroen van Wolffelaar 820d28affe Add random number generator-entry to INI-files 2001-08-25 00:11:03 +00:00
e2d51050ea ChangeLog update 2001-08-25 00:11:00 +00:00
ef9fc2e66a NEWS update 2001-08-25 00:10:57 +00:00
foobar f03a871d93 Fixed bug: #12948, #12945 2001-08-24 20:05:58 +00:00
Wez Furlong 61c62cf854 Ahem. 2001-08-24 09:03:50 +00:00
Wez Furlong 6738cda17c update news 2001-08-24 09:01:41 +00:00
Wez Furlong 9e7da02d3b Fix htmlspecialchars problem. 2001-08-24 08:58:10 +00:00
Andrei Zmievski cae9763d0a @- Fixed a crash bug in array_map() if the input arrays had string or
@  non-sequential keys. Also modified it so that if a single array is passed,
@  its keys are preserved in the resulting array. (Andrei)
2001-08-24 02:58:23 +00:00
Sterling Hughes 36412eb5de proto fix 2001-08-24 02:24:03 +00:00
John Donagher faa5031f25 Don't try and search a 0-length string. This allows parse_url() to correctly
parse a non-pathed URI, i.e. 'scheme://'
2001-08-24 02:21:16 +00:00
Sterling Hughes bd4eb1bf78 noet 2001-08-24 01:23:14 +00:00
Sterling Hughes 580d41b3af Break the entire PHP build
# just kidding, noet work :)
2001-08-24 01:21:14 +00:00
Sterling Hughes dd094d1866 noet 2001-08-24 01:12:37 +00:00
Sterling Hughes ca5eb34608 New extensions should put this in by default 2001-08-24 01:09:10 +00:00
8a4da944ba ChangeLog update 2001-08-24 00:10:36 +00:00
Sterling Hughes 398b65ed2f noet 2001-08-23 21:56:29 +00:00
Sterling Hughes 0fabddb745 some cleanup 2001-08-23 21:22:38 +00:00
Zeev Suraski 55c5c68769 whitespace 2001-08-23 14:24:13 +00:00
Wez Furlong f20e9fa298 - Add support for chinese encodings to htmlentities/htmlspecialchars
(patch from Alan Knowles <alan_k@hklc.com>)
2001-08-23 10:43:15 +00:00
Stanislav Malyshev d3ceaeb4e8 Add TODO for DLSYM_NEEDS_UNDRESCORE 2001-08-23 09:18:21 +00:00
a97b1e2341 ChangeLog update 2001-08-23 00:10:41 +00:00
Jeroen van Wolffelaar 3e62bd0867 Reverted the patch to main branch - should have branched whole
ext/standard...
2001-08-22 22:14:08 +00:00
Jeroen van Wolffelaar 43c2bc364f Commit forgotten fix in crypt.c, oversight of a BC-problem 2001-08-22 22:11:57 +00:00
foobar 8ade27507a killed a compile warning. 2001-08-22 17:39:16 +00:00
foobar 146dffb930 Added missing entry.. 2001-08-22 15:12:50 +00:00
foobar a3b9652564 This is not needed anymore. 2001-08-22 10:26:02 +00:00
foobar 93311d9301 Fixed two problems:
- CGI_BINARY was defined always thus this extension
  could be compiled with even when not building CGI binary.

- HAVE_READLINE => HAVE_LIBREADLINE (typo)
2001-08-22 10:25:24 +00:00
foobar 1f30f907b9 More compile warnings nuked. 2001-08-22 09:20:40 +00:00
foobar b78f77575b indent. 2001-08-22 08:43:52 +00:00
foobar 5296d29b59 Killed a compile warning. 2001-08-22 08:34:04 +00:00
Gavin Sherry bd4150ed80 Fixed buffer overflow issue. 2001-08-22 05:47:11 +00:00
Sterling Hughes 766de15694 Add some editor modes (in the rest of the source) 2001-08-22 04:45:51 +00:00
Gavin Sherry ff7a694e0f Changed php_strip_tags() to check if <? was XML code. 2001-08-22 02:03:14 +00:00
30dc0813cb ChangeLog update 2001-08-22 00:10:24 +00:00
Stig Bakken 3b4f80a035 * added two missing end folds 2001-08-22 00:09:27 +00:00
Joey Smith 1c10503029 Hmmm...not sure what this was trying to do. stat() was acting like filesize(). 2001-08-21 23:58:19 +00:00
Joey Smith f0ea3478cb Some changes to help out previous users of domxml...
node::tagname == node::name.
Add property "type" to textnode types.
2001-08-21 21:49:32 +00:00
Sterling Hughes f9d913537b Fix typo 2001-08-21 17:58:37 +00:00
Ulf Wendel 1ffed2e53f Added two new functions:
int pdf_get_minorversion()
  int pdf_get_majorversion()

Both functions are taken from the C-Library. You should be able to determine
the API version of the extension/library using pdf_get_value() or
pdf_get_parameter() but these functions need a pdf object to work on. This
means that you have to create an pdf object before you can find out the
API version. Using pdf_get_minorversion() and pdf_get_majorversion() there's
no need for this.
2001-08-21 13:33:16 +00:00
Zeev Suraski e140b35b04 API update 2001-08-21 12:57:53 +00:00
Zeev Suraski 4757104e45 MFZE1 2001-08-21 12:29:12 +00:00
Sascha Schumann 95347cd868 Further work on autoconf-2.5x support 2001-08-21 11:45:33 +00:00
Sascha Schumann 9350a23b8f Move PHP_SUBSTs to configure.in. 2001-08-21 11:03:45 +00:00
Sascha Schumann 8ab1c2aa44 nuke some apparently harmful spaces 2001-08-21 11:02:42 +00:00
Sascha Schumann 66187ec2dc nuke whitespace 2001-08-21 11:00:22 +00:00
Daniel Beulshausen b017d9b01d add MDAC note 2001-08-21 10:55:46 +00:00
Sterling Hughes ee1eaf9fbb Update api and fix some compile warnings 2001-08-21 09:04:18 +00:00
Zeev Suraski bafecffb7c Fix Release_TSDbg configuration 2001-08-21 07:56:25 +00:00
d1f29d7bb1 ChangeLog update 2001-08-21 00:11:03 +00:00
Jeroen van Wolffelaar d14b3a86cf Proto fix 2001-08-20 20:50:54 +00:00
Doug MacEachern 9b137805c8 automatically add php input/output filters when give the standard 1.x config:
AddType application/x-httpd-php .php
with that, no longer need "Set{In,Out}putFilter PHP" configuration for 2.0
2001-08-20 16:34:45 +00:00
Sascha Schumann 01672af8f0 Improved fix 2001-08-20 15:27:45 +00:00
Stanislav Malyshev 902100a692 Fix long printing in smart_str_print_long 2001-08-20 15:26:10 +00:00
Zeev Suraski 9b3df86e8d MFZE1 2001-08-20 14:58:52 +00:00
Stanislav Malyshev 8fd65b9f16 test big numbers too 2001-08-20 14:15:05 +00:00
foobar abeb4bd2e5 Cleaning. And made the check for SSL support in SNMP to really work. 2001-08-20 14:04:48 +00:00
foobar 929424032e Keep crypt() working even if SNMP needs OpenSSL. 2001-08-20 14:04:21 +00:00
Harald Radi acf13f82c1 catch date conversion errors 2001-08-20 08:53:18 +00:00
Harald Radi 3d0ab1236f hum, wasn't $foo->bar 's property type OE_IS_METHOD ? 2001-08-20 08:52:49 +00:00
Sergey Kartashoff c9aa94fc6f # just an author's promary email change in headers 2001-08-20 08:31:30 +00:00
Shane Caraveo 01e5a18c4a non-ts compile work, add fastcgi module. 2001-08-20 05:01:39 +00:00
Shane Caraveo 108633e1ab Windows compilation of fast cgi now working. See windows.txt for info. 2001-08-20 05:00:05 +00:00
Dave Hayden 22aed399e7 Added flags for SWFDisplayItem_addAction
Added Ming RINIT function
Added error handler for reporting Ming errors in PHP environment
Added size arg to drawGlyph function
Added swfdisplayitem_addAction function
Added ming_useSWFVersion function for selecting SWF 4 compatibility
Added SWFBitmap object
Added hacky SWFInput object for loading data from file/network/process
2001-08-20 03:32:43 +00:00
Dave Hayden 91997ed31c changed version check to look for function Ming_useSWFVersion, indicating
Ming 0.2a
2001-08-20 03:24:14 +00:00
Dave Hayden e0f91d3c48 added function prototypes:
PHP_RINIT_FUNCTION(ming)
  PHP_FUNCTION(swfdisplayitem_addAction)
  PHP_FUNCTION(ming_useSWFVersion)
2001-08-20 03:23:26 +00:00
e28fc0f85e ChangeLog update 2001-08-20 00:10:24 +00:00
Shane Caraveo 7a3c7ef930 fix for non-TS compile 2001-08-19 22:23:24 +00:00
Shane Caraveo b87aa1f67b Fixes for non-TS compilation 2001-08-19 22:02:46 +00:00
Doug MacEachern 4829b93fb2 php_input_filter needs to ignore proxy requests
else it swallows POST data that needs to be sent to the downstream server
2001-08-19 21:07:50 +00:00
Sterling Hughes ba4a1f2df2 Pass on proxy requests (fix by Doug MacEachern <dougm@covalent.net>) 2001-08-19 20:28:36 +00:00
Stig Bakken adb79869df * ignore phptar 2001-08-19 18:46:55 +00:00
Andi Gutmans 718f323edc - Fix compile problem 2001-08-19 15:23:25 +00:00
Zeev Suraski 4340c57ece MFZE1 2001-08-19 13:39:06 +00:00
Tomas V.V.Cox 9037bedb9e The "pear package" command will try to open "./package.xml" if no more
params are given.
2001-08-19 12:53:01 +00:00
Tomas V.V.Cox df54bca0a0 better error hanlding 2001-08-19 12:37:51 +00:00
Tomas V.V.Cox cf70755a05 maintain original file perms 2001-08-19 12:30:24 +00:00
foobar fd4de85836 Added some missing information. 2001-08-19 06:39:13 +00:00
foobar e5bd800aeb Fixed bug: #11232. Now we require Fribidi 0.9.0.
# Better use the latest version for this one too since
# it seems to have stabilized and they made an internal
# rewrite for that one.
2001-08-19 06:37:05 +00:00
foobar 7e34d46573 ws fix. 2001-08-19 01:47:19 +00:00
Stig Bakken b96e13a99d Added "phptar" command as proof that the Archive_Tar class works.
# Great work, Vincent!
2001-08-19 00:34:08 +00:00
f25c5f09f0 ChangeLog update 2001-08-19 00:10:11 +00:00
foobar d7d89bcf68 ws 2001-08-19 00:05:06 +00:00
foobar c902ad74f0 null terminate the returned string in here too. 2001-08-18 23:43:04 +00:00
foobar 1ffbcc5ecf ws fix. 2001-08-18 23:07:10 +00:00
foobar a000bdd93e libxml 2.4.2 is required now. 2001-08-18 21:08:52 +00:00
foobar de7d47c3fd fixed NEWS. 2001-08-18 20:24:06 +00:00
Andi Gutmans d87fa22532 - Merge Sterling's patches from ZE1 2001-08-18 18:16:49 +00:00
foobar e74c4e0a45 Added a check for libdmalloc whether it works (is found..) or not.
# We should always test every library (when possible) before
# adding them..
2001-08-18 18:14:22 +00:00
Zeev Suraski d921a2a5ea Update NEWS 2001-08-18 17:00:01 +00:00
Zeev Suraski b8624e7e08 Fix bugs #7301, #6827 2001-08-18 16:56:34 +00:00
foobar d3aff0f6ee make this test work. 2001-08-18 16:47:02 +00:00
Tomas V.V.Cox a0bf4ac47d added support for the following tags in package.xml:
- <State> inside <Release> (package development state: 'alpha','beta','stable','snapshot')
- <Changelog> stores <Release> entries
- <Maintainers> stores multiple <Maintainer> entries
- <Role> inside <Maintainer> ('lead','developer','contributor','helper')
2001-08-18 14:40:25 +00:00
Sterling Hughes 807b49aa2f K&R format changes 2001-08-18 08:43:47 +00:00
Sterling Hughes 15b1e4ba9c Fix XtOffsetOf compile problems if someone has already defined it. 2001-08-18 02:08:29 +00:00
Sterling Hughes 244c9ff3c9 Fix warning (Doug MacEachern, dougm@covalent.net) 2001-08-18 01:59:38 +00:00
Sterling Hughes 353f84c190 # f*ck @!e333u49/&§&$T§$&("E""! expandtab, that's it, the default in my
# vimrc is not noet
2001-08-18 01:36:29 +00:00
Sterling Hughes 0e12954669 fix crash bug (Doug MacEachern, dougm@covalent.net) 2001-08-18 01:34:19 +00:00
25363e0744 ChangeLog update 2001-08-18 00:10:14 +00:00
Ryan Bloom 1543904d71 Fix a seg fault in PHP. If a child process is created in the server,
using apr_proc_create, it will seg fault, because PHP is using a NULL
child cleanup.  To fix this, we have to use the special cleanup function,
apr_pool_cleanup_null.

This also fixes a compiler warning in the ap_log_error call.
2001-08-17 22:25:13 +00:00
Andrei Zmievski ea315a2e70 MFZE1 2001-08-17 17:42:43 +00:00
Zeev Suraski b02df6f4ac MFZE1 2001-08-17 14:53:55 +00:00
Zeev Suraski c6202789a4 Update php.ini-recommended 2001-08-17 14:04:30 +00:00
Marc Boeren 48d6d5e531 whitespace, braces, coding style (Mc) 2001-08-17 13:56:29 +00:00
Andi Gutmans e245e33f1f - Use the same coding standards for pointers as the rest of PHP.
- For example, char ** foo should be char **foo
2001-08-17 13:00:46 +00:00
Marc Boeren 9a22911392 Added preliminary support framework for Oracle 8. (Mc)
Thies C. Arntzen will look into this to actually make it work,
as I don't have Oracle installed here. As I said, it is only a
framework for Oracle, and it will most likely crash if you
actually try to use the oracle functions before Thies (or
anyone else that wants to, of course) has had a chance to look
at it.
# The other databases will continue to work, of course :)
2001-08-17 12:54:24 +00:00
Sterling Hughes 03724a70e9 Z_*_P{0,2} macro work. 2001-08-17 09:10:49 +00:00
Sterling Hughes c53f80fb23 1) update to the ZEND_NUM_ARGS() and Z_*_P{0,2} macros
2) minor ws improvements, removing unecessary error checking logic, and
making the error messages a bit nicer looking
2001-08-17 09:08:03 +00:00
Sebastian Bergmann d311622203 Forgot to add DB.php. 2001-08-17 08:51:09 +00:00
foobar 12a74c513d These files do not exist anymore. 2001-08-17 08:47:43 +00:00
foobar 8f6394365c Look for iconv library also in $ICONV_DIR. 2001-08-17 08:33:49 +00:00
Harald Radi feff3512f4 fixed a buggy cast 2001-08-17 08:17:13 +00:00
Sterling Hughes 06aa7a4d19 Cleanup of var_dump() with correct macro's, k&r indent, and removal of a
pair of unnecessary { }
2001-08-17 07:50:15 +00:00
Sterling Hughes 844788a4b8 pval -> zval
Z_*_P{0,2} macros
easier way of doing urldecode(), from rawurldecode() (a tad faster too).
2001-08-17 07:41:20 +00:00
Sterling Hughes 591aba3c89 ws fix. 2001-08-17 07:07:34 +00:00
foobar 85255d9ee5 HAVE_LIBICONV was never defined. 2001-08-17 06:54:55 +00:00
Sterling Hughes 6bc04c0858 Clean up the function for the Zend API (php3, early php4 relics removed).
Use PF_INET, instead of AF_INET, if present.
remove some code enclosed in #if 0 ... #endif that made no sense
2001-08-17 06:53:26 +00:00
fd7cf8dd7c ChangeLog update 2001-08-17 00:18:11 +00:00
15cde2d531 NEWS update 2001-08-17 00:18:08 +00:00
Zeev Suraski 3fd258f06b Remove redundant files 2001-08-16 23:58:56 +00:00
Joey Smith c8b294afa3 @- Fix a crash in dbase_replace_record (Patch by robin.marlow@dps-int.com).
This fixes Bug id #11928.
2001-08-16 23:44:10 +00:00
Zeev Suraski e9da242ed4 Send Content-Length if we're sending just one chunk 2001-08-16 23:34:25 +00:00
Rasmus Lerdorf b732d8da35 Missing define 2001-08-16 23:31:54 +00:00
foobar b1b4afa64e Missing entries. 2001-08-16 22:15:33 +00:00
Zeev Suraski ef18947e5a sync with CODING_STANDARDS 2001-08-16 20:57:55 +00:00
Zeev Suraski 77c52275a1 MFZE1 2001-08-16 20:38:56 +00:00
Chuck Hagenbuch c1a8854993 add tail pointer to speed up imap_search (submitted by Rob Siemborski
<rjs3@andrew.cmu.edu>).
2001-08-16 20:13:27 +00:00
Harald Radi 9e083d2de1 added me and myself 2001-08-16 19:59:08 +00:00
Rasmus Lerdorf 7cde1eb66b that too 2001-08-16 16:46:00 +00:00
Rasmus Lerdorf 6f902a3177 Add dbx 2001-08-16 16:44:56 +00:00
Andi Gutmans f909ff9ed0 - Try and nuke get_object_zval_ptr() 2001-08-16 15:01:25 +00:00
Andi Gutmans 6435c3e962 - Remove bogus notice 2001-08-16 14:42:28 +00:00
Andi Gutmans 290fc10af7 - Sync with ZE1 2001-08-16 14:12:03 +00:00
Andi Gutmans ea48c0c46a - Fix a bug in method calls.
- Try to get the old copying behavior of objects to work (doesn't work yet).
2001-08-16 14:04:04 +00:00
Thies C. Arntzen 3510482971 move php_shutdown_config further down 2001-08-16 09:40:05 +00:00
Sterling Hughes fe7b5a3434 darn noet 2001-08-16 06:09:12 +00:00
Sterling Hughes b87834a12d Ryan Bloom's fix of my fix. ;) 2001-08-16 06:05:57 +00:00
Sterling Hughes 9395f0e6e2 Fix error logging 2001-08-16 05:19:29 +00:00
Rasmus Lerdorf 2b4c2a2ff5 Commit a bit of random plane hacking.
- A slight exif fix from the latest version of jhead
 - Make ext_skel's confirm_module_compiled function consistent
2001-08-16 00:16:00 +00:00
891dfed091 ChangeLog update 2001-08-16 00:10:53 +00:00
Zeev Suraski 2d8ca548e2 Fix build 2001-08-15 22:49:15 +00:00
foobar 3cc6655f3a Add the build time too. Bug: #12774 2001-08-15 22:37:31 +00:00
foobar 24187f2e05 Fix --with-pear=path too. 2001-08-15 21:39:32 +00:00
Chuck Hagenbuch 2b9e767822 PEAR::raiseError() can be called statically - don't assume $this will be
there!
2001-08-15 21:26:12 +00:00
Stig Bakken 84cdabcec0 * point people to the manual instead 2001-08-15 21:03:51 +00:00
Jeroen van Wolffelaar 2b6bafb269 Remove cbrt also, and mark logm1 and exp1p as expermintal 2001-08-15 19:08:59 +00:00
Jeroen van Wolffelaar d62fbbd5a8 MF407 2001-08-15 19:01:32 +00:00
Daniel Beulshausen 0a6878cc02 accomodate SAPI_API changes 2001-08-15 18:11:40 +00:00
Zeev Suraski 7fe3b91c67 MFZE1 2001-08-15 18:06:06 +00:00
Daniel Beulshausen 0dab84d065 fix SAPI_POST_* exports 2001-08-15 18:01:48 +00:00
Harald Radi db33d810f3 no message 2001-08-15 17:39:08 +00:00
Thies C. Arntzen 04c3f8403f mega patch to avoid recursive oci-calls as they might break oracle!
php will simply exit() (!!!) once it encounters an attemp to call oracle
while still in an oracle-call. this can only happen when the script gets
interrupted (timeout, apache-restart) and php tries to run the cleanups even
though we are in an unclean state. i will add an -ini flag soon (not before
4.0.7) which will (optional) make php not run the cleanups when in an unclean
state!
2001-08-15 16:00:56 +00:00
1740 changed files with 2581 additions and 412100 deletions

No files matched your search

-218
View File
@@ -1,218 +0,0 @@
PHP Coding Standards
====================
This file lists several standards that any programmer, adding or changing
code in PHP, should follow. Since this file was added at a very late
stage of the development of PHP v3.0, the code base does not (yet) fully
follow it, but it's going in that general direction. Since we are now
well into the version 4 releases, many sections have been recoded to use
these rules.
Code Implementation
-------------------
[1] Functions that are given pointers to resources should not free them
For instance, function int mail(char *to, char *from) should NOT free
to and/or from.
Exceptions:
- The function's designated behavior is freeing that resource. E.g. efree()
- The function is given a boolean argument, that controls whether or not
the function may free its arguments (if true - the function must free its
arguments, if false - it must not)
- Low-level parser routines, that are tightly integrated with the token
cache and the bison code for minimum memory copying overhead.
[2] Functions that are tightly integrated with other functions within the
same module, and rely on each other non-trivial behavior, should be
documented as such and declared 'static'. They should be avoided if
possible.
[3] Use definitions and macros whenever possible, so that constants have
meaningful names and can be easily manipulated. The only exceptions
to this rule are 0 and 1, when used as false and true (respectively).
Any other use of a numeric constant to specify different behavior
or actions should be done through a #define.
[4] When writing functions that deal with strings, be sure to remember
that PHP holds the length property of each string, and that it
shouldn't be calculated with strlen(). Write your functions in a such
a way so that they'll take advantage of the length property, both
for efficiency and in order for them to be binary-safe.
Functions that change strings and obtain their new lengths while
doing so, should return that new length, so it doesn't have to be
recalculated with strlen() (e.g. php_addslashes())
[5] Use php_error() to report any errors/warnings during code execution.
Use descriptive error messages, and try to avoid using identical
error strings for different stages of an error. For example,
if in order to obtain a URL you have to parse the URL, connect,
and retreive the text, assuming something can go wrong at each
of these stages, don't report an error "Unable to get URL"
on all of them, but instead, write something like "Unable
to parse URL", "Unable to connect to URL server" and "Unable
to fetch URL text", respectively.
[6] NEVER USE strncat(). If you're absolutely sure you know what you're doing,
check its man page again, and only then, consider using it, and even then,
try avoiding it.
Naming Conventions
------------------
[1] Function names for user-level functions should be enclosed with in
the PHP_FUNCTION() macro. They should be in lowercase, with words
underscore delimited, with care taken to minimize the letter count.
Abbreviations should not be used when they greatly decrease the
readability of the function name itself.
Good:
'mcrypt_enc_self_test'
'mysql_list_fields'
Ok:
'mcrypt_module_get_algo_supported_key_sizes'
(could be 'mcrypt_mod_get_algo_sup_key_sizes'?)
'get_html_translation_table'
(could be 'html_get_trans_table'?)
Bad:
'hw_GetObjectByQueryCollObj'
'pg_setclientencoding'
'jf_n_s_i'
[2] If they are part of a "parent set" of functions, that parent should
be included in the user function name, and should be clearly related
to the parent program or function family. This should be in the form
of parent_*.
A family of 'foo' functions, for example:
Good:
'foo_select_bar'
'foo_insert_baz'
'foo_delete_baz'
Bad:
'fooselect_bar'
'fooinsertbaz'
'delete_foo_baz'
[3] Function names used by user functions should be prefixed
with "_php_", and followed by a word or an underscore-delimited list of
words, in lowercase letters, that describes the function. If applicable,
they should be declared 'static'.
[4] Variable names must be meaningful. One letter variable names must be
avoided, except for places where the variable has no real meaning or
a trivial meaning (e.g. for (i=0; i<100; i++) ...).
[5] Variable names should be in lowercase; Use underscores to seperate
between words.
Syntax and indentation
----------------------
[1] Never use C++ style comments (i.e. // comment). Always use C-style
comments instead. PHP is written in C, and is aimed at compiling
under any ANSI-C compliant compiler. Even though many compilers
accept C++-style comments in C code, you have to ensure that your
code would compile with other compilers as well.
The only exception to this rule is code that is Win32-specific,
because the Win32 port is MS-Visual C++ specific, and this compiler
is known to accept C++-style comments in C code.
[2] Use K&R-style. Of course, we can't and don't want to
force anybody to use a style he or she is not used to, but,
at the very least, when you write code that goes into the core
of PHP or one of its standard modules, please maintain the K&R
style. This applies to just about everything, starting with
indentation and comment styles and up to function decleration
syntax.
[3] Be generous with whitespace and braces. Always prefer:
if (foo) {
bar;
}
to:
if(foo)bar;
Keep one empty line between the variable decleration section and
the statements in a block, as well as between logical statement
groups in a block. Maintain at least one empty line between
two functions, preferably two.
[4] When indenting, use the tab character. A tab is expected to represent
four spaces. It is important to maintain consistency in indenture so
that definitions, comments, and control structures line up correctly.
Documentation and Folding Hooks
-------------------------------
In order to make sure that the online documentation stays in line with
the code, each user-level function should have its user-level function
prototype before it along with a brief one-line description of what the
function does. It would look like this:
/* {{{ proto int abs(int number)
Return the absolute value of the number */
PHP_FUNCTION(abs)
{
...
}
/* }}} */
The {{{ symbols are the default folding symbols for the folding mode in
Emacs and vim (set fdm=marker). Folding is very useful when dealing with
large files because you can scroll through the file quickly and just unfold
the function you wish to work on. The }}} at the end of each function marks
the end of the fold, and should be on a separate line.
The "proto" keyword there is just a helper for the doc/genfuncsummary script
which generates a full function summary. Having this keyword in front of the
function prototypes allows us to put folds elsewhere in the code without
messing up the function summary.
Optional arguments are written like this:
/* {{{ proto object imap_header(int stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])
Returns a header object with the defined parameters. */
And yes, please keep the prototype on a single line, even if that line
is massive.
New and Experimental Functions
-----------------------------------
To reduce the problems normally associated with the first public
implementation of a new set of functions, it has been suggested
that the first implementation include a file labeled 'EXPERIMENTAL'
in the function directory, and that the functions follow the
standard prefixing conventions during their initial implementation.
The file labelled 'EXPERIMENTAL' should include the following
information:
Any authoring infomration (known bugs, future directions of the module).
Ongoing status notes which may not be appropriate for CVS comments.
Aliases & Legacy Documentation
-----------------------------------
You may also have some deprecated aliases with close to duplicate
names, for example, somedb_select_result and somedb_selectresult. For
documentation puposes, these will only be documented by the most
current name, with the aliases listed in the documentation for
the parent function. For ease of reference, user-functions with
completely different names, that alias to the same function (such as
highlight_file and show_source), will be separately documented. The
proto should still be included, describing which function is aliased.
Backwards compatible functions and names should be maintained as long
as the code can be reasonably be kept as part of the codebase. See
/phpdoc/README for me information on documentation.
-2
View File
@@ -1,2 +0,0 @@
For the list of people who've put work into PHP 4.0, please see
http://www.php.net/credits.php
-17646
View File
File diff suppressed because it is too large. Load diff
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
-426
View File
@@ -1,426 +0,0 @@
List of PHP maintainers
=======================
Maintenance legend
------------------
Supported: Someone is actually paid to look after this.
Maintained: Someone actually looks after it.
Odd Fixes: It has a maintainer but they don't have time to do
much other than throw the odd patch in. See below.
Orphan: No current maintainer [but maybe you could take the
role as you write your new code].
Obsolete: Old code. Something tagged obsolete generally means
it has been replaced by a better system and you
should be using that.
Unknown: Not known at this time.
Status legend
-------------
Working: Working under both Windows and Unix.
Windows: Working only under Windows.
Unix: Working only under Unix.
Experimental: Under development or initial release.
Not Working: Not working.
Unknown: Status unknown.
== Server APIs ==
-------------------------------------------------------------------------------
EXTENSION: aolserver
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: apache
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: cgi
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: fhttpd
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: isapi
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: nsapi
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: phttpd
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: pi3web
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: roxen
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: servlet
PRIMARY MAINTAINER: Sam Ruby <rubys@us.ibm.com>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: thttpd
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
== Database extensions ==
-------------------------------------------------------------------------------
EXTENSION: dba
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: dbase
PRIMARY MAINTAINER: Jim Winstead <jimw@php.net>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: filepro
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: hyperwave
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: informix
PRIMARY MAINTAINER: Danny Heijl <Danny.Heijl@cevi.be>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: ingres_ii
PRIMARY MAINTAINER: David Hénot <henot@php.net>
MAINTENANCE: Maintained
STATUS: Experimental
SINCE: 4.0.2
-------------------------------------------------------------------------------
EXTENSION: interbase
PRIMARY MAINTAINER: Jouni Ahto <jouni.ahto@exdec.fi>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: msql
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: mssql
PRIMARY MAINTAINER: Frank M. Kromann <fmk@swwwing.com>
MAINTENANCE: Maintained
STATUS: Working
COMMENT: Tested on phpts and isapi versions
-------------------------------------------------------------------------------
EXTENSION: mysql
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: pgsql
PRIMARY MAINTAINER: Jouni Ahto <jouni.ahto@exdec.fi>
MAINTENANCE: Odd fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: sybase
MAINTENANCE: Unknown
STATUS: Not Working
-------------------------------------------------------------------------------
EXTENSION: sybase_ct
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: oci8
PRIMARY MAINTAINER: Thies C. Arntzen <thies@thieso.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: odbc
PRIMARY MAINTAINER: Andreas Karajannis <Karajannis@gmd.de>
MAINTENANCE: Maintained
STATUS: Working
COMMENT: Working except for persistent connections
-------------------------------------------------------------------------------
EXTENSION: oracle
PRIMARY MAINTAINER: Thies C. Arntzen <thies@thieso.net>
MAINTENANCE: Maintained
STATUS: Working
COMMENT: Using the new OCI8 driver is encouraged where possible.
-------------------------------------------------------------------------------
== Other extensions ==
-------------------------------------------------------------------------------
EXTENSION: aspell
MAINTENANCE: Unknown
STATUS: Working
COMMENT: For aspell .27 and greater, check out the pspell extension
-------------------------------------------------------------------------------
EXTENSION: bcmath
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: bz2
PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
MAINTENANCE: Maintained
STATUS: Working
SINCE: 4.0.3
-------------------------------------------------------------------------------
EXTENSION: calendar
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: com
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: cpdf
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: crack
MAINTENANCE: Unknown
STATUS: Experimental
SINCE: 4.0.5
-------------------------------------------------------------------------------
EXTENSION: curl
PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
MAINTENANCE: Maintained
STATUS: Working
SINCE: 4.0.2
-------------------------------------------------------------------------------
EXTENSION: cybercash
PRIMARY MAINTAINER: Evan Klinger <evan715@sirius.com>
MAINTENANCE: Maintained
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: domxml
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
MAINTENANCE: Maintained
STATUS: Experimental
-------------------------------------------------------------------------------
EXTENSION: dotnet
PRIMARY MAINTAINER: Sam Ruby <rubys@us.ibm.com>
MAINTENANCE: Maintained
STATUS: Experimental
-------------------------------------------------------------------------------
EXTENSION: exif
MAINTENANCE: Unknown
STATUS: Unknown
SINCE: 4.0.1
-------------------------------------------------------------------------------
EXTENSION: fdf
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
MAINTENANCE: Maintained
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: ftp
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: gd
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: gettext
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: gmp
MAINTENANCE: Unknown
STATUS: Unknown
SINCE: 4.0.4
-------------------------------------------------------------------------------
EXTENSION: icap
MAINTENANCE: Unknown
STATUS: Obsolete
-------------------------------------------------------------------------------
EXTENSION: imap
PRIMARY MAINTAINER: Chuck Hagenbuch <chuck@horde.org>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: java
PRIMARY MAINTAINER: Sam Ruby <rubys@us.ibm.com>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: ldap
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: mcal
PRIMARY MAINTAINER: Chuck Hagenbuch <chuck@horde.org>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: mcrypt
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: mhash
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: muscat
PRIMARY MAINTAINER: Sam Liddicott <sam@ananova.com>
MAINTENANCE: Maintained
STATUS: Working
SINCE: 4.0.5
COMMENT: Not tested against windows, only core API completed, rest under development
-------------------------------------------------------------------------------
EXTENSION: openssl
PRIMARY MAINTAINER: Wez Furlong <wez@php.net>
MAINTENANCE: Maintained
STATUS: Experimental
SINCE: 4.0.4
-------------------------------------------------------------------------------
EXTENSION: pcre
PRIMARY MAINTAINER: Andrei Zmievski <andrei@ispi.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: pdf
PRIMARY MAINTAINER: Uwe Steinmann <steinm@php.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: pfpro
PRIMARY MAINTAINER: David Croft <david@infotrek.co.uk>
MAINTENANCE: Maintained
STATUS: Working
SINCE: 4.0.2
-------------------------------------------------------------------------------
EXTENSION: posix
PRIMARY MAINTAINER: Kristian Köhntopp <kris@koehntopp.de>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: printer
PRIMARY MAINTAINER: Daniel Beulshausen <daniel@php4win.de>
MAINTENANCE: Maintained
STATUS: Working
SINCE: 4.0.4
COMMENT: Only for Win32
-------------------------------------------------------------------------------
EXTENSION: pspell
PRIMARY MAINTAINER: Vlad Krupin <phpdevel@echospace.com>
MAINTENANCE: Unknown
STATUS: Unknown
SINCE: 4.0.2
-------------------------------------------------------------------------------
EXTENSION: qtdom
MAINTENANCE: Unknown
STATUS: Experimental
SINCE: 4.0.4
-------------------------------------------------------------------------------
EXTENSION: readline
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: recode
PRIMARY MAINTAINER: Kristian Köhntopp <kris@koehntopp.de>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: sablot
PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
MAINTENANCE: Maintained
STATUS: Experimental
SINCE: 4.0.3
-------------------------------------------------------------------------------
EXTENSION: satellite
PRIMARY MAINTAINER: David Eriksson <eriksson@php.net>
MAINTENANCE: Odd Fixes
STATUS: Experimental
SINCE: 4.0.3
-------------------------------------------------------------------------------
EXTENSION: session
PRIMARY MAINTAINER: Sascha Schumann <sascha@schumann.cx>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: shmop
PRIMARY MAINTAINER: Unknown
MAINTENANCE: Unknown
STATUS: Experimental
SINCE: 4.0.3
-------------------------------------------------------------------------------
EXTENSION: snmp
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>
MAINTENANCE: Odd Fixes
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: sockets
PRIMARY MAINTAINER: Chris Vandomelen <chrisv@b0rked.dhs.org>
MAINTENANCE: Maintained
STATUS: Experimental
SINCE: 4.0.2
-------------------------------------------------------------------------------
EXTENSION: swf
PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
MAINTENANCE: Maintained
STATUS: Depreciated (Use the ming swf extension instead)
COMMENT: Only for Unix (won't change)
-------------------------------------------------------------------------------
EXTENSION: sysvsem
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: sysvshm
MAINTENANCE: Unknown
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: vpopmail
MAINTENANCE: Unknown
STATUS: Experimental
SINCE: 4.0.5
-------------------------------------------------------------------------------
EXTENSION: wddx
PRIMARY MAINTAINER: Andrei Zmievski <andrei@ispi.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: xml
PRIMARY MAINTAINER: Thies C. Arntzen <thies@thieso.net>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: yaz
PRIMARY MAINTAINER: Adam Dickmeiss <adam@indexdata.dk>
MAINTENANCE: Maintained
STATUS: Unknown
SINCE: 4.0.1
-------------------------------------------------------------------------------
EXTENSION: yp
MAINTENANCE: Unknown
STATUS: Unknown
-------------------------------------------------------------------------------
EXTENSION: zlib
PRIMARY MAINTAINER: Stefan Roehrich <sr@linux.de>
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: zziplib
PRIMARY MAINTAINER: Sterling Hughes <sterling@php.net>
MAINTENANCE: Maintained
STATUS: Experimental
SINCE: 4.0.5
-------------------------------------------------------------------------------
# iptc?
-406
View File
@@ -1,406 +0,0 @@
Installation Instructions for PHP 4.0
-------------------------------------
For the impatient here is a quick set of steps that will build PHP as
first a dynamic Apache module (DSO) for Apache 1.3.x with MySQL support
and then a static module. A more verbose explanation follows.
For installing PHP on other web servers, refer to one of the following
files:
sapi/aolserver/README
sapi/pi3web/README
sapi/servlet/README
sapi/thttpd/README
README.Zeus
Note! Only install either the static module or the dynamic one. Do not
install both.
Note 2! If you are recompiling PHP to add new extensions or upgrading
something like GD, remove the config.cache file before you re-run
configure.
Note 3! If you are on Linux and have installed shared libraries, make
sure the location of these shared libraries are listed in your
/etc/ld.so.conf file. For example, if you have:
/usr/local/lib/mysql/libmysqlclient.so
Make sure /etc/ld.so.conf contains:
/usr/local/lib/mysql
Then run ldconfig.
If you want both PHP 3 and 4 modules in the same Apache server, check the
bottom of this file for instructions.
INSTALLATION WITH THE ZEUS WEB SERVER:
--Please see the 'README.Zeus' file included in this distribution
QUICK INSTALL (DSO)
For this to work your Apache httpd must have mod_so enabled.
Check using httpd -l. You should see something like:
Compiled-in modules:
http_core.c
mod_so.c
Chances are you will see a lot more modules than these two. That's ok,
as long as mod_so.c shows up you can proceed with the following steps:
$ gunzip -c php-4.0.x.tar.gz | tar xf -
$ cd php-4.0.x
$ ./configure --with-mysql --with-apxs
$ make
$ make install
If you get an error telling you that the apxs script could not be found,
look for it on your system and if you find it, provide the full path to it
as: --with-apxs=/path/to/apxs
Next you must copy php.ini-dist to the appropriate place (normally
/usr/local/lib/php.ini) and edit it as necessary to set PHP options.
The only thing left to do is to edit your httpd.conf file and make sure the
PHP 4 mime type is there and uncommented. You need a line that looks like
this:
AddType application/x-httpd-php .php
Then restart your server (apachectl restart) and you should be able to
serve up PHP files now. Make a test file called test.php and put some
PHP tags in it. Like <?phpinfo()?>, for example.
QUICK INSTALL (Static)
$ gunzip -c apache_1.3.x.tar.gz | tar xf -
$ cd apache_1.3.x
$ ./configure
$ cd ..
$ gunzip -c php-4.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
(you should now have an httpd binary which you can copy to your Apache bin dir if
is is your first install then you need to "make install" as well)
$ cd ../php-4.0.x
$ cp php.ini-dist /usr/local/lib/php.ini
You can edit /usr/local/lib/php.ini file to set PHP options.
Edit your httpd.conf or srm.conf file and add:
AddType application/x-httpd-php .php
VERBOSE INSTALL
Chances are you are reading this because the quick install steps above
did not work for you. If this is the case, congratulations, you are
among the elite few that actually reads documentation. It really is
not a difficult install and once you have done it once you will fly
through it.
Installing PHP can be done in four simple steps:
1. Unpack your distribution file.
You will have downloaded a file named something like php-4.0.x.tar.gz.
Unzip this file with a command like: gunzip php-4.0.x.tar.gz
Next you have to untar it with: tar -xvf php-4.0.x.tar
This will create a php-4.0.x directory. cd into this new directory.
2a. Configure PHP (Dynamic Module) - Skip to 2b if you wish to build
a static module
You now have to choose the options you would like. There are quite
a few of them. To see a list, type: ./configure --help
The only options that you are likely to want to use are the ones in
the last section entitled, "--enable and --with options recognized:"
A popular choice is to build the Apache module version. In order to
build PHP as a dynamic module for Apache-1.3.x you have to first have
Apache installed. Assuming Apache is already installed, make sure
the shared object module is enabled. To check this, type: httpd -l
You should see something like:
Compiled-in modules:
http_core.c
mod_so.c
You will most likely have a lot more modules than what is shown here.
As long as mod_so.c shows up in the list, PHP should be happy.
Now, type: ./configure --with-mysql --with-apxs
If you get an error telling you that the apxs script could not be found,
look for it on your system and if you find it, provide the full path to it
as: --with-apxs=/path/to/apxs
You might also want other flags on this configure line. --with-mysql
is just an example.
There are a few things that can go wrong during this configure step.
The most common is that you have asked for an option and that the
configure script can not find the files required to enable this
option in PHP. Chances are you can provide the full path to the
base directory under which the related files were installed. For
example, if you have installed the GD library in /opt/gd which means
that /opt/gd/include has your GD header files and /opt/gd/lib contains
your GD library files, you would use --with-gd=/opt/gd
Skip to step 3 for compilation and installation instructions.
2b. Configure PHP (Static Module) - Skip if you performed 2a
You now have to choose the options you would like. There are quite
a few of them. To see a list, type: ./configure --help
The only options that you are likely to want to use are the ones in
the last section entitled, "--enable and --with options recognized:"
A popular choice is to build the Apache module version. You need
to know where the source code directory for your Apache server is
located. Then use an option like: --with-apache=/usr/local/src/apache
if that is your Apache source code directory. If you only specify
--with-apache, then it will default to look for your Apache source
in /usr/local/etc/httpd.
NOTE: The directory you specify should be the top-level of the
unpacked Apache (or Stronghold) distribution. The configure program
will automatically look for httpd.h in different directories under that
location depending on which version of Apache, including Stronghold,
you are running.
For MySQL support, since newer versions of MySQL installs its various
components under /usr/local, this is the default. If you have
changed the location you can specify it with: --with-mysql=/opt/local
for example. Otherwise just use: --with-mysql
*NOTE* If you are using Apache 1.3b6 or later, you should run the
Apache Configure script at least once before compiling PHP. It
doesn't matter how you have Apache configured at this point.
Skip to step 3b at this point.
3. Compile and install the files. Simply type: make install
3a. Dynamic Module Installation
Nothing else is needed here. Proceed to step 4a.
3b. Static Module Installation
For the Apache module version this will copy the appropriate files
to the src/modules/php4 directory in your Apache distribution if
you are using Apache 1.3.x. If you are still running Apache 1.2.x
these files will be copied directly to the main src directory.
For Apache 1.3b6 and later, you can use the new APACI configuration
mechanism. To automatically build Apache with PHP support, use:
cd apache_1.3.x
./configure --prefix=/<path>/apache \
--activate-module=src/modules/php4/libphp4.a
make
make install
If you do not wish to use this new configuration tool, the old
install procedure (src/Configure) will work fine.
If you are using the old Apache ./Configure script, you will have to
edit the Apache src/Configuration file manually. If you do not have
this file, copy Configuration.tmpl to Configuration.
For Apache 1.3.x add:
AddModule modules/php4/libphp4.a
For Apache 1.3.x don't do anything else. Just add this line and then
run "./Configure" followed by "make".
For Apache 1.2.x add:
Module php4_module mod_php4.o
For Apache 1.2.x you will also have to look in the libphp4.module file,
which was copied to the src directory. The EXTRA_LIBS line in the Apache
Configuration file needs to be set to use the same libs as specified on
the LIBS line in libphp4.module. You also need to make sure to add
"-L." to the beginning of the EXTRA_LIBS line.
So, as an example, your EXTRA_LIBS line might look like:
EXTRA_LIBS=-L. -lphp4 -lgdbm -ldb -L/usr/local/mysql/lib -lmysqlclient
NOTE: You should not enclose the EXTRA_LIBS line in double-quotes, as it
is in the libphp4.module file.
Also, look at the RULE_WANTHSREGEX setting in the libphp4.module file
and set the WANTHSREGEX directive accordingly in your Configuration file.
This last step applies to versions of Apache prior to 1.3b3.
This is a bit of a hassle, but should serve as incentive to move to
Apache 1.3.x where this step has been eliminated.
Once you are satisfied with your Configuration settings, type: ./Configure
If you get errors, chances are that you forgot a library or made a typo
somewhere. Re-edit Configuration and try again. If it goes well,
type: make
Assuming it compiles without errors, proceed to step 4b.
4a. Setting up the server. (Dynamic Module)
The make install command in step 3 should have done most of your
work for you. It actually edits your httpd.conf file and tries to
enable the dynamic PHP module. To verify this, look for a line that
looks like this:
LoadModule php4_module libexec/libphp4.so
The actual path before the libphp4.so part might differ slightly. This
is likely fine. If you are paranoid you can examine the output from the
make install step to see where the libphp4.so file was actually put and
place the full path to this file on this LoadModule line.
If somewhere in your httpd.conf file you have a ClearModuleList line
then you also need this line:
AddModule mod_php4.c
And finally you need to tell Apache which file extension should trigger
PHP. You do this by creating a special mime type and associating it
with an extension. We suggest using:
AddType application/x-httpd-php .php
You are however free to use any extension you wish, including .html.
Note! If a line has a # at the beginning, then it is commented out
and you need to remove the # for that line to take effect.
Finally you need to copy php.ini-dist to the appropriate place
(normally /usr/local/lib/php.ini) and edit if necessary.
Once you have made these changes you should be ready to restart your
server and try it out. Type: apachectl restart
4b. Setting up the server. (Static Module)
You should now have a new httpd binary. Shut down your existing server,
if you have one, and copy this new binary overtop of it. Perhaps make
a backup of your previous one first. Then edit your conf/httpd.conf file
and add the line:
AddType application/x-httpd-php .php
There is also an interesting feature which can be quite instructive and
helpful while debugging. That is the option of having colour syntax
highlighting. To enable this, add the following line:
AddType application/x-httpd-php-source .phps
Any file ending in .phps will now be displayed with full colour syntax
highlighting instead of being executed.
Note that on some older server setups, the AddType lines are in the
conf/srm.conf file instead of conf/httpd.conf.
Note! If a line has a # at the beginning, then it is commented out
and you need to remove the # for that line to take effect.
When you are finished making changes to your httpd.conf file, you need
to copy php.ini-dist to the appropriate place (normally
/usr/local/lib/php.ini) and edit if necessary. You can then
start up your server.
5. Testing it all worked
Create a test file named test.php in your web tree somewhere and
put some test PHP tags in it. <?phpinfo()?> is a good first test.
This tag tells PHP to do a braindump and tells you all sorts of things
about itself.
WHY DISABLING -fPIC WORKS ON LINUX
From: Martin v. Loewis <martin@loewis.home.cs.tu-berlin.de>
To: glibc-linux@ricardo.ecn.wfu.edu
Subject: Re: Shared library -shared vs. -fpic
[In reply to Kaz Kylheku <kaz@ashi.footprints.net>]
> PIC stands for Position-Independent Code.
Correct.
> Code isn't position-independent (or ``relocatable'') cannot be
> loaded at an arbitrary address;
Wrong.
> it requires some references to be patched at load time.
Correct.
> Shared libraries need to be relocatable because it's not known
> beforehand what address they will be loaded at
Correct, depending on the meaning of "relocatable". PIC code typically
does not contain relocations; that's why its position-independent.
> Just because you don't specify -fPIC doesn't mean that the compiler
> won't emit position-independent code; the option prevents it from
> emitting position-dependent code in situations where it otherwise
> would.
Correct. However, a non-trivial shared library typically won't be
position-independent unless explicitly compiled with
-fPIC. Linux/glibc indeed does not require a shared library to be
position-independent; instead, it will perform the relocations in the
binary, even if they refer to code pages. As a result, those relocated
pages won't be shared across processes, anymore.
Regards,
Martin
USING PHP 3 AND PHP 4 AS CONCURRENT APACHE MODULES
Recent operating systems provide the ability to perform versioning and
scoping. This features make it possible to let PHP 3 and PHP 4 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)
- IRIX64 6.5
To enable it, configure PHP 3 and PHP 4 to use APXS (--with-apxs) and the
necessary link extensions (--enable-versioning). Otherwise, all standard
installations instructions apply. For example:
$ ./configure \
--with-apxs=/apache/bin/apxs \
--enable-versioning \
--with-mysql \
--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
-75
View File
@@ -1,75 +0,0 @@
--------------------------------------------------------------------
The PHP License, version 2.02
Copyright (c) 1999, 2000 The PHP Group. All rights reserved.
--------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, is permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
3. The name "PHP" must not be used to endorse or promote products
derived from this software without prior 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.
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/".
6. The software incorporates the Zend Engine, a product of Zend
Technologies, Ltd. ("Zend"). The Zend Engine is licensed to the
PHP Association (pursuant to a grant from Zend that can be
found at http://www.php.net/license/ZendGrant/) for
distribution to you under this license agreement, only as a
part of PHP. In the event that you separate the Zend Engine
(or any portion thereof) from the rest of the software, or
modify the Zend Engine, or any portion thereof, your use of the
separated or modified Zend Engine software shall not be governed
by this license, and instead shall be governed by the license
set forth at http://www.zend.com/license/ZendLicense/.
THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND
ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP
DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------
This software consists of voluntary contributions made by many
individuals on behalf of the PHP Group.
The PHP Group can be contacted via Email at group@php.net.
For more information on the PHP Group and the PHP project,
please see <http://www.php.net>.
-62
View File
@@ -1,62 +0,0 @@
ZEND_DIR = $(srcdir)/Zend
SUBDIRS = Zend main ext sapi $(TSRM_DIR) $(REGEX_DIR) . $(PEAR_DIR)
LTLIBRARY_NAME = libphp4.la
LTLIBRARY_SOURCES = stub.c
LTLIBRARY_DEPENDENCIES = \
Zend/libZend.la \
sapi/$(PHP_SAPI)/libsapi.la \
main/libmain.la \
$(REGEX_LIB) \
$(EXT_LTLIBS) \
$(TSRM_LIB)
LTLIBRARY_LDFLAGS = -rpath $(phptempdir) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS)
LTLIBRARY_LIBADD = $(LTLIBRARY_DEPENDENCIES) $(EXTRA_LIBS)
PROGRAM_NAME = php
PROGRAM_SOURCES = stub.c
PROGRAM_LDADD = libphp4.la $(EXT_PROGRAM_LDADD)
PROGRAM_LDFLAGS = -export-dynamic
PROGRAM_DEPENDENCIES = $(PROGRAM_LDADD)
targets = $(LTLIBRARY_NAME) $(PHP_PROGRAM)
install_targets = install-sapi install-modules
include $(top_srcdir)/build/rules.mk
include $(top_srcdir)/build/library.mk
include $(top_srcdir)/build/program.mk
install-sapi:
@$(LIBTOOL) --silent --mode=install cp libphp4.la $(phptempdir)/libphp4.la >/dev/null 2>&1
-@$(mkinstalldirs) $(INSTALL_ROOT)$(bindir)
-@if test ! -r $(phptempdir)/libphp4.$(SHLIB_SUFFIX_NAME); then \
for i in 0.0.0 0.0 0; do \
if test -r $(phptempdir)/libphp4.$(SHLIB_SUFFIX_NAME).$$i; then \
$(LN_S) $(phptempdir)/libphp4.$(SHLIB_SUFFIX_NAME).$$i $(phptempdir)/libphp4.$(SHLIB_SUFFIX_NAME); \
break; \
fi; \
done; \
fi
$(INSTALL_IT)
install-modules:
@test -d modules && \
$(mkinstalldirs) $(INSTALL_ROOT)$(moduledir) && \
echo "installing shared modules into $(moduledir)" && \
rm -f modules/*.la && \
cp modules/* $(INSTALL_ROOT)$(moduledir) >/dev/null 2>&1 || true
install-tester:
-$(mkinstalldirs) $(datadir)
$(INSTALL) -m 755 $(srcdir)/run-tests.php $(INSTALL_ROOT)$(datadir)
install-pear: install-modules
(cd pear && $(MAKE) install)
install-su: install-pear install-tester
.NOEXPORT:
-1618
View File
File diff suppressed because it is too large. Load diff
-105
View File
@@ -1,105 +0,0 @@
This is the first file you should be reading after you get your CVS account.
We'll assume you're basically familiar with CVS, but feel free to post
your questions on the mailing list.
PHP is developed through the efforts of a large number of people.
Collaboration is a Good Thing(tm), and CVS lets us do this. Thus, following
some basic rules with regards to CVS usage will:
a. Make everybody happier, especially those responsible for maintaining
the CVS itself.
b. Keep the changes consistently well documented and easily trackable.
c. Prevent some of those 'Oops' moments.
d. Increase the general level of good will on planet Earth.
Having said that, here are the organizational rules:
1. Respect other people working on the project.
2. Discuss any significant changes on the list before committing.
3. Look at EXTENSIONS file to see who is the primary maintainer of
the code you want to contribute to.
4. If you "strongly disagree" about something another person did, don't
start fighting publicly - take it up in private email.
5. If you don't know how to do something, ask first!
6. Test your changes before committing them. We mean it. Really.
The next few rules are more of a technical nature.
1. DO NOT TOUCH ChangeLog! It is automagically updated from the commit
messages every day. Woe be to those who attempt to mess with it.
2. All news updates intended for public viewing, such as new features,
bug fixes, improvements, etc., should go into the NEWS file. Also see
the note below about automatically updating NEWS in your commit message.
3. Do not commit multiple file and dump all messages in one commit. If you
modified several unrelated files, commit each group separately and
provide a nice commit message for each one. See example below.
4. Do write your commit message in such a way that it makes sense even
without the corresponding diff. One should be able to look at it, and
immediately know what was modified. Definitely include the function name
in the message as shown below.
5. In your commit messages, keep each line shorter than 80 characters. And
try to align your lines vertically, if they wrap. It looks bad otherwise.
6. If you modified a function that is callable from PHP, prepend PHP to
the function name as shown below.
The format of the commit messages is pretty simple.
If a line begins with #, it is taken to be a comment and will not appear
in the ChangeLog. If the line begins with @, it will be redirected to the
NEWS file. Everything else goes into the ChangeLog.
It is important to note that if your comment or news logline spans multiple
lines, you have to put # or @ at the beginning of _every_ such line. Every
entry in NEWS has to have a name after it, so if you did it with someone's
help, put both your names there. Your name WILL NOT be automatically put
at the end of the NEWS entry - so, please provide it yourself.
Example. Say you modified two files, datetime.c and string.c. In datetime.c
you added a new format option for date() function, and in string.c you fixed
a memory leak in php_trim(). Don't commit both of these at once. Commit them
separately and try to make sure your commit messages look something like the
following.
For datetime.c:
(PHP date) Added new 'K' format modifier for printing out number of
days until New Year's Eve.
@- Added new 'K' format modifier that will output the number of days
@ until New Year's Eve. (Bob)
For string.c:
(php_trim) Fixed a memory leak resulting from improper use of zval_dtor().
# Man, that thing was leaking all over the place!
@- 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
-184
View File
@@ -1,184 +0,0 @@
WHAT IT IS
It's a tool for automatically creating the basic framework for a PHP module
and writing C code handling arguments passed to your functions from a simple
configuration file. See an example at the end of this file.
HOW TO USE IT
Very simple. First, cd do directory ext/ in PHP 4 sources. If you just need
the basic framework and will be writing all the code in your functions
yourself, you can now do
./ext_skel --extname=module_name
and everything you need is placed in directory module_name. In fact, if you
don't need to test the existence of any external header files, libraries or
functions in them, the module is already almost ready to be compiled in PHP.
Just remove 3 comments in your_module_name/config.m4, cd back up to PHP
sources top directory, and do
./buildconf; ./configure --enable-module_name; make
But if you already have planned the overall scheme of your module, what
functions it will contain, their return types and the arguments they take
(a very good idea) and don't want to bother yourself with creating function
definitions and handling arguments passed yourself, it's time to create a
function definitions file, which you will give as an argument to ext_skel
with option
--proto=filename.
FORMAT OF FUNCTION DEFINITIONS FILE
All the definitions must be on one line. In it's simplest form, it's just
the function name, ie.
my_function
but then you'll be left with an almost empty function body without any
argument handling.
Arguments are given in parenthesis after the function name, and are of
the form 'argument_type argument_name'. Arguments are separated from each
other with a comma and optional space. Argument_type can be one of int,
bool, double, float, string, array, object or mixed.
An optional argument is separated from the previous by an optional space,
then '[' and of course comma and optional space, like all the other
arguments. You should close a row of optional arguments with same amount of
']'s as there where '['s. Currently, it does not harm if you forget to do it
or there is a wrong amount of ']'s, but this may change in the future.
An additional short description may be added after the parameters.
If present it will be filled into the 'proto' header comments in the stubs
code and the <refpurpose> tag in the XML documentation.
An example:
my_function(int arg1, int arg2 [, int arg3 [, int arg4]]) this is my 1st
Arguments arg3 and arg4 are optional.
If possible, the function definition should also contain it's return type
in front of the definition. It's not actually used for any C code generating
purposes but PHP in-source documentation instead, and as such, very useful.
It can be any of int, double, string, bool, array, object, resource, mixed
or void.
The file must contain nothing else but function definitions, no comments or
empty lines.
OTHER OPTIONS
--no-help
By default, ext_skel creates both comments in the source code and a test
function to help first time module writers to get started and testing
configuring and compiling their module. This option turns off all such things
which may just annoy experienced PHP module coders. Especially useful with
--stubs=file
which will leave out also all module specific stuff and write just function
stubs with function value declarations and passed argument handling, and
function entries and definitions at the end of the file, for copying and
pasting into an already existing module.
--assign-params
--string-lens
By default, function proto 'void foo(string bar)' creates the following:
...
zval **bar;
... (zend_get_parameters_ex() called in the middle...)
convert_to_string_ex(bar);
Specifying both of these options changes the generated code to:
...
zval **bar_arg;
int bar_len;
char *bar = NULL;
... (zend_get_parameters_ex() called in the middle...)
convert_to_string_ex(bar_arg);
bar = Z_STRVAL_PP(bar_arg);
bar_len = Z_STRLEN_PP(bar_arg);
You shouldn't have to ask what happens if you leave --string-lens out. If you
have to, it's questionable whether you should be reading this document.
--with-xml[=file]
Creates the basics for phpdoc .xml file.
--full-xml
Not implemented yet. When or if there will ever be created a framework for
self-contained extensions to use phpdoc system for their documentation, this
option enables it on the created xml file.
CURRENT LIMITATIONS, BUGS AND OTHER ODDITIES
Only arguments of types int, bool, double, float, string and array are
handled. For other types you must write the code yourself. And for type
mixed, it wouldn't even be possible to write anything, because only you
know what to expect.
It can't handle correctly, and probably never will, variable list of
of arguments. (void foo(int bar [, ...])
Don't trust the generated code too much. It tries to be useful in most of
the situations you might encounter, but automatic code generation will never
beat a programmer who knows the real situation at hand. ext_skel is generally
best suited for quickly generating a wrapper for c-library functions you
might want to have available in PHP too.
This program doesn't have a --help option. It has --no-help instead.
EXAMPLE
The following _one_ line
bool my_drawtext(resource image, string text, resource font, int x, int y [, int color])
will create this function definition for you (note that there are a few
question marks to be replaced by you, and you must of course add your own
value definitions too):
/* {{{ proto bool my_drawtext(resource image, string text, resource font, int x, int y[, int color])
*/
PHP_FUNCTION(my_drawtext)
{
zval **image, **text, **font, **x, **y, **color;
int argc;
int image_id = -1;
int font_id = -1;
argc = ZEND_NUM_ARGS();
if (argc < 5 || argc > 6 || zend_get_parameters_ex(argc, &image, &text, &font, &x, &y, &color) == FAILURE) {
WRONG_PARAM_COUNT;
}
ZEND_FETCH_RESOURCE(???, ???, image, image_id, "???", ???_rsrc_id);
ZEND_FETCH_RESOURCE(???, ???, font, font_id, "???", ???_rsrc_id);
switch (argc) {
case 6:
convert_to_long_ex(color);
/* Fall-through. */
case 5:
convert_to_long_ex(y);
convert_to_long_ex(x);
/* font: fetching resources already handled. */
convert_to_string_ex(text);
/* image: fetching resources already handled. */
break;
default:
WRONG_PARAM_COUNT;
}
php_error(E_WARNING, "my_drawtext: not yet implemented");
}
/* }}} */
-57
View File
@@ -1,57 +0,0 @@
QNX4 Installation Notes
-----------------------
NOTE: General installation instructions are in the INSTALL file
1. To compile and test PHP3 you have to grab, compile and install:
- GNU dbm library or another db library;
- GNU bison (1.25 or later; 1.25 tested);
- GNU flex (any version supporting -o and -P options; 2.5.4 tested);
- GNU diffutils (any version supporting -w option; 2.7 tested);
2. To use CVS version you may need also:
- GNU CVS (1.9 tested);
- GNU autoconf (2.12 tested);
- GNU m4 (1.3 or later preferable; 1.4 tested);
3. To run configure define -lunix in command line:
LDFLAGS=-lunix ./configure
4. To use Sybase SQL Anywhere define ODBC_QNX and CUSTOM_ODBC_LIBS in
command line and run configure with --with-custom-odbc:
CFLAGS=-DODBC_QNX LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure --with-custom-odbc=/usr/lib/sqlany50
If you have SQL Anywhere version 5.5.00, then you have to add
CFLAGS=-DSQLANY_BUG
to workaround its SQLFreeEnv() bug. Other versions has not been tested,
so try without this flag first.
5. To build the Apache module, you may have to hardcode an include path for
alloc.h in your Apache base directory:
- APACHE_DIRECTORY/src/httpd.h:
change #include "alloc.h"
to #include "APACHE_DIRECTORY/src/alloc.h"
Unless you want to use system regex library, you have to hardcode also
a path to regex.h:
- APACHE_DIRECTORY/src/conf.h:
change #include <regex.h>
to #include "APACHE_DIRECTORY/src/regex/regex.h"
I don't know so far why this required for QNX, may be it is Watcom
compiler problem.
If you building Apache module with SQL Anywhere support, you'll get
symbol conflict with BOOL. It is defined in Apache (httpd.h) and in
SQL Anywhere (odbc.h). This has nothing to do with PHP, so you have to
fix it yourself someway.
6. With above precautions, it should compile as is and pass regression
tests completely:
make
make check
make install
Don't bother me unless you really sure you made that all but it
still doesn't work.
June 28, 1998
Igor Kovalenko -- owl@infomarket.ru
-174
View File
@@ -1,174 +0,0 @@
$Id$
=============================================================================
HOW TO CREATE A SELF-CONTAINED PHP EXTENSION
A self-contained extension can be distributed independently of
the PHP source. To create such an extension, three things are
required:
- Makefile template (Makefile.in)
- Configuration file (config.m4)
- Source code for your module
We will describe now how to create these and how to put things
together.
PREPARING YOUR SYSTEM
While the result will run on any system, a developer's setup needs these
tools:
GNU autoconf
GNU automake
GNU libtool
GNU m4
All of these are available from
ftp://ftp.gnu.org/pub/gnu/
CONVERTING AN EXISTING EXTENSION
Just to show you how easy it is to create a self-contained
extension, we will convert an embedded extension into a
self-contained one. Install PHP and execute the following
commands.
$ mkdir /tmp/newext
$ cd /tmp/newext
You now have an empty directory. We will copy the files from
the mysql extension:
$ cp -rp php-4.0.X/ext/mysql/* .
It is time to finish the module. Run:
$ phpize
You can now ship the contents of the directory - the extension
can live completely on its own.
The user instructions boil down to
$ ./configure \
[--with-php-config=/path/to/php-config] \
[--with-mysql=MYSQL-DIR]
$ make install
The MySQL module will either use the embedded MySQL client
library or the MySQL installation in MYSQL-DIR.
DEFINING THE NEW EXTENSION
Our demo extension is called "foobar".
It consists of two source files "foo.c" and "bar.c"
(and any arbitrary amount of header files, but that is not
important here).
The demo extension does not reference any external
libraries (that is important, because the user does not
need to specify anything).
CREATING THE MAKEFILE TEMPLATE
The Makefile Template (Makefile.in) contains three lines:
------------------------------------------------------------------------------
LTLIBRARY_SHARED_NAME = foobar.la
LTLIBRARY_SOURCES = foo.c bar.c
include $(top_srcdir)/build/dynlib.mk
------------------------------------------------------------------------------
LTLIBRARY_SHARED_NAME specifies the name of the extension.
It must be of the form `ext-name.la'.
LTLIBRARY_SOURCES specifies the names of the sources files. You can
name an arbitrary number of source files here.
The final include directive includes the build rules (you usually
don't need to care about what happens there). rules.mk and other
files are installed by phpize which we will cover later.
CREATING THE M4 CONFIGURATION FILE
The m4 configuration can perform additional checks. For a
self-contained extension, you do not need more than a few
macro calls.
------------------------------------------------------------------------------
PHP_ARG_ENABLE(foobar,whether to enable foobar,
[ --enable-foobar Enable foobar])
if test "$PHP_FOOBAR" != "no"; then
PHP_EXTENSION(foobar, $ext_shared)
fi
------------------------------------------------------------------------------
PHP_ARG_ENABLE will automatically set the correct variables, so
that the extension will be enabled by PHP_EXTENSION in shared mode.
Please use always PHP_ARG_ENABLE or PHP_ARG_WITH. Even if you do not
plan to distribute your module with PHP, these facilities allow you
to integrate your module easily into the main PHP module framework.
CREATING SOURCE FILES
ext_skel can be of great help when creating the common code for all modules
in PHP for you and also writing basic function definitions and C code for
handling arguments passed to your functions. See README.EXT_SKEL for further
information.
As for the rest, you are currently alone here. There are a lot of existing
modules, use a simple module as a starting point and add your own code.
CREATING THE SELF-CONTAINED EXTENSION
Put Makefile.in, config.m4 and the source files into one directory.
Then run phpize (this is installed during make install by PHP 4.0).
For example, if you configured PHP with --prefix=/php, you would run
$ /php/bin/phpize
This will automatically copy the necessary build files and create
configure from your config.m4.
And that's it. You now have a self-contained extension.
INSTALLING A SELF-CONTAINED EXTENSION
An extension can be installed by running:
$ ./configure \
[--with-php-config=/path/to/php-config]
$ make install
ADDING SHARED MODULE SUPPORT TO A MODULE
In order to be useful, a self-contained extension must be loadable
as a shared module. I will explain now how you can add shared module
support to an existing module called foo.
1. In config.m4, use PHP_ARG_WITH/PHP_ARG_ENABLE. Then you will
automatically be able to use --with-foo=shared or
--enable-foo=shared.
2. In config.m4, use PHP_EXTENSION(foo, $ext_shared) to enable
building the extension.
3. Add the following line to Makefile.in:
LTLIBRARY_SHARED_NAME = foo.la
4. Add the following lines to your C source file:
#ifdef COMPILE_DL_FOO
ZEND_GET_MODULE(foo)
#endif
-243
View File
@@ -1,243 +0,0 @@
An Overview of the PHP Streams abstraction
==========================================
$Id$
Please send comments to: Wez Furlong <wez@thebrainroom.com>
Note: this doc is preliminary and is intended to give the reader an idea of
how streams work and should be used.
Why Streams?
============
You may have noticed a shed-load of issock parameters flying around the PHP
code; we don't want them - they are ugly and cumbersome and force you to
special case sockets and files everytime you need to work with a "user-level"
PHP file pointer.
Streams take care of that and present the PHP extension coder with an ANSI
stdio-alike API that looks much nicer and can be extended to support non file
based data sources.
Using Streams
=============
Streams use a php_stream* parameter just as ANSI stdio (fread etc.) use a
FILE* parameter.
The main functions are:
PHPAPI size_t php_stream_read(php_stream * stream, char * buf, size_t count);
PHPAPI size_t php_stream_write(php_stream * stream, const char * buf, size_t
count);
PHPAPI int php_stream_eof(php_stream * stream);
PHPAPI int php_stream_getc(php_stream * stream);
PHPAPI char *php_stream_gets(php_stream * stream, char *buf, size_t maxlen);
PHPAPI int php_stream_close(php_stream * stream);
PHPAPI int php_stream_flush(php_stream * stream);
PHPAPI int php_stream_seek(php_stream * stream, off_t offset, int whence);
PHPAPI off_t php_stream_tell(php_stream * stream);
These (should) behave in the same way as the ANSI stdio functions with similar
names: fread, fwrite, feof, fgetc, fgets, fclose, fflush, fseek, ftell.
Opening Streams
===============
Ultimately, I aim to implement an fopen_wrapper-like call to do this with
minimum fuss.
Currently, mostly for testing purposes, you can use php_stream_fopen to open a
stream on a regular file.
PHPAPI php_stream * php_stream_fopen(const char * filename, const char *
mode);
This call behaves just like fopen(), except it returns a stream instead of a
FILE *
Casting Streams
===============
What if your extension needs to access the FILE* of a user level file pointer?
You need to "cast" the stream into a FILE*, and this is how you do it:
FILE * fp;
php_stream * stream; /* already opened */
if (php_stream_cast(stream, PHP_STREAM_AS_STDIO, &fp, 1) == FAILURE) {
RETURN_FALSE;
}
The prototype is:
PHPAPI int php_stream_cast(php_stream * stream, int castas, void ** ret, int
show_err);
The show_err parameter, if non-zero, will cause the function to display an
appropriate error message of type E_WARNING if the cast fails.
castas can be one of the following values:
PHP_STREAM_AS_STDIO - a stdio FILE*
PHP_STREAM_AS_FD - a generic file descriptor
PHP_STREAM_AS_SOCKETD - a socket descriptor
If you ask a socket stream for a FILE*, the abstraction will use fdopen to
create it for you. Be warned that doing so may cause buffered data to be lost
if you mix ANSI stdio calls on the FILE* with php stream calls on the stream.
If your system has the fopencookie function, php streams can synthesize a
FILE* on top of any stream, which is useful for SSL sockets, memory based
streams, data base streams etc. etc.
NOTE: There might be situations where this is not desireable, and we need to
provide a flag to inform the casting routine of this.
You can use:
PHPAPI int php_stream_can_cast(php_stream * stream, int castas)
to find out if a stream can be cast, without actually performing the cast, so
to check if a stream is a socket you might use:
if (php_stream_can_cast(stream, PHP_STREAM_AS_SOCKETD) == SUCCESS) {
/* it's a socket */
}
Stream Internals
================
There are two main structures associated with a stream - the php_stream
itself, which holds some state information (and possibly a buffer) and a
php_stream_ops structure, which holds the "virtual method table" for the
underlying implementation.
The php_streams ops struct consists of pointers to methods that implement
read, write, close, flush, seek, gets and cast operations. Of these, an
implementation need only implement write, read, close and flush. The gets
method is intended to be used for non-buffered streams if there is an
underlying method that can efficiently behave as fgets. The ops struct also
contains a label for the implementation that will be used when printing error
messages - the stdio implementation has a label of "STDIO" for example.
The idea is that a stream implementation defines a php_stream_ops struct, and
associates it with a php_stream using php_stream_alloc.
As an example, the php_stream_fopen() function looks like this:
PHPAPI php_stream * php_stream_fopen(const char * filename, const char * mode)
{
FILE * fp = fopen(filename, mode);
php_stream * ret;
if (fp) {
ret = php_stream_alloc(&php_stream_stdio_ops, fp, 0, 0, mode);
if (ret)
return ret;
fclose(fp);
}
return NULL;
}
php_stream_stdio_ops is a php_stream_ops structure that can be used to handle
FILE* based streams.
A socket based stream would use code similar to that above to create a stream
to be passed back to fopen_wrapper (or it's yet to be implemented successor).
The prototype for php_stream_alloc is this:
PHPAPI php_stream * php_stream_alloc(php_stream_ops * ops, void * abstract,
size_t bufsize, int persistent, const char * mode)
ops is a pointer to the implementation,
abstract holds implementation specific data that is relevant to this instance
of the stream,
bufsize is the size of the buffer to use - if 0, then buffering at the stream
level will be disabled (recommended for underlying sources that implement
their own buffering - such a FILE*),
persistent controls how the memory is to be allocated - persistently so that
it lasts across requests, or non-persistently so that it is freed at the end
of a request (it uses pemalloc),
mode is the stdio-like mode of operation - php streams places no real meaning
in the mode parameter, except that it checks for a 'w' in the string when
attempting to write (this may change).
The mode parameter is passed on to fdopen/fopencookie when the stream is cast
into a FILE*, so it should be compatible with the mode parameter of fopen().
Writing your own stream implementation
======================================
First, you need to figure out what data you need to associate with the
php_stream. For example, you might need a pointer to some memory for memory
based streams, or if you were making a stream to read data from an RDBMS like
mysql, you might want to store the connection and rowset handles.
The stream has a field called abstract that you can use to hold this data.
If you need to store more than a single field of data, define a structure to
hold it, allocate it (use pemalloc with the persistent flag set
appropriately), and use the abstract pointer to refer to it.
For structured state you might have this:
struct my_state {
MYSQL conn;
MYSQL_RES * result;
};
struct my_state * state = pemalloc(sizeof(struct my_state), persistent);
/* initialize the connection, and run a query, using the fields in state to
* hold the results */
state->result = mysql_use_result(&state->conn);
/* now allocate the stream itself */
stream = php_stream_alloc(&my_ops, state, 0, persistent, "r");
/* now stream->abstract == state */
Once you have that part figured out, you can write your implementation and
define the your own php_stream_ops struct (we called it my_ops in the above
example).
For example, for reading from this wierd mysql stream:
static size_t php_mysqlop_read(php_stream * stream, char * buf, size_t count)
{
struct my_state * state = (struct my_state*)stream->abstract;
if (buf == NULL && count == 0) {
/* in this special case, php_streams is asking if we have reached the
* end of file */
if (... at end of file ...)
return EOF;
else
return 0;
}
/* pull out some data from the stream and put it in buf */
... mysql_fetch_row(state->result) ...
/* we could do something strange, like format the data as XML here,
and place that in the buf, but that brings in some complexities,
such as coping with a buffer size too small to hold the data,
so I won't even go in to how to do that here */
}
Implement the other operations - remember that write, read, close and flush
are all mandatory. The rest are optional. Declare your stream ops struct:
php_stream_ops my_ops = {
php_mysqlop_write, php_mysqlop_read, php_mysqlop_close,
php_mysqlop_flush, NULL, NULL, NULL,
"Strange mySQL example"
}
Thats it!
Take a look at the STDIO implementation in streams.c for more information
about how these operations work.
The main thing to remember is that in your close operation you need to release
and free the resources you allocated for the abstract field. In the case of
the example above, you need to use mysql_free_result on the rowset, close the
connection and then use pefree to dispose of the struct you allocated.
You may read the stream->persistent field to determine if your struct was
allocated in persistent mode or not.
vim:tw=78
-126
View File
@@ -1,126 +0,0 @@
Using PHP4 with the Zeus Web Server
-----------------------------------
Zeus fully supports running PHP in combination with our
webserver. There are three different interfaces that can be used to
enable PHP:
* CGI
* ISAPI
* FastCGI
Of the three, we recommend using FastCGI, which has been tested and
benchmarked as providing the best performance and reliability.
Full details of how to install PHP are available from our
website, at:
http://support.zeus.com/products/php.html
If you have any problems, please check the support site for more
up-to-date information and advice.
Quick guide to installing FastCGI with Zeus
-------------------------------------------
Step 1 - obtain and install FastCGI development kit.
Grab the package from:
http://www.fastcgi.com/dist/devkit_2.2.0.tar.gz
Extract the package and follow the instructions:
./configure
make
make export
(run the last as root)
This will install to /usr/local/lib/libfcgi.a
and /usr/local/include/*fcgi*
Step 2 - Compile PHP as FastCGI.
Compile as follows:
./configure --with-fastcgi
make
Note that PHP has many options to the configure script -
e.g. --with-mysql. You will probably want to select your usual options
before compiling; the above is just a bare minimum, for illustration.
After compilation finishes, you will be left with an executable
program called 'php'. Copy this into your document root, under a
dedicated FastCGI directory (e.g. $DOCROOT/fcgi-bin/php)
Step 3 - configure Zeus
Four stages:
- enable FastCGI
- configure FastCGI
- setup alias for FastCGI
- setup alias for PHP
1) Using the admin server, go to the 'module configuration' page for
your virtual server, and ensure that 'fastcgi' is enabled (select the
tickbox to the left).
2) While we can run FastCGI's locally, there are known problems with
some OS's (specifically, the communication between web server and
FastCGI happens over a unix domain socket, and some OS's have trouble
sustaining high connection rates over these sockets). So instead, we
are going to set up the PHP FastCGI to run 'remotely' over localhost
(this uses TCP sockets, which do not suffer this problem). Go to the
'fastcgi configuration' page, and under 'add remote fastcgi':
Add Remote FastCGI
Docroot path /fcgi-bin/php
Remote machine localhost:8002
The first entry is where you saved PHP, above.
The second entry is localhost:<any unused port>
We will start the FastCGI listening on this port shortly.
Click 'update' to commit these changes.
3) Go to the path mapping module and add an alias for FastCGI:
Add Alias
Docroot path /fcgi-bin
Filesystem directory /path/to/docroot/fcgi-bin
Alias type fastcgi
Click 'update' to commit these changes
4) Also on the path mapping module, add a handler for PHP:
Add handler
File extension php
Handler /fcgi-bin/php
Click 'update' to commit these changes
Finally restart your virtual server for these changes to take effect.
Step 4 - start PHP as a FastCGI runner
When you start PHP, it will pre-fork a given number of child processes
to handle incoming PHP requests. Each process will handle a given
number of requests before exiting (and being replaced by a newly
forked process). You can control these two parameters by setting the
following environment variables BEFORE starting the FastCGI runner:
PHP_FCGI_CHILDREN - the number of child processes to pre-fork. If not
set, defaults to 8.
PHP_FCGI_MAX_REQUESTS - the number of requests each PHP child process
handles before exiting. If not set, defaults to 500.
To start the FastCGI runner, execute '$ZEUSHOME/web/bin/fcgirunner
8002 $DOCROOT/fcgi-bin/php'. Substitute the appropriate values for
$ZEUSHOME and $DOCROOT; also substitute for 8002 the port you chose,
above.
To stop the runner (e.g. to experiment with the above environment
variables) you will need to manually stop and running PHP
processes. (Use 'ps' and 'kill'). As it is PHP which is forking lots
of children and not the runner, Zeus unfortunately cannot keep track
of what processes are running, sorry. A typical command line may look
like 'ps -efl | grep $DOCROOT/fcgi-bin/php | grep -v grep | awk
'{print $4}' | xargs kill'
-186
View File
@@ -1,186 +0,0 @@
Advisory on the PHP Release Cycle
Copyright & Liciencing
This Document is (c) Copyright 2000,2001 by The PHP Group
This Document is distributed under the terms of 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.
Table of Contents
1. Introduction
2. Dealing with bugs
2.1 As a QA Team Member
2.2 As a Developer
3. Releaseing another RC
4. CVS During the Release Process
4.1 Useful CVS Commands
5 The Final Release
6 Summary
1. Introduction
This cycle should take place over roughly 10 days. When it is
decided it is time for an Release to occur Andi/Zeev (Or
Whoever) will tarball RC1, Tag & Branch CVS (see section 4)
and then announce the RC on PHP-QA and PHP-DEV. At this
point the build tracker and QA Bug System come into play.
If you successfully build PHP then report it in the build
tracker, If you then run and complete all the tests you
should report this too in the build tracker when
these features become avalible.
2. Dealing with Bugs
2.1 As a QA Team member
If you find a bug in an RC that you think is a showstopper
then, even if it is a known bug, you should report it in the
QA Bug system. This marks the bug for discussion at least,
and preferably fixing before the actual release. This system
is separate from the main bugs system so that important bugs
dont get lost in the midst if lots of feature/change request
in the approach to a release. It is imperitive where
appropraite that as a QA'er a test script, Configure options
and PHP.ini files are provided to enable the developer to
reproduce the bug, this is an important part of our job. If
you have a serious bug then you should also create a test
script to be added to the tests dir of the php source so
that at the end of the process to enable us to make sure bug
does not return. It is not difficult to create these test
scripts and a readme on it can be found in
php4/tests/README.
2.2 As a Developer
What should happen is that when a bug is reported it
is send to php-dev and php-qa as with other bugs. We should
have far stricter assignment system in this bug cycle rather
than just leaving them. Once again bugs should be able to be
marked as To Be Fixed Before release or moved to other bug
system. (This is currently the Release Masters responsibility)
Then before the actual release the qa bugs system can be
checked and if there are outstanding To Be Fixed Before
release bugs the Developers can see this easyly rather than
show stoppers being dismissed and not worried about.
When a bug is fixed the QAer who reported the bug is emailed
and asked to test again and see if the bug is fixed.
3 Releasing another RC
If it is felt necessary that a 2nd RC is needed then it
should be packaged as before and announced to both lists
again. The testing process then starts again, the RC2 is
added to the build tracker and QA'ers are asked to build and
retest the scripts as appropriate, espectially if you
reported a bug, you should test thourghly for your
bug and make sure it no longer occurs. This will normally
add anouther 3 days to the cycle, giving QA'ers time to
build test and report back, then for developers to
fix any problems.
4 CVS during the release process
At the point where the first RC is create a branch is
formed. This branch is not altered form that point onward
other than major bug fixes. Minor non important bug
fixes should not be applied to this branch but to the main
tree instead. Any major bug fixes should be applied to both
trees. The developer should test and check the RC tree then
also test and check the MAIN tree. This is their
responsibility to make sure (as far as possible) that the
bug fix works on both trees.
4.1 Useful CVS Commands
To create a Branch <Should only be done by person tarballing
the RC (The Release Master)>:
$ cvs tag -b php_4_0_<Version>RC<NUMBER>
IE:
$ cvs tag -b php_4_0_1RC1
This should be executed in the PHP directory of an up to
date checkout. Remember to also tag the Zend and TSRM repositories.
You can retrieve a branch in one of two ways: by checking it
out fresh from the repository, or by switching an existing
working copy over to the branch, I would suggest you
checkout a new copy.
To check out a new copy:
$ cvs checkout -r php_4_0_<Version>RC<NUMBER> php4
IE:
$ cvs checkout -r php_4_0_1RC1 php4
To switch a working copy (Not recomended due to possible
commiting to wrong branch)
$ cvs update -r php_4_0_<Version>RC<NUMBER> php4
IE:
$ cvs update -r php_4_0_1RC1 php4
This should be done in the PHP4 directory itself.
To revert back to normal branch you should use the
following:
$ cvs update -A
To Commit to the branch you follow exactly the same
procedure as normal
$ cvs commit file.c
MAKE SURE YOU DO NOT COMMIT TO THE WRONG BRANCH.
5 The Final Release
When it is time to make the final release the following
proceedure should be followed. The person who is tarballing
the final release should check the QA bugs system and make
sure there are no showstoppers left unfixed. If there are
then bug the person the bug is assigned to until they fix
it. If there are no more qa bugs then they should tag the
branch as php_4_0_<Version> and tarball as usual. An email
should be sent to PHP-GEN, PHP_DEV and PHP-QA about the new
release and it should be added to php.net. The windows
binaries and servelets should be built as soon as possible
and added too, as should the windows installer.
6 Summary
Here is a summary of what a release cycle might look like:
Thurs: RC is agreed on and packaged, an email is sent to
PHP_QA and PHP-DEV, the CVS is Branched and the
Release Cycle Begins.
Mon: After a weekends testing most show stoppers should
have been found (Hopefully) and the developers get to
work on fixing them.
Thurs: A second RC is released if needed with the new bug
fixes in and the QAers test again.
Sun: A review is made of all outstanding bugs and any show
stoppers should be fixed. if there are no show
stoppers then the final release is packaged and
released on the monday morning on php.net
Mon: Release is made.
James
--
James Moore
PHP QA Team
jmoore@php.net
-142
View File
@@ -1,142 +0,0 @@
Things to do or at least think about doing in the future. Name in
parenthesis means that person has taken on this project.
Zend
----
* allow foreach ($array as $k => &$val) syntax. right now we cannot
traverse an array without copying each element.
* allow foreach ($array as $k => list($a, $b)) syntax for multi
dimensional arrays.
* look at replacing c-lib call tolower().
* make hash API functions work with HASH_OF() to save time.
* native large number support (probably with GNU GMP)
* Const'ify APIs. Right now, many functions leave parameters untouched,
but don't declare those as const. This makes interaction with other
interfaces difficult which pass const parameters to us.
* add try..catch/throw exception handling
global
------
* when used in standalone (skell-script like) mode don't urldecode
arguments passed to php. right now it's not possible to say
/usr/local/bin/php somescript.php dog+cat.txt
as "dog+cat.txt" will arrive in php as "dog cat.txt".
* make everything on the language-level independent of your locale setings.
* always build the standalone executable as well as the chosen SAPI
target.
* make sure all source files have the "right" copyright.
* the following modules still use PHP3_TLS_*() macros (and thereby don't
work in ZTS mode): ext/db/db.c, ext/gd/gd.c
* make sure that all ZTS globals get destructed. Most ts_allocate_id()
calls should have a dtor entry.
* activate all extensions by default that don't rely on external
dependices. (eg ftp)
* --enable-all in configure. (--enable-shared=max ...)
* make configure print out a summary when it's done (like XEmacs)
* replace standard functions which work on static data with
reentrancy-safe functions (DONE?).
* on some platforms unimplemented function will just do nothing (e.g. symlink)
they should print a warning or not even be defined!
* implement javadoc based function docs template system.
* use thread-safe resolver functions (either require BIND 8 or adns).
* provide optional IPv6 support.
* make SAPI conform to CGI/1.1. Currently, all SAPI modules
define REMOTE_ADDR etc. themselves and reach only various level
of compliance.
* find a better way to implement script timeouts. SIGVTALRM is used
by some POSIX threads implementations (i.e. OpenBSD) and is not
available in ZTS mode.
* add aliases to functions to conform to new naming conventions, e.g.
str_to_upper().
* see what functions might need to be changed to use HashPosition, so
that the internal array pointer is not affected.
documentation
-------------
* add remarks in the documentation which functions are not implemented on win32.
* add remarks in the documentation which functions are not binary-safe.
* improve documentation for the sablotron extension
* update curl documentation
* write documentation for the bzip2 extension
* write documentation for the zziplib extension
ext/curl
--------
* Use the cURL write handler to save data for use when returning data or outputting
data.
* Have a warning scheme for when people use unsupported features.
ext/dav
--------
* rewrite.
ext/oci8
--------
* all OCIFetch*() functions should return 0 for no more data and false on error.
* have a flag that trims trailing spaces from CHAR fields on retrieval.
* make allow_call_time_pass_reference=Off working.
* for additional todo information, see oci8.c, in ext/oci8
ext/pcre
--------
* Allow user to set PCRE_NOTEMPTY, PCRE_ANCHORED at execution time, maybe
* add option to preg_grep() to return entries that _don't_ match
ext/sablot
----------
* Re-write the error handling and reporting interface
* Cleanup the underlying code a bit
* Add proper support for the message handlers
ext/session
-----------
* maybe implement finer-grained session variables that could be
locked individually.
* write a network-transparent storage back-end with fallover
facilities
* provide a callback facility which is executed upon encountering
an unknown classname during deserialization
ext/sockets
-----------
* Make the extension work on windows (Daniel Beulshausen)
* Make the extension work with Solaris and the Sun GCC
ext/standard
------------
* add a version number to data serialized via serialize().
* array_add(). (Andrei)
* possibly modify parsing of GPC data to automatically create arrays if
variable name is seen more than once.
* implement regex-cache for url-functions.
* stri_replace(). (Andrei)
* move socket related functions to fsock.c.
* NOT binary safe:
strtok()
basename()
dirname()
strrpos()
strrchr()
strip_tags()
* rewrite win32 SMTP code to be useable for *ix to, maybe as a (default)
module of its own (Hartmut)
ext/zziplib
------------
* more fully support the zziplib api
ext/wddx
--------
* See if we can support the remaining datatypes:
dateTime
binary
recordset
http://www.wddx.org/WDDX_SDK_10a/7__References/WDDX_DTD.htm
(Andrei)
* implement wddx_packet_as_javascript(). (Andrei)
other cool stuff
----------------
* PVM extension
-35
View File
@@ -1,35 +0,0 @@
* Change the odbc_fetch_into() function to require ALWAYS the first two
parameters ($conn_id and $array), and make the third (row) be optional.
* Remove --with-openlink configure option (--with-iodbc replaces it).
* Always build CGI (--disable-cgi option to disable).
* Move most extensions and PEAR packages out of the PHP CVS tree,
include them again during release packaging.
* Renaming functions, so that they all are conform to one standard form.
* Allow foreach($array as $key => &$value).
* Allow foreach($array as list($var1, $var2)).
* Clean up "$instance = &new object" syntax (default to the =& behaviour?).
* Allow to set a default value for call-by-reference-parameters. eg:
function hallo (&$pallo = NULL) {}
* Change PHP error messages, so that they point to pages or sections in the
PHP Manual.
* Fix Zend shallow copy issues with objects and arrays.
* Make all extensions thread-safe.
* Finish PHP streams abstraction, nuke all that issock stuff, implement SSL
socket support. (wez)
- ext/ftp/ -> all FILEs to streams
- ext/bz2/ -> convert to stream impl.
* Using arg_separator.input to implode args in the CGI sapi extension
and arg_separator.input to explode in php_build_argv().
-26
View File
@@ -1,26 +0,0 @@
Copyright (c) 1999, 2000, Andi Gutmans, Sascha Schumann, Zeev Suraski.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
- Neither name of the copyright holders nor the names of their contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-6
View File
@@ -1,6 +0,0 @@
## process this file with automake to produce Makefile.am
AUTOMAKE_OPTIONS=foreign
noinst_LTLIBRARIES=libtsrm.la
libtsrm_la_SOURCES = TSRM.c tsrm_strtok_r.c tsrm_virtual_cwd.c
depend:
-2
View File
@@ -1,2 +0,0 @@
- Improve the lock in ts_resource_ex() in order to cover less code.
This can probably be done by more careful hash table access
-588
View File
@@ -1,588 +0,0 @@
/*
+----------------------------------------------------------------------+
| Thread Safe Resource Manager |
+----------------------------------------------------------------------+
| Copyright (c) 1999, 2000, Andi Gutmans, Sascha Schumann, Zeev Suraski|
| This source file is subject to the TSRM license, that is bundled |
| with this package in the file LICENSE |
+----------------------------------------------------------------------+
| Authors: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#include "TSRM.h"
#ifdef ZTS
#include <stdio.h>
#include <stdlib.h>
#if HAVE_STDARG_H
#include <stdarg.h>
#endif
typedef struct _tsrm_tls_entry tsrm_tls_entry;
struct _tsrm_tls_entry {
void **storage;
int count;
THREAD_T thread_id;
tsrm_tls_entry *next;
};
typedef struct {
size_t size;
ts_allocate_ctor ctor;
ts_allocate_dtor dtor;
} tsrm_resource_type;
/* The memory manager table */
static tsrm_tls_entry **tsrm_tls_table=NULL;
static int tsrm_tls_table_size;
static ts_rsrc_id id_count;
/* The resource sizes table */
static tsrm_resource_type *resource_types_table=NULL;
static int resource_types_table_size;
static MUTEX_T tsmm_mutex; /* thread-safe memory manager mutex */
/* New thread handlers */
static tsrm_thread_begin_func_t tsrm_new_thread_begin_handler;
static tsrm_thread_end_func_t tsrm_new_thread_end_handler;
/* Debug support */
int tsrm_error(int level, const char *format, ...);
/* Read a resource from a thread's resource storage */
static int tsrm_error_level;
static FILE *tsrm_error_file;
#if TSRM_DEBUG
#define TSRM_ERROR(args) tsrm_error args
#define TSRM_SAFE_RETURN_RSRC(array, offset, range) \
{ \
int unshuffled_offset = TSRM_UNSHUFFLE_RSRC_ID(offset); \
\
if (offset==0) { \
return &array; \
} else if ((unshuffled_offset)>=0 && (unshuffled_offset)<(range)) { \
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Successfully fetched resource id %d for thread id %ld - 0x%0.8X", \
unshuffled_offset, (long) thread_resources->thread_id, array[unshuffled_offset])); \
return array[unshuffled_offset]; \
} else { \
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Resource id %d is out of range (%d..%d)", \
unshuffled_offset, TSRM_SHUFFLE_RSRC_ID(0), TSRM_SHUFFLE_RSRC_ID(thread_resources->count-1))); \
return NULL; \
} \
}
#else
#define TSRM_ERROR
#define TSRM_SAFE_RETURN_RSRC(array, offset, range) \
if (offset==0) { \
return &array; \
} else { \
return array[TSRM_UNSHUFFLE_RSRC_ID(offset)]; \
}
#endif
#if defined(PTHREADS)
/* Thread local storage */
static pthread_key_t tls_key;
#elif defined(TSRM_ST)
static int tls_key;
#elif defined(TSRM_WIN32)
static DWORD tls_key;
#endif
/* Startup TSRM (call once for the entire process) */
TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_level, char *debug_filename)
{
#if defined(GNUPTH)
pth_init();
#elif defined(PTHREADS)
pthread_key_create( &tls_key, 0 );
#elif defined(TSRM_ST)
st_init();
st_key_create(&tls_key, 0);
#elif defined(TSRM_WIN32)
tls_key = TlsAlloc();
#endif
tsrm_error_file = stderr;
tsrm_error_set(debug_level, debug_filename);
tsrm_tls_table_size = expected_threads;
tsrm_tls_table = (tsrm_tls_entry **) calloc(tsrm_tls_table_size, sizeof(tsrm_tls_entry *));
if (!tsrm_tls_table) {
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate TLS table"));
return 0;
}
id_count=0;
resource_types_table_size = expected_resources;
resource_types_table = (tsrm_resource_type *) calloc(resource_types_table_size, sizeof(tsrm_resource_type));
if (!resource_types_table) {
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate resource types table"));
free(tsrm_tls_table);
tsrm_tls_table = NULL;
return 0;
}
tsmm_mutex = tsrm_mutex_alloc();
tsrm_new_thread_begin_handler = tsrm_new_thread_end_handler = NULL;
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Started up TSRM, %d expected threads, %d expected resources", expected_threads, expected_resources));
return 1;
}
/* Shutdown TSRM (call once for the entire process) */
TSRM_API void tsrm_shutdown(void)
{
int i;
if (tsrm_tls_table) {
for (i=0; i<tsrm_tls_table_size; i++) {
tsrm_tls_entry *p = tsrm_tls_table[i], *next_p;
while (p) {
int j;
next_p = p->next;
for (j=0; j<id_count; j++) {
free(p->storage[j]);
}
free(p->storage);
free(p);
p = next_p;
}
}
free(tsrm_tls_table);
tsrm_tls_table = NULL;
}
if (resource_types_table) {
free(resource_types_table);
resource_types_table=NULL;
}
tsrm_mutex_free(tsmm_mutex);
tsmm_mutex = NULL;
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Shutdown TSRM"));
if (tsrm_error_file!=stderr) {
fclose(tsrm_error_file);
}
#if defined(GNUPTH)
pth_kill();
#elif defined(PTHREADS)
pthread_key_delete(tls_key);
#elif defined(TSRM_WIN32)
TlsFree(tls_key);
#endif
}
/* allocates a new thread-safe-resource id */
TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor)
{
int i;
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Obtaining a new resource id, %d bytes", size));
tsrm_mutex_lock(tsmm_mutex);
/* obtain a resource id */
*rsrc_id = TSRM_SHUFFLE_RSRC_ID(id_count++);
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Obtained resource id %d", *rsrc_id));
/* store the new resource type in the resource sizes table */
if (resource_types_table_size < id_count) {
resource_types_table = (tsrm_resource_type *) realloc(resource_types_table, sizeof(tsrm_resource_type)*id_count);
if (!resource_types_table) {
tsrm_mutex_unlock(tsmm_mutex);
TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate storage for resource"));
*rsrc_id = 0;
return 0;
}
resource_types_table_size = id_count;
}
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].size = size;
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].ctor = ctor;
resource_types_table[TSRM_UNSHUFFLE_RSRC_ID(*rsrc_id)].dtor = dtor;
/* enlarge the arrays for the already active threads */
for (i=0; i<tsrm_tls_table_size; i++) {
tsrm_tls_entry *p = tsrm_tls_table[i];
while (p) {
if (p->count < id_count) {
int j;
p->storage = (void *) realloc(p->storage, sizeof(void *)*id_count);
for (j=p->count; j<id_count; j++) {
p->storage[j] = (void *) malloc(resource_types_table[j].size);
if (resource_types_table[j].ctor) {
resource_types_table[j].ctor(p->storage[j], &p->storage);
}
}
p->count = id_count;
}
p = p->next;
}
}
tsrm_mutex_unlock(tsmm_mutex);
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Successfully allocated new resource id %d", *rsrc_id));
return *rsrc_id;
}
static void allocate_new_resource(tsrm_tls_entry **thread_resources_ptr, THREAD_T thread_id)
{
int i;
TSRM_ERROR((TSRM_ERROR_LEVEL_CORE, "Creating data structures for thread %x", thread_id));
(*thread_resources_ptr) = (tsrm_tls_entry *) malloc(sizeof(tsrm_tls_entry));
(*thread_resources_ptr)->storage = (void **) malloc(sizeof(void *)*id_count);
(*thread_resources_ptr)->count = id_count;
(*thread_resources_ptr)->thread_id = thread_id;
(*thread_resources_ptr)->next = NULL;
#if defined(PTHREADS)
/* Set thread local storage to this new thread resources structure */
pthread_setspecific(tls_key, (void *) *thread_resources_ptr);
#elif defined(TSRM_ST)
st_thread_setspecific(tls_key, (void *) *thread_resources_ptr);
#elif defined(TSRM_WIN32)
TlsSetValue(tls_key, (void *) *thread_resources_ptr);
#endif
if (tsrm_new_thread_begin_handler) {
tsrm_new_thread_begin_handler(thread_id, &((*thread_resources_ptr)->storage));
}
for (i=0; i<id_count; i++) {
(*thread_resources_ptr)->storage[i] = (void *) malloc(resource_types_table[i].size);
if (resource_types_table[i].ctor) {
resource_types_table[i].ctor((*thread_resources_ptr)->storage[i], &(*thread_resources_ptr)->storage);
}
}
tsrm_mutex_unlock(tsmm_mutex);
if (tsrm_new_thread_end_handler) {
tsrm_new_thread_end_handler(thread_id, &((*thread_resources_ptr)->storage));
}
}
/* fetches the requested resource for the current thread */
TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id)
{
THREAD_T thread_id;
int hash_value;
tsrm_tls_entry *thread_resources;
if (!th_id) {
#if defined(PTHREADS)
/* Fast path for looking up the resources for the current
* thread. Its used by just about every call to
* ts_resource_ex(). This avoids the need for a mutex lock
* and our hashtable lookup.
*/
thread_resources = pthread_getspecific(tls_key);
#elif defined(TSRM_ST)
thread_resources = st_thread_getspecific(tls_key);
#elif defined(TSRM_WIN32)
thread_resources = TlsGetValue(tls_key);
#else
thread_resources = NULL;
#endif
if (thread_resources) {
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Fetching resource id %d for current thread %d", id, (long) thread_resources->thread_id));
/* Read a specific resource from the thread's resources.
* This is called outside of a mutex, so have to be aware about external
* changes to the structure as we read it.
*/
TSRM_SAFE_RETURN_RSRC(thread_resources->storage, id, thread_resources->count);
}
thread_id = tsrm_thread_id();
} else {
thread_id = *th_id;
}
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Fetching resource id %d for thread %ld", id, (long) thread_id));
tsrm_mutex_lock(tsmm_mutex);
hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
thread_resources = tsrm_tls_table[hash_value];
if (!thread_resources) {
allocate_new_resource(&tsrm_tls_table[hash_value], thread_id);
return ts_resource_ex(id, &thread_id);
} else {
do {
if (thread_resources->thread_id == thread_id) {
break;
}
if (thread_resources->next) {
thread_resources = thread_resources->next;
} else {
allocate_new_resource(&thread_resources->next, thread_id);
return ts_resource_ex(id, &thread_id);
/*
* thread_resources = thread_resources->next;
* break;
*/
}
} while (thread_resources);
}
tsrm_mutex_unlock(tsmm_mutex);
/* Read a specific resource from the thread's resources.
* This is called outside of a mutex, so have to be aware about external
* changes to the structure as we read it.
*/
TSRM_SAFE_RETURN_RSRC(thread_resources->storage, id, thread_resources->count);
}
/* frees all resources allocated for the current thread */
void ts_free_thread(void)
{
tsrm_tls_entry *thread_resources;
int i;
THREAD_T thread_id = tsrm_thread_id();
int hash_value;
tsrm_tls_entry *last=NULL;
tsrm_mutex_lock(tsmm_mutex);
hash_value = THREAD_HASH_OF(thread_id, tsrm_tls_table_size);
thread_resources = tsrm_tls_table[hash_value];
while (thread_resources) {
if (thread_resources->thread_id == thread_id) {
for (i=0; i<thread_resources->count; i++) {
if (resource_types_table[i].dtor) {
resource_types_table[i].dtor(thread_resources->storage[i], &thread_resources->storage);
}
}
for (i=0; i<thread_resources->count; i++) {
free(thread_resources->storage[i]);
}
free(thread_resources->storage);
if (last) {
last->next = thread_resources->next;
} else {
tsrm_tls_table[hash_value] = thread_resources->next;
}
#if defined(PTHREADS)
pthread_setspecific(tls_key, 0);
#elif defined(TSRM_WIN32)
TlsSetValue(tls_key, 0);
#endif
free(thread_resources);
break;
}
if (thread_resources->next) {
last = thread_resources;
}
thread_resources = thread_resources->next;
}
tsrm_mutex_unlock(tsmm_mutex);
}
/* deallocates all occurrences of a given id */
void ts_free_id(ts_rsrc_id id)
{
}
/*
* Utility Functions
*/
/* Obtain the current thread id */
TSRM_API THREAD_T tsrm_thread_id(void)
{
#ifdef TSRM_WIN32
return GetCurrentThreadId();
#elif defined(GNUPTH)
return pth_self();
#elif defined(PTHREADS)
return pthread_self();
#elif defined(NSAPI)
return systhread_current();
#elif defined(PI3WEB)
return PIThread_getCurrent();
#elif defined(TSRM_ST)
return st_thread_self();
#endif
}
/* Allocate a mutex */
TSRM_API MUTEX_T tsrm_mutex_alloc(void)
{
MUTEX_T mutexp;
#ifdef TSRM_WIN32
mutexp = malloc(sizeof(CRITICAL_SECTION));
InitializeCriticalSection(mutexp);
#elif defined(GNUPTH)
mutexp = (MUTEX_T) malloc(sizeof(*mutexp));
pth_mutex_init(mutexp);
#elif defined(PTHREADS)
mutexp = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
pthread_mutex_init(mutexp,NULL);
#elif defined(NSAPI)
mutexp = crit_init();
#elif defined(PI3WEB)
mutexp = PIPlatform_allocLocalMutex();
#elif defined(TSRM_ST)
mutexp = st_mutex_new();
#endif
#ifdef THR_DEBUG
printf("Mutex created thread: %d\n",mythreadid());
#endif
return( mutexp );
}
/* Free a mutex */
TSRM_API void tsrm_mutex_free(MUTEX_T mutexp)
{
if (mutexp) {
#ifdef TSRM_WIN32
DeleteCriticalSection(mutexp);
#elif defined(GNUPTH)
free(mutexp);
#elif defined(PTHREADS)
pthread_mutex_destroy(mutexp);
free(mutexp);
#elif defined(NSAPI)
crit_terminate(mutexp);
#elif defined(PI3WEB)
PISync_delete(mutexp);
#elif defined(TSRM_ST)
st_mutex_destroy(mutexp);
#endif
}
#ifdef THR_DEBUG
printf("Mutex freed thread: %d\n",mythreadid());
#endif
}
/* Lock a mutex */
TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp)
{
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Mutex locked thread: %ld", tsrm_thread_id()));
#ifdef TSRM_WIN32
EnterCriticalSection(mutexp);
return 1;
#elif defined(GNUPTH)
return pth_mutex_acquire(mutexp, 0, NULL);
#elif defined(PTHREADS)
return pthread_mutex_lock(mutexp);
#elif defined(NSAPI)
return crit_enter(mutexp);
#elif defined(PI3WEB)
return PISync_lock(mutexp);
#elif defined(TSRM_ST)
return st_mutex_lock(mutexp);
#endif
}
/* Unlock a mutex */
TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp)
{
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Mutex unlocked thread: %ld", tsrm_thread_id()));
#ifdef TSRM_WIN32
LeaveCriticalSection(mutexp);
return 1;
#elif defined(GNUPTH)
return pth_mutex_release(mutexp);
#elif defined(PTHREADS)
return pthread_mutex_unlock(mutexp);
#elif defined(NSAPI)
return crit_exit(mutexp);
#elif defined(PI3WEB)
return PISync_unlock(mutexp);
#elif defined(TSRM_ST)
return st_mutex_unlock(mutexp);
#endif
}
TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler)
{
void *retval = (void *) tsrm_new_thread_begin_handler;
tsrm_new_thread_begin_handler = new_thread_begin_handler;
return retval;
}
TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler)
{
void *retval = (void *) tsrm_new_thread_end_handler;
tsrm_new_thread_end_handler = new_thread_end_handler;
return retval;
}
/*
* Debug support
*/
#if TSRM_DEBUG
int tsrm_error(int level, const char *format, ...)
{
if (level<=tsrm_error_level) {
va_list args;
int size;
fprintf(tsrm_error_file, "TSRM: ");
va_start(args, format);
size = vfprintf(tsrm_error_file, format, args);
va_end(args);
fprintf(tsrm_error_file, "\n");
fflush(tsrm_error_file);
return size;
} else {
return 0;
}
}
#endif
void tsrm_error_set(int level, char *debug_filename)
{
tsrm_error_level = level;
#if TSRM_DEBUG
if (tsrm_error_file!=stderr) { /* close files opened earlier */
fclose(tsrm_error_file);
}
if (debug_filename) {
tsrm_error_file = fopen(debug_filename, "w");
if (!tsrm_error_file) {
tsrm_error_file = stderr;
}
} else {
tsrm_error_file = stderr;
}
#endif
}
#endif /* ZTS */
-186
View File
@@ -1,186 +0,0 @@
# Microsoft Developer Studio Project File - Name="TSRM" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Static Library" 0x0104
CFG=TSRM - Win32 Debug_TS
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "TSRM.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "TSRM.mak" CFG="TSRM - Win32 Debug_TS"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "TSRM - Win32 Debug_TS" (based on "Win32 (x86) Static Library")
!MESSAGE "TSRM - Win32 Release_TS" (based on "Win32 (x86) Static Library")
!MESSAGE "TSRM - Win32 Release_TS_inline" (based on "Win32 (x86) Static Library")
!MESSAGE "TSRM - Win32 Release_TSDbg" (based on "Win32 (x86) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "TSRM - Win32 Debug_TS"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "TSRM___Win32_Debug_TS"
# PROP BASE Intermediate_Dir "TSRM___Win32_Debug_TS"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug_TS"
# PROP Intermediate_Dir "Debug_TS"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "C:\Projects\TSRM" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /D "_DEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=1 /YX /FD /GZ /c
# ADD BASE RSC /l 0x40d /d "_DEBUG"
# ADD RSC /l 0x40d /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TS"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "TSRM___Win32_Release_TS"
# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TS"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release_TS"
# PROP Intermediate_Dir "Release_TS"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
# ADD BASE RSC /l 0x40d /d "NDEBUG"
# ADD RSC /l 0x40d /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TS_inline"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "TSRM___Win32_Release_TS_inline"
# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TS_inline"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release_TS_inline"
# PROP Intermediate_Dir "Release_TS_inline"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "TSRM_EXPORTS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
# ADD BASE RSC /l 0x40d /d "NDEBUG"
# ADD RSC /l 0x40d /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "TSRM - Win32 Release_TSDbg"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "TSRM___Win32_Release_TSDbg"
# PROP BASE Intermediate_Dir "TSRM___Win32_Release_TSDbg"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release_TSDbg"
# PROP Intermediate_Dir "Release_TSDbg"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /Zi /Od /I "." /D "NDEBUG" /D "ZTS" /D "_LIB" /D "TSRM_EXPORTS" /D "WIN32" /D "_MBCS" /D TSRM_DEBUG=0 /YX /FD /c
# ADD BASE RSC /l 0x40d /d "NDEBUG"
# ADD RSC /l 0x40d /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
!ENDIF
# Begin Target
# Name "TSRM - Win32 Debug_TS"
# Name "TSRM - Win32 Release_TS"
# Name "TSRM - Win32 Release_TS_inline"
# Name "TSRM - Win32 Release_TSDbg"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\TSRM.c
# End Source File
# Begin Source File
SOURCE=.\tsrm_strtok_r.c
# End Source File
# Begin Source File
SOURCE=.\tsrm_virtual_cwd.c
# End Source File
# Begin Source File
SOURCE=.\tsrm_win32.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\readdir.h
# End Source File
# Begin Source File
SOURCE=.\TSRM.h
# End Source File
# Begin Source File
SOURCE=.\tsrm_config.w32.h
# End Source File
# Begin Source File
SOURCE=.\tsrm_config_common.h
# End Source File
# Begin Source File
SOURCE=.\tsrm_strtok_r.h
# End Source File
# Begin Source File
SOURCE=.\tsrm_virtual_cwd.h
# End Source File
# Begin Source File
SOURCE=.\tsrm_win32.h
# End Source File
# End Group
# End Target
# End Project
-143
View File
@@ -1,143 +0,0 @@
/*
+----------------------------------------------------------------------+
| Thread Safe Resource Manager |
+----------------------------------------------------------------------+
| Copyright (c) 1999, 2000, Andi Gutmans, Sascha Schumann, Zeev Suraski|
| This source file is subject to the TSRM license, that is bundled |
| with this package in the file LICENSE |
+----------------------------------------------------------------------+
| Authors: Zeev Suraski <zeev@zend.com> |
+----------------------------------------------------------------------+
*/
#ifndef TSRM_H
#define TSRM_H
#ifdef HAVE_CONFIG_H
# include "tsrm_config.h"
#endif
#ifdef WIN32
# define TSRM_WIN32
#endif
#ifdef TSRM_WIN32
# ifdef TSRM_EXPORTS
# define TSRM_API __declspec(dllexport)
# else
# define TSRM_API __declspec(dllimport)
# endif
#else
# define TSRM_API
#endif
/* Only compile multi-threading functions if we're in ZTS mode */
#ifdef ZTS
#ifdef TSRM_WIN32
# include <windows.h>
#elif defined(GNUPTH)
# include <pth.h>
#elif defined(PTHREADS)
# include <pthread.h>
#elif defined(TSRM_ST)
# include <st.h>
#endif
typedef int ts_rsrc_id;
/* Define THREAD_T and MUTEX_T */
#ifdef TSRM_WIN32
# define THREAD_T DWORD
# define MUTEX_T CRITICAL_SECTION *
#elif defined(GNUPTH)
# define THREAD_T pth_t
# define MUTEX_T pth_mutex_t *
#elif defined(PTHREADS)
# define THREAD_T pthread_t
# define MUTEX_T pthread_mutex_t *
#elif defined(NSAPI)
# define THREAD_T SYS_THREAD
# define MUTEX_T CRITICAL
#elif defined(PI3WEB)
# define THREAD_T PIThread *
# define MUTEX_T PISync *
#elif defined(TSRM_ST)
# define THREAD_T st_thread_t
# define MUTEX_T st_mutex_t
#endif
typedef void (*ts_allocate_ctor)(void *, void ***);
typedef void (*ts_allocate_dtor)(void *, void ***);
#define THREAD_HASH_OF(thr,ts) (unsigned long)thr%(unsigned long)ts
#ifdef __cplusplus
extern "C" {
#endif
/* startup/shutdown */
TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_level, char *debug_filename);
TSRM_API void tsrm_shutdown(void);
/* allocates a new thread-safe-resource id */
TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor);
/* fetches the requested resource for the current thread */
TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id);
#define ts_resource(id) ts_resource_ex(id, NULL)
/* frees all resources allocated for the current thread */
TSRM_API void ts_free_thread(void);
/* deallocates all occurrences of a given id */
TSRM_API void ts_free_id(ts_rsrc_id id);
/* Debug support */
#define TSRM_ERROR_LEVEL_ERROR 1
#define TSRM_ERROR_LEVEL_CORE 2
#define TSRM_ERROR_LEVEL_INFO 3
typedef void (*tsrm_thread_begin_func_t)(THREAD_T thread_id, void ***tsrm_ls);
typedef void (*tsrm_thread_end_func_t)(THREAD_T thread_id, void ***tsrm_ls);
TSRM_API int tsrm_error(int level, const char *format, ...);
TSRM_API void tsrm_error_set(int level, char *debug_filename);
/* utility functions */
TSRM_API THREAD_T tsrm_thread_id(void);
TSRM_API MUTEX_T tsrm_mutex_alloc(void);
TSRM_API void tsrm_mutex_free(MUTEX_T mutexp);
TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp);
TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp);
TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler);
TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler);
#define TSRM_SHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)+1)
#define TSRM_UNSHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)-1)
#define TSRMLS_FETCH() void ***tsrm_ls = (void ***) ts_resource_ex(0, NULL)
#define TSRMG(id, type, element) (((type) (*((void ***) tsrm_ls))[TSRM_UNSHUFFLE_RSRC_ID(id)])->element)
#define TSRMLS_D void ***tsrm_ls
#define TSRMLS_DC , TSRMLS_D
#define TSRMLS_C tsrm_ls
#define TSRMLS_CC , TSRMLS_C
#ifdef __cplusplus
}
#endif
#else /* non ZTS */
#define TSRMLS_FETCH()
#define TSRMLS_D void
#define TSRMLS_DC
#define TSRMLS_C
#define TSRMLS_CC
#endif /* ZTS */
#endif /* TSRM_H */
-1
View File
@@ -1 +0,0 @@
#undef PTHREADS
-5
View File
@@ -1,5 +0,0 @@
AC_DEFUN(AM_SET_LIBTOOL_VARIABLE,[
LIBTOOL='$(SHELL) $(top_builddir)/libtool $1'
])
-43
View File
@@ -1,43 +0,0 @@
# Makefile to generate build tools
#
# Standard usage:
# make -f build.mk
#
# Written by Sascha Schumann
#
# $Id$
LT_TARGETS = ltmain.sh ltconfig
config_h_in = tsrm_config.h.in
makefile_am_files = Makefile.am
makefile_in_files = $(makefile_am_files:.am=.in)
makefile_files = $(makefile_am_files:e.am=e)
targets = $(makefile_in_files) $(LT_TARGETS) configure $(config_h_in)
all: $(targets)
clean:
rm -f $(targets)
$(LT_TARGETS):
rm -f $(LT_TARGETS)
libtoolize --automake $(AMFLAGS) -f
$(makefile_in_files): $(makefile_am_files)
automake -a -i $(AMFLAGS) $(makefile_files)
aclocal.m4: configure.in acinclude.m4
aclocal
$(config_h_in): configure.in acconfig.h
# explicitly remove target since autoheader does not seem to work
# correctly otherwise (timestamps are not updated)
@rm -f $@
autoheader
configure: aclocal.m4 configure.in
autoconf
-33
View File
@@ -1,33 +0,0 @@
#!/bin/sh
case "$1" in
--copy)
automake_flags=--copy
shift
;;
esac
libtoolize --force --automake $automake_flags
mv aclocal.m4 aclocal.m4.old 2>/dev/null
aclocal
if cmp aclocal.m4.old aclocal.m4 > /dev/null 2>&1; then
echo "buildconf: keeping ${1}aclocal.m4"
mv aclocal.m4.old aclocal.m4
else
echo "buildconf: created or modified ${1}aclocal.m4"
fi
autoheader
automake --add-missing --include-deps $automake_flags
mv configure configure.old 2>/dev/null
autoconf
if cmp configure.old configure > /dev/null 2>&1; then
echo "buildconf: keeping ${1}configure"
mv configure.old configure
else
echo "buildconf: created or modified ${1}configure"
fi
-31
View File
@@ -1,31 +0,0 @@
dnl $Id$
dnl
dnl Minimalistic configure.in for TSRM.
dnl
AC_INIT(TSRM.c)
AM_INIT_AUTOMAKE(TSRM, 1.0, nodefine)
AM_CONFIG_HEADER(tsrm_config.h)
sinclude(tsrm.m4)
TSRM_BASIC_CHECKS
TSRM_THREADS_CHECKS
AM_PROG_LIBTOOL
if test "$enable_debug" != "yes"; then
AM_SET_LIBTOOL_VARIABLE([--silent])
fi
dnl TSRM_PTHREAD
AC_CHECK_HEADERS(
utime.h \
dirent.h \
stdarg.h \
alloca.h \
unistd.h \
limits.h
)
AC_OUTPUT(Makefile)
-44
View File
@@ -1,44 +0,0 @@
#ifndef READDIR_H
#define READDIR_H
/*
* Structures and types used to implement opendir/readdir/closedir
* on Windows 95/NT.
*/
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
/* struct dirent - same as Unix */
struct dirent {
long d_ino; /* inode (always 1 in WIN32) */
off_t d_off; /* offset to this dirent */
unsigned short d_reclen; /* length of d_name */
char d_name[_MAX_FNAME + 1]; /* filename (null terminated) */
};
/* typedef DIR - not the same as Unix */
typedef struct {
long handle; /* _findfirst/_findnext handle */
short offset; /* offset into directory */
short finished; /* 1 if there are not more files */
struct _finddata_t fileinfo; /* from _findfirst/_findnext */
char *dir; /* the dir we are reading */
struct dirent dent; /* the dirent to return */
} DIR;
/* Function prototypes */
DIR *opendir(const char *);
struct dirent *readdir(DIR *);
int readdir_r(DIR *, struct dirent *, struct dirent **);
int closedir(DIR *);
void rewinddir(DIR *);
#endif /* READDIR_H */
-157
View File
@@ -1,157 +0,0 @@
dnl Copyright (c) 1999, 2000 Sascha Schumann. All rights reserved.
dnl
dnl Redistribution and use in source and binary forms, with or without
dnl modification, are permitted provided that the following conditions
dnl are met:
dnl
dnl 1. Redistributions of source code must retain the above copyright
dnl notice, this list of conditions and the following disclaimer.
dnl
dnl 2. Redistributions in binary form must reproduce the above copyright
dnl notice, this list of conditions and the following disclaimer in
dnl the documentation and/or other materials provided with the
dnl distribution.
dnl
dnl THIS SOFTWARE IS PROVIDED BY SASCHA SCHUMANN ``AS IS'' AND ANY
dnl EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
dnl IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
dnl PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SASCHA SCHUMANN OR
dnl HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dnl SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
dnl NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
dnl LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
dnl HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
dnl STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
dnl ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
dnl OF THE POSSIBILITY OF SUCH DAMAGE.
dnl
dnl PTHREADS_FLAGS
dnl
dnl Set some magic defines to achieve POSIX threads conformance
dnl
AC_DEFUN(PTHREADS_FLAGS,[
if test -z "$host_alias"; then
AC_MSG_ERROR(host_alias is not set. Make sure to run config.guess)
fi
case "$host_alias" in
*solaris*)
PTHREAD_FLAGS="-D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT";;
*freebsd*)
PTHREAD_FLAGS="-D_REENTRANT -D_THREAD_SAFE";;
*linux*)
PTHREAD_FLAGS="-D_REENTRANT";;
*aix*)
PTHREAD_FLAGS="-D_THREAD_SAFE";;
*irix*)
PTHREAD_FLAGS="-D_POSIX_THREAD_SAFE_FUNCTIONS";;
*hpux*)
PTHREAD_FLAGS="-D_REENTRANT";;
*sco*)
PTHREAD_FLAGS="-D_REENTRANT";;
dnl Solves sigwait() problem, creates problems with u_long etc.
dnl PTHREAD_FLAGS="-D_REENTRANT -D_XOPEN_SOURCE=500 -D_POSIX_C_SOURCE=199506 -D_XOPEN_SOURCE_EXTENDED=1";;
esac
if test -n "$PTHREAD_FLAGS"; then
CPPFLAGS="$CPPFLAGS $PTHREAD_FLAGS"
fi
])dnl
dnl
dnl PTHREADS_CHECK_COMPILE
dnl
dnl Check whether the current setup can use POSIX threads calls
dnl
AC_DEFUN(PTHREADS_CHECK_COMPILE, [
AC_TRY_RUN( [
#include <pthread.h>
#include <stddef.h>
void *thread_routine(void *data) {
return data;
}
int main() {
pthread_t thd;
pthread_mutexattr_t mattr;
int data = 1;
pthread_mutexattr_init(&mattr);
return pthread_create(&thd, NULL, thread_routine, &data);
} ], [
pthreads_working="yes"
], [
pthreads_working="no"
], pthreads_working="no" ) ] )dnl
dnl
dnl PTHREADS_CHECK()
dnl
dnl Try to find a way to enable POSIX threads
dnl
dnl Magic flags
dnl -kthread gcc (FreeBSD)
dnl -Kthread UDK cc (UnixWare)
dnl -mt WorkShop cc (Solaris)
dnl -mthreads gcc (AIX)
dnl -pthread gcc (Linux, FreeBSD, NetBSD, OpenBSD)
dnl -pthreads gcc (Solaris)
dnl -qthreaded AIX cc V5
dnl -threads gcc (HP-UX)
dnl
AC_DEFUN(PTHREADS_CHECK,[
save_CFLAGS="$CFLAGS"
save_LIBS="$LIBS"
PTHREADS_ASSIGN_VARS
PTHREADS_CHECK_COMPILE
LIBS="$save_LIBS"
CFLAGS="$save_CFLAGS"
AC_CACHE_CHECK(for pthreads_cflags,ac_cv_pthreads_cflags,[
ac_cv_pthreads_cflags=""
if test "$pthreads_working" != "yes"; then
for flag in -kthread -pthread -pthreads -mthreads -Kthread -threads -mt -qthreaded; do
ac_save="$CFLAGS"
CFLAGS="$CFLAGS $flag"
PTHREADS_CHECK_COMPILE
CFLAGS="$ac_save"
if test "$pthreads_working" = "yes"; then
ac_cv_pthreads_cflags="$flag"
break
fi
done
fi
])
AC_CACHE_CHECK(for pthreads_lib, ac_cv_pthreads_lib,[
ac_cv_pthreads_lib=""
if test "$pthreads_working" != "yes"; then
for lib in pthread pthreads c_r; do
ac_save="$LIBS"
LIBS="$LIBS -l$lib"
PTHREADS_CHECK_COMPILE
LIBS="$ac_save"
if test "$pthreads_working" = "yes"; then
ac_cv_pthreads_lib="$lib"
break
fi
done
fi
])
if test "$pthreads_working" = "yes"; then
threads_result="POSIX Threads found"
else
threads_result="POSIX Threads not found"
fi
])dnl
dnl
dnl
AC_DEFUN(PTHREADS_ASSIGN_VARS,[
if test -n "$ac_cv_pthreads_lib"; then
LIBS="$LIBS -l$ac_cv_pthreads_lib"
fi
if test -n "$ac_cv_pthreads_cflags"; then
CFLAGS="$CFLAGS $ac_cv_pthreads_cflags"
fi
])dnl
-124
View File
@@ -1,124 +0,0 @@
dnl TSRM_CHECK_GCC_ARG(ARG, ACTION-IF-FOUND, ACTION-IF-NOT_FOUND)
AC_DEFUN(TSRM_CHECK_GCC_ARG,[
gcc_arg_name=[ac_cv_gcc_arg]translit($1,A-Z-,a-z_)
AC_CACHE_CHECK([whether $CC supports $1], [ac_cv_gcc_arg]translit($1,A-Z-,a-z_), [
echo 'void somefunc() { };' > conftest.c
cmd='$CC $1 -c conftest.c'
if eval $cmd 2>&1 | egrep -e $1 >/dev/null ; then
ac_result=no
else
ac_result=yes
fi
eval $gcc_arg_name=$ac_result
rm -f conftest.*
])
if eval test "\$$gcc_arg_name" = "yes"; then
$2
else
:
$3
fi
])
AC_DEFUN(TSRM_BASIC_CHECKS,[
AC_REQUIRE([AC_PROG_CC])dnl
dnl AC_REQUIRE([AM_PROG_CC_STDC])dnl
AC_REQUIRE([AC_PROG_CC_C_O])dnl
AC_REQUIRE([AC_PROG_RANLIB])dnl
AC_CHECK_HEADERS(stdarg.h)
])
AC_DEFUN(TSRM_CHECK_PTH,[
AC_MSG_CHECKING(for GNU Pth)
PTH_PREFIX="`$1 --prefix`"
if test -z "$PTH_PREFIX"; then
AC_MSG_RESULT(Please check your Pth installation)
fi
CPPFLAGS="$CPPFLAGS `$1 --cflags`"
LDFLAGS="$LDFLAGS `$1 --ldflags`"
LIBS="$LIBS `$1 --libs`"
AC_DEFINE(GNUPTH, 1, [Whether you use GNU Pth])
AC_MSG_RESULT(yes - installed in $PTH_PREFIX)
])
AC_DEFUN(TSRM_CHECK_ST,[
if test -r "$1/include/st.h"; then
CPPFLAGS="$CPPFLAGS -I$1/include"
LDFLAGS="$LDFLAGS -L$1/lib"
elif test -r "$1/st.h"; then
CPPFLAGS="$CPPFLAGS -I$1"
LDFLAGS="$LDFLAGS -L$1"
fi
AC_CHECK_HEADERS(st.h,[ ],[
AC_MSG_ERROR([Sorry[,] I was unable to locate the State Threads header file. Please specify the prefix using --with-tsrm-st=/prefix])
])
LIBS="$LIBS -lst"
AC_MSG_CHECKING(for SGI's State Threads)
AC_MSG_RESULT(yes)
AC_DEFINE(TSRM_ST, 1, [ ])
])
sinclude(threads.m4)
sinclude(TSRM/threads.m4)
AC_DEFUN(TSRM_CHECK_PTHREADS,[
PTHREADS_CHECK
if test "$pthreads_working" != "yes"; then
AC_MSG_ERROR(Your system seems to lack POSIX threads.)
fi
AC_DEFINE(PTHREADS, 1, Whether to use Pthreads)
AC_MSG_CHECKING(for POSIX threads)
AC_MSG_RESULT(yes)
])
AC_DEFUN(TSRM_THREADS_CHECKS,[
dnl For the thread implementations, we always use --with-*
dnl to maintain consistency
AC_ARG_WITH(tsrm-pth,
[ --with-tsrm-pth[=pth-config] Use GNU Pth.],[
TSRM_PTH=$withval
],[
TSRM_PTH=no
])
AC_ARG_WITH(tsrm-st,
[ --with-tsrm-st],[
TSRM_ST=$withval
],[
TSRM_ST=no
])
AC_ARG_WITH(tsrm-pthreads,
[ --with-tsrm-pthreads Use POSIX threads (default)],[
TSRM_PTHREADS=$withval
],[
TSRM_PTHREADS=yes
])
test "$TSRM_PTH" = "yes" && TSRM_PTH=pth-config
if test "$TSRM_PTH" != "no"; then
TSRM_CHECK_PTH($TSRM_PTH)
elif test "$TSRM_ST" != "no"; then
TSRM_CHECK_ST($TSRM_ST)
elif test "$TSRM_PTHREADS" != "no"; then
TSRM_CHECK_PTHREADS
fi
])
-15
View File
@@ -1,15 +0,0 @@
#ifndef TSRM_CONFIG_W32_H
#define TSRM_CONFIG_W32_H
#define HAVE_UTIME 1
#define HAVE_ALLOCA 1
#undef inline
#ifdef ZEND_WIN32_FORCE_INLINE
# define inline __forceinline
#else
# define inline
#endif
#endif
-47
View File
@@ -1,47 +0,0 @@
#ifndef TSRM_CONFIG_COMMON_H
#define TSRM_CONFIG_COMMON_H
#if WINNT|WIN32
# define TSRM_WIN32
#endif
#ifndef TSRM_WIN32
# include "tsrm_config.h"
# include <sys/param.h>
#else
# include "tsrm_config.w32.h"
#endif
#ifdef TSRM_WIN32
#include <malloc.h>
#endif
#if HAVE_ALLOCA_H
#include <alloca.h>
#endif
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
#if HAVE_LIMITS_H
#include <limits.h>
#endif
#ifndef MAXPATHLEN
# ifdef PATH_MAX
# define MAXPATHLEN PATH_MAX
# else
# define MAXPATHLEN 256
# endif
#endif
#if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2))
# define tsrm_do_alloca(p) alloca(p)
# define tsrm_free_alloca(p)
#else
# define tsrm_do_alloca(p) malloc(p)
# define tsrm_free_alloca(p) free(p)
#endif
#endif /* TSRM_CONFIG_COMMON_H */
-63
View File
@@ -1,63 +0,0 @@
#include <stdio.h>
#include "tsrm_config_common.h"
#include "tsrm_strtok_r.h"
static inline int in_character_class(char ch, const char *delim)
{
while (*delim) {
if (*delim == ch) {
return 1;
}
delim++;
}
return 0;
}
char *tsrm_strtok_r(char *s, const char *delim, char **last)
{
char *token;
if (s == NULL) {
s = *last;
}
while (*s && in_character_class(*s, delim)) {
s++;
}
if (!*s) {
return NULL;
}
token = s;
while (*s && !in_character_class(*s, delim)) {
s++;
}
if (!*s) {
*last = s;
} else {
*s = '\0';
*last = s + 1;
}
return token;
}
#if 0
main()
{
char foo[] = "/foo/bar//\\barbara";
char *last;
char *token;
token = tsrm_strtok_r(foo, "/\\", &last);
while (token) {
printf ("Token = '%s'\n", token);
token = tsrm_strtok_r(NULL, "/\\", &last);
}
return 0;
}
#endif
-6
View File
@@ -1,6 +0,0 @@
#ifndef TSRM_STRTOK_R
#define TSRM_STRTOK_R
char *tsrm_strtok_r(char *s, const char *delim, char **last);
#endif
-773
View File
@@ -1,773 +0,0 @@
/*
+----------------------------------------------------------------------+
| PHP version 4.0 |
+----------------------------------------------------------------------+
| Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Sascha Schumann <sascha@schumann.cx> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <stdio.h>
#include <limits.h>
#include <errno.h>
#include <stdlib.h>
#include <fcntl.h>
#include "tsrm_virtual_cwd.h"
#include "tsrm_strtok_r.h"
#ifdef TSRM_WIN32
#include <io.h>
#include "tsrm_win32.h"
#endif
#define VIRTUAL_CWD_DEBUG 0
#include "TSRM.h"
/* Only need mutex for popen() in Windows because it doesn't chdir() on UNIX */
#if defined(TSRM_WIN32) && defined(ZTS)
MUTEX_T cwd_mutex;
#endif
#ifdef ZTS
static ts_rsrc_id cwd_globals_id;
#else
static virtual_cwd_globals cwd_globals;
#endif
cwd_state main_cwd_state; /* True global */
#ifndef TSRM_WIN32
#include <unistd.h>
#else
#include <direct.h>
#endif
#ifndef S_ISDIR
#define S_ISDIR(mode) ((mode) & _S_IFDIR)
#endif
#ifndef S_ISREG
#define S_ISREG(mode) ((mode) & _S_IFREG)
#endif
#ifdef TSRM_WIN32
#define tsrm_strtok_r(a,b,c) strtok((a),(b))
#define TOKENIZER_STRING "/\\"
static int php_check_dots(const char *element, int n)
{
while (n-- > 0) if (element[n] != '.') break;
return (n != -1);
}
#define IS_DIRECTORY_UP(element, len) \
(len >= 2 && !php_check_dots(element, len))
#define IS_DIRECTORY_CURRENT(element, len) \
(len == 1 && ptr[0] == '.')
#else
#define TOKENIZER_STRING "/"
#endif
/* default macros */
#ifndef IS_DIRECTORY_UP
#define IS_DIRECTORY_UP(element, len) \
(len == 2 && memcmp(element, "..", 2) == 0)
#endif
#ifndef IS_DIRECTORY_CURRENT
#define IS_DIRECTORY_CURRENT(element, len) \
(len == 1 && ptr[0] == '.')
#endif
/* define this to check semantics */
#define IS_DIR_OK(s) (1)
#ifndef IS_DIR_OK
#define IS_DIR_OK(state) (php_is_dir_ok(state) == 0)
#endif
#define CWD_STATE_COPY(d, s) \
(d)->cwd_length = (s)->cwd_length; \
(d)->cwd = (char *) malloc((s)->cwd_length+1); \
memcpy((d)->cwd, (s)->cwd, (s)->cwd_length+1);
#define CWD_STATE_FREE(s) \
free((s)->cwd);
static int php_is_dir_ok(const cwd_state *state)
{
struct stat buf;
if (stat(state->cwd, &buf) == 0 && S_ISDIR(buf.st_mode))
return (0);
return (1);
}
static int php_is_file_ok(const cwd_state *state)
{
struct stat buf;
if (stat(state->cwd, &buf) == 0 && S_ISREG(buf.st_mode))
return (0);
return (1);
}
static void cwd_globals_ctor(virtual_cwd_globals *cwd_globals TSRMLS_DC)
{
CWD_STATE_COPY(&cwd_globals->cwd, &main_cwd_state);
}
static void cwd_globals_dtor(virtual_cwd_globals *cwd_globals TSRMLS_DC)
{
CWD_STATE_FREE(&cwd_globals->cwd);
}
static char *tsrm_strndup(const char *s, size_t length)
{
char *p;
p = (char *) malloc(length+1);
if (!p) {
return (char *)NULL;
}
if (length) {
memcpy(p,s,length);
}
p[length]=0;
return p;
}
CWD_API void virtual_cwd_startup(void)
{
char cwd[MAXPATHLEN];
char *result;
result = getcwd(cwd, sizeof(cwd));
if (!result) {
cwd[0] = '\0';
}
main_cwd_state.cwd = strdup(cwd);
main_cwd_state.cwd_length = strlen(cwd);
#ifdef ZTS
ts_allocate_id(&cwd_globals_id, sizeof(virtual_cwd_globals), (ts_allocate_ctor) cwd_globals_ctor, (ts_allocate_dtor) cwd_globals_dtor);
#else
cwd_globals_ctor(&cwd_globals TSRMLS_CC);
#endif
#if defined(TSRM_WIN32) && defined(ZTS)
cwd_mutex = tsrm_mutex_alloc();
#endif
}
CWD_API void virtual_cwd_shutdown(void)
{
#ifndef ZTS
cwd_globals_dtor(&cwd_globals TSRMLS_CC);
#endif
#if defined(TSRM_WIN32) && defined(ZTS)
tsrm_mutex_free(cwd_mutex);
#endif
free(main_cwd_state.cwd); /* Don't use CWD_STATE_FREE because the non global states will probably use emalloc()/efree() */
}
CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC)
{
cwd_state *state;
state = &CWDG(cwd);
if (state->cwd_length == 0) {
char *retval;
*length = 1;
retval = (char *) malloc(2);
retval[0] = DEFAULT_SLASH;
retval[1] = '\0';
return retval;
}
#ifdef TSRM_WIN32
/* If we have something like C: */
if (state->cwd_length == 2 && state->cwd[state->cwd_length-1] == ':') {
char *retval;
*length = state->cwd_length+1;
retval = (char *) malloc(*length+1);
memcpy(retval, state->cwd, *length);
retval[*length-1] = DEFAULT_SLASH;
retval[*length] = '\0';
return retval;
}
#endif
*length = state->cwd_length;
return strdup(state->cwd);
}
/* Same semantics as UNIX getcwd() */
CWD_API char *virtual_getcwd(char *buf, size_t size TSRMLS_DC)
{
size_t length;
char *cwd;
cwd = virtual_getcwd_ex(&length TSRMLS_CC);
if (buf == NULL) {
return cwd;
}
if (length > size-1) {
free(cwd);
errno = ERANGE; /* Is this OK? */
return NULL;
}
memcpy(buf, cwd, length+1);
free(cwd);
return buf;
}
/* Resolve path relatively to state and put the real path into state */
/* returns 0 for ok, 1 for error */
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path)
{
int path_length = strlen(path);
char *ptr, *path_copy;
char *tok = NULL;
int ptr_length;
cwd_state *old_state;
int ret = 0;
int copy_amount = -1;
char *free_path;
unsigned char is_absolute = 0;
#ifndef TSRM_WIN32
char resolved_path[MAXPATHLEN];
#endif
if (path_length == 0)
return (0);
#if !defined(TSRM_WIN32) && !defined(__BEOS__)
if (IS_ABSOLUTE_PATH(path, path_length)) {
if (realpath(path, resolved_path)) {
path = resolved_path;
path_length = strlen(path);
}
} else { /* Concat current directory with relative path and then run realpath() on it */
char *tmp;
char *ptr;
ptr = tmp = (char *) malloc(state->cwd_length+path_length+sizeof("/"));
if (!tmp) {
return 1;
}
memcpy(ptr, state->cwd, state->cwd_length);
ptr += state->cwd_length;
*ptr++ = DEFAULT_SLASH;
memcpy(ptr, path, path_length);
ptr += path_length;
*ptr = '\0';
if (realpath(tmp, resolved_path)) {
path = resolved_path;
path_length = strlen(path);
}
free(tmp);
}
#endif
free_path = path_copy = tsrm_strndup(path, path_length);
old_state = (cwd_state *) malloc(sizeof(cwd_state));
CWD_STATE_COPY(old_state, state);
#if VIRTUAL_CWD_DEBUG
fprintf(stderr,"cwd = %s path = %s\n", state->cwd, path);
#endif
if (IS_ABSOLUTE_PATH(path_copy, path_length)) {
copy_amount = COPY_WHEN_ABSOLUTE;
is_absolute = 1;
#ifdef TSRM_WIN32
} else if (IS_UNC_PATH(path_copy, path_length)) {
copy_amount = 2;
is_absolute = 1;
} else if (IS_SLASH(path_copy[0])) {
copy_amount = 2;
#endif
}
if (copy_amount != -1) {
state->cwd = (char *) realloc(state->cwd, copy_amount + 1);
if (copy_amount) {
if (is_absolute) {
memcpy(state->cwd, path_copy, copy_amount);
path_copy += copy_amount;
} else {
memcpy(state->cwd, old_state->cwd, copy_amount);
}
}
state->cwd[copy_amount] = '\0';
state->cwd_length = copy_amount;
}
ptr = tsrm_strtok_r(path_copy, TOKENIZER_STRING, &tok);
while (ptr) {
ptr_length = strlen(ptr);
if (IS_DIRECTORY_UP(ptr, ptr_length)) {
char save;
save = DEFAULT_SLASH;
#define PREVIOUS state->cwd[state->cwd_length - 1]
while (IS_ABSOLUTE_PATH(state->cwd, state->cwd_length) &&
!IS_SLASH(PREVIOUS)) {
save = PREVIOUS;
PREVIOUS = '\0';
state->cwd_length--;
}
if (!IS_ABSOLUTE_PATH(state->cwd, state->cwd_length)) {
state->cwd[state->cwd_length++] = save;
state->cwd[state->cwd_length] = '\0';
} else {
PREVIOUS = '\0';
state->cwd_length--;
}
} else if (!IS_DIRECTORY_CURRENT(ptr, ptr_length)) {
state->cwd = (char *) realloc(state->cwd, state->cwd_length+ptr_length+1+1);
#ifdef TSRM_WIN32
/* Windows 9x will consider C:\\Foo as a network path. Avoid it. */
if (state->cwd[state->cwd_length-1]!='\\' && state->cwd[state->cwd_length-1]!='/') {
state->cwd[state->cwd_length++] = DEFAULT_SLASH;
}
#else
state->cwd[state->cwd_length++] = DEFAULT_SLASH;
#endif
memcpy(&state->cwd[state->cwd_length], ptr, ptr_length+1);
state->cwd_length += ptr_length;
}
ptr = tsrm_strtok_r(NULL, TOKENIZER_STRING, &tok);
}
if (state->cwd_length == COPY_WHEN_ABSOLUTE) {
state->cwd = (char *) realloc(state->cwd, state->cwd_length+1+1);
state->cwd[state->cwd_length] = DEFAULT_SLASH;
state->cwd[state->cwd_length+1] = '\0';
state->cwd_length++;
}
if (verify_path && verify_path(state)) {
CWD_STATE_FREE(state);
*state = *old_state;
ret = 1;
} else {
CWD_STATE_FREE(old_state);
ret = 0;
}
free(old_state);
free(free_path);
#if VIRTUAL_CWD_DEBUG
fprintf (stderr, "virtual_file_ex() = %s\n",state->cwd);
#endif
return (ret);
}
CWD_API int virtual_chdir(const char *path TSRMLS_DC)
{
return virtual_file_ex(&CWDG(cwd), path, php_is_dir_ok)?-1:0;
}
CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path TSRMLS_DC) TSRMLS_DC)
{
int length = strlen(path);
char *temp;
int retval;
if (length == 0) {
return 1; /* Can't cd to empty string */
}
while(--length >= 0 && !IS_SLASH(path[length])) {
}
if (length == -1) {
/* No directory only file name */
errno = ENOENT;
return -1;
}
if (length == COPY_WHEN_ABSOLUTE && IS_ABSOLUTE_PATH(path, length+1)) { /* Also use trailing slash if this is absolute */
length++;
}
temp = (char *) tsrm_do_alloca(length+1);
memcpy(temp, path, length);
temp[length] = 0;
#if VIRTUAL_CWD_DEBUG
fprintf (stderr, "Changing directory to %s\n", temp);
#endif
retval = p_chdir(temp TSRMLS_CC);
tsrm_free_alloca(temp);
return retval;
}
CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
retval = virtual_file_ex(&new_state, path, NULL);
if (!retval) {
int len = new_state.cwd_length>MAXPATHLEN-1?MAXPATHLEN-1:new_state.cwd_length;
memcpy(real_path, new_state.cwd, len);
real_path[len] = '\0';
return real_path;
}
return NULL;
}
CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_func verify_path TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
retval = virtual_file_ex(&new_state, path, verify_path);
*filepath = new_state.cwd;
return retval;
}
CWD_API int virtual_filepath(const char *path, char **filepath TSRMLS_DC)
{
return virtual_filepath_ex(path, filepath, php_is_file_ok TSRMLS_CC);
}
CWD_API FILE *virtual_fopen(const char *path, const char *mode TSRMLS_DC)
{
cwd_state new_state;
FILE *f;
if (path[0] == '\0') { /* Fail to open empty path */
return NULL;
}
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
f = fopen(new_state.cwd, mode);
CWD_STATE_FREE(&new_state);
return f;
}
#if HAVE_UTIME
CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC)
{
cwd_state new_state;
int ret;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, filename, NULL);
ret = utime(new_state.cwd, buf);
CWD_STATE_FREE(&new_state);
return ret;
}
#endif
CWD_API int virtual_chmod(const char *filename, mode_t mode TSRMLS_DC)
{
cwd_state new_state;
int ret;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, filename, NULL);
ret = chmod(new_state.cwd, mode);
CWD_STATE_FREE(&new_state);
return ret;
}
#ifndef TSRM_WIN32
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group TSRMLS_DC)
{
cwd_state new_state;
int ret;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, filename, NULL);
ret = chown(new_state.cwd, owner, group);
CWD_STATE_FREE(&new_state);
return ret;
}
#endif
CWD_API int virtual_open(const char *path TSRMLS_DC, int flags, ...)
{
cwd_state new_state;
int f;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
if (flags & O_CREAT) {
mode_t mode;
va_list arg;
va_start(arg, flags);
mode = va_arg(arg, mode_t);
va_end(arg);
f = open(new_state.cwd, flags, mode);
} else {
f = open(new_state.cwd, flags);
}
CWD_STATE_FREE(&new_state);
return f;
}
CWD_API int virtual_creat(const char *path, mode_t mode TSRMLS_DC)
{
cwd_state new_state;
int f;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
f = creat(new_state.cwd, mode);
CWD_STATE_FREE(&new_state);
return f;
}
CWD_API int virtual_rename(char *oldname, char *newname TSRMLS_DC)
{
cwd_state old_state;
cwd_state new_state;
int retval;
CWD_STATE_COPY(&old_state, &CWDG(cwd));
virtual_file_ex(&old_state, oldname, NULL);
oldname = old_state.cwd;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, newname, NULL);
newname = new_state.cwd;
retval = rename(oldname, newname);
CWD_STATE_FREE(&old_state);
CWD_STATE_FREE(&new_state);
return retval;
}
CWD_API int virtual_stat(const char *path, struct stat *buf TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
retval = stat(new_state.cwd, buf);
CWD_STATE_FREE(&new_state);
return retval;
}
#ifndef TSRM_WIN32
CWD_API int virtual_lstat(const char *path, struct stat *buf TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
retval = lstat(new_state.cwd, buf);
CWD_STATE_FREE(&new_state);
return retval;
}
#endif
CWD_API int virtual_unlink(const char *path TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, path, NULL);
retval = unlink(new_state.cwd);
CWD_STATE_FREE(&new_state);
return retval;
}
CWD_API int virtual_mkdir(const char *pathname, mode_t mode TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, pathname, NULL);
#ifdef TSRM_WIN32
retval = mkdir(new_state.cwd);
#else
retval = mkdir(new_state.cwd, mode);
#endif
CWD_STATE_FREE(&new_state);
return retval;
}
CWD_API int virtual_rmdir(const char *pathname TSRMLS_DC)
{
cwd_state new_state;
int retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, pathname, NULL);
retval = rmdir(new_state.cwd);
CWD_STATE_FREE(&new_state);
return retval;
}
#ifdef TSRM_WIN32
DIR *opendir(const char *name);
#endif
CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC)
{
cwd_state new_state;
DIR *retval;
CWD_STATE_COPY(&new_state, &CWDG(cwd));
virtual_file_ex(&new_state, pathname, NULL);
retval = opendir(new_state.cwd);
CWD_STATE_FREE(&new_state);
return retval;
}
#ifndef TSRM_WIN32
CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC)
{
int command_length;
char *command_line;
char *ptr;
FILE *retval;
command_length = strlen(command);
ptr = command_line = (char *) malloc(command_length + sizeof("cd ; ") + CWDG(cwd).cwd_length+1);
if (!command_line) {
return NULL;
}
memcpy(ptr, "cd ", sizeof("cd ")-1);
ptr += sizeof("cd ")-1;
if (CWDG(cwd).cwd_length == 0) {
*ptr++ = DEFAULT_SLASH;
} else {
memcpy(ptr, CWDG(cwd).cwd, CWDG(cwd).cwd_length);
ptr += CWDG(cwd).cwd_length;
}
*ptr++ = ' ';
*ptr++ = ';';
*ptr++ = ' ';
memcpy(ptr, command, command_length+1);
retval = popen(command_line, type);
free(command_line);
return retval;
}
#else
/* On Windows the trick of prepending "cd cwd; " doesn't work so we need to perform
a real chdir() and mutex it
*/
CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC)
{
char prev_cwd[MAXPATHLEN];
char *getcwd_result;
FILE *retval;
getcwd_result = getcwd(prev_cwd, MAXPATHLEN);
if (!getcwd_result) {
return NULL;
}
#ifdef ZTS
tsrm_mutex_lock(cwd_mutex);
#endif
chdir(CWDG(cwd).cwd);
retval = popen(command, type);
chdir(prev_cwd);
#ifdef ZTS
tsrm_mutex_unlock(cwd_mutex);
#endif
return retval;
}
#endif
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
-215
View File
@@ -1,215 +0,0 @@
/*
+----------------------------------------------------------------------+
| PHP version 4.0 |
+----------------------------------------------------------------------+
| Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Andi Gutmans <andi@zend.com> |
| Sascha Schumann <sascha@schumann.cx> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
#ifndef VIRTUAL_CWD_H
#define VIRTUAL_CWD_H
#include "TSRM.h"
#include "tsrm_config_common.h"
#include <sys/types.h>
#include <sys/stat.h>
#include <ctype.h>
#ifdef HAVE_UTIME_H
#include <utime.h>
#endif
#ifdef HAVE_STDARG_H
#include <stdarg.h>
#endif
#ifndef TSRM_WIN32
#include <unistd.h>
#endif
#ifdef TSRM_WIN32
#include "readdir.h"
#include <sys/utime.h>
/* mode_t isn't defined on Windows */
typedef unsigned short mode_t;
#define DEFAULT_SLASH '\\'
#define DEFAULT_DIR_SEPARATOR ';'
#define IS_SLASH(c) ((c) == '/' || (c) == '\\')
#define COPY_WHEN_ABSOLUTE 2
#define IS_ABSOLUTE_PATH(path, len) \
(len >= 2 && isalpha(path[0]) && path[1] == ':')
#define IS_UNC_PATH(path, len) \
(len >= 2 && IS_SLASH(path[0]) && IS_SLASH(path[1]))
#else
#ifdef HAVE_DIRENT_H
#include <dirent.h>
#endif
#define DEFAULT_SLASH '/'
#define DEFAULT_DIR_SEPARATOR ':'
#define IS_SLASH(c) ((c) == '/')
#endif
#ifndef COPY_WHEN_ABSOLUTE
#define COPY_WHEN_ABSOLUTE 0
#endif
#ifndef IS_ABSOLUTE_PATH
#define IS_ABSOLUTE_PATH(path, len) \
(IS_SLASH(path[0]))
#endif
#ifdef TSRM_EXPORTS
#define CWD_EXPORTS
#endif
#ifdef TSRM_WIN32
# ifdef CWD_EXPORTS
# define CWD_API __declspec(dllexport)
# else
# define CWD_API __declspec(dllimport)
# endif
#else
#define CWD_API
#endif
typedef struct _cwd_state {
char *cwd;
int cwd_length;
} cwd_state;
typedef int (*verify_path_func)(const cwd_state *);
CWD_API void virtual_cwd_startup(void);
CWD_API void virtual_cwd_shutdown(void);
CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC);
CWD_API char *virtual_getcwd(char *buf, size_t size TSRMLS_DC);
CWD_API int virtual_chdir(const char *path TSRMLS_DC);
CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path TSRMLS_DC) TSRMLS_DC);
CWD_API int virtual_filepath(const char *path, char **filepath TSRMLS_DC);
CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_func verify_path TSRMLS_DC);
CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC);
CWD_API FILE *virtual_fopen(const char *path, const char *mode TSRMLS_DC);
CWD_API int virtual_open(const char *path TSRMLS_DC, int flags, ...);
CWD_API int virtual_creat(const char *path, mode_t mode TSRMLS_DC);
CWD_API int virtual_rename(char *oldname, char *newname TSRMLS_DC);
CWD_API int virtual_stat(const char *path, struct stat *buf TSRMLS_DC);
#ifndef TSRM_WIN32
CWD_API int virtual_lstat(const char *path, struct stat *buf TSRMLS_DC);
#endif
CWD_API int virtual_unlink(const char *path TSRMLS_DC);
CWD_API int virtual_mkdir(const char *pathname, mode_t mode TSRMLS_DC);
CWD_API int virtual_rmdir(const char *pathname TSRMLS_DC);
CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC);
CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC);
#if HAVE_UTIME
CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC);
#endif
CWD_API int virtual_chmod(const char *filename, mode_t mode TSRMLS_DC);
#ifndef TSRM_WIN32
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group TSRMLS_DC);
#endif
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path);
typedef struct _virtual_cwd_globals {
cwd_state cwd;
} virtual_cwd_globals;
#ifdef ZTS
# define CWDG(v) TSRMG(cwd_globals_id, virtual_cwd_globals *, v)
#else
# define CWDG(v) (cwd_globals.v)
#endif
/* The actual macros to be used in programs using TSRM
* If the program defines VIRTUAL_DIR it will use the
* virtual_* functions
*/
#ifdef VIRTUAL_DIR
#define VCWD_GETCWD(buff, size) virtual_getcwd(buff, size TSRMLS_CC)
#define VCWD_FOPEN(path, mode) virtual_fopen(path, mode TSRMLS_CC)
/* Because open() has two modes, we have to macros to replace it */
#define VCWD_OPEN(path, flags) virtual_open(path TSRMLS_CC, flags)
#define VCWD_OPEN_MODE(path, flags, mode) virtual_open(path TSRMLS_CC, flags, mode)
#define VCWD_CREAT(path, mode) virtual_creat(path, mode TSRMLS_CC)
#define VCWD_CHDIR(path) virtual_chdir(path TSRMLS_CC)
#define VCWD_CHDIR_FILE(path) virtual_chdir_file(path, virtual_chdir TSRMLS_CC)
#define VCWD_GETWD(buf)
#define VCWD_REALPATH(path, real_path) virtual_realpath(path, real_path TSRMLS_CC)
#define VCWD_RENAME(oldname, newname) virtual_rename(oldname, newname TSRMLS_CC)
#define VCWD_STAT(path, buff) virtual_stat(path, buff TSRMLS_CC)
#ifdef TSRM_WIN32
#define VCWD_LSTAT(path, buff) virtual_stat(path, buff TSRMLS_CC)
#else
#define VCWD_LSTAT(path, buff) virtual_lstat(path, buff TSRMLS_CC)
#endif
#define VCWD_UNLINK(path) virtual_unlink(path TSRMLS_CC)
#define VCWD_MKDIR(pathname, mode) virtual_mkdir(pathname, mode TSRMLS_CC)
#define VCWD_RMDIR(pathname) virtual_rmdir(pathname TSRMLS_CC)
#define VCWD_OPENDIR(pathname) virtual_opendir(pathname TSRMLS_CC)
#define VCWD_POPEN(command, type) virtual_popen(command, type TSRMLS_CC)
#if HAVE_UTIME
#define VCWD_UTIME(path, time) virtual_utime(path, time TSRMLS_CC)
#endif
#define VCWD_CHMOD(path, mode) virtual_chmod(path, mode TSRMLS_CC)
#ifndef TSRM_WIN32
#define VCWD_CHOWN(path, owner, group) virtual_chown(path, owner, group TSRMLS_CC)
#endif
#else
#define VCWD_GETCWD(buff, size) getcwd(buff, size)
#define VCWD_FOPEN(path, mode) fopen(path, mode)
#define VCWD_OPEN(path, flags) open(path, flags)
#define VCWD_OPEN_MODE(path, flags, mode) open(path, flags, mode)
#define VCWD_CREAT(path, mode) creat(path, mode)
#define VCWD_RENAME(oldname, newname) rename(oldname, newname)
#define VCWD_CHDIR(path) chdir(path)
#define VCWD_CHDIR_FILE(path) virtual_chdir_file(path, chdir)
#define VCWD_GETWD(buf) getwd(buf)
#define VCWD_STAT(path, buff) stat(path, buff)
#define VCWD_LSTAT(path, buff) lstat(path, buff)
#define VCWD_UNLINK(path) unlink(path)
#define VCWD_MKDIR(pathname, mode) mkdir(pathname, mode)
#define VCWD_RMDIR(pathname) rmdir(pathname)
#define VCWD_OPENDIR(pathname) opendir(pathname)
#define VCWD_POPEN(command, type) popen(command, type)
#ifndef TSRM_WIN32
#define VCWD_REALPATH(path, real_path) realpath(path, real_path)
#else
#define VCWD_REALPATH(path, real_path) strcpy(real_path, path)
#endif
#if HAVE_UTIME
#define VCWD_UTIME(path, time) utime(path, time)
#endif
#define VCWD_CHMOD(path, mode) chmod(path, mode)
#ifndef TSRM_WIN32
#define VCWD_CHOWN(path, owner, group) chown(path, owner, group)
#endif
#endif
#endif /* VIRTUAL_CWD_H */
-359
View File
@@ -1,359 +0,0 @@
/*
+----------------------------------------------------------------------+
| PHP version 4.0 |
+----------------------------------------------------------------------+
| Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Daniel Beulshausen <daniel@php4win.de> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <process.h>
#include <time.h>
#include "TSRM.h"
#ifdef TSRM_WIN32
#include <windows.h>
#include "tsrm_win32.h"
#ifdef ZTS
static ts_rsrc_id win32_globals_id;
#else
static tsrm_win32_globals win32_globals;
#endif
static void tsrm_win32_ctor(tsrm_win32_globals *globals TSRMLS_DC)
{
globals->process = NULL;
globals->shm = NULL;
globals->process_size = 0;
globals->shm_size = 0;
globals->comspec = _strdup((GetVersion()<0x80000000)?"cmd.exe":"command.com");
}
static void tsrm_win32_dtor(tsrm_win32_globals *globals TSRMLS_DC)
{
shm_pair *ptr;
if (globals->process) {
free(globals->process);
}
if (globals->shm) {
for (ptr = globals->shm; ptr < (globals->shm + globals->shm_size); ptr++) {
UnmapViewOfFile(ptr->addr);
CloseHandle(ptr->segment);
UnmapViewOfFile(ptr->descriptor);
CloseHandle(ptr->info);
}
free(globals->shm);
}
free(globals->comspec);
}
TSRM_API void tsrm_win32_startup(void)
{
#ifdef ZTS
ts_allocate_id(&win32_globals_id, sizeof(tsrm_win32_globals), (ts_allocate_ctor)tsrm_win32_ctor, (ts_allocate_ctor)tsrm_win32_dtor);
#else
tsrm_win32_ctor(&win32_globals TSRMLS_CC);
#endif
}
TSRM_API void tsrm_win32_shutdown(void)
{
#ifndef ZTS
tsrm_win32_dtor(&win32_globals TSRMLS_CC);
#endif
}
static process_pair *process_get(FILE *stream TSRMLS_DC)
{
process_pair *ptr;
process_pair *newptr;
for (ptr = TWG(process); ptr < (TWG(process) + TWG(process_size)); ptr++) {
if (ptr->stream == stream) {
break;
}
}
if (ptr < (TWG(process) + TWG(process_size))) {
return ptr;
}
newptr = (process_pair*)realloc((void*)TWG(process), (TWG(process_size)+1)*sizeof(process_pair));
if (newptr == NULL) {
return NULL;
}
TWG(process) = newptr;
ptr = newptr + TWG(process_size);
TWG(process_size)++;
return ptr;
}
static shm_pair *shm_get(int key, void *addr)
{
shm_pair *ptr;
shm_pair *newptr;
TSRMLS_FETCH();
for (ptr = TWG(shm); ptr < (TWG(shm) + TWG(shm_size)); ptr++) {
if (!ptr->descriptor) {
continue;
}
if (!addr && ptr->descriptor->shm_perm.key == key) {
break;
} else if (ptr->addr == addr) {
break;
}
}
if (ptr < (TWG(shm) + TWG(shm_size))) {
return ptr;
}
newptr = (shm_pair*)realloc((void*)TWG(shm), (TWG(shm_size)+1)*sizeof(shm_pair));
if (newptr == NULL) {
return NULL;
}
TWG(shm) = newptr;
ptr = newptr + TWG(shm_size);
TWG(shm_size)++;
return ptr;
}
static HANDLE dupHandle(HANDLE fh, BOOL inherit) {
HANDLE copy, self = GetCurrentProcess();
if (!DuplicateHandle(self, fh, self, &copy, 0, inherit, DUPLICATE_SAME_ACCESS|DUPLICATE_CLOSE_SOURCE)) {
return NULL;
}
return copy;
}
TSRM_API FILE *popen(const char *command, const char *type)
{
FILE *stream = NULL;
int fno, str_len = strlen(type), read, mode;
STARTUPINFO startup;
PROCESS_INFORMATION process;
SECURITY_ATTRIBUTES security;
HANDLE in, out;
char *cmd;
process_pair *proc;
TSRMLS_FETCH();
security.nLength = sizeof(SECURITY_ATTRIBUTES);
security.bInheritHandle = TRUE;
security.lpSecurityDescriptor = NULL;
if (!str_len || !CreatePipe(&in, &out, &security, 2048L)) {
return NULL;
}
memset(&startup, 0, sizeof(STARTUPINFO));
memset(&process, 0, sizeof(PROCESS_INFORMATION));
startup.cb = sizeof(STARTUPINFO);
startup.dwFlags = STARTF_USESTDHANDLES;
startup.hStdError = GetStdHandle(STD_ERROR_HANDLE);
read = (type[0] == 'r') ? TRUE : FALSE;
mode = ((str_len == 2) && (type[1] == 'b')) ? O_BINARY : O_TEXT;
if (read) {
in = dupHandle(in, FALSE);
startup.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startup.hStdOutput = out;
} else {
out = dupHandle(out, FALSE);
startup.hStdInput = in;
startup.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
}
cmd = (char*)malloc(strlen(command)+strlen(TWG(comspec))+sizeof(" /c "));
sprintf(cmd, "%s /c %s", TWG(comspec), command);
if (!CreateProcess(NULL, cmd, &security, &security, security.bInheritHandle, NORMAL_PRIORITY_CLASS, NULL, NULL, &startup, &process)) {
return NULL;
}
free(cmd);
CloseHandle(process.hThread);
proc = process_get(NULL TSRMLS_CC);
if (read) {
fno = _open_osfhandle((long)in, _O_RDONLY | mode);
CloseHandle(out);
} else {
fno = _open_osfhandle((long)out, _O_WRONLY | mode);
CloseHandle(in);
}
stream = _fdopen(fno, type);
proc->prochnd = process.hProcess;
proc->stream = stream;
return stream;
}
TSRM_API int pclose(FILE *stream)
{
DWORD termstat = 0;
process_pair *process;
TSRMLS_FETCH();
if ((process = process_get(stream TSRMLS_CC)) == NULL) {
return 0;
}
fflush(process->stream);
fclose(process->stream);
WaitForSingleObject(process->prochnd, INFINITE);
GetExitCodeProcess(process->prochnd, &termstat);
process->stream = NULL;
CloseHandle(process->prochnd);
return termstat;
}
TSRM_API int shmget(int key, int size, int flags)
{
shm_pair *shm;
char shm_segment[26], shm_info[29];
HANDLE shm_handle, info_handle;
BOOL created = FALSE;
if (size < 0) {
return -1;
}
sprintf(shm_segment, "TSRM_SHM_SEGMENT:%d", key);
sprintf(shm_info, "TSRM_SHM_DESCRIPTOR:%d", key);
shm_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_segment);
info_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_info);
if ((!shm_handle && !info_handle)) {
if (flags & IPC_EXCL) {
return -1;
}
if (flags & IPC_CREAT) {
shm_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, shm_segment);
info_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(shm->descriptor), shm_info);
created = TRUE;
}
if ((!shm_handle || !info_handle)) {
return -1;
}
}
shm = shm_get(key, NULL);
shm->segment = shm_handle;
shm->info = info_handle;
shm->descriptor = MapViewOfFileEx(shm->info, FILE_MAP_ALL_ACCESS, 0, 0, 0, NULL);
if (created) {
shm->descriptor->shm_perm.key = key;
shm->descriptor->shm_segsz = size;
shm->descriptor->shm_ctime = time(NULL);
shm->descriptor->shm_cpid = getpid();
shm->descriptor->shm_perm.mode = flags;
shm->descriptor->shm_perm.cuid = shm->descriptor->shm_perm.cgid= 0;
shm->descriptor->shm_perm.gid = shm->descriptor->shm_perm.uid = 0;
shm->descriptor->shm_atime = shm->descriptor->shm_dtime = 0;
shm->descriptor->shm_lpid = shm->descriptor->shm_nattch = 0;
shm->descriptor->shm_perm.mode = shm->descriptor->shm_perm.seq = 0;
}
if (shm->descriptor->shm_perm.key != key || size > shm->descriptor->shm_segsz ) {
CloseHandle(shm->segment);
UnmapViewOfFile(shm->descriptor);
CloseHandle(shm->info);
return -1;
}
return key;
}
TSRM_API void *shmat(int key, const void *shmaddr, int flags)
{
shm_pair *shm = shm_get(key, NULL);
if (!shm->segment) {
return (void*)-1;
}
shm->descriptor->shm_atime = time(NULL);
shm->descriptor->shm_lpid = getpid();
shm->descriptor->shm_nattch++;
shm->addr = MapViewOfFileEx(shm->segment, FILE_MAP_ALL_ACCESS, 0, 0, 0, NULL);
return shm->addr;
}
TSRM_API int shmdt(const void *shmaddr)
{
shm_pair *shm = shm_get(0, (void*)shmaddr);
if (!shm->segment) {
return -1;
}
shm->descriptor->shm_dtime = time(NULL);
shm->descriptor->shm_lpid = getpid();
shm->descriptor->shm_nattch--;
return UnmapViewOfFile(shm->addr) ? 0 : -1;
}
TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf) {
shm_pair *shm = shm_get(key, NULL);
if (!shm->segment) {
return -1;
}
switch (cmd) {
case IPC_STAT:
memcpy(buf, shm->descriptor, sizeof(struct shmid_ds));
return 0;
case IPC_SET:
shm->descriptor->shm_ctime = time(NULL);
shm->descriptor->shm_perm.uid = buf->shm_perm.uid;
shm->descriptor->shm_perm.gid = buf->shm_perm.gid;
shm->descriptor->shm_perm.mode = buf->shm_perm.mode;
return 0;
case IPC_RMID:
if (shm->descriptor->shm_nattch < 1) {
shm->descriptor->shm_perm.key = -1;
}
return 0;
default:
return -1;
}
}
#endif
-107
View File
@@ -1,107 +0,0 @@
/*
+----------------------------------------------------------------------+
| PHP version 4.0 |
+----------------------------------------------------------------------+
| Copyright (c) 1997, 1998, 1999, 2000 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.txt. |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Daniel Beulshausen <daniel@php4win.de> |
+----------------------------------------------------------------------+
*/
/* $Id$ */
#ifndef TSRM_WIN32_H
#define TSRM_WIN32_H
#include "TSRM.h"
#ifdef TSRM_WIN32
#include <windows.h>
struct ipc_perm {
int key;
unsigned short uid;
unsigned short gid;
unsigned short cuid;
unsigned short cgid;
unsigned short mode;
unsigned short seq;
};
struct shmid_ds {
struct ipc_perm shm_perm;
int shm_segsz;
time_t shm_atime;
time_t shm_dtime;
time_t shm_ctime;
unsigned short shm_cpid;
unsigned short shm_lpid;
short shm_nattch;
};
typedef struct {
FILE *stream;
HANDLE prochnd;
} process_pair;
typedef struct {
void *addr;
HANDLE info;
HANDLE segment;
struct shmid_ds *descriptor;
} shm_pair;
typedef struct {
process_pair *process;
shm_pair *shm;
int process_size;
int shm_size;
char *comspec;
} tsrm_win32_globals;
#ifdef ZTS
# define TWG(v) TSRMG(win32_globals_id, tsrm_win32_globals *, v)
#else
# define TWG(v) (win32_globals.v)
#endif
#endif
#define IPC_PRIVATE 0
#define IPC_CREAT 00001000
#define IPC_EXCL 00002000
#define IPC_NOWAIT 00004000
#define IPC_RMID 0
#define IPC_SET 1
#define IPC_STAT 2
#define IPC_INFO 3
#define SHM_R PAGE_READONLY
#define SHM_W PAGE_READWRITE
#define SHM_RDONLY FILE_MAP_READ
#define SHM_RND FILE_MAP_WRITE
#define SHM_REMAP FILE_MAP_COPY
TSRM_API void tsrm_win32_startup(void);
TSRM_API void tsrm_win32_shutdown(void);
TSRM_API FILE *popen(const char *command, const char *type);
TSRM_API int pclose(FILE *stream);
TSRM_API int shmget(int key, int size, int flags);
TSRM_API void *shmat(int key, const void *shmaddr, int flags);
TSRM_API int shmdt(const void *shmaddr);
TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf);
#endif
+50 -110
View File
@@ -1,116 +1,56 @@
---------------------------------------------------------------------------
The Zend License, version 0.92
Copyright (C) 1999-2001 Zend Technologies Ltd.
---------------------------------------------------------------------------
--------------------------------------------------------------------
The Zend Engine License, version 2.00
Copyright (c) 1999-2002 Zend Technologies Ltd. All rights reserved.
--------------------------------------------------------------------
The Zend scripting engine library is a product of Zend Technologies Ltd.
It may be used and/or distributed under the terms of the Q Public
License (QPL) version 1.0, enclosed below.
Redistribution and use in source and binary forms, with or without
modification, is permitted provided that the following conditions
are met:
For more information about Zend please visit http://www.zend.com/
For license related questions please mail license@zend.com
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
3. The names "Zend" and "Zend Engine" must not be used to endorse
or promote products derived from this software without prior
permission from Zend Technologies Ltd. For written permission,
please contact license@zend.com.
4. Zend Technologies Ltd. may publish revised and/or new versions
of the license from time to time. Each version will be given a
distinguishing version number.
Once covered code has been published under a particular version
of the license, you may always continue to use it under the
terms of that version. You may also choose to use such covered
code under the terms of any subsequent version of the license
published by Zend Technologies Ltd. No one other than Zend
Technologies Ltd. has the right to modify the terms applicable
to covered code created under this License.
===========================================================================
5. Redistributions of any form whatsoever must retain the following
acknowledgment:
"This product includes the Zend Engine, freely available at
http://www.zend.com"
THE Q PUBLIC LICENSE
version 1.0
6. All advertising materials mentioning features or use of this
software must display the following acknowledgment:
"The Zend Engine is freely available at http://www.zend.com"
Copyright (C) 1999 Troll Tech AS, Norway.
Everyone is permitted to copy and
distribute this license document.
THIS SOFTWARE IS PROVIDED BY ZEND TECHNOLOGIES LTD. ``AS IS'' AND
ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ZEND
TECHNOLOGIES LTD. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
The intent of this license is to establish freedom to share and change the
software regulated by this license under the open source model.
This license applies to any software containing a notice placed by the
copyright holder saying that it may be distributed under the terms of
the Q Public License version 1.0. Such software is herein referred to as
the Software. This license covers modification and distribution of the
Software, use of third-party application programs based on the Software,
and development of free software which uses the Software.
Granted Rights
1. You are granted the non-exclusive rights set forth in this license
provided you agree to and comply with any and all conditions in this
license. Whole or partial distribution of the Software, or software
items that link with the Software, in any form signifies acceptance of
this license.
2. You may copy and distribute the Software in unmodified form provided
that the entire package, including - but not restricted to - copyright,
trademark notices and disclaimers, as released by the initial developer
of the Software, is distributed.
3. You may make modifications to the Software and distribute your
modifications, in a form that is separate from the Software, such as
patches. The following restrictions apply to modifications:
a. Modifications must not alter or remove any copyright notices in
the Software.
b. When modifications to the Software are released under this
license, a non-exclusive royalty-free right is granted to the
initial developer of the Software to distribute your modification
in future versions of the Software provided such versions remain
available under these terms in addition to any other license(s) of
the initial developer.
4. You may distribute machine-executable forms of the Software or
machine-executable forms of modified versions of the Software, provided
that you meet these restrictions:
a. You must include this license document in the distribution.
b. You must ensure that all recipients of the machine-executable forms
are also able to receive the complete machine-readable source code
to the distributed Software, including all modifications, without
any charge beyond the costs of data transfer, and place prominent
notices in the distribution explaining this.
c. You must ensure that all modifications included in the
machine-executable forms are available under the terms of this
license.
5. You may use the original or modified versions of the Software to
compile, link and run application programs legally developed by you
or by others.
6. You may develop application programs, reusable components and other
software items that link with the original or modified versions of the
Software. These items, when distributed, are subject to the following
requirements:
a. You must ensure that all recipients of machine-executable forms of
these items are also able to receive and use the complete
machine-readable source code to the items without any charge
beyond the costs of data transfer.
b. You must explicitly license all recipients of your items to use
and re-distribute original and modified versions of the items in
both machine-executable and source code forms. The recipients must
be able to do so without any charges whatsoever, and they must be
able to re-distribute to anyone they choose.
c. If the items are not available to the general public, and the
initial developer of the Software requests a copy of the items,
then you must supply one.
Limitations of Liability
In no event shall the initial developers or copyright holders be liable
for any damages whatsoever, including - but not restricted to - lost
revenue or profits or other direct, indirect, special, incidental or
consequential damages, even if they have been advised of the possibility
of such damages, except to the extent invariable law, if any, provides
otherwise.
No Warranty
The Software and this license document are provided AS IS with NO WARRANTY
OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE.
===========================================================================
--------------------------------------------------------------------
+2 -2
View File
@@ -13,7 +13,7 @@ libZend_la_SOURCES=\
zend_opcode.c zend_operators.c zend_ptr_stack.c zend_stack.c \
zend_variables.c zend.c zend_API.c zend_extensions.c zend_hash.c \
zend_list.c zend_indent.c zend_builtin_functions.c zend_sprintf.c \
zend_ini.c zend_objects.c
zend_ini.c zend_qsort.c zend_objects.c
libZend_la_LDFLAGS = @EXTRA_LIBS@
@@ -45,5 +45,5 @@ zend_ini_parser.h: zend_ini_parser.c
depend:
zend_execute.lo: $(srcdir)/zend_execute.c
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(INLINE_CFLAGS) -c $(srcdir)/zend_execute.c
$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(INLINE_CFLAGS) -c $(srcdir)/zend_execute.c
+136
View File
@@ -0,0 +1,136 @@
Revamped object model using object handles
===========================================
Background
----------
In the Zend Engine 1.0 (and its predecessor the PHP 3 scripting
engine) the object model's design is that instantiated objects are
language values. This means that when programmers are performing
operations, such variable assignment and passing parameters to
functions, objects are handled very similarly to the way other
primitive types are handled such as integers and strings.
Semantically this means that the whole object is being copied. The
approach Java takes is different where one refers to objects by handle
and not by value (one can think of a handle as an objects' ID).
Need
----
Unfortunately, the approach taken up to now has severely limited the
Zend Engine's object oriented model, both feature and simplicity
wise. One of the main problems with the former approach is that object
instantiation and duplication is very hard to control, a problem which
can not only lead to inefficient development but also often to strange
run-time behavior. Changing the object model to a handle oriented
model will allow the addressing of many needs such as destructors,
de-referencing method return values, tight control of object
duplication and more.
Overview
--------
The proposed object model is very much influenced by the Java
model. In general, when you create a new object you will be getting a
handle to the object instead of the object itself. When this handle is
sent to functions, assigned and copied it is only the handle which is
copied/sent/assigned. The object itself is never copied nor
duplicated. This results in all handles of this object to always point
at the same object making it a very consistent solution and saving
unnecessary duplication and confusing behavior.
Functionality
-------------
After this change the basic use of objects will be almost identical to
previous versions of the scripting engine. However, you won't bump
into awkward and confusing copying & destructing of objects. In order
to create and use a new object instance you will do the following:
$object = new MyClass(); $object->method();
The previous code will assign $object the handle of a new instance of
the class MyClass and call one of its methods.
Consider the following code:
1 class MyClass
2 {
3 function setMember($value)
4 {
5 $this->member = $value;
6 }
7
8 function getMember()
9 {
10 return $this->member;
11 }
12 }
13
14 function foo($obj)
15 {
16 $obj->setMember("foo");
17 }
18
19 $object = new MyClass();
20 $object->setMember("bar");
21 foo($object);
22 print $object->getMember();
Without the new Java-like handles, at line 20 the objects' data member
member is set to the string value of "bar". Because of the internal
representation of objects in the Zend Engine 1.0, the object is marked
as a reference, and when it is sent by value to the function foo, it
is duplicated (!). Therefore, the call to foo() on line 21 will
result in the $obj->setMember("foo") call being called on a duplicate
of $object. Line 22 will then result in "bar" being printed.
This is how the scripting engine has worked until today. Most
developers are probably unaware of the fact that they aren't always
talking to the same object but often duplicates; others may have
realized this can usually be solved by always passing objects by
reference (unless a replica is actually desired, which is uncommon).
The new object model will allow for a much more intuitive
implementation of the code. On line 21, the object's handle (ID) is
passed to foo() by value. Inside foo(), the object is fetched
according to this handle and, therefore, the setMember() method is
called on the originally instantiated object and not a copy. Line 22
will therefore result in "foo" being printed. This approach gives
developers tighter control of when objects are created and duplicated.
An additional not-as-important benefit is that the object handle will
be passed to foo() by value, which most probably will also save
unnecessary duplication of the value containing the ID itself and thus
additionally improving run-time performance.
This was just a simple description of why the new object model solves
awkward behavior and makes object handling much easier, intuitive and
efficient. The importance of this change goes far beyond what is
mentioned in this section as you will see in further sections which
describe new features with a majority of them being based on this
change.
Compatibility Notes
--------------------
Many PHP programmers aren't even aware of the copying quirks of the
current object model and, therefore, there is a relatively good chance
that the amount of PHP applications that will work out of the box or
after a very small amount of modifications would be high.
To simplify migration, version 2.0 will support an optional
'auto-clone' feature, which will perform a cloning of the object
whenever it would have been copied in version 1.0. Optionally, it
will also be possible to request that the engine will emit an E_NOTICE
message whenever such an automatic clone occurs, in order to allow
developers to gradually migrate to the version 2.0-style behavior
(without automatic clones).
Dependencies
------------
The new object model is not dependent on other features. Many of the
other Zend Engine 2.0 features, such as the $foo->bar()->barbara()
syntax, destructors and others completely rely on this new object
model.
+169
View File
@@ -0,0 +1,169 @@
Title: Zend 2.0 Namespaces
Version: $Revision$
Status: draft
Maintainer: Stig S. Bakken <ssb@fast.no>
Created: 2001-09-08
Modified: 2001-09-08
1. Background/Need
==================
PHP and Zend 1.0 have come to a point where a lot of reusable code is
being written; from simple functions and classes to entire application
frameworks. It is becoming increasingly difficult to avoid symbol
name collisions with the current scoping methods.
The symbol scopes available in Zend 1.0 are the global scope, the
class scope and the function scope. All scopes but classes may
contain variables, only the class and global scopes may contain
functions, while only the global scope may contain constants and
classes. This means that all of Zend 1.0's scoping methods are
inherently limited for solving symbol name collision problems.
2. Overview
===========
Namespaces in Zend 2.0 provide a way to manage the symbol collision
problem by making it possible to define multiple symbol tables able to
contain all types of symbols. Zend will get the notion of a current
namespace, defaulting to the current global one. The current name
space may be changed on a file-by-file basis. Symbols in other name
spaces than the current one may be referenced using a new namespace
operator. It will be possible to "import" symbols from one namespace
into another.
3. Functionality
================
3.1. Namespace Syntax
=====================
The namespace operator ":" is used to refer to symbols in other
namespaces than the current one:
Class: Namespace:class
Function: Namespace:function
Static method: Namespace:class::method
Variable: $Namespace:variable
Constant: Namespace:CONSTANT
Class variable: $Namespace:class::variable
To refer to symbols in the global namespace, symbols are prefixed with
only the namespace operator:
Class: :class
Function: :function
Static method: :class::method
Variable: $:variable
Constant: :CONSTANT
Class variable: $:class::variable
Note: $:variable will effectively be just another syntax for
$GLOBALS['variable'].
A namespace may have a name containing a ":", it is always the last
":" character in the symbol qualifier that is the actual namespace
operator:
Class: Name:Space:class
Function: Name:Space:function
Static method: Name:Space:class::method
Variable: $Name:Space:variable
Constant: Name:Space:CONSTANT
Class variable: $Name:Space:class::variable
(Here, the ":" between "Name" and "Space" is part of the name, it is
the one after "Space" that is the namespace operator.)
3.2. Defining Namespaces
========================
Individual files may define a namespace that will apply to the entire
file. If no "namespace" operator occurs in the file, it will be in
the global namespace:
1 namespace HTML;
2
3 class Form {
4 function Form() {
5 // constructor
6 }
7 // ...
8 }
Or with the "nested" name syntax:
1 namespace HTML:Form;
2
3 class Image {
4 var $src;
5 function Image($src) {
6 $this->src = $src;
7 }
8 // ...
9 }
Code executed within the "HTML" namespace may refer to the Form class
as just "Form". Code executed from within other namespaces has to
refer to it as "HTML:Form". The "namespace" statement must occur
before any other statements in the file.
# [ssb 2001-09-08]:
# Should it be possible to "add" symbols to a namespace by including a
# second file with the same namespace statement?
3.3. Importing Symbols
======================
It is possible to import symbols from another namespace into the
current one with the "import" statement:
import * from HTML; // all symbols
import Form from HTML; // single symbols
import Form,Table from HTML; // multiple symbols
There is a potential for name clashes between symols of different
types that have the same qualifier syntax. These are resolved in this
order: class, function, constant.
Optionally, the symbol type may be explicitly given to import (as
"class", "function", "variable" or "constant"):
import class Form from HTML;
And finally, you may import all symbols of a given type:
import constant * from HTML:Table;
The namespace with its symbols must already be defined before using
"import".
4. Compatibility Notes
======================
Old code that does not take advantage of namespaces will run without
modifications.
5. Dependencies
===============
The class variable syntax depends on this class variables being
implemented in the new ZE2 object model.
6. Acknowledgements
===================
Andi Gutmans <andi@zend.com> and Zeev Suraski <zeev@zend.com> for
initial ZE2 namespaces proposal
Dean Hall <php@apt7.com> for the initial symbol qualification syntax
+72
View File
@@ -0,0 +1,72 @@
Title: Loose type requirements for functions
Version: $Revision$
Status: draft
Maintainer: Brian Moon <brianm@dealnews.com>
Created: 2001-09-17
Modified: 2001-09-17
1. Background/Need
==================
Many internal function of PHP will reject parameters because of their
type (the array and variable function come to mind). For userland
this is not an easy task as there is no uniform way to do it. An
addition to the engine for requiring loose types would allow
delevopers to know that the data passed to their functions is of the
correct type and reduce the need for duplicating the same code in
every function to check for the type of data.
2. Overview
===========
Loose typing mostly means evaluating the contents of the variable and
not the type of the variable itself. The requirements for this would
and should work much like several of the is_* functions do now.
The typing of parameters would be optional and those not typed would
simply continue to be treated as they are now.
3. Functionality
================
3.1. Allowed Types
==================
Only loose types should be needed to ensure the data is usable by the
function. Duplicating the functionallity of is_scalar, is_resource,
is_array and is_object should give developers all the information they
need to use a variable correctly.
3.2. Syntax
===========
The current function syntax should be expanded to allow typing of
variables inline in a C style.
function foo ($var){
}
could be changed to require an array such as:
function foo (array $var){
}
3.3. Errors
===========
Mis-matches in type should be reported as fatal errors and should halt
the execution of a script as that function can not be run and code
following could not reliably run.
4. Compatibility Notes
======================
Old code that does not take advantage of this will run without
modifications.
+245 -101
View File
@@ -1,112 +1,256 @@
Improvements
------------
Changes in the Zend Engine 2.0
Zend was designed from the ground up for increased speed,
reduced memory consumption and more reliable execution. We dare
say it meets all of these goals and does so pretty well. Beyond
that, there are several improvements in the language engine
features:
* New object model.
* References support. $foo = &$a; would make $foo and $a be two
names to the same variable. This works with arrays as well,
on either side; e.g., $foo = &$a[7]; would make $foo and $a[7]
be two names to the same variable. Changing one would change
the other and vice versa.
* Object overloading support. This feature allows various OO
libraries to use the OO notation of PHP to access their
functionality. Right now, no use is made of that feature,
but we'd have a COM module ready by the time PHP 4.0 is released.
A CORBA module would probably follow.
* include() and eval() are now functions, and not statements.
That means they return a value. The default return value from
include() and eval() is 1, so that you can do if (include())
without further coding. The return value may be changed by
returning a value from the global scope of the included file
or the evaluated string. For example, if 'return 7;' is executed
in the global scope of foo.inc, include("foo.inc") would evaluate
to 7.
* Automatic resource deallocation. Several people have been bitten
by the fact that PHP 3.0 had no concept of reference counting.
Zend adds full reference counting for every value in the system,
including resources. As soon as a resource is no longer referenced
from any variable, it is automatically destroyed to save memory
and resources. The most obvious example for the advantage in this
is a loop that has an SQL query inside it, something like
'$result = sql_query(...);'. In PHP 3.0, every iteration resulted
in another SQL result-set allocated in the memory, and all of the
result sets weren't destroyed until the end of the script's execution.
In Zend, as soon as we overwrite an old result set with a new one,
the old result set which is no longer referenced, is destroyed.
* Full support for nesting arrays and objects within each other, in
as many levels as you want.
* Boolean type. true and false are now constants of type boolean.
Comparing any other value to them would convert that value to a
boolean first, and conduct the comparison later. That means, for
example, that 5==true would evaluate to true (in PHP 3.0, true
was nothing but a constant for the integer value of 1, so 5==true
was identical to 5==1, which was false).
* Runtime binding of function names. This complex name has a simple
explanation - you can now call functions before they're declared!
* Added here-docs support.
* Added foreach. Two syntaxes supported:
foreach(array_expr as $val) statement
foreach(array_expr as $key => $val) statement
* A true unset() implementation. A variable or element that is unset(), is now
sent to oblivion in its entirely, no trace remains from it.
* Output buffering support! Use ob_start() to begin output buffering, ob_end_flush()
to end buffering and send out the buffered contents, ob_end_clean() to end buffering
without sending the buffered contents, and ob_get_contents() to retreive the current
contents of the output buffer.
Header information (header(), content type, cookies) are not buffered. By turning
on output buffering, you can effectively send header information all throughout your
file, regardless of whether you've emitted body output or not.
* Full variable reference within quoted strings:
${expr} - full indirect reference support for scalar variables
{variable} - full variable support
For example:
$foo[5]["bar"] = "foobar";
print "{$foo[5]["bar"]}"; // would print "foobar"
* Ability to call member functions of other classes from within member functions or from
the global scope. You can now, for example, override a parent function with a child function,
and call the parent function from it.
* Runtime information for classes (class name, parent, available functions, etc.).
* Much more efficient syntax highlighter - runs much quicker, performs more reliably, and
generates much tighter HTML.
* A full-featured debugger has been integrated with the language (supports breakpoints,
expression evaluation, step-in/over, function call backtrace, and more).
The Zend Engine's handling of objects has been completely
changed in order to allow for new features, but also to increase
its performance.
Objects were handled in previous versions like primitive types
(for instance integers and strings). The drawback of this method
is, that semantically the whole object was copied when a
variable was assigned or parameters were passed to a method. The
new approach refers to objects by handle and not by value (one
can think of a handle as an objects' ID).
Incompatabilities
-----------------
Many PHP programmers aren't even aware of the copying quirks of
the old object model and, therefore, there is a relatively good
chance that the amount of PHP applications that will work out of
the box or after a very small amount of modifications would be
high.
Zend claims 100% compatability with the engine of PHP 3.0, and is
shamelessly lying about it. Here's why:
To simplify migration, the Zend Engine 2.0 supports an optional
'auto-clone' feature, which performs a cloning of the object
whenever it would have been copied in version 1.0. Optionally,
it emits an E_NOTICE message whenever such an automatic clone
occurs, in order to allow developers to gradually migrate to the
version 2.0-style behavior (without automatic clones).
* static variable initializers only accept scalar values
(in PHP 3.0 they accepted any valid expression). The impact
should be somewhere in between void and non existent, since
initializing a static variable with anything but a simple
static value makes no sense at all.
* delete statement.
* The scope of break and continue is local to that of an
include()'d file or an eval()'d string. The impact should
be somewhat smaller of the one above.
The Zend Engine 1.0 had no means to force deletion of an object
if there are still references to it. The newly introduces delete
statement calls the object’s destructor and frees it even if the
object is referenced by some other places in the engine. Other
references to the deleted object become stale and trying to
access them results in a fatal error.
* return statement from a require()'d file no longer works. It
hardly worked in PHP 3.0, so the impact should be fairly small.
If you want this functionality - use include() instead.
Note that if you have a user-defined function delete() in an old
script, this script will yield a parser error with the Zend
Engine 2.0, since 'delete' is now a reserved word.
* unset() is no longer a function, but a statement. It was never
documented as a function so the impact should be no bigger than
nada.
* Exceptions.
* The following letter combination is not supported within encapsulated
strings: "{$". If you have a string that includes this letter
combination, for example, print "{$somevar"; (which printed the
letter { and the contents of the variable $somevar in PHP 3.0),
it will result in a parse error under Zend. In this case, you
would have to change the code to print "\{$somevar";
This incompatability is due to the full variable reference
within quoted strings feature added in Zend.
The Zend Engine 1.0 had no exception handling. The Zend Engine 2.0
introduces a exception model similar to that of other programming
languages.
Example
try {
code
if (failure) {
throw new MyException(Failure);
}
code
} catch ($exception) {
handle exception
throw $exception; // Re-throw exception.
}
Old code that does not use exceptions will run without
modifications.
* Namespaces.
The Zend Engine 1.0 provided only three scopes: the global
scope, the class scope and the function scope. All scopes but
classes could contain variables, only the class and global
scopes could contain functions, while only the global scope
could contain constants and classes. This means that all of the
Zend Engine 1.0's scoping methods were inherently limited for
solving symbol name collision problems.
The Zend Engine 2.0 introduces the concept of namespaces to
manage the symbol collision problem by making it possible to
define multiple symbol tables able to contain all types of
symbols. The Zend Engine is aware of a current namespace,
defaulting to the current global one. The current namespace may
be changed on a file-by-file basis. Symbols in other namespaces
than the current one may be referenced using a new namespace
operator. It is possible to "import" symbols from one namespace
into another.
Old code that does not take advantage of namespaces will run
without modifications.
* Static member variables of static classes can now be
initialized.
<?php
class foo
{
static $my_static = 5;
}
print foo::$my_static;
?>
* Class constants.
<?php
class foo
{
const hey = "hello";
}
print foo::hey;
?>
Changes in the Zend Engine 1.0
The Zend Engine was designed from the ground up for increased speed,
reduced memory consumption and more reliable execution. We dare say
it meets all of these goals and does so pretty well. Beyond that,
there are several improvements in the language engine features:
* References support.
$foo = &$a; would make $foo and $a be two names to the same
variable. This works with arrays as well, on either side; e.g.,
$foo = &$a[7]; would make $foo and $a[7] be two names to the
same variable. Changing one would change the other and vice
versa.
* Object overloading support.
This feature allows various OO libraries to use the OO notation
of PHP to access their functionality. Right now, no use is made
of that feature, but we'd have a COM module ready by the time
PHP 4.0 is released. A CORBA module would probably follow.
* include() and eval() are now functions, and not statements.
That means they return a value. The default return value from
include() and eval() is 1, so that you can do if (include())
without further coding. The return value may be changed by
returning a value from the global scope of the included file or
the evaluated string. For example, if 'return 7;' is executed in
the global scope of foo.inc, include("foo.inc") would evaluate
to 7.
* Automatic resource deallocation.
Several people have been bitten by the fact that PHP 3.0 had no
concept of reference counting. The Zend Engine adds full
reference counting for every value in the system, including
resources. As soon as a resource is no longer referenced from
any variable, it is automatically destroyed to save memory and
resources. The most obvious example for the advantage in this is
a loop that has an SQL query inside it, something like '$result
= sql_query(...);'. In PHP 3.0, every iteration resulted in
another SQL result-set allocated in the memory, and all of the
result sets weren't destroyed until the end of the script's
execution. With the Zend Engine, as soon as we overwrite an old
result set with a new one, the old result set which is no longer
referenced, is destroyed.
* Full support for nesting arrays and objects within each other,
in as many levels as you want.
* true and false are now constants of type boolean.
Comparing any other value to them would convert that value to a
boolean first, and conduct the comparison later. That means, for
example, that 5==true would evaluate to true (in PHP 3.0, true
was nothing but a constant for the integer value of 1, so
5==true was identical to 5==1, which was false).
* Runtime binding of function names.
This complex name has a simple explanation - you can now call
functions before they're declared!
* Added here-docs support.
* Added foreach.
Two syntaxes supported:
foreach(array_expr as $val) statement
foreach(array_expr as $key => $val) statement
* A true unset() implementation.
A variable or element that is unset(), is now sent to oblivion
in its entirely, no trace remains from it.
* Output buffering support.
Use ob_start() to begin output buffering, ob_end_flush() to end
buffering and send out the buffered contents, ob_end_clean() to
end buffering without sending the buffered contents, and
ob_get_contents() to retreive the current contents of the output
buffer. Header information (header(), content type, cookies) are
not buffered. By turning on output buffering, you can
effectively send header information all throughout your file,
regardless of whether you've emitted body output or not.
* Full variable reference within quoted strings:
${expr} - full indirect reference support for scalar
variables
{variable} - full variable support
For example:
$foo[5]["bar"] = "foobar";
print "{$foo[5]["bar"]}"; // would print "foobar"
* Ability to call member functions of other classes from within
member functions or from the global scope.
You can now, for example, override a parent function with a
child function, and call the parent function from it.
* Runtime information for classes (class name, parent, available
functions, etc.).
* Much more efficient syntax highlighter - runs much quicker,
performs more reliably, and generates much tighter HTML.
* A full-featured debugger has been integrated with the language
(supports breakpoints, expression evaluation, step-in/over,
function call backtrace, and more).
The Zend Engine claims 100% compatability with the engine of PHP
3.0, and is shamelessly lying about it. Here's why:
* Static variable initializers only accept scalar values
(in PHP 3.0 they accepted any valid expression). The impact
should be somewhere in between void and non existent, since
initializing a static variable with anything but a simple
static value makes no sense at all.
* The scope of break and continue is local to that of an
include()'d file or an eval()'d string. The impact should
be somewhat smaller of the one above.
* The return statement no longer works from a require()'d file. It
hardly worked in PHP 3.0, so the impact should be fairly small. If
you want this functionality - use include() instead.
* unset() is no longer a function, but a statement.
* The following letter combination is not supported within
encapsulated strings: "{$". If you have a string that includes
this letter combination, for example, print "{$somevar"; (which
printed the letter { and the contents of the variable $somevar in
PHP 3.0), it will result in a parse error with the Zend Engine.
In this case, you would have to change the code to print
"\{$somevar"; This incompatability is due to the full variable
reference within quoted strings feature added in the Zend
Engine.
+12
View File
@@ -183,6 +183,10 @@ SOURCE=.\zend_llist.c
# End Source File
# Begin Source File
SOURCE=.\zend_objects.c
# End Source File
# Begin Source File
SOURCE=.\zend_opcode.c
# End Source File
# Begin Source File
@@ -195,6 +199,10 @@ SOURCE=.\zend_ptr_stack.c
# End Source File
# Begin Source File
SOURCE=.\zend_qsort.c
# End Source File
# Begin Source File
SOURCE=.\zend_sprintf.c
# End Source File
# Begin Source File
@@ -307,6 +315,10 @@ SOURCE=.\zend_ptr_stack.h
# End Source File
# Begin Source File
SOURCE=.\zend_qsort.h
# End Source File
# Begin Source File
SOURCE=.\zend_stack.h
# End Source File
# Begin Source File
+20 -1
View File
@@ -1,3 +1,8 @@
dnl
dnl $Id$
dnl
dnl This file contains Zend specific autoconf functions.
dnl
AC_DEFUN(LIBZEND_BISON_CHECK,[
@@ -5,7 +10,7 @@ if test "$YACC" != "bison -y"; then
AC_MSG_WARN(You will need bison if you want to regenerate the Zend parser.)
else
AC_MSG_CHECKING(bison version)
set `bison --version| sed -e 's/^GNU Bison version //' -e 's/\./ /'`
set `bison --version| grep 'GNU Bison' | cut -d ' ' -f 4 | sed -e 's/\./ /'`
if test "${1}" = "1" -a "${2}" -lt "28"; then
AC_MSG_WARN(You will need bison 1.28 if you want to regenerate the Zend parser (found ${1}.${2}).)
fi
@@ -21,6 +26,7 @@ AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_PROG_CC_C_O])
AC_REQUIRE([AC_PROG_LEX])
AC_REQUIRE([AC_HEADER_STDC])
AC_REQUIRE([AC_PROG_LIBTOOL])
LIBZEND_BISON_CHECK
@@ -54,6 +60,19 @@ AC_TYPE_SIGNAL
AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"])
AC_CHECK_FUNC(dlopen,[AC_DEFINE(HAVE_LIBDL, 1,[ ])])
dnl
dnl Ugly hack to check if dlsym() requires a leading underscore in symbol name.
dnl
AC_MSG_CHECKING([whether dlsym() requires a leading underscore in symbol names])
_LT_AC_TRY_DLOPEN_SELF([
AC_MSG_RESULT(no)
], [
AC_MSG_RESULT(yes)
AC_DEFINE(DLSYM_NEEDS_UNDERSCORE, 1, [Define if dlsym() requires a leading underscore in symbol names. ])
], [
AC_MSG_RESULT(no)
], [])
dnl This is required for QNX and may be some BSD derived systems
AC_CHECK_TYPE( uint, unsigned int )
AC_CHECK_TYPE( ulong, unsigned long )
+8
View File
@@ -228,6 +228,10 @@ SOURCE=.\zend_ptr_stack.c
# End Source File
# Begin Source File
SOURCE=.\zend_qsort.c
# End Source File
# Begin Source File
SOURCE=.\zend_sprintf.c
# End Source File
# Begin Source File
@@ -368,6 +372,10 @@ SOURCE=.\zend_ptr_stack.h
# End Source File
# Begin Source File
SOURCE=.\zend_qsort.h
# End Source File
# Begin Source File
SOURCE=.\zend_stack.h
# End Source File
# Begin Source File
+72 -44
View File
@@ -98,7 +98,7 @@ class istream;
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE yyrestart( yyin TSRMLS_CC )
#define YY_NEW_FILE yyrestart( SCNG(yy_in) TSRMLS_CC )
#define YY_END_OF_BUFFER_CHAR 0
@@ -214,6 +214,7 @@ struct yy_buffer_state
%- Standard (non-C++) definition
#define yy_current_buffer SCNG(current_buffer)
#define yy_hold_char SCNG(_yy_hold_char)
%*
/* We provide macros for accessing buffer states in case in the
@@ -225,9 +226,12 @@ struct yy_buffer_state
%- Standard (non-C++) definition
/* yy_hold_char holds the character lost when yytext is formed. */
#if 0
static char yy_hold_char;
static int yy_n_chars; /* number of characters read into yy_ch_buf */
#endif
/* Points to current character in buffer. */
#define yy_c_buf_p SCNG(c_buf_p)
@@ -249,7 +253,8 @@ static int yy_n_chars; /* number of characters read into yy_ch_buf */
/* Flag which is used to allow yywrap()'s to do buffer switches
* instead of setting up a fresh yyin. A bit of a hack ...
*/
static int yy_did_buffer_switch_on_eof;
/* static int yy_did_buffer_switch_on_eof; */
#define yy_did_buffer_switch_on_eof SCNG(_yy_did_buffer_switch_on_eof)
void yyrestart YY_PROTO(( FILE *input_file TSRMLS_DC ));
@@ -276,14 +281,14 @@ static void yy_flex_free YY_PROTO(( void * ));
#define yy_set_interactive(is_interactive) \
{ \
if ( ! yy_current_buffer ) \
yy_current_buffer = yy_create_buffer( SCNG(yyin), YY_BUF_SIZE TSRMLS_CC ); \
yy_current_buffer = yy_create_buffer( SCNG(yy_in), YY_BUF_SIZE TSRMLS_CC ); \
yy_current_buffer->yy_is_interactive = is_interactive; \
}
#define yy_set_bol(at_bol) \
{ \
if ( ! yy_current_buffer ) \
yy_current_buffer = yy_create_buffer( SCNG(yyin), YY_BUF_SIZE TSRMLS_CC ); \
yy_current_buffer = yy_create_buffer( SCNG(yy_in), YY_BUF_SIZE TSRMLS_CC ); \
yy_current_buffer->yy_at_bol = at_bol; \
}
@@ -296,6 +301,18 @@ static void yy_flex_free YY_PROTO(( void * ));
#define yytext SCNG(yy_text)
#undef yytext_ptr
#define yytext_ptr SCNG(yy_text)
#undef yyin
#define yyin SCNG(yy_in)
#undef yyout
#define yyout SCNG(yy_out)
#undef yy_last_accepting_state
#define yy_last_accepting_state SCNG(_yy_last_accepting_state)
#undef yy_last_accepting_cpos
#define yy_last_accepting_cpos SCNG(_yy_last_accepting_cpos)
#undef yy_more_flag
#define yy_more_flag SCNG(_yy_more_flag)
#undef yy_more_len
#define yy_more_len SCNG(_yy_more_len)
%- Standard (non-C++) definition
@@ -321,6 +338,17 @@ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
%% code to copy yytext_ptr to yytext[] goes here, if %array
yy_c_buf_p = yy_cp;
#undef yyleng
#undef yytext
#undef yytext_ptr
#undef yyin
#undef yyout
#undef yy_last_accepting_state
#undef yy_last_accepting_cpos
#undef yy_more_flag
#undef yy_more_len
%% data tables for the DFA and the user's section 1 definitions go here
/* Macros after this point can all be overridden by user definitions in
@@ -406,7 +434,7 @@ YY_MALLOC_DECL
/* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite().
*/
#define ECHO (void) fwrite( yytext, yyleng, 1, SCNG(yyout) )
#define ECHO (void) fwrite( yytext, yyleng, 1, SCNG(yy_out) )
%+ C++ definition
#define ECHO LexerOutput( yytext, yyleng )
%*
@@ -491,23 +519,23 @@ YY_DECL
if ( ! yy_start )
yy_start = 1; /* first start state */
if ( ! SCNG(yyin) )
if ( ! SCNG(yy_in) )
%-
SCNG(yyin) = stdin;
SCNG(yy_in) = stdin;
%+
SCNG(yyin) = &cin;
SCNG(yy_in) = &cin;
%*
if ( ! SCNG(yyout) )
if ( ! SCNG(yy_out) )
%-
SCNG(yyout) = stdout;
SCNG(yy_out) = stdout;
%+
SCNG(yyout) = &cout;
SCNG(yy_out) = &cout;
%*
if ( ! yy_current_buffer )
yy_current_buffer =
yy_create_buffer( SCNG(yyin), YY_BUF_SIZE TSRMLS_CC );
yy_create_buffer( SCNG(yy_in), YY_BUF_SIZE TSRMLS_CC );
yy_load_buffer_state(TSRMLS_C);
}
@@ -561,8 +589,8 @@ do_action: /* This label is used only to access EOF actions. */
* this is the first action (other than possibly a
* back-up) that will match for the new input source.
*/
yy_n_chars = yy_current_buffer->yy_n_chars;
yy_current_buffer->yy_input_file = yyin;
SCNG(yy_n_chars) = yy_current_buffer->yy_n_chars;
yy_current_buffer->yy_input_file = SCNG(yy_in);
yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
}
@@ -573,7 +601,7 @@ do_action: /* This label is used only to access EOF actions. */
* end-of-buffer state). Contrast this with the test
* in input().
*/
if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[SCNG(yy_n_chars)] )
{ /* This was really a NUL. */
yy_state_type yy_next_state;
@@ -652,7 +680,7 @@ do_action: /* This label is used only to access EOF actions. */
case EOB_ACT_LAST_MATCH:
yy_c_buf_p =
&yy_current_buffer->yy_ch_buf[yy_n_chars];
&yy_current_buffer->yy_ch_buf[SCNG(yy_n_chars)];
yy_current_state = yy_get_previous_state(TSRMLS_C);
@@ -673,8 +701,8 @@ do_action: /* This label is used only to access EOF actions. */
%+
yyFlexLexer::yyFlexLexer( istream* arg_yyin, ostream* arg_yyout )
{
SCNG(yyin) = arg_yyin;
SCNG(yyout) = arg_yyout;
SCNG(yy_in) = arg_yyin;
SCNG(yy_out) = arg_yyout;
yy_c_buf_p = 0;
yy_init = 1;
yy_start = 0;
@@ -715,37 +743,37 @@ void yyFlexLexer::switch_streams( istream* new_in, ostream* new_out )
}
if ( new_out )
SCNG(yyout) = new_out;
SCNG(yy_out) = new_out;
}
int yyFlexLexer::LexerInput( char* buf, int max_size )
{
if ( SCNG(yyin)->eof() || SCNG(yyin)->fail() )
if ( SCNG(yy_in)->eof() || SCNG(yy_in)->fail() )
return 0;
if (yy_current_buffer->yy_is_interactive) {
SCNG(yyin)->get( buf[0] );
SCNG(yy_in)->get( buf[0] );
if ( SCNG(yyin)->eof() )
if ( SCNG(yy_in)->eof() )
return 0;
if ( SCNG(yyin)->bad() )
if ( SCNG(yy_in)->bad() )
return -1;
return 1;
} else {
(void) SCNG(yyin)->read( buf, max_size );
(void) SCNG(yy_in)->read( buf, max_size );
if ( SCNG(yyin)->bad() )
if ( SCNG(yy_in)->bad() )
return -1;
else
return SCNG(yyin)->gcount();
return SCNG(yy_in)->gcount();
}
}
void yyFlexLexer::LexerOutput( const char* buf, int size )
{
(void) SCNG(yyout)->write( buf, size );
(void) SCNG(yy_out)->write( buf, size );
}
%*
@@ -768,7 +796,7 @@ int yyFlexLexer::yy_get_next_buffer(TSRMLS_D)
register int number_to_move, i;
int ret_val;
if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[SCNG(yy_n_chars) + 1] )
YY_FATAL_ERROR(
"fatal flex scanner internal error--end of buffer missed" );
@@ -803,7 +831,7 @@ int yyFlexLexer::yy_get_next_buffer(TSRMLS_D)
/* don't do the read, it's not guaranteed to return an EOF,
* just force an EOF
*/
yy_current_buffer->yy_n_chars = yy_n_chars = 0;
yy_current_buffer->yy_n_chars = SCNG(yy_n_chars) = 0;
else
{
@@ -857,17 +885,17 @@ int yyFlexLexer::yy_get_next_buffer(TSRMLS_D)
/* Read in more data. */
YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
yy_n_chars, num_to_read );
SCNG(yy_n_chars), num_to_read );
yy_current_buffer->yy_n_chars = yy_n_chars;
yy_current_buffer->yy_n_chars = SCNG(yy_n_chars);
}
if ( yy_n_chars == 0 )
if ( SCNG(yy_n_chars) == 0 )
{
if ( number_to_move == YY_MORE_ADJ )
{
ret_val = EOB_ACT_END_OF_FILE;
yyrestart( SCNG(yyin) TSRMLS_CC );
yyrestart( SCNG(yy_in) TSRMLS_CC );
}
else
@@ -881,9 +909,9 @@ int yyFlexLexer::yy_get_next_buffer(TSRMLS_D)
else
ret_val = EOB_ACT_CONTINUE_SCAN;
yy_n_chars += number_to_move;
yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
SCNG(yy_n_chars) += number_to_move;
yy_current_buffer->yy_ch_buf[SCNG(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
yy_current_buffer->yy_ch_buf[SCNG(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
@@ -964,7 +992,7 @@ void yyFlexLexer::yyunput( int c, register char* yy_bp TSRMLS_DC )
if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
{ /* need to shift things up to make room */
/* +2 for EOB chars. */
register int number_to_move = yy_n_chars + 2;
register int number_to_move = SCNG(yy_n_chars) + 2;
register char *dest = &yy_current_buffer->yy_ch_buf[
yy_current_buffer->yy_buf_size + 2];
register char *source =
@@ -976,7 +1004,7 @@ void yyFlexLexer::yyunput( int c, register char* yy_bp TSRMLS_DC )
yy_cp += (int) (dest - source);
yy_bp += (int) (dest - source);
yy_current_buffer->yy_n_chars =
yy_n_chars = yy_current_buffer->yy_buf_size;
SCNG(yy_n_chars) = yy_current_buffer->yy_buf_size;
if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
YY_FATAL_ERROR( "flex scanner push-back overflow" );
@@ -1018,7 +1046,7 @@ int yyFlexLexer::yyinput(TSRMLS_D)
* If this occurs *before* the EOB characters, then it's a
* valid NUL; if not, then we've hit the end of the buffer.
*/
if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[SCNG(yy_n_chars)] )
/* This was really a NUL. */
*yy_c_buf_p = '\0';
@@ -1041,7 +1069,7 @@ int yyFlexLexer::yyinput(TSRMLS_D)
*/
/* Reset buffer status. */
yyrestart( SCNG(yyin) TSRMLS_CC );
yyrestart( SCNG(yy_in) TSRMLS_CC );
/* fall through */
@@ -1088,7 +1116,7 @@ void yyFlexLexer::yyrestart( istream* input_file TSRMLS_DC )
%*
{
if ( ! yy_current_buffer )
yy_current_buffer = yy_create_buffer( SCNG(yyin), YY_BUF_SIZE TSRMLS_CC );
yy_current_buffer = yy_create_buffer( SCNG(yy_in), YY_BUF_SIZE TSRMLS_CC );
yy_init_buffer( yy_current_buffer, input_file TSRMLS_CC );
yy_load_buffer_state(TSRMLS_C);
@@ -1117,7 +1145,7 @@ void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer TSRMLS_DC )
/* Flush out information for old buffer. */
*yy_c_buf_p = yy_hold_char;
yy_current_buffer->yy_buf_pos = yy_c_buf_p;
yy_current_buffer->yy_n_chars = yy_n_chars;
yy_current_buffer->yy_n_chars = SCNG(yy_n_chars);
}
yy_current_buffer = new_buffer;
@@ -1145,9 +1173,9 @@ void ***tsrm_ls;
void yyFlexLexer::yy_load_buffer_state()
%*
{
yy_n_chars = yy_current_buffer->yy_n_chars;
SCNG(yy_n_chars) = yy_current_buffer->yy_n_chars;
yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
SCNG(yyin) = yy_current_buffer->yy_input_file;
SCNG(yy_in) = yy_current_buffer->yy_input_file;
yy_hold_char = *yy_c_buf_p;
}
+44 -35
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -28,9 +28,9 @@
#include "zend_ini.h"
#ifdef ZTS
# define GLOBAL_FUNCTION_TABLE global_function_table
# define GLOBAL_CLASS_TABLE global_class_table
# define GLOBAL_CONSTANTS_TABLE global_constants_table
# define GLOBAL_FUNCTION_TABLE &global_main_class.function_table
# define GLOBAL_CLASS_TABLE &global_main_class.class_table
# define GLOBAL_CONSTANTS_TABLE &global_main_class.constants_table
# define GLOBAL_AUTO_GLOBALS_TABLE global_auto_globals_table
#else
# define GLOBAL_FUNCTION_TABLE CG(function_table)
@@ -61,9 +61,7 @@ static int (*zend_get_configuration_directive_p)(char *name, uint name_length, z
ZEND_API int compiler_globals_id;
ZEND_API int executor_globals_id;
ZEND_API int alloc_globals_id;
HashTable *global_function_table;
HashTable *global_class_table;
HashTable *global_constants_table;
zend_class_entry global_main_class;
HashTable *global_auto_globals_table;
#endif
@@ -84,7 +82,8 @@ static void print_hash(HashTable *ht, int indent)
zval **tmp;
char *string_key;
HashPosition iterator;
unsigned long num_key, str_len;
ulong num_key;
uint str_len;
int i;
for (i=0; i<indent; i++) {
@@ -247,7 +246,12 @@ static void register_standard_class(void)
zend_standard_class_def.name = zend_strndup("stdClass", zend_standard_class_def.name_length);
zend_standard_class_def.parent = NULL;
zend_hash_init_ex(&zend_standard_class_def.default_properties, 0, NULL, ZVAL_PTR_DTOR, 1, 0);
zend_standard_class_def.static_members = (HashTable *) malloc(sizeof(HashTable));
zend_hash_init_ex(zend_standard_class_def.static_members, 0, NULL, ZVAL_PTR_DTOR, 1, 0);
zend_hash_init_ex(&zend_standard_class_def.constants_table, 0, NULL, ZVAL_PTR_DTOR, 1, 0);
zend_hash_init_ex(&zend_standard_class_def.class_table, 10, NULL, ZEND_CLASS_DTOR, 1, 0);
zend_hash_init_ex(&zend_standard_class_def.function_table, 0, NULL, ZEND_FUNCTION_DTOR, 1, 0);
zend_standard_class_def.constructor = NULL;
zend_standard_class_def.handle_function_call = NULL;
zend_standard_class_def.handle_property_get = NULL;
zend_standard_class_def.handle_property_set = NULL;
@@ -275,22 +279,18 @@ static void compiler_globals_ctor(zend_compiler_globals *compiler_globals TSRMLS
compiler_globals->compiled_filename = NULL;
compiler_globals->function_table = (HashTable *) malloc(sizeof(HashTable));
compiler_globals->function_table = &compiler_globals->main_class.function_table;
zend_hash_init_ex(compiler_globals->function_table, 100, NULL, ZEND_FUNCTION_DTOR, 1, 0);
zend_hash_copy(compiler_globals->function_table, global_function_table, NULL, &tmp_func, sizeof(zend_function));
zend_hash_copy(compiler_globals->function_table, GLOBAL_FUNCTION_TABLE, NULL, &tmp_func, sizeof(zend_function));
compiler_globals->class_table = (HashTable *) malloc(sizeof(HashTable));
compiler_globals->class_table = &compiler_globals->main_class.class_table;
zend_hash_init_ex(compiler_globals->class_table, 10, NULL, ZEND_CLASS_DTOR, 1, 0);
zend_hash_copy(compiler_globals->class_table, global_class_table, (copy_ctor_func_t) zend_class_add_ref, &tmp_class, sizeof(zend_class_entry));
zend_hash_copy(compiler_globals->class_table, GLOBAL_CLASS_TABLE, (copy_ctor_func_t) zend_class_add_ref, &tmp_class, sizeof(zend_class_entry));
zend_set_default_compile_time_values(TSRMLS_C);
CG(interactive) = 0;
compiler_globals->class_table = (HashTable *) malloc(sizeof(HashTable));
zend_hash_init_ex(compiler_globals->class_table, 10, NULL, ZEND_CLASS_DTOR, 1, 0);
zend_hash_copy(compiler_globals->class_table, global_class_table, (copy_ctor_func_t) zend_class_add_ref, &tmp_class, sizeof(zend_class_entry));
compiler_globals->auto_globals = (HashTable *) malloc(sizeof(HashTable));
zend_hash_init_ex(compiler_globals->auto_globals, 8, NULL, NULL, 1, 0);
zend_hash_copy(compiler_globals->auto_globals, global_auto_globals_table, NULL, NULL, sizeof(void *) /* empty element */);
@@ -299,13 +299,11 @@ static void compiler_globals_ctor(zend_compiler_globals *compiler_globals TSRMLS
static void compiler_globals_dtor(zend_compiler_globals *compiler_globals TSRMLS_DC)
{
if (compiler_globals->function_table != global_function_table) {
if (compiler_globals->function_table != GLOBAL_FUNCTION_TABLE) {
zend_hash_destroy(compiler_globals->function_table);
free(compiler_globals->function_table);
}
if (compiler_globals->class_table != global_class_table) {
if (compiler_globals->class_table != GLOBAL_CLASS_TABLE) {
zend_hash_destroy(compiler_globals->class_table);
free(compiler_globals->class_table);
}
if (compiler_globals->auto_globals != global_auto_globals_table) {
zend_hash_destroy(compiler_globals->auto_globals);
@@ -316,9 +314,9 @@ static void compiler_globals_dtor(zend_compiler_globals *compiler_globals TSRMLS
static void executor_globals_ctor(zend_executor_globals *executor_globals TSRMLS_DC)
{
if (global_constants_table) {
if (GLOBAL_CONSTANTS_TABLE) {
zend_startup_constants(TSRMLS_C);
zend_copy_constants(EG(zend_constants), global_constants_table);
zend_copy_constants(EG(zend_constants), GLOBAL_CONSTANTS_TABLE);
}
zend_init_rsrc_plist(TSRMLS_C);
EG(lambda_count)=0;
@@ -368,6 +366,11 @@ static void scanner_globals_ctor(zend_scanner_globals *scanner_globals_p TSRMLS_
scanner_globals_p->init = 1;
scanner_globals_p->start = 0;
scanner_globals_p->current_buffer = NULL;
scanner_globals_p->yy_in = NULL;
scanner_globals_p->yy_out = NULL;
scanner_globals_p->_yy_more_flag = 0;
scanner_globals_p->_yy_more_len = 0;
}
@@ -418,12 +421,15 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions, i
zend_version_info = strdup(ZEND_CORE_VERSION_INFO);
zend_version_info_length = sizeof(ZEND_CORE_VERSION_INFO)-1;
GLOBAL_FUNCTION_TABLE = (HashTable *) malloc(sizeof(HashTable));
GLOBAL_CLASS_TABLE = (HashTable *) malloc(sizeof(HashTable));
#ifndef ZTS
GLOBAL_FUNCTION_TABLE = &compiler_globals.main_class.function_table;
GLOBAL_CLASS_TABLE = &compiler_globals.main_class.class_table;
#endif
GLOBAL_AUTO_GLOBALS_TABLE = (HashTable *) malloc(sizeof(HashTable));
zend_hash_init_ex(GLOBAL_FUNCTION_TABLE, 100, NULL, ZEND_FUNCTION_DTOR, 1, 0);
zend_hash_init_ex(GLOBAL_CLASS_TABLE, 10, NULL, ZEND_CLASS_DTOR, 1, 0);
zend_hash_init_ex(GLOBAL_AUTO_GLOBALS_TABLE, 8, NULL, NULL, 1, 0);
register_standard_class();
zend_hash_init_ex(&module_registry, 50, NULL, ZEND_MODULE_DTOR, 1, 0);
zend_init_rsrc_list_dtors();
@@ -434,7 +440,6 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions, i
zval_used_for_init.type = IS_NULL;
#ifdef ZTS
global_constants_table = NULL;
ts_allocate_id(&compiler_globals_id, sizeof(zend_compiler_globals), (ts_allocate_ctor) compiler_globals_ctor, (ts_allocate_dtor) compiler_globals_dtor);
ts_allocate_id(&executor_globals_id, sizeof(zend_executor_globals), (ts_allocate_ctor) executor_globals_ctor, (ts_allocate_dtor) executor_globals_dtor);
ts_allocate_id(&language_scanner_globals_id, sizeof(zend_scanner_globals), (ts_allocate_ctor) scanner_globals_ctor, NULL);
@@ -443,11 +448,10 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions, i
executor_globals = ts_resource(executor_globals_id);
tsrm_ls = ts_resource_ex(0, NULL);
compiler_globals_dtor(compiler_globals, tsrm_ls);
compiler_globals->function_table = GLOBAL_FUNCTION_TABLE;
compiler_globals->class_table = GLOBAL_CLASS_TABLE;
*compiler_globals->function_table = *GLOBAL_FUNCTION_TABLE;
*compiler_globals->class_table = *GLOBAL_CLASS_TABLE;
compiler_globals->auto_globals = GLOBAL_AUTO_GLOBALS_TABLE;
zend_startup_constants(tsrm_ls);
GLOBAL_CONSTANTS_TABLE = EG(zend_constants);
#else
zend_hash_init_ex(CG(auto_globals), 8, NULL, NULL, 1, 0);
scanner_globals_ctor(&ini_scanner_globals TSRMLS_CC);
@@ -486,10 +490,10 @@ void zend_shutdown(TSRMLS_D)
#endif
zend_destroy_rsrc_list_dtors();
zend_hash_destroy(&module_registry);
#ifndef ZTS
zend_hash_destroy(GLOBAL_FUNCTION_TABLE);
free(GLOBAL_FUNCTION_TABLE);
zend_hash_destroy(GLOBAL_CLASS_TABLE);
free(GLOBAL_CLASS_TABLE);
#endif
zend_hash_destroy(GLOBAL_AUTO_GLOBALS_TABLE);
free(GLOBAL_AUTO_GLOBALS_TABLE);
zend_shutdown_extensions(TSRMLS_C);
@@ -787,12 +791,13 @@ ZEND_API void zend_output_debug_string(zend_bool trigger_break, char *format, ..
}
ZEND_API int zend_execute_scripts(int type TSRMLS_DC, int file_count, ...)
ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_count, ...)
{
va_list files;
int i;
zend_file_handle *file_handle;
zend_op_array *orig_op_array = EG(active_op_array);
zval *local_retval=NULL;
va_start(files, file_count);
for (i=0; i<file_count; i++) {
@@ -803,10 +808,14 @@ ZEND_API int zend_execute_scripts(int type TSRMLS_DC, int file_count, ...)
EG(active_op_array) = zend_compile_file(file_handle, ZEND_INCLUDE TSRMLS_CC);
zend_destroy_file_handle(file_handle TSRMLS_CC);
if (EG(active_op_array)) {
EG(return_value_ptr_ptr) = retval ? retval : &local_retval;
zend_execute(EG(active_op_array) TSRMLS_CC);
zval_ptr_dtor(EG(return_value_ptr_ptr));
EG(return_value_ptr_ptr) = &EG(global_return_value_ptr);
EG(global_return_value_ptr) = NULL;
if (EG(exception)) {
zval_ptr_dtor(&EG(exception));
} else if (!retval) {
zval_ptr_dtor(EG(return_value_ptr_ptr));
local_retval = NULL;
}
destroy_op_array(EG(active_op_array));
efree(EG(active_op_array));
} else if (type==ZEND_REQUIRE) {
+44 -12
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -17,6 +17,7 @@
+----------------------------------------------------------------------+
*/
/* $Id$ */
#ifndef ZEND_H
#define ZEND_H
@@ -40,6 +41,9 @@
#ifdef ZEND_WIN32
# include "zend_config.w32.h"
# define ZEND_PATHS_SEPARATOR ';'
#elif defined(__riscos__)
# include "zend_config.h"
# define ZEND_PATHS_SEPARATOR ';'
#else
# include "zend_config.h"
# define ZEND_PATHS_SEPARATOR ':'
@@ -71,7 +75,11 @@
# define DL_LOAD(libname) dlopen(libname, RTLD_LAZY | RTLD_GLOBAL)
# define DL_UNLOAD dlclose
# define DL_FETCH_SYMBOL dlsym
# if defined(DLSYM_NEEDS_UNDERSCORE)
# define DL_FETCH_SYMBOL(h,s) dlsym((h), "_" ## s)
# else
# define DL_FETCH_SYMBOL dlsym
# endif
# define DL_HANDLE void *
# define ZEND_EXTENSIONS_SUPPORT 1
#elif defined(ZEND_WIN32)
@@ -85,8 +93,19 @@
# define ZEND_EXTENSIONS_SUPPORT 0
#endif
#if HAVE_ALLOCA_H
# include <alloca.h>
/* AIX requires this to be the first thing in the file. */
#ifndef __GNUC__
# if HAVE_ALLOCA_H
# include <alloca.h>
# else
# ifdef _AIX
#pragma alloca
# else
# ifndef alloca /* predefined by HP cc +Olibcalls */
char *alloca ();
# endif
# endif
# endif
#endif
#if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS) && defined(ZEND_WIN32))
@@ -164,6 +183,7 @@ typedef unsigned short zend_ushort;
#define INTERNAL_FUNCTION_PARAMETERS int ht, zval *return_value, zval *this_ptr, int return_value_used TSRMLS_DC
#define INTERNAL_FUNCTION_PARAM_PASSTHRU ht, return_value, this_ptr, return_value_used TSRMLS_CC
/*
* zval
*/
@@ -177,24 +197,28 @@ typedef struct _zend_object {
typedef unsigned int zend_object_handle;
typedef struct _zend_object_handlers zend_object_handlers;
typedef struct _zend_object_value {
zend_object_handle handle;
zend_object_handlers *handlers;
} zend_object_value;
typedef zend_object *(*get_address_t)(zend_object_handle handle); /* Don't return zval ** so that we can't change it */
typedef zval **(*get_property_address_t)(zend_object_handle handle, zval *offset, int type);
typedef void (*add_ref_t)(zend_object_handle handle);
typedef void (*del_ref_t)(zend_object_handle handle);
typedef void (*delete_obj_t)(zend_object_handle handle);
typedef zend_object_value (*clone_obj_t)(zend_object_handle handle);
typedef struct _zend_object_handlers {
struct _zend_object_handlers {
get_address_t get_address;
get_property_address_t get_property_address;
add_ref_t add_ref;
del_ref_t del_ref;
delete_obj_t delete_obj;
} zend_object_handlers;
typedef struct _zend_object_value {
zend_object_handle handle;
zend_object_handlers handlers;
} zend_object_value;
clone_obj_t clone_obj;
};
#include "zend_objects.h"
@@ -248,6 +272,9 @@ typedef struct _zend_overloaded_element {
/* excpt.h on Digital Unix 4.0 defines function_table */
#undef function_table
/* A lot of stuff needs shifiting around in order to include zend_compile.h here */
union _zend_function;
struct _zend_class_entry {
char type;
char *name;
@@ -258,8 +285,13 @@ struct _zend_class_entry {
HashTable function_table;
HashTable default_properties;
HashTable class_table;
HashTable *static_members;
HashTable constants_table;
zend_function_entry *builtin_functions;
union _zend_function *constructor;
/* handlers */
void (*handle_function_call)(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
zval (*handle_property_get)(zend_property_reference *property_reference);
+23 -8
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -286,7 +286,7 @@ static char *zend_parse_arg_impl(zval **arg, va_list *va, char **spec)
case IS_DOUBLE:
case IS_BOOL:
convert_to_double_ex(arg);
*p = Z_LVAL_PP(arg);
*p = Z_DVAL_PP(arg);
break;
case IS_ARRAY:
@@ -436,7 +436,7 @@ static int zend_parse_arg(int arg_num, zval **arg, va_list *va, char **spec, int
expected_type = zend_parse_arg_impl(arg, va, spec);
if (expected_type) {
if (!quiet) {
sprintf(buf, "%s() expects argument %d to be %s, %s given",
sprintf(buf, "%s() expects parameter %d to be %s, %s given",
get_active_function_name(TSRMLS_C), arg_num, expected_type,
zend_zval_type_name(*arg));
zend_error(E_WARNING, buf);
@@ -481,7 +481,7 @@ static int zend_parse_va_args(int num_args, char *type_spec, va_list *va, int fl
default:
if (!quiet) {
zend_error(E_WARNING, "%s(): bad type specifier while parsing arguments", get_active_function_name(TSRMLS_C));
zend_error(E_WARNING, "%s(): bad type specifier while parsing parameters", get_active_function_name(TSRMLS_C));
}
return FAILURE;
}
@@ -493,7 +493,7 @@ static int zend_parse_va_args(int num_args, char *type_spec, va_list *va, int fl
if (num_args < min_num_args || num_args > max_num_args) {
if (!quiet) {
sprintf(buf, "%s() requires %s %d argument%s, %d given",
sprintf(buf, "%s() expects %s %d parameter%s, %d given",
get_active_function_name(TSRMLS_C),
min_num_args == max_num_args ? "exactly" : num_args < min_num_args ? "at least" : "at most",
num_args < min_num_args ? min_num_args : max_num_args,
@@ -508,7 +508,7 @@ static int zend_parse_va_args(int num_args, char *type_spec, va_list *va, int fl
arg_count = (ulong) *p;
if (num_args > arg_count) {
zend_error(E_WARNING, "%s(): could not obtain arguments for parsing",
zend_error(E_WARNING, "%s(): could not obtain parameters for parsing",
get_active_function_name(TSRMLS_C));
return FAILURE;
}
@@ -572,6 +572,7 @@ ZEND_API int _object_and_properties_init(zval *arg, zend_class_entry *class_type
if (!class_type->constants_updated) {
zend_hash_apply_with_argument(&class_type->default_properties, (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC);
zend_hash_apply_with_argument(class_type->static_members, (apply_func_arg_t) zval_update_constant, (void *) 1 TSRMLS_CC);
class_type->constants_updated = 1;
}
@@ -1215,8 +1216,11 @@ ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *class_
*class_entry->refcount = 1;
class_entry->constants_updated = 0;
zend_hash_init(&class_entry->default_properties, 0, NULL, ZVAL_PTR_DTOR, 1);
class_entry->static_members = (HashTable *) malloc(sizeof(HashTable));
zend_hash_init(class_entry->static_members, 0, NULL, ZVAL_PTR_DTOR, 1);
zend_hash_init(&class_entry->constants_table, 0, NULL, ZVAL_PTR_DTOR, 1);
zend_hash_init(&class_entry->function_table, 0, NULL, ZEND_FUNCTION_DTOR, 1);
zend_hash_init(&class_entry->class_table, 10, NULL, ZEND_CLASS_DTOR, 1);
if (class_entry->builtin_functions) {
zend_register_functions(class_entry->builtin_functions, &class_entry->function_table, MODULE_PERSISTENT TSRMLS_CC);
@@ -1384,3 +1388,14 @@ zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callabl
return retval;
}
ZEND_API char *zend_get_module_version(char *module_name)
{
zend_module_entry *module;
if (zend_hash_find(&module_registry, module_name, strlen(module_name) + 1,
(void**)&module) == FAILURE) {
return NULL;
}
return module->version;
}
+5 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -87,6 +87,7 @@
class_container.name = strdup(class_name); \
class_container.name_length = sizeof(class_name)-1; \
class_container.builtin_functions = functions; \
class_container.constructor = NULL; \
class_container.handle_function_call = NULL; \
class_container.handle_property_get = NULL; \
class_container.handle_property_set = NULL; \
@@ -97,6 +98,7 @@
class_container.name = strdup(class_name); \
class_container.name_length = sizeof(class_name)-1; \
class_container.builtin_functions = functions; \
class_container.constructor = NULL; \
class_container.handle_function_call = handle_fcall; \
class_container.handle_property_get = handle_propget; \
class_container.handle_property_set = handle_propset; \
@@ -137,6 +139,7 @@ ZEND_API int zend_disable_function(char *function_name, uint function_name_lengt
ZEND_API void zend_wrong_param_count(TSRMLS_D);
ZEND_API zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callable_name);
ZEND_API char *zend_get_module_version(char *module_name);
#define getThis() (this_ptr)
+3 -3
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -406,7 +406,7 @@ ZEND_API void start_memory_manager(TSRMLS_D)
AG(phead) = AG(head) = NULL;
#if MEMORY_LIMIT
AG(memory_limit) = 1<<30; /* rediculous limit, effectively no limit */
AG(memory_limit) = 1<<30; /* ridiculous limit, effectively no limit */
AG(allocated_memory) = 0;
AG(memory_exhausted) = 0;
AG(allocated_memory_peak) = 0;
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+51 -4
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -127,12 +127,17 @@ int zend_startup_builtin_functions(TSRMLS_D)
}
/* {{{ proto string zend_version(void)
Get the version of the Zend Engine */
ZEND_FUNCTION(zend_version)
{
RETURN_STRINGL(ZEND_VERSION, sizeof(ZEND_VERSION)-1, 1);
}
/* }}} */
/* {{{ proto int func_num_args(void)
Get the number of arguments that were passed to the function */
ZEND_FUNCTION(func_num_args)
{
void **p;
@@ -152,8 +157,11 @@ ZEND_FUNCTION(func_num_args)
RETURN_LONG(-1);
}
}
/* }}} */
/* {{{ proto mixed func_get_arg(int arg_num)
Get the $arg_num'th argument that was passed to the function */
ZEND_FUNCTION(func_get_arg)
{
void **p;
@@ -190,8 +198,11 @@ ZEND_FUNCTION(func_get_arg)
*return_value = *arg;
zval_copy_ctor(return_value);
}
/* }}} */
/* {{{ proto array func_get_args()
Get an array of the arguments that were passed to the function */
ZEND_FUNCTION(func_get_args)
{
void **p;
@@ -224,6 +235,7 @@ ZEND_FUNCTION(func_get_args)
zend_hash_next_index_insert(return_value->value.ht, &element, sizeof(zval *), NULL);
}
}
/* }}} */
/* {{{ proto int strlen(string str)
@@ -240,6 +252,7 @@ ZEND_NAMED_FUNCTION(zend_if_strlen)
}
/* }}} */
/* {{{ proto int strcmp(string str1, string str2)
Binary safe string comparison */
ZEND_FUNCTION(strcmp)
@@ -255,6 +268,7 @@ ZEND_FUNCTION(strcmp)
}
/* }}} */
/* {{{ proto int strncmp(string str1, string str2, int len)
Binary safe string comparison */
ZEND_FUNCTION(strncmp)
@@ -271,6 +285,7 @@ ZEND_FUNCTION(strncmp)
}
/* }}} */
/* {{{ proto int strcasecmp(string str1, string str2)
Binary safe case-insensitive string comparison */
ZEND_FUNCTION(strcasecmp)
@@ -286,6 +301,7 @@ ZEND_FUNCTION(strcasecmp)
}
/* }}} */
/* {{{ proto int strncasecmp(string str1, string str2, int len)
Binary safe string comparison */
ZEND_FUNCTION(strncasecmp)
@@ -302,6 +318,9 @@ ZEND_FUNCTION(strncasecmp)
}
/* }}} */
/* {{{ proto array each(array arr)
Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element */
ZEND_FUNCTION(each)
{
zval **array, *entry, **entry_ptr, *tmp;
@@ -352,7 +371,11 @@ ZEND_FUNCTION(each)
(*inserted_pointer)->refcount++;
zend_hash_move_forward(target_hash);
}
/* }}} */
/* {{{ proto int error_reporting(int new_error_level=null)
Return the current error_reporting level, and if an argument was passed - change to the new level */
ZEND_FUNCTION(error_reporting)
{
zval **arg;
@@ -376,7 +399,11 @@ ZEND_FUNCTION(error_reporting)
RETVAL_LONG(old_error_reporting);
}
/* }}} */
/* {{{ proto bool define(string constant_name, mixed value, case_sensitive=true)
Define a new constant */
ZEND_FUNCTION(define)
{
zval **var, **val, **non_cs;
@@ -432,8 +459,11 @@ ZEND_FUNCTION(define)
RETURN_FALSE;
}
}
/* }}} */
/* {{{ proto bool define(string constant_name)
Check whether a constant exists */
ZEND_FUNCTION(defined)
{
zval **var;
@@ -451,6 +481,8 @@ ZEND_FUNCTION(defined)
RETURN_LONG(0);
}
}
/* }}} */
/* {{{ proto string get_class(object object)
Retrieves the class name */
@@ -471,6 +503,7 @@ ZEND_FUNCTION(get_class)
}
/* }}} */
/* {{{ proto string get_parent_class(mixed object)
Retrieves the parent class name for object or class. */
ZEND_FUNCTION(get_parent_class)
@@ -498,6 +531,7 @@ ZEND_FUNCTION(get_parent_class)
}
/* }}} */
/* {{{ proto bool is_subclass_of(object object, string class_name)
Returns true if the object has this class as one of its parents */
ZEND_FUNCTION(is_subclass_of)
@@ -529,6 +563,7 @@ ZEND_FUNCTION(is_subclass_of)
}
/* }}} */
/* {{{ proto array get_class_vars(string class_name)
Returns an array of default properties of the class */
ZEND_FUNCTION(get_class_vars)
@@ -561,6 +596,7 @@ ZEND_FUNCTION(get_class_vars)
}
/* }}} */
/* {{{ proto array get_object_vars(object obj)
Returns an array of object properties */
ZEND_FUNCTION(get_object_vars)
@@ -582,6 +618,7 @@ ZEND_FUNCTION(get_object_vars)
}
/* }}} */
/* {{{ proto array get_class_methods(mixed class)
Returns an array of method names for class or class instance. */
ZEND_FUNCTION(get_class_methods)
@@ -622,6 +659,7 @@ ZEND_FUNCTION(get_class_methods)
}
/* }}} */
/* {{{ proto bool method_exists(object object, string method)
Checks if the class method exists */
ZEND_FUNCTION(method_exists)
@@ -648,6 +686,7 @@ ZEND_FUNCTION(method_exists)
}
/* }}} */
/* {{{ proto bool class_exists(string classname)
Checks if the class exists */
ZEND_FUNCTION(class_exists)
@@ -671,6 +710,7 @@ ZEND_FUNCTION(class_exists)
}
/* }}} */
/* {{{ proto bool function_exists(string function_name)
Checks if the function exists */
ZEND_FUNCTION(function_exists)
@@ -694,6 +734,8 @@ ZEND_FUNCTION(function_exists)
/* }}} */
/* {{{ proto void leak(int num_bytes=3)
Cause an intentional memory leak, for testing/debugging purposes */
ZEND_FUNCTION(leak)
{
int leakbytes=3;
@@ -708,6 +750,7 @@ ZEND_FUNCTION(leak)
emalloc(leakbytes);
}
/* }}} */
#ifdef ZEND_TEST_EXCEPTIONS
@@ -815,7 +858,6 @@ ZEND_FUNCTION(set_error_handler)
/* }}} */
/* {{{ proto void restore_error_handler(void)
Restores the previously defined error handler function */
ZEND_FUNCTION(restore_error_handler)
@@ -842,6 +884,7 @@ static int copy_class_name(zend_class_entry *ce, int num_args, va_list args, zen
return 0;
}
/* {{{ proto array get_declared_classes(void)
Returns an array of all declared classes. */
ZEND_FUNCTION(get_declared_classes)
@@ -855,6 +898,7 @@ ZEND_FUNCTION(get_declared_classes)
}
/* }}} */
static int copy_function_name(zend_function *func, int num_args, va_list args, zend_hash_key *hash_key)
{
zval *internal_ar = va_arg(args, zval *),
@@ -873,6 +917,7 @@ static int copy_function_name(zend_function *func, int num_args, va_list args, z
return 0;
}
/* {{{ proto array get_defined_functions(void)
Returns an array of all defined functions */
ZEND_FUNCTION(get_defined_functions)
@@ -905,6 +950,7 @@ ZEND_FUNCTION(get_defined_functions)
}
/* }}} */
/* {{{ proto array get_defined_vars(void)
Returns an associative array of names and values of all currently defined variable names (variables in the current scope) */
ZEND_FUNCTION(get_defined_vars)
@@ -918,8 +964,8 @@ ZEND_FUNCTION(get_defined_vars)
}
/* }}} */
#define LAMBDA_TEMP_FUNCNAME "__lambda_func"
#define LAMBDA_TEMP_FUNCNAME "__lambda_func"
/* {{{ proto string create_function(string args, string code)
Creates an anonymous function, and returns its name (funny, eh?) */
ZEND_FUNCTION(create_function)
@@ -1028,6 +1074,7 @@ static int add_constant_info(zend_constant *constant, void *arg TSRMLS_DC)
return 0;
}
/* {{{ proto array get_loaded_extensions(void)
Return an array containing names of loaded extensions */
ZEND_FUNCTION(get_loaded_extensions)
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+294 -71
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -81,6 +81,7 @@ void zend_init_compiler_data_structures(TSRMLS_D)
CG(handle_op_arrays) = 1;
CG(in_compilation) = 0;
init_compiler_declarables(TSRMLS_C);
CG(throw_list) = NULL;
}
@@ -230,9 +231,9 @@ void fetch_simple_variable_ex(znode *result, znode *varname, int bp, int op TSRM
if (varname->op_type == IS_CONST
&& varname->u.constant.type == IS_STRING
&& zend_hash_exists(CG(auto_globals), varname->u.constant.value.str.val, varname->u.constant.value.str.len+1)) {
opline_ptr->op2.u.fetch_type = ZEND_FETCH_GLOBAL;
opline_ptr->extended_value = ZEND_FETCH_GLOBAL;
} else {
opline_ptr->op2.u.fetch_type = ZEND_FETCH_LOCAL;
opline_ptr->extended_value = ZEND_FETCH_LOCAL;
}
if (bp) {
@@ -247,6 +248,19 @@ void fetch_simple_variable(znode *result, znode *varname, int bp TSRMLS_DC)
fetch_simple_variable_ex(result, varname, bp, ZEND_FETCH_W TSRMLS_CC);
}
void zend_do_fetch_static_member(znode *class TSRMLS_DC)
{
zend_llist *fetch_list_ptr;
zend_llist_element *le;
zend_op *opline_ptr;
zend_stack_top(&CG(bp_stack), (void **) &fetch_list_ptr);
le = fetch_list_ptr->head;
opline_ptr = (zend_op *)le->data;
opline_ptr->op2 = *class;
opline_ptr->extended_value = ZEND_FETCH_STATIC_MEMBER;
}
void fetch_array_begin(znode *result, znode *varname, znode *first_dim TSRMLS_DC)
{
@@ -572,6 +586,9 @@ void zend_do_end_variable_parse(int type, int arg_offset TSRMLS_DC)
opline->extended_value = arg_offset;
break;
case BP_VAR_UNSET:
if (opline->opcode == ZEND_FETCH_DIM_W && opline->op2.op_type == IS_UNUSED) {
zend_error(E_COMPILE_ERROR, "Cannot use [] for unsetting");
}
opline->opcode += 12; /* 3+3+3+3 */
break;
}
@@ -722,6 +739,9 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n
if (is_method) {
zend_hash_update(&CG(active_class_entry)->function_table, name, name_len+1, &op_array, sizeof(zend_op_array), (void **) &CG(active_op_array));
if ((CG(active_class_entry)->name_length == (uint) name_len) && (!memcmp(CG(active_class_entry)->name, name, name_len))) {
CG(active_class_entry)->constructor = (zend_function *) CG(active_op_array);
}
} else {
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
@@ -758,6 +778,8 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n
zend_stack_push(&CG(foreach_copy_stack), (void *) &switch_entry.cond, sizeof(znode));
}
function_token->throw_list = CG(throw_list);
CG(throw_list) = NULL;
}
@@ -771,6 +793,8 @@ void zend_do_end_function_declaration(znode *function_token TSRMLS_DC)
/* Pop the switch and foreach seperators */
zend_stack_del_top(&CG(switch_cond_stack));
zend_stack_del_top(&CG(foreach_copy_stack));
CG(throw_list) = function_token->throw_list;
}
@@ -811,10 +835,7 @@ int zend_do_begin_function_call(znode *function_name TSRMLS_DC)
zend_str_tolower(function_name->u.constant.value.str.val, function_name->u.constant.value.str.len);
if (zend_hash_find(CG(function_table), function_name->u.constant.value.str.val, function_name->u.constant.value.str.len+1, (void **) &function)==FAILURE) {
znode tmp = *function_name;
zval_copy_ctor(&tmp.u.constant);
zend_do_begin_dynamic_function_call(&tmp TSRMLS_CC);
zend_do_begin_dynamic_function_call(function_name TSRMLS_CC);
return 1; /* Dynamic */
}
@@ -840,13 +861,19 @@ int zend_do_begin_function_call(znode *function_name TSRMLS_DC)
void zend_do_begin_method_call(znode *object, znode *function_name TSRMLS_DC)
{
zend_op *opline;
zend_op *last_op;
int last_op_number;
unsigned char *ptr = NULL;
zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC);
zend_do_begin_variable_parse(TSRMLS_C);
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
last_op_number = get_next_op_number(CG(active_op_array))-1;
last_op = &CG(active_op_array)->opcodes[last_op_number];
last_op->opcode = ZEND_INIT_FCALL_BY_NAME;
last_op->extended_value = ZEND_MEMBER_FUNC_CALL;
/*opline = get_next_op(CG(active_op_array) TSRMLS_CC);
opline->opcode = ZEND_INIT_FCALL_BY_NAME;
opline->extended_value = ZEND_MEMBER_FUNC_CALL;
opline->op1 = *object;
@@ -856,6 +883,7 @@ void zend_do_begin_method_call(znode *object, znode *function_name TSRMLS_DC)
*function_name = opline->result;
*/
/*
if (function_name->op_type == IS_CONST) {
zval_copy_ctor(&function_name->u.constant);
@@ -883,6 +911,54 @@ void zend_do_begin_dynamic_function_call(znode *function_name TSRMLS_DC)
}
void do_fetch_class(znode *result, znode *class_entry, znode *class_name TSRMLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
opline->opcode = ZEND_FETCH_CLASS;
if (class_entry) {
opline->op1 = *class_entry;
} else {
SET_UNUSED(opline->op1);
}
zend_str_tolower(class_name->u.constant.value.str.val, class_name->u.constant.value.str.len);
if ((class_name->u.constant.value.str.len == (sizeof("self") - 1)) &&
!memcmp(class_name->u.constant.value.str.val, "self", sizeof("self"))) {
SET_UNUSED(opline->op2);
opline->extended_value = ZEND_FETCH_CLASS_SELF;
zval_dtor(&class_name->u.constant);
} else if ((class_name->u.constant.value.str.len == (sizeof("main") - 1)) &&
!memcmp(class_name->u.constant.value.str.val, "main", sizeof("main"))) {
SET_UNUSED(opline->op2);
opline->extended_value = ZEND_FETCH_CLASS_MAIN;
zval_dtor(&class_name->u.constant);
} else {
opline->op2 = *class_name;
}
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->result.op_type = IS_CONST; /* FIXME: Hack so that INIT_FCALL_BY_NAME still knows this is a class */
*result = opline->result;
}
void do_fetch_class_name(znode *result, znode *class_name_entry, znode *class_name TSRMLS_DC)
{
zend_uint length;
if (!result) {
result = class_name_entry;
} else {
*result = *class_name_entry;
}
length = 1 + result->u.constant.value.str.len + class_name->u.constant.value.str.len;
result->u.constant.value.str.val = erealloc(result->u.constant.value.str.val, length+1);
memcpy(&result->u.constant.value.str.val[result->u.constant.value.str.len], ":", sizeof(":")-1);
memcpy(&result->u.constant.value.str.val[result->u.constant.value.str.len+1], class_name->u.constant.value.str.val, class_name->u.constant.value.str.len+1);
STR_FREE(class_name->u.constant.value.str.val);
result->u.constant.value.str.len = length;
}
void zend_do_begin_class_member_function_call(znode *class_name, znode *function_name TSRMLS_DC)
{
unsigned char *ptr = NULL;
@@ -891,8 +967,10 @@ void zend_do_begin_class_member_function_call(znode *class_name, znode *function
opline->opcode = ZEND_INIT_FCALL_BY_NAME;
zend_str_tolower(class_name->u.constant.value.str.val, class_name->u.constant.value.str.len);
if ((class_name->u.constant.value.str.len == sizeof("parent")-1)
&& !memcmp(class_name->u.constant.value.str.val, "parent", sizeof("parent")-1)
&& CG(active_ce_parent_class_name).value.str.val) {
&& !memcmp(class_name->u.constant.value.str.val, "parent", sizeof("parent")-1)) {
if (!CG(active_ce_parent_class_name).value.str.val) {
zend_error(E_COMPILE_ERROR, "No parent class available");
}
efree(class_name->u.constant.value.str.val);
class_name->u.constant.value.str.len = CG(active_ce_parent_class_name).value.str.len;
class_name->u.constant.value.str.val = estrndup(CG(active_ce_parent_class_name).value.str.val, class_name->u.constant.value.str.len);
@@ -900,7 +978,6 @@ void zend_do_begin_class_member_function_call(znode *class_name, znode *function
opline->op1 = *class_name;
opline->op2 = *function_name;
opline->extended_value = ZEND_MEMBER_FUNC_CALL;
zval_copy_ctor(&opline->op2.u.constant);
zend_stack_push(&CG(function_call_stack), (void *) &ptr, sizeof(zend_function *));
}
@@ -909,17 +986,29 @@ void zend_do_end_function_call(znode *function_name, znode *result, znode *argum
{
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
if (function_name->op_type==IS_CONST && !is_method && !is_dynamic_fcall) {
if (!is_method && !is_dynamic_fcall && function_name->op_type==IS_CONST) {
opline->opcode = ZEND_DO_FCALL;
opline->op1 = *function_name;
} else {
opline->opcode = ZEND_DO_FCALL_BY_NAME;
SET_UNUSED(opline->op1);
}
opline->op1 = *function_name;
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->result.op_type = IS_VAR;
*result = opline->result;
SET_UNUSED(opline->op2);
opline->op2.u.constant.value.lval = is_method;
/* Check how much this is really needed
opline->op2.u.constant.value.lval = is_method;
*/
if (CG(throw_list) != NULL) {
long op_number = get_next_op_number(CG(active_op_array))-1;
zend_llist_add_element(CG(throw_list), &op_number);
} else {
opline->op2.u.opline_num = -1;
}
zend_stack_del_top(&CG(function_call_stack));
opline->extended_value = argument_list->u.constant.value.lval;
}
@@ -1089,6 +1178,74 @@ void zend_do_return(znode *expr, int do_end_vparse TSRMLS_DC)
}
void zend_do_try(znode *try_token TSRMLS_DC)
{
try_token->throw_list = (void *) CG(throw_list);
CG(throw_list) = (zend_llist *) emalloc(sizeof(zend_llist));
zend_llist_init(CG(throw_list), sizeof(long), NULL, 0);
/* Initialize try backpatch list used to backpatch throw, do_fcall */
}
static void throw_list_applier(long *opline_num, long *catch_opline)
{
zend_op *opline;
TSRMLS_FETCH(); /* Pass this by argument */
opline = &CG(active_op_array)->opcodes[*opline_num];
/* Backpatch the opline of the catch statement */
switch (opline->opcode) {
case ZEND_DO_FCALL:
case ZEND_DO_FCALL_BY_NAME:
case ZEND_THROW:
opline->op2.u.opline_num = *catch_opline;
break;
default:
zend_error(E_ERROR, "Bad opcode in throw list");
break;
}
}
void zend_do_begin_catch(znode *try_token, znode *catch_var TSRMLS_DC)
{
long catch_op_number = get_next_op_number(CG(active_op_array));
zend_op *opline;
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
opline->opcode = ZEND_CATCH;
opline->op1 = *catch_var;
SET_UNUSED(opline->op2);
zend_llist_apply_with_argument(CG(throw_list), (llist_apply_with_arg_func_t) throw_list_applier, &catch_op_number TSRMLS_CC);
zend_llist_destroy(CG(throw_list));
efree(CG(throw_list));
CG(throw_list) = (void *) try_token->throw_list;
try_token->u.opline_num = catch_op_number;
}
void zend_do_end_catch(znode *try_token TSRMLS_DC)
{
CG(active_op_array)->opcodes[try_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array));
}
void zend_do_throw(znode *expr TSRMLS_DC)
{
zend_op *opline;
long throw_op_number = get_next_op_number(CG(active_op_array));
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
opline->opcode = ZEND_THROW;
opline->op1 = *expr;
SET_UNUSED(opline->op2);
if (CG(throw_list) != NULL) {
zend_llist_add_element(CG(throw_list), &throw_op_number);
} else {
opline->op2.u.opline_num = -1;
}
}
ZEND_API void function_add_ref(zend_function *function)
{
if (function->type == ZEND_USER_FUNCTION) {
@@ -1128,6 +1285,9 @@ void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce)
/* Perform inheritance */
zend_hash_merge(&ce->default_properties, &parent_ce->default_properties, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0);
/* STATIC_MEMBERS_FIXME */
zend_hash_merge(ce->static_members, parent_ce->static_members, (void (*)(void *)) zval_add_ref, (void *) &tmp, sizeof(zval *), 0);
zend_hash_merge(&ce->constants_table, &parent_ce->constants_table, (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;
if (!ce->handle_property_get)
@@ -1149,8 +1309,18 @@ ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_tabl
zend_hash_find(function_table, opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, (void *) &function);
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) {
int error_level = compile_time ? E_COMPILE_ERROR : E_ERROR;
zend_function *function;
zend_error(error_level, "Cannot redeclare %s()", opline->op2.u.constant.value.str.val);
if (zend_hash_find(function_table, opline->op2.u.constant.value.str.val, opline->op2.u.constant.value.str.len+1, (void *) &function)==SUCCESS
&& function->type==ZEND_USER_FUNCTION
&& ((zend_op_array *) function)->last>0) {
zend_error(error_level, "Cannot redeclare %s() (previously declared in %s:%d)",
opline->op2.u.constant.value.str.val,
((zend_op_array *) function)->filename,
((zend_op_array *) function)->opcodes[0].lineno);
} else {
zend_error(error_level, "Cannot redeclare %s()", opline->op2.u.constant.value.str.val);
}
return FAILURE;
} else {
(*function->op_array.refcount)++;
@@ -1224,6 +1394,8 @@ ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_tabl
(*ce->refcount)--;
zend_hash_destroy(&ce->function_table);
zend_hash_destroy(&ce->default_properties);
zend_hash_destroy(ce->static_members);
zend_hash_destroy(&ce->constants_table);
return FAILURE;
}
return SUCCESS;
@@ -1536,30 +1708,34 @@ void zend_do_default_before_statement(znode *case_list, znode *default_token TSR
}
void zend_do_begin_class_declaration(znode *class_name, znode *parent_class_name TSRMLS_DC)
void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znode *parent_class_name TSRMLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
zend_op *opline;
int runtime_inheritance = 0;
zend_class_entry new_class_entry;
if (CG(active_class_entry)) {
zend_error(E_COMPILE_ERROR, "Class declarations may not be nested");
return;
}
CG(class_entry).type = ZEND_USER_CLASS;
CG(class_entry).name = class_name->u.constant.value.str.val;
CG(class_entry).name_length = class_name->u.constant.value.str.len;
CG(class_entry).refcount = (int *) emalloc(sizeof(int));
*CG(class_entry).refcount = 1;
CG(class_entry).constants_updated = 0;
class_token->u.previously_active_class_entry = CG(active_class_entry);
new_class_entry.type = ZEND_USER_CLASS;
new_class_entry.name = class_name->u.constant.value.str.val;
new_class_entry.name_length = class_name->u.constant.value.str.len;
new_class_entry.refcount = (int *) emalloc(sizeof(int));
*new_class_entry.refcount = 1;
new_class_entry.constants_updated = 0;
zend_str_tolower(CG(class_entry).name, CG(class_entry).name_length);
zend_str_tolower(new_class_entry.name, new_class_entry.name_length);
zend_hash_init(&CG(class_entry).function_table, 10, NULL, ZEND_FUNCTION_DTOR, 0);
zend_hash_init(&CG(class_entry).default_properties, 10, NULL, ZVAL_PTR_DTOR, 0);
zend_hash_init(&new_class_entry.function_table, 10, NULL, ZEND_FUNCTION_DTOR, 0);
zend_hash_init(&new_class_entry.class_table, 10, NULL, ZEND_CLASS_DTOR, 0);
zend_hash_init(&new_class_entry.default_properties, 10, NULL, ZVAL_PTR_DTOR, 0);
new_class_entry.static_members = (HashTable *) emalloc(sizeof(HashTable));
zend_hash_init(new_class_entry.static_members, 10, NULL, ZVAL_PTR_DTOR, 0);
zend_hash_init(&new_class_entry.constants_table, 10, NULL, ZVAL_PTR_DTOR, 0);
CG(class_entry).handle_function_call = NULL;
CG(class_entry).handle_property_set = NULL;
CG(class_entry).handle_property_get = NULL;
new_class_entry.constructor = NULL;
new_class_entry.handle_function_call = NULL;
new_class_entry.handle_property_set = NULL;
new_class_entry.handle_property_get = NULL;
/* code for inheritance from parent class */
if (parent_class_name) {
@@ -1571,29 +1747,46 @@ void zend_do_begin_class_declaration(znode *class_name, znode *parent_class_name
CG(active_ce_parent_class_name).value.str.val = estrndup(parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len);
CG(active_ce_parent_class_name).value.str.len = parent_class_name->u.constant.value.str.len;
if (zend_hash_find(CG(class_table), parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len+1, (void **) &parent_class)==SUCCESS) {
if (zend_hash_find(CG(active_class_entry)?&CG(active_class_entry)->class_table:CG(class_table), parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len+1, (void **) &parent_class)==SUCCESS) {
/* copy functions */
zend_hash_copy(&CG(class_entry).function_table, &parent_class->function_table, (copy_ctor_func_t) function_add_ref, &tmp_zend_function, sizeof(zend_function));
zend_hash_copy(&new_class_entry.function_table, &parent_class->function_table, (copy_ctor_func_t) function_add_ref, &tmp_zend_function, sizeof(zend_function));
/* copy default properties */
zend_hash_copy(&CG(class_entry).default_properties, &parent_class->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
zend_hash_copy(&new_class_entry.default_properties, &parent_class->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
/* copy static members */
zend_hash_copy(new_class_entry.static_members, parent_class->static_members, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
/* copy constants */
zend_hash_copy(&new_class_entry.constants_table, &parent_class->constants_table, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
new_class_entry.constructor = parent_class->constructor;
/* copy overloaded handlers */
CG(class_entry).handle_function_call = parent_class->handle_function_call;
CG(class_entry).handle_property_get = parent_class->handle_property_get;
CG(class_entry).handle_property_set = parent_class->handle_property_set;
new_class_entry.handle_function_call = parent_class->handle_function_call;
new_class_entry.handle_property_get = parent_class->handle_property_get;
new_class_entry.handle_property_set = parent_class->handle_property_set;
CG(class_entry).parent = parent_class;
new_class_entry.parent = parent_class;
zval_dtor(&parent_class_name->u.constant);
} else {
runtime_inheritance = 1;
CG(class_entry).parent = NULL;
new_class_entry.parent = NULL;
}
} else {
CG(class_entry).parent = NULL;
new_class_entry.parent = NULL;
}
if (CG(active_class_entry)) {
if (runtime_inheritance) {
zend_error(E_ERROR, "Only first level classes can inherit from undefined classes");
}
zend_hash_update(&CG(active_class_entry)->class_table, new_class_entry.name, new_class_entry.name_length+1, &new_class_entry, sizeof(zend_class_entry), (void **) &CG(active_class_entry));
return;
}
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
opline->opcode = ZEND_DECLARE_FUNCTION_OR_CLASS;
opline->op1.op_type = IS_CONST;
build_runtime_defined_function_key(&opline->op1.u.constant, &class_name->u.constant, opline TSRMLS_CC);
@@ -1603,32 +1796,32 @@ void zend_do_begin_class_declaration(znode *class_name, znode *parent_class_name
if (runtime_inheritance) {
char *full_class_name;
opline->op2.u.constant.value.str.len = parent_class_name->u.constant.value.str.len+1+CG(class_entry).name_length;
opline->op2.u.constant.value.str.len = parent_class_name->u.constant.value.str.len+1+new_class_entry.name_length;
full_class_name = opline->op2.u.constant.value.str.val = (char *) emalloc(opline->op2.u.constant.value.str.len+1);
memcpy(full_class_name, parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len);
full_class_name += parent_class_name->u.constant.value.str.len;
full_class_name[0] = ':';
full_class_name++;
memcpy(full_class_name, CG(class_entry).name, CG(class_entry).name_length);
memcpy(full_class_name, new_class_entry.name, new_class_entry.name_length);
zval_dtor(&parent_class_name->u.constant);
full_class_name += CG(class_entry).name_length;
full_class_name += new_class_entry.name_length;
full_class_name[0] = 0;
opline->extended_value = ZEND_DECLARE_INHERITED_CLASS;
} else {
opline->op2.u.constant.value.str.val = estrndup(CG(class_entry).name, CG(class_entry).name_length);
opline->op2.u.constant.value.str.len = CG(class_entry).name_length;
opline->op2.u.constant.value.str.val = estrndup(new_class_entry.name, new_class_entry.name_length);
opline->op2.u.constant.value.str.len = new_class_entry.name_length;
opline->extended_value = ZEND_DECLARE_CLASS;
}
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));
zend_hash_update(CG(class_table), opline->op1.u.constant.value.str.val, opline->op1.u.constant.value.str.len, &new_class_entry, sizeof(zend_class_entry), (void **) &CG(active_class_entry));
}
void zend_do_end_class_declaration(TSRMLS_D)
void zend_do_end_class_declaration(znode *class_token TSRMLS_DC)
{
do_inherit_parent_constructor(CG(active_class_entry));
CG(active_class_entry) = NULL;
CG(active_class_entry) = class_token->u.previously_active_class_entry;
if (CG(active_ce_parent_class_name).value.str.val) {
efree(CG(active_ce_parent_class_name).value.str.val);
CG(active_ce_parent_class_name).value.str.val = NULL;
@@ -1636,7 +1829,7 @@ void zend_do_end_class_declaration(TSRMLS_D)
}
void zend_do_declare_property(znode *var_name, znode *value TSRMLS_DC)
void zend_do_declare_property(znode *var_name, znode *value, int declaration_type TSRMLS_DC)
{
if (value) {
zval *property;
@@ -1644,7 +1837,17 @@ void zend_do_declare_property(znode *var_name, znode *value TSRMLS_DC)
ALLOC_ZVAL(property);
*property = value->u.constant;
zend_hash_update(&CG(active_class_entry)->default_properties, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, &property, sizeof(zval *), NULL);
switch (declaration_type) {
case T_VAR:
zend_hash_update(&CG(active_class_entry)->default_properties, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, &property, sizeof(zval *), NULL);
break;
case T_STATIC:
zend_hash_update(CG(active_class_entry)->static_members, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, &property, sizeof(zval *), NULL);
break;
case T_CONST:
zend_hash_update(&CG(active_class_entry)->constants_table, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, &property, sizeof(zval *), NULL);
break;
}
}
FREE_PNODE(var_name);
}
@@ -1685,7 +1888,7 @@ void zend_do_pop_object(znode *object TSRMLS_DC)
}
void zend_do_begin_new_object(znode *new_token, znode *class_name TSRMLS_DC)
void zend_do_begin_new_object(znode *new_token, znode *class_type TSRMLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
unsigned char *ptr = NULL;
@@ -1693,7 +1896,7 @@ void zend_do_begin_new_object(znode *new_token, znode *class_name TSRMLS_DC)
opline->opcode = ZEND_NEW;
opline->result.op_type = IS_VAR;
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->op1 = *class_name;
opline->op1 = *class_type;
SET_UNUSED(opline->op2);
new_token->u.opline_num = get_next_op_number(CG(active_op_array));
@@ -1702,26 +1905,21 @@ void zend_do_begin_new_object(znode *new_token, znode *class_name TSRMLS_DC)
opline->op1 = (opline-1)->result;
SET_UNUSED(opline->op2);
if (class_name->op_type == IS_CONST) {
zval_copy_ctor(&class_name->u.constant);
}
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
opline->opcode = ZEND_INIT_FCALL_BY_NAME;
opline->op1 = (opline-2)->result;
opline->op2 = *class_name;
SET_UNUSED(opline->op2);
opline->extended_value = ZEND_MEMBER_FUNC_CALL | ZEND_CTOR_CALL;
zend_stack_push(&CG(function_call_stack), (void *) &ptr, sizeof(unsigned char *));
}
void zend_do_end_new_object(znode *result, znode *class_name, znode *new_token, znode *argument_list TSRMLS_DC)
void zend_do_end_new_object(znode *result, znode *new_token, znode *argument_list TSRMLS_DC)
{
znode ctor_result;
if (class_name->op_type == IS_CONST) {
zval_copy_ctor(&class_name->u.constant);
}
zend_do_end_function_call(class_name, &ctor_result, argument_list, 1, 0 TSRMLS_CC);
zend_do_end_function_call(NULL, &ctor_result, argument_list, 1, 0 TSRMLS_CC);
zend_do_free(&ctor_result TSRMLS_CC);
CG(active_op_array)->opcodes[new_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array));
@@ -1729,22 +1927,32 @@ void zend_do_end_new_object(znode *result, znode *class_name, znode *new_token,
}
void zend_do_fetch_constant(znode *result, znode *constant_name, int mode TSRMLS_DC)
void zend_do_fetch_constant(znode *result, znode *constant_container, znode *constant_name, int mode TSRMLS_DC)
{
switch (mode) {
case ZEND_CT:
*result = *constant_name;
if (constant_container) {
do_fetch_class_name(NULL, constant_container, constant_name TSRMLS_CC);
*result = *constant_container;
} else {
*result = *constant_name;
}
result->u.constant.type = IS_CONSTANT;
break;
case ZEND_RT: {
case ZEND_RT:
{
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
opline->opcode = ZEND_FETCH_CONSTANT;
opline->result.op_type = IS_TMP_VAR;
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->op1 = *constant_name;
if (constant_container) {
opline->op1 = *constant_container;
} else {
SET_UNUSED(opline->op1);
}
opline->op2 = *constant_name;
*result = opline->result;
SET_UNUSED(opline->op2);
}
break;
}
@@ -1768,6 +1976,7 @@ void zend_do_shell_exec(znode *result, znode *cmd TSRMLS_DC)
opline->extended_value = ZEND_DO_FCALL;
SET_UNUSED(opline->op2);
/* FIXME: exception support not added to this op2 */
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
opline->opcode = ZEND_DO_FCALL;
opline->result.u.var = get_temporary_variable(CG(active_op_array));
@@ -1979,7 +2188,7 @@ void zend_do_fetch_global_or_static_variable(znode *varname, znode *static_assig
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->op1 = *varname;
SET_UNUSED(opline->op2);
opline->op2.u.fetch_type = fetch_type;
opline->extended_value = fetch_type;
result = opline->result;
if (varname->op_type == IS_CONST) {
@@ -2238,6 +2447,20 @@ void zend_do_end_heredoc(TSRMLS_D)
}
void do_namespace(znode *namespace TSRMLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
opline->opcode = ZEND_NAMESPACE;
if (namespace) {
opline->op1 = *namespace;
} else {
SET_UNUSED(opline->op1);
}
SET_UNUSED(opline->op2);
}
void zend_do_exit(znode *result, znode *message TSRMLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
+37 -21
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -27,16 +27,12 @@
# include <stdarg.h>
#endif
#ifdef __cplusplus
#include <iostream.h>
#endif
#include "zend_llist.h"
#define DEBUG_ZEND 0
#define FREE_PNODE(znode) zval_dtor(&znode->u.constant);
#define FREE_OP(op, should_free) if (should_free) zval_dtor(&Ts[(op)->u.var].tmp_var);
#define FREE_OP(Ts, op, should_free) if (should_free) zval_dtor(&Ts[(op)->u.var].tmp_var);
#define SET_UNUSED(op) (op).op_type = IS_UNUSED
@@ -48,13 +44,14 @@ typedef struct _zend_op_array zend_op_array;
typedef struct _znode {
int op_type;
zend_llist *throw_list; /* Try and save this space later on */
union {
zval constant;
zend_uint var;
zend_uint opline_num; /* Needs to be signed */
zend_uint fetch_type;
zend_op_array *op_array;
zend_class_entry *previously_active_class_entry; /* Used at compile-time */
struct {
zend_uint var; /* dummy */
zend_uint type;
@@ -175,9 +172,6 @@ typedef struct _zend_file_handle {
union {
int fd;
FILE *fp;
#ifdef __cplusplus
istream *is;
#endif
} handle;
zend_bool free_filename;
} zend_file_handle;
@@ -238,6 +232,7 @@ void zend_do_fetch_globals(znode *varname TSRMLS_DC);
void fetch_array_begin(znode *result, znode *varname, znode *first_dim TSRMLS_DC);
void fetch_array_dim(znode *result, znode *parent, znode *dim TSRMLS_DC);
void fetch_string_offset(znode *result, znode *parent, znode *offset TSRMLS_DC);
void zend_do_fetch_static_member(znode *class TSRMLS_DC);
void zend_do_print(znode *result, znode *arg TSRMLS_DC);
void zend_do_echo(znode *arg TSRMLS_DC);
typedef int (*unary_op_type)(zval *, zval *);
@@ -277,9 +272,17 @@ void zend_do_receive_arg(int op, znode *var, znode *offset, znode *initializatio
int zend_do_begin_function_call(znode *function_name TSRMLS_DC);
void zend_do_begin_method_call(znode *object, znode *function_name TSRMLS_DC);
void zend_do_begin_dynamic_function_call(znode *function_name TSRMLS_DC);
void do_fetch_class(znode *result, znode *class_entry, znode *class_name TSRMLS_DC);
void do_fetch_class_name(znode *result, znode *class_entry, znode *class_name TSRMLS_DC);
void zend_do_begin_class_member_function_call(znode *class_name, znode *function_name TSRMLS_DC);
void zend_do_end_function_call(znode *function_name, znode *result, znode *argument_list, int is_method, int is_dynamic_fcall TSRMLS_DC);
void zend_do_return(znode *expr, int do_end_vparse TSRMLS_DC);
void zend_do_try(znode *try_token TSRMLS_DC);
void zend_do_begin_catch(znode *try_token, znode *catch_var TSRMLS_DC);
void zend_do_end_catch(znode *try_token TSRMLS_DC);
void zend_do_throw(znode *expr TSRMLS_DC);
ZEND_API int do_bind_function_or_class(zend_op *opline, HashTable *function_table, HashTable *class_table, int compile_time);
void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce);
void zend_do_early_binding(TSRMLS_D);
@@ -300,9 +303,9 @@ void zend_do_case_before_statement(znode *case_list, znode *case_token, znode *c
void zend_do_case_after_statement(znode *result, znode *case_token TSRMLS_DC);
void zend_do_default_before_statement(znode *case_list, znode *default_token TSRMLS_DC);
void zend_do_begin_class_declaration(znode *class_name, znode *parent_class_name TSRMLS_DC);
void zend_do_end_class_declaration(TSRMLS_D);
void zend_do_declare_property(znode *var_name, znode *value TSRMLS_DC);
void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znode *parent_class_name TSRMLS_DC);
void zend_do_end_class_declaration(znode *class_token TSRMLS_DC);
void zend_do_declare_property(znode *var_name, znode *value, int declaration_type TSRMLS_DC);
void zend_do_fetch_property(znode *result, znode *object, znode *property TSRMLS_DC);
@@ -311,10 +314,10 @@ void zend_do_push_object(znode *object TSRMLS_DC);
void zend_do_pop_object(znode *object TSRMLS_DC);
void zend_do_begin_new_object(znode *new_token, znode *class_name TSRMLS_DC);
void zend_do_end_new_object(znode *result, znode *class_name, znode *new_token, znode *argument_list TSRMLS_DC);
void zend_do_begin_new_object(znode *new_token, znode *class_type TSRMLS_DC);
void zend_do_end_new_object(znode *result, znode *new_token, znode *argument_list TSRMLS_DC);
void zend_do_fetch_constant(znode *result, znode *constant_name, int mode TSRMLS_DC);
void zend_do_fetch_constant(znode *result, znode *constant_container, znode *constant_name, int mode TSRMLS_DC);
void zend_do_shell_exec(znode *result, znode *cmd TSRMLS_DC);
@@ -343,6 +346,8 @@ void zend_do_declare_end(TSRMLS_D);
void zend_do_end_heredoc(TSRMLS_D);
void do_namespace(znode *namespace TSRMLS_DC);
void zend_do_exit(znode *result, znode *message TSRMLS_DC);
void zend_do_begin_silence(znode *strudel_token TSRMLS_DC);
@@ -367,7 +372,7 @@ ZEND_API void function_add_ref(zend_function *function);
ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC);
ZEND_API zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC);
ZEND_API zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC);
ZEND_API int zend_execute_scripts(int type TSRMLS_DC, int file_count, ...);
ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_count, ...);
ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC);
ZEND_API void init_op_array(zend_op_array *op_array, int type, int initial_ops_size TSRMLS_DC);
ZEND_API void destroy_op_array(zend_op_array *op_array);
@@ -530,15 +535,26 @@ int zendlex(znode *zendlval TSRMLS_DC);
#define ZEND_SEND_VAR_NO_REF 106
#define ZEND_CATCH 107
#define ZEND_THROW 108
#define ZEND_NAMESPACE 109
#define ZEND_FETCH_CLASS 110
/* end of block */
/* global/local fetches */
#define ZEND_FETCH_GLOBAL 0
#define ZEND_FETCH_LOCAL 1
#define ZEND_FETCH_STATIC 2
#define ZEND_FETCH_GLOBAL 0
#define ZEND_FETCH_LOCAL 1
#define ZEND_FETCH_STATIC 2
#define ZEND_FETCH_STATIC_MEMBER 3
/* class fetches */
#define ZEND_FETCH_CLASS_DEFAULT 0
#define ZEND_FETCH_CLASS_SELF 1
#define ZEND_FETCH_CLASS_MAIN 2
/* unset types */
#define ZEND_UNSET_REG 0
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+17 -10
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -58,9 +58,9 @@ void zend_copy_constants(HashTable *target, HashTable *source)
static int clean_non_persistent_constant(zend_constant *c TSRMLS_DC)
{
if (c->flags & CONST_PERSISTENT) {
return ZEND_HASH_APPLY_STOP;
return EG(full_tables_cleanup) ? 0 : ZEND_HASH_APPLY_STOP;
} else {
return ZEND_HASH_APPLY_REMOVE;
return EG(full_tables_cleanup) ? 1 : ZEND_HASH_APPLY_REMOVE;
}
}
@@ -90,7 +90,7 @@ int zend_startup_constants(TSRMLS_D)
DWORD dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
#endif
EG(zend_constants) = (HashTable *) malloc(sizeof(HashTable));
EG(zend_constants) = &CG(main_class).constants_table;
if (zend_hash_init(EG(zend_constants), 20, NULL, ZEND_CONSTANT_DTOR, 1)==FAILURE) {
return FAILURE;
@@ -153,14 +153,17 @@ void zend_register_standard_constants(TSRMLS_D)
int zend_shutdown_constants(TSRMLS_D)
{
zend_hash_destroy(EG(zend_constants));
free(EG(zend_constants));
return SUCCESS;
}
void clean_non_persistent_constants(TSRMLS_D)
{
zend_hash_reverse_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant TSRMLS_CC);
if (EG(full_tables_cleanup)) {
zend_hash_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant TSRMLS_CC);
} else {
zend_hash_reverse_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant TSRMLS_CC);
}
}
@@ -216,9 +219,12 @@ ZEND_API void zend_register_string_constant(char *name, uint name_len, char *str
ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC)
{
zend_constant *c;
char *lookup_name = estrndup(name, name_len);
char *lookup_name;
int retval;
lookup_name = do_alloca(name_len+1);
memcpy(lookup_name, name, name_len+1);
zend_str_tolower(lookup_name, name_len);
if (zend_hash_find(EG(zend_constants), lookup_name, name_len+1, (void **) &c)==SUCCESS) {
@@ -232,8 +238,9 @@ ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC
} else {
retval=0;
}
efree(lookup_name);
free_alloca(lookup_name);
return retval;
}
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+614 -449
View File
File diff suppressed because it is too large. Load diff
+3 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -44,6 +44,7 @@ typedef union _temp_variable {
} data;
unsigned char type;
zend_class_entry *class_entry;
} EA;
} temp_variable;
+75 -21
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -93,9 +93,9 @@ static void zend_extension_deactivator(zend_extension *extension TSRMLS_DC)
static int is_not_internal_function(zend_function *function TSRMLS_DC)
{
if (function->type == ZEND_INTERNAL_FUNCTION) {
return ZEND_HASH_APPLY_STOP;
return EG(full_tables_cleanup) ? 0 : ZEND_HASH_APPLY_STOP;
} else {
return ZEND_HASH_APPLY_REMOVE;
return EG(full_tables_cleanup) ? 1 : ZEND_HASH_APPLY_REMOVE;
}
}
@@ -103,9 +103,9 @@ static int is_not_internal_function(zend_function *function TSRMLS_DC)
static int is_not_internal_class(zend_class_entry *ce TSRMLS_DC)
{
if (ce->type == ZEND_INTERNAL_CLASS) {
return ZEND_HASH_APPLY_STOP;
return EG(full_tables_cleanup) ? 0 : ZEND_HASH_APPLY_STOP;
} else {
return ZEND_HASH_APPLY_REMOVE;
return EG(full_tables_cleanup) ? 1 : ZEND_HASH_APPLY_REMOVE;
}
}
@@ -121,8 +121,7 @@ void init_executor(TSRMLS_D)
#if 0&&ZEND_DEBUG
original_sigsegv_handler = signal(SIGSEGV, zend_handle_sigsegv);
#endif
EG(return_value_ptr_ptr) = &EG(global_return_value_ptr);
EG(global_return_value_ptr) = NULL;
EG(return_value_ptr_ptr) = NULL;
EG(symtable_cache_ptr) = EG(symtable_cache)-1;
EG(symtable_cache_limit)=EG(symtable_cache)+SYMTABLE_CACHE_SIZE-1;
@@ -137,7 +136,7 @@ void init_executor(TSRMLS_D)
zend_hash_init(&EG(symbol_table), 50, NULL, ZVAL_PTR_DTOR, 0);
EG(active_symbol_table) = &EG(symbol_table);
zend_llist_apply(&zend_extensions, (llist_apply_func_t) zend_extension_activator TSRMLS_CC);
EG(opline_ptr) = NULL;
EG(garbage_ptr) = 0;
@@ -152,9 +151,19 @@ void init_executor(TSRMLS_D)
EG(orig_error_reporting) = EG(error_reporting);
zend_objects_init(&EG(objects), 1024);
EG(full_tables_cleanup) = 0;
#ifdef ZEND_WIN32
EG(timed_out) = 0;
#endif
EG(exception) = NULL;
EG(namespace) = NULL;
EG(main_class_ptr) = &CG(main_class);
CG(main_class).static_members = &EG(symbol_table);
}
@@ -181,8 +190,13 @@ void shutdown_executor(TSRMLS_D)
zend_ptr_stack_destroy(&EG(argument_stack));
/* Destroy all op arrays */
zend_hash_reverse_apply(EG(function_table), (apply_func_t) is_not_internal_function TSRMLS_CC);
zend_hash_reverse_apply(EG(class_table), (apply_func_t) is_not_internal_class TSRMLS_CC);
if (EG(full_tables_cleanup)) {
zend_hash_apply(EG(function_table), (apply_func_t) is_not_internal_function TSRMLS_CC);
zend_hash_apply(EG(class_table), (apply_func_t) is_not_internal_class TSRMLS_CC);
} else {
zend_hash_reverse_apply(EG(function_table), (apply_func_t) is_not_internal_function TSRMLS_CC);
zend_hash_reverse_apply(EG(class_table), (apply_func_t) is_not_internal_class TSRMLS_CC);
}
} zend_end_try();
/* The regular list must be destroyed after the main symbol table and
@@ -280,6 +294,7 @@ ZEND_API int zend_is_true(zval *op)
return i_zend_is_true(op);
}
#include "../TSRM/tsrm_strtok_r.h"
ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC)
{
@@ -295,26 +310,60 @@ ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC)
refcount = p->refcount;
if (!zend_get_constant(p->value.str.val, p->value.str.len, &const_value TSRMLS_CC)) {
zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
p->value.str.val,
p->value.str.val);
p->type = IS_STRING;
if (!inline_change) {
zval_copy_ctor(p);
if (strchr(p->value.str.val, ':')) {
char *cur, *temp;
char *last;
zend_class_entry *ce;
zval **value;
last = tsrm_strtok_r(p->value.str.val, ":", &temp);
if (zend_hash_find(EG(class_table), last, strlen(last)+1, &ce) == FAILURE) {
zend_error(E_ERROR, "Invalid class! Improve this error message");
}
} else {
for(;;) {
cur = tsrm_strtok_r(NULL, ":", &temp);
if (!cur) {
break;
}
if (zend_hash_find(EG(class_table), last, strlen(last)+1, &ce) == FAILURE) {
zend_error(E_ERROR, "Invalid class! Improve this error message");
}
last = cur;
}
if (zend_hash_find(&ce->constants_table, last, strlen(last)+1, (void **) &value) == FAILURE) {
zend_error(E_ERROR, "Invalid class! Improve this error message");
}
const_value = **value;
zval_copy_ctor(&const_value);
if (inline_change) {
STR_FREE(p->value.str.val);
}
*p = const_value;
} else {
if (!zend_get_constant(p->value.str.val, p->value.str.len, &const_value TSRMLS_CC)) {
zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
p->value.str.val,
p->value.str.val);
p->type = IS_STRING;
if (!inline_change) {
zval_copy_ctor(p);
}
} else {
if (inline_change) {
STR_FREE(p->value.str.val);
}
*p = const_value;
}
}
INIT_PZVAL(p);
p->refcount = refcount;
} else if (p->type == IS_CONSTANT_ARRAY) {
zval **element;
char *str_index;
ulong str_index_len, num_index;
uint str_index_len;
ulong num_index;
SEPARATE_ZVAL(pp);
p = *pp;
@@ -605,6 +654,7 @@ void execute_new_code(TSRMLS_D)
{
zend_op *opline, *end;
zend_op *ret_opline;
zval *local_retval=NULL;
if (!CG(interactive)
|| CG(active_op_array)->backpatch_count>0
@@ -638,9 +688,13 @@ void execute_new_code(TSRMLS_D)
opline++;
}
EG(return_value_ptr_ptr) = &local_retval;
EG(active_op_array) = CG(active_op_array);
zend_execute(CG(active_op_array) TSRMLS_CC);
zval_ptr_dtor(EG(return_value_ptr_ptr));
if (local_retval) {
zval_ptr_dtor(&local_retval);
}
CG(active_op_array)->last--; /* get rid of that ZEND_RETURN */
CG(active_op_array)->start_op = CG(active_op_array)->opcodes+CG(active_op_array)->last;
}
+6 -6
View File
@@ -5,18 +5,18 @@
static inline void zend_pzval_lock_func(zval *z)
{
((z)->refcount++);
z->refcount++;
}
#define PZVAL_UNLOCK(z) zend_pzval_unlock_func(z TSRMLS_CC)
static inline void zend_pzval_unlock_func(zval *z TSRMLS_DC)
{
((z)->refcount--);
if (!(z)->refcount) {
(z)->refcount = 1;
(z)->is_ref = 0;
EG(garbage)[EG(garbage_ptr)++] = (z);
z->refcount--;
if (!z->refcount) {
z->refcount = 1;
z->is_ref = 0;
EG(garbage)[EG(garbage_ptr)++] = z;
}
}
+9 -9
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -51,23 +51,23 @@ int zend_load_extension(char *path)
/* allow extension to proclaim compatibility with any Zend version */
if (extension_version_info->zend_extension_api_no != ZEND_EXTENSION_API_NO &&(!new_extension->api_no_check || new_extension->api_no_check(ZEND_EXTENSION_API_NO) != SUCCESS)) {
if (extension_version_info->zend_extension_api_no > ZEND_EXTENSION_API_NO) {
fprintf(stderr, "%s requires Zend Engine API version %d\n"
"The installed Zend Engine API version is %d\n\n",
fprintf(stderr, "%s requires Zend Engine API version %d.\n"
"The Zend Engine API version %d which is installed, is outdated.\n\n",
new_extension->name,
extension_version_info->zend_extension_api_no,
ZEND_EXTENSION_API_NO);
DL_UNLOAD(handle);
return FAILURE;
} else if (extension_version_info->zend_extension_api_no < ZEND_EXTENSION_API_NO) {
fprintf(stderr, "%s designed to be used with the Zend Engine API %d is outdated\n"
"It requires a more recent version of the Zend Engine\n"
"The installed Zend Engine API version is %d\n"
"Contact %s at %s for a later version of this module.\n\n",
fprintf(stderr, "%s requires Zend Engine API version %d.\n"
"The Zend Engine API version %d which is installed, is newer.\n"
"Contact %s at %s for a later version of %s.\n\n",
new_extension->name,
extension_version_info->zend_extension_api_no,
ZEND_EXTENSION_API_NO,
new_extension->author,
new_extension->URL);
new_extension->URL,
new_extension->name);
DL_UNLOAD(handle);
return FAILURE;
}
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+21 -20
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -36,10 +36,6 @@
/*#undef ZTS*/
#ifdef ZTS
#ifdef __cplusplus
class ZendFlexLexer;
class ZendIniFlexLexer;
#endif
BEGIN_EXTERN_C()
ZEND_API extern int compiler_globals_id;
@@ -70,7 +66,7 @@ struct _zend_compiler_globals {
zend_stack object_stack;
zend_stack declare_stack;
zend_class_entry class_entry, *active_class_entry;
zend_class_entry *active_class_entry;
zval active_ce_parent_class_name;
/* variables for list() compilation */
@@ -89,6 +85,7 @@ struct _zend_compiler_globals {
zend_op_array *active_op_array;
zend_class_entry main_class;
HashTable *function_table; /* function symbol table */
HashTable *class_table; /* class table */
@@ -113,13 +110,7 @@ struct _zend_compiler_globals {
zend_llist open_files;
#if defined(ZTS) && defined(__cplusplus)
ZendFlexLexer *ZFL;
ZendIniFlexLexer *ini_scanner;
#else
void *ZFL;
void *ini_parser;
#endif
zend_llist *throw_list;
struct _zend_ini_parser_param *ini_parser_param;
@@ -141,9 +132,6 @@ struct _zend_executor_globals {
zend_function_state *function_state_ptr;
zend_ptr_stack arg_types_stack;
/* for global return() support */
zval *global_return_value_ptr;
/* symbol table cache */
HashTable *symtable_cache[SYMTABLE_CACHE_SIZE];
HashTable **symtable_cache_limit;
@@ -168,12 +156,16 @@ struct _zend_executor_globals {
HashTable *class_table; /* class table */
HashTable *zend_constants; /* constants table */
zend_class_entry *namespace;
zend_class_entry *main_class_ptr;
long precision;
int ticks_count;
zend_bool in_execution;
zend_bool bailout_set;
zend_bool full_tables_cleanup;
/* for extended information support */
zend_bool no_extensions;
@@ -203,6 +195,7 @@ struct _zend_executor_globals {
HashTable ini_directives;
zend_objects objects;
zval *exception;
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};
@@ -232,16 +225,24 @@ struct _zend_alloc_globals {
#endif
};
struct _zend_scanner_globals {
FILE *yyin;
FILE *yyout;
FILE *yy_in;
FILE *yy_out;
int yy_leng;
char *yy_text;
struct yy_buffer_state *current_buffer;
char *c_buf_p;
int init;
int start;
char _yy_hold_char;
int yy_n_chars;
int _yy_did_buffer_switch_on_eof;
int _yy_last_accepting_state; /* Must be of the same type as yy_state_type,
* if for whatever reason it's no longer int!
*/
char *_yy_last_accepting_cpos;
int _yy_more_flag;
int _yy_more_len;
};
#endif /* ZEND_GLOBALS_H */
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+9 -9
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -1023,7 +1023,7 @@ ZEND_API int zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos)
/* This function should be made binary safe */
ZEND_API int zend_hash_get_current_key_ex(HashTable *ht, char **str_index, ulong *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos)
ZEND_API int zend_hash_get_current_key_ex(HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos)
{
Bucket *p;
@@ -1088,7 +1088,7 @@ ZEND_API int zend_hash_get_current_data_ex(HashTable *ht, void **pData, HashPosi
ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func,
compare_func_t compar, int renumber)
compare_func_t compar, int renumber TSRMLS_DC)
{
Bucket **arTmp;
Bucket *p;
@@ -1111,7 +1111,7 @@ ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func,
i++;
}
(*sort_func)((void *) arTmp, i, sizeof(Bucket *), compar);
(*sort_func)((void *) arTmp, i, sizeof(Bucket *), compar TSRMLS_CC);
HANDLE_BLOCK_INTERRUPTIONS();
ht->pListHead = arTmp[0];
@@ -1212,7 +1212,7 @@ ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t co
}
}
}
result = compar(p1->pData, pData2);
result = compar(p1->pData, pData2 TSRMLS_CC);
if (result!=0) {
HASH_UNPROTECT_RECURSION(ht1);
HASH_UNPROTECT_RECURSION(ht2);
@@ -1230,7 +1230,7 @@ ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t co
}
ZEND_API int zend_hash_minmax(HashTable *ht, int (*compar) (const void *, const void *), int flag, void **pData)
ZEND_API int zend_hash_minmax(HashTable *ht, compare_func_t compar, int flag, void **pData TSRMLS_DC)
{
Bucket *p, *res;
@@ -1244,11 +1244,11 @@ ZEND_API int zend_hash_minmax(HashTable *ht, int (*compar) (const void *, const
res = p = ht->pListHead;
while ((p = p->pListNext)) {
if (flag) {
if (compar(&res, &p) < 0) { /* max */
if (compar(&res, &p TSRMLS_CC) < 0) { /* max */
res = p;
}
} else {
if (compar(&res, &p) > 0) { /* min */
if (compar(&res, &p TSRMLS_CC) > 0) { /* min */
res = p;
}
}
+7 -7
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -34,8 +34,8 @@
#define HASH_DEL_INDEX 1
typedef ulong (*hash_func_t)(char *arKey, uint nKeyLength);
typedef int (*compare_func_t)(const void *, const void *);
typedef void (*sort_func_t)(void *, size_t, register size_t, compare_func_t);
typedef int (*compare_func_t)(const void *, const void * TSRMLS_DC);
typedef void (*sort_func_t)(void *, size_t, register size_t, compare_func_t TSRMLS_DC);
typedef void (*dtor_func_t)(void *pDest);
typedef void (*copy_ctor_func_t)(void *pElement);
@@ -154,7 +154,7 @@ ZEND_API ulong zend_hash_next_free_element(HashTable *ht);
/* traversing */
ZEND_API int zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos);
ZEND_API int zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos);
ZEND_API int zend_hash_get_current_key_ex(HashTable *ht, char **str_index, ulong *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos);
ZEND_API int zend_hash_get_current_key_ex(HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool duplicate, HashPosition *pos);
ZEND_API int zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos);
ZEND_API int zend_hash_get_current_data_ex(HashTable *ht, void **pData, HashPosition *pos);
ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos);
@@ -179,9 +179,9 @@ ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos
ZEND_API void zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size);
ZEND_API void zend_hash_merge(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, void *tmp, uint size, int overwrite);
ZEND_API void zend_hash_merge_ex(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, uint size, zend_bool (*pReplaceOrig)(void *orig, void *p_new));
ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func, compare_func_t compare_func, int renumber);
ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func, compare_func_t compare_func, int renumber TSRMLS_DC);
ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, zend_bool ordered TSRMLS_DC);
ZEND_API int zend_hash_minmax(HashTable *ht, int (*compar)(const void *, const void *), int flag, void **pData);
ZEND_API int zend_hash_minmax(HashTable *ht, compare_func_t compar, int flag, void **pData TSRMLS_DC);
ZEND_API int zend_hash_num_elements(HashTable *ht);
+63 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -173,6 +173,67 @@ ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini
zend_printf("</code>");
}
ZEND_API void zend_strip(TSRMLS_D)
{
zval token;
int token_type;
token.type = 0;
while ((token_type=lex_scan(&token TSRMLS_CC))) {
switch (token_type) {
case T_COMMENT:
token.type = 0;
break;
case T_WHITESPACE:
if (token.type) {
putchar(' ');
token.type = 0;
}
continue;
}
switch (token_type) {
case 349:
break;
default: {
char c, *ptr=LANG_SCNG(yy_text), *end=LANG_SCNG(yy_text)+LANG_SCNG(yy_leng);
while (ptr<end) {
c = *ptr++;
putchar(c);
}
}
break;
}
if (token.type == IS_STRING) {
switch (token_type) {
case T_OPEN_TAG:
case T_OPEN_TAG_WITH_ECHO:
case T_CLOSE_TAG:
case T_WHITESPACE:
case T_COMMENT:
break;
default:
efree(token.value.str.val);
break;
}
} else if (token_type == T_END_HEREDOC) {
zend_bool has_semicolon=(strchr(token.value.str.val, ';')?1:0);
efree(token.value.str.val);
if (has_semicolon) {
/* the following semicolon was unput(), ignore it */
lex_scan(&token TSRMLS_CC);
}
}
token.type = 0;
}
}
/*
* Local variables:
* tab-width: 4
+3 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -40,6 +40,7 @@ typedef struct _zend_syntax_highlighter_ini {
BEGIN_EXTERN_C()
ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC);
ZEND_API void zend_strip(TSRMLS_D);
ZEND_API int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini TSRMLS_DC);
ZEND_API int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name TSRMLS_DC);
ZEND_API void zend_html_putc(char c);
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+5 -4
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -20,6 +20,7 @@
#include <stdlib.h>
#include "zend.h"
#include "zend_qsort.h"
#include "zend_API.h"
#include "zend_ini.h"
#include "zend_alloc.h"
@@ -97,7 +98,7 @@ ZEND_API int zend_copy_ini_directives(TSRMLS_D)
}
static int ini_key_compare(const void *a, const void *b)
static int ini_key_compare(const void *a, const void *b TSRMLS_DC)
{
Bucket *f;
Bucket *s;
@@ -119,7 +120,7 @@ static int ini_key_compare(const void *a, const void *b)
ZEND_API void zend_ini_sort_entries(TSRMLS_D)
{
zend_hash_sort(&EG(ini_directives), qsort, ini_key_compare, 0);
zend_hash_sort(&EG(ini_directives), zend_qsort, ini_key_compare, 0 TSRMLS_CC);
}
/*
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+2 -2
View File
@@ -5,10 +5,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
-12
View File
@@ -1,18 +1,6 @@
#ifndef _ZEND_INI_SCANNER_H
#define _ZEND_INI_SCANNER_H
#if defined(ZTS) && defined(__cplusplus)
class ZendIniFlexLexer : public yyFlexLexer
{
public:
virtual ~ZendIniFlexLexer();
int lex_scan(zval *zendlval);
void BeginState(int state);
char *filename;
};
#endif /* ZTS && __cplusplus */
BEGIN_EXTERN_C()
int zend_ini_scanner_get_lineno(TSRMLS_D);
char *zend_ini_scanner_get_filename(TSRMLS_D);
+12 -74
View File
@@ -5,10 +5,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -17,33 +17,25 @@
+----------------------------------------------------------------------+
*/
#define yyleng SCNG(yy_leng)
#define yytext SCNG(yy_text)
#define yytext_ptr SCNG(yy_text)
#define yyin SCNG(yy_in)
#define yyout SCNG(yy_out)
#define yy_last_accepting_state SCNG(_yy_last_accepting_state)
#define yy_last_accepting_cpos SCNG(_yy_last_accepting_cpos)
#define yy_more_flag SCNG(_yy_more_flag)
#define yy_more_len SCNG(_yy_more_len)
#include "zend.h"
#include "zend_globals.h"
#include "zend_ini_parser.h"
#include "zend_ini_scanner.h"
#ifdef __cplusplus
# ifdef HAVE_STDIOSTR_H
# include <stdiostr.h>
# endif
# ifdef HAVE_STDIOSTREAM_H
# include <stdiostream.h>
# endif
# ifdef ZEND_WIN32
# include <strstrea.h>
# else
# include <strstream.h>
# endif
#endif
#undef YYSTYPE
#define YYSTYPE zval
#ifdef __cplusplus
#define YY_DECL int ZendIniFlexLexer::lex_scan(zval *ini_lval TSRMLS_DC)
#else
#define YY_DECL int ini_lex(zval *ini_lval TSRMLS_DC)
#endif
/* Globals Macros */
#define SCNG INI_SCNG
@@ -54,7 +46,6 @@ ZEND_API zend_scanner_globals ini_scanner_globals;
#endif
#ifndef __cplusplus
static char *ini_filename;
void init_ini_scanner()
@@ -74,40 +65,6 @@ char *zend_ini_scanner_get_filename(TSRMLS_D)
return ini_filename;
}
#else /* ZTS */
int zend_ini_scanner_get_lineno(TSRMLS_D)
{
return CG(ini_scanner)->lineno();
}
char *zend_ini_scanner_get_filename(TSRMLS_D)
{
return CG(ini_scanner)->filename;
}
int ini_lex(zval *ini_lval)
{
TSRMLS_FETCH();
return CG(ini_scanner)->lex_scan(ini_lval);
}
ZendIniFlexLexer::~ZendIniFlexLexer()
{
if (yy_start_stack) {
yy_flex_free(yy_start_stack);
}
}
int yyFlexLexer::yylex()
{
fprintf(stderr, "Error: yyFlexLexer::yylex() called\n");
return -1;
}
#endif
int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC)
{
@@ -125,22 +82,10 @@ int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC)
return FAILURE;
}
#ifdef __cplusplus
if (!fp) {
return FAILURE;
}
fh->handle.is = new istdiostream(fp);
fh->type = ZEND_HANDLE_STDIOSTREAM;
CG(ini_scanner) = new ZendIniFlexLexer;
CG(ini_scanner)->switch_streams(fh->handle.is, &cout);
CG(ini_scanner)->filename = fh->filename;
#else
init_ini_scanner();
yyin = fp;
yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE TSRMLS_CC) TSRMLS_CC);
ini_filename = fh->filename;
#endif
return SUCCESS;
}
@@ -151,13 +96,6 @@ void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC)
case ZEND_HANDLE_FP:
fclose(fh->handle.fp);
break;
#ifdef __cplusplus
case ZEND_HANDLE_STDIOSTREAM: {
TSRMLS_FETCH();
delete CG(ini_scanner);
}
break;
#endif
}
}
+78 -30
View File
@@ -5,10 +5,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -105,6 +105,9 @@
%token T_FUNCTION
%token T_CONST
%token T_RETURN
%token T_TRY
%token T_CATCH
%token T_THROW
%token T_USE
%token T_GLOBAL
%token T_STATIC
@@ -112,6 +115,7 @@
%token T_UNSET
%token T_ISSET
%token T_EMPTY
%token T_NAMESPACE
%token T_CLASS
%token T_EXTENDS
%token T_OBJECT_OPERATOR
@@ -201,7 +205,12 @@ unticked_statement:
| T_FOREACH '(' expr_without_variable T_AS { zend_do_foreach_begin(&$1, &$3, &$2, &$4, 0 TSRMLS_CC); } w_cvar foreach_optional_arg ')' { zend_do_foreach_cont(&$6, &$7, &$4 TSRMLS_CC); } foreach_statement { zend_do_foreach_end(&$1, &$2 TSRMLS_CC); }
| T_DECLARE { zend_do_declare_begin(TSRMLS_C); } '(' declare_list ')' declare_statement { zend_do_declare_end(TSRMLS_C); }
| ';' /* empty statement */
| T_TRY { zend_do_try(&$1 TSRMLS_CC); } '{' inner_statement_list '}'
T_CATCH '(' T_VARIABLE ')' { zend_do_begin_catch(&$1, &$8 TSRMLS_CC); } '{' inner_statement_list '}' { zend_do_end_catch(&$1 TSRMLS_CC); }
| T_THROW expr ';' { zend_do_throw(&$2 TSRMLS_CC); }
| T_DELETE cvar ';' { zend_do_end_variable_parse(BP_VAR_UNSET, 0 TSRMLS_CC); zend_do_unset(&$1, ZEND_UNSET_OBJ TSRMLS_CC); }
| T_NAMESPACE namespace_class_entry ';' { do_namespace(&$2 TSRMLS_CC); }
| T_NAMESPACE ';' { do_namespace(NULL TSRMLS_CC); }
;
unset_variables:
@@ -229,8 +238,8 @@ unticked_declaration_statement:
'(' parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$1 TSRMLS_CC); }
| T_OLD_FUNCTION { $1.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$4, 0, $3.op_type TSRMLS_CC); }
parameter_list '(' inner_statement_list ')' ';' { zend_do_end_function_declaration(&$1 TSRMLS_CC); }
| T_CLASS T_STRING { zend_do_begin_class_declaration(&$2, NULL TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(TSRMLS_C); }
| T_CLASS T_STRING T_EXTENDS T_STRING { zend_do_begin_class_declaration(&$2, &$4 TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(TSRMLS_C); }
| T_CLASS T_STRING { zend_do_begin_class_declaration(&$1, &$2, NULL TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); }
| T_CLASS T_STRING T_EXTENDS T_STRING { zend_do_begin_class_declaration(&$1, &$2, &$4 TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); }
;
@@ -378,12 +387,14 @@ class_statement_list:
class_statement:
T_VAR class_variable_decleration ';'
class_variable_decleration ';'
| class_constant_decleration ';'
| T_FUNCTION { $1.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$4, 1, $3.op_type TSRMLS_CC); } '('
parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$1 TSRMLS_CC); }
| T_OLD_FUNCTION { $1.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$4, 1, $3.op_type TSRMLS_CC); }
parameter_list '(' inner_statement_list ')' ';' { zend_do_end_function_declaration(&$1 TSRMLS_CC); }
| T_CLASS T_STRING { zend_do_begin_class_declaration(&$1, &$2, NULL TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); }
| T_CLASS T_STRING T_EXTENDS T_STRING { zend_do_begin_class_declaration(&$1, &$2, &$4 TSRMLS_CC); } '{' class_statement_list '}' { zend_do_end_class_declaration(&$1 TSRMLS_CC); }
;
is_reference:
@@ -391,12 +402,21 @@ is_reference:
| '&' { $$.op_type = ZEND_RETURN_REF; }
class_variable_decleration:
class_variable_decleration ',' T_VARIABLE { zend_do_declare_property(&$3, NULL TSRMLS_CC); }
| class_variable_decleration ',' T_VARIABLE '=' static_scalar { zend_do_declare_property(&$3, &$5 TSRMLS_CC); }
| T_VARIABLE { zend_do_declare_property(&$1, NULL TSRMLS_CC); }
| T_VARIABLE '=' static_scalar { zend_do_declare_property(&$1, &$3 TSRMLS_CC); }
class_variable_decleration ',' T_VARIABLE { zend_do_declare_property(&$3, NULL, $1.op_type TSRMLS_CC); }
| class_variable_decleration ',' T_VARIABLE '=' static_scalar { zend_do_declare_property(&$3, &$5, $1.op_type TSRMLS_CC); }
| class_decleration_type T_VARIABLE { $$ = $1; zend_do_declare_property(&$2, NULL, $1.op_type TSRMLS_CC); }
| class_decleration_type T_VARIABLE '=' static_scalar { $$ = $1; zend_do_declare_property(&$2, &$4, $1.op_type TSRMLS_CC); }
;
class_decleration_type:
T_VAR { $$.op_type = T_VAR; }
| T_STATIC { $$.op_type = T_STATIC; }
;
class_constant_decleration:
| T_CONST ',' T_STRING '=' static_scalar { zend_do_declare_property(&$3, &$5, T_CONST TSRMLS_CC); }
| T_CONST T_STRING '=' static_scalar { zend_do_declare_property(&$2, &$4, T_CONST TSRMLS_CC); }
;
echo_expr_list:
| echo_expr_list ',' expr { zend_do_echo(&$3 TSRMLS_CC); }
@@ -414,14 +434,13 @@ non_empty_for_expr:
| expr { $$ = $1; }
;
expr_without_variable:
T_LIST '(' { zend_do_list_init(TSRMLS_C); } assignment_list ')' '=' expr { zend_do_list_end(&$$, &$7 TSRMLS_CC); }
| cvar '=' expr { zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign(&$$, &$1, &$3 TSRMLS_CC); }
| cvar '=' '&' w_cvar { zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$4 TSRMLS_CC); }
| cvar '=' '&' function_call { zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$4 TSRMLS_CC); }
| cvar '=' '&' T_NEW static_or_variable_string { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$4, &$5 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$3, &$5, &$4, &$7 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$3 TSRMLS_CC); }
| T_NEW static_or_variable_string { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$1, &$2 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$$, &$2, &$1, &$4 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
| cvar '=' '&' T_NEW new_class_entry { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$4, &$5 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$3, &$4, &$7 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC); zend_do_assign_ref(&$$, &$1, &$3 TSRMLS_CC); }
| T_NEW new_class_entry { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_new_object(&$1, &$2 TSRMLS_CC); } ctor_arguments { zend_do_end_new_object(&$$, &$1, &$4 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
| cvar T_PLUS_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_ADD, &$$, &$1, &$3 TSRMLS_CC); }
| cvar T_MINUS_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_SUB, &$$, &$1, &$3 TSRMLS_CC); }
| cvar T_MUL_EQUAL expr { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); zend_do_binary_assign_op(ZEND_ASSIGN_MUL, &$$, &$1, &$3 TSRMLS_CC); }
@@ -490,19 +509,37 @@ function_call:
T_STRING '(' { $2.u.opline_num = zend_do_begin_function_call(&$1 TSRMLS_CC); }
function_call_parameter_list
')' { zend_do_end_function_call(&$1, &$$, &$4, 0, $2.u.opline_num TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C); }
| T_STRING T_PAAMAYIM_NEKUDOTAYIM static_or_variable_string '(' { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); }
| parse_class_entry static_or_variable_string '(' { zend_do_extended_fcall_begin(TSRMLS_C); zend_do_begin_class_member_function_call(&$1, &$2 TSRMLS_CC); }
function_call_parameter_list
')' { zend_do_end_function_call(&$3, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
')' { zend_do_end_function_call(&$2, &$$, &$5, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
| cvar_without_objects '(' { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_dynamic_function_call(&$1 TSRMLS_CC); }
function_call_parameter_list ')'
{ zend_do_end_function_call(&$1, &$$, &$4, 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
;
parse_class_entry:
parse_class_entry T_STRING T_PAAMAYIM_NEKUDOTAYIM { do_fetch_class(&$$, &$1, &$2 TSRMLS_CC); }
| T_STRING T_PAAMAYIM_NEKUDOTAYIM { do_fetch_class(&$$, NULL, &$1 TSRMLS_CC); }
;
parse_class_name_entry:
parse_class_name_entry T_STRING T_PAAMAYIM_NEKUDOTAYIM { do_fetch_class_name(&$$, &$1, &$2 TSRMLS_CC); }
| T_STRING T_PAAMAYIM_NEKUDOTAYIM { $$ = $1; }
;
namespace_class_entry:
parse_class_entry T_STRING { do_fetch_class(&$$, &$1, &$2 TSRMLS_CC); }
| T_STRING { do_fetch_class(&$$, NULL, &$1 TSRMLS_CC); }
;
new_class_entry:
parse_class_entry static_or_variable_string { do_fetch_class(&$$, &$1, &$2 TSRMLS_CC); }
| static_or_variable_string { do_fetch_class(&$$, NULL, &$1 TSRMLS_CC); }
;
static_or_variable_string:
T_STRING { $$ = $1; }
| r_cvar { $$ = $1; }
| r_cvar_without_static_member { $$ = $1; }
;
@@ -530,16 +567,18 @@ common_scalar:
static_scalar: /* compile-time evaluated scalars */
common_scalar { $$ = $1; }
| T_STRING { zend_do_fetch_constant(&$$, &$1, ZEND_CT TSRMLS_CC); }
| T_STRING { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_CT TSRMLS_CC); }
| '+' static_scalar { $$ = $1; }
| '-' static_scalar { zval minus_one; minus_one.type = IS_LONG; minus_one.value.lval = -1; mul_function(&$2.u.constant, &$2.u.constant, &minus_one TSRMLS_CC); $$ = $2; }
| T_ARRAY '(' static_array_pair_list ')' { $$ = $3; $$.u.constant.type = IS_CONSTANT_ARRAY; }
| parse_class_name_entry T_STRING { zend_do_fetch_constant(&$$, &$1, &$2, ZEND_CT TSRMLS_CC); }
;
scalar:
T_STRING { zend_do_fetch_constant(&$$, &$1, ZEND_RT TSRMLS_CC); }
T_STRING { zend_do_fetch_constant(&$$, NULL, &$1, ZEND_RT TSRMLS_CC); }
| T_STRING_VARNAME { $$ = $1; }
| parse_class_entry T_STRING { zend_do_fetch_constant(&$$, &$1, &$2, ZEND_RT TSRMLS_CC); }
| common_scalar { $$ = $1; }
| '"' encaps_list '"' { $$ = $2; }
| '\'' encaps_list '\'' { $$ = $2; }
@@ -584,10 +623,28 @@ rw_cvar:
cvar { zend_do_end_variable_parse(BP_VAR_RW, 0 TSRMLS_CC); $$ = $1; }
;
r_cvar_without_static_member:
variable { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); $$ = $1; }
;
cvar:
cvar_without_objects { $$ = $1; }
| cvar_without_objects T_OBJECT_OPERATOR { zend_do_push_object(&$1 TSRMLS_CC); } ref_list { $$ = $4; }
variable { $$ = $1; }
| static_member {$$ = $1; }
;
static_member:
parse_class_entry variable { $$ = $2; zend_do_fetch_static_member(&$1 TSRMLS_CC); }
;
variable:
variable_property '(' { zend_do_begin_method_call(NULL, &$1 TSRMLS_CC); }
function_call_parameter_list ')' { zend_do_end_function_call(&$1, &$$, &$4, 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
| variable_property { $$ = $1; }
| cvar_without_objects { $$ = $1; }
;
variable_property:
variable T_OBJECT_OPERATOR { zend_do_push_object(&$1 TSRMLS_CC); } object_property { $$ = $4; }
;
@@ -614,19 +671,10 @@ dim_offset:
| expr { $$ = $1; }
;
ref_list:
object_property { $$ = $1; }
| ref_list T_OBJECT_OPERATOR { zend_do_push_object(&$1 TSRMLS_CC); } object_property { $$ = $4; }
;
object_property:
object_dim_list { $$ = $1; }
| cvar_without_objects { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); } { znode tmp_znode; zend_do_pop_object(&tmp_znode TSRMLS_CC); zend_do_fetch_property(&$$, &tmp_znode, &$1 TSRMLS_CC);}
| cvar_without_objects '(' { znode tmp_znode; zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_pop_object(&tmp_znode TSRMLS_CC); zend_do_begin_method_call(&tmp_znode, &$1 TSRMLS_CC); }
function_call_parameter_list ')' { zend_do_end_function_call(&$1, &$$, &$4, 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
| variable_name '(' { znode tmp_znode; zend_do_pop_object(&tmp_znode TSRMLS_CC); zend_do_begin_method_call(&tmp_znode, &$1 TSRMLS_CC); }
function_call_parameter_list ')' { zend_do_end_function_call(&$1, &$$, &$4, 0, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);}
;
object_dim_list:
+2 -19
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -21,27 +21,10 @@
#ifndef ZEND_SCANNER_H
#define ZEND_SCANNER_H
#ifdef __cplusplus
class ZendFlexLexer : public yyFlexLexer
{
public:
virtual ~ZendFlexLexer();
int lex_scan(zval *zendlval TSRMLS_DC);
void BeginState(int state);
};
#endif /* ZTS */
typedef struct _zend_lex_state {
#ifndef __cplusplus
YY_BUFFER_STATE buffer_state;
int state;
FILE *in;
#else
ZendFlexLexer *ZFL;
istream *input_file;
#endif
uint lineno;
char *filename;
} zend_lex_state;
+34 -170
View File
@@ -6,10 +6,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -19,6 +19,16 @@
+----------------------------------------------------------------------+
*/
#define yyleng SCNG(yy_leng)
#define yytext SCNG(yy_text)
#define yytext_ptr SCNG(yy_text)
#define yyin SCNG(yy_in)
#define yyout SCNG(yy_out)
#define yy_last_accepting_state SCNG(_yy_last_accepting_state)
#define yy_last_accepting_cpos SCNG(_yy_last_accepting_cpos)
#define yy_more_flag SCNG(_yy_more_flag)
#define yy_more_len SCNG(_yy_more_len)
%}
%x ST_IN_SCRIPTING
@@ -49,21 +59,6 @@
#include "zend_variables.h"
#include "zend_operators.h"
#ifdef __cplusplus
# include <fstream.h>
# ifdef HAVE_STDIOSTR_H
# include <stdiostr.h>
# endif
# ifdef HAVE_STDIOSTREAM_H
# include <stdiostream.h>
# endif
# ifdef ZEND_WIN32
# include <strstrea.h>
# else
# include <strstream.h>
# endif
#endif
#ifdef HAVE_STDARG_H
# include <stdarg.h>
#endif
@@ -72,11 +67,7 @@
# include <unistd.h>
#endif
#ifdef __cplusplus
#define YY_DECL int ZendFlexLexer::lex_scan(zval *zendlval TSRMLS_DC)
#else
#define YY_DECL int lex_scan(zval *zendlval TSRMLS_DC)
#endif
#define ECHO { ZEND_WRITE( yytext, yyleng ); }
@@ -149,13 +140,9 @@ END_EXTERN_C()
static inline void save_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
{
#ifndef __cplusplus
memcpy(&lex_state->buffer_state, &YY_CURRENT_BUFFER, sizeof(YY_BUFFER_STATE));
lex_state->in = yyin;
lex_state->in = SCNG(yy_in);
lex_state->state = YYSTATE;
#else
lex_state->ZFL = CG(ZFL);
#endif
lex_state->filename = zend_get_compiled_filename(TSRMLS_C);
lex_state->lineno = CG(zend_lineno);
}
@@ -163,7 +150,6 @@ static inline void save_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
static inline void restore_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
{
#ifndef __cplusplus
YY_BUFFER_STATE original_buffer_state = YY_CURRENT_BUFFER;
if (lex_state->buffer_state) {
@@ -173,12 +159,8 @@ static inline void restore_lexical_state(zend_lex_state *lex_state TSRMLS_DC)
}
yy_delete_buffer(original_buffer_state TSRMLS_CC);
yyin = lex_state->in;
SCNG(yy_in) = lex_state->in;
BEGIN(lex_state->state);
#else
delete((ZendFlexLexer *) CG(ZFL));
CG(ZFL) = lex_state->ZFL;
#endif
CG(zend_lineno) = lex_state->lineno;
zend_restore_compiled_filename(lex_state->filename TSRMLS_CC);
}
@@ -198,17 +180,6 @@ ZEND_API void zend_file_handle_dtor(zend_file_handle *fh)
* which doesn't really contain open files, but references to their names/paths
*/
break;
#ifdef __cplusplus
case ZEND_HANDLE_FSTREAM:
delete ((ifstream *) fh->handle.is);
break;
case ZEND_HANDLE_STDIOSTREAM:
istdiostream *pstdiostream = (istdiostream *) fh->handle.is;
fclose(pstdiostream->rdbuf()->stdiofile());
delete pstdiostream;
break;
#endif
}
if (fh->opened_path) {
efree(fh->opened_path);
@@ -228,12 +199,6 @@ int zend_compare_file_handles(zend_file_handle *fh1, zend_file_handle *fh2)
case ZEND_HANDLE_FP:
return fh1->handle.fp==fh2->handle.fp;
break;
#ifdef __cplusplus
case ZEND_HANDLE_FSTREAM:
case ZEND_HANDLE_STDIOSTREAM:
return fh1->handle.is==fh2->handle.is;
break;
#endif
}
return 0;
}
@@ -249,7 +214,6 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
{
char *file_path=NULL;
#ifndef __cplusplus
switch (file_handle->type) {
case ZEND_HANDLE_FILENAME:
file_handle->handle.fp = zend_fopen(file_handle->filename, &file_handle->opened_path);
@@ -270,49 +234,9 @@ ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
zend_llist_add_element(&CG(open_files), file_handle);
}
/* Reset the scanner for scanning the new file */
yyin = file_handle->handle.fp;
yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE TSRMLS_CC) TSRMLS_CC);
SCNG(yy_in) = file_handle->handle.fp;
yy_switch_to_buffer(yy_create_buffer(SCNG(yy_in), YY_BUF_SIZE TSRMLS_CC) TSRMLS_CC);
BEGIN(INITIAL);
#else
switch (file_handle->type) {
case ZEND_HANDLE_FD:
file_handle->handle.is = new ifstream(file_handle->handle.fd);
file_handle->type = ZEND_HANDLE_FSTREAM;
break;
case ZEND_HANDLE_FILENAME:
{
file_handle->handle.fp = zend_fopen(file_handle->filename, &file_handle->opened_path);
if (!file_handle->handle.fp) {
return FAILURE;
}
file_handle->handle.is = new istdiostream(file_handle->handle.fp);
file_handle->type = ZEND_HANDLE_STDIOSTREAM;
break;
}
case ZEND_HANDLE_FP:
if (file_handle->handle.fp==stdin) {
file_handle->handle.is = &cin;
} else {
if (!file_handle->handle.fp) {
return FAILURE;
}
file_handle->handle.is = new istdiostream(file_handle->handle.fp);
file_handle->type = ZEND_HANDLE_STDIOSTREAM;
}
break;
}
if (file_handle->handle.is->fail()) {
delete file_handle->handle.is;
return FAILURE;
}
if (file_handle->handle.is != &cin) {
zend_llist_add_element(&CG(open_files), file_handle);
}
CG(ZFL) = new ZendFlexLexer;
CG(ZFL)->switch_streams(file_handle->handle.is, &cout);
#endif
if (file_handle->opened_path) {
file_path = file_handle->opened_path;
@@ -418,28 +342,19 @@ zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC)
return retval;
}
#ifndef __cplusplus
static inline int prepare_string_for_scanning(zval *str, char *filename TSRMLS_DC)
#else
static inline int prepare_string_for_scanning(zval *str, istrstream **input_stream, char *filename TSRMLS_DC)
#endif
{
#ifndef __cplusplus
/* enforce two trailing NULLs for flex... */
STR_REALLOC(str->value.str.val, str->value.str.len+2);
str->value.str.val[str->value.str.len+1]=0;
yyin=NULL;
SCNG(yy_in)=NULL;
yy_scan_buffer(str->value.str.val, str->value.str.len+2 TSRMLS_CC);
#else
*input_stream = new istrstream(str->value.str.val, str->value.str.len);
CG(ZFL) = new ZendFlexLexer;
CG(ZFL)->switch_streams(*input_stream, &cout);
#endif
zend_set_compiled_filename(filename TSRMLS_CC);
CG(zend_lineno) = 1;
CG(increment_lineno) = 0;
return SUCCESS;
}
@@ -453,9 +368,6 @@ zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC)
zval tmp;
int compiler_result;
zend_bool original_in_compilation = CG(in_compilation);
#ifdef __cplusplus
istrstream *input_stream;
#endif
if (source_string->value.str.len==0) {
efree(op_array);
@@ -470,21 +382,13 @@ zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC)
source_string = &tmp;
save_lexical_state(&original_lex_state TSRMLS_CC);
#ifndef __cplusplus
if (prepare_string_for_scanning(source_string, filename TSRMLS_CC)==FAILURE) {
#else
if (prepare_string_for_scanning(source_string, &input_stream, filename TSRMLS_CC)==FAILURE) {
#endif
efree(op_array);
retval = NULL;
} else {
init_op_array(op_array, ZEND_EVAL_CODE, INITIAL_OP_ARRAY_SIZE TSRMLS_CC);
CG(active_op_array) = op_array;
#ifndef __cplusplus
BEGIN(ST_IN_SCRIPTING);
#else
CG(ZFL)->BeginState(ST_IN_SCRIPTING);
#endif
compiler_result = zendparse(TSRMLS_C);
if (compiler_result==1) {
@@ -499,9 +403,6 @@ zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC)
}
restore_lexical_state(&original_lex_state TSRMLS_CC);
}
#ifdef __cplusplus
delete input_stream;
#endif
zval_dtor(&tmp);
CG(in_compilation) = original_in_compilation;
return retval;
@@ -533,73 +434,20 @@ int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_
{
zend_lex_state original_lex_state;
zval tmp = *str;
#ifdef __cplusplus
istrstream *input_stream;
#endif
str = &tmp;
zval_copy_ctor(str);
save_lexical_state(&original_lex_state TSRMLS_CC);
#ifndef __cplusplus
if (prepare_string_for_scanning(str, str_name TSRMLS_CC)==FAILURE) {
#else
if (prepare_string_for_scanning(str, &input_stream, str_name TSRMLS_CC)==FAILURE) {
#endif
return FAILURE;
}
zend_highlight(syntax_highlighter_ini TSRMLS_CC);
restore_lexical_state(&original_lex_state TSRMLS_CC);
#ifdef __cplusplus
delete input_stream;
#endif
zval_dtor(str);
return SUCCESS;
}
END_EXTERN_C()
#ifdef __cplusplus
BEGIN_EXTERN_C()
int lex_scan(zval *zendlval TSRMLS_DC)
{
return CG(ZFL)->lex_scan(zendlval TSRMLS_CC);
}
const char *zend_get_zendtext(TSRMLS_D)
{
return CG(ZFL)->YYText();
}
int zend_get_zendleng(TSRMLS_D)
{
return CG(ZFL)->YYLeng();
}
END_EXTERN_C()
void ZendFlexLexer::BeginState(int state)
{
BEGIN(state);
}
ZendFlexLexer::~ZendFlexLexer()
{
if (yy_start_stack) {
yy_flex_free(yy_start_stack);
}
}
int yyFlexLexer::yylex()
{
fprintf(stderr, "Error: yyFlexLexer::yylex() called\n");
return -1;
}
#endif
%}
LNUM [0-9]+
@@ -643,6 +491,18 @@ NEWLINE ("\r"|"\n"|"\r\n")
return T_RETURN;
}
<ST_IN_SCRIPTING>"try" {
return T_TRY;
}
<ST_IN_SCRIPTING>"catch" {
return T_CATCH;
}
<ST_IN_SCRIPTING>"throw" {
return T_THROW;
}
<ST_IN_SCRIPTING>"if" {
return T_IF;
}
@@ -731,6 +591,10 @@ NEWLINE ("\r"|"\n"|"\r\n")
return T_PRINT;
}
<ST_IN_SCRIPTING>"namespace" {
return T_NAMESPACE;
}
<ST_IN_SCRIPTING>"class" {
return T_CLASS;
}
+2 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
+2 -6
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -58,10 +58,6 @@ typedef struct _zend_rsrc_list_dtors_entry {
ZEND_API int zend_register_list_destructors(void (*ld)(void *), void (*pld)(void *), int module_number);
ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, char *type_name, int module_number);
enum list_entry_type {
LE_DB=1000
};
void list_entry_destructor(void *ptr);
void plist_entry_destructor(void *ptr);
+46 -35
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -20,13 +20,15 @@
#include "zend.h"
#include "zend_llist.h"
#include "zend_qsort.h"
ZEND_API void zend_llist_init(zend_llist *l, size_t size, llist_dtor_func_t dtor, unsigned char persistent)
{
l->head = NULL;
l->tail = NULL;
l->size = size;
l->dtor = dtor;
l->head = NULL;
l->tail = NULL;
l->count = 0;
l->size = size;
l->dtor = dtor;
l->persistent = persistent;
}
@@ -44,6 +46,8 @@ ZEND_API void zend_llist_add_element(zend_llist *l, void *element)
}
l->tail = tmp;
memcpy(tmp->data, element, l->size);
++l->count;
}
@@ -60,36 +64,41 @@ ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element)
}
l->head = tmp;
memcpy(tmp->data, element, l->size);
++l->count;
}
#define DEL_LLIST_ELEMENT(current, l) \
if (current->prev) {\
current->prev->next = current->next;\
if ((current)->prev) {\
(current)->prev->next = (current)->next;\
} else {\
l->head = current->next;\
(l)->head = (current)->next;\
}\
if (current->next) {\
current->next->prev = current->prev;\
if ((current)->next) {\
(current)->next->prev = (current)->prev;\
} else {\
l->tail = current->prev;\
(l)->tail = (current)->prev;\
}\
if (l->dtor) {\
l->dtor(current->data);\
pefree(current, l->persistent);\
}
if ((l)->dtor) {\
(l)->dtor((current)->data);\
pefree((current), (l)->persistent);\
}\
--l->count;
ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int (*compare)(void *element1, void *element2))
{
zend_llist_element *current=l->head;
zend_llist_element *next;
while (current) {
next = current->next;
if (compare(current->data, element)) {
DEL_LLIST_ELEMENT(current, l);
break;
}
current = current->next;
current = next;
}
}
@@ -106,6 +115,8 @@ ZEND_API void zend_llist_destroy(zend_llist *l)
pefree(current, l->persistent);
current = next;
}
l->count = 0;
}
@@ -116,17 +127,27 @@ ZEND_API void zend_llist_clean(zend_llist *l)
}
ZEND_API void zend_llist_remove_tail(zend_llist *l)
ZEND_API void *zend_llist_remove_tail(zend_llist *l)
{
zend_llist_element *old_tail;
void *data;
if ((old_tail = l->tail)) {
if (l->tail->prev) {
l->tail->prev->next = NULL;
}
data = old_tail->data;
l->tail = l->tail->prev;
pefree(old_tail, l->persistent);
--l->count;
return data;
}
return NULL;
}
@@ -167,22 +188,18 @@ ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func TSRMLS_DC)
}
}
ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func)
ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func TSRMLS_DC)
{
int list_size=0, i;
size_t i;
zend_llist_element **elements;
zend_llist_element *element, **ptr;
for (element=l->head; element; element=element->next) {
list_size++;
}
if (list_size == 0) {
if (l->count <= 0) {
return;
}
elements = (zend_llist_element **) emalloc(list_size*sizeof(zend_llist_element *));
elements = (zend_llist_element **) emalloc(l->count * sizeof(zend_llist_element *));
ptr = &elements[0];
@@ -190,12 +207,12 @@ ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func)
*ptr++ = element;
}
qsort(elements, list_size, sizeof(zend_llist_element *), (int (*)(const void *, const void *)) comp_func);
zend_qsort(elements, l->count, sizeof(zend_llist_element *), (compare_func_t) comp_func TSRMLS_CC);
l->head = elements[0];
elements[0]->prev = NULL;
for (i=1; i<list_size; i++) {
for (i = 1; i < l->count; i++) {
elements[i]->prev = elements[i-1];
elements[i-1]->next = elements[i];
}
@@ -230,13 +247,7 @@ ZEND_API void zend_llist_apply_with_arguments(zend_llist *l, llist_apply_with_ar
ZEND_API int zend_llist_count(zend_llist *l)
{
zend_llist_element *element;
int element_count=0;
for (element=l->head; element; element=element->next) {
element_count++;
}
return element_count;
return l->count;
}
+6 -5
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -30,7 +30,7 @@ typedef struct _zend_llist_element {
} zend_llist_element;
typedef void (*llist_dtor_func_t)(void *);
typedef int (*llist_compare_func_t)(const zend_llist_element *, const zend_llist_element *);
typedef int (*llist_compare_func_t)(const zend_llist_element *, const zend_llist_element * TSRMLS_DC);
typedef void (*llist_apply_with_args_func_t)(void *data, int num_args, va_list args TSRMLS_DC);
typedef void (*llist_apply_with_arg_func_t)(void *data, void *arg TSRMLS_DC);
typedef void (*llist_apply_func_t)(void * TSRMLS_DC);
@@ -38,6 +38,7 @@ typedef void (*llist_apply_func_t)(void * TSRMLS_DC);
typedef struct _zend_llist {
zend_llist_element *head;
zend_llist_element *tail;
size_t count;
size_t size;
llist_dtor_func_t dtor;
unsigned char persistent;
@@ -53,14 +54,14 @@ ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element);
ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int (*compare)(void *element1, void *element2));
ZEND_API void zend_llist_destroy(zend_llist *l);
ZEND_API void zend_llist_clean(zend_llist *l);
ZEND_API void zend_llist_remove_tail(zend_llist *l);
ZEND_API void *zend_llist_remove_tail(zend_llist *l);
ZEND_API void zend_llist_copy(zend_llist *dst, zend_llist *src);
ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func TSRMLS_DC);
ZEND_API void zend_llist_apply_with_del(zend_llist *l, int (*func)(void *data));
ZEND_API void zend_llist_apply_with_argument(zend_llist *l, llist_apply_with_arg_func_t func, void *arg TSRMLS_DC);
ZEND_API void zend_llist_apply_with_arguments(zend_llist *l, llist_apply_with_args_func_t func TSRMLS_DC, int num_args, ...);
ZEND_API int zend_llist_count(zend_llist *l);
ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func);
ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func TSRMLS_DC);
/* traversal */
ZEND_API void *zend_llist_get_first_ex(zend_llist *l, zend_llist_position *pos);
+13 -7
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -36,24 +36,32 @@ ZEND_API extern unsigned char first_arg_force_ref[];
ZEND_API extern unsigned char second_arg_force_ref[];
ZEND_API extern unsigned char third_arg_force_ref[];
#define ZEND_MODULE_API_NO 20001222
#define ZEND_MODULE_API_NO 20010927
#ifdef ZTS
#define USING_ZTS 1
#else
#define USING_ZTS 0
#endif
#define STANDARD_MODULE_PROPERTIES_EX 0, 0, 0, NULL, 0, ZEND_DEBUG, USING_ZTS, ZEND_MODULE_API_NO
#define STANDARD_MODULE_HEADER sizeof(zend_module_entry), ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS
#define STANDARD_MODULE_PROPERTIES_EX 0, 0, 0, NULL, 0
#define STANDARD_MODULE_PROPERTIES \
NULL, NULL, STANDARD_MODULE_PROPERTIES_EX
#define NO_VERSION_YET NULL
#define MODULE_PERSISTENT 1
#define MODULE_TEMPORARY 2
typedef struct _zend_module_entry zend_module_entry;
struct _zend_module_entry {
unsigned short size;
unsigned int zend_api;
unsigned char zend_debug;
unsigned char zts;
char *name;
zend_function_entry *functions;
int (*module_startup_func)(INIT_FUNC_ARGS);
@@ -61,6 +69,7 @@ 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);
char *version;
int (*global_startup_func)(void);
int (*global_shutdown_func)(void);
int globals_id;
@@ -68,9 +77,6 @@ struct _zend_module_entry {
unsigned char type;
void *handle;
int module_number;
unsigned char zend_debug;
unsigned char zts;
unsigned int zend_api;
};
+24 -2
View File
@@ -9,7 +9,8 @@ static zend_object_handlers zoh = {
NULL,
zend_objects_add_ref,
zend_objects_del_ref,
zend_objects_delete_obj
zend_objects_delete_obj,
zend_objects_clone_obj
};
void zend_objects_init(zend_objects *objects, zend_uint init_size)
@@ -50,7 +51,7 @@ zend_object_value zend_objects_new(zend_object **object, zend_class_entry *class
(*object)->ce = class_type;
retval.handle = handle;
retval.handlers = zoh;
retval.handlers = &zoh;
#if ZEND_DEBUG_OBJECTS
fprintf(stderr, "Allocated object id #%d\n", handle);
#endif
@@ -125,3 +126,24 @@ void zend_objects_del_ref(zend_object_handle handle)
}
#endif
}
zend_object_value zend_objects_clone_obj(zend_object_handle handle)
{
zend_object_value retval;
zend_object *old_object;
zend_object *new_object;
TSRMLS_FETCH();
if (!EG(objects).object_buckets[handle].valid) {
zend_error(E_ERROR, "Trying to clone invalid object");
}
old_object = &EG(objects).object_buckets[handle].bucket.obj.object;
retval = zend_objects_new(&new_object, old_object->ce);
ALLOC_HASHTABLE(new_object->properties);
zend_hash_init(new_object->properties, 0, NULL, ZVAL_PTR_DTOR, 0);
zend_hash_copy(new_object->properties, old_object->properties, (copy_ctor_func_t) zval_add_ref, (void *) NULL /* Not used anymore */, sizeof(zval *));
return retval;
}
+2 -1
View File
@@ -30,5 +30,6 @@ zend_object *zend_objects_get_address(zend_object_handle handle);
void zend_objects_add_ref(zend_object_handle handle);
void zend_objects_del_ref(zend_object_handle handle);
void zend_objects_delete_obj(zend_object_handle handle);
zend_object_value zend_objects_clone_obj(zend_object_handle handle);
#endif /* ZEND_OBJECTS_H */
#endif /* ZEND_OBJECTS_H */
+10 -2
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -117,12 +117,20 @@ ZEND_API void destroy_zend_class(zend_class_entry *ce)
efree(ce->refcount);
zend_hash_destroy(&ce->function_table);
zend_hash_destroy(&ce->default_properties);
zend_hash_destroy(ce->static_members);
efree(ce->static_members);
zend_hash_destroy(&ce->constants_table);
zend_hash_destroy(&ce->class_table);
break;
case ZEND_INTERNAL_CLASS:
free(ce->name);
free(ce->refcount);
zend_hash_destroy(&ce->function_table);
zend_hash_destroy(&ce->default_properties);
zend_hash_destroy(ce->static_members);
free(ce->static_members);
zend_hash_destroy(&ce->constants_table);
zend_hash_destroy(&ce->class_table);
break;
}
}
+42 -9
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -514,10 +514,19 @@ ZEND_API void convert_to_array(zval *op)
case IS_ARRAY:
return;
break;
/* OBJECTS_FIXME */
/* OBJECTS_OPTIMIZE */
case IS_OBJECT:
op->type = IS_ARRAY;
op->value.ht = Z_OBJPROP_P(op);
{
zval *tmp;
HashTable *ht;
ALLOC_HASHTABLE(ht);
zend_hash_init(ht, 0, NULL, ZVAL_PTR_DTOR, 0);
zend_hash_copy(ht, Z_OBJPROP_P(op), (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
zval_dtor(op);
op->type = IS_ARRAY;
op->value.ht = ht;
}
return;
case IS_NULL:
ALLOC_HASHTABLE(op->value.ht);
@@ -1005,7 +1014,11 @@ ZEND_API int add_char_to_string(zval *result, zval *op1, zval *op2)
ZEND_API int add_string_to_string(zval *result, zval *op1, zval *op2)
{
int length = op1->value.str.len + op2->value.str.len;
result->value.str.val = (char *) erealloc(op1->value.str.val, length+1);
if (op1->value.str.val == empty_string) {
result->value.str.val = (char *) emalloc(length+1);
} else {
result->value.str.val = (char *) erealloc(op1->value.str.val, length+1);
}
memcpy(result->value.str.val+op1->value.str.len, op2->value.str.val, op2->value.str.len);
result->value.str.val[length] = 0;
result->value.str.len = length;
@@ -1240,7 +1253,6 @@ ZEND_API int is_identical_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
}
break;
case IS_OBJECT:
/* OBJECTS_FIXME */
if (Z_OBJCE_P(op1) != Z_OBJCE_P(op2)) {
result->value.lval = 0;
} else {
@@ -1442,7 +1454,13 @@ ZEND_API int increment_function(zval *op1)
{
switch (op1->type) {
case IS_LONG:
if(op1->value.lval == LONG_MAX) {
/* switch to double */
double d = (double)op1->value.lval;
ZVAL_DOUBLE(op1, d+1);
} else {
op1->value.lval++;
}
break;
case IS_DOUBLE:
op1->value.dval = op1->value.dval + 1;
@@ -1458,8 +1476,14 @@ ZEND_API int increment_function(zval *op1)
switch (is_numeric_string(strval, op1->value.str.len, &lval, &dval, 0)) {
case IS_LONG:
if(lval == LONG_MAX) {
/* switch to double */
double d = (double)lval;
ZVAL_DOUBLE(op1, d+1);
} else {
op1->value.lval = lval+1;
op1->type = IS_LONG;
}
efree(strval);
break;
case IS_DOUBLE:
@@ -1491,21 +1515,31 @@ ZEND_API int decrement_function(zval *op1)
switch (op1->type) {
case IS_LONG:
if(op1->value.lval == LONG_MIN) {
double d = (double)op1->value.lval;
ZVAL_DOUBLE(op1, d-1);
} else {
op1->value.lval--;
}
break;
case IS_DOUBLE:
op1->value.dval = op1->value.dval - 1;
break;
case IS_STRING: /* Like perl we only support string increment */
if (op1->value.str.len==0) { /* consider as 0 */
if (op1->value.str.len == 0) { /* consider as 0 */
STR_FREE(op1->value.str.val);
op1->value.lval = -1;
op1->type = IS_LONG;
break;
} else if (is_numeric_string(op1->value.str.val, op1->value.str.len, &lval, NULL, 0)==IS_LONG) { /* long */
STR_FREE(op1->value.str.val);
if(lval == LONG_MIN) {
double d = (double)lval;
ZVAL_DOUBLE(op1, d-1);
} else {
op1->value.lval = lval-1;
op1->type = IS_LONG;
}
break;
}
break;
@@ -1695,7 +1729,6 @@ ZEND_API void zend_compare_arrays(zval *result, zval *a1, zval *a2 TSRMLS_DC)
ZEND_API void zend_compare_objects(zval *result, zval *o1, zval *o2 TSRMLS_DC)
{
/* OBJECTS_FIXME */
if (Z_OBJCE_P(o1) != Z_OBJCE_P(o2)) {
result->value.lval = 1; /* Comparing objects of different types is pretty much meaningless */
result->type = IS_LONG;
+3 -3
View File
@@ -4,10 +4,10 @@
+----------------------------------------------------------------------+
| Copyright (c) 1998-2001 Zend Technologies Ltd. (http://www.zend.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 0.92 of the Zend license, |
| This source file is subject to version 2.00 of the Zend license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.zend.com/license/0_92.txt. |
| http://www.zend.com/license/2_00.txt. |
| If you did not receive a copy of the Zend license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@zend.com so we can mail you a copy immediately. |
@@ -232,7 +232,7 @@ ZEND_API int zend_atoi(const char *str, int str_len);
#define Z_STRVAL(zval) (zval).value.str.val
#define Z_STRLEN(zval) (zval).value.str.len
#define Z_ARRVAL(zval) (zval).value.ht
#define Z_OBJ(zval) (zval).value.obj.handlers.get_address((zval).value.obj.handle)
#define Z_OBJ(zval) (zval).value.obj.handlers->get_address((zval).value.obj.handle)
#define Z_OBJPROP(zval) Z_OBJ(zval)->properties
#define Z_OBJCE(zval) Z_OBJ(zval)->ce
#define Z_RESVAL(zval) (zval).value.lval
Loaded 100 of 1740 files, more files were not shown because too many files have changed in this diff. Show more