summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/file.c12
-rwxr-xr-xmain/php_streams.h3
-rw-r--r--main/streams/xp_socket.c6
3 files changed, 10 insertions, 11 deletions
diff --git a/ext/standard/file.c b/ext/standard/file.c
index 18a4bb6480..cfbc622526 100644
--- a/ext/standard/file.c
+++ b/ext/standard/file.c
@@ -646,22 +646,12 @@ PHP_FUNCTION(stream_get_meta_data)
#endif
add_assoc_long(return_value, "unread_bytes", stream->writepos - stream->readpos);
-
-#if 0
- if (php_stream_is(stream, PHP_STREAM_IS_SOCKET)) {
- php_netstream_data_t *sock = PHP_NETSTREAM_DATA_FROM_STREAM(stream);
- add_assoc_bool(return_value, "timed_out", sock->timeout_event);
- add_assoc_bool(return_value, "blocked", sock->is_blocked);
- add_assoc_bool(return_value, "eof", stream->eof);
- } else {
-#endif
+ if (!php_stream_populate_meta_data(stream, return_value)) {
add_assoc_bool(return_value, "timed_out", 0);
add_assoc_bool(return_value, "blocked", 1);
add_assoc_bool(return_value, "eof", php_stream_eof(stream));
-#if 0
}
-#endif
}
/* }}} */
diff --git a/main/php_streams.h b/main/php_streams.h
index 008bcdb1a4..e449dc38d8 100755
--- a/main/php_streams.h
+++ b/main/php_streams.h
@@ -349,6 +349,9 @@ PHPAPI int _php_stream_set_option(php_stream *stream, int option, int value, voi
PHPAPI int _php_stream_truncate_set_size(php_stream *stream, size_t newsize TSRMLS_DC);
#define php_stream_truncate_set_size(stream, size) _php_stream_truncate_set_size((stream), (size) TSRMLS_CC)
+#define PHP_STREAM_OPTION_META_DATA_API 11 /* ptrparam is a zval* to which to add meta data information */
+#define php_stream_populate_meta_data(stream, zv) (_php_stream_set_option((stream), PHP_STREAM_OPTION_META_DATA_API, 0, zv TSRMLS_CC) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0)
+
#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 */
diff --git a/main/streams/xp_socket.c b/main/streams/xp_socket.c
index 802811d6ee..34d617b8ce 100644
--- a/main/streams/xp_socket.c
+++ b/main/streams/xp_socket.c
@@ -202,6 +202,12 @@ static int php_sockop_set_option(php_stream *stream, int option, int value, void
sock->timeout = *(struct timeval*)ptrparam;
sock->timeout_event = 0;
return PHP_STREAM_OPTION_RETURN_OK;
+
+ case PHP_STREAM_OPTION_META_DATA_API:
+ add_assoc_bool((zval *)ptrparam, "timed_out", sock->timeout_event);
+ add_assoc_bool((zval *)ptrparam, "blocked", sock->is_blocked);
+ add_assoc_bool((zval *)ptrparam, "eof", stream->eof);
+ return PHP_STREAM_OPTION_RETURN_OK;
case PHP_STREAM_OPTION_XPORT_API:
xparam = (php_stream_xport_param *)ptrparam;