Compare commits

...
2730 Commits
Author SHA1 Message Date
SVN Migration 9fe7a6f10c This commit was manufactured by cvs2svn to create tag 'RELEASE_0_5'. 2003-04-17 03:19:34 +00:00
Wez Furlong f7dbd9d909 Prep for release. 2003-04-17 03:19:33 +00:00
Wez Furlong 1c3b2a28d1 Update TODO and example.
Hide phpize crap from CVS
2003-04-17 03:15:13 +00:00
Wez Furlong c73e304dc2 Implement a php function so that the following SQL can be used:
SELECT php('md5', sql) from sqlite_master

The php function has takes the name of a php function to call as the first
parameter; each additional parameter is passed on to the function, much like
call_user_func().

You can call both built-in and script-defined functions in this way.
2003-04-17 03:14:14 +00:00
foobar 2cd55ce73b touch 2003-04-17 02:54:23 +00:00
foobar b319982868 add missing header 2003-04-17 02:53:32 +00:00
foobar 85874549d6 touch 2003-04-17 02:45:10 +00:00
Wez Furlong 5e0b9bb451 Implement sqlite_escape_string() function. 2003-04-17 02:20:26 +00:00
Wez Furlong 2d14d8b520 Implement safe_mode and open_basedir checks.
Add package.xml
2003-04-17 01:57:55 +00:00
Wez Furlong cc5903adb4 Add readme and todo 2003-04-17 01:37:42 +00:00
Wez Furlong 25954d1d72 This commit was generated by cvs2svn to compensate for changes in r123706,
which included commits to RCS files with non-trunk default branches.
2003-04-17 01:29:45 +00:00
Sara Golemon 0c366c24e5 Macro: php_stream_get_from_zval(php_stream *stream, zval **zstream, char *mode, int options, char **opened_path, php_stream_context *context) Z_TYPE_PP(zstream) can be either IS_RESOURCE (An already opened stream) or IS_STRING (a path to a stream to be opened) 2003-04-17 00:00:34 +00:00
Ilia Alshanetsky f7d72d178d Fixed bug #23232 (safe_mode does not honor PHP_AUTH_* in apache2) 2003-04-16 23:31:23 +00:00
Moriyoshi Koizumi 0c5548e636 Fixed implicit cast issue with is*() and to*() functions 2003-04-16 21:40:48 +00:00
Moriyoshi Koizumi 0ad2fc2007 Fixed bug #19795
# to*() and is*() expect for their arguments an integer in range of 0 - 255
2003-04-16 21:10:29 +00:00
Moriyoshi Koizumi ccbec3e56c Fixed typo 2003-04-16 20:00:46 +00:00
Moriyoshi Koizumi 8e15c4daff compiler warning fix and possible 64bit fix 2003-04-16 19:18:35 +00:00
Moriyoshi Koizumi ec91e86850 Fixed bug #23080 2003-04-16 17:31:31 +00:00
Marcus Boerger b09aa87120 Don't access what is already freed (noticed by Sascha) 2003-04-16 17:30:03 +00:00
Moriyoshi Koizumi 2a31fa0569 Fixed memleak 2003-04-16 15:10:01 +00:00
Moriyoshi Koizumi 6dd17c380d Added missing sanity check 2003-04-16 14:55:25 +00:00
Moriyoshi Koizumi 49b43ad115 Changed stream filter factory to be capable of accepting a zval as a parameter
instead of a string
2003-04-16 14:30:25 +00:00
Sascha Schumann 8e165ea050 fix two uninitialized reads 2003-04-16 13:43:23 +00:00
Sascha Schumann 4ff425c157 Nuke all sn?printf's and rely on the optimized httpd_ntoa to
convert the IP to a string representation.
2003-04-16 13:37:34 +00:00
Sascha Schumann bb50c3846f Fix uninitialized reads
==32323== Conditional jump or move depends on uninitialised value(s)
==32323==    at 0x80F5A5C: zend_ini_color_displayer_cb (/home/sas/src/php4/Zend/zend_ini.c:374)
==32323==    by 0x80C5B7F: php_ini_displayer_cb (/home/sas/src/php4/main/php_ini.c:60)
==32323==    by 0x80C5D15: php_ini_displayer (/home/sas/src/php4/main/php_ini.c:115)
==32323==    by 0x80F0168: zend_hash_apply_with_argument (/home/sas/src/php4/Zend/zend_hash.c:707)
2003-04-16 12:44:08 +00:00
Jan Lehnardt 09790f8f53 - allow libtool to be a symlink. Discussed with Sascha 2003-04-16 11:59:49 +00:00
Sascha Schumann cd403e3b51 Merging some Premium thttpd improvements, notably
- periodic update of date strings
- caching of Last-Modified values
- use of smart_str'ings for crafting HTTP header (static files)
  and inside make_log_entry
- buffered log writing
- httpd_ntoa is about 8 times faster

Overall improvement: Around 50% faster now
2003-04-16 09:20:55 +00:00
Sascha Schumann 0bda867fe7 Simplify use of this header in external apps 2003-04-16 09:14:32 +00:00
Marcus Boerger 8363658641 Change to use safe_emalloc() and provide macro for now 2003-04-16 06:10:41 +00:00
Sascha Schumann baa54b3b80 add missing check 2003-04-16 05:22:04 +00:00
foobar 2170ea8b4d Added missing CVS Id tags 2003-04-16 02:34:57 +00:00
foobar b02dd10e03 SKIP -> SKIPIF 2003-04-16 02:21:30 +00:00
Ilia Alshanetsky 7f8bd25fcc Fixed bug #23225 (money_format() didn't handle erroneous return of strfmon)
# Initial patch proposed by marcot@tabini.ca
2003-04-16 01:07:03 +00:00
Ilia Alshanetsky 56e44a4fc2 Fixed bug #22939 (crash in imap_header_info()). 2003-04-16 00:58:30 +00:00
Ilia Alshanetsky 7d2b4cab36 Cleaner error handling. 2003-04-15 01:48:02 +00:00
Ilia Alshanetsky f1bd3d539f Fixed bug #23187 (memory leaks in sybase_connect/sybase_pconnect).
Intial patch by: fukusaka@xa2.so-net.ne.jp
2003-04-15 00:59:42 +00:00
Marcus Boerger da540a4d3b Fixed Bug #23188 CDB databases created with 'c' mode do not work. 2003-04-14 21:50:48 +00:00
Ilia Alshanetsky 3d6fccc08c Fixed bug #23152 ($http_response_header empty on invalid URLs) 2003-04-14 13:55:34 +00:00
Jesus M. Castagnetto 9b91242e24 Fixing bug #23060 2003-04-14 11:50:42 +00:00
foobar bfccea6853 style 2003-04-14 01:48:53 +00:00
Sara Golemon 9103aac254 Modify str_replace/str_ireplace to report how many needles were matched. (FR #8218) 2003-04-13 22:59:19 +00:00
Marcus Boerger 75c8f37c03 Make it static 2003-04-13 20:30:57 +00:00
Sascha Schumann d2afc64fed don't remove config.nice directly, so that we don't lose it on
inferior systems like windows.
2003-04-13 20:13:06 +00:00
Marcus Boerger 887d5ec9c1 Speling 2003-04-13 20:12:54 +00:00
Sascha Schumann 887dfeefec cygwin ships with bison 1.875b, so we need to remove that b here 2003-04-13 20:09:32 +00:00
Marcus Boerger 268ffda27d Reenable dba_popen() 2003-04-13 19:50:28 +00:00
Marcus Boerger bff63db577 Fix persistent stream closing (that one took me at least 3 days) 2003-04-13 19:47:55 +00:00
Sergey Kartashoff b296a3bd64 - Udm_Make_Excerpt has been fixed to be compatible with mnogosearch-3.2.10+ 2003-04-13 17:52:25 +00:00
Moriyoshi Koizumi 9b87fe9702 Moved a controversial entry to the proper place
# maybe it's time to replace output buffering facility with the streams?
2003-04-12 22:29:00 +00:00
Moriyoshi Koizumi 4057c0cc7d NFN 2003-04-12 22:02:26 +00:00
Moriyoshi Koizumi 560efa10c0 Forgot about this one :) 2003-04-12 21:56:08 +00:00
Moriyoshi Koizumi fa0ac8a273 Made dirname() binary-safe. 2003-04-12 21:53:46 +00:00
Moriyoshi Koizumi 9e46bdd0b2 strip_tags() is also binary-safe now. 2003-04-12 21:29:49 +00:00
Sara Golemon 87f9ed0a6f Scratch off done TODOs 2003-04-12 20:09:26 +00:00
Sara Golemon 76965beb04 Add tests for strrpos/stripos, and minor fix to maintain BC for condition with empty needles/haystacks 2003-04-12 20:04:06 +00:00
Sara Golemon 0b5c1112c5 Rewrite strrpos and strripos to be binary safe and behave the way their prototype suggests (also like their counterparts strpos and stripos) i.e.: Allow string needles rather than just characters 2003-04-12 07:36:22 +00:00
Sebastian Bergmann dccdb2f549 Fix warnings. 2003-04-11 17:30:42 +00:00
Wez Furlong 2090d23f02 Fix for #23069 (Windows sets readonly mode for temporary files in tempnam) 2003-04-11 11:08:44 +00:00
Derick Rethans a802e0d6b3 - Fixed protos 2003-04-11 09:53:01 +00:00
Hartmut Holzgraefe e06fdaae8b accept possible leaks for now to make SELECTS with both bound parameters
and results again ...
2003-04-11 04:41:52 +00:00
Hartmut Holzgraefe a1ff81d277 proto fix 2003-04-11 04:30:29 +00:00
Hartmut Holzgraefe 2f26d2b693 parameter count for bind stuff is different in OO interface 2003-04-11 04:29:28 +00:00
Sara Golemon 8da5e8e48e Export constants to userland 2003-04-11 02:55:00 +00:00
Ilia Alshanetsky 4fbd27252d Fixed integer overflow inside mhash_keygen_s2k(). 2003-04-11 02:40:21 +00:00
Sterling Hughes c013f78274 satisfy andi's switch fetish ;-) 2003-04-10 20:08:02 +00:00
Sebastian Bergmann 974f406eda Fix ZTS build. Fix warning. 2003-04-10 17:02:31 +00:00
Sebastian Bergmann 668fc20b97 Document 'const' keyword. 2003-04-10 16:54:46 +00:00
Sterling Hughes 0191ba5de1 allow expressions within constants, so the following is possible
class foo {
	const a = 1<<0;
	const b = 1<<1;
	const c = a | b;
}

this makes const a compile-time expression.  all other operators are
unaffected.
2003-04-10 15:43:47 +00:00
Christian Stocker aa09b09e1a - More TSRMLS stuff.
- Fixed memleaks in domxml_doc_add_root, domxml_xslt_stylesheet
  and domxml_xslt_stylesheet_doc
- Completed implementation of domxml_doc_imported_node.
2003-04-10 12:45:38 +00:00
Stanislav Malyshev 6f08d5e759 Make Apache 2 define SG(request_info).path_translated like Apache 1 did. 2003-04-10 11:33:45 +00:00
Stanislav Malyshev 2849872f19 make Apache define SG(request_info).path_translted, like Apache 1 did. 2003-04-10 11:28:54 +00:00
Zeev Suraski 65f06d8027 Revert Harald's commit 2003-04-10 04:43:42 +00:00
Ilia Alshanetsky 8a9ff734a0 Fixed a crash in the query tracer output due to buffer overflow.
Fixed a crash in notice message for unbuffered query.
2003-04-10 04:35:39 +00:00
George Schlossnagle dd090f4a77 One line fix so that it will compile 2003-04-10 03:11:27 +00:00
Harald Radi 07e775bcde removing the *syntactical sugar* again
# commiting that on behalf of the community :)
# don't blame me, i'm just acting as a proxy
2003-04-09 20:23:06 +00:00
Marcus Boerger 1cdd29eeef Fix ZTS build and warnings 2003-04-09 19:14:44 +00:00
Rasmus Lerdorf 861679d6c3 MFB: Forgotten _FORM -> _REQUEST change 2003-04-09 17:46:42 +00:00
Derick Rethans 429ae4e821 - Fixed printing the version string if it includes zend extensions in
text-mode
2003-04-09 15:19:07 +00:00
Edin Kadribasic 45d27aab68 *** empty log message *** 2003-04-09 12:03:58 +00:00
Christian Stocker 6f9d53e02d - Fixed some memleaks when using attributes
- Added attrnode->set_value()
(by Rob Richards)
2003-04-09 07:29:39 +00:00
Ilia Alshanetsky 7029ef01b3 Added missing bit from gd2.0.12 sync. 2003-04-09 01:55:48 +00:00
Marcus Boerger bb0f885d51 Hopefully last fix on error reporting 2003-04-09 00:38:19 +00:00
Sara Golemon 87c5019dd2 Switch file_put_contents 'bool use_include_path' to 'int flags' to allow other options such as appending 2003-04-08 23:24:53 +00:00
Sara Golemon 41d4fcd0da Add context support to file_put_contents() and readfile(), convert readfile() to zend_parse_parameters usage, fix proto for file_put_contents() 2003-04-08 22:10:15 +00:00
Sara Golemon 1e853b74a3 Added context support to file() 2003-04-08 21:00:07 +00:00
Christian Stocker 7467ad8c47 domdocument->free() was MFHd to PHP_4_3 branch. 2003-04-08 19:43:56 +00:00
Christian Stocker 7a14e6358a fixes memleaks in element->get_elements_by_tagname & document->get_elements_by_tagname 2003-04-08 19:30:27 +00:00
Christian Stocker 00a18c470d NEWS entry fixes for domxml (more readable hopefully...) 2003-04-08 18:44:31 +00:00
Andrei Zmievski 591863d4b0 Switch some functions to use new zend_lookup_ns_class() methods. This
means that they will accept both simple and fully qualified class names.
2003-04-08 18:22:32 +00:00
Andrei Zmievski e5f4c783bc Rename zend_register_internal_class_in_ns() to a better, less filling,
but with the same great taste zend_register_internal_ns_class().
2003-04-08 17:40:56 +00:00
Christian Stocker b99146a5c7 make it possible to free DomHtmlDocuments as well 2003-04-08 17:22:19 +00:00
Andrei Zmievski b18542ba68 Remove php_memnstr (it's in ZE now). 2003-04-08 17:15:43 +00:00
Andrei Zmievski 3b47a64269 Add zend_lookup_ns_class() function. 2003-04-08 17:10:01 +00:00
Andrei Zmievski 2154cddd0e Move memnstr into Zend and make an alias for BC in PHP. 2003-04-08 15:04:26 +00:00
Christian Stocker 50f5fcb0fe make it compile .... 2003-04-08 14:29:15 +00:00
foobar a45b4258f0 file_set_contents -> file_put_contents 2003-04-08 14:12:52 +00:00
Christian Stocker 2c3dc13027 - Fixes a bunch of memleaks, especially with attributes (by Rob Richards and me)
- Added domdocument->free() for freeing documents during script-time
#will later merge to PHP_4_3
2003-04-08 13:19:49 +00:00
Tal Peer 487b190a41 FriBidi was moved to PECL long time ago 2003-04-08 11:35:23 +00:00
Sebastian Bergmann 11f53cd111 Fix Win32 build. 2003-04-08 07:36:58 +00:00
bf554c279f ChangeLog update 2003-04-08 00:31:01 +00:00
Ilia Alshanetsky b2e521a178 Fixed bug #23102 (integer overflow in exif_iif_add_value()). 2003-04-08 00:18:57 +00:00
Sara Golemon 8001f2922c Add context support to file_get_contents 2003-04-08 00:02:47 +00:00
foobar 2bbe8da8cd Removed entry that is in the PHP_4_3 branch.. 2003-04-07 23:20:29 +00:00
foobar ae9dc1f306 reorder 2003-04-07 23:19:22 +00:00
foobar 0abeba5895 Fixed bug #23093 (highlight_string() crashed with __FUNCTION__) 2003-04-07 22:51:28 +00:00
Sterling Hughes 5ae7fa422d add markers that make this file easy to parse for external sources 2003-04-07 21:48:17 +00:00
Sara Golemon 70155b6dcf Introduce support for context options 'method', 'header', 'content' 2003-04-07 21:02:04 +00:00
9b86ba870c ChangeLog update 2003-04-07 00:30:52 +00:00
foobar c3e90bd6ed Fixed bug #23071 (when DST in effect, date("T") crashed PHP) 2003-04-06 22:37:45 +00:00
Marcus Boerger cfbf35a5f2 Support for ZTS 2003-04-06 20:19:52 +00:00
Moriyoshi Koizumi 33fb9a6cdb Improved zmemcheck macro so it displays the size of each memory block too. 2003-04-06 18:40:19 +00:00
Moriyoshi Koizumi e184a55bf4 Improved readability of zmemcheck output 2003-04-06 18:12:16 +00:00
Moriyoshi Koizumi 80bfd184eb Added zmemcheck macro, which may help you examine the memory blocks being
handled by the memory manager.
2003-04-06 17:53:17 +00:00
foobar f0f2ab18df reorder 2003-04-06 12:04:21 +00:00
797bd1ed75 NEWS update 2003-04-06 01:30:53 +00:00
4ae5b45e83 ChangeLog update 2003-04-06 01:30:46 +00:00
Marcus Boerger 448d361290 Collate version handling and bump up version (noticed by Peter Neuman) 2003-04-05 20:43:53 +00:00
Christian Stocker 5dc852e734 @- Added domxml_doc_create_document_fragment() and
@    domxml_document_fragment_open_mem(string) method (Christian)
Useful for adding and parsing (well-balanced) document fragments.
- Bumped up API version number
2003-04-05 19:56:41 +00:00
foobar b0f630470b --enable-all is not useful at all, removed from help 2003-04-05 17:47:03 +00:00
foobar 78365069f0 Better ifdef it out here too 2003-04-05 17:33:55 +00:00
Sara Golemon a8711474c0 Debug watches probably don't belong in CVS. 2003-04-05 17:31:34 +00:00
Ilia Alshanetsky 61026e391c Syncronized bunbled GD library with gd 2.0.12
# One very useful feature that I still need to add support for in our
# interface to the lib is the support for png compression for imagepng().
2003-04-05 17:23:55 +00:00
Marcus Boerger f97f219fa7 Include ldd output 2003-04-05 12:16:29 +00:00
Sascha Schumann 5145d17fde dividend -> divisor 2003-04-05 11:38:13 +00:00
Sascha Schumann 4226fe67d1 dividend -> divisor
Submitted by: Jesus M. Castagnetto <jmcastagnetto@yahoo.com>
2003-04-05 11:22:15 +00:00
Brian France 031aef1e0c Added HAVE_CONFIG_H check so the phpize build method works 2003-04-05 08:14:56 +00:00
Sara Golemon d6c24de842 Add IPv6 support to stream_socket_client/server() 2003-04-05 02:42:12 +00:00
Pierre Joye b01169b63d what? maintainer is not a valid role :) 2003-04-05 01:42:55 +00:00
622340a119 ChangeLog update 2003-04-05 01:30:51 +00:00
Wez Furlong c64256e671 Warning fix 2003-04-04 21:09:25 +00:00
Sara Golemon a65564f0fa User shouldn't have to initialize this pass-by-ref parameter 2003-04-04 20:43:36 +00:00
foobar cbb98284da - Fixed bug #22944 (--with-java "make install" fails) 2003-04-04 17:42:46 +00:00
Sterling Hughes a0729141e0 both these entries are bad, and were never agreed upon.
assert() usage is a controversial concept at best.
docref() is something quite a few of us strong disagree with.  suspending
this until further discussion.
2003-04-04 17:01:09 +00:00
Sterling Hughes 335a1c1a6d forgot to commit this. 2003-04-04 16:00:33 +00:00
foobar 9fbb5b5327 Check that t1lib has T1_StrError 2003-04-04 15:56:10 +00:00
foobar 392f3c2d7c - Checks specific to some extension belong in the extension's config.m4 2003-04-04 15:42:54 +00:00
Andrei Zmievski 81482833b5 Introduce ZEND_ME() and ZEND_METHOD() macros. Use these for declaring
class methods to avoid name collisions.
2003-04-04 15:38:20 +00:00
Moriyoshi Koizumi da4cf6f9d8 Fixed memleak in socket_select 2003-04-04 14:16:59 +00:00
Moriyoshi Koizumi b78e3c5155 Added cmsghdr check. Now sockets extension can be built under cygwin. 2003-04-04 13:02:43 +00:00
Stanislav Malyshev 6ed305945d Fix namespace issues 2003-04-04 12:25:47 +00:00
Moriyoshi Koizumi d1b82409c3 Added missing sanity check, which was causing segfault. 2003-04-04 09:06:23 +00:00
Wez Furlong 0148c0cb02 Simplify and enhance readability. 2003-04-04 08:57:40 +00:00
Sascha Schumann 7f5a42da17 Backout Jani's commit to resync branches 2003-04-04 08:40:48 +00:00
Sara Golemon b2d4514580 Added stream_get_transports() 2003-04-04 05:21:03 +00:00
Sara Golemon c985b780a5 Prevent php_stream_get_record from grabbing more than maxlen characters 2003-04-04 01:34:00 +00:00
Ilia Alshanetsky 5ec34bcd82 Might as well disallow 0x0 images.
Thanks Marcus.
2003-04-04 01:33:57 +00:00
8809836586 ChangeLog update 2003-04-04 01:30:57 +00:00
Pierre Joye b0c36aeeaf - Add some releases notes
- Add myself in the maintainer list (stig)
2003-04-04 01:23:40 +00:00
Stig Bakken de5f17eb92 * whip script files where they belong 2003-04-04 00:25:32 +00:00
Ilia Alshanetsky 925bc0fd7d Fix segfault in imagecopyresized(). 2003-04-04 00:16:47 +00:00
Stig Bakken 99824847c6 * look for pearcmd.php in the right directory when run from a cvs checkout 2003-04-04 00:15:53 +00:00
Stig Bakken 3ba4fa6330 * rename pear_unices to pear.sh and make it a pure shell script 2003-04-04 00:11:00 +00:00
foobar 74868f3a45 - Better errors for T1lib.
- Sanity check into imagepsextendfont().
# Patches by John Coggeshall <john@coggeshall.org>
2003-04-04 00:09:23 +00:00
Stig Bakken 3c863894b4 * pear.in is renamed to pearcmd.php 2003-04-03 23:55:11 +00:00
Stig Bakken 19e924695d * paj's last Windows install fixes 2003-04-03 23:48:39 +00:00
Stig Bakken 297caeb372 * use PHP_PEAR_* environment variables (paj) 2003-04-03 23:21:30 +00:00
Stig Bakken 7d4142b896 * disable table borders in output to save width 2003-04-03 23:12:40 +00:00
Stig Bakken 360d1da529 * windows bugfix 2003-04-03 23:11:50 +00:00
Stig Bakken e853217651 * support both error codes and messages in the second parameter to
PEAR::isError()
2003-04-03 23:10:11 +00:00
foobar 2063094acc Use php_error_docref. 2003-04-03 23:10:08 +00:00
Stig Bakken 4d79859291 * remove track_errors ini fiddling, was a PHP bug that should be fixed now 2003-04-03 23:05:25 +00:00
Stig Bakken 165604818c * initialize pkginfo with an empty provides array 2003-04-03 23:04:52 +00:00
Rasmus Lerdorf 7461f1f45a MFB 2003-04-03 22:45:25 +00:00
Marcus Boerger f0290a7815 Check for flex version 2.5.4 2003-04-03 20:59:42 +00:00
Sascha Schumann c2e2423838 Fix segfaults in imagecreate/imagecreatetruecolor 2003-04-03 19:18:57 +00:00
Andrei Zmievski e3f1641527 Patch from Timm Friede for when EG(active_namespace) is NULL initially. 2003-04-03 19:05:25 +00:00
foobar ff22d581d9 WS & CS fix 2003-04-03 18:44:00 +00:00
Sara Golemon 465bb61357 Kludgy fix for floating point drift causing problems like range(1.0,1.5,0.1) == array(1.0,1.1,1.2,1.3,1.4); 2003-04-03 18:33:05 +00:00
Sascha Schumann 7e2fcf986e Add some checks and avoid passing invalid data to call_user_function_ex.
Fixes some heap corruption and allocation of negative amounts of memory.
2003-04-03 18:19:15 +00:00
Sascha Schumann 7e7bbb751e Prevent entering of anything but arrays/strings in register_shutdown_func
Noticed by: Jan Schneider
2003-04-03 18:09:41 +00:00
Andrei Zmievski 91eff553e3 Initialize all relevant zend_class_entry fields to avoid accidental
crashes.
2003-04-03 14:44:41 +00:00
foobar f7041314bb reorder 2003-04-03 11:04:16 +00:00
Christian Stocker f9a42398c3 new domxml_elem_set_attribute_node() should have gone into NEWS, but I forgot.. 2003-04-03 10:24:53 +00:00
Christian Stocker 630a00dda6 - Added domxml_elem_set_attribute_node() method. (Rob Richards) 2003-04-03 10:21:19 +00:00
Georg Richter 05e02eb27b fixed mysqli_prepare_result 2003-04-03 08:03:59 +00:00
Georg Richter 130860e709 fixed output 2003-04-03 08:03:12 +00:00
Derick Rethans 6412e65bf9 - CS 2003-04-03 06:21:59 +00:00
Sebastian Bergmann 76097eda64 Leftover. 2003-04-03 05:06:03 +00:00
Sterling Hughes 4fa866d667 i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
i will not commit before 12:00
2003-04-03 03:07:58 +00:00
929caf1060 NEWS update 2003-04-03 01:30:52 +00:00
61e60f4ffe ChangeLog update 2003-04-03 01:30:48 +00:00
foobar c94eeb9fad Another CS fix.
# Rasmus, at least try keep the style consistent..
2003-04-03 01:16:34 +00:00
foobar 16da825c7c CS fix 2003-04-03 01:12:47 +00:00
Moriyoshi Koizumi cb38be1bd2 Fixed segfault in xml_parser_create()
# due to too many %s in printf spec
2003-04-03 01:00:45 +00:00
Ilia Alshanetsky 6965f229a6 MFH 2003-04-03 00:55:56 +00:00
Moriyoshi Koizumi f7a8499806 Fixed memleak in output buffering facility 2003-04-03 00:50:17 +00:00
Moriyoshi Koizumi 8784a497b8 Fixed segfault in mb_ereg_match() 2003-04-03 00:15:13 +00:00
Moriyoshi Koizumi 8b539ed766 Fixed lots of crashes in mbregex.
# most of them were caused by stupid mistakes
2003-04-03 00:01:44 +00:00
Rasmus Lerdorf 1dba0c1ba7 MFB: Check for negative precision 2003-04-02 23:51:52 +00:00
Rasmus Lerdorf 066a68d7fa MFB: Fix unregister_tick_function crash 2003-04-02 23:11:31 +00:00
Georg Richter 625df86428 fixed expected output 2003-04-02 22:07:27 +00:00
Rasmus Lerdorf 716142c4ea MFB: Get rid of bogus dtors 2003-04-02 22:07:22 +00:00
Rasmus Lerdorf 1612ffad05 MFB: Fix the setlocale() segfault 2003-04-02 21:33:02 +00:00
Marcus Boerger a90ea73ef8 For now only bison 1.28, 1.35 and 1.75 are working properly 2003-04-02 21:17:16 +00:00
Andrei Zmievski 3d62a3491e - Add zend_register_internal_namespace() API function.
- Add zend_register_internal_class_in_ns() API function.
2003-04-02 20:27:44 +00:00
Derick Rethans bac12360ef - Update for new name 2003-04-02 18:39:11 +00:00
Andrei Zmievski 1885d00861 Simplify. 2003-04-02 18:15:08 +00:00
Derick Rethans 7627bf7b36 - Fix whitespace 2003-04-02 17:23:04 +00:00
Sterling Hughes bb7c2ddb23 add the ability for curl_multi_info to introspect the handles.
# Zend commit doesn't break anything, so I'm committing it.  If anyone
# has problems, just speak up. :)
2003-04-02 16:58:52 +00:00
Andrei Zmievski bdd3b6042c Implement a different way to catch documentation comments. 2003-04-02 16:51:49 +00:00
Colin Viebrock 4888473efa fixes for logo guid functions 2003-04-02 16:51:40 +00:00
Colin Viebrock a77cb3c35d oops ... committed the wrong one 2003-04-02 16:28:38 +00:00
Andrei Zmievski e6255b06b1 Revert portions of the doc comment patch. There should be no parser
errors now.
2003-04-02 16:13:12 +00:00
Colin Viebrock 6aa1481f83 fix logo (outline around letters) 2003-04-02 15:36:34 +00:00
Stanislav Malyshev 800de8acb0 allow class_exists() to work with namespaces too.
add CLASS_IS_NAMESPACE macro
2003-04-02 15:28:31 +00:00
Stanislav Malyshev e12415c945 fix typo 2003-04-02 15:03:24 +00:00
Edin Kadribasic f773cd8fea Fixed bug #23008 2003-04-02 12:36:03 +00:00
Stanislav Malyshev 8a03806a80 fix parameterless get_declared_classes call 2003-04-02 10:36:37 +00:00
Christian Stocker 19771e0433 Patch for Bug #22774 by Rob Richards 2003-04-02 10:31:33 +00:00
Sara Golemon f22fb07ecd Avoid having output_buffering cause this test to improperly fail. 2003-04-02 01:51:34 +00:00
1a0b455d71 ChangeLog update 2003-04-02 01:30:47 +00:00
Sara Golemon c249c67178 New test for userfilters rewrite 2003-04-02 00:41:09 +00:00
Ilia Alshanetsky aab9718253 Fixed possible integer overflow in str_repeat(). 2003-04-02 00:25:45 +00:00
Jay Smith dcf0c70950 Fix 'timestamp without timezone', too. 2003-04-01 23:56:16 +00:00
Marcus Boerger ccfcd0d411 Fix 'time with timezone', too 2003-04-01 23:34:11 +00:00
Jay Smith cff236c4a6 Fixed bug #23009 (pg_select with timestamp) 2003-04-01 23:26:10 +00:00
Rasmus Lerdorf 4b343a0562 MFB 2003-04-01 21:47:21 +00:00
Andrei Zmievski 1ad9bd68ff Stas's patch on zend_execute.c (1.448 -> 1.449) resulted in a bug where
the namespaced member accesses didn't work. This should hopefully
correct it.
2003-04-01 21:02:02 +00:00
Moriyoshi Koizumi 6301bd9b95 Fixed bogus test 2003-04-01 19:47:33 +00:00
Andrei Zmievski 62f9eb8006 Split ZEND_NAMESPACE into user and internal namespaces. Hope this is
okay with engine folks.
2003-04-01 19:37:04 +00:00
Sascha Schumann e2333fd1df Fix an uninitialized read, default to FAILURE 2003-04-01 19:14:47 +00:00
Rasmus Lerdorf 20ea550235 MFB 2003-04-01 19:12:32 +00:00
Moriyoshi Koizumi b302824171 Added a test case for bug #22538 2003-04-01 19:10:04 +00:00
Moriyoshi Koizumi 2954ea0a01 oops 2003-04-01 18:56:59 +00:00
Moriyoshi Koizumi 1bb22a8bd0 Reverted the last patch; the problem is elsewhere.. 2003-04-01 18:56:26 +00:00
Rasmus Lerdorf 423147c194 MFB 2003-04-01 18:50:31 +00:00
Moriyoshi Koizumi df22d1016f Fixed crash that occurs due to an abused persistent hashtable.
# thanks Sascha again.
2003-04-01 18:44:00 +00:00
foobar b9d53196c2 crap removal 2003-04-01 16:02:31 +00:00
foobar caac35954b Fixed bug #22987 (missing perror() check in configure) 2003-04-01 15:35:57 +00:00
Moshe Doron 3c982dea22 oops 2003-04-01 12:54:35 +00:00
Moshe Doron d8b5687925 revert due the last string.c revert 2003-04-01 12:53:44 +00:00
Moshe Doron 31bd24860c revert last commit for now 2003-04-01 12:46:01 +00:00
Moriyoshi Koizumi 6eaa47854e Fixed crash in mb_convert_encoding() that occurs when a void array is
passed as the third parameter
2003-04-01 11:49:30 +00:00
Thies C. Arntzen 60214a0338 *** empty log message *** 2003-04-01 11:04:38 +00:00
Sascha Schumann 1879b27fc6 fix VPATH builds 2003-04-01 10:16:12 +00:00
Sascha Schumann cc39646730 Fix segfault in register_shutdown_function 2003-04-01 10:02:29 +00:00
Stanislav Malyshev 438aaf720f improve namespace name hanfling 2003-04-01 09:43:30 +00:00
Stanislav Malyshev 334702d69a fix get_declared_classes() 2003-04-01 09:27:05 +00:00
Stanislav Malyshev 59af205988 Add __NAMESPACE__ auto-constant. 2003-04-01 09:22:41 +00:00
Stanislav Malyshev f9fae74ab6 make get_declared_classes() work with namespaces (based on Tal Peer's patch) 2003-04-01 08:26:14 +00:00
Sascha Schumann 8a9e45a27a Don't need shtool 2003-04-01 08:05:01 +00:00
Sara Golemon 48c947389e Bug #22962 2003-04-01 06:21:54 +00:00
Sebastian Bergmann b8e3e0bfe3 Sorry Sterling, but this broke the ZTS build and I'd rather not 'ZTS fix' an April's Fool joke. 2003-04-01 05:30:32 +00:00
Sterling Hughes 53d90d8b9b Add the landonize() and landonize_url() functions which provide a secure
alternative to the sha1() and sha1_file() functions.
2003-04-01 05:01:50 +00:00
b5e01272fa NEWS update 2003-04-01 01:30:50 +00:00
6a0d4df691 ChangeLog update 2003-04-01 01:30:46 +00:00
Moriyoshi Koizumi 93386a8b09 oops 2003-03-31 23:49:53 +00:00
foobar e00c10fe74 Householding.. 2003-03-31 23:26:12 +00:00
Moriyoshi Koizumi 8d2dd87d89 Fixed bug #22538 (stream filter problem) 2003-03-31 23:22:10 +00:00
foobar d38d39a46c Fixed bug #22989 (sendmail not found by configure) 2003-03-31 23:21:41 +00:00
Moriyoshi Koizumi e8f13586a7 Fixed test; in ZE2, all the properties used in any methods are populated
at compile time.
2003-03-31 22:54:18 +00:00
Ilia Alshanetsky 62909237c4 WS 2003-03-31 22:13:01 +00:00
Andrei Zmievski 5657b83691 Multi-purpose patch:
- The fields of zend_namespace were not completely initialized which
   led to a variety of problems.
 - The occurrence of class/interface/namespace definition is now
   captured.
 - Functions/classes/interfaces/namespaces can be preceded by doc
   comments which are stored for use by extensions.
2003-03-31 20:42:01 +00:00
Moriyoshi Koizumi 383808e9d3 Fixed proto to sync with the documentation 2003-03-31 20:36:46 +00:00
Moriyoshi Koizumi 4932306f94 Rearranged search order for the magic file to avoid further confusions 2003-03-31 19:48:53 +00:00
Marcus Boerger 0235d331b7 use the correct macro - noticed by Andrei 2003-03-31 19:14:18 +00:00
Moshe Doron 64bd1cdbd6 # make derik happy 2003-03-31 19:01:43 +00:00
Moshe Doron dc8daad70d fix for 22904
@ now addslashes() do it also on cybase magic mode(moshe).
2003-03-31 18:56:41 +00:00
Wez Furlong 16dae2eba0 Fix const warning 2003-03-31 17:58:29 +00:00
Moshe Doron 5c3a073c07 # unnecessary condition here. 2003-03-31 12:08:31 +00:00
foobar 1d3542a6bc cleanup 2003-03-31 08:49:19 +00:00
Stanislav Malyshev 26c51b73f1 Use strncpy instead of sprintf 2003-03-31 07:34:05 +00:00
Sascha Schumann 0481896ff7 TS issue, noticed by Sebastian Bergmann 2003-03-31 05:39:25 +00:00
Sascha Schumann cb3c506639 Ensure that the seed function has been called, even if we are used by
another module's request init function.

Noticed by: marcus.boerger@t-online.de
2003-03-31 03:24:18 +00:00
2dc5d2b713 NEWS update 2003-03-31 01:30:48 +00:00
0367454d42 ChangeLog update 2003-03-31 01:30:45 +00:00
Derick Rethans 07dd6f49ff - Typo and some whitespace 2003-03-30 22:29:22 +00:00
Derick Rethans 27496361d5 - Added optional parameter to openssl_sign() to specify the hashing
algorithm to use. (Patch by Scott <scott@planetscott.ca>)
@- Added optional parameter to openssl_sign() to specify the hashing
@  algorithm to use. (scott@planetscott.ca, Derick)
2003-03-30 22:25:23 +00:00
Ilia Alshanetsky feba44546c Fixed bug #22965 (Crash in gd lib's ImageFillToBorder()). 2003-03-30 20:48:05 +00:00
Andrei Zmievski 52372c31cd Since zend_do_begin_class_member_function_call assumes the previous
opcode is FETCH_CONSTANT, swap the calls around.
2003-03-30 18:51:04 +00:00
Sascha Schumann d26e1b751c Merge proper -I parameter for APXS builds 2003-03-30 18:36:04 +00:00
Moriyoshi Koizumi 6e3faef231 Added various gdb macros to examine zval, znode, and HashTable 2003-03-30 17:45:33 +00:00
Georg Richter e3bf2f5c9c changed constant name 2003-03-30 15:28:21 +00:00
Marcus Boerger d94c98c3f2 if TEST_PHP_EXECUTABLE=auto then use ./sapi/cli/php 2003-03-30 14:38:48 +00:00
Marcus Boerger f7150d28ff update 2003-03-30 14:30:46 +00:00
Marcus Boerger 7aa1e2cda4 more ini defaults for error message handling 2003-03-30 14:00:09 +00:00
Marcus Boerger 7a76d5f438 cleanup 2003-03-30 13:59:05 +00:00
Georg Richter 7ff2c00be8 changed macro 2003-03-30 13:51:06 +00:00
Sebastian Bergmann 8c06829b11 ZTS fix. 2003-03-30 13:40:40 +00:00
Stanislav Malyshev f008808c82 Try to report class name of the exception 2003-03-30 13:19:00 +00:00
Marcus Boerger 0ee6377b42 bugfix #22961 by cynic@php.net 2003-03-30 12:47:05 +00:00
Stanislav Malyshev bd4cdab9cf Fix namespace switch 2003-03-30 12:39:49 +00:00
Marcus Boerger 06a0e1c112 simplify and fix 2003-03-30 11:07:36 +00:00
Marcus Boerger ac3113122a done 2003-03-30 10:56:34 +00:00
Sebastian Bergmann 38491e487f --+_ 2003-03-30 09:24:40 +00:00
Shane Caraveo 5b6412dcde uncomment removal of temp file
update changes from run-tests
2003-03-30 05:00:03 +00:00
Shane Caraveo e3c002b0c3 clean up url handling with path_info
handle sending a 404 if the requested file does not exist
2003-03-30 04:17:24 +00:00
46832dbcab ChangeLog update 2003-03-30 01:30:49 +00:00
Shane Caraveo 0f3a0dfa52 _SERVER also should not be quoted by magic_quotes_GPC
also remove an empty if statement
2003-03-30 01:06:54 +00:00
Moriyoshi Koizumi 47e40e1b98 Improved var_dump() and debug_zval_dump() so they also show the
namespace of the given object.
2003-03-29 21:29:22 +00:00
Marcus Boerger b5c97d8dab fix phpinfo() & php -i 2003-03-29 21:25:03 +00:00
Marcus Boerger c21f2b7493 use sizeof() as suggested by Andrei 2003-03-29 21:23:53 +00:00
Derick Rethans fa59090287 - html errors should default to off (0) in CLI 2003-03-29 20:57:31 +00:00
Zeev Suraski 96231c3ab5 Add missing initialization 2003-03-29 19:20:35 +00:00
Moriyoshi Koizumi db2de468e1 Fixed too optimized part 2003-03-29 16:18:04 +00:00
Moriyoshi Koizumi 8e8029f23d CS & WS fixes 2003-03-29 16:13:51 +00:00
Moriyoshi Koizumi f5929a95b2 Improved bison check; now configure accepts 1.28, 1.35, and 1.75 only. 2003-03-29 15:54:19 +00:00
Zeev Suraski 20860feef1 Fix crash 2003-03-29 11:27:17 +00:00
Zeev Suraski 5097be302e Initial support for enforcing prototype of abstract/interface method implementations 2003-03-29 11:19:38 +00:00
Moriyoshi Koizumi 9e6fdcd8f6 Fixed test cases so they wouldn't be failed in case register_globals=on 2003-03-29 07:13:47 +00:00
Sterling Hughes 05dfd313fb remove unused variable 2003-03-29 05:19:27 +00:00
Sterling Hughes 3f700e58ab update php module name to php5, not php4.
apache, apache2* and cli/cgi work.
sapi module maintainers should fix up their sapis, as I don't run
any servers with php outside of apache.
2003-03-29 04:52:46 +00:00
789b0a83f0 ChangeLog update 2003-03-29 01:30:51 +00:00
Derick Rethans 56a172cc04 - Add the exponent to the float modifier 2003-03-28 21:04:45 +00:00
Marcus Boerger 18ff958ad3 fix these tests 2003-03-28 18:58:18 +00:00
Moriyoshi Koizumi 2ad3f446c3 Do the right fix.. 2003-03-28 18:24:02 +00:00
Moriyoshi Koizumi 0b6f629b68 Fixed bug #22773 2003-03-28 17:53:36 +00:00
Moriyoshi Koizumi e1eb238cf2 On 64bit platforms, pointers are 64bit long.. 2003-03-28 17:09:04 +00:00
Ilia Alshanetsky 0e73275429 CS 2003-03-28 14:31:31 +00:00
David Hill 60a7aef6e9 Changing parsedate to be reentrant using pure_parser (Dave) 2003-03-28 13:10:52 +00:00
Moriyoshi Koizumi 8bdef0dda5 Removed redundant aliases & CS fix. 2003-03-28 03:38:13 +00:00
c6e7dead32 ChangeLog update 2003-03-28 01:30:46 +00:00
Moriyoshi Koizumi 961ad8e24a Improved php_import_environment_variables: avoid emalloc()ing in most cases 2003-03-27 21:13:47 +00:00
Harald Radi f629da9384 MFB ext/com
fix #22899
invoke is called twice
2003-03-27 19:56:59 +00:00
Ilia Alshanetsky 3db5278dcc CS 2003-03-27 18:57:53 +00:00
David Hill b7bb820782 Correcting checking of flex version (dave) 2003-03-27 18:02:00 +00:00
Stanislav Malyshev 1972a656e7 fix fetch_class buglet 2003-03-27 17:57:47 +00:00
Shane Caraveo e949850881 handle invalid paths passed to us from iis 2003-03-27 17:52:33 +00:00
David Hill 86569cb154 Backing out part of TZ change 2003-03-27 14:23:48 +00:00
Edin Kadribasic 688c24bcaa MFB 2003-03-27 13:30:40 +00:00
foobar 7e0aea7efe CS fix 2003-03-27 13:16:18 +00:00
Ian Holsman 0cef2e7df8 change to a pool-based bucket instead of a transient one. 2003-03-27 05:31:49 +00:00
Ian Holsman c5fd930eea remove flush from standard unbuffered write.
people requiring a flush can turn implicit flush on.
Thanks ilia for benchmarking this!
2003-03-27 04:35:44 +00:00
953d61e173 ChangeLog update 2003-03-27 01:30:59 +00:00
Sterling Hughes 84f0dd0e44 really fix 2003-03-26 23:03:48 +00:00
Sterling Hughes c0f04cc087 fix segfault 2003-03-26 23:01:39 +00:00
Martin Jansen ad85444a87 * Silence warning 2003-03-26 22:43:42 +00:00
Stanislav Malyshev 43e87093c1 Un-nest namespaces - now namespace X { namespace Y {} } is a parse error
Also refine namespaced includes
2003-03-26 20:42:23 +00:00
Ilia Alshanetsky 018d851129 Fixed bug #22900 (declaration of namespaces with same name results in leaks). 2003-03-26 17:06:08 +00:00
David Croft e409574492 a missing piece of news 2003-03-26 17:05:16 +00:00
David Hill 1fa7504fae Changing TZ to match Unix98 standard to make Tru64 happy 2003-03-26 16:42:03 +00:00
Sebastian Bergmann 3fc852824f Eliminate TSRMLS_FETCH() calls in destroy_op_array() and zend_get_class_entry(). 2003-03-26 07:44:11 +00:00
Sebastian Bergmann 866332a4b8 Eliminate TSRMLS_FETCH() calls in zend_objects_new() and zend_objects_get_address(). 2003-03-26 06:32:53 +00:00
Sebastian Bergmann 2dd1affcab Leftover. 2003-03-26 06:31:26 +00:00
Sebastian Bergmann a9b479612f Eliminate TSRMLS_FETCH() call in php_find_gd_font(). 2003-03-26 06:30:45 +00:00
7c86ea761d ChangeLog update 2003-03-26 02:25:54 +00:00
Andi Gutmans 85d2c35bfa - Temporarily fix problem with inheriting from an internal class. This might
- need some rework in the future (thanks to Marcus)
2003-03-25 20:36:26 +00:00
Ilia Alshanetsky 2e0651f378 Added missing initialization, which causes AP2 to crash on startup in ZTS. 2003-03-25 15:35:08 +00:00
Martin Jansen 16bf9ed5fc * Changing to DOS line breaks. 2003-03-25 14:34:02 +00:00
foobar 2f67648512 Made "--with-pear" "--disable-all"-aware. Plus some cosmetics fixes. 2003-03-25 13:43:13 +00:00
foobar 67c24604ee MFB 2003-03-25 13:35:21 +00:00
Sebastian Bergmann bb16a92ccd Leftover. 2003-03-25 13:04:27 +00:00
Edin Kadribasic 5d381f8f80 MFB and more. Fixed various win32 compilation issues. Also the sapi
is now built as php4apach2.dll since the filter is being obsoleted.
2003-03-25 11:50:18 +00:00
Edin Kadribasic 14a56343c8 MFB: Disable building of apache2filter (obsoleted by handler). 2003-03-25 10:40:39 +00:00
Edin Kadribasic d52937b8e7 MFB: php_gd.dll is no longer bult and the bundled library is always used. 2003-03-25 10:30:58 +00:00
Edin Kadribasic da22639d94 MFB 2003-03-25 10:23:22 +00:00
Sebastian Bergmann 5ca078779a Eliminate some TSRMLS_FETCH() calls. Tested with Win32 build of SAPI/CGI and SAPI/CLI on Win32. 2003-03-25 08:07:13 +00:00
Shane Caraveo b671380b6b many new enhancements to run-tests that allow for testing cgi and other
sapi modules via http.  see README.TESTING2 for more details
several sapi tests added
2003-03-25 07:45:18 +00:00
Shane Caraveo 56210b8921 use the correct flush on deactivate
add some code to make debugging iis 5 cgi easier
2003-03-25 07:43:30 +00:00
8712da0e39 ChangeLog update 2003-03-25 02:26:04 +00:00
foobar 96c02a1251 - This is not supposed to be 'pretty' name. (ref. bug #22853) 2003-03-25 01:38:14 +00:00
Ilia Alshanetsky 519721851f Fixed bug #22805 (Reading of user input could stop prematurely). 2003-03-25 01:34:32 +00:00
foobar 66842efff7 reorder 2003-03-24 23:26:32 +00:00
Edin Kadribasic 96e9337fc8 MFB 2003-03-24 21:49:46 +00:00
Moriyoshi Koizumi 570e929d49 Fixed bug #22834 (compile failure due to ugly implicit casts) 2003-03-24 21:22:23 +00:00
Moriyoshi Koizumi 03a5129429 oops... 2003-03-24 19:24:35 +00:00
Moriyoshi Koizumi 68b03bde3a Added test cases for new functionality 2003-03-24 19:21:20 +00:00
Moriyoshi Koizumi 93b250f923 Added koi8-r, cp866, and cp1251 support for htmlentities 2003-03-24 19:13:02 +00:00
James Cox 6af5b89b04 test + remove 4 2003-03-24 19:04:44 +00:00
Ilia Alshanetsky 5c159052bf Added missing header that prevents successful compilation. 2003-03-24 15:21:53 +00:00
Ilia Alshanetsky d53b487633 MFHZE2 2003-03-24 14:53:30 +00:00
foobar 34aa1fdd2a fix bug #22841 2003-03-24 12:16:03 +00:00
Stanislav Malyshev 268a14e049 Fix {include|require}_once error message - if open
fails, don't use tream, use original name.
2003-03-24 11:54:42 +00:00
foobar d963292f6f This is AUTH_TYPE in every other SAPI. 2003-03-24 11:21:15 +00:00
Uwe Schindler 0353b50f80 PHP_WIN32 included 2003-03-24 10:33:21 +00:00
foobar 0b4784d951 Fixed bug #18640 properly 2003-03-24 10:18:00 +00:00
Georg Richter e43e219e46 changed method name 2003-03-24 07:43:28 +00:00
91a9f27084 ChangeLog update 2003-03-24 01:34:32 +00:00
Alex Waugh d403ed4bc3 Fix linkage of symbols. 2003-03-23 21:58:03 +00:00
Andi Gutmans eba65486ad - Fix win32 build 2003-03-23 21:27:22 +00:00
Shane Caraveo ac7748cef1 For fastcgi env vars, don't magic quote them 2003-03-23 20:16:41 +00:00
Shane Caraveo 456b6cbeab The environment should *never* be magic quoted. 2003-03-23 19:30:31 +00:00
Wez Furlong badd5fb6fd Fix curl detection when multiple installations exist 2003-03-23 18:14:41 +00:00
Stanislav Malyshev 5f47d77b42 resore namespace on shutdown - since some functions use
EG() and CG() pointers
2003-03-23 18:13:49 +00:00
Sebastian Bergmann 2698a4bd05 ZTS fix. 2003-03-23 17:18:31 +00:00
Zeev Suraski 0aef71ff89 Another fix for implicit public, perhaps it was not such a good idea :I 2003-03-23 08:14:41 +00:00
Sebastian Bergmann 2dc388e73e Add new files to ZendTS.dsp. Sync list of files in Zend.dsp with ZendTS.dsp. ZTS fixes. 2003-03-23 06:57:16 +00:00
Sterling Hughes 91a2475485 DEFAULT_CLASSES_H not DEFAULT_INTERFACES_H 2003-03-23 04:34:00 +00:00
Sterling Hughes e6dfbc9565 add a standard Exception class. 2003-03-23 04:32:24 +00:00
Moriyoshi Koizumi 9c038be621 Added some compiler check 2003-03-23 01:44:58 +00:00
6dd4cddb7f ChangeLog update 2003-03-23 01:33:20 +00:00
Moriyoshi Koizumi 0d2bd85a61 Fixed win32 build, which fails with non-SBCS-compatible locale settings. 2003-03-22 23:31:52 +00:00
Shane Caraveo 170de9b95c export functions needed by cli 2003-03-22 23:26:00 +00:00
Shane Caraveo 0a3ca34e87 fix crash in win32 debug build 2003-03-22 21:22:40 +00:00
Shane Caraveo 26296130ad Fix PHPRC overriding other ini files. This is how PHPRC worked prior to
4.3.x, and is usefull for applications that execute PHP and want to
emulate CGI and define alternate INI files (ie. cannot use -c).
2003-03-22 18:54:35 +00:00
David Croft 0d07e69ba8 #strip rcs tags 2003-03-22 01:37:06 +00:00
870e1ad69d ChangeLog update 2003-03-22 01:31:23 +00:00
Sterling Hughes 0a4282eabf fix segfault in file_set_contents() when the file could not successfully
be opened.
2003-03-21 22:22:15 +00:00
Marcus Boerger f83c88e81d Add missing initialization 2003-03-21 18:08:59 +00:00
James Cox 485ee3914a updating for new list 2003-03-21 17:17:54 +00:00
Stig Bakken 9e21b2eee4 * abort install when an extension fails to build (patch by ja at
morrdusk dot net)
2003-03-21 07:57:27 +00:00
Sterling Hughes ecef1df39c This broke the xml extension, and pres2, commented out for now 2003-03-21 05:26:56 +00:00
00920f5207 ChangeLog update 2003-03-21 01:37:46 +00:00
Hartmut Holzgraefe c75f3e6e88 protect string from CVS keyword expansionCVS: ---------------------------------------------------------------------- 2003-03-20 20:20:37 +00:00
Marcus Boerger 49adbd1ef6 missing TSRMLS_FETCH 2003-03-20 20:03:21 +00:00
Marcus Boerger f14a65c7b9 CS 2003-03-20 19:54:22 +00:00
Stanislav Malyshev 70fff75187 Add stdlib.h too - it is needed fot strto{ld} 2003-03-20 17:41:40 +00:00
Christian Stocker 0cc4b081a3 fix for bug #22786 ("Crash when trying to call DomAttribute's set_namespace method") 2003-03-20 09:48:19 +00:00
87a06aa8ea ChangeLog update 2003-03-20 01:33:31 +00:00
foobar 6638543a72 WS & CS fixes.. 2003-03-20 01:27:40 +00:00
Wez Furlong e451d88399 Fix for persistent stream shutdown under debug builds 2003-03-20 01:23:04 +00:00
foobar c8791084db CS fix 2003-03-20 01:17:05 +00:00
foobar 0af32bc1ac WS & CS fixes 2003-03-20 01:12:57 +00:00
foobar fb2c346be1 WS & CS fixes 2003-03-20 00:37:12 +00:00
foobar eccecff5f9 WS & CS fixes 2003-03-20 00:22:57 +00:00
foobar 6a6e0151c5 Better config.m4.. 2003-03-19 23:52:45 +00:00
foobar 9ff622f268 And this too.. 2003-03-19 23:10:27 +00:00
foobar efe365abdc Andrei forgot this.. 2003-03-19 23:08:58 +00:00
Andrei Zmievski 39d5a63803 - Keep track of starting/ending line numbers for user functions.
- Store last parsed doc comment in a compiler global for future use.
2003-03-19 21:17:47 +00:00
Andrei Zmievski 3a297fac22 Lowercase the function name when used as key in the function name. The
original case is still preserved in zend_function structure.
2003-03-19 21:07:49 +00:00
Marcus Boerger 58df04af27 - reenable $argc/$argv
- add a comment where hardcoded defaults would go
# i believe we have none for now though
2003-03-19 20:36:04 +00:00
David Hill d15a641222 Correcting example to use proper variable - NO_INTERACTION 2003-03-19 18:04:17 +00:00
foobar b26db9cd5c Using of quotes around paths is a very good idea.. 2003-03-19 16:53:02 +00:00
foobar 88fe9c2d3c Fixed bug #22775 (Fatal errors exit with status 0 with CGI/CLI) 2003-03-19 08:22:12 +00:00
801966d951 ChangeLog update 2003-03-19 01:33:04 +00:00
Wez Furlong 7379f47518 Sanity check for when a stream is requested to be persistent but the wrapper
does not respect the flag.
2003-03-19 00:17:15 +00:00
Wez Furlong 0fd995f9fc Add the mode string that was used to open the stream to the meta data,
as requested by Philip Olson.
2003-03-18 23:45:27 +00:00
Wez Furlong 86fb577d59 Implement persistent plain file streams.
Usage:

php_stream *stream = php_stream_fopen("/path/to/file", "r+b", NULL,
	STREAM_OPEN_PERSISTENT | ENFORCE_SAFE_MODE | REPORT_ERRORS);

the filename and mode are combined to form the hash key for the persistent
list; they must be identical for this same stream to be returned again in the
next request.

Calling php_stream_close() on a persistent stream *will* close it, as is
usual with all persistent resources in PHP/ZE.

This is deliberately *not* exposed to user-space PHP at this time.
2003-03-18 23:37:54 +00:00
Wez Furlong 6a87651006 Q} 2003-03-18 22:26:02 +00:00
Marcus Boerger 4529fb344c -turn html_errors on by default again
-disbale clickable error messages by docref_root default to ''
2003-03-18 22:21:54 +00:00
Jay Smith c0d1508ec8 get_browser() needs to use zend_is_auto_global() on _SERVER. 2003-03-18 21:49:01 +00:00
Marcus Boerger 3e621fac94 make phpinfo() depend on executed sapi 2003-03-18 20:52:52 +00:00
Ilia Alshanetsky d29d55e772 Cleanup. 2003-03-18 18:29:10 +00:00
foobar d0ac3d0646 Fixed bug #22765 2003-03-18 17:30:32 +00:00
Wez Furlong ce01fd9526 Avoid using FILE* where possible.
Tidy up handling of potential error situations for the php:// wrapper.
2003-03-18 16:40:29 +00:00
Zeev Suraski 40326f6adf - Fix situation where a derived class declares a public (or implicit public)
with the same name as a private in the parent
- Optimize 'static binding' of private properties a bit
2003-03-18 16:30:23 +00:00
Marcus Boerger b21fdb762a use new callback to overwrite ini settings
# ok now lets split html_errors and phpinfo() formatting
2003-03-18 15:56:12 +00:00
Marcus Boerger 63739c7db8 give sapi modules the possibility to overwrite default ini settings 2003-03-18 15:53:33 +00:00
Wez Furlong 267db80b21 avoid unsigned issues. 2003-03-18 15:15:10 +00:00
Wez Furlong 862586e376 CS fixes 2003-03-18 14:35:15 +00:00
Wez Furlong 7c2ccb5f65 Fix for #22721 (poor file() performance on systems without mmap) 2003-03-18 14:35:01 +00:00
Stig Bakken 0e6fca4f22 * email address change 2003-03-18 12:06:09 +00:00
foobar 980bac69f9 Fixed bug #22751 (Compile error in gdcache when external libgd is used) 2003-03-18 02:13:49 +00:00
14e9434586 ChangeLog update 2003-03-18 01:35:05 +00:00
foobar 6121c846b3 whitespace.. 2003-03-18 01:24:18 +00:00
Ilia Alshanetsky e15cc99415 Win32 build fix. 2003-03-17 22:25:55 +00:00
Ian Holsman 2697be632c PR#22672 - User not logged under Apache2
patch provided by Andrew Bradford.
2003-03-17 21:28:41 +00:00
Ilia Alshanetsky 27a7eaf4e7 Fixed bug #22538 (failed stat on stdio/stdin/stderr streams). 2003-03-17 18:32:15 +00:00
foobar 6443ce1fc5 Fix the bad logic.. 2003-03-17 15:56:17 +00:00
foobar b4b661ae0a WS & CS fixes 2003-03-17 15:06:11 +00:00
foobar d8a62b8e4d WS & CS fixes 2003-03-17 14:45:07 +00:00
Stanislav Malyshev eb5fe6944d MFZE1 2003-03-17 14:41:04 +00:00
Hartmut Holzgraefe 3343327ea1 fixing my proto fix :| 2003-03-17 13:50:27 +00:00
Wez Furlong cfd0466389 Fix for Bug #21310, based on a patch by jflemer@php.net. 2003-03-17 13:40:45 +00:00
Hartmut Holzgraefe dbe4f2238c proto fixes 2003-03-17 13:11:19 +00:00
Hartmut Holzgraefe fa692f6744 proto fix 2003-03-17 13:08:59 +00:00
Hartmut Holzgraefe 212abb4996 proto fix 2003-03-17 13:00:13 +00:00
Hartmut Holzgraefe 6f24340f22 more proto fixes 2003-03-17 12:48:38 +00:00
foobar 9f3a46a12e Be sure we get the correct version.. 2003-03-17 12:43:29 +00:00
foobar 908a942a38 added the version info to be send as-is to buildtest-process 2003-03-17 12:24:09 +00:00
foobar 3a26859829 Added missing zend_mm.c file and renamed zend_object_API.c -> zend_objects_API.c 2003-03-17 11:23:42 +00:00
24b17aa8a0 ChangeLog update 2003-03-17 01:32:05 +00:00
Sascha Schumann d0debaf45c Merge macro changes 2003-03-16 23:02:19 +00:00
Marcus Boerger aba27fc6ca - disable html_errors per default as suggested by php.ini-<xxx>
- new error format that does not point to any documentation (if either
  not html_errors or no docref_root given e.g.: production boxes and default)
- documentation update in php.ini-<xxx>
# hope everyone is happy now
# and why on earth was enabling html_errors default?
2003-03-16 20:47:56 +00:00
foobar fcb43b70ef WS & CS fixes + some TSRM_FETCH() removals + pval -> zval 2003-03-16 05:00:50 +00:00
0f21d60d7e ChangeLog update 2003-03-16 01:32:48 +00:00
foobar d4a72592a4 - Fixed bug #22709 (crash within interbase when database unavailable) 2003-03-16 00:37:01 +00:00
Moriyoshi Koizumi ba8e57b2cb Added test for bug22592 2003-03-15 23:37:17 +00:00
Hartmut Holzgraefe e6633a9611 lots of proto stuff 2003-03-15 22:51:49 +00:00
Hartmut Holzgraefe 4cb4676ac9 docbook fixes 2003-03-15 22:38:01 +00:00
Hartmut Holzgraefe 9b178b52ee thinko fix to kill warnings 2003-03-15 22:37:03 +00:00
Hartmut Holzgraefe bd43d88905 docbook typo fix 2003-03-15 22:35:34 +00:00
Hartmut Holzgraefe e2b1372088 make sure the function name in the proto matches the function 2003-03-15 22:34:32 +00:00
Marcus Boerger f60e8941e7 fix Bug #21751 - the parameter was wrong when this code was introduced 2003-03-15 16:39:35 +00:00
Wez Furlong 16e705a547 64bit fixes 2003-03-15 13:29:56 +00:00
Wez Furlong b66957c56a fix proto 2003-03-15 13:29:35 +00:00
9ca5735494 NEWS update 2003-03-15 01:32:37 +00:00
db20d1e2b0 ChangeLog update 2003-03-15 01:32:07 +00:00
foobar 5d39cf4295 And this never existed in any release either.. 2003-03-15 00:45:22 +00:00
foobar 3b07e2f8b6 "allow_webdav_methods" does not exist / is not needed anymore 2003-03-15 00:21:45 +00:00
Jay Smith 830b14297f @- Fixed bug #22386 (Using browscap causes segfault). This fix
@  also adds an optional bool argument to get_browser() that
@  makes the return value an array instead of an object. (jay)
2003-03-14 17:54:38 +00:00
foobar 4a244a3889 No c++ comments 2003-03-14 17:49:44 +00:00
foobar 5be5cc33c6 no c++ comments 2003-03-14 17:40:42 +00:00
foobar b07507f086 No c++ comments! 2003-03-14 17:37:44 +00:00
Moriyoshi Koizumi 3f04205371 Fixed typo 2003-03-14 17:12:24 +00:00
Ilia Alshanetsky 199ae10f01 Whitespace fixes. 2003-03-14 16:56:38 +00:00
Daniela Mariaschi 1afc5a59fe reverting to version 1.9 2003-03-14 08:27:29 +00:00
Alan Knowles 84aa3953e6 remove makefile and libs.mk from package file 2003-03-14 02:13:42 +00:00
Alan Knowles b45ce67f95 removing files not needed so diff -u works nicely 2003-03-14 02:11:54 +00:00
Alan Knowles 65a71f4331 fix package file - note the package is called ext_soap - I suspect it will conflict with SOAP if downloaded - anyone want to comment on ideas for this... 2003-03-14 02:10:23 +00:00
Alan Knowles 0e2f675c87 fixes to enable module building 2003-03-14 02:08:30 +00:00
Alan Knowles bd69062b14 add support for shared library building - shout stop alan - if any objections.. 2003-03-14 01:58:21 +00:00
026bd025ec ChangeLog update 2003-03-14 01:32:56 +00:00
Daniela Mariaschi ceb608fcb2 Test for libgds needs libcrypt with Firebird to succeed 2003-03-13 23:15:43 +00:00
foobar 81f04b3fc8 this is in the PHP_4_3 branch... 2003-03-13 22:52:25 +00:00
Daniela Mariaschi 08267e4a55 Numeric/decimal datatype overflow on Win32.
Fixed bug #20641
2003-03-13 21:58:29 +00:00
Derick Rethans bce69f1218 - Whitespace 2003-03-13 21:09:27 +00:00
Martin Jansen 1188dbe64f * Fixing bug #21845. 2003-03-13 21:07:40 +00:00
Andrei Zmievski dedfa808bb Fix warning in va_start(). 2003-03-13 20:41:58 +00:00
Sara Golemon a374c4350b BFN 2003-03-13 20:18:15 +00:00
Jay Smith 39ec83bb5f Solaris knows nothing of "Europe/Amsterdam". Use "US/Eastern" instead. 2003-03-13 18:51:39 +00:00
Ilia Alshanetsky cf072c4a75 Fixed bug #22681 (Crash when reading from invalid file pointer). 2003-03-13 18:15:31 +00:00
foobar ce4bf275c9 Prevent using both --with-sybase and --with-sybase-ct in same build 2003-03-13 17:27:28 +00:00
foobar c7f39742a7 hrm 2003-03-13 17:02:45 +00:00
Sara Golemon cbf8c3e346 Bug #21534. Silly typo. 2003-03-13 16:10:21 +00:00
Hartmut Holzgraefe de87d3fda3 advertising ext_skel_ng ;) 2003-03-13 09:02:13 +00:00
Ilia Alshanetsky d6a02110b0 Cleanup. 2003-03-13 02:22:31 +00:00
40c307fe6a NEWS update 2003-03-13 01:33:35 +00:00
984ab6d412 ChangeLog update 2003-03-13 01:33:14 +00:00
Andrei Zmievski 0c571538a8 Initialize the namespace when registering functions.
# Correct me if I'm wrong..
2003-03-12 21:43:42 +00:00
Stefan Esser 10fc5dd573 reverting half the patch (it is not that simple) 2003-03-12 12:00:22 +00:00
Zeev Suraski fa7dc03edb Fix a crash bug in the implicit public declaration 2003-03-12 09:38:19 +00:00
Sterling Hughes 39b8f06f9b @ Add the file_set_contents() function, as a complement to the file_get_contents()
@ function. (Sterling)
2003-03-12 06:47:34 +00:00
Ilia Alshanetsky 68e36864c9 Fixed spprintf() usage.
Fixed compiler warnings.
2003-03-12 04:46:03 +00:00
foobar bf90cdeff9 Added the type constants for imagegd2() 2003-03-12 04:29:51 +00:00
foobar 2fee56b2a2 Fix bug #22646 2003-03-12 04:15:28 +00:00
foobar 5e26cd4293 prevent warning 2003-03-12 02:26:46 +00:00
b838618029 ChangeLog update 2003-03-12 01:33:33 +00:00
foobar ea9a3eb82d This was merged into PHP_4_3 branch.. 2003-03-12 01:09:27 +00:00
Ilia Alshanetsky 88281627bc Style fixes. 2003-03-12 00:51:03 +00:00
Marcus Boerger a1cafdf0c4 Added some interface tests 2003-03-12 00:09:59 +00:00
Zeev Suraski d405373270 Fix handling of ::func() 2003-03-11 23:19:45 +00:00
foobar 6e36f3cbae This went to 4_3 branch 2003-03-11 03:13:05 +00:00
foobar 9e501d4f37 - Fixed bug #20715 (odbc could not be compiled as shared extension) 2003-03-11 03:11:36 +00:00
Sascha Schumann 65b9a40640 fix sizeof(size_t) > sizeof(uint) issue 2003-03-11 02:28:46 +00:00
foobar 98b19bbe7e Fixed bug #22616 (Wrong order of -lssl and -lcrypto with IMAP) 2003-03-11 02:11:57 +00:00
Sascha Schumann dfb0d70b5b reverting jani's non-sense commits 2003-03-11 01:47:06 +00:00
2408c1df5e NEWS update 2003-03-11 01:34:01 +00:00
0f949bbfa1 ChangeLog update 2003-03-11 01:33:44 +00:00
Georg Richter efde6643d4 added new profiler-files 2003-03-11 01:22:20 +00:00
Georg Richter 7cf921a56f profiler:
moved profiler stuff from php_mysql.h to separate include file
added port communication
added xml support for file and port output
2003-03-11 01:19:21 +00:00
foobar febb535db0 touch 2003-03-10 22:59:46 +00:00
foobar 7a1ecedf85 64bit issue fixed 2003-03-10 22:59:34 +00:00
Jay Smith 5f25e6b1dd modified test to reflect change in var_dump(). 2003-03-10 21:27:48 +00:00
Moriyoshi Koizumi a41e0c1382 Modified the test to reflect the recent change on var_dump() 2003-03-10 20:46:39 +00:00
David Hill a7b84ac7cb Correcting int/long mismatched - 64bit issues. 2003-03-10 20:30:33 +00:00
Ilia Alshanetsky 822b53b95a Fixed bug #22613 (imagettfbox() does not add the kerning distance to the
running position).
Fixed few possible memory leaks.
2003-03-10 19:07:22 +00:00
David Hill 4f8ae7b111 fixing missed int to long with zend_parse_parameters 2003-03-10 15:52:10 +00:00
Andrei Zmievski b1546a1775 Print the object handle (it's useful). 2003-03-10 15:13:32 +00:00
David Hill 1edf7f55e5 64 bit corrections to parameters to OnUpdateInt Bug #20994 (Dave) 2003-03-10 14:50:16 +00:00
foobar 70f97c1713 - Always use the shtool mkdir. 2003-03-10 14:32:47 +00:00
foobar efe1b0154d this is in the 4_3 branch 2003-03-10 14:10:30 +00:00
Zeev Suraski 3e7cf8e15e Clean redundant code 2003-03-10 07:20:43 +00:00
foobar f10d00b374 - Changed --with-apxs2 for apache2handler.
# Can we nuke that apache2filter now from php5 ?
2003-03-10 03:14:37 +00:00
foobar f8fc50ed6d Fixed some leaks. Patch by Moriyoshi 2003-03-10 03:04:02 +00:00
foobar a7d8bc6894 cs & ws fixes 2003-03-10 02:14:09 +00:00
ebf4931bcf ChangeLog update 2003-03-10 01:32:59 +00:00
Shane Caraveo 9539dddc49 fix isinf for win32 2003-03-10 01:12:22 +00:00
Sara Golemon c4a491e12c Adjustment to user filters reimplementation. Make a bucket an object containing a resource(the real bucket) and a data element for direct operations. Simplifies
user interface and reduces number of function calls/reallocs needed.
2003-03-09 23:12:31 +00:00
Zeev Suraski 12cbee7b05 Optimize 2003-03-09 22:23:27 +00:00
Zeev Suraski 0eae231254 Fix handling of ::foo 2003-03-09 22:17:15 +00:00
Zeev Suraski 3012bdc332 Cleanup 2003-03-09 22:02:37 +00:00
Andi Gutmans b3ebb11549 - Nuke junk 2003-03-09 21:12:12 +00:00
Zeev Suraski 8bc88d8df4 Fix parsing rules of namespaces/classes 2003-03-09 20:53:57 +00:00
Zeev Suraski a89abf9162 Add ability to use ::interface_name in implements 2003-03-09 17:07:15 +00:00
Zeev Suraski 8e1917bdbe Fix :: handling 2003-03-09 17:06:52 +00:00
Uwe Schindler 96cc9aa4c4 Changes for iPlanet Webserver 6 2003-03-09 12:09:06 +00:00
002b3efe63 ChangeLog update 2003-03-09 01:33:11 +00:00
Derick Rethans 0d603b2d9a - Fix proto 2003-03-09 00:05:48 +00:00
Georg Richter 15f648c8f9 various changes for profiler 2003-03-08 23:33:12 +00:00
Derick Rethans 1b9ee1a8ea - Fixed a bug in GD's truecolor TTF handling 2003-03-08 18:27:12 +00:00
Marcus Boerger d0fbdef419 fix warnings - one left 2003-03-08 16:53:54 +00:00
Marcus Boerger 9a6db15d21 summary for selective tests if more than one
# maybe i'll change to present summary only when at least one dir selected
2003-03-08 16:28:35 +00:00
Stefan Esser 4535ff1756 fix possible XSS in error messages 2003-03-08 15:20:12 +00:00
Stefan Esser 1f54605723 wrong place. 2003-03-08 14:51:16 +00:00
Stefan Esser 76c427fd05 fixing memory leak 2003-03-08 14:37:01 +00:00
8f54b23faf NEWS update 2003-03-08 01:31:50 +00:00
fcd1cbfbf7 ChangeLog update 2003-03-08 01:31:41 +00:00
foobar aa95498acd Fixed bug #22473 (ISAPI Secure Server Variables not available) 2003-03-07 18:56:15 +00:00
foobar 75c9eb4d78 These will be already in 4.3.x 2003-03-07 18:38:04 +00:00
Sebastian Bergmann 81a346e4fe Dedicated to Greg Beaver <greg@chiaraquartet.net>. 2003-03-07 16:45:41 +00:00
Jay Smith 61de56b7f5 Added tests for interfaces and class type hinting. 2003-03-07 15:56:31 +00:00
Ben Mansell 6d8283fa57 Fix bug whereby a webserver closing stdout from the CGI/FastCGI binary
would cause PHP to get caught in an infinite loop of failing write()
syscalls.
2003-03-07 14:48:28 +00:00
Ilia Alshanetsky 20c2c39f3c Fixed bug #22585 (Do not terminate the script on minor errors). 2003-03-07 14:03:53 +00:00
Ilia Alshanetsky 8c3e16bf09 OnUpdateInt -> OnUpdateLong. 2003-03-07 13:52:06 +00:00
Ilia Alshanetsky 97418f59bd CS Fixes.
Fixed a bug with 404 handling.
Added more detailed Apache info for phpinfo().
Added the support for last_modified.
2003-03-07 13:45:33 +00:00
Sebastian Bergmann ba18cd1a45 Document 'final'. 2003-03-07 11:51:19 +00:00
Sebastian Bergmann 55826fbeb5 Fix class type hints example. 2003-03-07 06:29:07 +00:00
foobar 3cfc8a1ecc Create php_version.h in the correct directory 2003-03-07 06:18:17 +00:00
Sebastian Bergmann 63dfff02b1 Update 'abstract' section. 2003-03-07 05:19:19 +00:00
foobar 3c9155e0cb Renamed OnUpdateInt -> OnUpdateLong to prevent further misunderstandings.
# Intentionally left out any 'alias' for it, this way 3rd party extension
# maintainers will really NOTICE the change.
2003-03-07 05:15:28 +00:00
foobar e32eaf29de Fixed typo caught by Dave. 2003-03-07 04:32:36 +00:00
c9181cc9a9 NEWS update 2003-03-07 01:32:47 +00:00
f303054b9e ChangeLog update 2003-03-07 01:32:35 +00:00
foobar 1b38773eef WS & CS fixes 2003-03-07 01:03:04 +00:00
foobar 2da432cc19 WS & CS fixes 2003-03-07 00:52:04 +00:00
foobar 8d6c858aba WS & CS fixes 2003-03-07 00:40:54 +00:00
foobar 66052056c7 Better fix for the memleaks (bug 19943) by Moriyoshi 2003-03-07 00:28:25 +00:00
Marcus Boerger 4a152cad0c abstract classes must now be declared abstract 2003-03-07 00:01:08 +00:00
Zeev Suraski 805f98065d Fix warnings 2003-03-06 23:45:50 +00:00
Zeev Suraski ce4690685d Fix error message 2003-03-06 23:09:57 +00:00
David Hill 5c90216d2c 64-bit correction to variables passed to zend_parse_parameters
@64-bit correction to variables passed to zend_parse_parameters (Dave)
2003-03-06 23:07:28 +00:00
Zeev Suraski 0338111950 Require abstract classes to be explicitly declared 'abstract', in order to
avoid making developers traverse the entire class/interface hierarchy
before they can figure out whether a class is instantiable
(ok, so it makes sense :)
2003-03-06 22:53:23 +00:00
Stefan Esser af4aa97d1e Fixing functionicalls with variable number of parameters... 2003-03-06 20:31:20 +00:00
Moriyoshi Koizumi 2d40fe2222 Further testing on this feature should have been done... 2003-03-06 19:37:19 +00:00
Moriyoshi Koizumi c775318c44 Fixed typo 2003-03-06 16:55:00 +00:00
Sebastian Bergmann 44b6894361 -german+english+. 2003-03-06 16:39:45 +00:00
Sebastian Bergmann 8f8a534c7a D some TBDs 2003-03-06 16:30:21 +00:00
foobar 888a084ccb added test for the memleak part from bug #19943 2003-03-06 16:29:05 +00:00
foobar 4a8abb2f3d Fixed bug #19943 (the memleaks) 2003-03-06 16:27:05 +00:00
Moriyoshi Koizumi 1f85425c4d Fixed typo 2003-03-06 16:20:08 +00:00
Ilia Alshanetsky 2b13eb4f53 More cleanup of the zend_strip() function.
No longer strip __LINE__, since while it may become useless it could break
code where __LINE__ is passed as a function parameter.
2003-03-06 15:38:28 +00:00
Ilia Alshanetsky 2cb46d4479 Fixed in zend_strip() that corrupted heredoc.
Optimized the writing routine by moving from putchar() to fwrite().
Changed hardcoded opcode # to it's defined name.
2003-03-06 14:47:13 +00:00
Zeev Suraski 44347cf64b Change opcode name 2003-03-06 14:42:36 +00:00
Zeev Suraski ff76511a08 Add class type hints 2003-03-06 14:31:17 +00:00
3944d7d897 ChangeLog update 2003-03-06 01:33:18 +00:00
Sascha Schumann 90e5afe8a2 Allow shared modules to be built using $(CXX) 2003-03-05 22:00:45 +00:00
Zeev Suraski 812d91d08c Fix auto globals 2003-03-05 21:36:30 +00:00
Moriyoshi Koizumi 9bdc86973b Fixed a small leak in the convert filter code 2003-03-05 17:51:33 +00:00
Ilia Alshanetsky 4e6997ddf9 Fixed bug #22550 (overflow protection for upload_max_filesize ini setting). 2003-03-05 17:00:09 +00:00
Ilia Alshanetsky 4f4f0a9771 Added test case for bug #22544. 2003-03-05 16:19:08 +00:00
foobar 45964cb629 - Fix for some unixware compile problem. (comment by Sascha :) 2003-03-05 16:12:23 +00:00
Ilia Alshanetsky d31fa3da61 Better identification of bundled GD library. 2003-03-05 16:08:01 +00:00
Ilia Alshanetsky fd088722a7 Fixed bug #22544 (missing fix from official gd). 2003-03-05 15:57:28 +00:00
Ben Mansell 64bb5135d9 C++ -> C comments 2003-03-05 15:01:13 +00:00
Wez Furlong b68739f7f9 - Remove legacy non-streams code (as discussed with Brad).
- Make get_http_header_value() work using case-insensitive compares
  for the header names, as per relevant RFC's.
- General performance boost for get_http_headers().
- Fix a crash bug when a malformed URL is passed to the soap client.
- Implement https:// support in the the soap client. (does not verify
  the remote server certificate; it provides an encrypted link only).
- Provide a hook for libxml to parse files using any registered PHP
  wrapper, including https://, ftps:// and any user-space streams.
2003-03-05 14:23:56 +00:00
Zeev Suraski 6ad2420d2d Implement $obj::static_func() 2003-03-05 13:25:33 +00:00
Corne' Cornelius 5ab857c8b9 - Reverted emalloc(),efree() changed for persistant connection resources 2003-03-05 13:17:00 +00:00
Ben Mansell 7af6973d43 Update build instructions for Zeus web server 2003-03-05 11:50:18 +00:00
Zeev Suraski 26dd8492ed Add support for interfaces 2003-03-05 11:14:44 +00:00
Corne' Cornelius e25dabc747 - Changed malloc() and free() to emalloc() and efree() 2003-03-05 09:38:00 +00:00
Moriyoshi Koizumi d2eb897739 Added missing phpinfo entry (Russian support) 2003-03-05 06:16:22 +00:00
41a7bc4271 ChangeLog update 2003-03-05 01:33:51 +00:00
Marcus Boerger f5a7a1c094 Use stream locking support
# needs more testing
2003-03-04 23:45:48 +00:00
Wez Furlong 8e5aaa0e7c Miscellaneous compilation warning, coding standards, build related,
memory leak and segfault related fixes.

The simple soap client/server code examples now run without leaking or
segfaulting.
2003-03-04 23:01:24 +00:00
Ilia Alshanetsky 6efd9ea5c4 Added notes about locking functions. 2003-03-04 21:46:33 +00:00
Marcus Boerger cf7101d354 Support all possible configurations and simplify includes 2003-03-04 20:31:42 +00:00
Marcus Boerger 238abf8c7f fix dba by fixing key_len retrieval 2003-03-04 19:56:35 +00:00
Moriyoshi Koizumi a06b5bde22 Added a test case for bug #22510 2003-03-04 19:52:22 +00:00
Marcus Boerger 3981be30a8 do not use $GLOBAL[] 2003-03-04 19:32:06 +00:00
foobar 5546f1e259 typofix 2003-03-04 18:59:16 +00:00
Marcus Boerger 66c8b5d71c If this doesn't show "3.4" there is another error 2003-03-04 18:35:03 +00:00
Moriyoshi Koizumi aa40a02de8 64bit long fix 2003-03-04 17:18:40 +00:00
Moriyoshi Koizumi 3940c673e3 64bit long fix: patch by Dave Hill 2003-03-04 17:10:29 +00:00
Ilia Alshanetsky c5053e0f62 Fixed bug #22437. 2003-03-04 16:34:52 +00:00
Ilia Alshanetsky 53530765ff Added support for http redirects to ftp.
Fixed bug #22508 (Added protection against circular HTML redirects).
2003-03-04 16:04:05 +00:00
Ilia Alshanetsky b162e18a29 Skip test if running under safe-mode. 2003-03-04 14:37:38 +00:00
foobar 5c6fa351d5 These are in the branch. 2003-03-04 14:17:38 +00:00
foobar 61668d86b2 ws & CS 2003-03-04 14:12:39 +00:00
Zeev Suraski d5ada68654 Remove legacy code 2003-03-04 13:52:03 +00:00
foobar a18bf5c277 remove this from here as it belongs elsewhere 2003-03-04 13:50:24 +00:00
Christian Stocker 6804378398 MFB (make it really W3C compatible (unlink node, when in tree...)) 2003-03-04 13:38:38 +00:00
Zeev Suraski e0c3e2cf93 Remove redundant code 2003-03-04 13:36:16 +00:00
4c0c7837a7 ChangeLog update 2003-03-04 01:33:08 +00:00
Edin Kadribasic d1feae01d9 Credits update. 2003-03-04 00:10:11 +00:00
Georg Richter 338ec7b859 fixed bug in macro-definition 2003-03-03 22:50:56 +00:00
Georg Richter 359d21aa54 disabled output of errormessages 2003-03-03 22:50:34 +00:00
Georg Richter 281960ee78 added profiler support 2003-03-03 22:36:47 +00:00
Edin Kadribasic 6c20fa725e MFB: Enabled mcrypt_generic_deinit() on windows (#22520) 2003-03-03 21:25:25 +00:00
Ilia Alshanetsky fb4dab36f4 Compiler warning fix. 2003-03-03 19:57:18 +00:00
Ilia Alshanetsky 4705fef539 More compiler warnings fixed. 2003-03-03 19:46:16 +00:00
Ilia Alshanetsky 94302c72b3 Compiler warning fix. 2003-03-03 19:41:36 +00:00
Ilia Alshanetsky 66c05f7035 Fixed compiler warnings. 2003-03-03 19:37:09 +00:00
Jay Smith 243dd060d1 Added some tests for ZE2 features and their functionality. 2003-03-03 16:44:38 +00:00
Marcus Boerger cc52373c10 Adding tests for ctor/dtor handling 2003-03-03 11:18:59 +00:00
Marcus Boerger 447da280dd Adding tests for abstract static methods 2003-03-03 11:13:56 +00:00
Marcus Boerger 326b793faf Adding tests for final methods 2003-03-03 11:10:30 +00:00
Harald Radi 3f8c08b5e1 add missing strtolower 2003-03-03 01:56:14 +00:00
e2a27a23a5 ChangeLog update 2003-03-03 01:32:58 +00:00
Harald Radi 87f6d0d86d adding placeholder for the new disable_classes directive 2003-03-03 01:30:27 +00:00
Harald Radi 3e52882d3b adding disable_classes ini directive based on the
newly introduced zend_disable_class function
2003-03-03 01:27:22 +00:00
Harald Radi a700180f5d commiting zend_disable_class patch for George:
disabled classes will be replaced by dummy classes
that print a warning upon instanciation
2003-03-03 01:22:43 +00:00
Marcus Boerger acef51e677 (re)check in non ZendOptimizer version of test 2003-03-03 00:58:15 +00:00
Marcus Boerger 3ac6bb5017 remove entry done already 2003-03-03 00:15:50 +00:00
foobar 826d9ace59 typofix 2003-03-02 18:52:29 +00:00
foobar 6290b1c2cb Special case for MacosX.. 2003-03-02 18:50:45 +00:00
foobar 96f6d1fdbd Fixed bug #22485 (hardcoded shared lib extensions) 2003-03-02 18:47:35 +00:00
Zeev Suraski 1f63fba1b7 Fix old variable names 2003-03-02 15:41:12 +00:00
Zeev Suraski 36eae0b771 Fix destructors some more 2003-03-02 15:24:04 +00:00
Marcus Boerger cbb3e6fd2f fix problem in current HEAD
# strange why on earth does $GLOBALS['cwd'] produce a warning here?
# however we already have a global declarations so we use it for cwd, too.
2003-03-02 15:12:12 +00:00
Wez Furlong 71b1c7bdb0 typo fix 2003-03-02 15:11:42 +00:00
Uwe Schindler 99bec84027 *** empty log message *** 2003-03-02 13:45:23 +00:00
Zeev Suraski 622da33231 - Optimize $_REQUEST
- Fix phpinfo()
2003-03-02 13:35:01 +00:00
Zeev Suraski 98b990e336 Improve infrastructure 2003-03-02 13:33:31 +00:00
Wez Furlong ec86811298 Build-performance tweaks 2003-03-02 13:14:49 +00:00
Wez Furlong 6fed2e95b2 Fix build for activescript sapi 2003-03-02 13:09:48 +00:00
Derick Rethans a8f97a4842 - It was called _VARS, not _GLOBALS :-) 2003-03-02 12:46:37 +00:00
Zeev Suraski 4e55747a2b Add JIT initialization for _SERVER and _ENV
(it's less important for the others, even though it should be fairly
easy now too)
2003-03-02 10:19:15 +00:00
Zeev Suraski f7b7800479 Add infrastructure for JIT initialization of auto globals 2003-03-02 10:04:53 +00:00
Moriyoshi Koizumi da0d5a11ed Fixed my silly mistake in the filter code 2003-03-02 08:39:01 +00:00
abc088a232 NEWS update 2003-03-02 01:32:38 +00:00
4128be7f8d ChangeLog update 2003-03-02 01:32:28 +00:00
Zeev Suraski 805637b06d Fix mem leak 2003-03-01 19:08:41 +00:00
Moriyoshi Koizumi 6716188356 Reverted my previous commit 2003-03-01 18:47:18 +00:00
Wez Furlong c3e6bcd398 Ensure that all fields are initialized to NULL. 2003-03-01 17:27:23 +00:00
Moriyoshi Koizumi 3de8b87cba Fixed build 2003-03-01 15:49:06 +00:00
Wez Furlong c6e40696e1 Fix two crash bugs when optional parameters are not specified.
Fix folding markers.
2003-03-01 15:40:06 +00:00
Wez Furlong 242166d601 Don't shutdown() unix sockets.
It causes the server end to close down/break.
2003-03-01 15:22:21 +00:00
Wez Furlong a3cf1ab8f6 Folding fixes 2003-03-01 15:20:42 +00:00
Andi Gutmans 1a7c0d52dc - Make __construct() have higher priority than class name functions
- for constructors.
- Fix problem with the engine allowing final/abstract for the same method.
- Both patches are by Marcus Börger.
2003-03-01 14:57:49 +00:00
Wez Furlong 57f114969a Add streams headers to those used for shared extensions. 2003-03-01 13:52:11 +00:00
c1d79bd45e ChangeLog update 2003-03-01 01:40:00 +00:00
Wez Furlong 98224f5a05 New! 2003-03-01 01:28:50 +00:00
Pierre Joye 31509f124f update credits (ilia,myself) 2003-03-01 01:28:10 +00:00
Wez Furlong 558db0d87a Expose php_stream_copy_to_stream as stream_copy_to_stream(); a high
performance alternative to looping reads and writes.
2003-03-01 01:27:50 +00:00
Wez Furlong 349ce76f96 Tidy up stupid signed/unsigned issues with win32 by introducing a php_socket_t typedef. 2003-02-28 21:03:36 +00:00
Rasmus Lerdorf 1ad304c2c5 MFB config-file-scan-dir crash fix 2003-02-28 20:48:38 +00:00
Wez Furlong 68c1294462 Add this file... 2003-02-28 20:06:05 +00:00
Wez Furlong 1b53a2d12e New user-space functions:
. stream_socket_client() - similar to fsockopen(), but more powerful.
  . stream_socket_server() - Creates a server socket.
  . stream_socket_accept() - Accept a client connection.
  . stream_socket_get_name() - Get local or remote name of socket.

Tidy up some leaks and debug printfs.
Move more streams functions into streamsfuncs.c and streamsfuncs.h.
2003-02-28 19:53:21 +00:00
Ilia Alshanetsky 14bf872003 Fixed compiler warnings. 2003-02-28 17:26:28 +00:00
Hartmut Holzgraefe 5810393142 callbacks are now supported
(although there's still room for improvements)
2003-02-28 10:30:40 +00:00
Hartmut Holzgraefe 050e86fde4 it is still to early in the morning for coding :( 2003-02-28 07:57:00 +00:00
Hartmut Holzgraefe 80d267e271 make sure that GNU extensions exist for fnmatch() 2003-02-28 07:52:23 +00:00
foobar 535a73a71e - Fixed bug #22312 (crash on failed connection when curl_getinfo() was called).
(Phil Oleson <poleson@verio.net>)
2003-02-28 07:34:45 +00:00
foobar 08b5f6b2b9 - No need to include the ssl headers elsewhere but in ext/openssl
# ext/ftp doesn't use streams yet so it needs to include them.
2003-02-28 07:25:15 +00:00
foobar 282512abea YAZ 2.0 or later is required now. 2003-02-28 07:17:47 +00:00
Hartmut Holzgraefe 40a3530d8e - support for "callback" type
- proto syntax errors are now passed back to the top level parser
2003-02-28 06:37:05 +00:00
Hartmut Holzgraefe e9787cd2fd support for passing description file name on command line 2003-02-28 06:33:07 +00:00
foobar 95d756f467 ws & CS 2003-02-28 06:33:04 +00:00
Hartmut Holzgraefe 86572bd830 "on line #", not "in line #" 2003-02-28 06:30:59 +00:00
Hartmut Holzgraefe 06e43b97a8 added "callback" type (and fixed a stupid typo) 2003-02-28 06:28:53 +00:00
Hartmut Holzgraefe b042f45465 some DTD fixes and <code> as a toplevel element for .c and .h code snippets 2003-02-28 06:28:14 +00:00
Wez Furlong cd98ed7b0a Implement memory mapping for win32.
Could do with some rigorous testing; simple readfile() tests here appear to work.
2003-02-28 01:47:28 +00:00
7be8179520 ChangeLog update 2003-02-28 01:31:36 +00:00
Ilia Alshanetsky e089944308 compiler warning fixed. 2003-02-28 00:08:00 +00:00
Ilia Alshanetsky 912bef379d Fixed compiler warning. 2003-02-27 23:53:55 +00:00
Ilia Alshanetsky 57eabeea29 fixed compiler warnings. 2003-02-27 23:50:55 +00:00
Wez Furlong 0cec0bd8a9 streams.c -> streamsfuncs.c
# argh!
2003-02-27 22:48:13 +00:00
Wez Furlong 493ef36299 Update win32 build.
Since msvc sucks, I had to rename ext/standard/streams.c to ext/standed/streamsfuncs.c
2003-02-27 22:43:51 +00:00
Wez Furlong 5def83df0b Move streams specific stuff from ext/standard/file.c -> ext/standard/streams.c
Move win32 select implementation into win32/.
Will update win32 build in a moment.
2003-02-27 22:23:39 +00:00
Ilia Alshanetsky ea1f34e892 Fixed a bug that would cause filetype() to return "unknown" for
non-existent files on Win32.
2003-02-27 20:38:00 +00:00
Wez Furlong cfd8150b30 Add a generic meta data api for streams. 2003-02-27 19:10:24 +00:00
Rasmus Lerdorf ab1793290e The basic input filtering framework is done and working nicely 2003-02-27 18:45:37 +00:00
Wez Furlong 094da5c7a1 Update todo slightly 2003-02-27 18:23:50 +00:00
Wez Furlong 76ebaa6ee7 - Move https:// and ftps:// wrapper registration into the openssl module.
- Expose the http:// and ftp:// wrappers as PHPAPI
- Remove unused variables
2003-02-27 18:16:35 +00:00
Wez Furlong 203068d055 Fixup build for win32 2003-02-27 18:06:31 +00:00
Wez Furlong fd61f69077 Another big commit (tm).
Main Changes:
- Implement a socket transport layer for use by all code that needs to open
  some kind of "special" socket for network or IPC.
- Extensions can register (and override) transports.
- Implement ftruncate() on streams via the ioctl-alike option interface.
- Implement mmap() on streams via the ioctl-alike option interface.
- Implement generic crypto API via the ioctl-alike option interface.
  (currently only supports OpenSSL, but could support other SSL toolkits,
  and other crypto transport protocols).

Impact:
- tcp sockets can be overloaded by the openssl capable sockets at runtime,
  removing the link-time requirement for ssl:// and https:// sockets and
  streams.
- checking stream types using PHP_STREAM_IS_SOCKET is deprecated, since
  there are now a range of possible socket-type streams.

Working towards:
- socket servers using the new transport layer
- mmap support under win32
- Cleaner code.

# I will be updating the win32 build to add the new files shortly
# after this commit.
2003-02-27 17:43:38 +00:00
Ilia Alshanetsky 560e33968d Fixed bug #21410 (fixed handling of NULL or "" files on Win32) 2003-02-27 16:41:23 +00:00
foobar 4cac01352d ..if only all lakes were kossu.. 2003-02-27 15:52:38 +00:00
Hartmut Holzgraefe 52ca521b40 changed from strncpy to strlcpy on request 2003-02-27 10:21:32 +00:00
Sascha Schumann 60dcebd71a rename macro argument so that it does not partially match the string.
fixes a warning on unixware
2003-02-27 10:07:12 +00:00
Corne' Cornelius 5e09029ba7 - Changed maxmsglen in ifx_errormsg() back to normal 255 instead of 10 2003-02-27 08:59:16 +00:00
Corne' Cornelius 8a7822cf24 - Fixed possible Segfault in ifx_errormsg() using malloc() instead of emalloc() 2003-02-27 08:56:15 +00:00
4fbdee3c26 NEWS update 2003-02-27 01:44:34 +00:00
10fb8dadd8 ChangeLog update 2003-02-27 01:42:36 +00:00
Rasmus Lerdorf 0b5ffc4f1c MFB: We know ini file scanning will never be interactive, so speed it up a
bit.  Need a dynamic check for the language scanner.
2003-02-27 00:11:43 +00:00
Pierre Joye 972c04e50b add imagesavealpha wrapper (Jukka Holappa <jukkaho@mail.student.oulu.fi>,
2 Pierre-Alain Joye)
2003-02-26 23:22:09 +00:00
Pierre Joye fbd867184c add imagesavealpha wrapper (Jukka Holappa <jukkaho@mail.student.oulu.fi>,
Pierre-Alain Joye)
2003-02-26 23:21:44 +00:00
Rasmus Lerdorf ca2a28774a MFB: Get rid of a redundant syscall on non-Windows 2003-02-26 22:19:01 +00:00
Ilia Alshanetsky 695ae92c97 1) Make the output of system() binary safe
2) Solved a memory leak when the return_value variable passed by reference is
   not an integer in system()/exec()/passthru().
3) Solved a bug in exec(), which would make it append to the 2nd parameter
   (passed by reference) if the parameter is an array instead of overwriting it.
4) Changed the code to use the streams code, resulting in a smaller code base.
5) Various cleanups resulting in reduction of overall code base inside the file
   by ~ 1/3.
6) Speed improvements of ~2.5 times compared to previous performance (based on
   attached PHP script).
2003-02-26 22:11:12 +00:00
Marcus Boerger d737741329 allow keys as array(group, name) for handler inifile 2003-02-26 22:07:50 +00:00
Marcus Boerger ce04e8a91a ws 2003-02-26 22:05:32 +00:00
Marcus Boerger cdcb86a4da make it faster 2003-02-26 22:03:55 +00:00
Marcus Boerger 6fd9c32346 if skip param of dba_fetch is -1 stop do not restart search after last element 2003-02-26 22:03:00 +00:00
Derick Rethans 424c41a72e - Added an extra ini setting with which extra commands can be forced to
the sendmail deamon on a per-vhost base. The value in this ini setting
  will override all extra commands passed as the 5th parameter to mail()
  and will work in Safe Mode.
@- Added an extra ini setting (mail_force_extra_paramaters) which forces
@  the addition of the specified parameters to be passed as extra
@  parameters to the sendmail binary. These parameters will always replace
@  the value of the 5th parameter to mail(), even in safe mode. (Derick)
2003-02-26 20:04:16 +00:00
Derick Rethans 17acc55ad0 - Fix proto 2003-02-26 19:34:16 +00:00
Derick Rethans bc11c47ce6 - Whitespace 2003-02-26 19:25:24 +00:00
Hartmut Holzgraefe 499a97a9b2 changed to emalloc just to be safe 2003-02-26 16:06:07 +00:00
Hartmut Holzgraefe f7490c405b forgot to add these two on my last commit :( 2003-02-26 10:06:47 +00:00
Sebastian Bergmann 189d29061e Syntactic sugar is sweet. 2003-02-26 08:27:14 +00:00
Brad LaFountain 2c1b3b74b2 changes in the past shouldn't have compiled. 2003-02-26 03:04:00 +00:00
fd40b6d3f5 ChangeLog update 2003-02-26 02:03:08 +00:00
Ilia Alshanetsky aee0c18bde Made shell_exec() use streams, this simplifies the code and in some cases
makes it a little faster too.
2003-02-25 23:52:34 +00:00
Ilia Alshanetsky bce8bfdae4 MFH (forgot to put this fix into the 5.X tree). 2003-02-25 23:39:57 +00:00
Moriyoshi Koizumi e0ec5871d9 NEWS update 2003-02-25 20:41:07 +00:00
Moriyoshi Koizumi 991da29849 Set fgetss() free from the length parameter 2003-02-25 20:12:18 +00:00
Ilia Alshanetsky 503e49feae Fixed test. 2003-02-25 16:27:51 +00:00
Ilia Alshanetsky f29964e2ba Fixed bug #22414 and added a test case for it. 2003-02-25 16:21:00 +00:00
foobar 400f466040 Cleanup 2003-02-25 11:48:50 +00:00
foobar 7bd710a658 - Fixed bug #21224 (apache configure fails when using --enable-versioning) 2003-02-25 11:23:09 +00:00
Zeev Suraski 5793784c93 Get the bits right - final/private fix 2003-02-25 10:03:26 +00:00
foobar 411478e1f6 Fixed bug #20256 (snprintf() not defined) 2003-02-25 09:44:12 +00:00
Adam Dickmeiss 79a3618b36 Tabify 2003-02-25 08:34:33 +00:00
Adam Dickmeiss 45214b2340 yaz_search supports query type cql 2003-02-25 08:31:53 +00:00
foobar 5132f3cb54 Do not redefine zend_isnan if it is already defined. 2003-02-25 07:46:15 +00:00
foobar 3efd2b1317 typofix 2003-02-25 07:40:51 +00:00
foobar afc69728a8 (hope) fix some win32 build errors 2003-02-25 07:19:44 +00:00
Corne' Cornelius 086b317448 - Added Corne' Cornelius to CREDITS/Authors 2003-02-25 06:59:15 +00:00
foobar 43c4c6913e Another win32 build fix. 2003-02-25 06:54:04 +00:00
foobar c7a40ac1ff (hopefully) fix the build.. 2003-02-25 06:49:59 +00:00
foobar e9b5e34005 - Fixed bug #14245 ('make install' fails on AIX when using --with-apxs). 2003-02-25 06:35:43 +00:00
Corne' Cornelius 9f48874675 - Changed IFX_VERSION to work with Major versions with more then one digit 2003-02-25 05:33:28 +00:00
foobar 14f98fca45 fix bug #22324, libjdbcoci8.so is not necessarily needed.. 2003-02-25 04:36:54 +00:00
Ilia Alshanetsky e8823a205a Fixed bug #22402 (opening of ftp for read/write could fail due to invalid
return code handling).
Solution suggested by jan@jancm.org
2003-02-25 04:20:22 +00:00
Ilia Alshanetsky 348200b54d Fixed a crash in gdImageCopyMergeGray(). 2003-02-25 03:49:26 +00:00
Stig Bakken 04870428ab * fixed <provides> generation, provides elements are now included for
every non-private class, function and method
2003-02-25 02:44:10 +00:00
Stig Bakken d4dff9e92a * add new ZE2 tokens 2003-02-25 02:08:49 +00:00
Ilia Alshanetsky 5e118977cd Fixed various compiler warnings. 2003-02-25 01:44:57 +00:00
Ilia Alshanetsky 9e0fb1a33c Use native flock() whenever possible. 2003-02-25 01:41:58 +00:00
Ilia Alshanetsky 862634ffa5 Added locking to streams.
Allow PHP to automatically release locks on files when terminating the
stream.
Fixed bugs in the handling of the 3rd optional parameter to flock().
2003-02-25 01:39:06 +00:00
96563ce34f ChangeLog update 2003-02-25 01:33:26 +00:00
Moriyoshi Koizumi 4759048194 Removed unnecessary asserts 2003-02-24 23:13:40 +00:00
Moriyoshi Koizumi 14db9ea88d Fixed string.strip_tags filter so it reflects the change on php_strip_tags 2003-02-24 22:41:55 +00:00
Moriyoshi Koizumi b44b0b80e0 Made fgetss() binary safe too 2003-02-24 22:39:47 +00:00
Moriyoshi Koizumi 8f341f6a19 Fixed possible buffer overflow of php_strip_tags 2003-02-24 22:19:36 +00:00
Moriyoshi Koizumi 385a809694 Made strip_tags() binary safe 2003-02-24 22:01:12 +00:00
Sara Golemon 85a5ef3ec9 Initial re-implementation of userfilters after filterchain redesign by wez. More userspace API to come. 2003-02-24 21:56:19 +00:00
Wez Furlong 088e2692c3 MFB: Bunch of streams related fixes. 2003-02-24 21:40:23 +00:00
Ilia Alshanetsky 4474f9225a Fixed bug #22355 (PHP would remove folding from Subject & To fields). 2003-02-24 19:41:18 +00:00
Moriyoshi Koizumi a628a6a2de Added test case for bug #22367 2003-02-24 19:37:27 +00:00
Moriyoshi Koizumi 93b6d05bb8 Forgot to fix this part 2003-02-24 16:54:21 +00:00
Moriyoshi Koizumi a67e4dac8f Fixed the test as the result is just considered to be expected 2003-02-24 16:50:35 +00:00
Moriyoshi Koizumi f73f94f258 Fixed a signed / unsigned issue.
# imagine the case like "\\\xfe" where walk[1] takes a value that is greater
# than 127 in integer...
2003-02-24 16:29:00 +00:00
foobar 73bae37f26 Possible fix for #22259 + part 1/2 for fixing one AIX bug.. 2003-02-24 16:16:11 +00:00
Moriyoshi Koizumi 171fd93840 Style fix 2003-02-24 16:13:13 +00:00
foobar 75d6810d2c BFN 2003-02-24 16:01:38 +00:00
foobar 866fb82484 fix quotes 2003-02-24 15:11:54 +00:00
Zeev Suraski 80d0fa7aad (possibly) fix Win32 builds of the Apache 2 filter 2003-02-24 15:10:36 +00:00
Stanislav Malyshev 3cf20f86db fix exception handling 2003-02-24 13:35:47 +00:00
Hartmut Holzgraefe cfb377ce33 "key" has to be zero-delimited 2003-02-24 13:35:07 +00:00
Zeev Suraski 535aa63293 Add 'final' 2003-02-24 12:05:58 +00:00
Hartmut Holzgraefe edbc369721 - code generation: resources and phpinfo logo
- duplicate code elimination for prototype parsing
- improved phpinfo block (incl. logo)
- some input error checking
- documentation generation for ini-directives, constants
  and resources
2003-02-24 10:57:48 +00:00
Sebastian Bergmann 37d529f100 Remove obsolete not on redeclaring protected members. 2003-02-24 10:38:43 +00:00
Sebastian Bergmann 99c358c7cb Leftover. 2003-02-24 10:37:45 +00:00
Sebastian Bergmann 57ae4a5ac4 Initial documentation of namespace {}. 2003-02-24 10:35:39 +00:00
foobar cf72bfbae1 no c++ comments 2003-02-24 08:27:24 +00:00
Corne' Cornelius 7afe50fc5c (PHP ifx_errormsg) Fixed Informix bug where ifx_errormsg() would Segfault
on an unopened connecection and with an errorcode supplied
2003-02-24 06:34:37 +00:00
foobar a7132f74fd Always use the libtool which is build in the top_builddir. 2003-02-24 04:37:04 +00:00
foobar 6ed8720fa2 fix compile warning 2003-02-24 03:27:00 +00:00
Ilia Alshanetsky a3cb589b71 Fixed bug #22382 (fgetcsv did not handle \" correctly). 2003-02-24 03:13:25 +00:00
424636f0dc ChangeLog update 2003-02-24 01:32:18 +00:00
George Schlossnagle e49bc59a79 ws fix 2003-02-24 01:25:30 +00:00
George Schlossnagle f5fb75f390 hopefully a fix for 19919 2003-02-24 01:19:08 +00:00
foobar c87c4c7bd7 Extra paranoia checks if dn_skipname/dn_expand exist or not 2003-02-24 00:09:18 +00:00
foobar 8c3cd0344d MFB: Fix for open_basedir error message 2003-02-23 22:30:02 +00:00
Zeev Suraski 731a55ad52 Move abstract inheritance logic to the right spot 2003-02-23 13:58:48 +00:00
Zeev Suraski bb956372a5 Fixed abstract handling in inheritence 2003-02-23 12:51:40 +00:00
Stig Bakken 52ce358bde * upgrading XML_Parser to 1.0.1 2003-02-23 11:03:38 +00:00
foobar 58e4503942 Added missing headers and $Id$ tags. 2003-02-23 09:50:43 +00:00
foobar 406340713d MFB: Fixed bug #22356 (Do not add empty -I flags). 2003-02-23 09:37:13 +00:00
foobar de54cd0a08 Fix for bug #22353 2003-02-23 08:14:25 +00:00
foobar 6000c7b46c - Fixed bug #22376 (wrong httpd.conf modified when using INSTALL_ROOT) 2003-02-23 07:32:03 +00:00
Marcus Boerger 5f1975a432 New test which currently fails 2003-02-23 03:03:09 +00:00
Marcus Boerger 8e62295a5f Fix the name
# but yes Jani your sentence has better style
2003-02-23 02:45:10 +00:00
foobar 35f3f3ecc6 These both are experimental still. (there has been a note in config.m4
all the time but these marker files were missing)
2003-02-23 02:39:51 +00:00
foobar b1a1012a72 Style 2003-02-23 02:24:51 +00:00
1162d7b797 NEWS update 2003-02-23 01:32:03 +00:00
339031846e ChangeLog update 2003-02-23 01:31:45 +00:00
Marcus Boerger fbe7e1d977 Dropped optimization
# It is impossible to combine skip=-1 searches with firstkey/nextkey results
2003-02-22 23:47:09 +00:00
Marcus Boerger c0e9bd0830 INI files are case insensitive 2003-02-22 20:49:07 +00:00
Ilia Alshanetsky 8908faa47f Revent previous patch, adding of file_write_content() was premature. 2003-02-22 20:35:22 +00:00
Ilia Alshanetsky d2e2fbcc5b int/long change. 2003-02-22 20:33:11 +00:00
Marcus Boerger fef5b7c3a1 Remove testcode 2003-02-22 17:37:27 +00:00
Marcus Boerger 8ab1924ca3 @Added dba handler inifiles to support ini files. (Marcus) 2003-02-22 17:20:06 +00:00
Andrey Hristov 8c2dbd5f0f additional speedup for array_shift(). No need to rehash if the removed element's
key is not scalar and elements with scalar keys are already well numbered
(sequentially from 0) for some reason. This is the case if the leading
elements have no scalar indexes.
2003-02-22 13:55:11 +00:00
Andrey Hristov 94040a28ce rehash only in case something is changed.
#lowers the execution time in half on my machine on array with 1000 elements
#with nonscalar keys. Maybe it can be optimized further.
2003-02-22 10:54:26 +00:00
Georg Richter 0133377fba removed some comments 2003-02-22 07:47:46 +00:00
Georg Richter b63fbf2763 Fixed bug with stmt_close (libmysql bk version 1.1477 required)
Fixed bug with mysql_execute and float values
2003-02-22 07:31:01 +00:00
Justin Erenkrantz a7df9995cc Add xbithack support to apache2handler SAPI.
(configuration doesn't work, but that's not something new apparently.)
2003-02-22 04:42:34 +00:00
aac74c71d8 ChangeLog update 2003-02-22 01:31:43 +00:00
Wez Furlong c1bdf163ed Add comment about thread-safety of gethostbyname on win32.
Set the correct path to the win32 config.h file in the .dsp file.
2003-02-21 14:06:55 +00:00
foobar 7d256c1ae1 MFB 2003-02-21 10:43:32 +00:00
foobar b420beba61 - Fixed bug: #22339
# No NEWS, this was bug introduced by Marcus a while ago..
# Not present in php4.3.x branch
2003-02-21 08:45:58 +00:00
foobar 12ce594f64 MFB 2003-02-21 06:50:25 +00:00
foobar 161d31c8bc ZTS fixes 2003-02-21 06:46:12 +00:00
7884793dcb ChangeLog update 2003-02-21 01:32:23 +00:00
David Viner 1cf1e31acc this tiny change adds the location of apache includes and libraries that
are installed when you use the Apache Windows Installer
(C:\Program Files\Apache Group\Apache\*).  With this patch,
a windows developer who has used the Apache Windows Installer should be
able to compile the Apache sapi module without any modifications to his/her
installed tree.  It should have no effect whatsoever on anyone else.

--dviner
2003-02-21 00:14:33 +00:00
Rasmus Lerdorf d08a0e99c8 An input filter might not simply strip stuff, it might also turn things
into entities or use some other mechanism which causes the filtered data
to be longer than the original data.  Ergo, pass in the address of the
buffer instead so the filter is free to reallocate it.
2003-02-20 22:21:49 +00:00
Justin Erenkrantz 9d89ef3295 Remove C++-style comment. (Breaks Sun Forte compiler.) 2003-02-20 21:48:58 +00:00
Wez Furlong f8e414ef70 *cough*
Fix another stupid mistake.
2003-02-20 21:48:46 +00:00
Sara Golemon 2002ca0203 Reduce unnecessary filter applications when stream is (read|write) only 2003-02-20 20:05:31 +00:00
Stanislav Malyshev e645f20d07 Allow namespaces to have a number of parts. I.e., now you can do:
namespace foo {
	function abc() {}
}
...
namespace foo {
	functio def() {}
}
2003-02-20 19:01:53 +00:00
Justin Erenkrantz 9729930343 Clean up apache2handler SAPI.
Key improvements:
- Be streamy
- Re-enable virtual() support
- Set content_type correctly
- Remove unnecessary code and reintroduce some missing code
- Change signature from PhP to PHP
2003-02-20 18:20:03 +00:00
Moriyoshi Koizumi 63291af120 Fixed bug #22330 (overloaded strrpos() gives wrong results)
Patch by david at santinoli dot com. Thanks!
2003-02-20 17:52:42 +00:00
Derick Rethans 2bff9cae27 - Fixed testcase... you can never trust on RFCs it seems 2003-02-20 16:15:41 +00:00
Hartmut Holzgraefe 30212544c3 put constants into C output
do not limit int constants to numbers, C #defines are ok as strings
foobar(void) needs special treatment in code generation
2003-02-20 15:19:14 +00:00
foobar fa68f3c276 style 2003-02-20 13:42:29 +00:00
Derick Rethans 91766d4b9a - Fixed copy and paste bug 2003-02-20 10:33:55 +00:00
Derick Rethans b4b33b11ef - Also add the optional raw output parameter to md5_file and sha1_file. 2003-02-20 10:32:35 +00:00
foobar b7885999cb This is added in 4.3.2 2003-02-20 07:13:59 +00:00
foobar 0f593f899f Fixed bug: #22306 (pg_lo_seek($h, 0, PGSQL_SEEK_SET) succeeds but returns false) 2003-02-20 07:10:07 +00:00
Sascha Schumann 57d244c93d update 2003-02-20 06:57:42 +00:00
Derick Rethans ead7521e4d - No need to add the \0 ourselves, the estrndup in STRINGL takes care of
that for us.
2003-02-20 06:56:37 +00:00
Sascha Schumann 7ac81c2fbe update 2003-02-20 06:56:18 +00:00
Sascha Schumann 6f5b46c118 generally urlencode parameters 2003-02-20 06:18:16 +00:00
foobar 8a316d5f69 VCWD_LSTAT is not available on win32/netware 2003-02-20 06:16:37 +00:00
foobar 6043ee22e8 - Fixed bug #22299 (gethostbyname() crash with non-existing domain on MacOSX) 2003-02-20 05:34:58 +00:00
1c0f919af0 NEWS update 2003-02-20 01:33:17 +00:00
43b857b9b2 ChangeLog update 2003-02-20 01:33:00 +00:00
Ilia Alshanetsky 69094da0e8 Revert accidental commit. 2003-02-20 00:34:03 +00:00
Ilia Alshanetsky 3bff5c0419 Fixed bug #22308 (optimized passthru, code is now ~40 times faster). 2003-02-20 00:32:51 +00:00
foobar ea80f71214 consistent with the used style 2003-02-20 00:19:04 +00:00
Jon Parise 370c0cbf91 Add folding markers and editor directive blocks. 2003-02-19 21:36:00 +00:00
Rasmus Lerdorf afb8842cea Fix mbstring input_filter 2003-02-19 20:56:47 +00:00
Rasmus Lerdorf 7429c2dc3f Input Filter support. See README.input_filter for details.
@- Input Filter support added. See  README.input_filter. (Rasmus)
2003-02-19 19:41:09 +00:00
foobar 0458bb5e2b MFB 2003-02-19 18:45:51 +00:00
Harald Radi 53d70b2c14 prevent xdebug from crashing 2003-02-19 16:17:15 +00:00
Hartmut Holzgraefe 843e3449cf code for the special functions MINIT, MSHUTDOWN, RINIT, RSHUTDOWN, MINFO
and for private internal C helper functions may now be embedded into
the XML specification
2003-02-19 16:02:45 +00:00
Wez Furlong 397785bdcd typo.. 2003-02-19 15:07:45 +00:00
Wez Furlong c127eb74aa News about the ZE stream thing 2003-02-19 14:59:26 +00:00
Wez Furlong e88da9728f Fix stupid mistake that only affected interactive mode. 2003-02-19 14:52:56 +00:00
Hartmut Holzgraefe f7d6212b9c test specifications for MINIT and friends 2003-02-19 14:50:43 +00:00
Hartmut Holzgraefe 714a6d727e <code> inside <function> was supported but missing from the DTD,
added "role" attribute to support "internal" functions like
MINIT and stuff, "private" C functions not to be published as
PHP functions and "public" implemenations of PHP functions
2003-02-19 14:48:17 +00:00
Marc Boeren 85f81c6006 Fix for bug #22221: pgsql version for dbx_query suppressed a warning that
was trappable by using a user-defined error-handler. A different use of
pgsql_getrow removed the warning and thus the need for suppressing it.
2003-02-19 13:32:27 +00:00
Sascha Schumann fb6c60c46c some improvements 2003-02-19 10:57:21 +00:00
Hartmut Holzgraefe 889bb70a3f Microsoft Developer Studio project file (.dsp) generation added
for now both config.m4 and .dsp files are generated for the simples
case only (one .c file, one .h file, no external dependencies)
2003-02-19 10:12:28 +00:00
Hartmut Holzgraefe 1dc3726ff2 next generation ext_skel script - initial checkin 2003-02-19 10:07:22 +00:00
Corne' Cornelius 71e6110bc8 - Revert latest commit 2003-02-19 09:52:52 +00:00
foobar 7e3b50896c ws/style fixes 2003-02-19 09:38:11 +00:00
Corne' Cornelius ad56bbe4a4 - Added Input Descriptor Binding to be used by blobs. This fixed a bug
where ESQL/C would cause a Segmentation fault if the first blob in a
  result is NULL or '' as soon as it gets a result with blob != NULL
- Fixed leaks where blobs resources weren't always freed
2003-02-19 09:29:26 +00:00
foobar 2b90480fa9 scandir -> php_scandir, alphasort -> php_alphasort 2003-02-19 09:27:29 +00:00
foobar ec11fe04e9 Fix the possible conflicts with other libs (like libc-client) 2003-02-19 09:25:16 +00:00
foobar 8e3f23e3c0 ws fixes + missing $Id$ tags, headers added 2003-02-19 08:40:19 +00:00
Corne' Cornelius 48e5c1dae7 Updated IFX_VERSION entry to work with new Version output of ESQL/C
@- Updated IFX_VERSION entry to work with new Version output of ESQL/C (Corne')
2003-02-19 07:16:01 +00:00
foobar 4205e66f63 cleanup, documentation belongs elsewhere 2003-02-19 06:33:43 +00:00
6119fef3a3 NEWS update 2003-02-19 01:32:20 +00:00
b66dd24323 ChangeLog update 2003-02-19 01:32:10 +00:00
Ilia Alshanetsky a6ef609a37 Fixed bug #22283 (possible crash when opening relative URLs). 2003-02-19 00:49:31 +00:00
Moriyoshi Koizumi 69113a3099 Added string.strip_tags filter. 2003-02-19 00:12:23 +00:00
Moriyoshi Koizumi 6389a79ea5 Fixed memory leaks on conversion failure. 2003-02-18 23:30:36 +00:00
Moriyoshi Koizumi 8793a78fee Revived convert filter codes 2003-02-18 23:22:49 +00:00
Jon Parise 40dacff24a Remove a stray COM reference. 2003-02-18 23:22:15 +00:00
Rasmus Lerdorf 891835e7aa fileno() needs a FILE * here, and at least on FreeBSD with gcc-2.95.3
it is unable to figure out that this is indeed a FILE * and hence it
won't compile without this cast.
2003-02-18 22:29:27 +00:00
Marcus Boerger b8f518a451 - wrong use of sizeof(char)
- use define for block size
- a bit faster
2003-02-18 22:19:18 +00:00
Marcus Boerger 7b6fb4b7b3 coding style 2003-02-18 20:49:52 +00:00
Marcus Boerger 3db2b2bc7c avoiding problems 2003-02-18 20:48:05 +00:00
Moriyoshi Koizumi 816a9017be BFN 2003-02-18 20:34:35 +00:00
Derick Rethans d95c41eddb - Added new parameter to sha1() and md5() which return the digest as
binary data. (Original patch by Michael Bretterklieber <mbretter@jawa.at>)
- Added test cases for sha1() and md5() based on the testvectors in RFC 1321
  and RFC 3174.
@- Added new parameter to sha1() and md5() which return the digest as
@  binary data. (Michael Bretterklieber <mbretter@jawa.at>, Derick)
2003-02-18 20:31:19 +00:00
Moriyoshi Koizumi dd0462c78f Added description for the hand-made finite state machine. 2003-02-18 20:31:04 +00:00
Derick Rethans 0799d2db84 - Add check for proc_open() being available 2003-02-18 20:07:59 +00:00
Sascha Schumann 4ec77cfbb5 Refactor new-session-id code 2003-02-18 19:29:38 +00:00
Sascha Schumann 2699c26f42 Remember whether to send a cookie, so that we send out the correct
session id.  Also improve check for active session
2003-02-18 19:13:49 +00:00
Wez Furlong 4c4d77d23e Fix incorrect TSRMLS_CC usage.
Fix com_create_guid()
2003-02-18 19:03:44 +00:00
Sascha Schumann 32e0c8161c add session_regenerate_id() 2003-02-18 18:50:44 +00:00
Moriyoshi Koizumi bcd49d63c3 Fixed mb_send_mail() so that Content-Type and Content-Transfer-Encoding
headers are overridable by additional header parameters.
This patch fixes bug #21985 and bug #22064.
2003-02-18 18:49:47 +00:00
Moriyoshi Koizumi 89caaeb87c Fixed bug #21708 (ucfirst() trouble again)
# this bug is related to bug #21689
2003-02-18 18:11:34 +00:00
Zeev Suraski 955636af69 Avoid using a C++ reserved word 2003-02-18 17:18:28 +00:00
Moriyoshi Koizumi d4e9d48b18 Fixed bug #21689 (fgetcsv suppresses some characters before a separator)
The fix is suggested by Masahiro Nakayama <masa@sfc.wide.ad.jp>

# is* functions expect their argument to be an integer in range of 0-255
2003-02-18 15:15:22 +00:00
Zeev Suraski 7240050243 Commit missing stuff 2003-02-18 13:34:52 +00:00
Wez Furlong a5860e6e28 Fixup build for win32 2003-02-18 09:51:21 +00:00
Wez Furlong aad491817c Implement com_create_guid().
Add a special case for RETVAL_VARIANT when a variant is of type VT_DISPATCH but has a NULL dispatch pointer.
This kind of variant is returned by the WindowsInstaller automation interface.
2003-02-18 09:46:19 +00:00
Wez Furlong e52aac940f Implement simple stream support in the ZE scanners. 2003-02-18 09:37:54 +00:00
Georg Richter 500dfcfd62 added new function mysqli_stmt_store_result 2003-02-18 08:49:00 +00:00
Georg Richter 05d10452ba test for mysqli_stmt_store_result 2003-02-18 08:41:16 +00:00
Wez Furlong 2003d8eeb6 Implement com_indexed_prop_set() which allows setting of array-like indexed properties on COM objects.
It is expected that this function will be transient, waiting for engine-level and then rpc-level support to be implemented so that this can be integrated more completely.
I'm committing this now so that others can help develop the msi installer scripts that require this feature.
2003-02-18 07:36:31 +00:00
Sara Golemon 73c78270b6 Introduce //filter target to php: wrapper to allow inline application of filters during fopen() style opperations 2003-02-18 06:10:14 +00:00
foobar ffe0f52be6 style polizei 2003-02-18 03:27:55 +00:00
foobar 25a7332e9b getpriority() and setpriority() are in libc.. 2003-02-18 03:25:33 +00:00
foobar 28f4cb18ec nice() is part of libc, use AC_CHECK_FUNCS instead 2003-02-18 03:22:47 +00:00
Ilia Alshanetsky 5b858c9e94 Fixed compiler warning. 2003-02-18 03:12:38 +00:00
Sara Golemon 6fe4ab41f0 Fix stream_filter_(ap|pre)pend to allow attaching on the read and/or write chains. Automagically decide what to do if noone tells us. 2003-02-18 02:53:24 +00:00
Ilia Alshanetsky 02ea3ab085 New function news. 2003-02-18 01:44:53 +00:00
Ilia Alshanetsky 0503336ede Added pcntl_setpriority & pcntl_getpriority(). These functions can be used
to fetch and alter the priority of a process.
2003-02-18 01:41:06 +00:00
Wez Furlong 952d5f548e TSRMLS! 2003-02-18 01:39:26 +00:00
abcd236386 ChangeLog update 2003-02-18 01:34:00 +00:00
Wez Furlong 1e34a6bffc Add basic test of read filters and read filter chain. 2003-02-18 01:24:41 +00:00
Ilia Alshanetsky 0ad5cac954 By popular demand nice() is renamed to proc_nice().
A better error message for proc_nice() failure.
2003-02-18 01:23:51 +00:00
Wez Furlong 32165a5546 Implement new filter API, stage 1.
This breaks user-space filters (for the time being), and those
weird convert.* filters in ext/standard/filters.c

The filters stack has been separated into one chain for read and one chain
for write.

The user-space stream_filter_append() type functions currently only operate
on the read chain. They need extending to work with the write chain too.
2003-02-18 01:22:21 +00:00
Ilia Alshanetsky 0fd1009fcc Added nice() function, which allows changing of priority for the current
process.
2003-02-18 01:07:57 +00:00
Georg Richter 19a9b4f310 new test (class which extends mysqli. currently this test fails :( ) 2003-02-18 00:42:38 +00:00
Georg Richter 2f604f67e8 removed duplicate code 2003-02-18 00:32:47 +00:00
Georg Richter bc5eb4b3b4 fixed some leaks when mysql_close will be called before all stmts are freed. 2003-02-18 00:00:51 +00:00
Georg Richter bf348326bd additional tests for non freed objects 2003-02-17 23:29:58 +00:00
foobar 5c63fad55c MFB: Sanity check. 2003-02-17 22:45:50 +00:00
foobar b4ae3249fe Update 2003-02-17 18:10:53 +00:00
Georg Richter 3686b61548 test for mysql_fetch_row (oo-style) 2003-02-17 16:19:49 +00:00
Zeev Suraski 827434c2a3 Whitespace & minor renames 2003-02-17 15:07:57 +00:00
Zeev Suraski 76c6d7e721 whitespace 2003-02-17 15:04:29 +00:00
Zeev Suraski d22cc2f329 Improve handling of static member variables 2003-02-17 14:06:39 +00:00
Zeev Suraski 4934744b93 Win32 build improvements 2003-02-17 13:29:59 +00:00
Zeev Suraski fb607799cc More Win32 build improvements 2003-02-17 13:27:15 +00:00
Zeev Suraski 566e41226f Improve Win32 build performance 2003-02-17 13:20:41 +00:00
Wez Furlong cc66d8abaa Fix build under win32 2003-02-17 13:11:22 +00:00
Georg Richter 1f188f6554 added close method/alias for result object (for compatibility with statement and
link objects)
2003-02-17 09:38:32 +00:00
Georg Richter 1076328edb test for OO-Implementation (bind_result) 2003-02-17 08:54:23 +00:00
Shane Caraveo 216d1d00a5 you know it's time to get away from the keyboard when you do this.
fix my last fix
2003-02-17 06:45:37 +00:00
Derick Rethans 738d4f401f - Style polizei 2003-02-17 06:35:13 +00:00
foobar 7e9fb9f21f - Cleaned this mess a bit:
. Centralized the functions sunrise/sunset to php_sunrise_sunset
    to lessen duplicate code.
  . Made wrapper function php_do_date_sunrise_sunset() to lessen
    duplicate code.
  . Coding style fixes.
  . renamed sunfuncs.h -> php_sunfuncs.h
2003-02-17 06:28:07 +00:00
foobar d3e006eafd - These results were obviously got with TZ=GMT
# also prefixed the test results with the tested option
# so it's easier to see which one fails..
2003-02-17 06:23:22 +00:00
foobar 6b7a822cec Assuming the results were created in system with Asia/Jerusalem as TZ 2003-02-17 05:51:03 +00:00
Shane Caraveo eb6b7e80be fix it the right way 2003-02-17 05:47:56 +00:00
foobar 1c89652590 override precision ini setting 2003-02-17 05:02:05 +00:00
Shane Caraveo 8c73b6ab70 prevent possible crash if used in combo with mod_gzip
fix command line
2003-02-17 03:39:58 +00:00
Shane Caraveo 354a7d804b If you pass NULL, you do not get a NULL value, make sure it is. 2003-02-17 03:26:16 +00:00
foobar 4e3d4e4329 - Let's be consistent with these.. 2003-02-17 03:07:33 +00:00
774900c809 NEWS update 2003-02-17 01:31:54 +00:00
f303085465 ChangeLog update 2003-02-17 01:31:42 +00:00
Wez Furlong 6e296c5cbb Move some of the streams header into supplementary files
# Just when you thought you had learned your way around the streams code;
# I like to keep you all on your toes!
2003-02-17 00:20:38 +00:00
Shane Caraveo 9b997896b3 bring up to date with change in run-tests 2003-02-17 00:19:16 +00:00
Wez Furlong f871a58783 Fix compile warning 2003-02-17 00:01:31 +00:00
Wez Furlong f0b8f6dcfb Some additional sanity. 2003-02-16 23:46:45 +00:00
Wez Furlong 83f399fed0 Add the sunfuncs to the .dsp file for Moshe. 2003-02-16 22:39:01 +00:00
Wez Furlong 8305254fe6 Update win32 project for streams juggling. 2003-02-16 22:34:40 +00:00
Wez Furlong 63c95db648 Remove unused vars 2003-02-16 22:33:29 +00:00
Moshe Doron ea8d11cc87 @ new idate() function.
@ new date_sunrise() function.
@ new date_sunset() function.
#since i have no premission updating the win32 project file, i'm sending patch on the list.
2003-02-16 22:28:01 +00:00
Wez Furlong 2cc68ad7ad Move streams files around a bit, to ease maintenance.
I will update the win32 .dsp in a moment.
2003-02-16 22:19:28 +00:00
Georg Richter fe9a33a002 fixed output 2003-02-16 21:19:32 +00:00
Zeev Suraski ac0f7d9ed0 Fix complex cases of self-assignments (bugs #21600, #22231) 2003-02-16 19:18:23 +00:00
Zeev Suraski f079bb65ff Make EG(This) and EG(scope) available to internal methods 2003-02-16 19:10:27 +00:00
Zeev Suraski 004947221e Revert patches - they weren't ready yet! 2003-02-16 18:34:48 +00:00
Zeev Suraski 372e08772d Fix initialization 2003-02-16 18:17:19 +00:00
Georg Richter 60d1b378ed fixed compiler warning 2003-02-16 18:04:29 +00:00
Ilia Alshanetsky 148fdce82d Reverted lld -> lld patch and added explanation as to why it should not be
done.
2003-02-16 17:59:30 +00:00
Georg Richter c08bfd2e3f tested patch from Zeev (fixes oo-bug in ext/mysqli) 2003-02-16 17:47:23 +00:00
Ilia Alshanetsky ad1972fae9 Moved longlong conversion to a macro. 2003-02-16 15:56:57 +00:00
Ilia Alshanetsky 2ac79528c9 better skip condition. 2003-02-16 15:47:22 +00:00
Wez Furlong 32c1eafe85 Remove bogus test.
Append mode always causes written data to go to the end of the file,
regardless of the current seek position.
2003-02-16 15:42:14 +00:00
Wez Furlong 7e92f636ef Integrate Shanes patch that allows specifying the cwd and environment
for the child process created by proc_open().
2003-02-16 15:38:54 +00:00
Georg Richter c40eff35da test for mysqli_prepare_result 2003-02-16 13:48:00 +00:00
Stanislav Malyshev 3e45b23799 add support for ::foo syntax meaning "global one" 2003-02-16 13:27:33 +00:00
Wez Furlong ce432004be Fix bcmath build under win32.
# These problems occur because winsock2.h MUST be included before
#  windows.h.
2003-02-16 12:46:16 +00:00
Stanislav Malyshev c9b2ec7be7 remove debug prints 2003-02-16 12:04:41 +00:00
Georg Richter ffe43821d0 test for mysqli_stmt_affected_rows (delete command) 2003-02-16 12:04:21 +00:00
Georg Richter 6997d50ff0 added new function mysqli_stmt_affected_rows
added bigint support for mysqli_affected_rows
fixed memleak in mysqli_prepare (stmt->is_null)
fixed return type for mysqli_connect
2003-02-16 12:03:37 +00:00
Sebastian Bergmann 6d300baf84 ZTS fixes 2003-02-16 11:34:49 +00:00
Stanislav Malyshev e77eca7568 namespace patch - static variable access 2003-02-16 11:15:30 +00:00
Stanislav Malyshev a4c3b2ce80 Namespace patch. Big changes:
1. Nested classes are gone.
2. New syntax for namespaces:
namespace foo {
	class X { ... }
	function bar { ... }
	var x = 1;
	const ZZ = 2;
}
3. Namespaced symbol access: $x = new foo::X; - etc.
For now, namespaces are case insensitive, just like classes.
Also, there can be no global class and namespace with the same name
(to avoid ambiguities in :: resolution).
2003-02-16 11:12:43 +00:00
Wez Furlong 0a18a9d744 A add much more useful select(2) implementation than is provided by
windows sockets.  The winsock implementation will only work with sockets;
our implementation works with sockets and file descriptors.
By association, stream_select() will now operate correctly with files, pipes and sockets.

This change required linking against the winsock2 library.  In terms of
compatibility, only older versions of windows 95 do not have winsock2
installed by default.  It is available as a redistributable file, and is most likely installed by any OS patches (eg: Internet Explorer) applied by the user.

Also, add a win32 compatible pipe test when opening a stream from a pipe.  This test will only work on NT, win2k and XP platforms.  Without this test, interleaved fread() and select() calls would cause the read buffer to be clobbered.  I will be working on a fix for this issue for win9x.
2003-02-16 03:48:49 +00:00
5edec2a910 ChangeLog update 2003-02-16 01:32:24 +00:00
Anil Madhavapeddy ee3e64267c fix error msg typo 2003-02-16 01:31:46 +00:00
Marcus Boerger d4fd1c07b1 - Allow long option names
- Update CLI's manpage

@Added support for long options in CLI & CGI (e.g. --version). (Marcus)

# In contrast to the preliminary patch this should work now completely.
# If all long option names are accepted we may even think about MFHing.
2003-02-16 01:23:11 +00:00
Ilia Alshanetsky 824baa0384 New feature news. 2003-02-15 22:07:49 +00:00
Ilia Alshanetsky 616578d1d1 Added feature #19645 (ini parser can now handle quoted multi-line values). 2003-02-15 22:06:45 +00:00
foobar 3a94aeae72 - Fix unsetting of open_basedir, safe_mode_exec_dir and user_dir with
"php_admin_value <ini option> none"
- Fixes bug #22220
2003-02-15 20:22:19 +00:00
Ilia Alshanetsky 9f7fbaf5c2 Proper lib detection. 2003-02-15 20:09:49 +00:00
Moriyoshi Koizumi 22517ce0de Fixed bug #22234 2003-02-15 19:56:12 +00:00
Wez Furlong e035fe14e0 If a test does not have any data after 60 seconds of waiting, assume that
it died a horrible death and kill it.
This is useful on windows when a message box is popped-up during an automated
test-run.
2003-02-15 18:09:52 +00:00
Wez Furlong 27e3d6477f Add optional signal parameter to proc_terminate. 2003-02-15 17:33:11 +00:00
Wez Furlong c3c24054e8 Add proc_terminate() function to forcibly kill off a process created
with proc_open().
2003-02-15 17:18:57 +00:00
Ilia Alshanetsky 8a07cc45cf Fixed skip condition. 2003-02-15 17:06:35 +00:00
Georg Richter e671a8c3e4 added skipif section (innodb-support) 2003-02-15 16:21:35 +00:00
Moriyoshi Koizumi b069f35022 Fixed bug #22227
Added test case for bug #22227
2003-02-15 15:57:31 +00:00
Marcus Boerger ecaeb3004a fix parameter string (-R & -H) 2003-02-15 15:20:17 +00:00
Moriyoshi Koizumi 1b79da954c Added test case for bug #22231 2003-02-15 15:15:14 +00:00
Sebastian Bergmann 3b547e6fc4 Add .cvsignore for tests. 2003-02-15 07:12:09 +00:00
8764c02ce8 ChangeLog update 2003-02-15 01:35:51 +00:00
Ilia Alshanetsky f8e0290cd6 Allow mysqli to be built when imap (c-client) is used. 2003-02-14 21:27:13 +00:00
Ilia Alshanetsky c59240d599 CS fixes. 2003-02-14 20:15:11 +00:00
Ilia Alshanetsky 43eda85d5a Fixed compile warnings. 2003-02-14 20:14:44 +00:00
Georg Richter e8fd6662ae test for bind_result with show 2003-02-14 19:49:35 +00:00
Marcus Boerger c34fde086b a little bit slower but somewhat tricky and more flexible and it does not
allocate static buffers anymore
2003-02-14 19:43:06 +00:00
Moriyoshi Koizumi 9b49146dc1 Fixed a str_replace() bug similar to bug #22224 2003-02-14 18:59:50 +00:00
Moriyoshi Koizumi b3a8349191 Fixed bug #22224 (implode changes object references in array)
Added test case for the bug
2003-02-14 18:42:36 +00:00
Ilia Alshanetsky f6e4904759 CS fixes. 2003-02-14 18:35:30 +00:00
Ilia Alshanetsky 410dd6abaf Fixed a typo. 2003-02-14 18:27:20 +00:00
Georg Richter 2841d94f02 fixed compiler warning 2003-02-14 18:18:12 +00:00
Georg Richter c544a77836 fixed a bug in mysqli_fetch
removed c++ comment (thx to Jani :)
fixed compiler warning
2003-02-14 18:17:25 +00:00
Ilia Alshanetsky 031dd997fb Missing portion of the previous patch. 2003-02-14 16:49:09 +00:00
Ilia Alshanetsky 4f1b6364f9 Buncha Fixes.
* Fixed a number of memory leaks.
 * Fixed some php_error_docref() calls that tried to print non-existent
   arguments.
 * Fixed some signed/unsigned problems.
 * Fixed the MYSQLI_FETCH_RESOURCE macro so that compilers do not complain
   about un-initialized variables.
 * CS fixes.
2003-02-14 16:45:31 +00:00
Georg Richter 14bc73defe bind_result fix 2003-02-14 16:31:51 +00:00
Georg Richter 1a7a41cf9f fixed a bug in prepare/bind 2003-02-14 16:31:22 +00:00
foobar 92279e5e06 MFB 2003-02-14 14:38:20 +00:00
Thies C. Arntzen e62f37c804 init current_execute_data befor we start executing 2003-02-14 12:25:09 +00:00
Thies C. Arntzen 52fb0d7bce ups 2003-02-14 12:05:16 +00:00
Thies C. Arntzen c1706b50bf add really nice dump_bt function for debugging in gdb 2003-02-14 12:04:03 +00:00
801210d60c ChangeLog update 2003-02-14 01:33:16 +00:00
foobar f9f4644a84 - Don't add libcrypt if the crypt() function is provided already.
(by libc, like in HP-UX)
2003-02-14 01:27:15 +00:00
Zeev Suraski 884419044b Fix error handling in illegal property access 2003-02-13 22:47:25 +00:00
Sara Golemon a9e1b5f641 MFB(r-1.68.2.5) Bug 22052 2003-02-13 22:20:21 +00:00
Marcus Boerger 0b2216e03d pass tsrmls instead of fetching it always 2003-02-13 21:41:00 +00:00
Wez Furlong f98f27ffa9 MFB: Fix for bug #22199 2003-02-13 21:08:04 +00:00
Sara Golemon d1d0d0b71a Bug #22059. ftp_chdir() causes segfault. efree(ftp->pwd) was being called without knowing for certain that ftp->pwd
actually pointed anywhere.
2003-02-13 19:48:49 +00:00
Marcus Boerger aa8dfa0b74 fix non FCGI build 2003-02-13 19:46:40 +00:00
Ilia Alshanetsky 2443adb8b5 Added test case for bug #22187. 2003-02-13 19:07:20 +00:00
Ilia Alshanetsky f9669f6c49 Modified fix for bug #22187 so that it does not affect handling of numbers
represented in scientific notation.
2003-02-13 19:02:34 +00:00
foobar e6841d6c35 Added test for those different crypt() methods. Hopefully I got the results right. 2003-02-13 18:49:57 +00:00
Georg Richter bad0ab1576 include file for test 2003-02-13 18:21:37 +00:00
Shane Caraveo a13ef6ec42 There is *absolutely no* definitive way to know if argv0 is the
actual php script, or if it is the beginning of a query string.
Additionaly, passing parameters on the command line is
not part of CGI spec, and is not required by either
Apache or IIS.  So I have removed that code altogether,
and done some further cleanup.  Also fix pre4.3 behaviour if fix_pathinfo=0.
I've tested with IIS and Apache 1.3.27 on w2k and RH 7.3.
2003-02-13 18:21:12 +00:00
Ilia Alshanetsky 55840914cb Fixed warnings. 2003-02-13 17:39:18 +00:00
Wez Furlong cddcaf737f Another IS_SLASH fix. 2003-02-13 17:36:35 +00:00
Ilia Alshanetsky 7fffe4338a Fixed bug #22207 (e notation in *printf would be missing a 0 when there is
no exponent).
Added a test case for the bug.
2003-02-13 17:25:31 +00:00
Wez Furlong cd7d762b79 A probable cure for many getcwd/relative include related problems for win32. 2003-02-13 17:20:20 +00:00
Ilia Alshanetsky 586672fd16 PAD() macro didn't increase the buffer size resulting in loss of the
padding.
2003-02-13 17:17:03 +00:00
Edin Kadribasic f0e7b24e60 Use my_ulonglong instead of unsigned long long to make msvc++ happy. 2003-02-13 17:15:22 +00:00
foobar 19dc5e03a0 change history 2003-02-13 17:01:28 +00:00
Harald Radi 3341568c09 MFB PHP_4_3 2003-02-13 16:46:53 +00:00
Edin Kadribasic fc6543e905 Adding missing .cvsignore 2003-02-13 16:38:28 +00:00
Ilia Alshanetsky 343b92e66e Fixed a typo. 2003-02-13 16:22:03 +00:00
Ilia Alshanetsky c28753de76 Simplified the mode validation code & added support for read+write mode to
'x' mode.
2003-02-13 15:09:39 +00:00
Ilia Alshanetsky f9457bf842 Added missing header needed for rpc_error(). 2003-02-13 14:54:43 +00:00
Wez Furlong 2953892df3 Clarify error message. 2003-02-13 14:52:54 +00:00
Edin Kadribasic ab4bbd51ff Initial windows project file 2003-02-13 14:46:11 +00:00
Ilia Alshanetsky f8eba6ded2 Added 'x' mode for fopen() used on local files. This mode will create a new
file only if a file does not already exist (O_CREAT|O_EXCL).
2003-02-13 14:40:17 +00:00
Wez Furlong 77b98f8615 Potential fixes for #21809 and #22099. 2003-02-13 14:35:47 +00:00
Wez Furlong 95e7c2e9ed Use FILE*-less implementation for php://(stdin|stdout|stderr) 2003-02-13 13:43:37 +00:00
Wez Furlong 35878992d8 Moving away from ANSI stdio for plain files. 2003-02-13 13:40:34 +00:00
Wez Furlong 1c3de808b9 Avoid problems with chunk_size and auto_detect_line_endings. 2003-02-13 13:38:20 +00:00
Wez Furlong b81ea669a0 cli should be allowed to have the chroot() function. 2003-02-13 13:35:55 +00:00
Wez Furlong 068c90bd1d Whitespace-fix these goto labels. 2003-02-13 11:12:56 +00:00
Wez Furlong b6c008305f Update installer so that no extensions are enabled by default. 2003-02-13 10:25:30 +00:00
Georg Richter 124f76c557 removed warnings (unused vars) 2003-02-13 08:54:46 +00:00
Uwe Steinmann 1b46eeb1cf - added more missing strcmp() 2003-02-13 07:59:24 +00:00
foobar 2f2f6739b4 Added HAVE_APACHE define. 2003-02-13 07:47:21 +00:00
foobar 7c989710a8 Merged these to 4.3.x branch 2003-02-13 07:16:19 +00:00
foobar a91a14ab16 ws fix 2003-02-13 07:02:53 +00:00
Sascha Schumann 778378dcc6 include limits.h for portability 2003-02-13 02:30:10 +00:00
Sascha Schumann 6ab6ad12a0 portability work 2003-02-13 02:24:38 +00:00
b0dd1b0eb0 ChangeLog update 2003-02-13 01:33:15 +00:00
Georg Richter 6bddc36966 new tests 2003-02-13 01:23:28 +00:00
Wez Furlong b2b3596257 Fix for Bug #21815 (fpassthru ignored buffered data but then complained anyway) 2003-02-13 01:17:45 +00:00
Georg Richter 44559a18f9 added new function int mysql_get_server_version
this function is available since libmysql change set 1.1450 (2002-02-13)
2003-02-13 00:11:17 +00:00
Georg Richter ef086ad82d changed function entries for statements 2003-02-12 21:07:28 +00:00
Ilia Alshanetsky 24a86f2064 Fixed bug #22191 (frontbase build was broken for people using older
versions).
2003-02-12 20:44:00 +00:00
Ilia Alshanetsky f924aaf647 Fixed bug #22187 (spprintf function did not handle floats correctly). 2003-02-12 20:41:53 +00:00
Sascha Schumann 0cb1ff3bda - trims +100 lines of code from spprintf.c
- introduces an overflow detection in STR_TO_DEC
    - eliminates dead code (e.g. assert(foo); if (foo) {..})
    - removes unused macros from the original code
    - simplifies code (e.g. cc was completely dropped)
    - improves run-time performance

      The max_len feature is never used in our code base.
      Nevertheless, cpu cycles were spent on each string
      operation to check the current length against max_len which
      is quite inefficient.  Thus, I've moved the check to
      vspprintf where it is applied only once per call.
2003-02-12 19:38:10 +00:00
Mark L. Woodward 8fee867865 Fix for GCC 3 2003-02-12 18:34:21 +00:00
foobar e337c5d1c6 Fixed the "member fd in BUFF" test for --with-apxs builds 2003-02-12 17:09:31 +00:00
Ilia Alshanetsky a2bd043e7b Removed zend_get_module(), this function is not used by anything and more
importantly. it does not work. It tries to find data based on numeric keys
in hash table using string keys.
2003-02-12 16:50:51 +00:00
Zeev Suraski 3c2a1255cd Fix declaration of class members that don't have an explicit access modifier 2003-02-12 16:28:34 +00:00
Derick Rethans b8ad8c9f83 - Let's add the config.m4 file too :-) 2003-02-12 16:24:41 +00:00
foobar d85cf5f1b5 added missing entry 2003-02-12 16:18:59 +00:00
Ilia Alshanetsky e1802d7228 Fixed bug #22048 (incorrect insertion of session id when tabs are used to
separate tag elements).
2003-02-12 14:56:13 +00:00
Uwe Steinmann 8c5ece1637 - Fixed compile errors and some oddities like missing strcmp 2003-02-12 11:18:43 +00:00
Georg Richter 91eeae5e1d added new tests 2003-02-12 10:40:19 +00:00
Georg Richter 2706394076 removed function mysql_num_warnings (libmysql change). 2003-02-12 10:39:06 +00:00
foobar 7788cefdd3 "Generate" the man page so that it gets correct version always. 2003-02-12 04:38:30 +00:00
foobar cd7260537a Man page is added in 4.3.1, moved this entry to branch 2003-02-12 04:08:29 +00:00
foobar 5896410c81 - Added the man page installation 2003-02-12 04:04:36 +00:00
foobar de3b1acfc3 Fix obvious errors.. 2003-02-12 03:05:28 +00:00
foobar 96a6cc11a3 news news news.. 2003-02-12 02:58:13 +00:00
405e10f6ce ChangeLog update 2003-02-12 01:31:55 +00:00
Georg Richter ff8f0eb7da adding a few tests 2003-02-12 00:46:29 +00:00
Georg Richter 7d7c07a77c initial upload 2003-02-12 00:45:53 +00:00
Sascha Schumann 1fc7f0d937 supply mandir to makefile 2003-02-11 23:46:39 +00:00
Ilia Alshanetsky 246a075624 Fixed bug #22048 (crash in imap_headers when the e-mail contains an
abnormally large number of special characters).
2003-02-11 22:57:22 +00:00
Ilia Alshanetsky 8c14bf2429 New function news. 2003-02-11 22:49:22 +00:00
Ilia Alshanetsky 53f96c8b02 Added strpbrk(), which is essentially a wrapper around C's strpbrk function
that allows searching through a string for a character list.
2003-02-11 22:47:26 +00:00
Stefan Esser a0873a8f7d size matters not. 2003-02-11 21:44:02 +00:00
Stefan Esser d2c550e991 8 + 20 + 1 + 1 = 30
There was no Bufferoverflow on 64bit systems.

And the "fix" broke the header code on systems with old style snprintf.
2003-02-11 21:41:32 +00:00
foobar fdba676769 - Fixed some weird crashes causd by the new default behaviour
of libtool 1.4.3
- Require libtool 1.4.3 or newer from now on.
2003-02-11 21:11:42 +00:00
Marcus Boerger c681320471 Make that clear 2003-02-11 20:34:24 +00:00
Marcus Boerger 7fec2a3856 Document -H added by Ilia 2003-02-11 20:31:34 +00:00
Marcus Boerger e92f8f64e3 speed up 2003-02-11 20:30:37 +00:00
Melvyn Sopacua e4a08fb43d Update time 2003-02-11 20:26:27 +00:00
Ian Holsman ec68ed4aee initial checkin of the apache2 SAPI using a handler instead of filters.
TBD: src highlighting
     better post handling
2003-02-11 17:40:11 +00:00
Ilia Alshanetsky f3ac7fc9c6 Added -H option to CLI binary. This option can be used to hide any arguments
including the script name passed to the CLI binary.
2003-02-11 16:18:42 +00:00
Zeev Suraski beaf84ea17 Fix require() handling - that's an old bug! 2003-02-11 15:41:46 +00:00
Zeev Suraski f983e13e4e Fix random crashes 2003-02-11 13:46:30 +00:00
Zeev Suraski 2814504143 Improve parser handling of 'abstract' 2003-02-11 09:48:37 +00:00
Moriyoshi Koizumi 1068156252 Fixed ZTS build 2003-02-11 03:55:08 +00:00
foobar fccbb1431b - There's no point in allowing using both --with-readline and --with-libedit
the same time. Prefer --with-readline.
- Use PHP_ADD_LIBRARY when there is no path available.
2003-02-11 03:24:30 +00:00
foobar 50fd2d5745 moved entry to branch NEWS 2003-02-11 03:07:39 +00:00
foobar 08f3bb094a - Fixed bug: #21549 (problem with Ingres II persistent connections) 2003-02-11 02:42:59 +00:00
Sascha Schumann fa6d2d48c5 move check to proper place 2003-02-11 02:34:52 +00:00
Sascha Schumann 67f18fcf6c Detect whether BUFFs contain a fd element. IBM is hiding the actual
descriptor behind a void *, so we just disable this for IBM servers
2003-02-11 02:23:29 +00:00
90ade25ad0 ChangeLog update 2003-02-11 01:31:35 +00:00
Frank M. Kromann 08b788dd44 Bug #20426. Convert SMALLDATETIME correct 2003-02-11 01:24:07 +00:00
Stig Bakken 710b20a528 * clean up so Jani is not so confused 2003-02-11 01:17:20 +00:00
Sascha Schumann e3831c2ef5 Add "log to stdout" feature 2003-02-11 00:58:54 +00:00
Harald Radi c7de5d15b7 clean up source and improve hashing for implicitly
created objects (aka return values)
2003-02-11 00:55:27 +00:00
Harald Radi be950d9c51 improved reverse lookup of ProgID based on an IDispatch pointer 2003-02-11 00:54:27 +00:00
Sascha Schumann 2393b5bfc5 update regarding session.save_path 2003-02-11 00:50:00 +00:00
Sascha Schumann a10f0830e6 support setting the filemode using session.save_path 2003-02-11 00:42:54 +00:00
Sascha Schumann 5e601732a3 use appropiate prefixes in the ps_module structure so we don't clash
with syscalls
2003-02-11 00:42:14 +00:00
foobar 5336e06016 fix news entry per for file() parameter.. 2003-02-11 00:34:35 +00:00
foobar 21390a83f0 Blah 2003-02-11 00:09:03 +00:00
foobar c68961cc7b krhm.. 2003-02-11 00:08:51 +00:00
Wez Furlong 0c70df4907 fix rpc_error call 2003-02-10 23:22:49 +00:00
Ilia Alshanetsky 53b7b0eb8c Merged the flags for the file() function into a single flag. 2003-02-10 22:26:53 +00:00
Harald Radi 5066caef31 a bunch of fixes 2003-02-10 20:59:11 +00:00
Harald Radi ef9bc6eaad s/com/skeleton/ is not always a good idea 2003-02-10 20:58:30 +00:00
Wez Furlong 0ff83111c7 byref really means that we want the zval... 2003-02-10 20:30:24 +00:00
Moriyoshi Koizumi 6d95ea199d Fixed possible snprintf problem
# besides snprintf returns int value, not uint / size_t...
2003-02-10 20:18:08 +00:00
Moriyoshi Koizumi 9450b1e4b0 Fixed possible buffer overflow in 64bit systems 2003-02-10 20:11:10 +00:00
Moriyoshi Koizumi 4fc819b9e8 dot dot dot.. 2003-02-10 19:55:18 +00:00
Moriyoshi Koizumi 57fa382b4e MFB: Fixed typo 2003-02-10 19:53:13 +00:00
Moriyoshi Koizumi 9d5811c1f0 Jani happification 2003-02-10 19:45:34 +00:00
Moriyoshi Koizumi a143bed5d8 New function
# "deprecate me!"
2003-02-10 19:39:43 +00:00
Moriyoshi Koizumi 59be236a8e Removed unnecessary code 2003-02-10 19:12:02 +00:00
Moriyoshi Koizumi 21f766b7a4 Fixed zlib.output_compression so it can work even if zlib extension is built as shared 2003-02-10 19:04:44 +00:00
Melvyn Sopacua 63aa8acf02 MFB: disable output buffering 2003-02-10 18:58:49 +00:00
Wez Furlong 447976d8ee Implement com_describe 2003-02-10 18:37:28 +00:00
foobar 011229ef15 - Updated libtool to 1.4.3 which has test for the sed problem.. 2003-02-10 17:09:48 +00:00
Zeev Suraski f196e11f42 Fix zend_initialize_class_data() 2003-02-10 16:46:05 +00:00
Zeev Suraski c17c7a2bfa Centralize class initialization 2003-02-10 16:11:24 +00:00
Jon Parise 1b8755994e Correct the spelling of 'supported'. 2003-02-10 15:46:47 +00:00
Stig Bakken 983dd29a7e * update PEAR::isError phpdoc 2003-02-10 14:27:21 +00:00
Stig Bakken 4ef53806f4 * PEAR::isError accepts second parameter that will be matched against
the error code.  PEAR::isError($obj, FOO) will return true if $obj
  is an error object, and $obj->getCode() returns FOO.
2003-02-10 14:26:19 +00:00
Stig Bakken cab18bc2de * the "a" in "pear" is "application" now 2003-02-10 14:17:32 +00:00
Wez Furlong 35639435c9 Error reporting clean up 2003-02-10 13:13:28 +00:00
Zeev Suraski 6317e26576 - Treat $this->foo inside class X as an implicit 'public $foo' if X::$foo
is not explicitly declared
- Forbid multiple declaration of the same variable
2003-02-10 12:46:58 +00:00
Wez Furlong 81795c7f11 Newly created objects should use a separate function_table from the global class entry table.
For objects instantiated via new, make sure that intern->function_table uses the newly created table when the class is registered.
For generic per-object hashing, copy the ce->function_table into intern->function_table.
2003-02-10 12:36:07 +00:00
Wez Furlong b0894e7eba Error reporting leaks and cleanup 2003-02-10 12:33:15 +00:00
Zeev Suraski 778ce2495d whitespace 2003-02-10 11:49:21 +00:00
Zeev Suraski 5e12de9510 Add missing destructors 2003-02-10 11:03:22 +00:00
Zeev Suraski 8713fdd102 Fix the test 2003-02-10 10:58:56 +00:00
Stanislav Malyshev 10b6a84b74 update static constants too 2003-02-10 10:57:14 +00:00
Zeev Suraski 3661930f14 Fix get_parent_class() 2003-02-10 10:04:08 +00:00
Zeev Suraski 029abf8c51 Restore missing check 2003-02-10 10:03:19 +00:00
Wez Furlong 79c046d8a8 Add additional optional parameter to openssl_pkcs7_encrypt to specify the
cipher.  The cipher can be one of the constants listed below.

Based on a patch from:
stefan at cuba dot ionum dot ch

 	OPENSSL_CIPHER_RC2_40,   (the default)
 	OPENSSL_CIPHER_RC2_128,
 	OPENSSL_CIPHER_RC2_64,
 	OPENSSL_CIPHER_DES,
 	OPENSSL_CIPHER_3DES,

proto bool openssl_pkcs7_encrypt(string infile, string outfile,
   mixed recipcerts, array headers [, long flags [, long cipher]])
2003-02-10 09:49:31 +00:00
Zeev Suraski dbb73d8f1e Add ability to reference self:: and parent:: in constant initializers
(bug #21849)
2003-02-10 09:45:27 +00:00
Zeev Suraski edc8e67e3b Remove redundant code 2003-02-10 08:32:44 +00:00
324ff14366 ChangeLog update 2003-02-10 01:32:53 +00:00
Hartmut Holzgraefe 769cb03c35 proto fixes 2003-02-10 00:47:45 +00:00
foobar 885a1a4d08 some win32 fixes by Kai 2003-02-10 00:21:51 +00:00
Wez Furlong 1e9eeafe21 Fix php.ini customization.
Apparently, it seems that running the php script with output captured to
the log prevented it from working correctly.

Also, deletes the php.ini when uninstalled.

TODO: The defaults install and activate all extensions.  This is a problem
for those extension that require non-bundled .dlls (such as OCI).
2003-02-10 00:20:53 +00:00
foobar b69d4c004d style, ws 2003-02-09 23:48:22 +00:00
foobar 8c596d1394 Some compilers puke on these.. 2003-02-09 23:29:56 +00:00
Harald Radi b0fb007f0f fix a memleak 2003-02-09 23:17:42 +00:00
Wez Furlong eefe0f1bb0 ZTS fix 2003-02-09 23:11:23 +00:00
foobar b30256e28b We move, fix, change or add stuff 2003-02-09 23:09:23 +00:00
Kai Schroeder eb8bccee56 fix for #17928 2003-02-09 21:44:51 +00:00
Wez Furlong 03e22793ff Fix various little leaks and segfaults.
Fix scripts like this:
$obj = new COM('Foo');
$obj2 = $obj->get_object();
$obj2->method();  // <-- would segfault here
2003-02-09 21:40:13 +00:00
Wez Furlong 9ef5cc7ef9 Add get_class_name handler so that the current var_dump implementation does not segfault.
Add a generic rpc_object_from_data() function for generating rpc objects from C code (as discussed with Harald).
2003-02-09 21:37:41 +00:00
Wez Furlong 47922a6996 Fix some warnings 2003-02-09 21:35:31 +00:00
Sascha Schumann ba32a619ae use SUCCESS/FAILURE instead of 0/-1 2003-02-09 21:15:55 +00:00
Ilia Alshanetsky 2549b1b638 New features. 2003-02-09 20:47:32 +00:00
Ilia Alshanetsky f98ea4c46d Added feature request #9173 (added stream_get_line(), this function will
read either the specified number of bytes or until the ending string is
found).
2003-02-09 20:43:05 +00:00
Ilia Alshanetsky 8b5bc3ecd3 Added feature request #17983 (optional parameter to mkdir() that makes
directory creation recursive).
Fixed prototype for file() function.
2003-02-09 20:35:54 +00:00
foobar 6a539ee3f2 order, style.. 2003-02-09 20:07:22 +00:00
Ilia Alshanetsky 4eae41915f Added feature request #14097 (option allowing file() command not to include
line endings in it's output. As well as another option, which allows blank
lines to be excluded from the output).
2003-02-09 20:05:13 +00:00
foobar 83403958ed break: First one not needed, second missing. 2003-02-09 19:57:50 +00:00
Shane Caraveo a2a014fc46 news entry for previous commit 2003-02-09 19:52:43 +00:00
foobar a09e1397c7 Fixed compile failures when ZLIB / PCRE are compiled as shared
extensions in same build.
2003-02-09 19:09:52 +00:00
foobar 7d46becbb2 Let this compile even if PCRE is compiled as shared in same build. 2003-02-09 18:47:21 +00:00
Zeev Suraski 55a66b1cb2 Fix the array() problem (and probably some other problems too) 2003-02-09 17:30:50 +00:00
foobar 8678f51835 Fixed bug #22131, enable use of shared lib with pcre. 2003-02-09 14:59:07 +00:00
Marcus Boerger 8d183b7ccc Kill some warnings
# the remainig is not easy to solve: float_var = float_cast(extpression)
# This cannot be fixed by simply casting again to float because some
# compilers may ignore the double casting.
2003-02-09 14:17:05 +00:00
Marcus Boerger 547509d546 XBM for win 2003-02-09 14:05:23 +00:00
Kai Schroeder e42339a6b4 shane added is_executable() for windows last night 2003-02-09 13:54:01 +00:00
Kai Schroeder d1338ff914 reverting to version 1.5; shane added is_executable() for windows last night 2003-02-09 13:52:46 +00:00
Kai Schroeder 390799592d newlines changed 2003-02-09 13:25:23 +00:00
Kai Schroeder f93b09b2db getopt() is currently not available on Windows 2003-02-09 13:23:50 +00:00
Kai Schroeder 11e81f89fd there are no symlinks on Windows 2003-02-09 13:20:17 +00:00
Kai Schroeder ea9101135f is_executable() does not exist on Windows 2003-02-09 13:19:23 +00:00
Kai Schroeder 6fa2536252 die() to skip second message 2003-02-09 12:34:55 +00:00
Kai Schroeder 1e24498461 MSVC's mktime() does not examine the existence of a daylight-saving-time zone 2003-02-09 12:28:01 +00:00
Kai Schroeder 745bec1c48 Windows doesn't know timezone CET 2003-02-09 12:22:18 +00:00
Kai Schroeder 93d4e6e5ed skip for Windows (does not support dates prior to midnight, January 1, 1970) 2003-02-09 12:21:47 +00:00
Kai Schroeder d6567abbf4 Windows does not support dates prior to midnight, January 1, 1970 2003-02-09 12:20:54 +00:00
Kai Schroeder 8e14c4a89f test for mktime() 2003-02-09 12:19:02 +00:00
Derick Rethans f35f5f56c4 - Whitespace fixes 2003-02-09 12:15:05 +00:00
Frank M. Kromann da56457eec cleanup variable initializations 2003-02-09 09:39:53 +00:00
Frank M. Kromann 9c161984a8 Fixing coredump when no php.ini file is used 2003-02-09 08:33:40 +00:00
Frank M. Kromann eca4eb4522 MFB 2003-02-09 07:50:56 +00:00
Yasuo Ohgaki 7f81a4a62f Fixed one more improper row offset handling. 2003-02-09 07:50:16 +00:00
Yasuo Ohgaki ac16adae0a Fixed improper result offset handling.
Prevent error when connection is broken. (optional)
2003-02-09 07:24:18 +00:00
Frank M. Kromann 62d42c2425 Bug #21707 problem with real 2003-02-09 07:18:02 +00:00
Frank M. Kromann c62983b1ec Syncronize with branch 2003-02-09 06:27:38 +00:00
Shane Caraveo 5048f8c60e is_executable() now available on win32
stats can now get information provided by access()
2003-02-09 03:49:43 +00:00
086cb15f43 ChangeLog update 2003-02-09 01:31:33 +00:00
Shane Caraveo 13c4361b97 whitespace changes 2003-02-09 00:30:49 +00:00
Georg Richter 325f9edb07 fixed zend_parse_method_param 2003-02-08 20:54:02 +00:00
Andrey Hristov f8656a71bb adding a note. 2003-02-08 19:13:04 +00:00
Andrey Hristov 550def56d5 making it compilable under ZE2 (PHP5).
NOTE : Even it is compilable there is an compilation warning because of that
handle_function_call is deprecated in ZE2 (#if 0). Look like there will is
a problem with __call().
2003-02-08 19:11:04 +00:00
Sascha Schumann a0d1331137 Fix segfault in bindtextdomain when first parameter was empty.
The Linux man page states: domainname must be a non-empty string.

Noticed by: Nils Meyer
2003-02-08 18:58:34 +00:00
Marcus Boerger 0bce257947 Style corrections
See also: Stig's intro
Version info
2003-02-08 15:29:35 +00:00
foobar b7a9ef8d80 style & ws fixes 2003-02-08 15:26:17 +00:00
Pierre Joye a5f35ef94a Add gdImageEllipse
Replace gdImageFilledEllipse by a new function (backported from
the new phpgd)
the new gdImageFilledEllipse fix bug bug #22103 (ellipse part)
2003-02-08 08:41:43 +00:00
Sebastian Bergmann e7b5c21ded zend_config.h (and its Win32 version) is already included by zend.h 2003-02-08 08:11:21 +00:00
a9181bde0c ChangeLog update 2003-02-08 01:33:01 +00:00
Ilia Alshanetsky df3662f436 The string.h is already avaliable through zend.h, so the manual inclusion
is not necessary.
2003-02-08 01:32:09 +00:00
Sara Golemon 3631b28f44 chunk_size should always be reduced to 1 while scanning response headers to avoid buffering the actual stream prior to any read calls. 2003-02-07 23:44:58 +00:00
Ilia Alshanetsky a592f3cc56 Added missing definitions. 2003-02-07 22:49:21 +00:00
Marcus Boerger 9e780033c2 Adding some text and some backslashes which are needed sometimes
somewhere...
2003-02-07 22:12:02 +00:00
Marcus Boerger 383aa3c2d1 Define STDIN/OUT/ERR for -B -R -F -E (works as expected).
Enable exit in same switches.
2003-02-07 21:55:51 +00:00
Ilia Alshanetsky d66bba099b New function news. 2003-02-07 21:45:02 +00:00
Ilia Alshanetsky 67b19b08e3 Added str_split() function. This function can be used to break down a
string into an array.
2003-02-07 21:36:18 +00:00
Ilia Alshanetsky b1a6778fe5 Added get_browser() function. This function can be used to fetch the headers
sent by the server when a request is made for a given URL.
2003-02-07 21:33:35 +00:00
Marcus Boerger 598e82751d No more maximum line size for -R and -F 2003-02-07 20:53:05 +00:00
Ilia Alshanetsky 957aeb83e3 Added a check to ensure that string.h is avaliable before trying to use it.
Thanks Andi.
2003-02-07 19:26:49 +00:00
Uwe Schindler 738b662b72 (NSAPI SAPI) Fixed _SERVER[] variables (all headers included) to be now similar to apache SAPI; with this new file the memory leaks (webserver eats up memory during a few days running) are also disappeared (all by NSAPI allocated strings are freed). 2003-02-07 18:57:40 +00:00
Ilia Alshanetsky 419108f805 Added missing header. 2003-02-07 15:39:02 +00:00
Zeev Suraski fce275eb41 Improve PPP handling of properties 2003-02-07 10:05:36 +00:00
Zeev Suraski 021d1b684b Fixlet 2003-02-07 09:39:39 +00:00
Zeev Suraski 6257d01a91 Better fix 2003-02-07 09:39:29 +00:00
Zeev Suraski ecbde70159 Fix Windows build 2003-02-07 09:32:19 +00:00
Ilia Alshanetsky ae6cc1a238 Fixed bug #15734 (Added an optional parameter to get_defined_constants(),
which if passed, will include information regarding who created the constant).
2003-02-07 03:04:26 +00:00
Dan Kalowsky cba812ef5c MFB 2003-02-07 02:59:16 +00:00
3f70695a41 ChangeLog update 2003-02-07 01:31:42 +00:00
James Cox 3d042cd923 adding news about moved ext 2003-02-06 22:38:09 +00:00
Tal Peer 724aeb8bac Moving fribidi to PECL 2003-02-06 22:23:21 +00:00
Sara Golemon 874661a66e bc_raise() can return a scale lower than that passed into it. While most other bcmath calls won't, it's safest to do a quick check that we're only
reducing n_scale, not increasing it.
2003-02-06 22:18:41 +00:00
Ilia Alshanetsky dc052fe0e5 Fixed bug #19506 (get_extension_funcs() can now retrieve a list of built-in
Zend Engine functions, if "zend" is specified as the module name).
Made get_extension_funcs() on failure.
2003-02-06 20:21:02 +00:00
Marcus Boerger fb44f1e0fb Rewrite/add some stuff 2003-02-06 20:10:52 +00:00
foobar 20f9b6d02c - Fixed bug #22088 (array_shift() leaves next index to be +1 too much) 2003-02-06 15:27:53 +00:00
foobar 073a80fbcc fix the test 2003-02-06 15:22:41 +00:00
foobar 102f8cf4c1 Added testcase for bug #22088 2003-02-06 15:04:53 +00:00
e0f41c9fda NEWS update 2003-02-06 01:33:12 +00:00
b43dd52dae ChangeLog update 2003-02-06 01:32:53 +00:00
Zeev Suraski b39b33c4c5 Fix the 2nd buglet in the error message :) 2003-02-06 00:39:58 +00:00
Zeev Suraski fc591167ad Fix check 2003-02-06 00:15:02 +00:00
Zeev Suraski 45c12359a9 Fix prototype (may have caused stack corruption) 2003-02-06 00:14:49 +00:00
Marcus Boerger 984cde3123 Add PPP method tests 2003-02-05 23:07:24 +00:00
Ilia Alshanetsky edde957038 New function news. 2003-02-05 17:57:31 +00:00
Ilia Alshanetsky f12a6b7663 Added array_walk_recursive() function that can apply array_walk recursively
to an array.
2003-02-05 17:56:08 +00:00
Zeev Suraski f660d28143 - read_property cleanup
- Implement unset/isset/empty for PPP
2003-02-05 14:27:30 +00:00
Zeev Suraski 17439aa9c4 Rework static class properties - now supports access restrictions 2003-02-05 13:35:52 +00:00
Zeev Suraski 376d63170b Add quick_exists() 2003-02-05 13:19:59 +00:00
Zeev Suraski da12870c68 Add PPP support for arrays 2003-02-05 09:41:31 +00:00
Wez Furlong 20d886da50 Credits for iconv 2003-02-05 08:15:07 +00:00
Wez Furlong f70cf60a16 Mark activescript sapi as experimental, so that the installer can
categorize it appropriately.
2003-02-05 08:12:58 +00:00
Zeev Suraski ef77e582f5 Fix buglet in error message 2003-02-05 07:46:13 +00:00
Wez Furlong 3449f4f104 Check in the prototype PHP installer for win32.
# Besides looking nice and pretty, the installer is actually smaller
# than the .zip distro:
#   PHP 4.3.0 .zip distro:  5,950,222 bytes
#   PHP 4.3.0 installer:    5,426,242 bytes
2003-02-05 07:32:22 +00:00
1b63f56e0d ChangeLog update 2003-02-05 01:33:13 +00:00
Ilia Alshanetsky acc9c13c36 Build Fix. 2003-02-05 00:41:40 +00:00
Marcus Boerger ad7facdf2b # RTFM .. and then it goes better :-) 2003-02-05 00:35:20 +00:00
Marcus Boerger c1f0159d63 First step - abrief version.
@Added man page for CLI version of PHP. (marcus)
# I was also thinking about an author section with
# The PHP Group, Edin Kadribasic, Marcus Boerger, Rasmus Lerdorf,
# Stig Bakken and Zeev Suraski beeing mentioned. Group of corse and
# the rest is listed in php_cli.c.
2003-02-05 00:12:46 +00:00
Stig Bakken fdd9735359 * replace @bin_dir@ in pear.bat 2003-02-04 22:46:40 +00:00
Andi Gutmans 8603feb6fa - Please follow coding standards (this isn't java :) 2003-02-04 21:07:40 +00:00
Marcus Boerger 1af77be5fd fix ZTS build 2003-02-04 21:01:54 +00:00
Ilia Alshanetsky 13f8b211c4 Fixed compilation of Apache & Apache Hooks SAPIs. 2003-02-04 20:54:17 +00:00
Marcus Boerger afc673b61d remove it then....this forces to put work in man page ... 2003-02-04 20:52:13 +00:00
Sara Golemon 3eab32163c Bug#13551 bcmath functions should not apply scale to arguments, only to result 2003-02-04 19:03:30 +00:00
Ilia Alshanetsky a89a651a46 Made the row parameter in pg_result_seek() non-optional, the current
implementation would result in random behavior if the 2nd argument is not
passed.
Fixed bug #22042 (pg_result_seek() would never seek to the 1st row in the
result due to always seeking to row next to the one requested).
Removed dead code from pg_result_seek().
2003-02-04 18:34:00 +00:00
Zeev Suraski e1179a4d40 Missing update 2003-02-04 14:12:59 +00:00
Zeev Suraski 3a1a209baf Updates reflecting infrastructure changes 2003-02-04 13:12:48 +00:00
Zeev Suraski 471947b188 Reimplement PPP properties 2003-02-04 12:12:34 +00:00
Uwe Steinmann be3908cc8e - fixed some prototypes and folding 2003-02-04 10:57:35 +00:00
Uwe Steinmann e27c4c622e - fixed prototype of pdf_get_buffer() 2003-02-04 10:23:12 +00:00
foobar b070348672 NEWS ordering.. 2003-02-04 10:08:41 +00:00
a54609dc05 NEWS update 2003-02-04 01:32:24 +00:00
ccb1235482 ChangeLog update 2003-02-04 01:32:15 +00:00
Hartmut Holzgraefe 2546f09b08 proto-fix 2003-02-03 23:36:19 +00:00
Ilia Alshanetsky 0d2368554a Fixed bug #22017 (non descriptive error to appear when timestamp passed to
date() has value < 0. Win32 does not support timestamps prior to midnight
(00:00:00), January 1, 1970).
2003-02-03 22:48:26 +00:00
Ilia Alshanetsky d89c38961b Make putenv() return a proper error rather then NULL when invalid argument
is passed.
2003-02-03 21:48:36 +00:00
Ilia Alshanetsky 065e4d6550 Fixed bug #22022 (Crash in imap_mail_compose() if the body is an empty array). 2003-02-03 21:24:32 +00:00
Ilia Alshanetsky b0924da0cf Fixed bug #22031 (Made curl_write() & curl_write_header() binary safe). 2003-02-03 20:56:23 +00:00
Moriyoshi Koizumi 47f6ed8dbb Trivial test adjustment 2003-02-03 20:29:07 +00:00
Moriyoshi Koizumi 0ae9394c39 zend_get_parameters_* => zend_parse_parameters 2003-02-03 20:25:25 +00:00
foobar 591c485045 Fix bug: #22035 (EXTRA_LDFLAGS for AIX not correct) 2003-02-03 17:35:10 +00:00
foobar 07a9729071 - Fixed bug: #21998 (array_pop() did not reset the current array position)
# This behaves now same as in PHP 4.2.3
2003-02-03 16:57:02 +00:00
foobar 7147949a4e Correct description of the problem 2003-02-03 16:52:04 +00:00
Moriyoshi Koizumi a4fe845aba Really fixed proto.
# sorry for messing
2003-02-03 16:46:45 +00:00
Moriyoshi Koizumi 2a92efdaf9 Oops! wrong commit. Reverting... 2003-02-03 16:45:56 +00:00
Moriyoshi Koizumi e58e11743a Fixed proto 2003-02-03 16:44:28 +00:00
Moriyoshi Koizumi e2c4dffae0 Modified the test so it will be skipped under ZE1.
Thanks Kai
2003-02-03 16:38:22 +00:00
Moriyoshi Koizumi 0eb1c407b2 Added missing "?>" 2003-02-03 16:33:13 +00:00
Moriyoshi Koizumi e5a4b5b2dc Fixed test case for mb_strpos().
# the third parameter should specify an offset but an encoding name
2003-02-03 16:16:37 +00:00
foobar 8040659c00 Make these configure messages differ from the regular apache configure 2003-02-03 15:42:11 +00:00
Moriyoshi Koizumi aded4d818a Added test case for bug #21961 2003-02-03 14:02:21 +00:00
foobar be83a02b8c This cause some warning/error in AIX 2003-02-03 13:08:08 +00:00
foobar 173b9493e2 Fixed bug: #22011 (-n must ignore all ini files) 2003-02-03 12:25:28 +00:00
Derick Rethans db0897161c - Make VIM highlighting happy 2003-02-03 12:14:13 +00:00
foobar 8e673a3fa0 Test that libgds actually exists. 2003-02-03 11:45:44 +00:00
foobar 1887456484 ws 2003-02-03 09:55:09 +00:00
Sebastian Bergmann 0026239c6a Build fix. 2003-02-03 09:42:53 +00:00
Sebastian Bergmann b4cfff0403 Fix ZTS build. 2003-02-03 07:41:05 +00:00
foobar bb97dfaccb Added test for bug #21998 2003-02-03 06:43:08 +00:00
Stig Bakken 427fafaac0 * 1.1 release notes update
* added some <provides> elements
2003-02-03 02:55:47 +00:00
Stig Bakken e756a253d9 * start using the source tokenizer 2003-02-03 02:54:39 +00:00
95613086e1 NEWS update 2003-02-03 02:21:52 +00:00
c1ca3a801f ChangeLog update 2003-02-03 02:19:31 +00:00
Stig Bakken 1e14f2de8b * substitute @php_dir@ in pear.in 2003-02-03 01:00:10 +00:00
Marcus Boerger 63d4f31604 - Added -B, -F, -R, -E for line by line std in processing.
- Added some error messages.
- Added more -h info.
@Added command line parameters -B, -F, -R and -E which allow to process
@stdin line by line (See php -h for more). (marcus)
#This allows to simply complex command line constructs...
2003-02-03 00:22:28 +00:00
Harald Radi c4528f82a0 extend the parameter parsing API by two functions
for parsing method parameters with automatic
detection if the function was called as such or as
a class method (with a valid this ptr).
if called as a function the first parameter has to be
the object it is operating on, if called as a method
this is used.

#not yet testet, only commiting so that georg can
#continue working on ext/mysqli
2003-02-02 23:30:14 +00:00
Ilia Alshanetsky ccf8365baa Fixed bug #22021. 2003-02-02 23:09:24 +00:00
Ilia Alshanetsky 923ae6ca3e Gave the user the ability to specify encoding of the request.
Patch by jens@mermaidconsulting.dk.
2003-02-02 20:56:51 +00:00
Ilia Alshanetsky 87a113f5c1 Fixed build on Solaris (patch by Melvyn Sopacua). 2003-02-02 20:26:46 +00:00
Sebastian Bergmann 7ed0972683 Fix warning. 2003-02-02 18:50:42 +00:00
Zeev Suraski 31196cf679 whitespace 2003-02-02 16:29:42 +00:00
Zeev Suraski 61bd944b32 Core rearrangements - move Zend Objects specific code to their
specific implementation file
2003-02-02 16:17:25 +00:00
Zeev Suraski 53060ef869 Fix phpinfo() display of Zend extensions 2003-02-02 15:53:04 +00:00
Andi Gutmans 87f4472afb - Fix warning 2003-02-02 05:20:31 +00:00
Marcus Boerger 1d9477f386 - new xbm support
@Added XBM support for bundled gd library. (marcus)

# It was enabled by the last commit and fixed by this one.
2003-02-02 01:34:54 +00:00
28f76a2a4d NEWS update 2003-02-02 01:34:05 +00:00
af2bfa03bf ChangeLog update 2003-02-02 01:33:42 +00:00
Marcus Boerger 3e675c1cf4 avoid warnings 2003-02-01 23:38:29 +00:00
Marcus Boerger 07246c2f99 Bundled version has XBM support as well as external.
# Now fix the shit behind it...
2003-02-01 23:25:14 +00:00
Marcus Boerger 129bd74b45 Show if XPM support is available & Set availability bit only when available. 2003-02-01 23:23:59 +00:00
Marcus Boerger 27ccc66518 @Added XBM support for GetImageSize(). (helly) 2003-02-01 23:14:13 +00:00
Marcus Boerger 895c27d3fc Change DBM detection order 2003-02-01 22:19:04 +00:00
Marcus Boerger 0319e63775 - unify configure mechanisms (include file handling)
- fix dbm
- allow dbm to be based on gdbm
2003-02-01 18:59:59 +00:00
Melvyn Sopacua c4eecf9199 Make it easier to diff results of several runs in one day. 2003-02-01 13:28:32 +00:00
foobar 9cff741d04 Correct required mcrypt version 2003-02-01 12:49:35 +00:00
Melvyn Sopacua 6f20f44712 Fix Bug #21892 (links to apache2 install instructions missing)
# and stop nicos from bitching
2003-02-01 11:18:53 +00:00
Martin Jansen 447bd814a2 * displayLine() is deprecated, so better use displayError() here. 2003-02-01 09:36:17 +00:00
Sebastian Bergmann 729e470ced Fix build. 2003-02-01 07:32:09 +00:00
Wez Furlong 84f83e8559 Don't assume that objects have class entries (in the ZE1 sense) when
determining the class name.
Additionally, don't assume that objects have a properties hash either.
2003-02-01 03:52:31 +00:00
foobar 333406bdc2 - Added some missing CVS $Id$ tags, headers and footers. 2003-02-01 01:49:15 +00:00
bdb1c0cf86 ChangeLog update 2003-02-01 01:32:52 +00:00
Melvyn Sopacua f20d394e2d Require 2.5.6+
MFB: Be -ltdl aware
2003-01-31 23:01:36 +00:00
Ilia Alshanetsky 31a3135014 Fixed bug #21986 (openssl test failure). 2003-01-31 22:15:56 +00:00
Marcus Boerger 0629bdb061 Shared dba requires at least db-3.3 2003-01-31 20:06:44 +00:00
Marcus Boerger 037986db20 Fix proto 2003-01-31 19:12:23 +00:00
Frank M. Kromann b079cc2af5 Rename script.
Add check for CLI version
2003-01-31 18:51:28 +00:00
Sascha Schumann bea6ff5183 Unbreak $Id tag 2003-01-31 16:24:12 +00:00
foobar 190db955ba Moved these entries to PHP_4_3 branch NEWS (for 4.3.1) 2003-01-31 14:23:18 +00:00
foobar e9a132f223 No c++ comments.. 2003-01-31 14:18:50 +00:00
Moriyoshi Koizumi b00cc4f2bb Fixed a mb_send_mail() bug that has been reported in php-i18n@lists.php.net
See http://lists.php.net/article.php?group=php.i18n&article=427
2003-01-31 14:15:49 +00:00
Sascha Schumann 9233627887 Remove obsolete warning 2003-01-31 07:44:17 +00:00
Sara Golemon 81797baed4 Add ftp_raw() to send raw command strings to an FTP server. 2003-01-31 04:54:57 +00:00
Frank M. Kromann ff605d071f Use platform specific extension. 2003-01-31 03:45:13 +00:00
Frank M. Kromann 04abd3af69 Dtandard visual studio project for ext_skel 2003-01-31 03:44:55 +00:00
Frank M. Kromann 941dc7260d Wrapper script to use ext_skel on Win32 2003-01-31 03:44:20 +00:00
9e95db3769 ChangeLog update 2003-01-31 01:33:19 +00:00
Ilia Alshanetsky 7a3c54fc36 Fixed compiler warning regarding signed/unsigned int comparisons. 2003-01-30 23:36:08 +00:00
Ilia Alshanetsky 242a9a47c7 Fix compiler warning. 2003-01-30 22:37:50 +00:00
Marcus Boerger 302f97abbc Revert this part, the new one adds more problems than it solves. 2003-01-30 21:36:05 +00:00
Sascha Schumann 4cf174cbd4 Fix sticky EOF problem
Sometimes streams signal a temporary EOF, because all current data
has been consumed. But that does not preclude the possibility that
more data will become available later.

Thus we must not treat eof in the read path as final.

Now, "tail -f" like scripts work again.
2003-01-30 21:06:34 +00:00
Sara Golemon 65146ceb26 Unify str_replace and str_ireplace using INTERNAL_FUNCTION_PARAM_PASSTHRU -- reduce codebase/maintenance complexity 2003-01-30 20:09:19 +00:00
foobar 21803056b5 fix bug: #21945 (zts build failed) 2003-01-30 19:30:13 +00:00
Marcus Boerger f2ff4678cd Allow to link against chosen modules correctly 2003-01-30 18:28:42 +00:00
Sara Golemon 37ff98978b Feature Request # 5919 - Addition of str_ireplace()
Also removed deprecated BM str replace menthod
Also rewrote php_str_to_str to use more processor/memory efficient method (ilia)
2003-01-30 05:00:41 +00:00
Harald Radi 54c73d1ccb fix non-zts build for wez 2003-01-30 03:15:52 +00:00
Ilia Alshanetsky 453368afdf Removed pointless checks. 2003-01-30 02:33:16 +00:00
e3672e49fc ChangeLog update 2003-01-30 01:32:27 +00:00
Ilia Alshanetsky 62db0b4854 Fix ZTS build. 2003-01-30 00:44:56 +00:00
Stig Bakken 9c5ff64992 * Windows fix (thanks to paj) 2003-01-29 21:42:54 +00:00
Ilia Alshanetsky ebf13bc940 Added sanity checks. 2003-01-29 19:33:38 +00:00
Maxim Maletsky 808cb3ad74 Added myself to the maintainers list. 2003-01-29 18:31:48 +00:00
Stanislav Malyshev 03f88ac2b2 Add additional stage to post-session cleanup.
We need separate cleanup stage because of the following problem:
Suppose we destroy class X, which destroys function table,
and in function table we have function foo() that has static $bar. Now if
object of class X was assigned to $bar, its destructor will be called and will
fail since X's function table is in mid-destruction.
So we want first of all to clean up all data and then move to tables
destruction.
Note that only run-time accessed data need to be cleaned up, pre-defined
data can not contain objects and thus are not probelmatic.
# Looks like we are having a lots of pain in the various parts of the body
# because of the destructors...
2003-01-29 17:54:48 +00:00
Edin Kadribasic 6b203c70a3 Be more consistent with the sapi internal name. 2003-01-29 15:41:42 +00:00
Edin Kadribasic ca0b63e420 Enable embedded code using sapi/embed to use dl(). 2003-01-29 15:39:10 +00:00
Zeev Suraski 4b97a8dffd Code rearrangements 2003-01-29 15:02:57 +00:00
Stanislav Malyshev f73def91ed Fix object destructors:
zend_objects_store_call_destructors is not used anymore, we rely on
symbol tables cleaners to destroy all objects.
2003-01-29 14:33:18 +00:00
Stanislav Malyshev 683cf733bd extra safety 2003-01-29 14:27:40 +00:00
Stanislav Malyshev 123d8f782f fix memory leak 2003-01-29 14:25:53 +00:00
Zeev Suraski 8f52bf6835 Fix assignments to $this.
Fixes the 'make install' problem reported on php-dev
2003-01-29 08:55:12 +00:00
foobar 5c81fcfe70 NEWS police is back. 2003-01-29 07:50:09 +00:00
b98d46baf2 ChangeLog update 2003-01-29 01:31:55 +00:00
Harald Radi f8e014b228 MFPHP_4_3 2003-01-29 00:49:09 +00:00
Ilia Alshanetsky e6170c0b30 Added part of strpos commit that never made it in for some reason.
# Thanks Pollita.
2003-01-29 00:07:01 +00:00
Ilia Alshanetsky 835e6481e4 Fixed bug #17868 (more then the <!--include--> directive used to include
a PHP file would result in a crash).
2003-01-28 16:34:21 +00:00
Derick Rethans 1ca8d7d4c3 - Fix includes 2003-01-28 16:05:34 +00:00
Ilia Alshanetsky 4fe6fc8b0b Fixed compiler warning. 2003-01-28 16:04:10 +00:00
Edin Kadribasic 5b387760de Call correct module startup function (not a hard coded one) allowing
startup override.
2003-01-28 13:54:42 +00:00
Zeev Suraski 49fd225238 Fix a ticks related crash 2003-01-28 11:34:24 +00:00
Zeev Suraski 9f1516f556 Get rid of php4ts.dsw - replaced by php5ts.dsw 2003-01-28 11:22:44 +00:00
foobar 20c43285f7 - Fixed bug: #13561 (--without-pear prevents install of phpize, php-config) 2003-01-28 10:59:12 +00:00
foobar 41d6e9af8d Fix configure. (typo?) 2003-01-28 10:55:36 +00:00
Edin Kadribasic c8eb148368 Expose php_embed_module struct (and make Wez happy). 2003-01-28 10:49:56 +00:00
Melvyn Sopacua ac3dc9d95e Fix parse error and edink's fear of bison errors 2003-01-28 10:04:17 +00:00
Zeev Suraski 6155a1fa24 Allow methods in parent classes to call protected methods in derived
classes
2003-01-28 09:44:18 +00:00
foobar 68ffe71a12 fix some typos 2003-01-28 06:56:32 +00:00
foobar c96fe825b8 fix typo 2003-01-28 06:52:09 +00:00
Marcus Boerger 1ab64d2b96 - fix this: els is optional but may not be empty 2003-01-28 06:27:01 +00:00
Frank M. Kromann 0e38fedcd7 Fix the setting of computer name and processor type for php_uname() on Win32 2003-01-28 05:02:12 +00:00
foobar 9a0f98869c - Removed unnecessary makedist.ZendEngine2
- Modified makedist to use php5 CVS module (alias)
2003-01-28 02:49:35 +00:00
Ilia Alshanetsky 2d0f432490 Added scandir() function, which allows quick retrieval of all files &
directories within the specified path and sort the output in alphabetical
or reverse alphabetical order.
2003-01-28 01:48:57 +00:00
38a3f33625 NEWS update 2003-01-28 01:34:15 +00:00
90f9f62665 ChangeLog update 2003-01-28 01:33:49 +00:00
Ilia Alshanetsky d92a1f4dc1 Fixed win32 build (bug #21506).
Fixed a bug that would cause garbage data to appear at the end of the
loaded apache modules list in phpinfo().
2003-01-28 01:25:34 +00:00
foobar 946032f40b - Cleaned up and made less error-prone
- Changed --enable-mime-magic -> --with-mime-magic[=FILE] to allow
  specifying of the file during configure.
2003-01-28 01:00:15 +00:00
Ilia Alshanetsky b9a7918c43 2nd part of Sebastian's patch. 2003-01-28 00:42:54 +00:00
Edin Kadribasic 7c283f80be Adding new files to the project.
# First half of Sebastian's patch, Ilia will commit the second part shortly
2003-01-28 00:32:15 +00:00
Marcus Boerger 2b5a5ca669 - fix "--without-flatfile"
- simplify Berkley DB verison check
2003-01-28 00:10:05 +00:00
Ilia Alshanetsky d59d500af7 Moved the scandir code into it's own files so that it can be used by other
OSes where libc does not have a native scandir() implementation.
2003-01-27 20:39:31 +00:00
Maxim Maletsky e4ec7372e9 This fixes "warning C4101: 'charsetid' : unreferenced local variable" on VC6 2003-01-27 20:05:48 +00:00
Maxim Maletsky 897a708c87 @- Fixed bug #17448 (Print the message when OCI_SUCCESS_WITH_INFO is returned).
(Maxim)
2003-01-27 19:52:11 +00:00
Sara Golemon d0cb097c52 Fix potential buffer overflow. 2003-01-27 19:51:50 +00:00
Ilia Alshanetsky 9bb3dc6903 Removed pointless checks. 2003-01-27 17:22:22 +00:00
Edin Kadribasic c7441b2379 Fixed bug #21597 (made glob() understand windows paths) 2003-01-27 16:29:47 +00:00
Stanislav Malyshev 3a4ace13b4 Replace MAKE_VAR opcode with special 'data' opcode
This opcode is not executeable but only holds data for opcodes
that need more than two arguments (presently only ASSIGN_OBJ and the ilk but
in the future also ASSIGN_DIM)
2003-01-27 15:13:01 +00:00
Uwe Steinmann c375b0b05c - fixed several bugs in hw_document_xx() functions. The macro to access
the document was the same as for a link to the sever.
2003-01-27 09:11:17 +00:00
Sara Golemon 761fa96412 Feature Request #21748. Added function ftp_chmod(). 2003-01-27 02:54:12 +00:00
e9833ff497 ChangeLog update 2003-01-27 01:31:58 +00:00
Moriyoshi Koizumi 6174d2b446 Updated test so it describes the problem more clearly. 2003-01-27 01:15:14 +00:00
Stig Bakken d250e7ba9d * whoops, heritage shows through :) 2003-01-26 23:54:19 +00:00
Sascha Schumann 0ceb4a93b2 Replace snprintf() call using zend_error's capabilities 2003-01-26 23:15:30 +00:00
Marcus Boerger 494bec466b Simplify 2003-01-26 17:17:44 +00:00
Sander Roobol e9d0a58cb0 Fix build 2003-01-26 09:13:31 +00:00
Shane Caraveo 33ad63ef8c normalize CGI variables to the CGI spec
PATH_INFO and PATH_TRANSLATED are correct now
SCRIPT_FILENAME now contains the full path to the script
2003-01-26 03:39:50 +00:00
Shane Caraveo 82f6cef483 Fix broken build by adding scandir and alphasort for win32 2003-01-26 01:39:18 +00:00
436ad07b98 ChangeLog update 2003-01-26 01:32:24 +00:00
Sara Golemon 3ad9839f2f Feature Request #21784 Added: imagecolorallocatealpha (pollita@php.net,jasper@pointless.net) 2003-01-26 01:15:02 +00:00
Shane Caraveo 1a4c82e014 fix bug 21261
putenv on some platforms requires we provide the memory
    cleanup env parsing logic
fix bug 21367
    missed optargs in a previous patch
2003-01-25 22:01:53 +00:00
Ilia Alshanetsky 8d352d2dd6 Fixed bug #21625 (When scanning a directory for ini files, do so in
alphabetical order. This gives a user a way to control the order in which
the ini files are loaded).
Fixed a bug that would make the code try to read files without an extension
as ini files.
2003-01-25 21:13:00 +00:00
Marcus Boerger 564788b6f5 The builtin version was always used even if configured otherwise. 2003-01-25 19:46:58 +00:00
Marcus Boerger a7d10f8aa4 Bug #21751: Part one never let this happen again... 2003-01-25 19:45:11 +00:00
Ilia Alshanetsky ef021e8964 Removed unneeded code. 2003-01-25 18:55:07 +00:00
Hartmut Holzgraefe 974ff24e80 - mime file parser messages only with mime_magic.debug=On (default: off)
- fix docref URL in startup error messages
- show status in php info, either "enabled" or "..., disabled"
2003-01-25 16:25:37 +00:00
Hartmut Holzgraefe 6a4a858294 preparations for making magic file parser silent 2003-01-25 13:33:29 +00:00
Hartmut Holzgraefe f95759b36a suggesting a plain magic file insteat of a mime one is a bad idea 2003-01-25 10:51:04 +00:00
32d7d07c0e ChangeLog update 2003-01-25 01:31:13 +00:00
Stig Bakken dd22d65e2f * not a real test, just a script for displaying OS_Guess output 2003-01-25 00:45:13 +00:00
Stig Bakken d19bd6f12c * add glibc version detection for Linux 2003-01-25 00:44:41 +00:00
Stig Bakken a46aac36ec * typo 2003-01-25 00:38:00 +00:00
Ilia Alshanetsky efae1b9ace Fixed a typo. 2003-01-25 00:25:32 +00:00
Ilia Alshanetsky 758ea308a9 Fixed compiler warning. 2003-01-25 00:23:03 +00:00
Sascha Schumann 330740f7cd Remove ugly netware hacks from the code 2003-01-24 23:57:32 +00:00
Ilia Alshanetsky e10f20924e Removed unnecessary checks. 2003-01-24 22:58:46 +00:00
Dan Kalowsky b48d709746 Patch for bug #21844 2003-01-24 22:40:38 +00:00
Ilia Alshanetsky 383171b11b Fixed bug #21533 (a rare condition where error can remain undefined and
result in undefined behavior when it is used without being initialized).
2003-01-24 19:23:53 +00:00
Ilia Alshanetsky 417ba55c1f Fixed bug #21865. 2003-01-24 19:15:54 +00:00
foobar 142da0ed58 Fix bug #21795, Undeclared statement in oci8.c (OCI_ATTR_STATEMENT) 2003-01-24 17:51:19 +00:00
Ilia Alshanetsky 6efe008598 Fixed compile warning. 2003-01-24 16:45:34 +00:00
Ilia Alshanetsky d2162b32b1 Fixed compile warning. 2003-01-24 16:39:49 +00:00
Ilia Alshanetsky f163a4d16b Fixed a memory leak.
zend_error -> php_error_docref.
2003-01-24 16:34:20 +00:00
Ilia Alshanetsky 38ad0e9104 zend_error -> php_error_docref. 2003-01-24 16:29:40 +00:00
Ilia Alshanetsky 95bfbfe1c1 Fixed compile warning. 2003-01-24 16:23:11 +00:00
Andrey Hristov 600fce5890 Resolving problem on OSF1 and probably other
64 bit platforms. Thanks for the feedback of Magnus (novell kiruna se).
2003-01-24 13:18:08 +00:00
Andrey Hristov 1d0214bee4 Adding cast. 2003-01-24 12:19:59 +00:00
foobar 4dfc7cc87c - Fixed stupid typo..
# I will test before commit, I will test before commit...
2003-01-24 10:12:55 +00:00
foobar e771bdb23d Fixed bug: #20857, snmpset() fails 2003-01-24 09:52:46 +00:00
foobar 45f1f1711d ws fixes 2003-01-24 09:40:53 +00:00
foobar 84e5fcb5de MFB, removed unused GET/POST entries 2003-01-24 05:56:55 +00:00
Ilia Alshanetsky 4fde1b8de1 zend_error() -> php_error_docref(). 2003-01-24 05:21:08 +00:00
d3319d1b07 ChangeLog update 2003-01-24 01:32:58 +00:00
Moriyoshi Koizumi ad86154d90 Added test case for bug21849.phpt 2003-01-23 23:22:23 +00:00
Sebastian Bergmann 459fb4f319 TODO for PHP 5. 2003-01-23 23:22:01 +00:00
Moriyoshi Koizumi cfbd0bb58a Really fixed the mb issue of mb_ereg_replace()
# my previous patch is somewhat wrong
2003-01-23 20:38:44 +00:00
Moriyoshi Koizumi 3e7b832895 Fixed a mb_ereg_replace() bug; the function was not completely multibyte-safe. 2003-01-23 20:07:39 +00:00
Moriyoshi Koizumi d4f59af5be Fixed typo 2003-01-23 19:31:02 +00:00
Moriyoshi Koizumi 4199484313 Changed the test's file name as per the convention 2003-01-23 19:28:39 +00:00
Moriyoshi Koizumi 8dfb2df649 Renamed the test name as per the convension 2003-01-23 19:21:51 +00:00
Moriyoshi Koizumi 6fc22aa5d9 Test name formatting 2003-01-23 19:07:25 +00:00
Moriyoshi Koizumi 7abc6e4338 Made the test's name more descriptive 2003-01-23 19:00:06 +00:00
Moriyoshi Koizumi 0344311bde Removed pointless checks 2003-01-23 18:48:43 +00:00
Moriyoshi Koizumi 24ae309037 Added test case for bug #21732 2003-01-23 18:22:55 +00:00
Zeev Suraski 76c93412d3 Let the scope propagate to internal functions 2003-01-23 16:40:30 +00:00
foobar e1c985d9a7 Fix bug: #21817 (only enable this if --with-kerberos is used) 2003-01-23 16:29:49 +00:00
Zeev Suraski cee6216c4f Fix .dsp 2003-01-23 09:35:02 +00:00
foobar 9b2525f96e remove this stupid highlight which causes trouble. 2003-01-23 06:42:43 +00:00
foobar 04eca7536c MFB 2003-01-23 06:23:08 +00:00
foobar 895a3a109f Correct default path 2003-01-23 05:33:11 +00:00
foobar 7a93625e4c Fixed bug: #14542, register_shutdown_function() timeout problem 2003-01-23 05:15:42 +00:00
foobar 80923f933d Added test for bug: #21513 2003-01-23 03:28:41 +00:00
ae55ffe7bf ChangeLog update 2003-01-23 01:33:39 +00:00
Ilia Alshanetsky 6bf2ce3429 Removed non-needed code. 2003-01-22 22:07:22 +00:00
Anil Madhavapeddy dea44dfc9a typo 2003-01-22 20:41:28 +00:00
Frank M. Kromann 66ee5dfac2 adding missing zlib.lib and path to bindlib 2003-01-22 20:13:11 +00:00
Ilia Alshanetsky d24148f3d0 Fixed a crash when invalid color is passed to imagepstext(). 2003-01-22 19:53:29 +00:00
Stanislav Malyshev d433a62ef4 some small refinements for get_class_* 2003-01-22 14:55:01 +00:00
Ilia Alshanetsky 72cd67b3ca Fixed bug #21814 (Allow booleans to be used as array keys). 2003-01-22 14:48:30 +00:00
d4d46ac352 ChangeLog update 2003-01-22 01:33:11 +00:00
Moriyoshi Koizumi 812a419019 Oops! wrong patch. Reverted. 2003-01-21 22:09:09 +00:00
Moriyoshi Koizumi ce5df6d949 Fixed mb_ereg_replace() bug (the function has ignored the default option) 2003-01-21 22:03:29 +00:00
Moriyoshi Koizumi da45161bd2 Added test case for bug #21800 2003-01-21 19:38:08 +00:00
Moriyoshi Koizumi 9a723fcb4e Fixed mb_ereg_search() segfault that occurs when the function is called
before a string to be searched is passed by mb_ereg_search_init()
2003-01-21 19:31:07 +00:00
Andrey Hristov bd55130077 increasing readability. 2003-01-21 17:37:59 +00:00
Ilia Alshanetsky dc150fd2ea getParameters -> zend_get_parameters_ex. 2003-01-21 15:27:39 +00:00
Ilia Alshanetsky 8a9e09a44a ARG_COUNT(ht) -> ZEND_NUM_ARGS(). 2003-01-21 14:56:40 +00:00
Stig Bakken 832545d97f * PEAR_Error now supports exceptions when using Zend Engine 2. Set the
error mode to PEAR_ERROR_EXCEPTION to make PEAR_Error throw itself
  as an exception (invoke PEAR errors with raiseError() or throwError()
  just like before).
2003-01-21 13:32:34 +00:00
Sascha Schumann 294e776d95 add sapi_get_target_uid/_gid for obtaining information about the
non-privileged user the web server is running as.  this is useful
for creating shared memory segments which need to be accessed by
the child processes/threads.
2003-01-21 11:03:58 +00:00
foobar 961c9856ef Fixed bug: #21698, httpd.conf not modified with "make install" 2003-01-21 06:02:19 +00:00
Edin Kadribasic ceb597ea1a Added missing warning about experimental nature of sapi/embed. 2003-01-21 02:46:07 +00:00
Pierre Joye 9ad850637e Remove the (c), in the future, can we add PHP Licence terms for the new
functions ?
2003-01-21 02:10:19 +00:00
Pierre Joye 81c68ab8d5 Add credits to my functions (thx for the advice Wez&Ilia :) 2003-01-21 01:49:34 +00:00
88e5482def ChangeLog update 2003-01-21 01:33:07 +00:00
Sterling Hughes d3f04d8ecc fix by phanto to the cloning 2003-01-21 00:00:38 +00:00
Ilia Alshanetsky 053023a71e quota function fixes. Thanks Wez. 2003-01-20 21:28:09 +00:00
Ilia Alshanetsky 20925f97b9 Changed php_error to php_error_docref.
Removed pointless memory allocation checks.
Memory leak fix inside quota functions.
2003-01-20 19:41:58 +00:00
Moriyoshi Koizumi e3e364f77b Fixed bug #21758 2003-01-20 16:45:21 +00:00
Ilia Alshanetsky aa8b1d6db3 Restore php_error -> php_error_docref patch. 2003-01-20 16:15:18 +00:00
Sascha Schumann aca939a0ab test commit 2003-01-20 15:07:20 +00:00
Derick Rethans f1ba2137c0 - Add credits for Magnus 2003-01-20 12:34:07 +00:00
foobar f6cee90129 Add test for png.h 2003-01-20 10:39:29 +00:00
Mark L. Woodward 7eeea7e55d Updated for Msession 1.2.
Includes new APIs
2003-01-20 03:16:24 +00:00
11aebf74bb ChangeLog update 2003-01-20 01:32:16 +00:00
Ilia Alshanetsky 2292a652a6 ZTS fix. 2003-01-19 23:32:22 +00:00
Zeev Suraski 4c8473d619 relabel 2003-01-19 21:37:40 +00:00
Stanislav Malyshev dce8267f35 Restore for now old statics behaviour (so that indirect $$var references would work again). Comprehensive fix will follow later. 2003-01-19 17:25:39 +00:00
Moriyoshi Koizumi dfbfa1a36f Improved the patched part to prevent further potential bugs 2003-01-19 17:23:48 +00:00
Ilia Alshanetsky 2efab7a22a fixed typos 2003-01-19 15:01:34 +00:00
Derick Rethans 5eb912554d - Moved to http://qa.php.net/write-test.php 2003-01-19 14:22:19 +00:00
Harald Radi b51b6f0fbf ini patch to allow 'entry[] = value' entries 2003-01-19 12:18:46 +00:00
Harald Radi 697398e18e ini patch to allow 'entry[] = value' entries 2003-01-19 12:01:38 +00:00
Moriyoshi Koizumi a1e6457561 Fixed bug #21744(21741)
Added test case for the bug
2003-01-19 11:32:54 +00:00
Ilia Alshanetsky 1fe4990bc0 ZTS fixes. 2003-01-19 08:32:26 +00:00
Ilia Alshanetsky 2500199ae3 ZTS fixes. 2003-01-19 04:09:32 +00:00
309697edb2 ChangeLog update 2003-01-19 01:50:24 +00:00
Ilia Alshanetsky fec2af82b8 Changed php_error to php_error_docref.
Make mcal compile with ZE2.
2003-01-19 00:47:03 +00:00
Ilia Alshanetsky 3d8e54f3a2 Changed php_error to php_error_docref. 2003-01-19 00:45:53 +00:00
Derick Rethans add3ec4e0b s/4.4/5.0 2003-01-18 22:33:56 +00:00
Ilia Alshanetsky aebb39b014 Changed php_error to php_error_docref.
Thanks to Marcus Börger for writing a script that significantly simplifies
this process.
2003-01-18 21:31:11 +00:00
Ilia Alshanetsky b2ecf47755 Fixed bug #21732 (Added a sanity check, that prevents parameter mismatch). 2003-01-18 20:48:52 +00:00
Ilia Alshanetsky c794f2c710 Removed pointless memory allocation checks. 2003-01-18 20:27:05 +00:00
Ilia Alshanetsky 984c0918ab Removed pointless memory allocation checks. 2003-01-18 20:10:23 +00:00
Ilia Alshanetsky 71e9f8cdd5 Removed pointless memory allocation checks. 2003-01-18 20:01:46 +00:00
Ilia Alshanetsky 60af5507a5 Changed php_error to php_error_docref. 2003-01-18 19:57:25 +00:00
Ilia Alshanetsky 1ae3c0e66e Removed pointless memory allocation checks.
Changed php_error to php_error_docref.
2003-01-18 19:53:35 +00:00
Ilia Alshanetsky 7cc28802af Changed php_error to php_error_docref. 2003-01-18 19:51:21 +00:00
Ilia Alshanetsky a7b91019e9 Removed pointless memory allocation checks. 2003-01-18 19:49:28 +00:00
Moriyoshi Koizumi a395304c72 Added test case for bug #21094 2003-01-18 19:44:12 +00:00
Ilia Alshanetsky e2868b5788 Removed pointless memory allocation checks. 2003-01-18 19:41:56 +00:00
Ilia Alshanetsky 72b356c1bc Removed pointless memory allocation checks. 2003-01-18 19:28:10 +00:00
Moriyoshi Koizumi 94c25df592 WS 2003-01-18 19:26:01 +00:00
Ilia Alshanetsky b566ad5d1b Changed php_error to php_error_docref. 2003-01-18 19:20:02 +00:00
Marcus Boerger 9d02c2bd56 correct my fault here and documnet the sense of the test 2003-01-18 19:06:29 +00:00
Moriyoshi Koizumi 310397f2ee Fixed typo 2003-01-18 19:02:21 +00:00
Moriyoshi Koizumi 2aa7bf8d8b Added test case for bug #21730 2003-01-18 18:59:27 +00:00
Ilia Alshanetsky a3daf3bbe8 Additional memory allocation fixes by Marcus Börger. 2003-01-18 18:51:12 +00:00
Moriyoshi Koizumi e23fead99f Tons of WS fixes 2003-01-18 18:49:47 +00:00
Ilia Alshanetsky e0654de590 Removed the no longer needed memory allocation checks. 2003-01-18 18:32:19 +00:00
Moriyoshi Koizumi 21b4499953 Fixed bug #21726 and #21730 2003-01-18 18:31:13 +00:00
Andrey Hristov 309ef518fc Renamed get_memory_usage() to memory_get_usage() (per Andi's advice)
This doesn't break any BC.
2003-01-18 15:03:01 +00:00
Wez Furlong 7002a39f97 Fix potential problem for 64-bit architectures. 2003-01-18 14:10:22 +00:00
Derick Rethans 39aa3a5d98 - Fixed memleak in fscanf(). 2003-01-18 13:55:58 +00:00
Derick Rethans a50e9acd8e - Skip test if the function to test is not available
#- Perhaps we need some infrastructure for this...
2003-01-18 13:53:25 +00:00
foobar 83e9f23182 Fix bug: #21687, imap extension does not include gss authentication mechanism 2003-01-18 07:00:47 +00:00
aba4c07be1 ChangeLog update 2003-01-18 01:33:47 +00:00
Harald Radi 46306a3212 export zend_objects_destroy_object()
static inline was meaningless anyways as the function
was only used as a callback handler and was never
called directly
2003-01-17 23:59:15 +00:00
Ilia Alshanetsky 054826b192 Added missing test result. 2003-01-17 23:57:43 +00:00
Moriyoshi Koizumi 0f714bc700 Bump year. 2003-01-17 22:54:47 +00:00
Moriyoshi Koizumi dc4cdaaf1b WS fix 2003-01-17 22:45:23 +00:00
Ilia Alshanetsky 833473d1de Removed pointless checks of array_init() return value. 2003-01-17 21:37:56 +00:00
Harald Radi 5795ed62f4 make std_object_handlers struct available for shared modules 2003-01-17 21:16:12 +00:00
Moriyoshi Koizumi f71ef5e091 Fixed a quoted printable decoder so that it would conform to RFC2045. 2003-01-17 20:00:31 +00:00
Andrey Hristov 6c843d1431 Moved to C style comments.
Last time forgot to convert the header files.
2003-01-17 19:35:13 +00:00
Sascha Schumann ebedf060a5 Fix POST handling once and for all. The daemon now never blocks and handles
uploads of up to 2GB on 32 bit platforms.

Uploads >16KB are put into a file-backed mmap area.

SG(request_info).content_type got corrupted somewhere. As a workaround,
we provide SAPI with a duplicate of the original string.
2003-01-17 18:53:22 +00:00
Marcus Boerger 973c5fa1ec fix jp2 detection and add testfile 2003-01-17 18:51:30 +00:00
Ilia Alshanetsky 169eb85e0a Syncronize bundled GD library with latest GD (2.0.11). 2003-01-17 18:34:07 +00:00
Derick Rethans cce2ffed8a - Fixed a bug that made that no newline was displayed when there was no value
for a row.
2003-01-17 18:07:10 +00:00
Andrey Hristov 7dd7b03aa8 Removed pointless checks around array_init(). 2003-01-17 16:33:01 +00:00
Ilia Alshanetsky fb6517e8ab Fixed memory leaks in imap_get_quota & imap_get_quotaroot.
Removed pointless checks around array_init().
2003-01-17 16:07:39 +00:00
Moriyoshi Koizumi f94cbfe52b Significant speed enhancements. I was underestimating the power of recent
CPUs :)
2003-01-17 09:04:02 +00:00
Sebastian Bergmann 0e178230b2 Move ZEND_ENGINE_2 check to where it is defined. 2003-01-17 06:15:24 +00:00
fc8d5c784d NEWS update 2003-01-17 01:37:02 +00:00
08c11f2931 ChangeLog update 2003-01-17 01:36:11 +00:00
Harald Radi 914cf3c0f8 move the ZE2 check into internal_functions_win32.c 2003-01-16 22:09:58 +00:00
Harald Radi 77f7ae3814 revert previous commit 2003-01-16 22:08:00 +00:00
Harald Radi 76adb58b7a unbreak the build 2003-01-16 21:52:06 +00:00
Ilia Alshanetsky 41092dbd8a Fixed bug #21651 (crash in pdf_open_memory_image() when inserting a
non truecolor image).
2003-01-16 21:18:49 +00:00
Moriyoshi Koizumi 93481ce9b8 Finally fixed a qp encoder bug that line break characters that appear exactly
at the end of the chunk lost in the output.
# I bet no more problems will occur in quoted-printable encoder.
# But I recognised the counterpart is still buggy due to RFC2045-incompliance.
2003-01-16 20:59:07 +00:00
Marcus Boerger 1dabcd4dad - JPEG 2000 support 2003-01-16 19:46:12 +00:00
Marcus Boerger 8958762de6 - corrected error in file detection for very small files
- JPEG 2000 support, mostly Adam Wright <adam@elysium.ltd.uk>
@Enhanced jpeg 2000 support for GetImageSize(). (marcus, Adam Wright)
2003-01-16 19:45:26 +00:00
Harald Radi b1613e16f2 change library name 2003-01-16 18:53:45 +00:00
Harald Radi f390fbb92a update skeleton 2003-01-16 18:46:59 +00:00
Harald Radi 4024425e8e fix path to config.w32.h 2003-01-16 18:25:59 +00:00
Harald Radi dd67c075bc add COM 2003-01-16 18:17:48 +00:00
Harald Radi 7c0e7b4fe8 prevent HEAD + ZE1 builds and add COM 2003-01-16 18:16:50 +00:00
Harald Radi 5aae306f96 for those who prefer to have com as a shared lib 2003-01-16 18:15:44 +00:00
Harald Radi 7f127a22df make layers loadable as self-sustaining php extension
which registeres itself in the rpc framework.
2003-01-16 17:49:22 +00:00
Dan Kalowsky dacf98c86f typo corrected 2003-01-16 16:42:25 +00:00
Dan Kalowsky ae8f64e325 Adding in test ability for WIndows to fetch_objects 2003-01-16 16:27:31 +00:00
Edin Kadribasic d4e143b8be Fixed bug #21648 2003-01-16 13:19:50 +00:00
Sascha Schumann db8b4c6762 Add INI setting session.hash_bits_per_character which enables developers
to choose how session ids are represented, regardless of the hash algorithm.
2003-01-16 07:21:49 +00:00
Ilia Alshanetsky 4e53357e9b Fixed bug #20079 (made ora_logoff return TRUE on success). 2003-01-16 02:53:44 +00:00
7f3b79adc5 ChangeLog update 2003-01-16 01:33:30 +00:00
Ilia Alshanetsky 12d2b01a25 Fixed bug #20933 (isset/empty didn't work when used on string offsets). 2003-01-16 00:44:17 +00:00
Edin Kadribasic 46303d75be Added some missing modules. Removed some that are built in or moved to
ext/rpc.
2003-01-15 22:19:46 +00:00
Sascha Schumann 6f4333c7ae scrap STANDARD_SAPI_MODULE_PROPERTIES; it is causing more harm than good 2003-01-15 21:13:01 +00:00
Andi Gutmans e5afca38b6 - Revert int -> unsigned int change for str.len 2003-01-15 20:35:06 +00:00
Ilia Alshanetsky 1351f42efc More build fixes. 2003-01-15 19:36:13 +00:00
Sascha Schumann 7431b52291 Revert commit which turned the lengths of strings into zend_uint. 2003-01-15 19:10:14 +00:00
Wez Furlong a3a2dcd8a9 Relieve scripts of the burden of ensuring that all pipes are closed prior
to calling proc_close().
Implement proc_get_status(resource $process) which returns an array of
information about a process created with proc_open().
The information includes:
array(
	"command" => string "name of the command",
	"pid" => long process identifier,
	"running" => bool true if the process is still running
	"exitcode" => long exitcode if the process exited
	"signaled" => bool true if the process was signaled
	"termsig" => long signal number if signaled
	"stopped" => bool true if the process is stopped
	"stopsig" => long signal number if stopped
);
2003-01-15 18:54:03 +00:00
Ilia Alshanetsky d4f73f8da6 Fixed a typo. 2003-01-15 17:22:03 +00:00
Sebastian Bergmann be3427e4f0 Define PHP_CAN_SUPPORT_PROC_OPEN. 2003-01-15 16:53:49 +00:00
Sebastian Bergmann 003ea0717e Add proc_open.c to project. 2003-01-15 16:48:46 +00:00
Wez Furlong 1a314027d3 - Move proc_open code to a source file of it's own.
- Tidy up that netware mess by performing a configure check which will
  define the symbol PHP_CAN_SUPPORT_PROC_OPEN if PHP can support proc_open.
- Protected the proc_open specific code with #ifdef PHP_CAN_SUPPORT_PROC_OPEN
  so that user-space scripts can use function_exists and react accordingly.

** Heads Up Win32: You need to add ext/standard/proc_open.c to the DSP and
** #define PHP_CAN_SUPPORT_PROC_OPEN in the w32 config header.
2003-01-15 16:29:00 +00:00
Ilia Alshanetsky ea0f37fc76 Build fixes. 2003-01-15 15:36:28 +00:00
Moriyoshi Koizumi fdf0768d4e Fixed a qp encoder bug that the constructor sometimes fails if
line-breaking mode is off.
2003-01-15 15:05:17 +00:00
Ilia Alshanetsky 475125ac25 Typo fixes. 2003-01-15 14:05:41 +00:00
Ilia Alshanetsky f704ac13a8 Fixed typo. 2003-01-15 14:02:11 +00:00
Ilia Alshanetsky 2b121d0b37 Various corrections. 2003-01-15 13:55:34 +00:00
Ilia Alshanetsky dbe5972a0d Fixed typos. 2003-01-15 13:50:54 +00:00
Ilia Alshanetsky e0e77d7d02 Typo corrections. 2003-01-15 13:48:07 +00:00
Sascha Schumann 0855c0b603 whitespace 2003-01-15 11:30:39 +00:00
Sascha Schumann 4668b7130b whitespace 2003-01-15 11:22:04 +00:00
Yasuo Ohgaki 345ada81c8 Fixed proto 2003-01-15 10:21:15 +00:00
Adam Dickmeiss f8b55fabc5 Fix functions comments (connection resource rather than connection id).
New functions yaz_set_option and yaz_get_option.
Cleanup in yaz_connect.
2003-01-15 08:00:44 +00:00
Adam Dickmeiss 701ab27de7 Fix lib config for the case where YAZ depends on multiple libraries 2003-01-15 07:57:52 +00:00
Ilia Alshanetsky fc9282c183 Kill compile warning. 2003-01-15 03:37:11 +00:00
Ilia Alshanetsky 299614ae16 Newer parameter parsing API. 2003-01-15 03:01:17 +00:00
Ilia Alshanetsky a354531144 Getting rid of the old API parsing code. 2003-01-15 02:54:54 +00:00
Ilia Alshanetsky c2d66fa8bf Changed php_error to php_error_docref.
Made use of the more recent parameter parsing API, zend_get_parameters*.
2003-01-15 02:49:38 +00:00
Ilia Alshanetsky ad42fba9fa Removed pointless checks around array_init() & ZE memory allocation macros.
Changed php_error to php_error_docref.
Dropped getParam* parameter parsing API in favor of zend_get_parameters*.
2003-01-15 02:31:16 +00:00
a34d4dc30e ChangeLog update 2003-01-15 01:34:55 +00:00
Ilia Alshanetsky a63b47cae0 This patch allows cpdf to be compiled in conjunction with ncurses, which was
not possible before due to conflicting defines.
2003-01-15 00:52:06 +00:00
Andi Gutmans c073b76aac - Change "is" to "instanceof" as it explains better what the operator means.
- "is_a" was also appropriate but ugly.
2003-01-14 21:29:23 +00:00
Ilia Alshanetsky e37aee1a34 Porting of patch applied to ext/xmlrpc. 2003-01-14 21:04:47 +00:00
Ilia Alshanetsky a0b3f822f7 Made the code use php_error_docref().
Removed pointless checks around array_init() and emalloc().
Switched to zend_get_parameters_ex() argument parsing API.
2003-01-14 21:02:14 +00:00
Andrey Hristov 05ff5da32b Migrated to C style comments. 2003-01-14 20:24:40 +00:00
Ilia Alshanetsky 74e34d1657 Changed getParameters() to zend_get_parameters_ex(). 2003-01-14 20:07:52 +00:00
Ilia Alshanetsky 1dbf11e1ba Fixed compile warnings. 2003-01-14 20:05:38 +00:00
Ilia Alshanetsky f12a4164a5 One more typo. 2003-01-14 20:02:42 +00:00
Ilia Alshanetsky 44c8927daf Fixed typos. 2003-01-14 19:59:48 +00:00
Moriyoshi Koizumi 3ae7d13bc9 Appended my name to the list of authors 2003-01-14 19:26:00 +00:00
Moriyoshi Koizumi ac66d4481e Test update for new feature 2003-01-14 19:25:10 +00:00
Ilia Alshanetsky cd267a3df4 Switched from old getParse* argument parsing API to a more recent
zend_get_parameters*.
2003-01-14 18:54:44 +00:00
Andrey Hristov 7866f02260 added function get_memory_usage(). available only when PHP is compiled
with --enable-memory-limit
2003-01-14 18:26:47 +00:00
Ilia Alshanetsky 62f7e27141 Fixed compile warning & removed useless variable. 2003-01-14 17:45:31 +00:00
Ilia Alshanetsky 7d14dae0bb Changed php_error to php_error_docref.
Got rid off the ancient getParameters* parameter parsing API.
2003-01-14 17:44:56 +00:00
Moriyoshi Koizumi e5c5412777 Added a new option "force-encode-first" to the quoted-printable encoder
as per Wez's request. If enabled, the encoder forcefully does qp
tranformation on every first character of lines in incoming stream.
2003-01-14 16:42:18 +00:00
Ilia Alshanetsky 4bc247553a Changed php_error() to php_error_docref().
Made pdfdoc retrieval a macro.
2003-01-14 15:15:53 +00:00
Moriyoshi Koizumi bde6801add Made php_quot_print_decode() RFC2045-compliant
# this function is only used in iconv extension and the corresponding
# userland function doesn't use it, so I don't see any BC issue here.
2003-01-14 15:14:11 +00:00
Stanislav Malyshev 5340b204ca fix memory leaks and key size 2003-01-14 15:12:35 +00:00
Edin Kadribasic 45e9f594bb MFB: bind_textdomain_codeset() availability on windows 2003-01-14 14:46:33 +00:00
Ilia Alshanetsky dff55752aa MFZE2 2003-01-14 14:21:45 +00:00
Derick Rethans 4ff9267143 s/gd/gd2 2003-01-14 13:55:00 +00:00
Stanislav Malyshev 67c50ee22a fix warning 2003-01-14 12:27:07 +00:00
Stanislav Malyshev eccc536883 Make add_property_ functions work via write_property handler 2003-01-14 12:15:09 +00:00
Stanislav Malyshev f30f3590a1 ws 2003-01-14 12:13:51 +00:00
Ilia Alshanetsky ad3b2ccec9 Reverting previous patch. 2003-01-14 02:41:47 +00:00
Ilia Alshanetsky 6fb507b53e Changed php_error to php_error_docref().
Removed pointless checks around array_init().
2003-01-14 02:39:10 +00:00
062942c4e9 ChangeLog update 2003-01-14 01:35:54 +00:00
Moriyoshi Koizumi a0be48c109 Fixed small memory leak that occurs when the invalid line length is passed
to the qprint ctor.
2003-01-14 01:27:57 +00:00
Moriyoshi Koizumi 121e625977 Fixed quoted-printable encoder so that it produces RFC2045 complicant
output. As per this specification requirement, the constructor now accepts
three options: binary (boolean), line-len (uint), line-break-chars (string).
2003-01-14 01:23:35 +00:00
foobar cabee3635f Fixed bug: #21543, Informix version detection fails 2003-01-13 23:31:13 +00:00
Frank M. Kromann d07dc0fc4c false should be VT_FALSE 2003-01-13 19:33:10 +00:00
Moriyoshi Koizumi e89bace72c Fixed typoFixed typoFixed typoFixed typoFixed typoFixed typoFixed typoFixed typo 2003-01-13 19:18:18 +00:00
Andrey Hristov 1cdc956637 added array_combine().
Creates an array by using the elements of the first parameter as keys and
the elements of the second as correspoding keys. Error is thrown in case
the arrays has different number of elements. Number of elements 0 is not
valid for both parameters.
2003-01-13 18:12:23 +00:00
Andrey Hristov ffeb57afb5 Modifying TS build.
Migrating to _ex API for hash traversal.
2003-01-13 16:39:16 +00:00
Ilia Alshanetsky 8e7df3fbf1 MFZE2 2003-01-13 16:34:19 +00:00
Edin Kadribasic 60cac99a71 Adjust paths for the new location of ext/rpc/java 2003-01-13 16:07:45 +00:00
Edin Kadribasic f09be34dd3 Adjust paths to the new location java.dsp 2003-01-13 15:15:24 +00:00
Edin Kadribasic 8dbbddfb54 Fix ZTS build here too.
#
# What is the correct location of XMLRPC extension?
# Can the reduntand one be removed then and the build system fixed
# to acommodate that.
2003-01-13 13:39:29 +00:00
Edin Kadribasic 8ef5a3d48e Fixed ZTS build. 2003-01-13 13:36:23 +00:00
Moriyoshi Koizumi 78f527e2b7 Fixed a silly segfault bug caused by lack of strict type checking 2003-01-13 11:00:22 +00:00
Sascha Schumann 726eb90bd5 which is not portable. use our bundled shtool instead. 2003-01-13 10:27:50 +00:00
Moriyoshi Koizumi ab71e2cbaa . Implemented a common filter parameter parsing function.
# For example "base64-encode.line-break-chars=--,base64-decode.blah=foobar"
# will be parsed and splitted into a zval array as
# array(2) {
#   ["base64-encode"]=>
#   array(1) {
#     ["line-break-chars"]=>
#     string(2) "--"
#   }
#   ["base64-decode"]=>
#   array(1) {
#     ["blah"] =>
#     string(6) "foobar"
#   }
# }
. Added automatic line-breaking feature for base64 encode filter. This
  can be turned on by putting a option entry "base64-encode.line-length"
  to the filter parameters.
2003-01-13 10:21:40 +00:00
Derick Rethans 2cbcb743d8 - Fix ZTS build 2003-01-13 08:19:50 +00:00
Andi Gutmans 94e6eb06dd - Don't check if the handle is bogus. We should crash. 2003-01-13 04:55:34 +00:00
aec08c6052 ChangeLog update 2003-01-13 01:34:00 +00:00
Moriyoshi Koizumi 22a6b8f1a4 Added test case for bug #21600 2003-01-12 23:56:04 +00:00
Harald Radi 58d3451c75 fix wrong dereferenciation 2003-01-12 21:59:57 +00:00
Moriyoshi Koizumi 1fec8e3d13 Fixed a bug of the base64 decoder that a sequence of intervening
characters that are supposed to be ignored by the decoder cause output
corruption.
2003-01-12 21:05:22 +00:00
Stanislav Malyshev 33b67ab868 fix inheritance 2003-01-12 18:57:18 +00:00
Stanislav Malyshev 98175957a7 ZE2 compatibility 2003-01-12 18:42:16 +00:00
Stanislav Malyshev 2ae8d124ce Remove handle_property from here too 2003-01-12 17:22:35 +00:00
Stanislav Malyshev d48ffd97d6 RIP handle_* functions. ZE2 will use __ handlers instead.
# Yes, I know this will break some things. I will fix those I can find shortly.
2003-01-12 17:16:07 +00:00
Sebastian Bergmann f37cb1c617 ZTS fixes. 2003-01-12 14:47:18 +00:00
Stanislav Malyshev a7e14749e7 Disable ZE2-incompatible parts
# This should be rewritten for ZE2 anyway...
2003-01-12 14:43:04 +00:00
Stanislav Malyshev 1b355e119e Move Z_OBJ_P here. 2003-01-12 14:39:45 +00:00
Stanislav Malyshev d27b3d3ad9 Remove Z_OBJ - it's internal to Zend objects, no generic function except
those in zend_object_handlers.c should use it.
Add Z_OBJ_HANDLER macro for easy access to handlers
2003-01-12 14:38:54 +00:00
Sebastian Bergmann 24db7f182a ZTS fixes. 2003-01-12 14:25:58 +00:00
Stanislav Malyshev 6cc7ee265c add get_class_name handler 2003-01-12 13:56:51 +00:00
Stanislav Malyshev bcc1e5a74e remove unneeded var 2003-01-12 13:50:17 +00:00
Moriyoshi Koizumi a88173bf86 Fixed infinite loop bug when an invalid quoted-printable escape sequence
appears in the streem.
2003-01-12 13:46:11 +00:00
Stanislav Malyshev 9bba373a17 Use generic handlers instead of Z_OBJ 2003-01-12 13:45:50 +00:00
Moriyoshi Koizumi b1e8631986 Fixed error msg format so it correctly reports the actual filter name 2003-01-12 13:41:35 +00:00
Sascha Schumann c79e780f5c recommending SHA-1 as hash function 2003-01-12 13:26:47 +00:00
Harald Radi 2f7f1dd1b8 #@!$$grml*$% 2003-01-12 13:18:05 +00:00
Harald Radi 13c2254e21 partially revert previous commit and
change zend_modules.h to include
a forward declaration to zend_ini_entry
2003-01-12 13:14:23 +00:00
Sascha Schumann 5a468ce877 sync entries 2003-01-12 13:09:54 +00:00
Sascha Schumann f2f1f94e36 add INI setting session.hash_function
add support for creating session ids using SHA-1
source more entropy for session ids
2003-01-12 13:07:14 +00:00
Sascha Schumann 0b8401bf27 handle ERANGE from strtol properly 2003-01-12 13:05:32 +00:00
Harald Radi 814045bba6 added zend_ini_entry to zend_modules_entry as
discussed with zeev
2003-01-12 13:00:28 +00:00
Harald Radi c37ee2a12a fix 'use of uninitialized variable' warning 2003-01-12 12:57:20 +00:00
Stanislav Malyshev 0ccbd37df7 validate handle 2003-01-12 12:56:04 +00:00
Moriyoshi Koizumi aa41ab285a . Updated quoted-printable filter by a neater implementation.
. Changed emalloc family functions to pemalloc ones for persistent filters.
. Changed base64 and quoted-printable filter names to "convert.base64-encode",
  "convert.base64-decode", "convert.quoted-printable-encode", and
  "convert.quoted-printable-decode" respectively for the consistency that
  may be requested later.
2003-01-12 12:48:13 +00:00
Derick Rethans 46a5371ecd - Update NEWS to show 5.0.0 2003-01-12 12:45:19 +00:00
Zeev Suraski 424e98f4e2 Implemented compatibility mode
To enable - zend2.implicit_clone = on in php.ini or using ini_set()
2003-01-12 12:39:06 +00:00
Jan Lehnardt c98f4e9f32 - fix typo 2003-01-12 11:42:29 +00:00
Sebastian Bergmann 17c1518792 Patch by Giuseppe Tanzilli <g.tanzilli@gruppocsf.com>. 2003-01-12 08:03:18 +00:00
Sebastian Bergmann a142ce729f Patch by Giuseppe Tanzilli <g.tanzilli@gruppocsf.com>. 2003-01-12 08:01:42 +00:00
Frank M. Kromann 874cddd4ae Release skiped results. This will free memory on the server.
Make mssql_execute work for stored procedures with and without returning result sets
2003-01-12 06:28:41 +00:00
091609d661 ChangeLog update 2003-01-12 01:31:51 +00:00
Ilia Alshanetsky c4088ce25b Do not 'convert' double columns to integers after the 1st row in the result
set.
2003-01-11 23:50:37 +00:00
Ilia Alshanetsky 48f2ad4703 Fixed handling of NUMERIC type, when it contains numbers that could
potentially exceed the interger limit.
2003-01-11 23:06:35 +00:00
Moriyoshi Koizumi 7fa0970567 Reverted because correct decision has not been made yet. 2003-01-11 23:05:19 +00:00
Moriyoshi Koizumi dd9b7f25cf This patch is likely to fix win32 build 2003-01-11 22:36:38 +00:00
Moriyoshi Koizumi b66b92e996 Reduced warnings in ZE2 build 2003-01-11 22:32:19 +00:00
Moriyoshi Koizumi dd2ad168e1 Reduced compiler warnings in ZE2 build 2003-01-11 22:17:37 +00:00
Andrey Hristov cd2ce96e03 reverting 2003-01-11 19:37:23 +00:00
Ilia Alshanetsky 8facc65202 Added stripos() & strripos() functions.
Added 3rd parameter (offset) to strrpos().
2003-01-11 17:52:38 +00:00
Andi Gutmans 76c663b321 - Fix typo and whitespace 2003-01-11 17:04:16 +00:00
Derick Rethans 2c44fab3a0 - Ported the zend_execute_internal hook to ZendEngine2. 2003-01-11 16:12:44 +00:00
Derick Rethans 6b7eaaa2c4 - Moving java and dotnet extensions to ext/rpc 2003-01-11 12:23:45 +00:00
Harald Radi c8d19858ac freed reader twice instead of writer and reader 2003-01-11 11:34:43 +00:00
Sebastian Bergmann 213b5abd06 Add missing ,. 2003-01-11 09:51:53 +00:00
Harald Radi 656ccddfce fix build 2003-01-11 08:59:37 +00:00
Sebastian Bergmann 02c1b1d8d2 Leftover. 2003-01-11 06:08:55 +00:00
a0055ba2e5 NEWS update 2003-01-11 01:34:56 +00:00
c5153b24c8 ChangeLog update 2003-01-11 01:34:28 +00:00
Ilia Alshanetsky 973937e7aa Fix the line numbering when the 1st line in the script is #!. 2003-01-11 00:20:50 +00:00
Harald Radi 5fc6842817 this is now implemented by the engine itself 2003-01-10 23:40:12 +00:00
Harald Radi fff34aa3be ext/com is not compatible with ZE2, the ZE2 version is located in
ext/rpc/com
2003-01-10 23:39:09 +00:00
Harald Radi c3867a7c8e HEAD defaults to build with ZE2 now 2003-01-10 23:36:18 +00:00
Frank M. Kromann 16cda12728 Fixing copy and paste errors 2003-01-10 19:33:31 +00:00
Frank M. Kromann c2e7158712 Avoid warnings when running stored procedures returning multiple results
before setting output and return values.
Additional results can be skipped by the optional parameter to mssql_execute
2003-01-10 19:23:36 +00:00
Ilia Alshanetsky 8c3b8d4fe6 MFZE2 2003-01-10 19:18:20 +00:00
Christian Stocker 9234916fc8 Throw error if object is not a XML_DOCUMENT_NODE in domxml_dump_node() 2003-01-10 18:07:36 +00:00
Andrey Hristov 53656f196b skipping unneeded copy 2003-01-10 17:39:10 +00:00
Andrei Zmievski efaa31e940 Automatically register constructor, destructor, and clone function when
class methods are registered.
2003-01-10 14:41:53 +00:00
Wez Furlong cf9f784ecd Fix the number format fix when the number of decimal places is 0.
# Thanks to Edin for his telepathy!
2003-01-10 13:32:24 +00:00
Derick Rethans 0988bc2ee6 - Fixed bug #20155: xmlrpc compile problem with zendengine2 (Path by Jan
Schneider)
@- Fixed bug #20155: xmlrpc compile problem with zendengine2 (Derick, Jan
@  Schneider)
2003-01-10 08:24:55 +00:00
Moriyoshi Koizumi 380928e6bf Reduced compiler warnings 2003-01-10 04:44:21 +00:00
Moriyoshi Koizumi 7ecd3ff91a Reduced compiler warnings 2003-01-10 04:37:26 +00:00
Moriyoshi Koizumi 6a1d69d4ba Added missing cast operators 2003-01-10 04:32:25 +00:00
Ilia Alshanetsky dee2d7fed7 Fixed ImageRotate when rotation angle is 90 degrees, patch by
leon@leonatkinson.com.
2003-01-10 02:00:39 +00:00
dd277cf2c7 ChangeLog update 2003-01-10 01:33:11 +00:00
Stig Bakken 3f09044ba6 * prepare 1.0.1 release 2003-01-10 01:24:56 +00:00
Stig Bakken 4a723721b9 * obey PHP_PEAR_INSTALL_DIR and PHP_PEAR_PHP_BIN environment variables 2003-01-10 01:16:23 +00:00
Stig Bakken 4cf28eb0fc * verbosity fix for cvstag and cvsdiff commands 2003-01-10 01:15:40 +00:00
Stig Bakken 26a472f767 * TODO item 2003-01-10 01:12:23 +00:00
Stig Bakken eaf21d230e * add "cvsdiff" command 2003-01-10 01:11:30 +00:00
Stig Bakken 95255fe5e1 * use getenv() instead of $_ENV[] 2003-01-10 01:11:00 +00:00
Ilia Alshanetsky 5413a66cbb CS fixes 2003-01-09 23:23:32 +00:00
Ilia Alshanetsky 3e5bbba351 Fixed a memory corruption that occurs when an unterminated " is encountered
this bug maybe be related to #21556.
2003-01-09 22:49:18 +00:00
Frank M. Kromann 8e0535bcd5 Adding extended checks for where FreeTDS is installed 2003-01-09 22:35:16 +00:00
Ilia Alshanetsky 9b560970f8 Fixed compiler warnings. 2003-01-09 22:33:43 +00:00
Sara Golemon 4d789b593f Bug #21531 file_exists() and other filestat functions throw errors when in safe mode and file/directory does not exist.
Extended php_checkuid function to add "flags" field via rename to php_checkuid_ex with alias for BC in functions that do want safe mode errors thrown.
2003-01-09 21:57:45 +00:00
Moriyoshi Koizumi 82c6d54517 Fixed typo 2003-01-09 20:23:36 +00:00
Wez Furlong 59e4fdcc10 Implement fprintf() and vfprintf().
Add a couple of tests.
2003-01-09 17:29:31 +00:00
foobar 32eb31719a Fix bug: #21511, config.status warning 2003-01-09 16:37:45 +00:00
Zeev Suraski 66d30a4966 Found some more occurences of that elusive bug... 2003-01-09 16:16:57 +00:00
Zeev Suraski ef6a44d15c Fix one lousy, annoying lurking bug (memory corruption)
Sebastian - try coWiki again please...
2003-01-09 16:10:33 +00:00
Wez Furlong d8fbd1acef Fix Bug #21523 - number_format could cause a memory allocation for a
negative memory size in situations where the sprintf implementation of the
host system generated less decimal places than were requested.

Resolved this issue by making number_format examine the string returned
by spprintf and have it pad to the correct number of decimal places.

Added a test-case based on the bug report; the length of decimal places
required to trigger this bug is sprintf implementation dependent; as the
implementation is now using spprintf (provided by PHP), that number is
78 digits (NDIG - 2).

# I played with the idea of enhancing sprintf to do the equivalent, but
# it was too much effort considering that the precision of floats/doubles
# is not good enough to warrant it.

# This fix could do with some QA from someone else to make sure there are
# no memory bounds problems and then MFH it to PHP_4_3
2003-01-09 15:44:49 +00:00
Zeev Suraski ace55f3251 Unify and make it easy to add code into the broken-string error handler 2003-01-09 15:32:22 +00:00
Stig Bakken f39c0ad2b6 * added debug_backtrace() support to PEAR errors 2003-01-09 15:14:23 +00:00
Stig Bakken 796083b936 * System::which() now checks .exe .bat .cmd and .com on Windows 2003-01-09 15:11:27 +00:00
Stig Bakken 239d203e4a * cleanups 2003-01-09 15:06:14 +00:00
Zeev Suraski 4bab4a7b55 Fix writability checks 2003-01-09 14:46:46 +00:00
Zeev Suraski d35ddb740e Time for an update 2003-01-09 10:03:26 +00:00
Zeev Suraski b817dab206 Fix leak 2003-01-09 09:22:44 +00:00
Frank M. Kromann b33fe2b2c6 Use the correct link when checking for more results on stored procedures 2003-01-09 08:19:41 +00:00
Frank M. Kromann 6660f8ae4e Restire BC for mssql_execute(). This will not break the new feature for handling
multiple results from a single stired procedure.
Adding mssql_free_statement()
2003-01-09 08:00:07 +00:00
Ilia Alshanetsky ef9ba94c8b Fixed bug #21529 (memory corruption by fsockopen()). 2003-01-09 03:33:15 +00:00
Frank M. Kromann 392e5013b4 changed from LVAL to RESVAL macro 2003-01-09 02:44:44 +00:00
7faaf86d3a ChangeLog update 2003-01-09 01:33:21 +00:00
Yasuo Ohgaki ae8db8c608 Adjust config.m4 for new build system and improve lib detection a little 2003-01-09 01:19:26 +00:00
foobar 66fd5008ab Fix the ZTS build. 2003-01-09 00:15:33 +00:00
Moriyoshi Koizumi 59393ef3ad Reimplemented base64 filter to use iconv()-like facility for flexibility.
# I'm leaving the code dirty & ugly prior to the discussion.
2003-01-08 23:44:38 +00:00
Frank M. Kromann 7cd7cad1b5 Changed global data type to avoid problems with initialization 2003-01-08 23:19:54 +00:00
Ilia Alshanetsky 072be90d6f Added support for WBMP images. 2003-01-08 20:36:03 +00:00
Ilia Alshanetsky 17e51c5946 Fixed bug #21518.
Fixed memory in leak ImageCreateFromString().
Fixed a bug that prevented proper identification of WBMP images and thus
prevented ImageCreateFromString() from working on those images.
2003-01-08 18:11:40 +00:00
James Cox 24d034251d cvs is dev not alpha. 2003-01-08 17:30:49 +00:00
Ilia Alshanetsky efcd8a7094 MFZE2 2003-01-08 16:41:47 +00:00
Zeev Suraski ada5c4009e Fix UMR 2003-01-08 13:28:16 +00:00
Georg Richter 5312594a27 fixed bug #21498 2003-01-08 11:00:06 +00:00
Ilia Alshanetsky 2d4a4a99d3 Removed unused variable. 2003-01-08 03:33:00 +00:00
Ilia Alshanetsky a7ac507ade Fixed bug #21499 (more descriptive message in the event of require/include
failure).
2003-01-08 02:44:09 +00:00
72479b90b3 NEWS update 2003-01-08 01:38:00 +00:00
87660b06f4 ChangeLog update 2003-01-08 01:34:57 +00:00
Ilia Alshanetsky 5de9962d50 Fixed bug #21297. The fix also fixes miscalculation of lines numbers by 1
due the previously mentioned bug.
2003-01-08 00:41:53 +00:00
Ilia Alshanetsky ac3e8601ae Version is char ;). 2003-01-08 00:38:36 +00:00
Christian Dickmann 26e393c69f fix default umask(); (thx to Mirco MEEBEY Bauer for bringing this behavior to my attention and testing the patch) 2003-01-07 23:12:06 +00:00
Dan Kalowsky 19b25ca5d2 Version tag for future move to PECL 2003-01-07 23:00:11 +00:00
Dan Kalowsky b89d9db706 Reverting last change as it really doesn't fix longreadlen problems in all
cases.
2003-01-07 22:56:58 +00:00
Moriyoshi Koizumi b064810550 Instances should not be freed in dtor()... 2003-01-07 22:53:42 +00:00
Moriyoshi Koizumi b86a4edeed Made error msg format more consistent 2003-01-07 22:52:24 +00:00
Pierre Joye a9999190c6 Fix line drawed twice (L. Atkinson) 2003-01-07 22:34:00 +00:00
Sara Golemon f4f313ff40 Backout changes between 1.6 and 1.7 2003-01-07 16:43:26 +00:00
Zeev Suraski 6591b9c826 Add missing call 2003-01-07 16:33:28 +00:00
Levi Dixon beb7476ba9 Added support for Shared Data Mode for OCI8_VERSION >= 8.1, which will provide memory savings by sharing common statement data 2003-01-07 15:55:59 +00:00
Edin Kadribasic 0c80cc9d20 #17098 was MFH'ed 2003-01-07 15:27:27 +00:00
Ilia Alshanetsky b1fab873c2 Added a check for availability of PCRE extension needed by test-suite. 2003-01-07 15:21:34 +00:00
Vincent Blavet 7121150e5f * Synchronize with /pear/Archive_Tar/Tar.php 1.5 :
- Add support for long filenames (greater than 99 characters)
  - Add private methods _readLongHeader() and _writeLongHeader()
2003-01-07 15:04:42 +00:00
Ilia Alshanetsky f7513855b3 Fixed ZTS build with ZE2. 2003-01-07 14:34:41 +00:00
Ilia Alshanetsky 928c260c57 ZTS cleanup. 2003-01-07 13:02:43 +00:00
Zeev Suraski e8de102cd6 Fix leaks 2003-01-07 12:11:40 +00:00
Zeev Suraski 651cea08f0 whitespace 2003-01-07 11:37:09 +00:00
Edin Kadribasic 6d55e3456f MFB:
Fixed bug #21442 (Crash of mail() on Windows when the first parameter
is empty).
2003-01-07 11:24:17 +00:00
Zeev Suraski efb9fdf0e6 call dtors on shutdown 2003-01-07 10:33:22 +00:00
Sascha Schumann e180f20e63 tell user which header files could not be found 2003-01-07 09:49:08 +00:00
Moriyoshi Koizumi 346fa499ca Fixed small leak 2003-01-07 08:57:27 +00:00
Frank M. Kromann 1638ddd4c2 Making the mssql extension work when build as a shared object 2003-01-07 05:19:48 +00:00
Ilia Alshanetsky f0de896ed2 Fixed ZTS build. 2003-01-07 03:44:12 +00:00
Ilia Alshanetsky 34e868d451 MFB + CS 2003-01-07 02:47:24 +00:00
Moriyoshi Koizumi b7740a0351 Trivial grammer fix 2003-01-07 01:46:38 +00:00
Moriyoshi Koizumi eed5a6bed0 Implemented quoted-printable stream filter 2003-01-07 01:41:18 +00:00
f8075804a5 NEWS update 2003-01-07 01:36:37 +00:00
0f6db9ef82 ChangeLog update 2003-01-07 01:34:32 +00:00
Sara Golemon 35b1635c81 Add option to stream_get_filters() user-defined fiters vs. all filters, default to user only 2003-01-07 01:02:29 +00:00
Moriyoshi Koizumi 00a36a09e1 Implemented string.base64 stream filter
@- Implemented string.base64 stream filter. (Moriyoshi)
2003-01-07 00:03:25 +00:00
Stefan Esser 58d65abbcb Adding support for anonymous fileuploads (#21450) 2003-01-06 23:51:28 +00:00
Wez Furlong 39848ce35c Fix for Bug #20827: where stat is a macro on Tru64.
Patch from <julien.soula@free.fr>
2003-01-06 23:27:03 +00:00
Ilia Alshanetsky 97dd1e8abf Fixed bug #21453 (improper handling of non-terminated <). 2003-01-06 22:13:03 +00:00
Ilia Alshanetsky 15f7c2c332 Fixed Bug #21443 and related bug #21468. 2003-01-06 21:43:28 +00:00
Dan Kalowsky 86b99ffcf6 Patch for bug #19349 2003-01-06 18:23:55 +00:00
Dan Kalowsky b588e10553 Correction for bug #21279 2003-01-06 18:10:06 +00:00
Moriyoshi Koizumi 4c2d6cfea8 Moved php_quot_print_decode() to quot_print.c so that it can be used
outside the iconv module
2003-01-06 15:47:25 +00:00
Moriyoshi Koizumi d0570815af Added more RFC2047-compliancy check in iconv_mime_decode() 2003-01-06 15:40:22 +00:00
Moriyoshi Koizumi 6f44489b68 Fixed iconv_mime_decode() so that it comforms to RFC2231 2003-01-06 15:35:42 +00:00
Georg Richter 8aeb7f35bc fixed missing & (Thx to Sebastian Bergmann) 2003-01-06 14:13:47 +00:00
Wez Furlong d23d4b366d Make it slightly more obvious that the return value is relative to the length
of the input data.
2003-01-06 14:04:23 +00:00
Wez Furlong 52a3c29e22 Fix for bug #21406; infinite loop during filter flushing. 2003-01-06 14:00:57 +00:00
Edin Kadribasic 3d9c3c6662 MFB:
Fixed bug #20503 (imagesetbrush() availability on windows).
2003-01-06 10:49:52 +00:00
Anantha Kesari H Y b3d80fe441 Removed #ifdef NetWare and made the necessary changes in the directory structure of NetWare. 2003-01-06 10:28:34 +00:00
Anantha Kesari H Y dc8b2e6ddd Header file for PostgreSQL. Moved from netware directory to netware/libpq directory. 2003-01-06 10:27:33 +00:00
Anantha Kesari H Y 4196f7d0c3 This file moved to netware/libpq directory. 2003-01-06 10:24:36 +00:00
Christian Stocker 413053aa75 - get_path forgotten in .h file
- fix crash in domxml_node_insert_before() (by Lukas Schröder)
2003-01-06 09:59:53 +00:00
Anantha Kesari H Y 159f0bcdd8 Added symbols to build PostgreSQL extension for NetWare. 2003-01-06 09:08:55 +00:00
Anantha Kesari H Y 303f888a09 Changes for NetWare makefile. 2003-01-06 09:05:59 +00:00
Anantha Kesari H Y f58016b348 Makefile added newly and modified the header file for NetWare. 2003-01-06 09:05:03 +00:00
Christian Stocker cafc0b2e59 @- Added domxml_node_get_path() (Lukas Schröder)
- Fixed segfault, when trying to add a node to itself.
2003-01-06 08:47:35 +00:00
Anantha Kesari H Y 509b4d39b5 Added #ifdef HAVE_SYSLOG_H around syslog function in the whole file to avoid link failure. 2003-01-06 05:59:17 +00:00
Anantha Kesari H Y e6003eba60 Modified for Netware. 2003-01-06 05:55:46 +00:00
Sara Golemon 999d989aa9 Added string.toupper and string.tolower filters and generalized non-op filter methods 2003-01-06 05:22:06 +00:00
Frank M. Kromann 6b0b7e3f42 Nuke warning, on Win32 build 2003-01-06 04:29:33 +00:00
Frank M. Kromann 01f5c5d6fe enable imageftbbox() and imagefttext() on WIn32 2003-01-06 04:28:49 +00:00
Sara Golemon 42e912da79 Expose stream_filters_hash so that it can be searched by stream_get_filters() 2003-01-06 04:06:40 +00:00
Edin Kadribasic e0ed7e9057 Complete gif readonly support addition by adding missing gd_gif_in.c
file to the project.
2003-01-06 01:39:08 +00:00
b38f1e162c ChangeLog update 2003-01-06 01:34:25 +00:00
Edin Kadribasic 6113d95433 Comment out non ANSI C standard comliant code. Fixes win32 build. 2003-01-06 01:26:14 +00:00
Edin Kadribasic 59b37a5ce4 Fixed win32 build. 2003-01-06 01:08:59 +00:00
Ilia Alshanetsky b52eb8f14a Fixed bug #21445. 2003-01-06 00:47:40 +00:00
Sara Golemon 7dae400063 Fixes to stream_get_wrappers() and stream_get_filters() handle hash table layouts better, plus some picune whitespace fixes 2003-01-05 22:24:49 +00:00
Georg Richter 2fbb9a5247 fixed bug #21435 2003-01-05 20:53:06 +00:00
Sebastian Bergmann c9d9e053f3 Define HAVE_GD_GIF_READ. 2003-01-05 16:32:01 +00:00
Zeev Suraski 968f3f9a12 Remove unnnecessary initialization 2003-01-05 16:11:10 +00:00
Zeev Suraski 19d47d9f6e Initialize lineno using the new infrastructure 2003-01-05 16:10:35 +00:00
Zeev Suraski cf05f34c66 MFZE1 - lineno fix 2003-01-05 16:09:59 +00:00
Sebastian Bergmann b5d97e5ddb Revert config.w32.h.in -> config.w32.h build step per discussion with Zeev. 2003-01-05 15:58:29 +00:00
Zeev Suraski a2b58500b4 Make the .dsp use the php4build build directories 2003-01-05 15:09:11 +00:00
Edin Kadribasic fc03762871 MFB:
Made xslt_set_encoding() available on windows (bug #20640).
2003-01-05 13:54:30 +00:00
Ilia Alshanetsky d5a8bb2d0b Fixed a memory leak in setlocale() & localeconv(). 2003-01-05 04:29:14 +00:00
Sara Golemon 43630e2ac0 Added stream_get_filters(); to list registered filters 2003-01-05 03:24:38 +00:00
baabdbd1ee ChangeLog update 2003-01-05 01:33:04 +00:00
Derick Rethans b816089fbf - Fix some of the netware crap 2003-01-05 00:56:17 +00:00
Derick Rethans e58c221204 - Change Warnings to Notices 2003-01-04 23:55:57 +00:00
Ilia Alshanetsky 5f36ce398e CS fixes. 2003-01-04 23:31:55 +00:00
Marcus Boerger fff1c67b56 Fix ZTS-ZE2 build 2003-01-04 20:06:32 +00:00
Marcus Boerger 6a75a52ad8 better to check for existance first 2003-01-04 19:19:59 +00:00
Marcus Boerger 2705070dd8 Fix ZTS-ZE2 build 2003-01-04 19:18:43 +00:00
Moriyoshi Koizumi 69bb505750 Forgot to include these functions in the list 2003-01-04 18:49:48 +00:00
Derick Rethans 1b5caf3b67 - Fix typo 2003-01-04 18:35:37 +00:00
Moriyoshi Koizumi 0d0127fbfb Fixed cut'n'paste failure 2003-01-04 13:52:54 +00:00
Moriyoshi Koizumi 94ad85107c NEWS update for new iconv functions 2003-01-04 13:45:03 +00:00
Moriyoshi Koizumi b13a6276e1 Added test case for iconv_mime_encode() 2003-01-04 13:39:59 +00:00
Derick Rethans 6439ad7640 - Fixed bug #21232 (Unresolved references to PQsetnonblocking). (Patch by
Floyd <floyd@studiodust.com>)
2003-01-04 12:33:46 +00:00
Martin Jansen 4343df9de2 * Update copyright year to 2003. 2003-01-04 11:56:35 +00:00
a9c558c6d3 NEWS update 2003-01-04 01:34:30 +00:00
c8b2431522 ChangeLog update 2003-01-04 01:32:59 +00:00
Alex Waugh ef8d954a0d Provide alternative for glibc brokenness test when cross compiling 2003-01-03 22:05:12 +00:00
Derick Rethans c175f3545c - Fix docrefs 2003-01-03 21:33:31 +00:00
Derick Rethans 0127c07e45 - Fix typo (patch by Joseph Tate) 2003-01-03 21:30:49 +00:00
Moriyoshi Koizumi cd2b0fe706 Added test case for iconv_mime_decode() 2003-01-03 20:33:53 +00:00
Moriyoshi Koizumi 07dcab60f0 Added test cases for iconv_strpos() and iconv_strrpos() 2003-01-03 20:02:23 +00:00
Moriyoshi Koizumi 006b455c6a Fixed an iconv_strrpos() bug that the function doesn't return accurate
position of last occurrence
2003-01-03 20:01:13 +00:00
Derick Rethans 4d3c4ab45d - Update todo 2003-01-03 19:50:41 +00:00
Derick Rethans 419af9f12a - Removed support for libmcrypt 2.2.x to allow cleaner code. Another reason
to upgrade libmcrypt to a 2.5.x series as the older ones have too much bugs
  to be safely used with PHP.
- Updated macro's, php_errors and parameter parsing.
@- Removed support for libmcrypt 2.2.x to allow cleaner code. Another reason
@  to upgrade libmcrypt to a 2.5.x series as the older ones have too much bugs
@  to be safely used with PHP. (Derick)
2003-01-03 19:49:44 +00:00
Ilia Alshanetsky f99fa7170e Fixed a bug that would cause flock() to never set the 3rd argument.
CS fixes & switched to new parameter parsing API.
2003-01-03 18:33:28 +00:00
Ilia Alshanetsky 71ab7dfccc Fixed a memory leak that occurs if the location specified by redirect header
cannot be opened.
2003-01-03 17:12:35 +00:00
Ilia Alshanetsky c52cdad25a Further fixes related to bug #21267. 2003-01-03 17:05:16 +00:00
Anantha Kesari H Y 2e52c112df Modified for NetWare. 2003-01-03 16:06:02 +00:00
Anantha Kesari H Y c1498d7a15 Modifications for NetWare. 2003-01-03 15:59:02 +00:00
Anantha Kesari H Y 38a319e3c6 New file added for NetWare. 2003-01-03 15:39:43 +00:00
Anantha Kesari H Y 2a8abc7de5 Some existing files modified and a couple of files removed for NetWare. 2003-01-03 15:21:33 +00:00
Anantha Kesari H Y a53ff6ff54 NetWare related changes/modifications. 2003-01-03 15:17:43 +00:00
Anantha Kesari H Y 830298beb8 Modified for NetWare. 2003-01-03 14:37:42 +00:00
Anantha Kesari H Y 32ef849171 Modified for NetWare. 2003-01-03 14:31:31 +00:00
Moriyoshi Koizumi 3149fc7c40 Added offset validity check for iconv_strpos() 2003-01-03 14:29:49 +00:00
Anantha Kesari H Y 9c3f39a074 New file added for NetWare. 2003-01-03 14:24:34 +00:00
Anantha Kesari H Y 90ba724072 Modified for NetWare. 2003-01-03 14:24:07 +00:00
Anantha Kesari H Y 3e2f1526bc A new file added and some old files modified for NetWare. 2003-01-03 12:48:14 +00:00
Edin Kadribasic a1402eebf1 Checking in files for Ananth Kesari <hyanantha@novell.com> 2003-01-03 12:15:36 +00:00
Anantha Kesari H Y ee5884ef39 File modified for NetWare. 2003-01-03 11:53:09 +00:00
Anantha Kesari H Y ad7aa57e27 A few New files added and some old files modified for NetWare. 2003-01-03 11:46:20 +00:00
Anantha Kesari H Y 452389df71 New files added for NetWare. 2003-01-03 11:40:52 +00:00
Anantha Kesari H Y 72a35f8a4b New file added for NetWare. 2003-01-03 11:36:57 +00:00
Anantha Kesari H Y afaf7cc24e File modified for NetWare. 2003-01-03 11:36:24 +00:00
Anantha Kesari H Y f4543e57f4 New file added for NetWare. 2003-01-03 11:12:40 +00:00
Derick Rethans 8f82834a79 - Update this one as well 2003-01-03 10:52:23 +00:00
Derick Rethans 32254e0938 - Remove double "Win32 COM" functions line 2003-01-03 10:48:38 +00:00
Derick Rethans 530e7120b2 - Whitespace 2003-01-03 10:39:22 +00:00
Anantha Kesari H Y 12192da2c4 Modified for NetWare. 2003-01-03 08:34:34 +00:00
Sara Golemon 7b37272381 Added stream_get_wrappers() 2003-01-03 08:02:36 +00:00
Moriyoshi Koizumi f76df0ba1b Added test cases for iconv_strlen() and iconv_substr() 2003-01-03 05:48:51 +00:00
Moriyoshi Koizumi a3330b5ab3 Fixed iconv_mime_decode() so it would give more awareness to stateful codesets 2003-01-03 05:38:50 +00:00
Moriyoshi Koizumi e1dd919204 Fixed infinite loop of iconv_mime_encode() in case the specified line length is too short to contain a proper mime-encoded string 2003-01-03 05:34:05 +00:00
Moriyoshi Koizumi c703ad78d0 Give mo' shift-sequence awareness to iconv_mime_encode 2003-01-03 05:32:13 +00:00
Moriyoshi Koizumi 354a42fd5f More shift-sequence awareness for iconv_substr() 2003-01-03 05:28:25 +00:00
Moriyoshi Koizumi 1f8cee7666 Added missing casting operators 2003-01-03 05:26:44 +00:00
Moriyoshi Koizumi bf48e7bc9f MFB 2003-01-03 05:16:12 +00:00
Moriyoshi Koizumi 6144a7288e MFB: fixed shift-out sequence unawareness issue 2003-01-03 05:14:34 +00:00
Moriyoshi Koizumi f962ba6abb Fixed small leaks in array_map() in case the first parameter is NULL like
array_map(NULL, array(...));
2003-01-03 05:05:12 +00:00
449029d2df ChangeLog update 2003-01-03 01:37:02 +00:00
Harald Radi f1f96c86d1 fixing typo 2003-01-03 00:17:41 +00:00
foobar c74f56611b - Removed entries that are going to 4.3.1
- Grouped the entries a bit.
2003-01-03 00:06:23 +00:00
Stig Bakken 7f41f5d586 * allways fall back to PHP_SYSCONFDIR 2003-01-02 23:48:32 +00:00
Ilia Alshanetsky f65e8488d7 Fixed a small memory leak when a NULL variable is passed to
openssl_csr_sign() as the first argument.
2003-01-02 21:18:59 +00:00
d4f9701392 ChangeLog update 2003-01-02 20:00:47 +00:00
Ilia Alshanetsky 0ff59a1353 Fixed bug #21338 (crash inside html_entity_decode() when "" is passed).
Added test case for the bug.
2003-01-02 19:49:30 +00:00
Ilia Alshanetsky b46352043c Raise required OpenSSL version to 0.9.6. 2003-01-02 19:20:57 +00:00
174f6b6f88 rotate changelog 2003-01-02 18:48:06 +00:00
Derick Rethans b9e54cb693 - Fixed bug #21169: Compile Failure, and lots of warnings on UnixWare 2003-01-02 18:01:10 +00:00
Anantha Kesari H Y 455257974b NetWare related changes/modifications. 2003-01-02 14:29:00 +00:00
Zeev Suraski 895b5fc2b6 Fix .dsp 2003-01-02 14:19:29 +00:00
Zeev Suraski 77208ec4d6 Fix incorrect linkage of access-levels, when using private methods 2003-01-02 13:58:08 +00:00
Derick Rethans da9eb594c6 - Fix warnings on UnixWare 2003-01-02 13:31:10 +00:00
Derick Rethans 19ae16a693 - Fix "make test" when CC was set to something with a parameter 2003-01-02 13:01:33 +00:00
Frank M. Kromann 4da2e804e0 Allow base64 functions to be called from an extension buils as .so/.dll (iconv) 2003-01-01 18:11:18 +00:00
Zeev Suraski 70446a6416 build fixes 2003-01-01 13:26:17 +00:00
Derick Rethans 6197460836 - Fix tests if Zend Optimizer is loaded 2003-01-01 12:43:59 +00:00
Zeev Suraski 9b09ba614d Win32 build fix 2003-01-01 12:38:55 +00:00
Sebastian Bergmann a5f58cd6e5 Add filter.c, user_filters.c. Group stream related sources. 2003-01-01 12:36:43 +00:00
Sebastian Bergmann 0ab3a13612 Fix warnings. 2003-01-01 12:36:06 +00:00
Wez Furlong 97a0102b81 Tidy up 2003-01-01 11:21:40 +00:00
Wez Furlong f58628ca4d Move rot13 filter into a new filters.c source file.
Tidy up some other filter related code.

# win32 -> someone please add user_filters.c and filters.c to the .dsp
2003-01-01 11:04:44 +00:00
Stanislav Malyshev 30dafe2f42 use handler for Z_OBJPROP 2003-01-01 10:57:35 +00:00
Wez Furlong a28eaf64d0 Workaround for glibc 2.2.9x and later "a+" bug that does not seek to EOF for
files fopen()ed with that mode.
2003-01-01 09:58:17 +00:00
Zeev Suraski 57b9b0112d Fix Wez's problem 2003-01-01 09:34:39 +00:00
Moriyoshi Koizumi c4e8b2baab Added various functions that relies on the iconv facility:
iconv_strlen(), iconv_substr(), iconv_strpos(), iconv_strrpos(),
iconv_mime_encode(), iconv_mime_decode()

# hope this be a new year gift for you. Happy new year!
2002-12-31 19:13:16 +00:00
Wez Furlong 350b0bbeac Implement user-space filters.
See ext/standard/tests/file/userfilters.phpt for an example of their use.
2002-12-31 18:39:36 +00:00
Sebastian Bergmann 61ce6bc8f1 Bump year. 2002-12-31 16:18:29 +00:00
Sebastian Bergmann b506f5c8f8 Bump year. 2002-12-31 16:08:15 +00:00
Sebastian Bergmann 2c5d4b8c23 Bump year. 2002-12-31 15:59:15 +00:00
Rasmus Lerdorf f88e29bc0d Fix for bug #21311 2002-12-31 15:18:52 +00:00
Wez Furlong abc4b4bb99 Fix for #21304 (gzopen did not report errors on open; "a" mode broken) 2002-12-31 11:42:15 +00:00
Stanislav Malyshev 8814f36692 fix level of indirection 2002-12-31 09:42:28 +00:00
a6abc8f812 NEWS update 2002-12-31 01:33:05 +00:00
Ilia Alshanetsky 87e598e835 Changed ifdef to if. 2002-12-31 00:10:57 +00:00
Ilia Alshanetsky 87a8b04051 Fix ZTS build. 2002-12-31 00:04:52 +00:00
Ilia Alshanetsky 6f6bc82de7 Fixed bug #21045 (Apache 2 SAPI now supports the mod_php_memory_usage
log variable that allows users to log the memory usage of their PHP scripts).
2002-12-30 23:45:18 +00:00
Ilia Alshanetsky bfea989d21 Bug fixing news. 2002-12-30 19:48:24 +00:00
Ilia Alshanetsky 0acb52fc3b Fixed bug #21228 (broken check for ob_gzhandler).
Fixed a bug that made ob_start return incorrect return value.
2002-12-30 19:39:31 +00:00
Marcus Boerger 67f0a6f6c0 testing default handler should be a separate test 2002-12-30 19:20:11 +00:00
Marcus Boerger 9c2871a673 missing dba entry 2002-12-30 19:18:52 +00:00
Andrei Zmievski 4f8c44b091 Adjust the error message. 2002-12-30 18:30:50 +00:00
Marcus Boerger 33f364b5fc update dba NEWS 2002-12-30 17:58:15 +00:00
Marcus Boerger aa8e5cdde7 -disallow using db-<n> with libraries of different major versions
-disallow using db-4.1 with patch level < 25
-fix db-4.1
-added undocumented DB_FCNTL_LOCKING flag for version 3 and 4
# wow the sleepycat guys answered *very* fast
2002-12-30 17:42:55 +00:00
Stanislav Malyshev 0af3b5a692 Oops, fix it indeed 2002-12-30 17:19:32 +00:00
Stanislav Malyshev 37571334d9 Better check 2002-12-30 17:17:41 +00:00
a5ad437af8 Update. 2002-12-30 16:47:04 +00:00
Ilia Alshanetsky bd19dabefe Fixed bug #21226 (parse_url handling of urls without a path). 2002-12-30 16:42:49 +00:00
Derick Rethans d454becda8 - Whitespace 2002-12-30 15:03:50 +00:00
Derick Rethans eb8b1ac923 - euch 2002-12-30 14:08:25 +00:00
Marcus Boerger 32dda8b0cb ws 2002-12-30 13:09:03 +00:00
Marcus Boerger 4d2f7207c0 Add info function to handlers and return handler info when dba_handlers is
called with optional parameter full_info set true.
2002-12-30 13:07:30 +00:00
Marcus Boerger 426cf8eb57 fix state-machine in cases T_AAAA is not available 2002-12-30 11:59:22 +00:00
Marcus Boerger a213c71735 2nd part of the patch 2002-12-30 11:43:18 +00:00
Marcus Boerger 4b9e8fc899 -better parameter names for DBA_HND macros
-remove unnecessary notice
2002-12-30 11:32:37 +00:00
Derick Rethans e76d0043da - Align mssql comment and clarify DBA handler selection 2002-12-30 08:55:21 +00:00
Ilia Alshanetsky 1f50681813 Fixed bug #21149 (fixed handling of unterminated '['). 2002-12-29 21:02:17 +00:00
Ilia Alshanetsky 88d26985b8 Fixed bug #21267 (opening URLs that result in redirection to a relative
path was failing).
2002-12-29 20:01:33 +00:00
Ilia Alshanetsky c731daeda7 Fixed bug #21268 (session_decode() returned FALSE on success). 2002-12-29 18:50:55 +00:00
Zeev Suraski ac1133d364 Remove bogus ignores 2002-12-29 15:42:55 +00:00
Zeev Suraski 758caa9ba2 Update .dsp's 2002-12-29 15:41:44 +00:00
Marcus Boerger c69d034a87 Added support for db3/db4 error handling/information 2002-12-29 15:32:38 +00:00
Marcus Boerger 9b22813c4d Add a default handler that makes handler parameter to open functions
optional.
@Improved dba extension (Marcus)
@-Made handler parameter of dba_(p)open() optional.
@-Added php.ini option 'dba.default_handler' to specify a default handler.
2002-12-29 15:31:00 +00:00
Sara Golemon 45ff90cb18 Typo. 2002-12-28 19:40:03 +00:00
Sara Golemon 072d5c2575 When scanning for cc: headers, make sure the header is JUST cc: and not bcc: or original-cc: or <anything-printable>cc:
See Bugs # 21036 and # 20707
2002-12-28 19:32:45 +00:00
Sascha Schumann 955b27cd64 Fix order of library additions, so that the imap extension now builds
successfully with static imap/ssl libs.  configure was already failing
before.
2002-12-28 15:33:25 +00:00
Ilia Alshanetsky 8315a525ca Fixed bug #21229 (missing 3rd argument to php_module_startup). 2002-12-28 06:59:24 +00:00
Ilia Alshanetsky 097055a862 Make the version code get the version from the current Apache, rather then
the Apache PHP was compiled against.
2002-12-27 23:05:15 +00:00
Ilia Alshanetsky 648dd88b42 Added apache_get_version() & apache_get_modules() to Apache 1.X & Apache
Hooks sapis.
Made the module listing in Apache 2 not show the '.c' portion, to be
consistent with Apache 1.X.
2002-12-27 22:47:06 +00:00
Ilia Alshanetsky 572394db74 Added MINFO() to Apache 2, which displays the Apache version & all of the
loaded Apache modules.
Added apache_get_version() & apache_get_modules() functions.
2002-12-27 22:02:17 +00:00
Ilia Alshanetsky c955910ea0 Bug fixing news. 2002-12-27 20:23:29 +00:00
Ilia Alshanetsky 967d64ade5 Fixed bug #17098 (make Apache aware that PHP scripts represent dynamic data
and should not be cached). Fix suggested by daniel.eckl@gmx.de.
2002-12-27 19:59:09 +00:00
Stig Bakken ff8adda7c6 * 1.0 release notes 2002-12-27 19:31:56 +00:00
Stig Bakken 25684764cc * added "clear-cache" command 2002-12-27 19:31:37 +00:00
Stig Bakken 1d42e34c1b * 1.0 release 2002-12-27 19:01:19 +00:00
Stig Bakken d63ef03d7b * 1.0 version 2002-12-27 17:19:31 +00:00
Ilia Alshanetsky 22a2636d9d Made DBA tests not dependant on error reporting settings. 2002-12-27 04:46:40 +00:00
c9b374f8e0 Update. 2002-12-27 04:03:10 +00:00
Edin Kadribasic 586f68d820 Mention the fact that zlib extension is now built-in in win32 distro. 2002-12-27 03:16:01 +00:00
Edin Kadribasic a3c2f80d72 Resolved apperent cvs commit confict. 2002-12-27 02:55:37 +00:00
ebe402a9c3 NEWS update 2002-12-27 01:32:47 +00:00
c52bcebc09 ChangeLog update 2002-12-27 01:32:29 +00:00
Ilia Alshanetsky 3283752055 Bug fixing news. 2002-12-27 00:09:13 +00:00
Derick Rethans f3d3dd5bc8 - MFB 2002-12-26 23:45:05 +00:00
Georg Richter 4abcff7631 added Wez, Ilia & myself 2002-12-26 23:38:18 +00:00
Wez Furlong bb640840c3 Remove cruft that opened a stream that was never closed in get_meta_tags().
(probably my fault).
Noticed by Philip Olson
2002-12-26 22:35:00 +00:00
Sterling Hughes 457f22c198 if needle is empty free allocated memory 2002-12-26 20:52:42 +00:00
Sterling Hughes ca67d27fb2 remove memleak 2002-12-26 19:56:44 +00:00
Marcus Boerger 4041d4faed Add missing test for db4 handler 2002-12-26 19:55:06 +00:00
Andrei Zmievski 4121057117 do_inherit_method_check() is supposed to return 0 or 1, not SUCCESS or
FAILURE.
2002-12-26 16:27:59 +00:00
Edin Kadribasic 46219c714d MFB:
Made ZLIB extension built in on Windows. Fixes #21139.
2002-12-26 13:40:32 +00:00
03132bff12 ChangeLog update 2002-12-26 01:33:49 +00:00
George Schlossnagle 190867c800 fixed ws 2002-12-25 21:18:37 +00:00
George Schlossnagle abbf745211 fix for 21177 2002-12-25 20:38:37 +00:00
Derick Rethans b996b32031 - Add test for bug #21182 2002-12-25 20:08:36 +00:00
Ilia Alshanetsky fbcee73c8c Make range operate on the copies of the parameters rather then modify the
actual parameters.
2002-12-25 20:02:03 +00:00
33bdabbee2 ChangeLog update 2002-12-25 01:34:22 +00:00
Stefan Esser 66ebbb5ae1 fix compile warning 2002-12-24 23:46:17 +00:00
Stefan Esser e900f8c97b do correct casting 2002-12-24 23:28:05 +00:00
Ilia Alshanetsky 2e6e0f87dc Removed pointless assignment. 2002-12-24 23:19:54 +00:00
Ilia Alshanetsky 0a2d473df0 The -1 is no longer needed, since it is done automatically by strlcpy(). 2002-12-24 17:33:33 +00:00
Ilia Alshanetsky a747d1f864 Changed strncpy() to strlcpy(). 2002-12-24 17:30:48 +00:00
Ilia Alshanetsky 59b6ffee1e A variety of CS style fixes, which include:
* Changed all argument parsing to use the new zend_parse_parameters()
 * If a function is unavailable due to lack of support for a certain feature,
   do not make the function avaliable, rather then making it print an error
   saying that the functionality offered by the function is not avaliable.
 * Lots of WS fixes all over the file.
 * Change strcpy() to strncpy() to prevent possible buffer overflows.
Fixed a bug in ncurses_pair_content(), 1st parameter was wrong.
Fixed several function prototypes that failed to indicate that functions
accepted arguments by reference.
2002-12-24 17:20:33 +00:00
eb668bcd9b ChangeLog update 2002-12-24 01:31:43 +00:00
Melvyn Sopacua 0764c3101b Verify if gl_pathv is not NULL, which it is, when GLOB_NOMATCH isn't
supported and there are no matches.

# BSDi/Mac OSX are affected.
2002-12-23 18:33:46 +00:00
Stefan Esser 0bb1ff71d6 fix compile error on IRIX 2002-12-23 08:50:05 +00:00
Edin Kadribasic f13ecb9832 MFB:
Ignore the new name of the binary built. Allows cvsclean to work again
in sapi/cgi.
2002-12-23 03:35:38 +00:00
Wez Furlong 05ea039144 MFB: fpos_t -> off_t 2002-12-23 02:56:46 +00:00
d5b8ef54e9 ChangeLog update 2002-12-23 01:33:10 +00:00
Ilia Alshanetsky af55703d52 Fixed various memory leaks.
# Should this be MFHed?
2002-12-22 20:16:37 +00:00
Moriyoshi Koizumi 45f67837e6 Removed "%s" from format strings 2002-12-22 19:51:49 +00:00
Ilia Alshanetsky 0ae3050aa5 Fixed bug #21146. 2002-12-22 19:44:01 +00:00
Moriyoshi Koizumi d70f96550c php_error => php_error_docref 2002-12-22 19:16:09 +00:00
Moriyoshi Koizumi 9b3f810564 WS fix 2002-12-22 19:05:06 +00:00
Moriyoshi Koizumi dcc030f5ef Fixed bug #21144 2002-12-22 19:01:44 +00:00
Wez Furlong c5091eedf1 Forgot to include this in my previous commit for #21131 fix. 2002-12-22 18:06:27 +00:00
Wez Furlong efea12fec5 Fix for Bug #21131: fopen($file, 'a+') would incorrectly assume that
the stream position was at offset 0.
This corrects that assumption by querying the stream for it's position
when it detects the 'a' "flag" in the mode parameter to fopen.
Also added a test for plain files and amended the userstreams test to
take this into account.
2002-12-22 18:05:36 +00:00
Sascha Schumann 20e8bc31f0 (char *) vptr += expr; is refused by the IRIX compiler, so we use
vptr = (char *) vptr + expr; instead.
2002-12-22 16:34:13 +00:00
Sascha Schumann 280f4a4373 'index' is a function name in the C library, do not use it as variable name.
also, cast the 'void *' correctly to a 'char *' for manipulation
instead of an 'int'.
2002-12-22 16:03:28 +00:00
Wez Furlong 90c478664a A Simple fix for Bug #12360 (fsockopen timeout doesn't work).
Analysis:
On systems with HAVE_GETADDRINFO and IPV6 support, php_hostconnect would
attempt to connect to each possible address that matched the requested IP.

If the remote host:port combination are dropping packets this would cause the
first connection to timeout (after waiting for the full timeout duration).

PHP would then attempt the second address and wait the full duration again.

Solution:
If the first connection attempt times out, abort the connection loop.
2002-12-22 13:55:45 +00:00
Melvyn Sopacua e03bccb1ad Delete some security related env variables 2002-12-22 12:48:49 +00:00
f023f6f8fc ChangeLog update 2002-12-22 01:33:28 +00:00
Stig Bakken aded559898 * Windows fix from Edin 2002-12-22 01:32:01 +00:00
Stig Bakken c4ddda3e23 * set default xml-rpc cache ttl to 1 hour 2002-12-22 01:31:13 +00:00
Frank M. Kromann ca4a0cdb8a Create php.exe in cli directory to avoid conflict with the cgi version 2002-12-21 22:43:47 +00:00
Edin Kadribasic 17687a4fff MFB:
Updated list of bundled windows extensions compiled by
Christoph Grottolo <cg@gordimer.net>
2002-12-21 22:19:51 +00:00
Edin Kadribasic 473366d6e7 MFB: Reflect recent changes to the build process. 2002-12-21 22:05:55 +00:00
Moriyoshi Koizumi 9dc6f0c5f2 Made auth information inaccessible under safe mode as discussed in the list 2002-12-21 21:50:28 +00:00
Melvyn Sopacua 2169eb2ccc MFB: There won't be a warning/fix on this, so remove the test 2002-12-21 21:01:52 +00:00
Ilia Alshanetsky 29d507d224 Moved the bug fix news entry to 4.3.0 section, to indicate that it has been
MFHed.
2002-12-21 20:37:17 +00:00
Andrei Zmievski 2feb1cf6d7 MFB. 2002-12-21 20:12:08 +00:00
Ilia Alshanetsky da498edd5e Bug fixing news & range() changes. 2002-12-21 18:06:04 +00:00
Ilia Alshanetsky 98e85ae80b Fixed bug #20987 (no handling for client certificates). 2002-12-21 18:03:46 +00:00
Derick Rethans 16e5459f94 MFB: Fix typo 2002-12-21 17:48:37 +00:00
Melvyn Sopacua 9dc1412e46 MFB: Skip the test, until a proper descision is made 2002-12-21 16:58:23 +00:00
Moriyoshi Koizumi 4456b3274f WS 2002-12-21 06:34:31 +00:00
Moriyoshi Koizumi f4883b916c Added some notes about the brigade bug detection 2002-12-21 06:33:19 +00:00
550aedb63d ChangeLog update 2002-12-21 01:34:00 +00:00
Andrei Zmievski 64ab75c206 *** empty log message *** 2002-12-21 01:11:44 +00:00
Andrei Zmievski ddea2a190f Alias dba_popen() to dba_open() until persistent STDIO streams are
implemented.
2002-12-21 01:09:27 +00:00
Sascha Schumann 76a158a336 test commit 2002-12-20 20:53:10 +00:00
Stefan Esser e4e299614e need more space 2002-12-20 19:37:07 +00:00
Georg Richter d5f02c553b fixed some warning when using external 4.x libs 2002-12-20 18:52:27 +00:00
Frank M. Kromann ad69583ba1 Fixing Win32 build by adding missing libraries 2002-12-20 18:40:31 +00:00
Sara Golemon 13308b5a94 Minor clarification in meaning of bitmask constants
/* PHP_DNS_xx = 1<<(T_xx-1) */
T_CNAME = 5 ergo PHP_DNS_CNAME should be 0x00000010.
T_SOA = 6 ergo PHP_DNS_CNAME should be 0x00000020.
2002-12-20 18:34:56 +00:00
Marcus Boerger efd314e767 -Fix memory handling of persistent dba connections.
-Update tests.
# cdb and flatfile still FAIL for dba_popen since the known streams problem
2002-12-20 17:47:58 +00:00
Frank M. Kromann 710e49a30b Make sure the debug version is created in the right directory 2002-12-20 17:34:34 +00:00
Ilia Alshanetsky 3a4bf3f904 When low & high are the same return an array containing the low value.
Added support for float values and handling of numeric values being passed
as strings.
Added a test case for range().
2002-12-20 17:16:31 +00:00
Marcus Boerger d795243db3 @Make uniqid() parameters optional and allow any prefix length. (Marcus) 2002-12-20 17:06:25 +00:00
Marcus Boerger 8652e8ac27 MFB 2002-12-20 17:04:33 +00:00
Andrei Zmievski c45f76112f At least this problem exposed some leaks.. 2002-12-20 16:45:34 +00:00
Marcus Boerger 26038795f8 -disable uniqid() when required lib functions not available
-emit an error when uniqid() will fail
-make more_entropy parameter default to true for CYGWIN
2002-12-20 16:34:42 +00:00
Moriyoshi Koizumi 740ee5df1c Recommited the patch 2002-12-20 15:51:35 +00:00
Sterling Hughes 3cb16973ef silly error, will MFH 2002-12-20 15:44:51 +00:00
Edin Kadribasic 3c94150191 MFB: Make sure cli install dir is created before trying to install in it. 2002-12-20 10:12:15 +00:00
Andi Gutmans a58e6cc8ad - Add comment in macro and remove some now unneeded code 2002-12-20 08:42:50 +00:00
James Cox 6f6631ad14 testing cvs commit.. 2002-12-20 07:08:47 +00:00
84b107924d ChangeLog update 2002-12-20 01:34:57 +00:00
Ilia Alshanetsky 709681e085 Make IS_ABSOLUTE_PATH use the IS_UNC_PATH macro rather then duplicate the
code in the IS_UNC_PATH macro.
2002-12-20 00:41:41 +00:00
Melvyn Sopacua a4d56067e2 MFB: libtool detection 2002-12-20 00:28:08 +00:00
Wez Furlong 602734c7d9 Correct mistake introduced by my last commit on these files;
*_from_pipe() is for process-pipes created by fopen, not generic pipes
created from proc_open().
Correctly implemented the fifo/pipe check for *_from_file() and it seems
to be working correctly now.
2002-12-19 20:23:50 +00:00
Edin Kadribasic 183ebe3e14 MFB:
Making windows build system changes according to proposal:
http://news.php.net/article.php?group=php.dev&article=92682
2002-12-19 18:30:14 +00:00
Ilia Alshanetsky 594c3808d4 Fixed bug #21098. 2002-12-19 17:06:36 +00:00
Edin Kadribasic d29309eb68 MFB:
Making build system changes according to proposal:
http://news.php.net/article.php?group=php.dev&article=92682
2002-12-19 17:02:40 +00:00
Moriyoshi Koizumi 58037935f6 Appended "\n" as suggested by Derick. 2002-12-19 15:29:09 +00:00
Anantha Kesari H Y c93d64375d NetWare related files added and changes/modifications done for the existing ones. 2002-12-19 11:24:45 +00:00
Anantha Kesari H Y 854721d723 NetWare related changes/modifications. 2002-12-19 11:23:58 +00:00
Anantha Kesari H Y e46b0bfa79 Netware related changes/modifications. 2002-12-19 11:12:04 +00:00
Edin Kadribasic 2fc8358e3a MFB: Remove dependancy on libtool library which is no longer needed. 2002-12-19 10:49:05 +00:00
1a30bfd76c ChangeLog update 2002-12-19 01:33:16 +00:00
Edin Kadribasic ff54f76f71 MFB: Reverted previous patches as suggested by Andi. 2002-12-19 00:13:43 +00:00
Moriyoshi Koizumi d2fa4670dc Prevented test failure caused by LF code variety 2002-12-18 23:06:27 +00:00
Moriyoshi Koizumi fdded38816 Added a test case for bug #20539 2002-12-18 22:54:34 +00:00
Pierre Joye baea3414a3 Fix a crash while using an invalid color with imagesetstyle, see the sample
script in the manual to reproduce it :)
2002-12-18 21:13:21 +00:00
Moriyoshi Koizumi 978340cfa5 An intuitive attempt to hunt the bug. 2002-12-18 19:32:44 +00:00
Moriyoshi Koizumi 1bfa8be474 Added entry for the new feature of array_search() 2002-12-18 16:38:36 +00:00
9e4d2d4594 Update 2002-12-17 19:52:24 +00:00
532ed0edf3 Finally put the changelog back online. 2002-12-17 19:48:17 +00:00
Derick Rethans 8507eb00f6 - Also send reports when there are no failed tests 2002-12-17 19:07:15 +00:00
Frank M. Kromann e93a1a92ec Fixing WIn32 build after adding support for FreeTDS 2002-12-16 22:44:08 +00:00
Frank M. Kromann 5664a358fa Allow the native MSSQL extension to be compiled with FreeTDS on *nix platforms.
This will make the whole MSSAL API available on these platforms.
@Allow compilation of mssql extension on *nix.
2002-12-16 22:26:49 +00:00
Stig Bakken 24975495a7 * fix one missing DIRECTORY_SEPARATOR and a typo 2002-12-16 20:44:50 +00:00
Sergey Kartashoff afa0e1e03e - mnogosearch extension updated to compile with mnogosearch-3.2.8 2002-12-16 19:17:10 +00:00
Marcus Boerger 59656cc706 fix compiler definition tests 2002-12-16 17:52:43 +00:00
Marcus Boerger 50af908f01 fix compiler definition tests 2002-12-16 15:53:46 +00:00
Ilia Alshanetsky 5bad812dad A better, strtok() free implementaion of php_disable_functions(). 2002-12-16 15:43:52 +00:00
Marcus Boerger 2d3b3fd97f fix test 2002-12-16 15:19:57 +00:00
Marcus Boerger 9042a9ddbd Add version check since this will be available since php 4.4. 2002-12-16 15:04:12 +00:00
Marcus Boerger da1a617f6b forgot to remove that dot 2002-12-16 14:54:35 +00:00
Marcus Boerger 5dc4d38204 -Add constant that shows whether or not exif uses mbstring.
-Fix tests
2002-12-16 14:48:00 +00:00
Sascha Schumann e5b86174af CFLAGS_CLEAN was not properly defined 2002-12-16 13:39:27 +00:00
Marcus Boerger 6e055f9a77 change mbstring detection 2002-12-16 09:58:49 +00:00
Derick Rethans d8f86e725a - MFB 2002-12-16 09:11:00 +00:00
Ilia Alshanetsky f620fdbed3 A better memory leak patch. 2002-12-16 07:46:36 +00:00
Marcus Boerger c1be81a84e ws 2002-12-15 18:49:07 +00:00
Marcus Boerger 05436b1378 MFB: gd uses float instead of double 2002-12-15 18:16:11 +00:00
Ilia Alshanetsky cc4748139c Close log file on shutdown. 2002-12-15 07:03:32 +00:00
Ilia Alshanetsky 078dfe8d57 Fixed a memory leak. 2002-12-15 06:44:30 +00:00
Ilia Alshanetsky 11dbaa39d6 MFZE2 2002-12-14 23:56:44 +00:00
Marcus Boerger 16694d3500 Fix build when mbstring is a shared module or dll under windows 2002-12-14 19:53:20 +00:00
Pierre Joye 137beb12ca Do not allow AA if not trueColor (imageantialias does nothing) 2002-12-14 19:23:29 +00:00
Marcus Boerger 9455657a7a Bugfix: #21010 (Here it's maker (manufacturer) instead of marker) 2002-12-14 17:49:19 +00:00
Stefan Esser 75d8056e11 cleanup 2002-12-14 10:45:25 +00:00
foobar c07f7c8df8 MFB: Fix bug #20995 2002-12-14 09:33:37 +00:00
Melvyn Sopacua 43202b5b95 Add testcase for bug #20993 2002-12-13 18:40:39 +00:00
Marcus Boerger ac96f76730 Add missing entry 2002-12-13 12:04:30 +00:00
Marcus Boerger c633abdc7f Fix cli build for cygwin 2002-12-13 10:32:03 +00:00
Marcus Boerger 95c701d328 MFB: ZTS fix by Ilia 2002-12-13 09:17:04 +00:00
Vlad Krupin e969d788bf Fix for bug 19727. dBase5 (at least for windows) seems to allow 1024 fields 2002-12-13 03:09:52 +00:00
Stig Bakken 854b9b9ac1 * update release notes, remove warning 2002-12-13 02:20:33 +00:00
Stig Bakken 3396ace7cb * fix version/date 2002-12-13 02:11:23 +00:00
Stig Bakken 976aef1ccf * introduce php_bin config parameter
* use PHP_PEAR_<PARAM_NAME> environment variables for defaults
  (for example PHP_PEAR_PHP_DIR)
* Windows cleanups
2002-12-13 02:10:23 +00:00
Stig Bakken e5dd8161e6 * _parseArgs bugfix 2002-12-13 02:07:22 +00:00
Moriyoshi Koizumi 92d5faca60 MFB 2002-12-12 21:44:53 +00:00
Moriyoshi Koizumi d679e5d2aa Added a test case for bug #20934 2002-12-12 21:42:17 +00:00
Stefan Esser 7924bf8705 remove extra char in case of binary/money fields 2002-12-12 21:30:39 +00:00
Ilia Alshanetsky 7a282ddcfd Fixed bug #20974 (added missing sanity check). 2002-12-12 21:17:36 +00:00
Melvyn Sopacua 44b7c16b03 Fix for BSD's (possibly others):
Accept system default, for the index. Don't initialize it.
2002-12-12 18:50:26 +00:00
Wez Furlong c5d4e4b321 MFB: popen/pclose and proc_open/proc_close fixes. 2002-12-12 17:51:25 +00:00
Ilia Alshanetsky 2d8945247b Fix a possible E_NOTICE warning message. 2002-12-12 16:14:32 +00:00
Wez Furlong 81c02040f0 Attempt to add more entropy for key generation. 2002-12-12 15:50:11 +00:00
Wez Furlong 3591c3b8e9 MFB streams news 2002-12-12 15:24:00 +00:00
Ilia Alshanetsky 53b333d153 Fixed misspelling of the Greek letter lambda,
noticed by jmartin-php@notamusica.com.
2002-12-12 14:50:58 +00:00
Marcus Boerger c2078cdabf php_error -> php_error_docref conversion fix (noticed by derick) 2002-12-12 14:12:42 +00:00
Ilia Alshanetsky e27f3fc7e1 Bug fixing news. 2002-12-12 13:52:26 +00:00
Moriyoshi Koizumi d0c781cc84 Jani happification 2002-12-12 13:44:18 +00:00
Wez Furlong 1ef74a4f79 Patch for #20936 (openssl: public key handling was broken).
Thanks to <jeroen@derks.it> for the patch.
2002-12-12 13:42:23 +00:00
Ilia Alshanetsky 75c180f242 Fixed bug #20927 and updated the test case for the bug. 2002-12-12 13:38:19 +00:00
Moriyoshi Koizumi 131c47b75d Bug fixing news 2002-12-12 13:31:19 +00:00
Moriyoshi Koizumi 3bbcb0d0dd Fixed bug #20934 (htmlspecialchars returns latin1 from UTF-8) 2002-12-12 13:25:51 +00:00
Marcus Boerger a40ccefd32 php_error -> php_error_docref 2002-12-12 13:08:59 +00:00
Marcus Boerger 53309aace0 SIGIOT may not be defined in cygwin 2002-12-12 12:23:32 +00:00
Marcus Boerger 835c4dedbb typeconversion is needed here for cygwin 2002-12-12 12:18:44 +00:00
Marcus Boerger 26b101dd1b O_ASYNC is not defined in cygwin 2002-12-12 12:15:10 +00:00
Edin Kadribasic 8eb1791790 MFB: DOM/XSLT support in win32 build (bug #20485). 2002-12-12 10:56:33 +00:00
Ilia Alshanetsky 8227141218 GD library news. 2002-12-11 23:11:31 +00:00
Ilia Alshanetsky 20bc6a09e0 Added check for availability of jpeg support. 2002-12-11 22:37:05 +00:00
Ilia Alshanetsky 67aca57c3b Fixed build with non-bundled GD. Hidden the anti-alias functions when
non-bundled GD is used and made imagecreatefromxpm() unavailable because
of a bug in the external GD library.
2002-12-11 22:25:23 +00:00
Pierre Joye 5acfdf3ca1 Fix brightness filter (argument ingnored) 2002-12-11 22:23:51 +00:00
Ilia Alshanetsky a88a99fb9d White space fixes. 2002-12-11 21:55:45 +00:00
Ilia Alshanetsky f4b5f0904b Syncronize bundled gd sources with that of gd 2.0.9, affected functions
are: gdImageBrushApply() & gdImageCopyResized().
2002-12-11 21:52:29 +00:00
Pierre Joye 983d8e5efd Add antialias flag to image structure
Add AA support
2002-12-11 20:47:26 +00:00
Pierre Joye 7ec74f64f9 Add gdImageAAline (antialiased line)
Add AA support for gdImagePolygon
2002-12-11 20:46:52 +00:00
Pierre Joye 221413e5ef Remove double definition of imagesettile
Add imageantiallias
2002-12-11 20:45:47 +00:00
Pierre Joye 4d522e3686 Add imageantialias(im, flag)
Add AA support for bundled imageline
2002-12-11 20:44:44 +00:00
Melvyn Sopacua 4b3b409b48 Add testcase for reported wordwrap bug 2002-12-11 20:22:42 +00:00
Derick Rethans c4342de561 - MFB 2002-12-11 20:13:43 +00:00
Ilia Alshanetsky 2ab549c5f2 Added missing &. 2002-12-11 20:04:23 +00:00
Ilia Alshanetsky c194d9333d Added getopt() test. 2002-12-11 17:38:28 +00:00
Ilia Alshanetsky 30f83207fe Ask the user for their e-mail address so that we can contact them if need be. 2002-12-11 16:49:00 +00:00
Sara Golemon 04d6f6ab50 Renamed bc_powmod to bcpowmod to keep it inline with existing module
functions.  Fixed whitespace problem.
2002-12-11 16:28:16 +00:00
Ilia Alshanetsky 5f9681ff80 Added missing variable to parameter retrieval. 2002-12-11 15:32:35 +00:00
foobar 3fc83fd8e3 - ws fixes
- // -> /* */ (No C++ comments in c code!)
- #if / #else / etc. have to start from first column.
2002-12-11 15:25:39 +00:00
foobar 210effe877 - Some more missing .cvsignore files. 2002-12-11 15:16:05 +00:00
foobar f059f21e96 missing entry 2002-12-11 14:45:42 +00:00
foobar cbb2c5a073 missing file 2002-12-11 14:43:33 +00:00
Rui Hirokawa 3d324676a5 fixed lack of variable initialization bug. 2002-12-11 14:39:37 +00:00
Abdul-Kareem Abo-Namous 089f1b5771 fixed string comparison which brought up a gcc warning. 2002-12-11 14:18:40 +00:00
Marcus Boerger e0c983a013 Warnings and Notices when lock modifiers for dba_(p)open are used wrong.
This finally closes bug #20828 (and i hope it must not be reopened)
2002-12-11 10:37:38 +00:00
Edin Kadribasic f84aff8f5c Fix for #20539 (patch by Moriyoshi Koizumi). 2002-12-11 10:24:02 +00:00
foobar d1d73b1b06 snow..not again.. 2002-12-11 08:54:04 +00:00
foobar 8635af07d5 Fixed bug #20298: LDFLAGS were not passed to the static apache module build 2002-12-11 08:41:45 +00:00
Georg Richter 19a13f29b0 fixed security bug in libmysql 2002-12-11 08:31:56 +00:00
Georg Richter 230f4ebb06 Security fix (merged from 3.23.54) 2002-12-11 08:28:41 +00:00
Ilia Alshanetsky 52d0f1c143 decode variable is only used when mbstring is avaliable. 2002-12-11 07:37:30 +00:00
Ilia Alshanetsky 08e020a870 ZTS fix. 2002-12-11 07:29:51 +00:00
Ilia Alshanetsky dc391673d0 Fixed compiler warning. 2002-12-11 02:51:06 +00:00
Ilia Alshanetsky 533d3273bd Fix ZTS build 2002-12-11 02:30:00 +00:00
Ilia Alshanetsky 9a24983487 On Win32 make PHP treat UNC paths as absolute paths, this should solve bugs
such as #20831. Thanks to Wez Furlong for isolating the problem.
2002-12-11 00:32:33 +00:00
Marcus Boerger a6e9674bfd add missing comment 2002-12-10 22:51:09 +00:00
Marcus Boerger b94e0d9eac LOCK_EX is not allowed in read mode -> try using existing .lck file in read
only mode only when in read mode.
2002-12-10 22:49:33 +00:00
Wez Furlong ac8469bd55 No longer experimental 2002-12-10 22:21:34 +00:00
Wez Furlong 9746be4779 use php_error_docref and tidy up some WS/coding standards. 2002-12-10 22:18:58 +00:00
Marcus Boerger 17117063ce -remove second attempt to close lock file
-default to lock on db file instead on .lck file.
-try to use existing .lck file and only create it on failure (allows ro access)
2002-12-10 22:02:52 +00:00
Marcus Boerger dbf4bcc08b stick to "check <what> <result>" scheme, do not repeat messages and
align messages correctly.
2002-12-10 21:53:02 +00:00
Stefan Esser e5dbcb0890 fixing cut&paste bug 2002-12-10 20:18:25 +00:00
Ilia Alshanetsky 60a5aeef43 Fixed a few compile warnings and one compile error. 2002-12-10 20:16:30 +00:00
Marcus Boerger d1c70a6417 directory values are optional 2002-12-10 20:11:41 +00:00
Marcus Boerger 644bd60d29 remove not wanted skeleton comment and align configure message 2002-12-10 20:09:35 +00:00
Ilia Alshanetsky 2b063828e0 Fixed build with GD 1.8.4 2002-12-10 19:45:58 +00:00
Frank M. Kromann 62fb872a4d Fixing ZTS Build 2002-12-10 19:28:04 +00:00
Sara Golemon 51c9f2c64b Added support for libbcmath's bc_raisemod function as bc_powmod() 2002-12-10 19:04:27 +00:00
Ilia Alshanetsky 91a6272972 Fixed win32 build. 2002-12-10 18:00:47 +00:00
Ilia Alshanetsky 99f2b9674f Fixed build with GD 1.8.4 2002-12-10 17:57:41 +00:00
Edin Kadribasic 28c32e1fc8 MFB: Fix ZTS build. 2002-12-10 17:07:40 +00:00
Ilia Alshanetsky e982d5c7f0 MFB 2002-12-10 16:39:59 +00:00
foobar 8416a0433a This extension requires cyrus-imap >= 2.0.8 2002-12-10 16:34:20 +00:00
Ilia Alshanetsky 3c9a6a8890 Removed one more unneeded check. 2002-12-10 15:58:31 +00:00
Ilia Alshanetsky ecc9c539d2 Removed a pointless check. Thanks Stefan. 2002-12-10 15:36:26 +00:00
Stefan Esser f481a209b7 fixing crashbug
patch by freddy77@angelfire.com
2002-12-10 15:18:01 +00:00
Marcus Boerger 26c5c323ab -make those debug messages 2002-12-10 14:35:13 +00:00
Marcus Boerger 922ce573cf -when required haeder was not found --with-cdpf was simply ignored. I
changed this to be an error.
-cpdf did not check for --with-jpeg-dir and --with-tiff-dir
2002-12-10 14:31:00 +00:00
Marcus Boerger cbab922570 "of cause" should have been "of course" but is not needed anyway
#noticed by Zeev
2002-12-10 11:21:30 +00:00
Zeev Suraski 66aba3c568 Fix check to allow for static+access level modifiers 2002-12-10 09:04:12 +00:00
Ilia Alshanetsky aa4c85dda1 Fixed bug #20907, patch by m-arai@sco.bekkoame.ne.jp. 2002-12-10 00:10:27 +00:00
Ilia Alshanetsky 04a16f914c Replaced deprecated APR_BRIGADE_FOREACH macro. 2002-12-09 18:45:32 +00:00
foobar 8a8041befe fix typos 2002-12-09 18:30:50 +00:00
foobar 31415ad2b5 Make this actually work too. 2002-12-09 18:29:22 +00:00
Wez Furlong 58210f9232 Centralize fopencookie test 2002-12-09 18:29:07 +00:00
foobar 44aec93861 Fix the build with new cyrus and sasl2 libs 2002-12-09 18:05:37 +00:00
Marcus Boerger 85f1caeb14 Recheckin as unix
# *** sorry ** a new diff tool converted it to dos before last comit *** sorry ***
2002-12-09 18:03:00 +00:00
Marcus Boerger ba534ac7c8 Added open modifier '-' to skip/ignore locking. See bug #20828, #20858 2002-12-09 17:54:13 +00:00
Melvyn Sopacua 2421e79b60 Fix make install target on Cygwin, bug #20807 2002-12-09 17:02:38 +00:00
Wez Furlong ca6b002e4c MFB: zlib stream tests 2002-12-09 16:43:15 +00:00
Wez Furlong 5029c73096 Emulate fopencookie on *BSD systems.
Patch mostly from Melvyn Sopacua <msopacua@idg.nl>
2002-12-09 16:14:28 +00:00
Moriyoshi Koizumi 4974f268a6 @- Let array_search() accept objects as a needle under ZendEngine2. (Moriyoshi) 2002-12-09 15:54:38 +00:00
Sascha Schumann 7b2fd2c6c9 Use $(INSTALL) rather than cp to install modules.
$(INSTALL) will usually unlink the target file first, so that in-memory
instances of the old file don't get simply overwritten (and crash and burn).
2002-12-09 15:32:17 +00:00
Edin Kadribasic 3994fbbc86 MFB: Fix for #20894. 2002-12-09 13:35:57 +00:00
Zeev Suraski 32b100e6cb - Allow variables to have both 'static' modifier and an access level.
NOTE:  This only works at the syntax level right now (parser).  It
         doesn't actually work as of yet - all statics are considered
         public for now
- Prevent users from putting more restrictions on methods in derived classes
  (i.e., you cannot make a public method private in a derived class, etc.)
2002-12-09 12:10:17 +00:00
foobar 085f362ae3 T_AAAA is not always available. 2002-12-09 11:50:15 +00:00
Sebastian Bergmann ba5764ab39 Fix build. 2002-12-09 11:45:46 +00:00
Wez Furlong f4ca743d66 MFB zlib related fixes
(sorry I didn't get around to doing this sooner)
2002-12-09 10:54:20 +00:00
Wez Furlong 164130ed22 MFB: #20831 fix 2002-12-09 10:38:35 +00:00
Andi Gutmans 9283ff3ab6 - Fix a bug which I just introduced. 2002-12-09 08:36:36 +00:00
Andi Gutmans 60a4fa66cf - Fix typo 2002-12-09 08:31:44 +00:00
Andi Gutmans 757cd19aff - Improvements 2002-12-09 08:27:23 +00:00
Christian Stocker bda98029b4 PHP_FALIAS for doc_get_elements_by_tagname got lost 2002-12-09 08:14:15 +00:00
Andi Gutmans 671c6bb4c3 - First attempt to improve memory manager during realloc()'s 2002-12-09 08:14:00 +00:00
Ilia Alshanetsky 8f6d5dc775 Fixed a color mixup in gdImageCopyResampled() when dealing with true-color
images & brought the code up to PHP coding standards.
2002-12-08 21:07:13 +00:00
Harald Radi 0c4dc0afdf update todo 2002-12-08 19:05:43 +00:00
Harald Radi 3be2fdd14a initial checkin 2002-12-08 19:05:02 +00:00
Zeev Suraski 8f491470a1 Remove comment 2002-12-08 14:10:58 +00:00
Zeev Suraski dc5c790a49 Treat the absence of an access type just as if 'public' was supplied 2002-12-08 14:09:43 +00:00
Moriyoshi Koizumi 93ee146d0e Fixed stream leaks 2002-12-08 10:23:50 +00:00
Moriyoshi Koizumi 8d1b2bf8a5 Prevented return_value from being freed() twice 2002-12-08 09:54:30 +00:00
Sara Golemon a4d6863ee5 Bug #17174 Added IPv6 (AAAA record) support to dns_check_record() also added support to dns_get_record 2002-12-08 08:14:43 +00:00
Marcus Boerger 90d9299e51 Updated error message 2002-12-07 23:33:41 +00:00
Marcus Boerger f01fa3e02e Updated error message 2002-12-07 23:21:50 +00:00
Zeev Suraski 68aa19445b Simplify/fix inheritance checks 2002-12-07 21:46:12 +00:00
Zeev Suraski ce69b6f6ee Support private/protected constructors 2002-12-07 21:37:09 +00:00
Timm Friebe b9fa1813b2 - Fixed three memory leaks
- Fixed segfault with sybase_unbuffered_query() and unfetched resultsets
2002-12-07 19:49:31 +00:00
Sebastian Bergmann 81b1ed9ff3 Update. 2002-12-07 16:47:44 +00:00
Ilia Alshanetsky 66e40c013d Bug fixing news. 2002-12-07 16:15:46 +00:00
Ilia Alshanetsky 683251eba3 Fixed bug #20796. $_GET/$_POST/$_COOKIE data can get overwritten when
register_globals are on and input contains arrays.
2002-12-07 16:05:27 +00:00
Zeev Suraski c087d9e9e4 Fix error messages 2002-12-07 15:53:37 +00:00
Zeev Suraski e156edb1d0 Remove unintentional code 2002-12-07 15:52:08 +00:00
Andi Gutmans 1d1a796b58 - Dissallow using parent, self and main as class names 2002-12-07 15:51:25 +00:00
Marcus Boerger 8e268d2816 Adding a test for abstract class instanciation 2002-12-07 14:27:29 +00:00
foobar 495f544d4b sync 2002-12-07 12:14:42 +00:00
Sander Roobol 63519faca0 sync with branch 2002-12-07 11:27:59 +00:00
Sander Roobol 29529daebd Forgot to add this entry... 2002-12-07 11:21:44 +00:00
Frank M. Kromann 7f3783ec15 fixing code style 2002-12-07 06:05:06 +00:00
Ilia Alshanetsky 8425dbd0bc Fixed bugs #20725 & #20860. Post form variables get lost if the uploaded
files cannot be written to disk.
2002-12-07 00:48:13 +00:00
Frank M. Kromann ac2f1624d7 Removing unused code and making sure headers are send when called from imap_mail() 2002-12-06 22:56:57 +00:00
Frank M. Kromann 0d812352be Fixing a possible strcat on a NULL pointer 2002-12-06 22:52:31 +00:00
Moriyoshi Koizumi 3500c239a0 Fixed build with autoconf-2.54 2002-12-06 18:25:39 +00:00
Ilia Alshanetsky 3bc8512cf0 Added test case for bug #20865. 2002-12-06 17:46:26 +00:00
Ilia Alshanetsky ed7c3bfe0e Fixed bug #20865, array_key_exists() could not locate NULL keys. 2002-12-06 17:35:52 +00:00
Zeev Suraski e062dffe6c - Implement public/protected/private methods.
- Prevent instantiation of classes with abstract methods.
Based in part on Marcus's patch.
2002-12-06 17:09:44 +00:00
Marcus Boerger e0a972c061 cpdf + bundled gd
#maybe someone finds a better solution (perhaps in config) and comitts it
2002-12-06 16:33:57 +00:00
Abdul-Kareem Abo-Namous 646c4747b4 added support for multiple character sets.
OCILogon now has a forth optional parameter, which is the character set requested by the string (i.e. we8iso8859p1). when left blank, NLS_LANG or default is used.

config.m4 was changed to identify Oracle 9+ which is needed for this feature. all other oracle versions (lesser) fall back to the old behaviour.
2002-12-06 13:44:35 +00:00
Sebastian Bergmann b3d0cca0e6 A bit of an update for the sapi/servlet installation guide. 2002-12-06 06:44:29 +00:00
Sebastian Bergmann 27ff466cbc Deprecate sapi/fastcgi. 2002-12-06 06:08:17 +00:00
Ilia Alshanetsky 33de9befa1 Fixed bug #20812, ftp_get returned NULL on success instead of TRUE. 2002-12-06 06:07:40 +00:00
Pierre Joye dda7acaad5 Add imageistruecolor 2002-12-06 02:16:06 +00:00
Stig Bakken 1ef49991ff * fix upgrade-all output 2002-12-06 00:10:10 +00:00
Marcus Boerger ae35c4731f php_error -> php_error_docref 2002-12-05 23:18:28 +00:00
James Cox 2cca05a32a more rain 2002-12-05 23:17:59 +00:00
James Cox 0704182de1 rainy and cold here. 2002-12-05 23:06:40 +00:00
James Cox 1d5ee6f74d touch again. 2002-12-05 22:55:25 +00:00
Ilia Alshanetsky d6c29c781e Fixed a memory leak inside heb_number_to_chars(). 2002-12-05 22:46:54 +00:00
James Cox a43d2960ec touch2. 2002-12-05 22:35:11 +00:00
James Cox e93f60e651 touch 2002-12-05 22:31:18 +00:00
Ilia Alshanetsky c668055159 Remove pointless checks for array_init() return values. 2002-12-05 22:28:02 +00:00
Marcus Boerger 4ce4a1c32c php_error -> php_error_docref 2002-12-05 21:53:25 +00:00
Marcus Boerger 8ed84254cd -php_error -> php_error_docref 2002-12-05 21:46:08 +00:00
Sara Golemon ad65d01cbe Bug #20746. Renamed aggregation_info() to aggregate_info() per naming conventions and created alias for BC. 2002-12-05 21:20:47 +00:00
Marcus Boerger 49a99a98f4 -php_error -> php_error_docref
-removed some cases where emalloc result was tested
2002-12-05 20:59:49 +00:00
Marcus Boerger 3cf581b1b3 correct code that is guarded by "#if 0" 2002-12-05 20:41:55 +00:00
Marcus Boerger 9a04528061 fix ZTS build 2002-12-05 20:39:43 +00:00
Marcus Boerger dcfe988820 php_error -> php_error_docref 2002-12-05 20:13:35 +00:00
Marcus Boerger 47b0e79b1a -fix a warning that was an error
-php_error -> php_error_docref
2002-12-05 20:01:31 +00:00
Ilia Alshanetsky 7364e3b771 Fixed bug #12556, updated the test for this bug. 2002-12-05 20:01:19 +00:00
Marcus Boerger cf5d2e79b9 fix debug only 2002-12-05 19:49:12 +00:00
Derick Rethans 83741be445 - Renamed snmpv3_* to snmp3_*
- Conversion to php_error_docref
- Whitespace fixes
2002-12-05 19:33:03 +00:00
Melvyn Sopacua bd06d48e56 Test data 2002-12-05 19:30:28 +00:00
Melvyn Sopacua 76436b8820 Add a testcase for this bug 2002-12-05 19:29:45 +00:00
Marcus Boerger 19d5e535c0 Remove unnecessary code here 2002-12-05 15:52:20 +00:00
foobar f8c050395c ws fix (bug: #20808) 2002-12-05 15:44:27 +00:00
Marcus Boerger 373361d9c4 Return FALSE on error as mentioned by John Coggeshall.
See Bug #20822
2002-12-05 12:39:00 +00:00
Rasmus Lerdorf 4c749f08c0 Fix build 2002-12-04 23:21:30 +00:00
Ilia Alshanetsky 8d4b717518 Added GD image conversion tests. 2002-12-04 21:04:07 +00:00
Ilia Alshanetsky 5779f9bb0f Made imagecreatefromxpm() work once again. 2002-12-04 20:58:04 +00:00
Ilia Alshanetsky f3a253a4a0 Fixed a typo. 2002-12-04 17:31:35 +00:00
Ilia Alshanetsky 30724f6291 Bug fixing news. 2002-12-04 17:29:48 +00:00
Ilia Alshanetsky 1e8ec47a99 Fixed a memory leak inside gdImageTrueColorToPalette(). 2002-12-04 17:16:19 +00:00
Moriyoshi Koizumi cf0a0f0967 Added a test for bug #12776 2002-12-04 17:01:07 +00:00
Moriyoshi Koizumi 7b56bfae46 Bug fix news 2002-12-04 16:49:59 +00:00
Moriyoshi Koizumi 7bf4090efb Fixed segfaults of array_walk() when keys are passed to cb by reference.
Fixed bug #12776.
2002-12-04 16:41:28 +00:00
Ilia Alshanetsky 143e46ae28 WS fixes. 2002-12-04 16:29:48 +00:00
Sebastian Bergmann 196b3f581f Fix bugs #20270, #15702, #18600 (segfaults in ext/java). (Tony J. White) 2002-12-04 08:31:43 +00:00
Sebastian Bergmann 49f05c470a Fix bugs #20270, #15702, #18600. Patch by Tony J. White <tjw@tjw.org>. 2002-12-04 08:18:02 +00:00
Pierre Joye 00881ea504 Fix imagegd stdoutput
Typo 256 colors
2002-12-04 02:48:23 +00:00
Pierre Joye e8e2420042 Fix imagegd crashes when used with truecolor image (from jpeg,png, or imagecreatetruecolor)
may we add parameters to imagegd to let user specify the palette size and dither (set to 256 and true) ?
2002-12-04 02:37:21 +00:00
Christian Dickmann 910a03a835 silence some possible warnings 2002-12-03 20:51:36 +00:00
Frank M. Kromann 956d63899c Changed php_error() to php_error_docref() 2002-12-03 19:39:25 +00:00
Ilia Alshanetsky e1b9a77725 Fixed a bug that caused a crash in pdf_open_memory_image(), when a truecolor
image was loaded, it now checks if the image is truecolor and performs the
appropriate calculations (fixed bug #20785).
Changed E_WARNING back to E_ERROR.
2002-12-03 19:25:17 +00:00
Frank M. Kromann 686010e050 Changed php_error() to php_error_docref() 2002-12-03 19:19:15 +00:00
Frank M. Kromann 13b6390df7 Bug #19370
Allow stored procedures to return multiple results.
2002-12-03 18:57:04 +00:00
Frank M. Kromann 5eaf2d10e7 Bug #17593
Make sure any pending data is released from the server when freeing the result
2002-12-03 18:04:35 +00:00
Harald Radi 8529f3ba95 damn milter api:
"Furthermore, since there is not a one-to-one correspondence between
 threads and connections (N connections mapped onto M threads,
 M <= N), connection-specific data must be accessed through the handles
 provided by the Milter library."

which in other words means php_request_startup() and the corresponding
php_request_shutdown() will never be called for the same thread
2002-12-03 16:26:57 +00:00
Ilia Alshanetsky b08f247f32 Fixed a crash that occurs during the last step of png/jpeg -> gd2 -> png/jpeg
conversion. The same crash still occures with png/jpeg -> gd -> png/jpeg, because
apparently gd format cannot handle truecolor images.
Turned off debug messages inside gd_gd2.c.
2002-12-03 15:43:17 +00:00
Moriyoshi Koizumi 242ddba326 Fixed leaks in array_walk() 2002-12-03 15:02:06 +00:00
Harald Radi bf16a54f5a fix typos and make example more useful 2002-12-03 14:43:43 +00:00
foobar 7d744c54b4 - Need these libraries for static build 2002-12-03 11:34:12 +00:00
foobar 68eaf6391a - Fixed the build with iPlanet LDAP SDK 5.x 2002-12-03 09:35:42 +00:00
Frank M. Kromann 679d645738 Allocating enough memory to hold values.
Fix crash when certan stored procedures was called. This caused the free_result function to free memory not yet allocated.
2002-12-03 05:56:39 +00:00
Moriyoshi Koizumi e7f1bbf0f2 Iconv extension is no longer experimental 2002-12-02 21:29:06 +00:00
Moriyoshi Koizumi de79a4e9d8 Reverted the changes because the problem was elsewhere. 2002-12-02 21:10:37 +00:00
Moriyoshi Koizumi c7a0b0d262 Reverted wrong part of the commit made in 1.24 2002-12-02 20:11:59 +00:00
Frank M. Kromann b2a648f5b5 Fixing the Win32 compilation of mbstring with mbregex enabled. 2002-12-02 19:18:23 +00:00
Frank M. Kromann a7f3ad42a4 Fixing build on WIn32
MBREGEX is disabled for now. 5 mbre_* functions are undefined on WIn32
2002-12-02 18:19:17 +00:00
Sterling Hughes 7fd0c8b593 apparently this isn't finished 2002-12-02 16:38:22 +00:00
Ilia Alshanetsky 467a5f44ec Fixed flex version check. Some lex scanners like Sun's SGU do not appear
to support -V flag, so by passing them data on stdin we prevent them from
sitting idle waiting for stdin data. I've also added some common version
retrieval flags, that may be supported by various lex scanners.
2002-12-02 07:03:00 +00:00
Ilia Alshanetsky 057e87e6e5 Repositioned CoInitialize and CoUninitialize that apparetly makes it more
correct according to MS docs. Patch (+5) by Michael Sisolak
<msisolak@yahoo.com>.
2002-12-02 06:43:54 +00:00
Ilia Alshanetsky a6e02dc45d Fixed a crash bug that can occur due to PDF_delete() being called more then
once and E_ERROR occurring during the shutdown sequence.
2002-12-02 06:35:29 +00:00
Jason Greene 5e1741fd48 Revert patch that should have been reverted a long time ago.
There was a memory leak in the error handling system on win32, that this patch
circumvented (by preventing the errors (EAGAIN mesages) from being generated).
# I must have forgotten to remove this when I fixed the leak
2002-12-02 05:45:13 +00:00
Shane Caraveo 76e09401ab aparently did not add these on head
removed ssize_t which was causing problems, and not in libfcgi anyway
2002-12-02 05:24:54 +00:00
Shane Caraveo 75cbbfacb1 fix use of Alias under apache by defaulting script_name to redirect_url
dont lstat, stat.
2002-12-02 02:16:38 +00:00
Jon Parise 6be496f44e Correct the punctuation of these error messages. 2002-12-02 00:21:15 +00:00
Sterling Hughes 065104b8fe TODO: Cleanup elements that have happened, or most likely won't happen. There
is probably more that should be gone, but its still a move in the right
direction.

Other stuff is ws/formatting changes
2002-12-01 22:15:39 +00:00
Shane Caraveo 9bc3f72d8e build support for cgi fixes previously commited 2002-12-01 21:50:35 +00:00
Shane Caraveo a3bd39429c Fix CGI to match cgi spec.
This patch properly fixes support for CGI in PHP.  For backwards compatible
broken behaviour, cgi.fix_pathinfo can be set to zero in php.ini.
CGI failed to work under apache at all, either using the cgi-script directive
or as a ScriptAlias setup. Typicaly it would try to parse itself.  This will
still happen if you dissable fix_pathinfo, and set DISCARD_PATH.
This also fixes PATH_INFO, and finally we can run pres2 under cgi or fastcgi.
This patch has been tested under Apache 1.3, 2.0, IIS, as both cgi and fastcgi,
on Windows and OSX.  A followup patch with build stuff for linux will follow.
2002-12-01 21:37:14 +00:00
Shane Caraveo 529762a21a php_error_docref aborts cgi. This broke using php as cgi under
apache/mod_cgi with the cgi-script directive and bang lines in php scripts.
removing it allows this to work again.
2002-12-01 21:28:27 +00:00
Harald Radi 3fb36b0c56 example 2002-12-01 20:29:14 +00:00
Harald Radi e25b194525 rename callbacks to fit the original name 2002-12-01 20:28:54 +00:00
Andi Gutmans 9f361fc0f8 - Allow enabling of memory cache with zend_mm 2002-12-01 20:15:09 +00:00
Harald Radi b460dfc042 initial checkin 2002-12-01 19:55:48 +00:00
Harald Radi 9d5e55f790 if the api functions are called, check if they're valid in that context
reopen file per request, so milter doesn't hang. PHPA or APC can be used to speed the milter up
added a milter_init callback to init the milter before it is registered
added protos to make sniper happy
2002-12-01 19:50:07 +00:00
Andi Gutmans 27de54b0df - MFZE1 2002-12-01 19:47:02 +00:00
Andi Gutmans f222884e2d - Revert as the patch doesn't compile 2002-12-01 19:22:30 +00:00
Andi Gutmans b6ecd6704c - MFZE1 2002-12-01 19:07:07 +00:00
Stefan Roehrich e50dc16b21 Comment about maximal length now matches code. 2002-12-01 18:48:51 +00:00
foobar cef45338c9 fix build.. 2002-12-01 17:24:00 +00:00
Harald Radi 8c19b754f9 first working version 2002-12-01 16:37:59 +00:00
Harald Radi db93856c07 check for libmilter path 2002-12-01 13:44:22 +00:00
Derick Rethans 7fbcf76973 -fix typo 2002-12-01 13:43:17 +00:00
Harald Radi e4bc32fbe2 no message 2002-12-01 13:36:53 +00:00
Stanislav Malyshev 2c7d6f9a74 improve username/password detection for IIS 2002-12-01 12:48:08 +00:00
Harald Radi 1356e60fa3 no message 2002-12-01 12:23:47 +00:00
Marcus Boerger fa38a6af6f No more (f)printf for errors and warnings instead use php_error_docref. 2002-12-01 11:43:54 +00:00
foobar e178bdc1ee Fix build 2002-12-01 05:14:56 +00:00
Harald Radi 0244ca1d97 it finally compiles now
tests will follow tomorrow
2002-12-01 03:37:49 +00:00
Sascha Schumann 2b95b3c83b add a "force HTTP/1.0 response" facility to the SAPI layer
this is necessary, when you want to take over control of a connection
and the web server is doing stupid things by default (like enabling
chunked transfer encoding for no reason).
2002-12-01 03:28:21 +00:00
Sterling Hughes b9447c2f49 remove dos line endings 2002-12-01 03:13:03 +00:00
Harald Radi b7b5ca519f fix build 2002-12-01 02:45:30 +00:00
Moriyoshi Koizumi aeb6a6c458 Fixed possible buffer overflow in php_base64_decode();
# This bug doesn't appear to be harmful for now,
# so I won't merge it into branches...
2002-12-01 02:44:50 +00:00
Harald Radi 39e03b580b todo or not todo 2002-12-01 01:36:26 +00:00
Harald Radi 3a0a2411c7 added remaining functions, still untested, still having problems with config.m4 2002-12-01 01:18:48 +00:00
Marcus Boerger 38f5812191 Skip overload for ZE2
Bug #20156
2002-12-01 00:38:30 +00:00
Harald Radi ad6333654e Sendmail Milter SAPI
initial version
2002-12-01 00:21:10 +00:00
Frank M. Kromann 32d7284c52 Dont scan headers for cc abd bcc if extra parameters are used for these 2002-11-30 21:50:17 +00:00
Frank M. Kromann 7afd92792b Fix the use of "personal" information in To and Cc headers 2002-11-30 21:49:20 +00:00
Ilia Alshanetsky cc13af6a07 Fixed bug #20716. 2002-11-30 19:12:48 +00:00
Marcus Boerger 0d7957bc15 Bug #20433 2002-11-30 18:36:17 +00:00
Andi Gutmans 671fff2fde h WHitespace 2002-11-30 11:20:25 +00:00
Christian Stocker 3429e3313b fixed big bad memory leak in xpath objects. 2002-11-30 10:38:17 +00:00
Jason Greene 5d554c20d2 Sockets is no longer experimental 2002-11-29 23:44:06 +00:00
Moriyoshi Koizumi b9687bea65 Prevented the result from being affected by function overloading 2002-11-29 18:32:50 +00:00
Sander Roobol 348b429b5b Remove all traces of _bc_Free_list - it's not used anymore 2002-11-29 17:59:30 +00:00
Yasuo Ohgaki e4be6b3ac2 Fixed problem with PostgreSQL 7.3 2002-11-29 17:18:01 +00:00
Andi Gutmans 2de45bec65 - Initialize constants_updated (by Marcus) 2002-11-29 16:35:46 +00:00
Christian Stocker 71235e4140 removed unused variable 2002-11-29 16:31:41 +00:00
foobar 7f48a6f13b MFB 2002-11-29 14:48:17 +00:00
foobar 6fb3b26796 - MFB 2002-11-29 14:46:06 +00:00
Christian Stocker 55ee8af808 fix for bug #20389 (no trailing slash in configure option) 2002-11-29 13:30:29 +00:00
Sascha Schumann 95fead0b9f add missing line 2002-11-29 11:34:08 +00:00
Christian Stocker a2ccb29a97 @- Added xpath_register_ns_auto([contextnode]) for automatically registering
@  namespace definitions (chregu)

changed my mind. Automatic namesapce registration is not done within
xpath_eval() anymore, but in a seperate function.
2002-11-29 11:22:06 +00:00
Christian Stocker eed5b11b5f do some kind of automatic namespace registration in xpath_eval(). This
works only for namespaces defined in the context node (eg docroot if
no second argument is given. If one wants to use namespaces defined
elsewhere or with different prefixes, you still have to use
xpath_ns_register()
2002-11-29 10:24:44 +00:00
Christian Stocker b1dab29214 relative xpath queries are already possible
(use $ctx->xpath_eval($xpath,$contextnode) )
2002-11-29 08:28:53 +00:00
Christian Stocker cac5d670b3 get_element_by_id does not need LIBXML_XPATH support 2002-11-29 07:50:37 +00:00
Marcus Boerger 65eb0d8125 Conversion fixes 2002-11-29 01:44:19 +00:00
Marcus Boerger 0a7487e32d Conversion fixes 2002-11-28 22:48:20 +00:00
Marcus Boerger e7f5b801be Do not instanciate an abstract class 2002-11-28 17:07:50 +00:00
Ilia Alshanetsky 398ff4fe82 Fixed mhash tests, apparently the TIGER algorithm was updated (fixed?) in
later mhash releases and consequently returns a different hash. I've updated
the hash to the one generated by latter releases.
Removed useless \r from ext/mhash/tests/003.phpt.
2002-11-28 14:13:44 +00:00
Martin Kraemer 966f75d4fb Portability: avoid <malloc.h> warnings on FreeBSD 2002-11-28 09:19:16 +00:00
Martin Kraemer f3845c3ae0 Portability: The header contains the declaration; while the source ext/bcmath/libbcmath/src/init.c has the definition
(otherwise some compilers complain about 'duplicate symbols')
2002-11-28 08:26:14 +00:00
Martin Kraemer c5a7a522a1 Portability: Use 0 if the platform does not define EX_OK 2002-11-28 08:23:36 +00:00
Andi Gutmans c6502fa225 - Nuke use of deprecated macro 2002-11-27 20:09:36 +00:00
Sterling Hughes 52a451ccd2 no more need for this either 2002-11-27 20:06:01 +00:00
Sterling Hughes 5c96f91123 don't use stupid constants, be smart, just read the line 2002-11-27 20:05:20 +00:00
Frank M. Kromann 7abdf90a0e free alocated mem.
minor changes in the layout
2002-11-27 18:52:31 +00:00
Tal Peer 1d768548cd jdtojewish() test 2002-11-27 15:54:32 +00:00
Tal Peer 8aac1ce2ee Added an additional (optional) argument to jdtojewish() to keep BC
with 4.3 (and let users getdates in Hebrew without further formatting)
2002-11-27 15:52:25 +00:00
Ilia Alshanetsky e195b10ede Fixed bug #20664. 2002-11-27 06:20:19 +00:00
Marcus Boerger 28c10e29d0 -Code completley rewritten 2002-11-27 02:42:41 +00:00
Marcus Boerger 569c69ba36 -Add test for exif_read_data and magic_quotes_runtime 2002-11-27 02:31:26 +00:00
Marcus Boerger 57f41b1a90 -Forgot to correct length 2002-11-27 02:28:29 +00:00
Marcus Boerger 3ff08b91a6 -Add magic_quotes_runtime support
-Fix Canon Markernote
2002-11-27 01:46:36 +00:00
Frank M. Kromann f9b3452c6a Convert 0D 0D 0A line breaks to 0D 0A 2002-11-27 00:49:24 +00:00
Stig Bakken 441a3e3612 * fix typo 2002-11-26 23:17:22 +00:00
Frank M. Kromann 9f927c1a2e time is a function. Use the name of the variable 'timestamp' 2002-11-26 23:03:07 +00:00
Frank M. Kromann 863962d5cf Adding missing header file on Win32 2002-11-26 23:02:09 +00:00
Frank M. Kromann 0cddc5b4eb removing unused variables 2002-11-26 23:01:17 +00:00
Stig Bakken b066da4e65 * lose obsolete tags: libfile, libname, sources, includes, libadd 2002-11-26 22:52:34 +00:00
Frank M. Kromann 2ac7c4f2de Adding missing ; 2002-11-26 22:44:16 +00:00
Moriyoshi Koizumi 98dace883e Improved the error reporting portion of array_walk() as suggested by Markus 2002-11-26 22:12:40 +00:00
Moriyoshi Koizumi 3fd513f32a Prevent too many error reports from being displayed 2002-11-26 21:51:37 +00:00
Stig Bakken 7e21663cb5 * ws/folding 2002-11-26 21:49:55 +00:00
Moriyoshi Koizumi 61b3d5ccb5 Fixed incorrect error messages of array_walk() in case the callback is
specified in an array form
2002-11-26 21:21:32 +00:00
Stig Bakken 397b35f891 * changed "info" shortcut to "in" 2002-11-26 18:23:58 +00:00
Christian Stocker 20688a30ab Fix for Bug #20639 DomElement->get_elements_by_tagname() doesn't work 2002-11-26 15:37:54 +00:00
Wez Furlong b1a5434537 Update to use new parameter parsing API.
Updates to Jewish/Hebrew calendar code.
Patch from Moshe Doron, amended by Tal Peer,
reviewed by me.
# Maybe Tal and/or Moshe could comment on whether this should
# also be commited to the 4_3 branch (it completes some earlier work
# started prior to the branch).
2002-11-26 14:52:00 +00:00
Marcus Boerger 579e3ca96b Add Berkeley db4 support 2002-11-26 12:05:59 +00:00
Marcus Boerger 197fd585bd -Disallow combining db2 with db3 which are conflicting.
-Stop searching for headers and libraries when found.
-Check version for Berkeley DB library headers.
2002-11-26 12:00:25 +00:00
Marcus Boerger f88aa8045a Highlight "Thank you" 2002-11-26 11:30:08 +00:00
Frank M. Kromann a2bf03ccea Avoid , at the end of each string (to, cc and bcc) 2002-11-26 07:04:31 +00:00
Shane Caraveo 17cce37a72 fix windows build of cgi/fastcgi 2002-11-26 06:51:44 +00:00
foobar dd53efc196 - Made the STANDARD_SAPI_MODULE_PROPERTIES be what it says it is. 2002-11-26 05:57:06 +00:00
Shane Caraveo 95b4045f48 configure now supports building the cgi-fcgi module
configure --enable-fastcgi
2002-11-26 05:51:16 +00:00
Sascha Schumann 09f463ddae Add sapi_get_fd() and implement it for the Apache/thttpd SAPIs. 2002-11-26 05:15:55 +00:00
Yasuo Ohgaki f0b6f5450c Remove a warning 2002-11-26 02:13:35 +00:00
Stig Bakken 693204265e * a little more "windows robust" when looking for package.xml 2002-11-26 01:38:48 +00:00
Stig Bakken ad2618b8eb * forgot to set release date 2002-11-26 01:34:14 +00:00
Stig Bakken df158fa5cf * added --ignore-errors option, --force no longer ignores errors 2002-11-26 01:32:47 +00:00
Stig Bakken 58c57d43ab * added sig_keyid config param 2002-11-26 00:05:21 +00:00
Ilia Alshanetsky 9497ba9d49 MFH (test failure if session.serialize_handler is not set to php). 2002-11-25 23:20:05 +00:00
Stig Bakken e617da5aae * more accurate description of "makerpm" command 2002-11-25 23:16:16 +00:00
Stig Bakken 6f1c21aea2 * silence some notices 2002-11-25 23:15:31 +00:00
Stefan Esser ababfedb66 tmp_line was possible uninitialised, resulting in crap error messages. 2002-11-25 22:53:57 +00:00
Ilia Alshanetsky 693fd4a36b Added a check to determine if the file can be retrieved or sent.
This check also prevents incorrect error reporting in the event the retrieval
or the sending of the file cannot be accomplished.
2002-11-25 22:00:52 +00:00
Maxim Maletsky d9cf3c2a0e Bug# 16798. Tests appreciated by someone with Oracle 8.0 2002-11-25 18:14:45 +00:00
Moriyoshi Koizumi 53fba5f8a6 @- Enabled mbregex by default when mbstring is also enabled (Moriyoshi) 2002-11-25 17:44:14 +00:00
Moriyoshi Koizumi 12d4a19fce Forgot to adjust this one 2002-11-25 17:21:50 +00:00
Moriyoshi Koizumi 76b218cb6e Renamed several internal functions for consistency 2002-11-25 17:20:20 +00:00
Rui Hirokawa b3cfda6389 simplified korean encoding conversion table. 2002-11-25 15:21:04 +00:00
Ilia Alshanetsky c330fdc1a1 Removed un-needed zlib check. 2002-11-25 14:25:52 +00:00
Hartmut Holzgraefe 8bd550825f email address change 2002-11-25 12:30:28 +00:00
Ilia Alshanetsky 9251486567 Synchronized bundled gd library with the latest stable GD, 2.0.6
Fixed a configuration problem with xpm.
Fixed 2 possible memory leaks in fontFetch().
2002-11-25 01:51:53 +00:00
Yasuo Ohgaki 5c851cba19 Cleanup state=4 and avoid using sscanf() 2002-11-25 01:38:29 +00:00
Andi Gutmans 6aa90a75bd - FN_IS_STATIC -> FN_STATIC 2002-11-24 20:32:49 +00:00
Andi Gutmans 5cb8fabb7d - Fix crash 2002-11-24 20:15:56 +00:00
Moriyoshi Koizumi 436bc265e6 MFB 2002-11-24 19:48:58 +00:00
Sergey Kartashoff dab1bb005a - Header file update for new mnogosearch functions 2002-11-24 19:39:47 +00:00
Sergey Kartashoff 319f286562 @- A new functions have been added: udm_set_agent_param_ex and
udm_get_res_field_ex
- A new functions have been added: udm_set_agent_param_ex and
  udm_get_res_field_ex
2002-11-24 19:36:46 +00:00
Sascha Schumann 3f6b470770 Use proper form of NUL
Drop superfluous checks for NULL results
2002-11-24 16:23:37 +00:00
Marcus Boerger 2ddbee008f Better naming 2002-11-24 16:07:34 +00:00
Marcus Boerger c4272645ce Add test against redeclaring an overloaded method abstract 2002-11-24 15:51:57 +00:00
Marcus Boerger 622b45e2a9 Add test against mixing static/non static methods 2002-11-24 15:50:28 +00:00
Sterling Hughes 490903da5a null after the erealloc() 2002-11-24 15:11:43 +00:00
Christian Dickmann 51f5b6debb remove the check, cause i don't really know, if content has to be an array everytime 2002-11-24 10:15:25 +00:00
Christian Dickmann 0228cfcf4a add some checks to increase cache integrity 2002-11-24 10:13:57 +00:00
Christian Dickmann 7dd3e5e683 add errormessage, but that does not fix the problem 2002-11-24 10:06:54 +00:00
Yasuo Ohgaki 5c2fda30b2 Added missing '\0' 2002-11-24 07:45:26 +00:00
foobar bad0d653a1 MFB: ; instead of : 2002-11-24 05:15:10 +00:00
Moriyoshi Koizumi c7c7132a66 Renamed the file because this is actually a test for gdImageStringFt(). 2002-11-24 01:32:15 +00:00
Ilia Alshanetsky ef1d4e1dcf Fix compile warning, MIN/MAX macros may already be defined by param.h 2002-11-24 01:30:51 +00:00
Ilia Alshanetsky 67e25fcbd8 Added gdPEstrdup macro. 2002-11-24 01:20:13 +00:00
Ilia Alshanetsky ef26e2d1f8 Fixed 3 memory leaks.
Formatted the code to meet PHP's coding standards, which makes it MUCH easier
to understand.
2002-11-24 01:15:34 +00:00
Moriyoshi Koizumi 9db2512418 Fixed the macro so this can be compiled with ft1 2002-11-24 00:59:41 +00:00
Moriyoshi Koizumi fe23fcab12 Sorry, wrong commit. 2002-11-23 23:35:57 +00:00
Moriyoshi Koizumi 0f8916e37c Dismissed the second part of the test 2002-11-23 23:34:38 +00:00
Frank M. Kromann ecd975550b Adding mb_gpc files to project 2002-11-23 22:59:24 +00:00
Moriyoshi Koizumi 4124672edf Fixed leaks. Other leaks are originated in libgd. 2002-11-23 22:11:59 +00:00
Derick Rethans 1019b2ea94 - Adjust tests for removed old_function() in Zend Engine 2 2002-11-23 22:08:05 +00:00
Moriyoshi Koizumi 57e4b81d13 Fixed segfaults 2002-11-23 21:33:31 +00:00
Marcus Boerger 1827a58de0 Allow db4.0 & db4.1 here. Patch by Ralf Engelschall (rse@engelschall.com) 2002-11-23 21:11:12 +00:00
Andi Gutmans 01e853c2ce - My personal cleanups 2002-11-23 20:46:39 +00:00
Andi Gutmans e8214a3384 - Commit Marcus' cleanup of abstract and static inheritance and improve
- error messages
2002-11-23 20:44:12 +00:00
Moriyoshi Koizumi f920e5d068 Forgot this one. Updated license information 2002-11-23 20:17:46 +00:00
Moriyoshi Koizumi 7f1f056f16 Updated license information headers 2002-11-23 20:14:33 +00:00
Moriyoshi Koizumi 22a9d7ad25 Separated GPC related part from mbstring.c 2002-11-23 20:08:44 +00:00
foobar 5e429447b1 ws fix 2002-11-23 19:20:44 +00:00
Derick Rethans 36e82c84ae - Make it compile on IRIX again
#- Tested with Linux/FreeBSD and IRIX
2002-11-23 19:03:21 +00:00
Marcus Boerger c7dc6c0e00 Move up general tests
# if MFH is needed should be decided by QA team: because the output # sequence changes
2002-11-23 16:57:25 +00:00
Moriyoshi Koizumi 44c98c7e3f Fixed some odd behaviours of range() 2002-11-23 11:27:56 +00:00
Moriyoshi Koizumi 715ad2730c Fixed tab positions. 2002-11-23 11:20:51 +00:00
Moriyoshi Koizumi 40d605a385 Test for mb_send_mail() under language=Korean 2002-11-23 05:26:18 +00:00
Marcus Boerger 517af84b0a MFB: Fix memleak in debug mode 2002-11-23 01:24:08 +00:00
Sara Golemon e9047df607 New function dns_get_record(): close resolver socket after use.
fix to internal func php_parserr(): correct bug in return state.
2002-11-23 01:09:07 +00:00
Marcus Boerger 318e561905 Testing default behaviour 2002-11-23 00:54:04 +00:00
Rui Hirokawa c38db57f3c fixed some bugs in korean encoding conversion. 2002-11-22 23:34:55 +00:00
Rasmus Lerdorf 761bcbd751 Applied imagedeallocate() fix 2002-11-22 23:25:14 +00:00
Ilia Alshanetsky 962e4864a1 Fixed bug #20560. 2002-11-22 21:51:38 +00:00
Stefan Esser 9dae1475ef little fix 2002-11-22 19:34:17 +00:00
Marcus Boerger e7d20a0422 Make magic_quotes_runtime work bidirectional for dba 2002-11-22 15:47:48 +00:00
Edin Kadribasic 81711ba621 Avoid possible buffer overflow. 2002-11-22 15:47:39 +00:00
Marcus Boerger d33ff48608 Show which algorythm fails and do not fail when we have new algos.
#for me TIGER fails anybody else?
2002-11-22 14:07:29 +00:00
Edin Kadribasic fd47c5bb32 MFB: Don't send default http status (200). 2002-11-22 13:55:27 +00:00
Jan Kneschke b4ced28d7c - protect the function against a non-xml document
- initializing variables reduces the number of seg-faults
2002-11-22 13:41:51 +00:00
Jan Kneschke 3598fbcef9 - fixed a buffer under run
- initializing variables is a good thing
  - in case of a invalid response we don't seg-fault here anymore
2002-11-22 13:39:06 +00:00
Andrey Hristov 850586cfe7 typo fix. 2002-11-22 11:11:31 +00:00
Derick Rethans 2a9f250ec7 - Initialize all functions to non-static (patch by Marcus Börger
<marcus.boerger@t-online.de>.
2002-11-22 10:49:46 +00:00
Marcus Boerger 4e78286eaf Update error message and say 'method' instead of 'function' 2002-11-22 10:44:36 +00:00
Edin Kadribasic 714a5be6cc Fixed bug #19207 by adding cgi.rfc2616_headers configuration directive. 2002-11-22 10:15:47 +00:00
Sander Roobol f200f739d8 Made bcmath extension thread safe.
@Made bcmath extension thread safe. (Sander)
2002-11-22 09:25:29 +00:00
Stig Bakken 64a75d6d77 * fix config-show output 2002-11-22 07:03:46 +00:00
Sebastian Bergmann ba1f645030 Show class name as well. Patch by Marcus Börger. 2002-11-22 06:19:04 +00:00
Ilia Alshanetsky 489b0f2115 Added missing header (fixed bug #20555). 2002-11-22 02:38:03 +00:00
Ilia Alshanetsky 2ca45412ed Added a test case for bug #20528. 2002-11-22 00:08:57 +00:00
Ilia Alshanetsky c7dd366c1a Fixed bug #20528. 2002-11-21 23:51:52 +00:00
Melvyn Sopacua 7732ce7fe3 Fix bug #20518 2002-11-21 23:28:26 +00:00
Melvyn Sopacua 8d42dd7a8b test for bug #20518 2002-11-21 23:27:38 +00:00
Maxim Maletsky e20121e6c7 Added E_WARNING to OCIPasswordChage() when Safe Mode is in effect 2002-11-21 21:26:18 +00:00
Maxim Maletsky b5ae4adde1 @- Added OCIPasswordChange() which allows the password of an Oracle account to be changed. (Maxim) 2002-11-21 20:49:33 +00:00
Maxim Maletsky 1f73196bf9 comment typo 2002-11-21 20:32:56 +00:00
Maxim Maletsky 8338d8bfce Disabled OCIPasswordChange() in safe mode. Possible security risks. 2002-11-21 20:28:11 +00:00
Moriyoshi Koizumi 1748935997 Added missing mb_internal_encoding() 2002-11-21 18:12:53 +00:00
Moriyoshi Koizumi adfcb09190 Removed unnecessary "\n" 2002-11-21 17:36:16 +00:00
Moriyoshi Koizumi 9762403c26 Added a test case for imagettftext() 2002-11-21 17:26:18 +00:00
Marcus Boerger d3e095004c Revert that unwanted debug thing - thanks to Sander Robol 2002-11-21 16:48:39 +00:00
Sander Roobol b8cf1a369f Hardcode the bcmath.scale ini-entry 2002-11-21 16:16:38 +00:00
Rui Hirokawa 13a51b8f20 mbstring is supporting CJK + some other encodings. 2002-11-21 16:12:49 +00:00
Rui Hirokawa 8a2b5991d6 fixed incorrect encoding conversion in korean. 2002-11-21 16:05:38 +00:00
Sander Roobol f4ffead6fa Adding tests for the bcmath extension 2002-11-21 15:24:45 +00:00
Marcus Boerger 64e45b1287 Force showing the question 2002-11-21 15:09:45 +00:00
Marcus Boerger b66a39eb6e Test: An abstract function can be overwritten but not called 2002-11-21 15:06:54 +00:00
Marcus Boerger b7cd48efdd Make it possible to test language features like newly introduced 'abstract'
independantly from debug mode.
2002-11-21 14:56:06 +00:00
Sebastian Bergmann da0e29e92f Show the name of the abstract method in the error. 2002-11-21 14:20:25 +00:00
Sebastian Bergmann 9726e74da5 Fix prototype. 2002-11-21 14:16:57 +00:00
Hartmut Holzgraefe fb5ac5d286 the apache 1.x sapi read_posts tests for SG(read_post_bytes) being
counted up, so lets make it happy although this value is not really
needed in these cases ...
2002-11-21 10:29:11 +00:00
James Cox 5d0f205df8 grr.. 2002-11-20 21:21:35 +00:00
James Cox 418f53c647 remove number.c from the win32 build..
# did this on unix... shouldn't cause a problem, but vc can get picky.
2002-11-20 21:20:10 +00:00
Andi Gutmans 32fcc74395 - CVS nuked number.* so we'll nuke it from the build:) 2002-11-20 21:16:39 +00:00
Frank M. Kromann 392ea5529f Adding generated files to ignore list 2002-11-20 20:29:21 +00:00
Andi Gutmans b0528dbe5e - Revert previous patch 2002-11-20 20:03:01 +00:00
Andi Gutmans e6b7ab9db8 - Intermediate commit which works on making bcmath thread-safe. 2002-11-20 19:48:12 +00:00
Derick Rethans 33d0e4e1fb - MFZE1: Disable leak() and crash() when not using debug mode 2002-11-20 19:44:37 +00:00
Andi Gutmans 7ce4bc76bf - Add abstract methods 2002-11-20 19:15:36 +00:00
Frank M. Kromann c77d276997 Adding path to resolv.lib 2002-11-20 18:53:14 +00:00
Frank M. Kromann a4bcf9bb60 Changing line endings to CRLF. This allows the extension to build again. 2002-11-20 18:39:39 +00:00
Andi Gutmans 227f7838d6 - Fix build (thanks Marcus)
- Implement abstract methods, syntax:
-    abstract function foo($vars);
- I don't see any reason why modifiers such as static/public need to be
- used with abstract. PHP is weakly typed and there would be no meaning to
- this anyway. People who want a strictly typed compiled language are
- looking in the wrong place.
2002-11-20 18:00:23 +00:00
Sascha Schumann a257d758a5 Add an error message to the ini handlers 2002-11-20 17:15:00 +00:00
Sascha Schumann e9ed065afc add protective checks to ini updates
Noticed by: Derick Rethans <d.rethans@jdimedia.nl>
PR: #20284
2002-11-20 16:06:29 +00:00
Ilia Alshanetsky 7908cffab4 Switched to a new parameter parsing API, which simplifies the code.
Made error reporting use php_error_docref().
Fixed a memory leak in shmop_open() when an invalid flag is specified.
Added tests for shmop() extension.
2002-11-20 15:56:56 +00:00
Sander Roobol e532b24d82 One Apache 1.3 line is enough 2002-11-20 12:53:40 +00:00
Stig Bakken 713d0e8966 * convert to english 2002-11-20 06:51:23 +00:00
Stig Bakken 0cc15ba4b9 * fix doc for config-{set,get} 2002-11-20 06:50:33 +00:00
Ilia Alshanetsky 96b562ae29 Added .cvsignore file. 2002-11-20 06:48:58 +00:00
Ilia Alshanetsky d7d2b6ef50 Switched to a new parameter parsing API, which simplifies the code a great deal.
Made error reporting use php_error_docref()
Fixed a bug in mhash_keygen_s2k() that caused non \0 terminated data to be returned.
Added tests of all mhash functions.
2002-11-20 06:48:39 +00:00
Stefan Esser 63a50e500d Adding SHA1 tests. 2002-11-19 23:25:57 +00:00
Ilia Alshanetsky 7751c4f549 Do not register IMAGETYPE_SWC if zlib, which is needed for parsing of swc
files is not available.
2002-11-19 21:24:47 +00:00
Ilia Alshanetsky 11e7f6278d Addressed the issue of persistant allocation.
Fixed bug #20470.
Fixed a memory leak in gdttf.c that would happen when an error during
processing occures.
2002-11-19 19:55:54 +00:00
George Schlossnagle 010fd97aa5 brief v1 documentation 2002-11-19 19:03:20 +00:00
George Schlossnagle 3bdfbd6d1e Props to Lukas as well 2002-11-19 18:57:38 +00:00
foobar dad428b49e Add George to the credits and add note about it being different than the real Apache SAPI 2002-11-19 18:02:36 +00:00
foobar 5df80a262b Fix the configure.. 2002-11-19 17:58:10 +00:00
Zeev Suraski 4be862b02c MFZE1 - error_reporting fix 2002-11-19 17:51:30 +00:00
Moriyoshi Koizumi 72f0be09c0 Function renamings: s/php_mbstr_/php_mb/.
# all of which are static so I don't see any problem for now.
2002-11-19 17:23:41 +00:00
Moriyoshi Koizumi 41ef851eb5 Unified the duplicated portions.
# No need to merge this patch to the branch
2002-11-19 17:02:06 +00:00
Moriyoshi Koizumi 65677445b4 Added a test to check whether mb_parse_str() works properly 2002-11-19 16:56:43 +00:00
Moriyoshi Koizumi 18089ce360 Modified the test so it wouldn't be affected by ini settings. 2002-11-19 16:55:34 +00:00
Edin Kadribasic 543c383302 Update Credits 2002-11-19 15:11:27 +00:00
Derick Rethans 8011c17fd3 - Add test for bison weirdness as some people experienced (seems fixed
now though)
2002-11-19 14:53:31 +00:00
Derick Rethans 96c054f775 - MFB: Safemode install problem 2002-11-19 14:45:13 +00:00
Marcus Boerger c41b6b2967 Allow error_prepend and error_append being empty as used in run-test.php 2002-11-19 14:11:50 +00:00
Derick Rethans 0b2d775d3d - Already moved to PECL, but forgot to remove it from php4 2002-11-19 09:51:50 +00:00
Derick Rethans a8e7b5b6a1 - Committing patch by Philip Olson <philip@cornado.com>. 2002-11-19 08:20:18 +00:00
Marcus Boerger 3ca6344e57 -rename checkdnsrr to dns_check_record, keep old name as alias
-rename getmxrr to dns_get_mx, keep old name as alias
-added dns_get_record
@Added dns_get_record() which allows to retrieve DNS information about
@a host. (Marcus, Pollita)
2002-11-19 02:34:13 +00:00
Stig Bakken bfae20f404 * allow config-get in the default layer 2002-11-19 02:18:30 +00:00
George Schlossnagle c598b3ac16 now this works (thanks Rasmus)
Note:  the correct line is --with-apache-hooks
2002-11-19 01:20:42 +00:00
Edin Kadribasic ff55850562 No need to declare functions used internally by DBA as PHPAPI. This
fixes windows build.
2002-11-19 01:06:42 +00:00
Moriyoshi Koizumi b75f2df3d4 We have to use binary mode here. 2002-11-18 21:20:45 +00:00
Moriyoshi Koizumi a9d7509036 Fixed possible leaks 2002-11-18 21:15:41 +00:00
George Schlossnagle 0ad980c667 fixed recurrent entrance to add_cgi_vars 2002-11-18 19:07:37 +00:00
Thies C. Arntzen 6aaa7bc345 use FREE_ZVAL when freeing zvals 2002-11-18 17:34:55 +00:00
Marcus Boerger f0daa5c6d9 Fix warning as discussed with Wez. 2002-11-18 17:23:21 +00:00
Sascha Schumann 58b26398de Add FAM support for LGPLed libfam.
FAM, the File Alteration Monitor, provides an API that applications can use to
be notified when specific files or directories are changed.

FAM is being used in Enlightenment, GNOME/Nautilus, and KDE.

# Yes, this will be moved to PECL once that is fully usable. Emails about
# this issue will likely be redirected to /dev/null. :-)
2002-11-18 17:06:05 +00:00
Marcus Boerger 301330ff88 -Added colordepth for png
-Added tests for width/heidth for unsigned/signed problems
2002-11-18 16:51:02 +00:00
Marcus Boerger a3d821c695 Added colordepth for png 2002-11-18 16:50:10 +00:00
Sascha Schumann 52f1135c8f add missing backslash 2002-11-18 15:55:07 +00:00
Edin Kadribasic b8d3c75a6c Nuke one more win32 linking warning. 2002-11-18 15:53:00 +00:00
Marcus Boerger 25456939b3 Fixing unsigned/signed problems (and i thought about it before...) 2002-11-18 15:49:06 +00:00
Derick Rethans e93f1c00c6 - Remove outdated GPL clause; the file was totally rewritten 2002-11-18 15:45:27 +00:00
Edin Kadribasic d40c5e2624 Really nuke win32 linking warnings. 2002-11-18 14:33:34 +00:00
Ilia Alshanetsky 6e99ecdb01 Hopefully fix win32 linker warnings. 2002-11-18 13:17:14 +00:00
Edin Kadribasic 03fc9eb415 Initial attempt to get apache_hooks api to compile on windows.
Still getting link errors with
undefined symbol: 'php_request_startup_for_hook'.
2002-11-18 12:52:57 +00:00
Wez Furlong 039d6a1668 wb -> r+b 2002-11-18 12:40:12 +00:00
Ilia Alshanetsky d9ecd30cc4 Changed memory allocation wrappers to macros, so that it is possible to see
where the memory leak is happening.
2002-11-18 12:31:39 +00:00
Edin Kadribasic f8026b7453 Updated windows build file. 2002-11-18 12:30:08 +00:00
Edin Kadribasic f876916381 Added .cvsignore file. 2002-11-18 12:29:29 +00:00
Edin Kadribasic 5b292d5348 Remove fribidi from the NEWS item about extensions available on windows
for now. This is because I'm unable to get fribidi library to compile
on windows.
2002-11-18 12:16:12 +00:00
Wez Furlong bceb56b2ba Re-enable the curlwrappers configure option.
I still don't recommend it's use unless you are hacking both curl and PHP
to make it work.
2002-11-18 12:00:21 +00:00
Wez Furlong 110fd64bbd Amend news about mbstring enabled by default 2002-11-18 11:55:11 +00:00
Wez Furlong 5b7537ecd2 Merge the temp file mode fix from the branch,
add missing Id tag.
2002-11-18 11:49:06 +00:00
Wez Furlong ca58966a0d Merge streams changes from branch. 2002-11-18 11:39:42 +00:00
Rasmus Lerdorf a94a226691 Fix a few warnings - compiles nicely now 2002-11-18 06:14:10 +00:00
George Schlossnagle 2c34ea1be4 #defined offsetof, for systems that can't find it 2002-11-18 06:09:23 +00:00
Sebastian Bergmann 51e4dbaba0 Fix ZTS build. 2002-11-18 06:04:06 +00:00
Andi Gutmans 6d8a643edb - MFZE1 2002-11-18 05:27:46 +00:00
foobar 6987855e95 Fixed bug: #20458 (--with-qtdom=shared broken) 2002-11-18 05:06:02 +00:00
foobar 43584058e9 Added error message if browscap location is not set in php.ini 2002-11-18 03:23:51 +00:00
Ilia Alshanetsky c7fa1fa99f Fixed bug #20462. 2002-11-18 03:16:13 +00:00
Ilia Alshanetsky c5107b8989 Removed duplicate php_compat.h include. 2002-11-18 02:30:27 +00:00
George Schlossnagle 824fdad6c1 initial import of all these files. This was previously the apache_hooks
branch of the apache sapi.  Now it lives on its own.  General functionality
seems to be working, though there may be a problem with some
output buffering, most likely due to the way that sapi_deactivate needs
to be mangled with here.
2002-11-18 01:01:21 +00:00
George Schlossnagle 99c7ddc3a8 added support functions for the apache_hooks SAPI 2002-11-18 00:59:23 +00:00
foobar a3e9ae20d9 Fix the test. (and indented it for easier bug spotting :) 2002-11-18 00:41:27 +00:00
Ilia Alshanetsky f14b742392 Fixed bug #20466. 2002-11-17 22:52:47 +00:00
Ilia Alshanetsky 8d00d54f2f Fixed gd 2.0.4 check 2002-11-17 21:57:43 +00:00
Sebastian Bergmann 9229918fd7 Fix warning. HAVE_MEMMOVE is already defined in config.w32.h. 2002-11-17 21:50:00 +00:00
Sebastian Bergmann b4e42dd43f Fix Win32 build. (Lots of linkage warnings remain!) 2002-11-17 21:29:16 +00:00
Ilia Alshanetsky a10e0b6d8e A better gd >=2.0.4 version check for non-bundled gd library. 2002-11-17 20:18:44 +00:00
Derick Rethans 8c86784cae - MFB 2002-11-17 19:45:10 +00:00
Ilia Alshanetsky 06d94f2169 Expat upgrade news. 2002-11-17 18:57:21 +00:00
Ilia Alshanetsky cea2419529 Upgraded the bundled expat library to 1.95.5 (latest stable, atm).
Fixed bug #20442.
2002-11-17 18:37:48 +00:00
Stanislav Malyshev 29695934ed fix the leak 2002-11-17 17:57:57 +00:00
Derick Rethans 1a5037de1a - Fix compile problems for mips pro 2002-11-17 14:25:50 +00:00
Zeev Suraski d372861f03 Unify handling of error_reporting - fix bug #16137 2002-11-17 13:26:38 +00:00
Derick Rethans c3fe54dfab - MFB: Fix memory allocation problem in bundled GD (reported by Brian Havard) 2002-11-17 13:11:46 +00:00
Marcus Boerger 24726b0c64 Conversion fix by Michael Mauch 2002-11-17 09:27:48 +00:00
Ilia Alshanetsky 3bef247fcc Fixed a problem that would cause include/require("/dir/file") to fail on
Windows.
2002-11-17 00:06:50 +00:00
Marcus Boerger 2442adabe5 Force float for the float test 2002-11-16 23:45:58 +00:00
Marcus Boerger 4f747e80f0 Show module used in test 2002-11-16 19:43:53 +00:00
Marcus Boerger 015c117e37 -Do not rely on a side effect of 32bit platforms (patch by Michael Mauch)
-remove unused sections
2002-11-16 17:28:04 +00:00
Marcus Boerger 31e1cd13e2 removed unused sections 2002-11-16 17:26:52 +00:00
Ilia Alshanetsky 47596de32f Fixed the test so it works properly on both 32 and 64 bit platforms. 2002-11-16 17:26:26 +00:00
Marcus Boerger a3157908a8 Make getimagesize more robust against corrupt files 2002-11-16 17:02:07 +00:00
Georg Richter 208a3a3717 forgot to decrement result_allocated :( 2002-11-16 16:07:54 +00:00
Sebastian Bergmann 47388f2121 Fix Win32 build. 2002-11-16 08:30:31 +00:00
Andi Gutmans ce06e7ba77 - MFZE1 2002-11-16 07:37:03 +00:00
Andi Gutmans e1725b26fa - MFZE1 2002-11-16 07:32:53 +00:00
Stig Bakken 7547238723 no longer in use 2002-11-15 23:19:41 +00:00
Marcus Boerger dbf8593b5b When --enable-dba is used then include builtin modules unless --without-xxx
is not used.
2002-11-15 21:28:42 +00:00
Ilia Alshanetsky 2306c0e9d7 Removed the md5 checks since the files may be slightly different due to
float -> int conversion inconsistencies on various architectures.
2002-11-15 18:53:07 +00:00
Maxim Maletsky 9e3788864b WS 2002-11-15 18:20:59 +00:00
Maxim Maletsky 336e559718 Tons of WS fixes all over the file 2002-11-15 17:59:19 +00:00
Ilia Alshanetsky f0e2c04582 Revert of previous patch ad requested by Andi. 2002-11-15 16:36:55 +00:00
Ilia Alshanetsky 8193641d2d With ZTS on, we need to resolve the full paths before making symlinks.
If a chdir() call occurs before the symlink operation, the symlink is
created in the current directory rather then directory we've chdired to
because in ZTS we don't actually chdir but store the new path internally.

For an example of this problem consider the ext/standard/tests/file/001.phpt
test under ZTS.
2002-11-15 16:34:16 +00:00
Marcus Boerger 7ba0d505af Use eregi is better (noticed by Jon) 2002-11-15 16:33:05 +00:00
Moriyoshi Koizumi 90317cbc5d Always use binary mode for magic files 2002-11-15 16:25:31 +00:00
Moriyoshi Koizumi 7222abda70 Include php_config.h for HAVE_MBSTRING 2002-11-15 16:13:36 +00:00
Marcus Boerger 93769053cc Use flatfile if available.
# This way we are using the internal library which we know about most.
2002-11-15 16:11:51 +00:00
Moriyoshi Koizumi 003be7fe32 Divided the overload test into two so as to handle the case mbregex is
not enabled
2002-11-15 15:59:07 +00:00
Marcus Boerger 7d03dc004e Show which handler was used in the test 2002-11-15 15:58:09 +00:00
Marcus Boerger 0f66b352e9 -Allow skip in upper letters.
-Add 'info' result to --SKIPIF-- -> see following dba commits
2002-11-15 15:57:00 +00:00
Marcus Boerger 483502fe10 Speling (found by Andi) 2002-11-15 15:35:11 +00:00
Moriyoshi Koizumi b62afe783d %s/SKIP/skip/g 2002-11-15 15:34:57 +00:00
Marcus Boerger 5841e290ac Simplify and show skip reason 2002-11-15 15:22:07 +00:00
Marcus Boerger 16af3f7d11 Update to new syntax suggestion 2002-11-15 15:19:02 +00:00
Marcus Boerger adffe9fba6 Show correct result 2002-11-15 15:17:39 +00:00
Moriyoshi Koizumi 3ecc71a099 Fixed segfault in case the specified magic file cannot be read. 2002-11-15 15:13:30 +00:00
Moriyoshi Koizumi 1391f774cf Bug fixing news 2002-11-15 15:07:24 +00:00
Moriyoshi Koizumi 46b4abc08b Removed unnecessary ?> 2002-11-15 14:53:58 +00:00
Moriyoshi Koizumi b23d2c8beb Fixed bogus SKIPIF conditions. 2002-11-15 14:49:57 +00:00
Marcus Boerger 8c598f8bff Only show the first results 2002-11-15 14:46:52 +00:00
Andi Gutmans 5c12ee2474 - MFZE1 2002-11-15 14:30:40 +00:00
Moriyoshi Koizumi f0a7db1c7e Added some skipif conditions to handle the case mbstring is enabled but mbregex is disabled. 2002-11-15 14:26:33 +00:00
Andi Gutmans 55e127a6d5 - Commit fix for bug #19566 (I think it's by Marcus :) 2002-11-15 14:25:44 +00:00
Marcus Boerger ea971db849 Show Zend version 2002-11-15 14:23:40 +00:00
Moriyoshi Koizumi 57ca42e10f Bug fixing news 2002-11-15 13:36:49 +00:00
Marcus Boerger 66ec203e70 Showing memleaks for a memleak test is a good idea 2002-11-15 11:55:57 +00:00
Marcus Boerger 4ef6a3af03 db is deprecated now 2002-11-15 11:49:58 +00:00
Marcus Boerger b030a7a140 Fix segfaults (check ext/domxml/tests/domxml002.phpt) 2002-11-15 11:06:13 +00:00
Sander Roobol 8fb395bb9e Move the build-environment stuff down or the test results up, so you
don't need to scroll down to see the failed tests.
2002-11-15 10:37:41 +00:00
Georg Richter d46bd1cd63 removed restore_connection_defaults for pconnects (discussed on php-dev@)
bug #19529 closed
bug #12513 reopened
2002-11-15 10:35:10 +00:00
foobar dadfd6e94a ws fix 2002-11-15 07:21:33 +00:00
Moriyoshi Koizumi fb20eae7fc Fixed bug #20381 2002-11-15 02:16:41 +00:00
Moriyoshi Koizumi ac209557dd Added a test case for bug #20381 2002-11-15 02:11:23 +00:00
Maxim Maletsky cd9b495663 I mean - todo typo :) 2002-11-15 02:06:11 +00:00
Maxim Maletsky 05f07d2eba todo typo 2002-11-15 02:05:06 +00:00
Moriyoshi Koizumi ee37386183 Use C comments 2002-11-15 01:45:23 +00:00
Andrei Zmievski ca332dfc96 Oops. 2002-11-15 00:32:42 +00:00
Andrei Zmievski 3e8a800a96 Fix function prototype. 2002-11-15 00:31:10 +00:00
Sascha Schumann 04e564dec5 use grep -E instead of egrep. the latter is not defined by POSIX anymore 2002-11-15 00:20:17 +00:00
Stig Bakken 40ac4a2d68 Added error codes for the PEAR_Dependency class
Changed the dependency API to have a reference to an error message
string as first arg to all check methods
2002-11-14 23:23:21 +00:00
Moriyoshi Koizumi 5ca953b10f Fixed a problem that ICONV_IMPL doesn't give a correct value in win32 build. 2002-11-14 23:07:53 +00:00
Stig Bakken bdeb45b335 Added PATH_SEPARATOR constant 2002-11-14 22:50:01 +00:00
Stig Bakken 9f39cc0626 * a little bit of internal refactoring 2002-11-14 22:41:56 +00:00
Moriyoshi Koizumi 9efefc742b Added a test for zend-multibyte extension 2002-11-14 22:38:43 +00:00
Marcus Boerger 25641a7e96 Minor test corrections 2002-11-14 21:45:01 +00:00
Marcus Boerger 37e64f38ac Test is affected by mbstring 2002-11-14 21:43:49 +00:00
Andrei Zmievski cbec84d93d MFZE1 2002-11-14 21:36:07 +00:00
Moriyoshi Koizumi e40416ebf6 Fixed possible buffer over run in php_mb_safe_strrchr_ex() 2002-11-14 21:33:36 +00:00
Maxim Maletsky 7890b6fc87 Added function OCIPasswordChange() that allows renewal of an expired Oracle password.
# Tested, but still considered experimental...
2002-11-14 21:26:57 +00:00
Andrei Zmievski 26bd73fec6 Sort the modules for info output as well. 2002-11-14 21:15:42 +00:00
Marcus Boerger dbb95f338e file() is affected by magic_quotes_runtime 2002-11-14 21:15:31 +00:00
Marcus Boerger a81fe09722 Add info: Add magic_quotes_runtime support 2002-11-14 21:11:40 +00:00
Marcus Boerger a14bc7685d Add magic_quotes_runtime support 2002-11-14 21:09:41 +00:00
Marcus Boerger 5ad332f846 Add magic_quotes_runtime which affects several tests 2002-11-14 21:02:24 +00:00
Melvyn Sopacua 8298f6f982 typo 2002-11-14 20:57:48 +00:00
Andrei Zmievski e09d62c435 Sort the modules and extensions before printing them when -m switch is used. 2002-11-14 20:32:28 +00:00
Marcus Boerger 8579756c05 Test for bug #14383 2002-11-14 20:30:53 +00:00
Marcus Boerger 6048db9005 Only set the overwrites once 2002-11-14 20:12:36 +00:00
Melvyn Sopacua 87e3b97057 Add a note about the mime-type 2002-11-14 19:44:26 +00:00
Moriyoshi Koizumi 6841184abc Fix build 2002-11-14 19:04:29 +00:00
Moriyoshi Koizumi dac0b6fc4f Moved some mbregex related portions from mbstring.c to php_mbregex.c
# No need to merge this change to PHP_4_3 branch
2002-11-14 18:54:42 +00:00
Moriyoshi Koizumi db6efcf7e5 Prevent warnings under safe mode 2002-11-14 18:38:38 +00:00
Ilia Alshanetsky eef51c3d6b Disable safe_mode as it interferes with just about every test that needs
to access the file system, set enviroment variables or execute commands.
2002-11-14 18:38:19 +00:00
Marcus Boerger 29a40a1909 Missed that 2002-11-14 17:20:50 +00:00
Ilia Alshanetsky 4e1d684027 Fixed ZTS compile warning. 2002-11-14 16:32:30 +00:00
Stefan Esser 658fd1ba8d Fixing possible remote overflow due to mbstring translation. 2002-11-14 16:30:07 +00:00
Ilia Alshanetsky 5f7de8bf5b Fixed bug #20423. 2002-11-14 16:20:23 +00:00
Marcus Boerger f986cb84f3 Fix TSRM build 2002-11-14 15:09:53 +00:00
Marcus Boerger a391c4b12b Fix warnings (Marcus & Pierre-Alain Joye) 2002-11-14 15:08:39 +00:00
Marcus Boerger 9669932516 Info about gd changes 2002-11-14 14:58:01 +00:00
Wez Furlong f921ea9f7d Add a test case for this "bug" # 20134.
I'm not sure that this test is actually useful, so I'm not adding
it to the branch.
2002-11-14 14:56:35 +00:00
Marcus Boerger da20e867f3 Info about closed bugs 2002-11-14 14:38:20 +00:00
Marcus Boerger 5ec9375760 Fix locking behaviour: On some systems read during write is permitted but
most libraries are not capable of that. GDBM is system dependant so there
we only test  that we do not deadlock.
2002-11-14 14:32:39 +00:00
Wez Furlong 4e85935386 MFB 2002-11-14 14:26:15 +00:00
Ilia Alshanetsky 8bfe7d76ea Fix bug 19689, solution suggested by dmitry@koteroff.ru. 2002-11-14 13:45:08 +00:00
Ilia Alshanetsky 6b7d77a7a0 Fixed bug #20420 and added partial urls to the test of the function. 2002-11-14 13:40:14 +00:00
Wez Furlong b01add793c Add this test to make sure that fopencookie is detected and working
correctly (or that the less efficient tmpfile casting is working).
More details in the test itself.
2002-11-14 12:20:36 +00:00
Wez Furlong 08362f90d9 Fix build for unix.
Not sure if this needs merging to the branch (haven't got that far yet today).
2002-11-14 12:06:01 +00:00
Wez Furlong 9ae3c2f7bd Commit these before Sterling renames the files again :-)
When curlstreams are enabled, registers a each supported protocol
with PHP.
"More Correctly" implement eof for curlstreams.
Still not ready for anything like primetime.
2002-11-14 11:41:24 +00:00
Derick Rethans bab4957d1c - MFB: Fixed bug #20484 (stream_get_meta_data crashes on a normal file
stream). (Derick, Wez)
2002-11-14 10:56:35 +00:00
Jon Parise 92df58dab6 @- Added an optional "step" parameter to range(). (Jon) 2002-11-14 05:46:10 +00:00
Sterling Hughes 89ea16ffaa remove C++ comments 2002-11-14 04:07:51 +00:00
James Cox ad9788d853 changing..
#also, i think the qa and web team needs updating -- i'd like to see web change to a more general infrastructure category... anyone care to volunteer? :)
2002-11-14 02:05:53 +00:00
James Cox d3663f76b5 englishify 2002-11-14 01:54:38 +00:00
Sascha Schumann 1585ad97ff Fix "make install" in vpath env 2002-11-14 01:35:20 +00:00
Sascha Schumann 46a99e9022 - Remove PHP_DISABLE_CLI
- Streamline ircg build: thttpd-dependent part moved into separate source
  file, so that it can be added to the SAPI-only object list.
2002-11-14 01:09:46 +00:00
Sascha Schumann f7c6d9fb2a upgrade files to libtool 1.4.3 shipped ones
# should be safe to upgrade these to the 1.5.x ones
2002-11-14 00:41:53 +00:00
foobar 8efbeb68a1 MFB: Fix for bug: #20412 2002-11-14 00:21:14 +00:00
Edin Kadribasic 1eddce79dd MFB (made mbstring compile on windows again). 2002-11-13 23:11:14 +00:00
Sterling Hughes 9d04acdaaa curl_multi_info_read is unimplemented... 2002-11-13 22:43:31 +00:00
Ilia Alshanetsky c7da0b117e Moved news entry about imagefilter() to proper location. 2002-11-13 22:35:16 +00:00
Sterling Hughes 537284418c add multi support and reorganize things a bit... 2002-11-13 22:25:33 +00:00
foobar ae1fcb4542 Welcome 4.4.0 2002-11-13 22:24:49 +00:00
Edin Kadribasic 7cdffea872 Really remove mbstring from the build.
# mbstring is gone completely as it does not build currently on win32
# as a separate module
2002-11-13 21:29:55 +00:00
Edin Kadribasic f15420b3e1 Allow mbstring defines to be somewhere else without warnings. 2002-11-13 21:28:16 +00:00
Ilia Alshanetsky d183eb1e31 New gd function. 2002-11-13 20:07:12 +00:00
Ilia Alshanetsky 4522738188 Added tests for imagefilter() function. 2002-11-13 20:03:59 +00:00
Ilia Alshanetsky 901980b3ab Added imagefilter() function by Pierre-Alain Joye (paj@pearfr.org). This
function allows negate, grayscale, brightness, contrast, colorize, selective blur,
Gaussian blur, edge detect, smooth, sharpen and emboss filters to be applied
on an image.
2002-11-13 20:02:58 +00:00
Stig Bakken fb179417ef * remove debug output 2002-11-13 19:49:28 +00:00
Derick Rethans 315927cc9b - Moved cybermut to PECL 2002-11-13 19:40:10 +00:00
Andrei Zmievski 0eea23a4f8 Change version to 4.4.0-dev. 2002-11-13 19:19:05 +00:00
foobar d3d7c3d486 moved this entry under correct version 2002-11-13 18:28:50 +00:00
Ilia Alshanetsky a7487bb4f8 Compile warning fix. 2002-11-13 17:17:32 +00:00
Ilia Alshanetsky 0cb9c53033 Added a skip condition for when mail() function is not avaliable. 2002-11-13 17:16:33 +00:00
Ilia Alshanetsky b0d519f730 Added a skip condition for when the encoding needed for the test is not
available or supported.
2002-11-13 16:52:48 +00:00
2270 changed files with 714 additions and 676302 deletions

No files matched your search

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

Before

Width:  |  Height:  |  Size: 1.3 KiB

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