]> granicus.if.org Git - php/commitdiff
Add a generic meta data api for streams.
authorWez Furlong <wez@php.net>
Thu, 27 Feb 2003 19:10:24 +0000 (19:10 +0000)
committerWez Furlong <wez@php.net>
Thu, 27 Feb 2003 19:10:24 +0000 (19:10 +0000)
ext/standard/file.c
main/php_streams.h
main/streams/xp_socket.c

index 18a4bb6480188676170d44189a77399390fa5f28..cfbc622526aaff8dea6ccaa525cea41eca564152 100644 (file)
@@ -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
 
 }
 /* }}} */
index 008bcdb1a4af94e69f99589cda7610245592d727..e449dc38d8ba94856b7aefe478212d08a936cc22 100755 (executable)
@@ -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 */
index 802811d6ee4cf992ce5a308ec132b805fc0e5f7a..34d617b8ce407a3403610ad2e78fba90354ac2fe 100644 (file)
@@ -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;