Re: RE: ZSTR and NULL problems again
| From: | Nuno Lopes | Date: | Tue, 25 Apr 2006 10:54:48 +0000 |
| Subject: | Re: RE: ZSTR and NULL problems again | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-22953@lists.php.net to get a copy of this message | ||
The problem was the macro expansion (problematic on non-gcc builds):
ZSTR(NULL_ZSTR) --> ZSTR(ZSTR((void*)NULL))
But I agree with Wez and I thing that the ZSTR() should be removed from the php_stream_get_line() macro.
BTW, I though it wasn't possible to build PHP with gcc 2.95 anymore. At least on Solaris I can't build PHP with gcc 2.95 for a long time ago.
Nuno
----- Original Message -----
What was the problem with NULL_ZSTR? Dmitry.-----Original Message----- From: Andrei Zmievski [mailto:andrei@gravitonic.com] Sent: Tuesday, April 25, 2006 1:35 AM To: PHP Internals Cc: Dmitry Stogov; Frank M. Kromann Subject: ZSTR and NULL problems again After Frank's latest changes, HEAD doesn't compile under gcc 2.95 anymore: /homes/andrei/dev/php-src/ext/spl/spl_directory.c:1359: cast to union type from type not present in union That line is:buf = php_stream_get_line(intern->u.file.stream, NULL, 0,&line_len); Definition of php_stream_get_line(): #define php_stream_get_line(stream, buf, maxlen, retlen) _php_stream_get_line((stream), IS_STRING, ZSTR(buf), (maxlen), 0, (retlen) TSRMLS_CC) And under GCC ZSTR is defined as: 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") So, do we have to pass (void*)NULL everywhere now? Or can we do this in a cross-platform way somehow? -Andrei