XEmacs 21.2-b3
[chise/xemacs-chise.git-] / lib-src / gnuclient.c
index a89641f..db30ee3 100644 (file)
@@ -179,8 +179,37 @@ filename_expand (char *fullpath, char *filename)
 
   fullpath[0] = '\0';
 
-  if (filename[0] && filename[0] != '/')
-    {  /* relative filename */
+  if (filename[0] && filename[0] == '/')
+     {
+       /* Absolute (unix-style) pathname.  Do nothing */
+       strcat (fullpath, filename);
+     }
+#ifdef  __CYGWIN32__
+  else if (filename[0] && filename[0] == '\\' &&
+           filename[1] && filename[1] == '\\')
+    {
+      /* This path includes the server name (something like
+         "\\server\path"), so we assume it's absolute.  Do nothing to
+         it. */
+      strcat (fullpath, filename);
+    }
+  else if (filename[0] &&
+           filename[1] && filename[1] == ':' &&
+           filename[2] && filename[2] == '\\')
+    {
+      /* Absolute pathname with drive letter.  Convert "<drive>:"
+         to "//<drive>/". */
+      strcat (fullpath, "//");
+      strncat (fullpath, filename, 1);
+      strcat (fullpath, &filename[2]);
+    }
+#endif
+  else
+    {
+      /* Assume relative Unix style path.  Get the current directory
+       and prepend it.  FIXME: need to fix the case of DOS paths like
+       "\foo", where we need to get the current drive. */
+      
       strcat (fullpath, get_current_working_directory ());
       len = strlen (fullpath);
 
@@ -188,10 +217,9 @@ filename_expand (char *fullpath, char *filename)
        ;                                       /* yep */
       else
        strcat (fullpath, "/");         /* nope, append trailing slash */
-    } /* if */
-
-  strcat (fullpath,filename);
-
+      /* Don't forget to add the filename! */
+      strcat (fullpath,filename);
+    }
 } /* filename_expand */
 
 /* Encase the string in quotes, escape all the backslashes and quotes