Once again, I'm replying to my own message. This time, because I have created a patch for `rubywin' which fixes this problem that I reported: > I just noticed today that the version of `rubywin' that comes with the > latest (1.6.4-2) version of Ruby for Windows has the prefix > "/cygdrive" hard coded. > > Unfortunately, this causes problems when running with Cygwin, because > "/cygdrive" is not mandatory with Cygwin. [ ... ] When I wrote my original messages on this topic, I hadn't realized that sources were available for `rubywin'. But today I discovered that, and so I got these sources and made a patch (below) which corrects this problem of the hard-coded "/cygdrive" prefix. It turns out that Cygwin has a function called `cygwin_conv_to_posix_path()' which does pretty much the same thing as the `convert_dirsep()' function inside of rwcommon.cpp. Therefore, in my patched version of `rubywin', I removed the special __CYGWIN__ code that currently makes use of the hard-coded "/cygdrive" string, and I replaced it with different __CYGWIN__ code that makes the call to this cygwin function. Then, I tested the new `rubywin' that I had created, and indeed it now works, no matter what drive prefix I set via cygwin's "mount -c" command. This patch applies to the rubywin-0.0.3.5, and I built and tested `rubywin' using version 1.3.2 of the cygwin DLL. Here's the patch. I hope that some of you find it to be useful. Also, I invite any comments and suggestions. Lloyd Zusman ljz / asfast.com ------------------------------ cut here ------------------------------ --- rwcommon.cpp.orig Tue Jul 31 07:39:19 2001 +++ rwcommon.cpp Tue Jul 31 07:36:50 2001 @@ -9,6 +9,9 @@ #include <string> #include <ctype.h> #include <sys/stat.h> +#if defined(__CYGWIN__) +# include <sys/cygwin.h> +#endif #include "rwcommon.h" using namespace std; @@ -133,19 +136,12 @@ string convert_dirsep( const char * path ) { - string s = path; #if defined(__CYGWIN__) - s = "/cygdrive/"; - const char *p; - int i = 0; - for(i = 0, p = path; *p; p++, i++) { - if (*p == '\\') { - s += '/'; - } - else if (*p != ':' || i != 1) { - s += *p; - } - } + char newpath[MAX_PATH + 1]; + cygwin_conv_to_posix_path(path, newpath); + string s = newpath; +#else + string s = path; #endif return s; }