0002-pg_upgrade-remove-libpath-from-cluster-info-struct.patch
text/x-patch
Filename: 0002-pg_upgrade-remove-libpath-from-cluster-info-struct.patch
Type: text/x-patch
Part: 1
From f3e393318ba36ef543f77fb8983902d466ebe8c8 Mon Sep 17 00:00:00 2001
From: Dan McGee <dan@archlinux.org>
Date: Tue, 21 Jun 2011 18:49:47 -0500
Subject: [PATCH 2/3] pg_upgrade: remove libpath from cluster info struct
We only use this item in one check and then no longer need it.
Additionally, get_pkglibdir() is currently run before we do our checks
on the bin/ directory, so an incorrectly specified bin/ directory will
evoke failures at the "wrong" point.
Move the entire function into the file that uses it so it can remain
static.
---
contrib/pg_upgrade/check.c | 35 +++++++++++++++++++++++++++++-
contrib/pg_upgrade/option.c | 45 ---------------------------------------
contrib/pg_upgrade/pg_upgrade.h | 1 -
3 files changed, 34 insertions(+), 47 deletions(-)
diff --git a/contrib/pg_upgrade/check.c b/contrib/pg_upgrade/check.c
index 2b481da..5ff2d81 100644
--- a/contrib/pg_upgrade/check.c
+++ b/contrib/pg_upgrade/check.c
@@ -19,6 +19,7 @@ static void check_is_super_user(ClusterInfo *cluster);
static void check_for_prepared_transactions(ClusterInfo *cluster);
static void check_for_isn_and_int8_passing_mismatch(ClusterInfo *cluster);
static void check_for_reg_data_type_usage(ClusterInfo *cluster);
+static char *get_pkglibdir(const char *bindir);
void
@@ -246,14 +247,17 @@ void
check_cluster_compatibility(bool live_check)
{
char libfile[MAXPGPATH];
+ char *libpath;
FILE *lib_test;
/*
* Test pg_upgrade_support.so is in the proper place. We cannot copy it
* ourselves because install directories are typically root-owned.
*/
- snprintf(libfile, sizeof(libfile), "%s/pg_upgrade_support%s", new_cluster.libpath,
+ libpath = get_pkglibdir(new_cluster.bindir);
+ snprintf(libfile, sizeof(libfile), "%s/pg_upgrade_support%s", libpath,
DLSUFFIX);
+ pg_free(libpath);
if ((lib_test = fopen(libfile, "r")) == NULL)
pg_log(PG_FATAL,
@@ -730,3 +734,32 @@ check_for_reg_data_type_usage(ClusterInfo *cluster)
else
check_ok();
}
+
+
+static char *
+get_pkglibdir(const char *bindir)
+{
+ char cmd[MAXPGPATH];
+ char bufin[MAX_STRING];
+ FILE *output;
+ int i;
+
+ snprintf(cmd, sizeof(cmd), "\"%s/pg_config\" --pkglibdir", bindir);
+
+ if ((output = popen(cmd, "r")) == NULL)
+ pg_log(PG_FATAL, "Could not get pkglibdir data: %s\n",
+ getErrorText(errno));
+
+ fgets(bufin, sizeof(bufin), output);
+
+ if (output)
+ pclose(output);
+
+ /* Remove trailing newline */
+ i = strlen(bufin) - 1;
+
+ if (bufin[i] == '\n')
+ bufin[i] = '\0';
+
+ return pg_strdup(bufin);
+}
diff --git a/contrib/pg_upgrade/option.c b/contrib/pg_upgrade/option.c
index 8153e30..18ce9d7 100644
--- a/contrib/pg_upgrade/option.c
+++ b/contrib/pg_upgrade/option.c
@@ -19,8 +19,6 @@
static void usage(void);
static void validateDirectoryOption(char **dirpath,
char *envVarName, char *cmdLineOption, char *description);
-static void get_pkglibdirs(void);
-static char *get_pkglibdir(const char *bindir);
UserOpts user_opts;
@@ -213,8 +211,6 @@ parseCommandLine(int argc, char *argv[])
"old cluster data resides");
validateDirectoryOption(&new_cluster.pgdata, "NEWDATADIR", "-D",
"new cluster data resides");
-
- get_pkglibdirs();
}
@@ -314,44 +310,3 @@ validateDirectoryOption(char **dirpath, char *envVarName,
#endif
(*dirpath)[strlen(*dirpath) - 1] = 0;
}
-
-
-static void
-get_pkglibdirs(void)
-{
- /*
- * we do not need to know the libpath in the old cluster, and might not
- * have a working pg_config to ask for it anyway.
- */
- old_cluster.libpath = NULL;
- new_cluster.libpath = get_pkglibdir(new_cluster.bindir);
-}
-
-
-static char *
-get_pkglibdir(const char *bindir)
-{
- char cmd[MAXPGPATH];
- char bufin[MAX_STRING];
- FILE *output;
- int i;
-
- snprintf(cmd, sizeof(cmd), "\"%s/pg_config\" --pkglibdir", bindir);
-
- if ((output = popen(cmd, "r")) == NULL)
- pg_log(PG_FATAL, "Could not get pkglibdir data: %s\n",
- getErrorText(errno));
-
- fgets(bufin, sizeof(bufin), output);
-
- if (output)
- pclose(output);
-
- /* Remove trailing newline */
- i = strlen(bufin) - 1;
-
- if (bufin[i] == '\n')
- bufin[i] = '\0';
-
- return pg_strdup(bufin);
-}
diff --git a/contrib/pg_upgrade/pg_upgrade.h b/contrib/pg_upgrade/pg_upgrade.h
index a3a0856..c27b58a 100644
--- a/contrib/pg_upgrade/pg_upgrade.h
+++ b/contrib/pg_upgrade/pg_upgrade.h
@@ -185,7 +185,6 @@ typedef struct
uint32 major_version; /* PG_VERSION of cluster */
char major_version_str[64]; /* string PG_VERSION of cluster */
Oid pg_database_oid; /* OID of pg_database relation */
- char *libpath; /* pathname for cluster's pkglibdir */
char *tablespace_suffix; /* directory specification */
} ClusterInfo;
--
1.7.5.4