Re: SQLPutData() with a size of zero

"James K. Lowden" <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <[email protected]>
On Mon, 11 Mar 2013 16:36:52 +0100
Sebastien FLAESCH <[email protected]> wrote:

>                          p = (TDS_CHAR *) malloc(len);
>                  }
>                  if (!p) {
>                          odbc_errs_add(&stmt->errs, "HY001",
> NULL); /* Memory allocation error */ return SQL_ERROR;
>                  }
> 
> 
> and here malloc(0) returns zero (AIX 6.1)...

http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.basetechref/doc/basetrf1/malloc.htm#malloc

http://pubs.opengroup.org/onlinepubs/009695399/functions/malloc.html

Huh.  Learn something new every day.  I thought malloc could return
NULL only for failure.  But the standard says, 

	"If size is 0, either a null pointer or a unique pointer that
can be successfully passed to free() shall be returned. "

It looks like you want _LINUX_SOURCE_COMPAT.  Either that, or change
the test to 

	if( len && !p )

While you're at it, you can remove the casts to to malloc.  We got rid
of them once, but they keep regenerating.  

Thanks for pointing this out, no pun intended.  

--jkl
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.