As suggested by Bruce Mojiman I'm working on 
substitute some strdup not checked with xstrdup.

I seen that in the backend source tree there is no
xstrdup ( there is one in bin/psql tree) , 
I wrote it and inserted temporarelly in 
backend/utils/mmgr/aset.c

I don't know exactly how work the error report 
mechanism sso before to submit a wrong implementation
this was what I wrote:

char *xstrdup(const char *string)
{
    char * ret_value;

    if ( !string ) {
        elog(ERROR, "xstrdup called with a NULL pointer");
    }

    ret_value = strdup( string );

    if ( !ret_value ) {
        ereport(FATAL,
                                (errcode(ERRCODE_OUT_OF_MEMORY),
                                 errmsg("strdup out of memory")));
    }

    return ret_value;
}

if this implementation is ok where is the best place ?

Regards
Gaetano Mendola




Tue, 16 Sep 2003 16:49:03 +0200
"Mendola Gaetano" <mendola@bigfoot.com>
best place for xstrdup
"Mendola Gaetano" <mendola@bigfoot.com> writes:
>     if ( !ret_value ) {
>         ereport(FATAL,
>                                 (errcode(ERRCODE_OUT_OF_MEMORY),
>                                  errmsg("strdup out of memory")));
>     }

Should be ERROR not FATAL (the places that are insisting on FATAL are
special cases that won't be able to use this code).  Also the text
should just be "out of memory".

Per previous discussion, I don't believe in the test for null input,
either ...

It might be worth creating an xmalloc as well, since I think there
are some unchecked malloc's in some places.

As for where to put it, mcxt.c may be the best place.  aset.c does
not contain any routines that are supposed to be globally known.

			regards, tom lane

Tue, 16 Sep 2003 11:08:28 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: best place for xstrdup 
"Tom Lane" <tgl@sss.pgh.pa.us> wrote:
> "Mendola Gaetano" <mendola@bigfoot.com> writes:
> >     if ( !ret_value ) {
> >         ereport(FATAL,
> >                                 (errcode(ERRCODE_OUT_OF_MEMORY),
> >                                  errmsg("strdup out of memory")));
> >     }
> 
> Should be ERROR not FATAL (the places that are insisting on FATAL are
> special cases that won't be able to use this code).  Also the text
> should just be "out of memory".

Ok.

> Per previous discussion, I don't believe in the test for null input,
> either ...

Ok ok, I just tried :-)
 
> It might be worth creating an xmalloc as well, since I think there
> are some unchecked malloc's in some places.

I'll see

> As for where to put it, mcxt.c may be the best place.  aset.c does
> not contain any routines that are supposed to be globally known.

Ok


Regards
Gaetano Mendola



Tue, 16 Sep 2003 17:19:30 +0200
"Mendola Gaetano" <mendola@bigfoot.com>
Re: best place for xstrdup