return read;
}
-static int strfilter_rot13_flush(php_stream *stream, php_stream_filter *thisfilter TSRMLS_DC)
+static int strfilter_rot13_flush(php_stream *stream, php_stream_filter *thisfilter, int closing TSRMLS_DC)
{
- return php_stream_filter_flush_next(stream, thisfilter);
+ return php_stream_filter_flush_next(stream, thisfilter, closing);
}
static int strfilter_rot13_eof(php_stream *stream, php_stream_filter *thisfilter TSRMLS_DC)
const char *buf, size_t count TSRMLS_DC);
size_t (*read)(php_stream *stream, php_stream_filter *thisfilter,
char *buf, size_t count TSRMLS_DC);
- int (*flush)(php_stream *stream, php_stream_filter *thisfilter TSRMLS_DC);
+ int (*flush)(php_stream *stream, php_stream_filter *thisfilter, int closing TSRMLS_DC);
int (*eof)(php_stream *stream, php_stream_filter *thisfilter TSRMLS_DC);
void (*dtor)(php_stream_filter *thisfilter TSRMLS_DC);
const char *label;
(thisfilter)->next ? (thisfilter)->next->fops->read((stream), (thisfilter)->next, (buf), (size) TSRMLS_CC) \
: (stream)->ops->read((stream), (buf), (size) TSRMLS_CC)
-#define php_stream_filter_flush_next(stream, thisfilter) \
- (thisfilter)->next ? (thisfilter)->next->fops->flush((stream), (thisfilter) TSRMLS_CC) \
+#define php_stream_filter_flush_next(stream, thisfilter, closing) \
+ (thisfilter)->next ? (thisfilter)->next->fops->flush((stream), (thisfilter), (closing) TSRMLS_CC) \
: (stream)->ops->flush((stream) TSRMLS_CC)
#define php_stream_filter_eof_next(stream, thisfilter) \
PHPAPI int _php_stream_putc(php_stream *stream, int c TSRMLS_DC);
#define php_stream_putc(stream, c) _php_stream_putc((stream), (c) TSRMLS_CC)
-PHPAPI int _php_stream_flush(php_stream *stream TSRMLS_DC);
-#define php_stream_flush(stream) _php_stream_flush((stream) TSRMLS_CC)
+PHPAPI int _php_stream_flush(php_stream *stream, int closing TSRMLS_DC);
+#define php_stream_flush(stream) _php_stream_flush((stream), 0 TSRMLS_CC)
PHPAPI char *_php_stream_gets(php_stream *stream, char *buf, size_t maxlen TSRMLS_DC);
#define php_stream_gets(stream, buf, maxlen) _php_stream_gets((stream), (buf), (maxlen) TSRMLS_CC)
stream->in_free++;
- php_stream_flush(stream);
+ _php_stream_flush(stream, 1 TSRMLS_CC);
if ((close_options & PHP_STREAM_FREE_RSRC_DTOR) == 0) {
/* Remove entry from the resource list */
return NULL;
}
-PHPAPI int _php_stream_flush(php_stream *stream TSRMLS_DC)
+PHPAPI int _php_stream_flush(php_stream *stream, int closing TSRMLS_DC)
{
if (stream->filterhead)
- stream->filterhead->fops->flush(stream, stream->filterhead TSRMLS_CC);
+ stream->filterhead->fops->flush(stream, stream->filterhead, closing TSRMLS_CC);
if (stream->ops->flush) {
return stream->ops->flush(stream TSRMLS_CC);
if (stream->ops->seek) {
if (stream->filterhead)
- stream->filterhead->fops->flush(stream, stream->filterhead TSRMLS_CC);
+ stream->filterhead->fops->flush(stream, stream->filterhead, 0 TSRMLS_CC);
return stream->ops->seek(stream, offset, whence TSRMLS_CC);
}