* 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.159 2004/08/11 04:07:15 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.160 2004/08/12 18:32:25 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
                    /* %p: full path of target file */
                    sp++;
                    StrNCpy(dp, xlogpath, endp-dp);
-#ifndef WIN32
+                   /*
+                    *  make_native_path() is required because 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);
-#else
-                   /* On Windows, change / to \ in the substituted path */
-                   while (*dp)
-                   {
-                       if (*dp == '/')
-                           *dp = '\\';
-                       dp++;
-                   }
-#endif
                    break;
                case 'f':
                    /* %f: filename of desired file */
 
 # - 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.  A simplistic example
-# is 'cp %p /mnt/server/archivedir/%f'.  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 if and only if it succeeded.
+# 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
+
 
 #---------------------------------------------------------------------------
 # QUERY TUNING
 
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/port.h,v 1.51 2004/08/09 02:12:51 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/port.h,v 1.52 2004/08/12 18:32:43 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 extern char *first_path_separator(const char *filename);
 
 extern void canonicalize_path(char *path);
+extern void make_native_path(char *path);
 extern const char *get_progname(const char *argv0);
 extern void get_share_path(const char *my_exec_path, char *ret_path);
 extern void get_etc_path(const char *my_exec_path, char *ret_path);
 
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/port/path.c,v 1.27 2004/08/09 20:20:46 tgl Exp $
+ *   $PostgreSQL: pgsql/src/port/path.c,v 1.28 2004/08/12 18:32:52 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
 }
 
 
+/*
+ * make_native_path
+ * On WIN32, change / to \ in the path.
+ */
+void
+make_native_path(char *filename)
+{
+#ifdef WIN32
+   char *p;
+   
+   for (p = filename; *p; p++)
+       if (*p == '/')
+           *p = '\\';
+#endif
+}
+
+
 /*
  * Make all paths look like Unix
  */