From 10249abfa19a53e9e158396333400ae66ae1c02b Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Thu, 12 Aug 2004 19:03:44 +0000
Subject: [PATCH] Cleanup Win32 COPY handling, and move archive examples to
 SGML.

---
 doc/src/sgml/runtime.sgml                     | 30 ++++++++++++-------
 src/backend/access/transam/xlog.c             | 14 +--------
 src/backend/postmaster/pgarch.c               | 13 ++------
 src/backend/utils/misc/postgresql.conf.sample | 10 -------
 src/port/path.c                               | 15 ++++++++--
 5 files changed, 34 insertions(+), 48 deletions(-)

diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml
index 117a0eb21b3..438b58d9f5a 100644
--- a/doc/src/sgml/runtime.sgml
+++ b/doc/src/sgml/runtime.sgml
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.275 2004/08/08 20:17:33 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.276 2004/08/12 19:03:17 momjian Exp $
 -->
 
 <Chapter Id="runtime">
@@ -1435,16 +1435,24 @@ SET ENABLE_SEQSCAN TO OFF;
       <term><varname>archive_command</varname> (<type>string</type>)</term>
       <listitem>
        <para>
-        The shell command to execute to archive a completed segment of the
-	WAL file series.  If this is an empty string (which is the default),
-	WAL archiving is disabled.  Any <literal>%p</> in the string is
-	replaced 
-	by the absolute path of the file to archive, while any <literal>%f</>
-	is replaced by the file name only.  Write <literal>%%</> if you need
-	to embed an actual <literal>%</> character in the command.  For more
-	information see <xref linkend="backup-archiving-wal">.  This option
-	can only be set at server start or in the
-	<filename>postgresql.conf</filename> file.
+        The shell command to execute to archive a completed segment of
+        the WAL file series. If this is an empty string (the default),
+        WAL archiving is disabled. Any <literal>%p</> in the string is
+        replaced by the absolute path of the file to archive, and any
+        <literal>%f</> is replaced by the file name only. Use
+        <literal>%%</> to embed an actual <literal>%</> character in the
+        command. For more information see <xref
+        linkend="backup-archiving-wal">. This option can only be set at
+        server start or in the <filename>postgresql.conf</filename>
+        file.
+       </para>
+       <para>
+        It is important for the command to return a zero exit status only if
+	it succeeds.  Examples:
+<programlisting>
+archive_command = 'cp "%p" /mnt/server/archivedir/"%f"'
+archive_command = 'copy "%p" /mnt/server/archivedir/"%f"'  # Win32
+</programlisting>
        </para>
       </listitem>
      </varlistentry>
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 50ba2156e08..b9d0398b621 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.161 2004/08/12 18:34:45 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.162 2004/08/12 19:03:23 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1962,18 +1962,6 @@ RestoreArchivedFile(char *path, const char *xlogfname,
 					/* %p: full path of target file */
 					sp++;
 					StrNCpy(dp, xlogpath, endp-dp);
-					/*
-					 *	make_native_path() is required because WIN32 COPY is
-					 *	an internal CMD.EXE command and doesn't process
-					 *	forward slashes in the same way as external commands.
-					 *	Quoting the first argument to COPY does not convert
-					 *	forward to backward slashes, but COPY does properly
-					 *	process quoted forward slashes in the second argument.
-					 *
-					 *	COPY works with quoted forward slashes in the first argument
-					 *	only if the current directory is the same as the directory
-					 *	of the first argument.
-					 */
 					make_native_path(dp);
 					dp += strlen(dp);
 					break;
diff --git a/src/backend/postmaster/pgarch.c b/src/backend/postmaster/pgarch.c
index 83587551c9b..d11bf17a2b4 100644
--- a/src/backend/postmaster/pgarch.c
+++ b/src/backend/postmaster/pgarch.c
@@ -19,7 +19,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/postmaster/pgarch.c,v 1.6 2004/08/09 16:26:06 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/postmaster/pgarch.c,v 1.7 2004/08/12 19:03:34 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -436,17 +436,8 @@ pgarch_archiveXlog(char *xlog)
 					/* %p: full path of source file */
 					sp++;
 					StrNCpy(dp, pathname, endp-dp);
-#ifndef WIN32
+					make_native_path(dp);
 					dp += strlen(dp);
-#else
-					/* On Windows, change / to \ in the substituted path */
-					while (*dp)
-					{
-						if (*dp == '/')
-							*dp = '\\';
-						dp++;
-					}
-#endif
 					break;
 				case 'f':
 					/* %f: filename of source file */
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index 28463c6ae9b..cdd427f04b6 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -117,16 +117,6 @@
 # - Archiving -
 
 #archive_command = ''		# command to use to archive a logfile segment
-#
-# If archive_command is '' then archiving is disabled.  Otherwise, set it
-# to a command to copy a file to the proper place.  Any %p in the string 
-# is replaced by the absolute path of the file to archive, while any %f is 
-# replaced by the file name only.  NOTE: it is important for the command to 
-# return zero exit status only if it succeeds.
-#
-# Examples:
-# 	archive_command = 'cp "%p" /mnt/server/archivedir/"%f"'
-# 	archive_command = 'copy "%p" /mnt/server/archivedir/"%f"'  # Win32
 
 
 #---------------------------------------------------------------------------
diff --git a/src/port/path.c b/src/port/path.c
index 2a7428d0ba6..50f6476f427 100644
--- a/src/port/path.c
+++ b/src/port/path.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/port/path.c,v 1.28 2004/08/12 18:32:52 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/port/path.c,v 1.29 2004/08/12 19:03:44 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -88,8 +88,17 @@ last_dir_separator(const char *filename)
 
 
 /*
- *	make_native_path
- *	On WIN32, change / to \ in the path.
+ *	make_native_path - on WIN32, change / to \ in the path
+ *
+ *	This is required because WIN32 COPY is an internal CMD.EXE
+ *	command and doesn't process forward slashes in the same way
+ *	as external commands.  Quoting the first argument to COPY
+ *	does not convert forward to backward slashes, but COPY does
+ *	properly process quoted forward slashes in the second argument.
+ *
+ *	COPY works with quoted forward slashes in the first argument
+ *	only if the current directory is the same as the directory
+ *	of the first argument.
  */
 void
 make_native_path(char *filename)
-- 
GitLab