diff --git a/src/xpdev/str_list.c b/src/xpdev/str_list.c index e4ba52caf596dec8a3f1c1d467b741ab35bccd29..ff7379acd9478fd1a9eb224a59ae944062163799 100644 --- a/src/xpdev/str_list.c +++ b/src/xpdev/str_list.c @@ -35,7 +35,7 @@ * Note: If this box doesn't appear square, then you need to fix your tabs. * ****************************************************************************/ -#include <stdlib.h> /* malloc */ +#include <stdlib.h> /* malloc and qsort */ #include "str_list.h" str_list_t strListAlloc() @@ -85,6 +85,46 @@ str_list_t strListAdd(str_list_t* list, char* str) return strListAddAt(list,str,strListCount(*list)); } +static int strListCompareAlpha(const void *arg1, const void *arg2) +{ + return stricmp(*(char**)arg1, *(char**)arg2); +} + +static int strListCompareAlphaReverse(const void *arg1, const void *arg2) +{ + return stricmp(*(char**)arg2, *(char**)arg1); +} + +static int strListCompareAlphaCase(const void *arg1, const void *arg2) +{ + return strcmp(*(char**)arg1, *(char**)arg2); +} + +static int strListCompareAlphaCaseReverse(const void *arg1, const void *arg2) +{ + return strcmp(*(char**)arg2, *(char**)arg1); +} + +void strListSortAlpha(str_list_t list) +{ + qsort(list,strListCount(list),sizeof(char*),strListCompareAlpha); +} + +void strListSortAlphaReverse(str_list_t list) +{ + qsort(list,strListCount(list),sizeof(char*),strListCompareAlphaReverse); +} + +void strListSortAlphaCase(str_list_t list) +{ + qsort(list,strListCount(list),sizeof(char*),strListCompareAlphaCase); +} + +void strListSortAlphaCaseReverse(str_list_t list) +{ + qsort(list,strListCount(list),sizeof(char*),strListCompareAlphaCaseReverse); +} + void strListFree(str_list_t* list) { size_t i; diff --git a/src/xpdev/str_list.h b/src/xpdev/str_list.h index 8d10bd9c481903ef80a9544b984e31dc7d6aa225..a538915826847efcb22f3a3643b33a3320ef14eb 100644 --- a/src/xpdev/str_list.h +++ b/src/xpdev/str_list.h @@ -62,6 +62,11 @@ str_list_t strListAddAt(str_list_t* list, char* str, size_t index); /* Count the number of strings in the list and returns the count */ size_t strListCount(str_list_t list); +void strListSortAlpha(str_list_t list); +void strListSortAlphaReverse(str_list_t list); +void strListSortAlphaCase(str_list_t list); +void strListSortAlphaCaseReverse(str_list_t list); + #if defined(__cplusplus) } #endif