#define _GNU_SOURCE #include #include #include #include #include #include #include #include "defines.h" #include "sorting.h" extern unsigned int settings; extern unsigned int file_modifiers; extern unsigned int color_count; unsigned long get_dir_size(char *path){ DIR *dir = opendir(path); unsigned long entry_count = 0; if (dir) { struct dirent *entry; while ((entry=readdir(dir))) { if (entry->d_name[0] != '.' || (file_modifiers & FILE_MODIFIERS_HIDDEN_FILES)) { entry_count++; } } } closedir(dir); return entry_count; } void get_dir_content(char *path, unsigned long *dir_file_count, file *dir_content){ struct dirent **entry; if (file_modifiers & FILE_MODIFIERS_HIDDEN_FILES) { /* print hidden files */ scandir(path, &entry, NULL, alphasort); } else { scandir(path, &entry, skip_hidden_files, alphasort); } unsigned long i = 0; for (i = 0; i < *dir_file_count; i++ ) { if (entry[i]->d_name[0] == '.' && !(file_modifiers & FILE_MODIFIERS_HIDDEN_FILES)) { } else { dir_content[i].file_name_width = strlen(entry[i]->d_name); dir_content[i].file_name = malloc(dir_content[i].file_name_width * sizeof(char)); dir_content[i].file_name = entry[i]->d_name; dir_content[i].file_type = entry[i]->d_type; } } for (i = 0; i < *dir_file_count; i++) { free(entry[i]); } free(entry); } void print_dir(WINDOW *win, unsigned long *dir_file_count, file *dir_content){ unsigned long i = 0; for (i = 0; i < *dir_file_count; i++) { unsigned long j = 0; wattron(win, COLOR_PAIR(dir_content[i].file_type)); mvwprintw(win, i, 0, "%d", dir_content[i].file_type); mvwaddstr(win, i, 3,dir_content[i].file_name); wattroff(win, COLOR_PAIR(dir_content[i].file_type)); } }