aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_upgrade/exec.c23
-rw-r--r--src/bin/pg_upgrade/server.c18
2 files changed, 27 insertions, 14 deletions
diff --git a/src/bin/pg_upgrade/exec.c b/src/bin/pg_upgrade/exec.c
index 1cf64e1a450..59ddc16d6b8 100644
--- a/src/bin/pg_upgrade/exec.c
+++ b/src/bin/pg_upgrade/exec.c
@@ -26,7 +26,7 @@ static int win32_check_directory_write_permissions(void);
/*
* get_bin_version
*
- * Fetch versions of binaries for cluster.
+ * Fetch major version of binaries for cluster.
*/
static void
get_bin_version(ClusterInfo *cluster)
@@ -34,8 +34,8 @@ get_bin_version(ClusterInfo *cluster)
char cmd[MAXPGPATH],
cmd_output[MAX_STRING];
FILE *output;
- int pre_dot = 0,
- post_dot = 0;
+ int v1 = 0,
+ v2 = 0;
snprintf(cmd, sizeof(cmd), "\"%s/pg_ctl\" --version", cluster->bindir);
@@ -46,14 +46,19 @@ get_bin_version(ClusterInfo *cluster)
pclose(output);
- /* Remove trailing newline */
- if (strchr(cmd_output, '\n') != NULL)
- *strchr(cmd_output, '\n') = '\0';
-
- if (sscanf(cmd_output, "%*s %*s %d.%d", &pre_dot, &post_dot) < 1)
+ if (sscanf(cmd_output, "%*s %*s %d.%d", &v1, &v2) < 1)
pg_fatal("could not get pg_ctl version output from %s\n", cmd);
- cluster->bin_version = (pre_dot * 100 + post_dot) * 100;
+ if (v1 < 10)
+ {
+ /* old style, e.g. 9.6.1 */
+ cluster->bin_version = v1 * 10000 + v2 * 100;
+ }
+ else
+ {
+ /* new style, e.g. 10.1 */
+ cluster->bin_version = v1 * 10000;
+ }
}
diff --git a/src/bin/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c
index 3e3323a6e8a..a91f18916c7 100644
--- a/src/bin/pg_upgrade/server.c
+++ b/src/bin/pg_upgrade/server.c
@@ -156,8 +156,8 @@ get_major_server_version(ClusterInfo *cluster)
{
FILE *version_fd;
char ver_filename[MAXPGPATH];
- int integer_version = 0;
- int fractional_version = 0;
+ int v1 = 0,
+ v2 = 0;
snprintf(ver_filename, sizeof(ver_filename), "%s/PG_VERSION",
cluster->pgdata);
@@ -165,13 +165,21 @@ get_major_server_version(ClusterInfo *cluster)
pg_fatal("could not open version file: %s\n", ver_filename);
if (fscanf(version_fd, "%63s", cluster->major_version_str) == 0 ||
- sscanf(cluster->major_version_str, "%d.%d", &integer_version,
- &fractional_version) < 1)
+ sscanf(cluster->major_version_str, "%d.%d", &v1, &v2) < 1)
pg_fatal("could not parse PG_VERSION file from %s\n", cluster->pgdata);
fclose(version_fd);
- return (100 * integer_version + fractional_version) * 100;
+ if (v1 < 10)
+ {
+ /* old style, e.g. 9.6.1 */
+ return v1 * 10000 + v2 * 100;
+ }
+ else
+ {
+ /* new style, e.g. 10.1 */
+ return v1 * 10000;
+ }
}