wez Sun Mar 7 17:05:22 2004 EDT
Modified files:
/php-src/main/streams userspace.c
Log:
Connect feof() call to user-space stream feof() method.
Fixes Bug #27417 and #27508
http://cvs.php.net/diff.php/php-src/main/streams/userspace.c?r1=1.20&r2=1.21&ty=u
Index: php-src/main/streams/userspace.c
diff -u php-src/main/streams/userspace.c:1.20 php-src/main/streams/userspace.c:1.21
--- php-src/main/streams/userspace.c:1.20 Mon Jan 26 22:20:35 2004
+++ php-src/main/streams/userspace.c Sun Mar 7 17:05:21 2004
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: userspace.c,v 1.20 2004/01/27 03:20:35 iliaa Exp $ */
+/* $Id: userspace.c,v 1.21 2004/03/07 22:05:21 wez Exp $ */
#include "php.h"
#include "php_globals.h"
@@ -418,9 +418,7 @@
rsrc_id = ZEND_REGISTER_RESOURCE(NULL, uwrap, le_protocols);
if (zend_hash_find(EG(class_table), uwrap->classname, classname_len + 1,
(void**)&uwrap->ce) == SUCCESS) {
-#ifdef ZEND_ENGINE_2
uwrap->ce = *(zend_class_entry**)uwrap->ce;
-#endif
if (php_register_url_stream_wrapper(protocol, &uwrap->wrapper
TSRMLS_CC) == SUCCESS) {
RETURN_TRUE;
}
@@ -767,16 +765,29 @@
int call_result;
php_userstream_data_t *us = (php_userstream_data_t *)stream->abstract;
int ret = -1;
- zval *zvalue;
+ zval *zvalue = NULL;
zval **args[1];
- MAKE_STD_ZVAL(zvalue);
- ZVAL_LONG(zvalue, value);
- args[0] = &zvalue;
-
switch (option) {
+ case PHP_STREAM_OPTION_CHECK_LIVENESS:
+ ZVAL_STRINGL(&func_name, USERSTREAM_EOF, sizeof(USERSTREAM_EOF)-1, 0);
+ call_result = call_user_function_ex(NULL, &us->object, &func_name,
&retval, 0, NULL, 0, NULL TSRMLS_CC);
+ if (call_result == SUCCESS && retval != NULL && Z_TYPE_P(retval) ==
IS_BOOL) {
+ ret = Z_LVAL_P(retval) ? PHP_STREAM_OPTION_RETURN_OK :
PHP_STREAM_OPTION_RETURN_ERR;
+ } else {
+ ret = PHP_STREAM_OPTION_RETURN_ERR;
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
+ "%s::" USERSTREAM_EOF " is not implemented!
Assuming EOF",
+ us->wrapper->classname);
+ }
+ break;
+
case PHP_STREAM_OPTION_LOCKING:
- // TODO wouldblock
+ MAKE_STD_ZVAL(zvalue);
+ ZVAL_LONG(zvalue, value);
+ args[0] = &zvalue;
+
+ /* TODO wouldblock */
ZVAL_STRINGL(&func_name, USERSTREAM_LOCK, sizeof(USERSTREAM_LOCK)-1,
0);
call_result = call_user_function_ex(NULL,
@@ -789,21 +800,26 @@
ret = !Z_LVAL_P(retval);
} else if (call_result == FAILURE) {
if (value == 0) {
- ret = 0; // lock support test (TODO: more check)
+ /* lock support test (TODO: more check) */
+ ret = 0;
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s::"
USERSTREAM_LOCK " is not implemented!",
us->wrapper->classname);
}
}
- if (retval)
- zval_ptr_dtor(&retval);
-
break;
}
/* clean up */
- zval_ptr_dtor(&zvalue);
+ if (retval) {
+ zval_ptr_dtor(&retval);
+ }
+
+
+ if (zvalue) {
+ zval_ptr_dtor(&zvalue);
+ }
return ret;
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php