#include #include #include #include #include #include #include #include #include #include "defines.h" extern unsigned int settings; extern unsigned int file_modifiers; extern unsigned short cpu_cores; //amount of cores/threads the host system reports to have extern char **content_l; extern char **content_m; extern char **content_r; extern char *path; int natural(const void *file0, const void *file1){ const char *rec1 = *(char**)file0; const char *rec2 = *(char**)file1; int ret = 0; struct stat f0; struct stat f1; stat(rec1, &f0); stat(rec2, &f1); if (S_ISDIR(f0.st_mode) > S_ISDIR(f1.st_mode)) { ret = 1; } else if (S_ISDIR(f0.st_mode) < S_ISDIR(f1.st_mode)) { ret = -1; } return ret; } int alphabetic(const void *str1, const void *str2){ const char *rec1 = *(char**)str1; const char *rec2 = *(char**)str2; int ret = strcmp(str1, rec2); return ret; } void sort_dir(unsigned long *file_count, unsigned long *longest_name, char **dir_content){ if (file_modifiers & ~FILE_MODIFIERS_SORT_BITMASK) { qsort(dir_content, *file_count, sizeof(longest_name), alphabetic); qsort(dir_content, *file_count, sizeof(longest_name), natural); } else if (file_modifiers & FILE_MODIFIERS_SORT_ALPHABETIC) { qsort(dir_content, *file_count, sizeof(longest_name), alphabetic); } }