diff --git a/libretro-sdk/file/file_list.c b/libretro-sdk/file/file_list.c index c48fb0690a..5d1d2bfd6f 100644 --- a/libretro-sdk/file/file_list.c +++ b/libretro-sdk/file/file_list.c @@ -168,11 +168,28 @@ static int file_list_alt_cmp(const void *a_, const void *b_) return strcasecmp(cmp_a, cmp_b); } +static int file_list_type_cmp(const void *a_, const void *b_) +{ + const struct item_file *a = (const struct item_file*)a_; + const struct item_file *b = (const struct item_file*)b_; + if (a->type < b->type) + return -1; + if (a->type == b->type) + return 0; + + return 1; +} + void file_list_sort_on_alt(file_list_t *list) { qsort(list->list, list->size, sizeof(list->list[0]), file_list_alt_cmp); } +void file_list_sort_on_type(file_list_t *list) +{ + qsort(list->list, list->size, sizeof(list->list[0]), file_list_type_cmp); +} + void *file_list_get_userdata_at_offset(const file_list_t *list, size_t idx) { if (!list) diff --git a/libretro-sdk/include/file/file_list.h b/libretro-sdk/include/file/file_list.h index ae939e1365..95983f3e91 100644 --- a/libretro-sdk/include/file/file_list.h +++ b/libretro-sdk/include/file/file_list.h @@ -94,6 +94,8 @@ void file_list_get_alt_at_offset(const file_list_t *list, size_t index, void file_list_sort_on_alt(file_list_t *list); +void file_list_sort_on_type(file_list_t *list); + bool file_list_search(const file_list_t *list, const char *needle, size_t *index);