FileManager: Replicate permissions on directory copy (#1437)

When copying files, the original file permissions are applied to the
copy. However, this was not done with directories. This should do it.
This commit is contained in:
angel 2020-04-19 15:29:16 +02:00 committed by Andreas Kling
parent 2623bd711b
commit 238afd37cf
Notes: sideshowbarker 2024-07-19 17:35:57 +09:00
2 changed files with 10 additions and 3 deletions

View File

@ -93,12 +93,12 @@ bool copy_file_or_directory(const String& src_path, const String& dst_path)
}
if (S_ISDIR(src_stat.st_mode)) {
return copy_directory(src_path, dst_path);
return copy_directory(src_path, dst_path, src_stat);
}
return copy_file(src_path, dst_path, src_stat, src_fd);
}
bool copy_directory(const String& src_path, const String& dst_path)
bool copy_directory(const String& src_path, const String& dst_path, const struct stat& src_stat)
{
int rc = mkdir(dst_path.characters(), 0755);
if (rc < 0) {
@ -117,6 +117,13 @@ bool copy_directory(const String& src_path, const String& dst_path)
return false;
}
}
auto my_umask = umask(0);
umask(my_umask);
rc = chmod(dst_path.characters(), src_stat.st_mode & ~my_umask);
if (rc < 0) {
return false;
}
return true;
}

View File

@ -34,6 +34,6 @@ int delete_directory(String directory, String& file_that_caused_error);
bool copy_file_or_directory(const String& src_path, const String& dst_path);
String get_duplicate_name(const String& path, int duplicate_count);
bool copy_file(const String& src_path, const String& dst_path, const struct stat& src_stat, int src_fd);
bool copy_directory(const String& src_path, const String& dst_path);
bool copy_directory(const String& src_path, const String& dst_path, const struct stat& src_stat);
}