# HG changeset patch # User Michael Pavone # Date 1511746419 28800 # Node ID d82af64c94d21ff97a081b7158e449181067afa2 # Parent 001120e91fede86a38b856b89678ed2aa1885ee4 Sort directory listing in Nuklear UI file browser diff -r 001120e91fed -r d82af64c94d2 menu.c --- a/menu.c Sat Nov 25 20:43:20 2017 -0800 +++ b/menu.c Sun Nov 26 17:33:39 2017 -0800 @@ -41,17 +41,6 @@ } } -int menu_dir_sort(const void *a, const void *b) -{ - const dir_entry *da, *db; - da = a; - db = b; - if (da->is_dir != db->is_dir) { - return db->is_dir - da->is_dir; - } - return strcasecmp(((dir_entry *)a)->name, ((dir_entry *)b)->name); -} - void copy_string_from_guest(m68k_context *m68k, uint32_t guest_addr, char *buf, size_t maxchars) { char *cur; @@ -163,7 +152,7 @@ size_t num_entries; dir_entry *entries = get_dir_list(menu->curpath, &num_entries); if (entries) { - qsort(entries, num_entries, sizeof(dir_entry), menu_dir_sort); + sort_dir_list(entries, num_entries); } else { warning("Failed to open directory %s: %s\n", menu->curpath, strerror(errno)); entries = malloc(sizeof(dir_entry)); diff -r 001120e91fed -r d82af64c94d2 nuklear_ui/blastem_nuklear.c --- a/nuklear_ui/blastem_nuklear.c Sat Nov 25 20:43:20 2017 -0800 +++ b/nuklear_ui/blastem_nuklear.c Sun Nov 26 17:33:39 2017 -0800 @@ -33,6 +33,9 @@ } if (!entries) { entries = get_dir_list(current_path, &num_entries); + if (entries) { + sort_dir_list(entries, num_entries); + } } uint32_t width = render_width(); uint32_t height = render_height(); diff -r 001120e91fed -r d82af64c94d2 util.c --- a/util.c Sat Nov 25 20:43:20 2017 -0800 +++ b/util.c Sun Nov 26 17:33:39 2017 -0800 @@ -680,6 +680,22 @@ free(list); } +static int sort_dir_alpha(const void *a, const void *b) +{ + const dir_entry *da, *db; + da = a; + db = b; + if (da->is_dir != db->is_dir) { + return db->is_dir - da->is_dir; + } + return strcasecmp(((dir_entry *)a)->name, ((dir_entry *)b)->name); +} + +void sort_dir_list(dir_entry *list, size_t num_entries) +{ + qsort(list, num_entries, sizeof(dir_entry), sort_dir_alpha); +} + #ifdef __ANDROID__ #include diff -r 001120e91fed -r d82af64c94d2 util.h --- a/util.h Sat Nov 25 20:43:20 2017 -0800 +++ b/util.h Sun Nov 26 17:33:39 2017 -0800 @@ -62,6 +62,8 @@ dir_entry *get_dir_list(char *path, size_t *numret); //Frees a dir list returned by get_dir_list void free_dir_list(dir_entry *list, size_t numentries); +//Performs a case-insensitive sort by file name on a dir list +void sort_dir_list(dir_entry *list, size_t num_entries); //Gets the modification time of a file time_t get_modification_time(char *path); //Recusrively creates a directory if it does not exist