Browse Source

FileManager: Make copying faster with ftruncate() and a bigger buffer

Apply the same techniques from "cp" to make copying files much faster.
Andreas Kling 5 years ago
parent
commit
f76168a3ea
1 changed files with 9 additions and 2 deletions
  1. 9 2
      Applications/FileManager/FileUtils.cpp

+ 9 - 2
Applications/FileManager/FileUtils.cpp

@@ -74,8 +74,15 @@ bool copy_file(const String& src_path, const String& dst_path, const struct stat
         }
     }
 
+    if (src_stat.st_size > 0) {
+        if (ftruncate(dst_fd, src_stat.st_size) < 0) {
+            perror("cp: ftruncate");
+            return false;
+        }
+    }
+
     for (;;) {
-        char buffer[BUFSIZ];
+        char buffer[32768];
         ssize_t nread = read(src_fd, buffer, sizeof(buffer));
         if (nread < 0) {
             return false;
@@ -130,4 +137,4 @@ String get_duplicate_name(const String& path, int duplicate_count)
     }
     return duplicated_name.build();
 }
-}
+}