On Mon, Feb 16, 2015 at 05:03:45PM -0500, Bruce Momjian wrote: > > All of our makefiles use single quotes, so effectively the only > > character we don't support in directory paths is the single quote itself. > > This seems to say that Windows batch files don't have any special > meaning for single quotes: > > > http://stackoverflow.com/questions/24173825/what-does-single-quote-do-in-windows-batch-files > > http://stackoverflow.com/questions/10737283/single-quotes-and-double-quotes-how-to-have-the-same-behaviour-in-unix-and-wind > > Again, is it worth doing something platform-specific? I can certainly > define a platform-specific macro for " or ' as and use that. Good idea?
I have developed the attached patch to use platform-specific quoting of path names. -- Bruce Momjian <br...@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + Everyone has their own god. +
diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c new file mode 100644 index 6db223a..be66b24 *** a/src/bin/pg_upgrade/check.c --- b/src/bin/pg_upgrade/check.c *************** create_script_for_old_cluster_deletion(c *** 532,538 **** #endif /* delete old cluster's default tablespace */ ! fprintf(script, RMDIR_CMD " \"%s\"\n", fix_path_separator(old_cluster.pgdata)); /* delete old cluster's alternate tablespaces */ for (tblnum = 0; tblnum < os_info.num_old_tablespaces; tblnum++) --- 532,539 ---- #endif /* delete old cluster's default tablespace */ ! fprintf(script, RMDIR_CMD " %c%s%c\n", PATH_QUOTE, ! fix_path_separator(old_cluster.pgdata), PATH_QUOTE); /* delete old cluster's alternate tablespaces */ for (tblnum = 0; tblnum < os_info.num_old_tablespaces; tblnum++) *************** create_script_for_old_cluster_deletion(c *** 554,562 **** PATH_SEPARATOR); for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++) ! fprintf(script, RMDIR_CMD " \"%s%c%d\"\n", fix_path_separator(os_info.old_tablespaces[tblnum]), ! PATH_SEPARATOR, old_cluster.dbarr.dbs[dbnum].db_oid); } else { --- 555,564 ---- PATH_SEPARATOR); for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++) ! fprintf(script, RMDIR_CMD " %c%s%c%d%c\n", PATH_QUOTE, fix_path_separator(os_info.old_tablespaces[tblnum]), ! PATH_SEPARATOR, old_cluster.dbarr.dbs[dbnum].db_oid, ! PATH_QUOTE); } else { *************** create_script_for_old_cluster_deletion(c *** 566,574 **** * Simply delete the tablespace directory, which might be ".old" * or a version-specific subdirectory. */ ! fprintf(script, RMDIR_CMD " \"%s%s\"\n", fix_path_separator(os_info.old_tablespaces[tblnum]), ! fix_path_separator(suffix_path)); pfree(suffix_path); } } --- 568,576 ---- * Simply delete the tablespace directory, which might be ".old" * or a version-specific subdirectory. */ ! fprintf(script, RMDIR_CMD " %c%s%s%c\n", PATH_QUOTE, fix_path_separator(os_info.old_tablespaces[tblnum]), ! fix_path_separator(suffix_path), PATH_QUOTE); pfree(suffix_path); } } diff --git a/src/bin/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h new file mode 100644 index 4683c6f..bb035e1 *** a/src/bin/pg_upgrade/pg_upgrade.h --- b/src/bin/pg_upgrade/pg_upgrade.h *************** extern char *output_files[]; *** 74,79 **** --- 74,80 ---- #define pg_mv_file rename #define pg_link_file link #define PATH_SEPARATOR '/' + #define PATH_QUOTE '\'' #define RM_CMD "rm -f" #define RMDIR_CMD "rm -rf" #define SCRIPT_PREFIX "./" *************** extern char *output_files[]; *** 85,90 **** --- 86,92 ---- #define pg_mv_file pgrename #define pg_link_file win32_pghardlink #define PATH_SEPARATOR '\\' + #define PATH_QUOTE '"' #define RM_CMD "DEL /q" #define RMDIR_CMD "RMDIR /s/q" #define SCRIPT_PREFIX ""
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers