]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
File Helper: Copy directories recursively
authorBen Iofel <iofelben@gmail.com>
Wed, 30 Mar 2016 21:58:57 +0000 (17:58 -0400)
committerBen Iofel <iofelben@gmail.com>
Wed, 30 Mar 2016 21:58:57 +0000 (17:58 -0400)
src/libvaladoc/filehelper.vala

index 7dcbec8af9520fd11155e3aa3e3d97ad0cbf7369..bc2369b366447077109dc8572c5feea6236962d2 100644 (file)
@@ -57,14 +57,20 @@ namespace Valadoc {
         * @param dest the destination path
         */
        public bool copy_directory (string src, string dest) {
-               string _src = (src.has_suffix ( "/" ))? src : src + "/";
-               string _dest = (dest.has_suffix ( "/" ))? dest : dest + "/";
-
                try {
-                       GLib.Dir dir = GLib.Dir.open (_src);
-                       for (weak string name = dir.read_name (); name != null ; name = dir.read_name ()) {
-                               if (!copy_file (_src+name, _dest+name)) {
-                                       return false;
+                       GLib.Dir dir = GLib.Dir.open (src);
+                       for (string? file = dir.read_name (); file != null; file = dir.read_name ()) {
+                               string src_file_path = GLib.Path.build_filename (src, file);
+                               string dest_file_path = GLib.Path.build_filename (dest, file);
+                               if (GLib.FileUtils.test (src_file_path, GLib.FileTest.IS_DIR)) {
+                                       GLib.DirUtils.create (dest_file_path, 0755); // mkdir if necessary
+                                       if (!copy_directory (src_file_path, dest_file_path)) { // copy directories recursively
+                                               return false;
+                                       }
+                               } else {
+                                       if (!copy_file (src_file_path, dest_file_path)) {
+                                               return false;
+                                       }
                                }
                        }
                }