diff options
-rw-r--r-- | menu.c | 13 | ||||
-rw-r--r-- | nuklear_ui/blastem_nuklear.c | 3 | ||||
-rw-r--r-- | util.c | 16 | ||||
-rw-r--r-- | util.h | 2 |
4 files changed, 22 insertions, 12 deletions
@@ -41,17 +41,6 @@ uint16_t menu_read_w(uint32_t address, void * vcontext) } } -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 @@ void * menu_write_w(uint32_t address, void * context, uint16_t value) 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 --git a/nuklear_ui/blastem_nuklear.c b/nuklear_ui/blastem_nuklear.c index 96f8a5d..44861d9 100644 --- a/nuklear_ui/blastem_nuklear.c +++ b/nuklear_ui/blastem_nuklear.c @@ -33,6 +33,9 @@ void view_load(struct nk_context *context) } 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(); @@ -680,6 +680,22 @@ void free_dir_list(dir_entry *list, size_t numentries) 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 <SDL.h> @@ -62,6 +62,8 @@ char *read_bundled_file(char *name, uint32_t *sizeret); 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 |