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