[shotwell] Do not use Posix.system()



commit de1aae80b99a2e8da5260067f729d986be339c29
Author: Jens Georg <mail jensge org>
Date:   Fri Apr 15 23:19:14 2016 +0200

    Do not use Posix.system()

 src/db/DatabaseTable.vala |   13 ++++++++++---
 src/main.vala             |   14 +++++++++++---
 2 files changed, 21 insertions(+), 6 deletions(-)
---
diff --git a/src/db/DatabaseTable.vala b/src/db/DatabaseTable.vala
index 235ac06..a315fab 100644
--- a/src/db/DatabaseTable.vala
+++ b/src/db/DatabaseTable.vala
@@ -69,10 +69,17 @@ public abstract class DatabaseTable {
             db = null;
             
             string backup_path = filename + ".bak";
-            string cmdline = "cp " + backup_path + " " + filename;
-            Posix.system(cmdline);    
 
-            prepare_db(filename);
+            try {
+                File src = File.new_for_commandline_arg(backup_path);
+                File dest = File.new_for_commandline_arg(filename);
+                src.copy(dest,
+                         FileCopyFlags.OVERWRITE |
+                         FileCopyFlags.ALL_METADATA);
+                prepare_db(filename);
+            } catch (Error error) {
+                AppWindow.panic(_("Unable to restore photo database %s").printf(error.message));
+            }
         }
 
         // disable synchronized commits for performance reasons ... this is not vital, hence we
diff --git a/src/main.vala b/src/main.vala
index 6a705a7..5548455 100644
--- a/src/main.vala
+++ b/src/main.vala
@@ -433,9 +433,17 @@ void main(string[] args) {
     if (is_string_empty(filename) && !was_already_running) {
         string orig_path = AppDirs.get_data_subdir("data").get_child("photo.db").get_path();
         string backup_path = orig_path + ".bak";
-        string cmdline = "cp " + orig_path + " " + backup_path;
-        Posix.system(cmdline);
-        Posix.system("sync");
+        try {
+            File src = File.new_for_commandline_arg(orig_path);
+            File dest = File.new_for_commandline_arg(backup_path);
+            src.copy(dest,
+                     FileCopyFlags.OVERWRITE |
+                     FileCopyFlags.ALL_METADATA);
+        } catch(Error error) {
+            warning("Failed to create backup file of database: %s",
+                    error.message);
+        }
+        Posix.sync();
     }
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]