From 9f47569a364c21373979b6f80a6041bcca0556b6 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Mon, 17 May 2004 20:58:06 +0000 Subject: [PATCH] Added str_list sorting functions. --- src/xpdev/str_list.c | 42 +++++++++++++++++++++++++++++++++++++++++- src/xpdev/str_list.h | 5 +++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/xpdev/str_list.c b/src/xpdev/str_list.c index e4ba52caf5..ff7379acd9 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 8d10bd9c48..a538915826 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 -- GitLab