]> granicus.if.org Git - php/commitdiff
MFH: Add stream_supports_lock() function (Benjamin Schulz)
authorJohannes Schlüter <johannes@php.net>
Tue, 20 Nov 2007 22:17:01 +0000 (22:17 +0000)
committerJohannes Schlüter <johannes@php.net>
Tue, 20 Nov 2007 22:17:01 +0000 (22:17 +0000)
NEWS
ext/standard/basic_functions.c
ext/standard/streamsfuncs.c
ext/standard/streamsfuncs.h
ext/standard/tests/file/stream_supports_lock.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index be25ce2d9975fa7dc9009cf46762ea60f556e4e7..ec7285a9061e38ea0ef984496366234f42db08d6 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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,
index 93057d9e098610336424320b5c4c7584ef1a64f6..09db3e3566b040790605e23114c03abf85c3b985 100644 (file)
@@ -2318,6 +2318,11 @@ ZEND_BEGIN_ARG_INFO(arginfo_stream_is_local, 0)
        ZEND_ARG_INFO(0, stream)
 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) */
@@ -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)
index 456e6579a8eb3ebbd0e73dbb732c42fe310b188d..6fd18012c91ae0110b4884cdb4693bbe7d2b3750 100644 (file)
@@ -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
index 16b4a7eca8daf2f4964febc9ffe53839b3042279..4c85ae0772effdf3bee198388503070b6805b346 100644 (file)
@@ -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 (file)
index 0000000..8b19903
--- /dev/null
@@ -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