More canonicalization fixes

Started by Bruce Momjianabout 22 years ago1 messagespatches
Jump to latest
#1Bruce Momjian
bruce@momjian.us

I just applied this new version of canonicalize_path():

/*
* Make all paths look like Unix
*/
void
canonicalize_path(char *path)
{
#ifdef WIN32
/*
* The Windows command processor will accept suitably quoted paths
* with forward slashes, but barfs badly with mixed forward and back
* slashes.
*/
char *p;

for (p = path; *p; p++)
{
if (*p == '\\')
*p = '/';
}

/* In Win32, if you do:
* prog.exe "a b" "\c\d\"
* the system will pass \c\d" as argv[2].
*/
if (p > path && *(p-1) == '"')
*(p-1) = '/';
#endif

/*
* Removing the trailing slash on a path means we never get
* ugly double slashes. Don't remove a leading slash, though.
* Also, Win32 can't stat() a directory with a trailing slash.
*/
trim_trailing_separator(path);
}

The new thing Magnus found was this in Win32:

prog.exe "a b" "\c\d\"

returns \c\d" as argv[2]

Quite amazing. The fix on Win32 is to convert a trailing double-quote to
a slash.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073