|
|
@@ -345,63 +345,11 @@ ParallelScanner* parallel_scanner_create(char* root_directory, bool use_metadata
|
|
|
|
char* cur_path = path_cat(root_directory, entry->d_name);
|
|
|
|
char* cur_path = path_cat(root_directory, entry->d_name);
|
|
|
|
if (!cur_path)
|
|
|
|
if (!cur_path)
|
|
|
|
continue;
|
|
|
|
continue;
|
|
|
|
struct stat lstats;
|
|
|
|
|
|
|
|
if (lstat(cur_path, &lstats) != 0) {
|
|
|
|
|
|
|
|
free(cur_path);
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
bool is_symlink = S_ISLNK(lstats.st_mode);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Skip symlinks unless the user explicitly enabled following/copying them.
|
|
|
|
|
|
|
|
if (is_symlink && !follow_symlinks && !copy_links && !safe_links &&
|
|
|
|
|
|
|
|
!copy_unsafe_links) {
|
|
|
|
|
|
|
|
free(cur_path);
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// --safe-links: reject symlinks pointing outside the source tree.
|
|
|
|
|
|
|
|
if (is_symlink && safe_links) {
|
|
|
|
|
|
|
|
char link_target[4096];
|
|
|
|
|
|
|
|
ssize_t len = readlink(cur_path, link_target, sizeof(link_target) - 1);
|
|
|
|
|
|
|
|
if (len < 0) {
|
|
|
|
|
|
|
|
free(cur_path);
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
link_target[len] = ' |