mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Differentiate between write buffer and streams read buffer sizes.
Add options for timeout and chunk size; previously these were only set-able for socket streams.
This commit is contained in:
parent
04bb45cf4b
commit
393d57d5be
2 changed files with 15 additions and 3 deletions
|
@ -374,17 +374,24 @@ PHPAPI php_stream_dirent *_php_stream_readdir(php_stream *dirstream, php_stream_
|
|||
PHPAPI int _php_stream_set_option(php_stream *stream, int option, int value, void *ptrparam TSRMLS_DC);
|
||||
#define php_stream_set_option(stream, option, value, ptrvalue) _php_stream_set_option((stream), (option), (value), (ptrvalue) TSRMLS_CC)
|
||||
|
||||
#define php_stream_set_chunk_size(stream, size) php_stream_set_option((stream), PHP_STREAM_OPTION_SET_CHUNK_SIZE, (size), NULL TSRMLS_CC)
|
||||
|
||||
/* change the blocking mode of stream: value == 1 => blocking, value == 0 => non-blocking. */
|
||||
#define PHP_STREAM_OPTION_BLOCKING 1
|
||||
|
||||
/* change the buffering mode of stream. value is a PHP_STREAM_BUFFER_XXXX value, ptrparam is a ptr to a size_t holding
|
||||
* the required buffer size */
|
||||
#define PHP_STREAM_OPTION_BUFFER 2
|
||||
#define PHP_STREAM_OPTION_READ_BUFFER 2
|
||||
#define PHP_STREAM_OPTION_WRITE_BUFFER 3
|
||||
|
||||
#define PHP_STREAM_BUFFER_NONE 0 /* unbuffered */
|
||||
#define PHP_STREAM_BUFFER_LINE 1 /* line buffered */
|
||||
#define PHP_STREAM_BUFFER_FULL 2 /* fully buffered */
|
||||
|
||||
/* set the timeout duration for reads on the stream. ptrparam is a pointer to a struct timeval * */
|
||||
#define PHP_STREAM_OPTION_READ_TIMEOUT 4
|
||||
#define PHP_STREAM_OPTION_SET_CHUNK_SIZE 5
|
||||
|
||||
#define PHP_STREAM_OPTION_RETURN_OK 0 /* option set OK */
|
||||
#define PHP_STREAM_OPTION_RETURN_ERR -1 /* problem setting option */
|
||||
#define PHP_STREAM_OPTION_RETURN_NOTIMPL -2 /* underlying stream does not implement; streams can handle it instead */
|
||||
|
|
|
@ -799,7 +799,12 @@ PHPAPI int _php_stream_set_option(php_stream *stream, int option, int value, voi
|
|||
|
||||
if (ret == PHP_STREAM_OPTION_RETURN_NOTIMPL) {
|
||||
switch(option) {
|
||||
case PHP_STREAM_OPTION_BUFFER:
|
||||
case PHP_STREAM_OPTION_SET_CHUNK_SIZE:
|
||||
ret = stream->chunk_size;
|
||||
stream->chunk_size = value;
|
||||
return ret;
|
||||
|
||||
case PHP_STREAM_OPTION_READ_BUFFER:
|
||||
/* try to match the buffer mode as best we can */
|
||||
if (value == PHP_STREAM_BUFFER_NONE) {
|
||||
stream->flags |= PHP_STREAM_FLAG_NO_BUFFER;
|
||||
|
@ -1291,7 +1296,7 @@ static int php_stdiop_set_option(php_stream *stream, int option, int value, void
|
|||
return -1; /* not yet implemented */
|
||||
#endif
|
||||
|
||||
case PHP_STREAM_OPTION_BUFFER:
|
||||
case PHP_STREAM_OPTION_WRITE_BUFFER:
|
||||
if (ptrparam)
|
||||
size = *(size_t *)ptrparam;
|
||||
else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue