#include #include #include "defines.h" #include "sorting.h" extern unsigned int settings; extern unsigned int file_modifiers; void get_dir_size(char *path, unsigned long *dir_length_width, unsigned long *dir_width){ DIR *dir = opendir(path); if (dir) { unsigned long entry_count = 0; unsigned long max_length; struct dirent *entry; while ((entry=readdir(dir))) { if (entry->d_name[0] != '.' || (file_modifiers & FILE_MODIFIERS_HIDDEN_FILES)) { unsigned int current_length = 0; unsigned int i = 0; for (; entry->d_name[i] != '\0'; i++) { current_length++; } if (current_length > max_length) { /*dynamic filename length to save on memory*/ max_length = current_length; } entry_count++; } else { } } dir_length_width[0] = entry_count; dir_length_width[1] = max_length; } closedir(dir); } void get_dir_content(char *path, unsigned long *dir_length_width, unsigned long *dir_width, char *dir_content){ struct dirent **entry; if (file_modifiers & FILE_MODIFIERS_HIDDEN_FILES) { /* print hidden files */ dir_length_width[0] = scandir(path, &entry, NULL, alphasort); } else { dir_length_width[0] = scandir(path, &entry, skip_hidden_files, alphasort); } unsigned long i = 0; for (i = 0; i < dir_length_width[0]; i++ ) { if (entry[i]->d_name[0] == '.' && !(file_modifiers & FILE_MODIFIERS_HIDDEN_FILES)) { } else { unsigned long j = 0; for (; entry[i]->d_name[j] != '\0'; j++) { dir_content[i * dir_length_width[1] + j] = entry[i]->d_name[j]; } dir_width[i] = j; } } for (i = 0; i < dir_length_width[0]; i++) { free(entry[i]); } free(entry); } void print_dir(WINDOW *win, unsigned long *dir_length_width, unsigned long *file_width, char *dir_content){ unsigned long i = 0; for (i = 0; i