[prev in list] [next in list] [prev in thread] [next in thread]
List: pecl-cvs
Subject: [PECL-CVS] =?utf-8?q?svn:_/pecl/dio/trunk/_dio.c_tests/002.phpt_tests/003.phpt?=
From: Melanie_Rhianna_Lewis <cyberspice () php ! net>
Date: 2011-10-28 20:07:01
Message-ID: svn-cyberspice-1319832421-318535-2116900083 () svn ! php ! net
[Download RAW message or body]
cyberspice Fri, 28 Oct 2011 20:07:01 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=318535
Log:
Added dio_fdopen() and dio_dup().
dio_fdopen() returns a resource for an integer file descriptor. For example
dio_fdopen(1) will return a dio resource for STDOUT.
dio_dup() will duplicate a dio resource's underlying file descriptor returning
a new resource for the new file descriptor. For example dio_dup(dio_fdopen(1))
will return a dio resource for a duplicate of STDOUT.
Files modified:
dio.c
Files added:
tests/002.phpt
tests/003.phpt
Changed paths:
U pecl/dio/trunk/dio.c
A pecl/dio/trunk/tests/002.phpt
A pecl/dio/trunk/tests/003.phpt
Modified: pecl/dio/trunk/dio.c
===================================================================
--- pecl/dio/trunk/dio.c 2011-10-28 19:36:53 UTC (rev 318534)
+++ pecl/dio/trunk/dio.c 2011-10-28 20:07:01 UTC (rev 318535)
@@ -111,14 +111,73 @@
RETURN_FALSE;
}
+ if (!new_php_fd(&f, fd)) {
+ RETURN_FALSE;
+ }
+ ZEND_REGISTER_RESOURCE(return_value, f, le_fd);
+}
+/* }}} */
+
+#ifndef PHP_WIN32
+
+/* {{{ proto resource dio_fdopen(int fd)
+ Returns a resource for the specified file descriptor. */
+PHP_FUNCTION(dio_fdopen)
+{
+ php_fd_t *f;
+ long lfd;
+ int fd;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &lfd) == FAILURE) {
+ return;
+ }
+
+ fd = (int)lfd;
+
+ if ((fcntl(fd, F_GETFL, 0) == -1) && (errno == EBADFD)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad file descriptor %d", fd);
+ RETURN_FALSE;
+ }
+
if (!new_php_fd(&f, fd)) {
RETURN_FALSE;
}
+
ZEND_REGISTER_RESOURCE(return_value, f, le_fd);
}
/* }}} */
+
+/* {{{ proto resource dio_dup(resource fd)
+ Opens a duplicate of the specified open resource. */
+PHP_FUNCTION(dio_dup)
+{
+ zval *r_fd;
+ php_fd_t *f, *df;
+ int dfd;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &r_fd) == FAILURE) {
+ return;
+ }
+
+ ZEND_FETCH_RESOURCE(f, php_fd_t *, &r_fd, -1, le_fd_name, le_fd);
+
+ dfd = dup(f->fd);
+ if (dfd == -1) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot duplication file descriptor \
%d: %s", f->fd, strerror(errno)); + RETURN_FALSE;
+ }
+
+ if (!new_php_fd(&df, dfd)) {
+ RETURN_FALSE;
+ }
+
+ ZEND_REGISTER_RESOURCE(return_value, df, le_fd);
+}
+/* }}} */
+#endif
+
/* {{{ proto string dio_read(resource fd[, int n])
Read n bytes from fd and return them, if n is not specified, read 1k */
PHP_FUNCTION(dio_read)
@@ -178,7 +237,7 @@
res = write(f->fd, data, trunc_len ? trunc_len : data_len);
if (res == -1) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "cannot write data to file descriptor \
%d, %s", f->fd, strerror(errno)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, \
"cannot write data to file descriptor %d: %s", f->fd, strerror(errno)); }
RETURN_LONG(res);
@@ -648,6 +707,15 @@
ZEND_ARG_INFO(0, mode)
ZEND_END_ARG_INFO()
+ZEND_BEGIN_ARG_INFO_EX(dio_fdopen_args, 0, 0, 1)
+ ZEND_ARG_INFO(0, fd)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(dio_dup_args, 0, 0, 1)
+ ZEND_ARG_INFO(0, fd)
+ZEND_END_ARG_INFO()
+
+
ZEND_BEGIN_ARG_INFO_EX(dio_read_args, 0, 0, 1)
ZEND_ARG_INFO(0, fd)
ZEND_ARG_INFO(0, n)
@@ -715,6 +783,8 @@
/* Legacy functions (Deprecated - See dio_legacy.c) */
PHP_FE(dio_open, dio_open_args)
#ifndef PHP_WIN32
+ PHP_FE(dio_fdopen, dio_fdopen_args)
+ PHP_FE(dio_dup, dio_dup_args)
PHP_FE(dio_truncate, dio_truncate_args)
#endif
PHP_FE(dio_stat, dio_stat_args)
Added: pecl/dio/trunk/tests/002.phpt
===================================================================
--- pecl/dio/trunk/tests/002.phpt (rev 0)
+++ pecl/dio/trunk/tests/002.phpt 2011-10-28 20:07:01 UTC (rev 318535)
@@ -0,0 +1,18 @@
+--TEST--
+Test dio legacy fdopen
+--SKIPIF--
+<?php
+ if (!extension_loaded("dio")) print "skip";
+ if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') print "skip";
+?>
+--FILE--
+<?php
+ $f = dio_fdopen(1);
+ if ($f) {
+ echo "Legacy fdopen passed";
+ } else {
+ echo "Legacy fdopen failed";
+ }
+?>
+--EXPECT--
+Legacy fdopen passed
Added: pecl/dio/trunk/tests/003.phpt
===================================================================
--- pecl/dio/trunk/tests/003.phpt (rev 0)
+++ pecl/dio/trunk/tests/003.phpt 2011-10-28 20:07:01 UTC (rev 318535)
@@ -0,0 +1,23 @@
+--TEST--
+Test dio legacy dup
+--SKIPIF--
+<?php
+ if (!extension_loaded("dio")) print "skip";
+ if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') print "skip";
+?>
+--FILE--
+<?php
+ $f = dio_open("/dev/null",O_RDONLY);
+ if ($f) {
+ $df = dio_dup($f);
+ if ($f) {
+ echo "Legacy dup passed";
+ } else {
+ echo "Legacy dup failed";
+ }
+ } else {
+ echo "Legacy dup precondition failed";
+ }
+?>
+--EXPECT--
+Legacy dup passed
--
PECL CVS Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic