X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Ffilesystem.cc;h=84d18cfcd242fc45b54b4bccc620ee7c7a1c6de2;hb=d9416a3a6a69a975bb8f1aae50d218e4f71d2f19;hp=b257da9e336d822dd548f901e1450fcb8aea81b1;hpb=414dd87040ca2646206711c0f0d0895a3219ddf1;p=ardour.git diff --git a/libs/pbd/filesystem.cc b/libs/pbd/filesystem.cc index b257da9e33..84d18cfcd2 100644 --- a/libs/pbd/filesystem.cc +++ b/libs/pbd/filesystem.cc @@ -136,11 +136,23 @@ remove(const path & p) return true; } +void +rename (const path & from_path, const path & to_path) +{ + // g_rename is a macro that evaluates to ::rename on + // POSIX systems, without the global namespace qualifier + // it would evaluate to a recursive call(if it compiled) + if ( ::g_rename( from_path.to_string().c_str(), + to_path.to_string().c_str() ) == -1 ) + { + throw filesystem_error(g_strerror(errno), errno); + } +} + +// XXX character encoding. void copy_file(const path & from_path, const path & to_path) { - // this implementation could use mucho memory - // for big files. std::ifstream in(from_path.to_string().c_str()); std::ofstream out(to_path.to_string().c_str()); @@ -152,16 +164,16 @@ copy_file(const path & from_path, const path & to_path) out << in.rdbuf(); if (!in || !out) { + remove (to_path); throw filesystem_error(string_compose(_("Could not copy existing file %1 to %2"), from_path.to_string(), to_path.to_string())); - remove (to_path); } } string basename (const path & p) { - string base = Glib::path_get_basename (p.to_string()); + string base(p.leaf()); string::size_type n = base.rfind ('.'); @@ -171,7 +183,7 @@ basename (const path & p) string extension (const path & p) { - string base = Glib::path_get_basename (p.to_string()); + string base(p.leaf()); string::size_type n = base.rfind ('.');