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;
 }