diff options
Diffstat (limited to 'contrib/pg_upgrade/check.c')
| -rw-r--r-- | contrib/pg_upgrade/check.c | 47 |
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); |
