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

Reply via email to