X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=flower%2Ffile-name.cc;h=e5736e06b0834ed6c26e15e01f32d25d91682067;hb=0de26b0712203609e44a2979bb127a3605c787fd;hp=2302baa46b6a0647f72be83f4a4e44a043d26f7f;hpb=d6c6392807de389455742f23d70ab62fb3e6ac4f;p=lilypond.git diff --git a/flower/file-name.cc b/flower/file-name.cc index 2302baa46b..e5736e06b0 100644 --- a/flower/file-name.cc +++ b/flower/file-name.cc @@ -3,7 +3,7 @@ source file of the Flower Library - (c) 1997--2006 Han-Wen Nienhuys + (c) 1997--2007 Han-Wen Nienhuys Jan Nieuwenhuizen */ @@ -11,6 +11,8 @@ #include #include +#include + using namespace std; #include "config.hh" @@ -36,14 +38,14 @@ using namespace std; #endif #ifdef __CYGWIN__ -static std::string -dos_to_posix (std::string file_name) +static string +dos_to_posix (string file_name) { char buf[PATH_MAX] = ""; - char *s = file_name.get_copy_str0 (); + char s[PATH_MAX] = {0}; + file_name.copy (s, PATH_MAX - 1); /* ugh: char const* argument gets modified. */ int fail = cygwin_conv_to_posix_path (s, buf); - delete s; if (!fail) return buf; return file_name; @@ -52,34 +54,85 @@ dos_to_posix (std::string file_name) /** Use slash as directory separator. On Windows, they can pretty much be exchanged. */ -static std::string -slashify (std::string file_name) +#if 0 +static /* avoid warning */ +#endif +string +slashify (string file_name) { replace_all (file_name, '\\', '/'); - replace_all (file_name, std::string ("//"), "/"); + replace_all (file_name, string ("//"), "/"); return file_name; } +string +dir_name (string const file_name) +{ + string s = file_name; + s = slashify (s); + ssize n = s.length (); + if (n && s[n - 1] == '/') + s[n - 1] = 0; + if (s.rfind ('/') != NPOS) + s = s.substr (0, s.rfind ('/')); + else + s = ""; + + return s; +} + +string +get_working_directory () +{ + char cwd[PATH_MAX]; + getcwd (cwd, PATH_MAX); + + return string (cwd); +} + /* Join components to full file_name. */ -std::string -File_name::to_string () const +string +File_name::dir_part () const { - std::string s; + string s; if (!root_.empty ()) - s = root_ + std::to_string (ROOTSEP); + s = root_ + ::to_string (ROOTSEP); + if (!dir_.empty ()) { s += dir_; - if (!base_.empty () || !ext_.empty ()) - s += std::to_string (DIRSEP); } - s += base_; + + return s; +} + + +string +File_name::file_part () const +{ + string s; + s = base_; if (!ext_.empty ()) - s += std::to_string (EXTSEP) + ext_; + s += ::to_string (EXTSEP) + ext_; return s; } -File_name::File_name (std::string file_name) +string +File_name::to_string () const +{ + string d = dir_part (); + string f = file_part (); + + if (!f.empty () + && !dir_.empty()) + { + d += ::to_string (DIRSEP); + } + + return d + f; +} + +File_name::File_name (string file_name) { #ifdef __CYGWIN__ /* All system functions would work, even if we do not convert to @@ -124,9 +177,3 @@ File_name::is_absolute () const return (dir_.length () && dir_[0] == DIRSEP) || root_.length (); } -#if 0 //STD_STRING -File_name::File_name (String file_name) -{ - *this = File_name (std::string (file_name)); -} -#endif