Portability fix for old SunOS releases: realloc(NULL, ...)
authorTom Lane
Sun, 29 Nov 1998 01:53:54 +0000 (01:53 +0000)
committerTom Lane
Sun, 29 Nov 1998 01:53:54 +0000 (01:53 +0000)
doesn't work there.

src/interfaces/libpq/fe-exec.c

index e6742a4769f6575972564fb446e403deae0290b1..4e9b1530d37b8985fbf5de42a5c6b3d6b7876c9f 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.70 1998/11/18 00:47:28 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.71 1998/11/29 01:53:54 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -343,17 +343,23 @@ addTuple(PGresult *res, PGresAttValue *tup)
         *
         * We can use realloc because shallow copying of the structure is
         * okay.  Note that the first time through, res->tuples is NULL.
-        * realloc is supposed to do the right thing in that case. Also,
-        * on failure realloc is supposed to return NULL without damaging
+        * While ANSI says that realloc() should act like malloc() in that
+        * case, some old C libraries (like SunOS 4.1.x) coredump instead.
+        * On failure realloc is supposed to return NULL without damaging
         * the existing allocation.
         * Note that the positions beyond res->ntups are garbage, not
         * necessarily NULL.
         */
        int newSize = (res->tupArrSize > 0) ? res->tupArrSize * 2 : 128;
-       PGresAttValue ** newTuples = (PGresAttValue **)
-           realloc(res->tuples, newSize * sizeof(PGresAttValue *));
+       PGresAttValue ** newTuples;
+       if (res->tuples == NULL)
+           newTuples = (PGresAttValue **)
+               malloc(newSize * sizeof(PGresAttValue *));
+       else
+           newTuples = (PGresAttValue **)
+               realloc(res->tuples, newSize * sizeof(PGresAttValue *));
        if (! newTuples)
-           return FALSE;       /* realloc failed */
+           return FALSE;       /* malloc or realloc failed */
        res->tupArrSize = newSize;
        res->tuples = newTuples;
    }