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 <[email protected]> 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 ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers