Revert "Merge pull request 'Features and enhancements (#70, #36, #34, #33, #32, #57, #40, #37)' (#84) from fix/enhancements into main"
This reverts commit8f25f6a6b6, reversing changes made to12ca4b13c8.
This commit is contained in:
+1
-76
@@ -16,17 +16,6 @@ DirectoryScanner* directory_scanner_create(char* root_directory, bool use_metada
|
||||
int exclude_count, char** include_patterns,
|
||||
int include_count, unsigned long long max_size,
|
||||
unsigned long long min_size) {
|
||||
return directory_scanner_create_full(root_directory, use_metadata, chunk_size,
|
||||
exclude_patterns, exclude_count,
|
||||
include_patterns, include_count,
|
||||
max_size, min_size, true);
|
||||
}
|
||||
|
||||
DirectoryScanner* directory_scanner_create_full(char* root_directory, bool use_metadata,
|
||||
unsigned long long chunk_size, char** exclude_patterns,
|
||||
int exclude_count, char** include_patterns,
|
||||
int include_count, unsigned long long max_size,
|
||||
unsigned long long min_size, bool follow_symlinks) {
|
||||
DirectoryScanner* scanner = malloc(sizeof(DirectoryScanner));
|
||||
if (scanner == NULL)
|
||||
return NULL;
|
||||
@@ -90,7 +79,6 @@ DirectoryScanner* directory_scanner_create_full(char* root_directory, bool use_m
|
||||
scanner->include_count = include_count;
|
||||
scanner->max_size = max_size;
|
||||
scanner->min_size = min_size;
|
||||
scanner->follow_symlinks = follow_symlinks;
|
||||
queue_enqueue(scanner->directories, str_dup(root_directory));
|
||||
return scanner;
|
||||
}
|
||||
@@ -171,76 +159,13 @@ Chunk* directory_scanner_next(DirectoryScanner* scanner) {
|
||||
|
||||
char* cur_path = path_cat(scanner->current_path, entry->d_name);
|
||||
struct stat stats;
|
||||
// Use lstat to detect symlinks
|
||||
if (lstat(cur_path, &stats) != 0) {
|
||||
if (stat(cur_path, &stats) != 0) {
|
||||
free(cur_path);
|
||||
continue;
|
||||
}
|
||||
|
||||
// If follow_symlinks is enabled and this is a symlink, resolve it
|
||||
if (scanner->follow_symlinks && S_ISLNK(stats.st_mode)) {
|
||||
struct stat target_stats;
|
||||
if (stat(cur_path, &target_stats) != 0) {
|
||||
// Broken symlink, skip
|
||||
free(cur_path);
|
||||
continue;
|
||||
}
|
||||
stats = target_stats;
|
||||
}
|
||||
|
||||
if (S_ISDIR(stats.st_mode)) {
|
||||
queue_enqueue(scanner->directories, (void*)cur_path);
|
||||
} else if (S_ISLNK(stats.st_mode)) {
|
||||
// Handle symlink (not following)
|
||||
bool excluded = false;
|
||||
for (int i = 0; i < scanner->exclude_count; i++) {
|
||||
if (glob_match(scanner->exclude_patterns[i], entry->d_name)) {
|
||||
excluded = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (excluded) {
|
||||
free(cur_path);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (scanner->include_count > 0) {
|
||||
bool included = false;
|
||||
for (int i = 0; i < scanner->include_count; i++) {
|
||||
if (glob_match(scanner->include_patterns[i], entry->d_name)) {
|
||||
included = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!included) {
|
||||
free(cur_path);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
File* file = file_create(cur_path);
|
||||
if (file == NULL) {
|
||||
free(cur_path);
|
||||
continue;
|
||||
}
|
||||
file->type = FILE_TYPE_SYMLINK;
|
||||
// Read link target
|
||||
char link_buf[4096];
|
||||
ssize_t link_len = readlink(cur_path, link_buf, sizeof(link_buf) - 1);
|
||||
if (link_len >= 0) {
|
||||
link_buf[link_len] = '\0';
|
||||
file->link_target = str_dup(link_buf);
|
||||
}
|
||||
file->data->size = 0;
|
||||
if (scanner->use_metadata)
|
||||
file->metadata = file_metadata_create(&stats);
|
||||
array_list_add(chunk_data, file);
|
||||
chunk_data_size += 1; // small size for symlinks
|
||||
if (chunk_data_size > scanner->chunk_size) {
|
||||
free(cur_path);
|
||||
return chunk_data_to_chunk(chunk_data);
|
||||
}
|
||||
free(cur_path);
|
||||
} else {
|
||||
bool excluded = false;
|
||||
for (int i = 0; i < scanner->exclude_count; i++) {
|
||||
|
||||
Reference in New Issue
Block a user