From 2eeb5eb23fa9ad1a2d636bbf2fd68e6709848d23 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Thu, 5 Jul 2012 23:36:30 -0400
Subject: [PATCH] Fix PGDATAOLD and PGDATANEW to properly set pgconfig
 location, per report from Tom.

Backpatch to 9.2.
---
 contrib/pg_upgrade/option.c | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/contrib/pg_upgrade/option.c b/contrib/pg_upgrade/option.c
index 43394a0fb4a..960fcdace72 100644
--- a/contrib/pg_upgrade/option.c
+++ b/contrib/pg_upgrade/option.c
@@ -21,7 +21,7 @@
 
 
 static void usage(void);
-static void check_required_directory(char **dirpath,
+static void check_required_directory(char **dirpath, char **configpath,
 				   char *envVarName, char *cmdLineOption, char *description);
 
 
@@ -203,14 +203,14 @@ parseCommandLine(int argc, char *argv[])
 	}
 
 	/* Get values from env if not already set */
-	check_required_directory(&old_cluster.bindir, "PGBINOLD", "-b",
+	check_required_directory(&old_cluster.bindir, NULL, "PGBINOLD", "-b",
 							 "old cluster binaries reside");
-	check_required_directory(&new_cluster.bindir, "PGBINNEW", "-B",
+	check_required_directory(&new_cluster.bindir, NULL, "PGBINNEW", "-B",
 							 "new cluster binaries reside");
-	check_required_directory(&old_cluster.pgdata, "PGDATAOLD", "-d",
-							 "old cluster data resides");
-	check_required_directory(&new_cluster.pgdata, "PGDATANEW", "-D",
-							 "new cluster data resides");
+	check_required_directory(&old_cluster.pgdata, &old_cluster.pgconfig,
+							 "PGDATAOLD", "-d", "old cluster data resides");
+	check_required_directory(&new_cluster.pgdata, &new_cluster.pgconfig,
+							 "PGDATANEW", "-D", "new cluster data resides");
 }
 
 
@@ -284,15 +284,20 @@ or\n"), old_cluster.port, new_cluster.port, os_info.user);
  * user hasn't provided the required directory name.
  */
 static void
-check_required_directory(char **dirpath, char *envVarName,
-						 char *cmdLineOption, char *description)
+check_required_directory(char **dirpath, char **configpath,
+						 char *envVarName, char *cmdLineOption,
+						 char *description)
 {
 	if (*dirpath == NULL || strlen(*dirpath) == 0)
 	{
 		const char *envVar;
 
 		if ((envVar = getenv(envVarName)) && strlen(envVar))
+		{
 			*dirpath = pg_strdup(envVar);
+			if (configpath)
+				*configpath = pg_strdup(envVar);
+		}
 		else
 			pg_log(PG_FATAL, "You must identify the directory where the %s.\n"
 				   "Please use the %s command-line option or the %s environment variable.\n",
-- 
GitLab