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