In zend.h, ZSTR is defined like this:
typedef union _zstr {
char *s;
UChar *u;
void *v;
} zstr;
#ifdef __GNUC__
# define ZSTR(x) ((zstr)(x))
# define NULL_ZSTR ZSTR((void*)NULL)
# define EMPTY_ZSTR ZSTR("\0\0")
#else
extern ZEND_API zstr null_zstr;
extern ZEND_API zstr empty_zstr;
static inline zstr _to_zstr(void *v) {
zstr ret;
ret.v = v;
return ret;
}
# define ZSTR(x) _to_zstr(x)
# define NULL_ZSTR null_zstr
# define EMPTY_ZSTR empty_zstr
#endif
The problem is that g++ is also __GNUC__ and I just can't get g++ to compile
a code like this:
char *c="I am not working!";
zstr z = ZSTR(c);
So I found at gcc.gnu.org that the "Cast to Union" GNU extension is just for
C not C++, here is the patch to the current CVS:
Index: Zend/zend.h
===================================================================
RCS file: /repository/ZendEngine2/zend.h,v
retrieving revision 1.316
diff -u -u -r1.316 zend.h
--- Zend/zend.h 3 Mar 2006 09:56:47 -0000 1.316
+++ Zend/zend.h 13 Mar 2006 23:29:45 -0000
@@ -246,7 +246,7 @@
void *v;
} zstr;
-#ifdef __GNUC__
+#if defined(__GNUC__) && ! defined(__GNUG__)
# define ZSTR(x) ((zstr)(x))
# define NULL_ZSTR ZSTR((void*)NULL)
# define EMPTY_ZSTR ZSTR("\0\0")
Regards,
Cristiano Duarte
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php