On Sat, 16 Nov 2002, Wez Furlong wrote:
> wez Sat Nov 16 06:39:36 2002 EDT
>
> Modified files: (Branch: PHP_4_3)
> /php4/main php_streams.h streams.c
> Log:
> Make include/require of user-streams work on systems without fopencookie.
You can't want this in the HEAD branch?
Derick
>
>
> Index: php4/main/php_streams.h
> diff -u php4/main/php_streams.h:1.61 php4/main/php_streams.h:1.61.2.1
> --- php4/main/php_streams.h:1.61 Tue Nov 5 19:17:44 2002
> +++ php4/main/php_streams.h Sat Nov 16 06:39:36 2002
> @@ -456,7 +456,7 @@
> /* cast as a socketd */
> #define PHP_STREAM_AS_SOCKETD 2
>
> -/* try really, really hard to make sure the cast happens (socketpair) */
> +/* try really, really hard to make sure the cast happens (avoid using this flag if
>possible) */
> #define PHP_STREAM_CAST_TRY_HARD 0x80000000
> #define PHP_STREAM_CAST_RELEASE 0x40000000 /* stream becomes
>invalid on success */
> #define PHP_STREAM_CAST_INTERNAL 0x20000000 /* stream cast for internal
>use */
> @@ -528,6 +528,7 @@
> #define PHP_STREAM_CRITICAL 3 /* an error occurred; origstream is in an
>unknown state; you should close origstream */
> #define PHP_STREAM_NO_PREFERENCE 0
> #define PHP_STREAM_PREFER_STDIO 1
> +#define PHP_STREAM_FORCE_CONVERSION 2
> /* DO NOT call this on streams that are referenced by resources! */
> PHPAPI int _php_stream_make_seekable(php_stream *origstream, php_stream
>**newstream, int flags STREAMS_DC TSRMLS_DC);
> #define php_stream_make_seekable(origstream, newstream, flags)
>_php_stream_make_seekable((origstream), (newstream), (flags) STREAMS_CC TSRMLS_CC)
> Index: php4/main/streams.c
> diff -u php4/main/streams.c:1.125.2.1 php4/main/streams.c:1.125.2.2
> --- php4/main/streams.c:1.125.2.1 Thu Nov 14 05:52:45 2002
> +++ php4/main/streams.c Sat Nov 16 06:39:36 2002
> @@ -20,7 +20,7 @@
> +----------------------------------------------------------------------+
> */
>
> -/* $Id: streams.c,v 1.125.2.1 2002/11/14 10:52:45 derick Exp $ */
> +/* $Id: streams.c,v 1.125.2.2 2002/11/16 11:39:36 wez Exp $ */
>
> #define _GNU_SOURCE
> #include "php.h"
> @@ -51,6 +51,8 @@
>
> #define STREAM_WRAPPER_PLAIN_FILES ((php_stream_wrapper*)-1)
>
> +#undef HAVE_FOPENCOOKIE
> +
> /* {{{ some macros to help track leaks */
> #if ZEND_DEBUG
> #define emalloc_rel_orig(size) \
> @@ -1826,14 +1828,40 @@
>
> }
>
> - if (stream->filterhead) {
> + if (stream->filterhead && (flags & PHP_STREAM_CAST_TRY_HARD) == 0) {
> php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot cast a filtered
>stream on this system");
> return FAILURE;
> + } else if (!stream->filterhead) {
> + if (stream->ops->cast && stream->ops->cast(stream, castas, ret
>TSRMLS_CC) == SUCCESS) {
> + goto exit_success;
> + }
> }
> -
> - if (stream->ops->cast && stream->ops->cast(stream, castas, ret TSRMLS_CC) ==
>SUCCESS)
> - goto exit_success;
>
> + if ((flags & PHP_STREAM_CAST_TRY_HARD) && castas == PHP_STREAM_AS_STDIO) {
> + php_stream *newstream;
> +
> + newstream = php_stream_fopen_tmpfile();
> + if (newstream) {
> + size_t copied = php_stream_copy_to_stream(stream, newstream,
>PHP_STREAM_COPY_ALL);
> +
> + if (copied == 0) {
> + php_stream_close(newstream);
> + } else {
> + int retcode = php_stream_cast(newstream, castas |
>flags, ret, show_err TSRMLS_CC);
> +
> + if (retcode == SUCCESS)
> + rewind((FILE*)*ret);
> +
> + /* do some specialized cleanup */
> + if (flags & PHP_STREAM_CAST_RELEASE) {
> + php_stream_free(stream,
>PHP_STREAM_FREE_PRESERVE_HANDLE | PHP_STREAM_FREE_CLOSE);
> + }
> +
> + return retcode;
> + }
> + }
> + }
> +
> if (show_err) {
> /* these names depend on the values of the PHP_STREAM_AS_XXX defines
>in php_streams.h */
> static const char *cast_names[3] = {
> @@ -2290,7 +2318,7 @@
>
> *newstream = NULL;
>
> - if (origstream->ops->seek != NULL) {
> + if ((flags & PHP_STREAM_FORCE_CONVERSION == 0) && origstream->ops->seek !=
>NULL) {
> *newstream = origstream;
> return PHP_STREAM_UNCHANGED;
> }
>
>
>
> --
> PHP CVS Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
--
---------------------------------------------------------------------------
Derick Rethans http://derickrethans.nl/
JDI Media Solutions
--------------[ if you hold a unix shell to your ear, do you hear the c? ]-
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php