summaryrefslogtreecommitdiff
path: root/libs/pbd
diff options
context:
space:
mode:
Diffstat (limited to 'libs/pbd')
-rw-r--r--libs/pbd/SConscript3
-rw-r--r--libs/pbd/copyfile.cc38
-rw-r--r--libs/pbd/pbd/copyfile.h6
3 files changed, 46 insertions, 1 deletions
diff --git a/libs/pbd/SConscript b/libs/pbd/SConscript
index f5c65c3b2c..afb24a4311 100644
--- a/libs/pbd/SConscript
+++ b/libs/pbd/SConscript
@@ -20,8 +20,9 @@ pbd.Append(POTFILE=domain + '.pot')
pbd_files = Split("""
basename.cc
base_ui.cc
-convert.cc
command.cc
+convert.cc
+copyfile.cc
controllable.cc
enumwriter.cc
dmalloc.cc
diff --git a/libs/pbd/copyfile.cc b/libs/pbd/copyfile.cc
new file mode 100644
index 0000000000..d36ecef58a
--- /dev/null
+++ b/libs/pbd/copyfile.cc
@@ -0,0 +1,38 @@
+#include <fstream>
+#include <unistd.h>
+
+#include <pbd/copyfile.h>
+#include <pbd/error.h>
+#include <pbd/compose.h>
+
+#include "i18n.h"
+
+using namespace PBD;
+using namespace std;
+
+int
+PBD::copy_file (Glib::ustring from, Glib::ustring to)
+{
+ ifstream in (from.c_str());
+ ofstream out (to.c_str());
+
+ if (!in) {
+ error << string_compose (_("Could not open %1 for copy"), from) << endmsg;
+ return -1;
+ }
+
+ if (!out) {
+ error << string_compose (_("Could not open %1 as copy"), to) << endmsg;
+ return -1;
+ }
+
+ out << in.rdbuf();
+
+ if (!in || !out) {
+ error << string_compose (_("Could not copy existing file %1 to %2"), from, to) << endmsg;
+ unlink (to.c_str());
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/libs/pbd/pbd/copyfile.h b/libs/pbd/pbd/copyfile.h
new file mode 100644
index 0000000000..8a1bf242bb
--- /dev/null
+++ b/libs/pbd/pbd/copyfile.h
@@ -0,0 +1,6 @@
+#include <glibmm/ustring.h>
+
+namespace PBD {
+
+ int copy_file (Glib::ustring from, Glib::ustring to);
+}