On Mon, 11 Jul 2005, Peter Ekberg wrote:
You don't seem to understand what's going on... On MSYS there is no "official" way to convert a posix path to a win32 path (like cygpath on Cygwin). But if you execute any executable outside of the MSYS /bin or /usr/bin directories (and perhaps other places as well?), any argument that looks like a posix path is converted to a win32 path on the assumption that all such executables expect win32 paths. The problem is that in this case the conversion needs to be done not on an argument, but on an environment variable that MSYS does not autoconvert. So, it needs to be converted manually. So, since there is no official way to convert paths, I run a program outside of MSYS and as one of its arguments I have the posix path to be converted. The program I have chosen to run is the command
This is the script I run under MSYS or Cygwin to convert a POSIX path to a win32 paths with varying amount of escaping in case the result needs to be handled by a script later. It has been pointed out to me that Windows converts forward slashes to backslashes so it is not necessary to generate backslashes, but paths are often seen by Windows users so I try to generate paths which are familiar to them.
#!/bin/sh # Copyright (C) 2003 GraphicsMagick Group # # This program is covered by multiple licenses, which are described in # Copyright.txt. You should have received a copy of Copyright.txt with this # package; otherwise see http://www.graphicsmagick.org/www/Copyright.html. # # Convert the specified POSIX path to a Windows path under MinGW and Cygwin # The optional second parameter specifies the level of backslash escaping # to apply for each Windows backslash position in order to support varying # levels of variable substitutions in scripts. # # Note that Cygwin includes the 'cygpath' utility, which already provides # path translation capability. # # Written by Bob Friesenhahn <[EMAIL PROTECTED]> June 2002 # arg="$1" escapes=0 if test -n "$2" then escapes="$2" fi if test $escapes -gt 3 then echo "$0: escape level must in range 0 - 3" exit 1 fi result='' length=0 max_length=0 mount | sed -e 's:\\:/:g' | ( IFS="\n" while read mount_entry do win_mount_path=`echo "$mount_entry" | sed -e 's: .*::g'` unix_mount_path=`echo "$mount_entry" | sed -e 's:.* on ::;s: type .*::'` temp=`echo "$arg" | sed -e "s!^$unix_mount_path!$win_mount_path!"` if test "$temp" != "$arg" then candidate="$temp" length=${#unix_mount_path} if test $length -gt $max_length then result=$candidate max_length=$length fi fi done if test -z "$result" then echo "$0: path \"$arg\" is not mounted" exit 1 fi case $escapes in 0) echo "$result" | sed -e 's:/:\\:g' ;; 1) echo "$result" | sed -e 's:/:\\\\:g' ;; 2) echo "$result" | sed -e 's:/:\\\\\\\\:g' ;; 3) echo "$result" | sed -e 's:/:\\\\\\\\\\\\\\\\:g' ;; esac exit 0; ) ====================================== Bob Friesenhahn [EMAIL PROTECTED], http://www.simplesystems.org/users/bfriesen/ GraphicsMagick Maintainer, http://www.GraphicsMagick.org/