diff options
author | Johannes Schlüter <johannes@php.net> | 2007-11-20 22:17:01 +0000 |
---|---|---|
committer | Johannes Schlüter <johannes@php.net> | 2007-11-20 22:17:01 +0000 |
commit | cbf466a9530d7c2ff0a522c0c17c9d826824b1f9 (patch) | |
tree | 871b1db24e328db759e11007b6a4e664c5fbf9bd | |
parent | b15f2feda8393902ded0e5b7f077431a9a0a5b35 (diff) | |
download | php-git-cbf466a9530d7c2ff0a522c0c17c9d826824b1f9.tar.gz |
MFH: Add stream_supports_lock() function (Benjamin Schulz)
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | ext/standard/basic_functions.c | 6 | ||||
-rw-r--r-- | ext/standard/streamsfuncs.c | 20 | ||||
-rw-r--r-- | ext/standard/streamsfuncs.h | 1 | ||||
-rw-r--r-- | ext/standard/tests/file/stream_supports_lock.phpt | 44 |
5 files changed, 72 insertions, 0 deletions
@@ -1,6 +1,7 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 20??, PHP 5.3.0 +- Added stream_supports_lock() function (Benjamin Schulz) - Added msg_queue_exists() function (Benjamin Schulz) - Added 3 Firebird specific attributes that can be set via PDO::setAttribute() to control formatting of date/timestamp columns: PDO::FB_ATTR_DATE_FORMAT, diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 93057d9e09..09db3e3566 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -2319,6 +2319,11 @@ ZEND_BEGIN_ARG_INFO(arginfo_stream_is_local, 0) ZEND_END_ARG_INFO() static +ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_supports_lock, 0, 0, 1) + ZEND_ARG_INFO(0, stream) +ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO_EX(arginfo_stream_select, 0, 0, 4) ZEND_ARG_INFO(1, read_streams) /* ARRAY_INFO(1, read_streams, 1) */ ZEND_ARG_INFO(1, write_streams) /* ARRAY_INFO(1, write_streams, 1) */ @@ -3493,6 +3498,7 @@ const zend_function_entry basic_functions[] = { /* {{{ */ #endif PHP_FE(stream_copy_to_stream, arginfo_stream_copy_to_stream) PHP_FE(stream_get_contents, arginfo_stream_get_contents) + PHP_FE(stream_supports_lock, arginfo_stream_supports_lock) PHP_FE(fgetcsv, arginfo_fgetcsv) PHP_FE(fputcsv, arginfo_fputcsv) PHP_FE(flock, arginfo_flock) diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index 456e6579a8..6fd18012c9 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -1375,6 +1375,26 @@ PHP_FUNCTION(stream_is_local) } /* }}} */ +/* {{{ proto bool stream_supports_lock(resource stream) + Tells wether the stream supports locking through flock(). */ +PHP_FUNCTION(stream_supports_lock) +{ + php_stream *stream; + zval *zsrc; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zsrc) == FAILURE) { + RETURN_FALSE; + } + + php_stream_from_zval(stream, &zsrc); + + if (!php_stream_supports_lock(stream)) { + RETURN_FALSE; + } + + RETURN_TRUE; +} + #ifdef HAVE_SHUTDOWN /* {{{ proto int stream_socket_shutdown(resource stream, int how) causes all or part of a full-duplex connection on the socket associated diff --git a/ext/standard/streamsfuncs.h b/ext/standard/streamsfuncs.h index 16b4a7eca8..4c85ae0772 100644 --- a/ext/standard/streamsfuncs.h +++ b/ext/standard/streamsfuncs.h @@ -56,6 +56,7 @@ PHP_FUNCTION(stream_socket_enable_crypto); PHP_FUNCTION(stream_socket_shutdown); PHP_FUNCTION(stream_socket_pair); PHP_FUNCTION(stream_is_local); +PHP_FUNCTION(stream_supports_lock); /* * Local variables: diff --git a/ext/standard/tests/file/stream_supports_lock.phpt b/ext/standard/tests/file/stream_supports_lock.phpt new file mode 100644 index 0000000000..8b199032de --- /dev/null +++ b/ext/standard/tests/file/stream_supports_lock.phpt @@ -0,0 +1,44 @@ +--TEST-- +stream_supports_lock +--FILE-- +<?php +$fp = fopen(__FILE__, "r"); +var_dump($fp); +var_dump(stream_supports_lock($fp)); +fclose($fp); + +$fp = fopen("file://" . __FILE__, "r"); +var_dump($fp); +var_dump(stream_supports_lock($fp)); +fclose($fp); + +$fp = fopen("php://memory", "r"); +var_dump($fp); +var_dump(stream_supports_lock($fp)); +fclose($fp); + +$fp = fopen('data://text/plain,foobar', 'r'); +var_dump($fp); +var_dump(stream_supports_lock($fp)); +fclose($fp); + +$sock = stream_context_create(); +var_dump($sock); +var_dump(stream_supports_lock($sock)); + +echo "Done\n"; +?> +--EXPECTF-- +resource(%d) of type (stream) +bool(true) +resource(%d) of type (stream) +bool(true) +resource(%d) of type (stream) +bool(false) +resource(%d) of type (stream) +bool(false) +resource(%d) of type (stream-context) + +Warning: stream_supports_lock(): supplied resource is not a valid stream resource in %s on line %d +bool(false) +Done |