}
bool
-exists_and_writable (const path & p)
+exists_and_writable (const std::string & p)
{
/* writable() really reflects the whole folder, but if for any
reason the session state file can't be written to, still
struct stat statbuf;
- if (g_stat (p.to_string().c_str(), &statbuf) != 0) {
+ if (g_stat (p.c_str(), &statbuf) != 0) {
/* doesn't exist - not writable */
return false;
} else {
/* exists and is not writable */
return false;
}
+ /* filesystem may be mounted read-only, so even though file
+ * permissions permit access, the mount status does not.
+ * access(2) seems like the best test for this.
+ */
+ if (g_access (p.to_string().c_str(), W_OK) != 0) {
+ return false;
+ }
}
return true;
throw filesystem_error(g_strerror(errno), errno);
}
}
-
-// XXX character encoding.
-void
-copy_file(const path & from_path, const path & to_path)
-{
- std::ifstream in(from_path.to_string().c_str());
- std::ofstream out(to_path.to_string().c_str());
-
- if (!in || !out) {
- throw filesystem_error(string_compose(_("Could not open files %1 and %2 for copying"),
- from_path.to_string(), to_path.to_string()));
- }
-
- 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()));
- }
-}
-
-static
-bool accept_all_files (string const &, void *)
-{
- return true;
-}
-void
-copy_files(const path & from_path, const path & to_dir)
-{
- PathScanner scanner;
- vector<string*>* files = scanner (from_path.to_string(), accept_all_files, 0, true, false);
- for (vector<string*>::iterator i = files->begin(); i != files->end(); ++i) {
- sys::path from = from_path;
- from /= **i;
- sys::path to = to_dir;
- to /= **i;
-
- copy_file (from, to);
- }
-}
-
string
basename (const path & p)
{
}
-/** Take a (possibly) relative path and make it absolute */
-path
-get_absolute_path (const path & p)
-{
- Glib::RefPtr<Gio::File> f = Gio::File::create_for_path (p.to_string ());
- return f->get_path ();
-}
-
} // namespace sys
} // namespace PBD