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.ushttp://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_CMDrm -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_CMDDEL /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