]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/file-name.cc
(dos_to_posix)[__CYGWIN__]: Return
[lilypond.git] / flower / file-name.cc
index cf9dc82fef14ca3bc6ed8b04975aff5f4bad89b9..2064e072613fa598908a01b467068f3d65512b69 100644 (file)
@@ -1,20 +1,21 @@
 /*
   file-name.cc - implement File_name
-   
+
   source file of the Flower Library
-  
-  (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-                 Jan Nieuwenhuizen <janneke@gnu.org>
+
+  (c) 1997--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "file-name.hh"
 
 #include <cstdio>
 #include <cerrno>
+using namespace std;
 
 #include "config.hh"
 
-#if HAVE_SYS_STAT_H 
+#if HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
 
 static String
 dos_to_posix (String file_name)
 {
-  char buf[PATH_MAX];
+  char buf[PATH_MAX] = "";
   char *s = file_name.get_copy_str0 ();
-  /* urg, wtf? char const* argument gets modified! */
-  cygwin_conv_to_posix_path (s, buf);
+  /* ugh: char const* argument gets modified.  */
+  int fail = cygwin_conv_to_posix_path (s, buf);
   delete s;
-  return buf;
+  if (!fail)
+    return buf;
+  return file_name;
 }
 #endif /* __CYGWIN__ */
 
+#ifdef __MINGW32__
+/** Use slash as directory separator.  On Windows, they can pretty
+    much be exchanged.  */
+static String
+slashify (String file_name)
+{
+  file_name.substitute ('\\', '/');
+  file_name.substitute ("//", "/");
+  return file_name;
+}
+#endif /* __MINGW32__ */
+
 /* Join components to full file_name. */
 String
 File_name::to_string () const
@@ -56,27 +71,28 @@ File_name::to_string () const
   if (!root_.is_empty ())
     s = root_ + ::to_string (ROOTSEP);
   if (!dir_.is_empty ())
-    s += dir_ + ::to_string (DIRSEP);
+    {
+      s += dir_;
+      if (!base_.is_empty () || !ext_.is_empty ())
+       s += ::to_string (DIRSEP);
+    }
   s += base_;
   if (!ext_.is_empty ())
     s += ::to_string (EXTSEP) + ext_;
   return s;
 }
 
-char const*
-File_name::to_str0 () const
-{
-  return to_string ().to_str0 ();
-}
-
 File_name::File_name (String file_name)
 {
 #ifdef __CYGWIN__
-  /* All system functions would work, even if we don't convert to
-     posix file_name, but we'd think that \foe\bar\baz.ly is in the cwd.
-     On by default.  */
+  /* All system functions would work, even if we do not convert to
+     posix file_name, but we would think that \foe\bar\baz.ly is in
+     the cwd.  */
   file_name = dos_to_posix (file_name);
 #endif
+#ifdef __MINGW32__
+  file_name = slashify (file_name);
+#endif
 
   int i = file_name.index (ROOTSEP);
   if (i >= 0)