andrei Wed Jul 19 18:21:05 2006 UTC
Modified files:
/ZendEngine2 zend_API.c
Log:
Fix usage of 'return_null' option in parameter parsing.
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_API.c?r1=1.384&r2=1.385&diff_format=u
Index: ZendEngine2/zend_API.c
diff -u ZendEngine2/zend_API.c:1.384 ZendEngine2/zend_API.c:1.385
--- ZendEngine2/zend_API.c:1.384 Wed Jul 19 17:51:49 2006
+++ ZendEngine2/zend_API.c Wed Jul 19 18:21:04 2006
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_API.c,v 1.384 2006/07/19 17:51:49 andrei Exp $ */
+/* $Id: zend_API.c,v 1.385 2006/07/19 18:21:04 andrei Exp $ */
#include "zend.h"
#include "zend_execute.h"
@@ -634,14 +634,14 @@
case 'r':
{
zval **p = va_arg(*va, zval **);
- if (Z_TYPE_PP(arg) != IS_RESOURCE) {
- if (Z_TYPE_PP(arg) == IS_NULL &&
return_null) {
- *p = NULL;
- } else {
- return "resource";
- }
- } else {
+ if (return_null) {
+ *p = NULL;
+ break;
+ }
+ if (Z_TYPE_PP(arg) == IS_RESOURCE) {
*p = *arg;
+ } else {
+ return "resource";
}
}
break;
@@ -649,14 +649,14 @@
case 'a':
{
zval **p = va_arg(*va, zval **);
- if (Z_TYPE_PP(arg) != IS_ARRAY) {
- if (Z_TYPE_PP(arg) == IS_NULL &&
return_null) {
- *p = NULL;
- } else {
- return "array";
- }
- } else {
+ if (return_null) {
+ *p = NULL;
+ break;
+ }
+ if (Z_TYPE_PP(arg) == IS_ARRAY) {
*p = *arg;
+ } else {
+ return "array";
}
}
break;
@@ -664,14 +664,14 @@
case 'h':
{
HashTable **p = va_arg(*va, HashTable **);
- if (Z_TYPE_PP(arg) != IS_ARRAY) {
- if (Z_TYPE_PP(arg) == IS_NULL &&
return_null) {
- *p = NULL;
- } else {
- return "array";
- }
- } else {
+ if (return_null) {
+ *p = NULL;
+ break;
+ }
+ if (Z_TYPE_PP(arg) == IS_ARRAY) {
*p = Z_ARRVAL_PP(arg);
+ } else {
+ return "array";
}
}
break;
@@ -679,14 +679,14 @@
case 'o':
{
zval **p = va_arg(*va, zval **);
- if (Z_TYPE_PP(arg) != IS_OBJECT) {
- if (Z_TYPE_PP(arg) == IS_NULL &&
return_null) {
- *p = NULL;
- } else {
- return "object";
- }
- } else {
+ if (return_null) {
+ *p = NULL;
+ break;
+ }
+ if (Z_TYPE_PP(arg) == IS_OBJECT) {
*p = *arg;
+ } else {
+ return "object";
}
}
break;
@@ -696,15 +696,17 @@
zval **p = va_arg(*va, zval **);
zend_class_entry *ce = va_arg(*va,
zend_class_entry *);
+ if (return_null) {
+ *p = NULL;
+ break;
+ }
if (Z_TYPE_PP(arg) == IS_OBJECT &&
(!ce ||
instanceof_function(Z_OBJCE_PP(arg), ce TSRMLS_CC))) {
*p = *arg;
} else {
- if (Z_TYPE_PP(arg) == IS_NULL &&
return_null) {
- *p = NULL;
- } else if (ce) {
+ if (ce) {
*ret_type =
UG(unicode)?IS_UNICODE:IS_STRING;
- return ce->name.s;
+ return ce->name.v;
} else {
return "object";
}
@@ -717,7 +719,7 @@
zend_class_entry **lookup, **pce = va_arg(*va,
zend_class_entry **);
zend_class_entry *ce_base = *pce;
- if (return_null && Z_TYPE_PP(arg) == IS_NULL) {
+ if (return_null) {
*pce = NULL;
break;
}
@@ -728,7 +730,7 @@
*pce = *lookup;
}
if (ce_base) {
- if ((!*pce ||
!instanceof_function(*pce, ce_base TSRMLS_CC)) && !return_null) {
+ if ((!*pce ||
!instanceof_function(*pce, ce_base TSRMLS_CC))) {
char *space;
zstr class_name =
get_active_class_name(&space TSRMLS_CC);
zend_error(E_WARNING, "%v%s%v()
expects parameter %d to be a class name derived from %v, '%v' given",
@@ -756,12 +758,14 @@
zend_fcall_info *fci = va_arg(*va,
zend_fcall_info *);
zend_fcall_info_cache *fcc = va_arg(*va,
zend_fcall_info_cache *);
- if (zend_fcall_info_init(*arg, fci, fcc
TSRMLS_CC) == SUCCESS) {
- break;
- } else if (return_null) {
+ if (return_null) {
fci->size = 0;
fcc->initialized = 0;
break;
+ }
+
+ if (zend_fcall_info_init(*arg, fci, fcc
TSRMLS_CC) == SUCCESS) {
+ break;
} else {
return "valid callback";
}
@@ -770,23 +774,25 @@
case 'z':
{
zval **p = va_arg(*va, zval **);
- if (Z_TYPE_PP(arg) == IS_NULL && return_null) {
+ if (return_null) {
*p = NULL;
} else {
*p = *arg;
}
}
break;
+
case 'Z':
{
zval ***p = va_arg(*va, zval ***);
- if (Z_TYPE_PP(arg) == IS_NULL && return_null) {
+ if (return_null) {
*p = NULL;
} else {
*p = arg;
}
}
break;
+
default:
return "unknown";
}
--
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
|