X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=flower%2Ffile-name.cc;h=e0ecc58e920c2b9f19887986231932dcf74bb9de;hb=31568c504806f35aac420a394c9eab07abd9faa7;hp=f4ba75a18fe7cce26ab900878116a244660bb2d4;hpb=0fcd8c283c45644a92d2308f1cd0d82a1e63380b;p=lilypond.git diff --git a/flower/file-name.cc b/flower/file-name.cc index f4ba75a18f..e0ecc58e92 100644 --- a/flower/file-name.cc +++ b/flower/file-name.cc @@ -3,7 +3,7 @@ source file of the Flower Library - (c) 1997--2005 Han-Wen Nienhuys + (c) 1997--2006 Han-Wen Nienhuys Jan Nieuwenhuizen */ @@ -11,6 +11,7 @@ #include #include +using namespace std; #include "config.hh" @@ -22,7 +23,6 @@ #include #endif -/* We don't have multiple roots, set this to '\0'? */ #ifndef ROOTSEP #define ROOTSEP ':' #endif @@ -36,55 +36,53 @@ #endif #ifdef __CYGWIN__ -static String -dos_to_posix (String file_name) +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) +#if 0 +static /* avoid warning */ +#endif +string +slashify (string file_name) { - if (file_name.index ('/') >= 0) - return file_name; - file_name.substitute ('\\', '/'); - file_name.substitute ("\"", "\\\""); - file_name.substitute ("\'", "\\\'"); + replace_all (file_name, '\\', '/'); + replace_all (file_name, string ("//"), "/"); return file_name; } -#endif /* __MINGW32__ */ /* Join components to full file_name. */ -String +string File_name::to_string () const { - String s; - if (!root_.is_empty ()) + string s; + if (!root_.empty ()) s = root_ + ::to_string (ROOTSEP); - if (!dir_.is_empty ()) - s += dir_ + ::to_string (DIRSEP); + if (!dir_.empty ()) + { + s += dir_; + if (!base_.empty () || !ext_.empty ()) + s += ::to_string (DIRSEP); + } s += base_; - if (!ext_.is_empty ()) + if (!ext_.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) +File_name::File_name (string file_name) { #ifdef __CYGWIN__ /* All system functions would work, even if we do not convert to @@ -96,26 +94,36 @@ File_name::File_name (String file_name) file_name = slashify (file_name); #endif - int i = file_name.index (ROOTSEP); - if (i >= 0) + ssize i = file_name.find (ROOTSEP); + if (i != NPOS) { - root_ = file_name.left_string (i); - file_name = file_name.right_string (file_name.length () - i - 1); + root_ = file_name.substr (0, i); + file_name = file_name.substr (i + 1); } - i = file_name.index_last (DIRSEP); - if (i >= 0) + i = file_name.rfind (DIRSEP); + if (i != NPOS) { - dir_ = file_name.left_string (i); - file_name = file_name.right_string (file_name.length () - i - 1); + dir_ = file_name.substr (0, i); + file_name = file_name.substr (i + 1); } - i = file_name.index_last ('.'); - if (i >= 0) + i = file_name.rfind ('.'); + if (i != NPOS) { - base_ = file_name.left_string (i); - ext_ = file_name.right_string (file_name.length () - i - 1); + base_ = file_name.substr (0, i); + ext_ = file_name.substr (i + 1); } else base_ = file_name; } + +bool +File_name::is_absolute () const +{ + /* + Hmm. Is c:foo absolute? + */ + return (dir_.length () && dir_[0] == DIRSEP) || root_.length (); +} +