|
7 | 7 | *
|
8 | 8 | *
|
9 | 9 | * IDENTIFICATION
|
10 |
| - * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.70 1998/11/18 00:47:28 tgl Exp $ |
| 10 | + * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.71 1998/11/29 01:53:54 tgl Exp $ |
11 | 11 | *
|
12 | 12 | *-------------------------------------------------------------------------
|
13 | 13 | */
|
@@ -343,17 +343,23 @@ addTuple(PGresult *res, PGresAttValue *tup)
|
343 | 343 | *
|
344 | 344 | * We can use realloc because shallow copying of the structure is
|
345 | 345 | * okay. Note that the first time through, res->tuples is NULL.
|
346 |
| - * realloc is supposed to do the right thing in that case. Also, |
347 |
| - * on failure realloc is supposed to return NULL without damaging |
| 346 | + * While ANSI says that realloc() should act like malloc() in that |
| 347 | + * case, some old C libraries (like SunOS 4.1.x) coredump instead. |
| 348 | + * On failure realloc is supposed to return NULL without damaging |
348 | 349 | * the existing allocation.
|
349 | 350 | * Note that the positions beyond res->ntups are garbage, not
|
350 | 351 | * necessarily NULL.
|
351 | 352 | */
|
352 | 353 | intnewSize= (res->tupArrSize>0) ?res->tupArrSize*2 :128;
|
353 |
| -PGresAttValue**newTuples= (PGresAttValue**) |
354 |
| -realloc(res->tuples,newSize*sizeof(PGresAttValue*)); |
| 354 | +PGresAttValue**newTuples; |
| 355 | +if (res->tuples==NULL) |
| 356 | +newTuples= (PGresAttValue**) |
| 357 | +malloc(newSize*sizeof(PGresAttValue*)); |
| 358 | +else |
| 359 | +newTuples= (PGresAttValue**) |
| 360 | +realloc(res->tuples,newSize*sizeof(PGresAttValue*)); |
355 | 361 | if (!newTuples)
|
356 |
| -return FALSE;/* realloc failed */ |
| 362 | +return FALSE;/*malloc orrealloc failed */ |
357 | 363 | res->tupArrSize=newSize;
|
358 | 364 | res->tuples=newTuples;
|
359 | 365 | }
|
|