cvs: php-gtk /main php_gtk_util.c
| From: | Andrei Zmievski | Date: | Mon, 24 Apr 2006 02:10:40 +0000 |
| Subject: | cvs: php-gtk /main php_gtk_util.c | ||
| Groups: | php.gtk.cvs | ||
| Request: | Send a blank email to php-gtk-cvs+get-2256@lists.php.net to get a copy of this message | ||
andrei Mon Apr 24 02:10:40 2006 UTC
Modified files:
/php-gtk/main php_gtk_util.c
Log:
Allow passing PHP NULL for objects which will result in C NULL.
http://cvs.php.net/viewcvs.cgi/php-gtk/main/php_gtk_util.c?r1=1.53&r2=1.54&diff_format=u
Index: php-gtk/main/php_gtk_util.c
diff -u php-gtk/main/php_gtk_util.c:1.53 php-gtk/main/php_gtk_util.c:1.54
--- php-gtk/main/php_gtk_util.c:1.53 Fri Mar 31 18:10:22 2006
+++ php-gtk/main/php_gtk_util.c Mon Apr 24 02:10:39 2006
@@ -18,7 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-/* $Id: php_gtk_util.c,v 1.53 2006/03/31 18:10:22 andrei Exp $ */
+/* $Id: php_gtk_util.c,v 1.54 2006/04/24 02:10:39 andrei Exp $ */
#include "php_gtk.h"
@@ -61,6 +61,16 @@
{
char *spec_walk = *spec;
char c = *spec_walk++;
+ int return_null = 0;
+
+ while (*spec_walk == '/' || *spec_walk == '!') {
+ if (*spec_walk == '/') {
+ SEPARATE_ZVAL_IF_NOT_REF(arg);
+ } else if (*spec_walk == '!' && Z_TYPE_PP(arg) == IS_NULL) {
+ return_null = 1;
+ }
+ spec_walk++;
+ }
switch (c) {
@@ -299,14 +309,14 @@
{
zval **p = va_arg(*va, zval **);
zend_class_entry *ce = va_arg(*va, zend_class_entry *);
- if (Z_TYPE_PP(arg) != IS_OBJECT || !instanceof_function(Z_OBJCE_PP(arg), ce TSRMLS_CC))
- return ce->name;
- else {
- if (*spec_walk == '/') {
- SEPARATE_ZVAL(arg);
- spec_walk++;
- }
+ if (Z_TYPE_PP(arg) == IS_OBJECT && (!ce || instanceof_function(Z_OBJCE_PP(arg), ce
TSRMLS_CC))) {
*p = *arg;
+ } else {
+ if (return_null) {
+ *p = NULL;
+ } else {
+ return ce ? ce->name : "object";
+ }
}
}
break;
@@ -319,10 +329,6 @@
sprintf(buf, "%s or null", ce->name);
return buf;
} else {
- if (*spec_walk == '/') {
- SEPARATE_ZVAL(arg);
- spec_walk++;
- }
*p = *arg;
}
}
@@ -340,10 +346,6 @@
ret_zval:
{
zval **p = va_arg(*va, zval **);
- if (*spec_walk == '/') {
- SEPARATE_ZVAL(arg);
- spec_walk++;
- }
*p = *arg;
}
break;
@@ -408,6 +410,7 @@
case '#':
case '/':
case '^':
+ case '!':
/* Pass */
break;