ZSTR and NULL problems again

php.internals

Andrei Zmievski

20 years ago
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

Dmitry Stogov

20 years ago
What was the problem with NULL_ZSTR? Dmitry.

Nuno Lopes

20 years ago
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 -----

Wez Furlong

20 years ago
I think ZSTR(buf) should not be present in the macro: #define php_stream_get_line(stream, buf, maxlen, retlen) _php_stream_get_line((stream), IS_STRING, (buf), (maxlen), 0, (retlen) TSRMLS_CC) Let the caller apply ZSTR() to the argument manually, if that is required. --Wez. On 4/24/06, Andrei Zmievski <andrei@gravitonic.com> wrote:

Sara Golemon

20 years ago
Agreed.... Unless someone goes ahead and changes the get_line macro and places that call it, I'll do so when I get to the end of my second leg... -Sara ----- Original Message ----- From: ""Wez Furlong"" <kingwez@gmail.com> Newsgroups: php.internals To: "Andrei Zmievski" <andrei@gravitonic.com> Cc: "PHP Internals" <internals@lists.php.net>; "Dmitry Stogov" <dmitry@zend.com>; "Frank M. Kromann" <frank@kromann.info> Sent: Monday, April 24, 2006 10:46 PM Subject: Re: [PHP-DEV] ZSTR and NULL problems again I think ZSTR(buf) should not be present in the macro: #define php_stream_get_line(stream, buf, maxlen, retlen) _php_stream_get_line((stream), IS_STRING, (buf), (maxlen), 0, (retlen) TSRMLS_CC) Let the caller apply ZSTR() to the argument manually, if that is required. --Wez. On 4/24/06, Andrei Zmievski <andrei@gravitonic.com> wrote: