ID:               32797
 User updated by:  JClawson at tamu dot edu
 Reported By:      JClawson at tamu dot edu
-Status:           Feedback
+Status:           Open
 Bug Type:         Compile Failure
 Operating System: * (with GCC 4 only)
 PHP Version:      5.0.4
 New Comment:

Hmmm... I thought free was supposed to ignore the null pointer.  At
least that was my understanding:

Here is a nice table:
http://developer.apple.com/qa/qa2001/qa1259.html

I guess its better to be safe than sorry.


Previous Comments:
------------------------------------------------------------------------

[2005-04-22 07:24:46] [EMAIL PROTECTED]

1) Relying on free() to ignore NULL pointers is not portable: we do
have to support other compilers beside GCC 4

2) Using cast expressions as lvalues has always been supported in C,
but apparently GCC 4 suddenly doesn't support it anymore. In this
particular case, however, we might change the macro so it only does the
cast for the argument to free() , and only for compilers that require
it, i.e. compilers/libc's that define free like free(char*)


------------------------------------------------------------------------

[2005-04-22 04:44:12] [EMAIL PROTECTED]

Please lose the attitude; we don't have time for that.
As for PHP; you appear to have the knowledge--submit a working patch
that doesn't break the code.

------------------------------------------------------------------------

[2005-04-22 04:10:00] JClawson at tamu dot edu

Oh... Everyone will not be using GCC 3 forever.  Don't you think it
would be prudent to correct obvious errors now?

After all if you have the following code:

if((char*)root->name)
{
   free((char*)root->name);
   (char*)root->name = 0;

}

why would you assign a pointer to 0?

And for whatever reason... why the stupid if statement????
Why not just simplify everything with:

free((char*)root->name);

Bam... correct C code.  If root->name is NULL thats ok... because free
can take NULL as a paramater!

You don't free somthing and then try to assign an integer to it...
seriously.

------------------------------------------------------------------------

[2005-04-22 03:59:04] JClawson at tamu dot edu

Sorry... the code I posted should be this

if (root->name) {
             free((char *)root->name);
             root->name = NULL;
      }

------------------------------------------------------------------------

[2005-04-22 00:10:24] [EMAIL PROTECTED]

Works fine with GCC 3.


------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/32797

-- 
Edit this bug report at http://bugs.php.net/?id=32797&edit=1

Reply via email to