summaryrefslogtreecommitdiff
path: root/contrib/pg_upgrade/check.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/pg_upgrade/check.c')
-rw-r--r--contrib/pg_upgrade/check.c47
1 files changed, 40 insertions, 7 deletions
diff --git a/contrib/pg_upgrade/check.c b/contrib/pg_upgrade/check.c
index d5d6bedb68e..453b0078996 100644
--- a/contrib/pg_upgrade/check.c
+++ b/contrib/pg_upgrade/check.c
@@ -19,6 +19,35 @@ static void check_for_isn_and_int8_passing_mismatch(migratorContext *ctx,
static void check_for_reg_data_type_usage(migratorContext *ctx, Cluster whichCluster);
+/*
+ * fix_path_separator
+ * For non-Windows, just return the argument.
+ * For Windows convert any forward slash to a backslash
+ * such as is suitable for arguments to builtin commands
+ * like RMDIR and DEL.
+ */
+static char *fix_path_separator(char *path)
+{
+#ifdef WIN32
+
+ char *result;
+ char *c;
+
+ result = pg_strdup(path);
+
+ for (c = result; *c != '\0'; c++)
+ if (*c == '/')
+ *c = '\\';
+
+ return result;
+
+#else
+
+ return path;
+
+#endif
+}
+
void
output_check_banner(migratorContext *ctx, bool *live_check)
{
@@ -402,7 +431,7 @@ create_script_for_old_cluster_deletion(migratorContext *ctx,
#endif
/* delete old cluster's default tablespace */
- fprintf(script, RMDIR_CMD " %s\n", ctx->old.pgdata);
+ fprintf(script, RMDIR_CMD " %s\n", fix_path_separator(ctx->old.pgdata));
/* delete old cluster's alternate tablespaces */
for (tblnum = 0; tblnum < ctx->num_tablespaces; tblnum++)
@@ -419,14 +448,17 @@ create_script_for_old_cluster_deletion(migratorContext *ctx,
fprintf(script, "\n");
/* remove PG_VERSION? */
if (GET_MAJOR_VERSION(ctx->old.major_version) <= 804)
- fprintf(script, RM_CMD " %s%s/PG_VERSION\n",
- ctx->tablespaces[tblnum], ctx->old.tablespace_suffix);
+ fprintf(script, RM_CMD " %s%s%cPG_VERSION\n",
+ fix_path_separator(ctx->tablespaces[tblnum]),
+ fix_path_separator(ctx->old.tablespace_suffix),
+ PATH_SEPARATOR);
for (dbnum = 0; dbnum < ctx->new.dbarr.ndbs; dbnum++)
{
- fprintf(script, RMDIR_CMD " %s%s/%d\n",
- ctx->tablespaces[tblnum], ctx->old.tablespace_suffix,
- ctx->old.dbarr.dbs[dbnum].db_oid);
+ fprintf(script, RMDIR_CMD " %s%s%c%d\n",
+ fix_path_separator(ctx->tablespaces[tblnum]),
+ fix_path_separator(ctx->old.tablespace_suffix),
+ PATH_SEPARATOR, ctx->old.dbarr.dbs[dbnum].db_oid);
}
}
else
@@ -436,7 +468,8 @@ create_script_for_old_cluster_deletion(migratorContext *ctx,
* or a version-specific subdirectory.
*/
fprintf(script, RMDIR_CMD " %s%s\n",
- ctx->tablespaces[tblnum], ctx->old.tablespace_suffix);
+ fix_path_separator(ctx->tablespaces[tblnum]),
+ fix_path_separator(ctx->old.tablespace_suffix));
}
fclose(script);