From 67531c42bd247540343716ea794edd5a5e1ccaff Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sun, 29 Nov 1998 01:53:54 +0000
Subject: [PATCH] Portability fix for old SunOS releases: realloc(NULL, ...)
 doesn't work there.

---
 src/interfaces/libpq/fe-exec.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index e6742a4769f..4e9b1530d37 100644
--- a/src/interfaces/libpq/fe-exec.c
+++ b/src/interfaces/libpq/fe-exec.c
@@ -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;
 	}
-- 
GitLab