diff options
-rw-r--r-- | list.c | 34 | ||||
-rw-r--r-- | list.h | 1 | ||||
-rw-r--r-- | mkfontscale.c | 1 |
3 files changed, 36 insertions, 0 deletions
@@ -217,6 +217,40 @@ reverseList(ListPtr old) return new; } +/* qsort helper for sorting list entries */ +static int +compareListEntries(const void *a, const void *b) +{ + const ListPtr lista = *(const ListPtr *) a; + const ListPtr listb = *(const ListPtr *) b; + + return strcmp(lista->value, listb->value); +} + +ListPtr +sortList(ListPtr old) +{ + int i; + int l = listLength(old); + ListPtr n; + ListPtr *sorted = malloc(l * sizeof(ListPtr)); + + if (sorted == NULL) + return old; + + for (n = old, i = 0; n != NULL; n = n->next) { + sorted[i++] = n; + } + qsort(sorted, i, sizeof(ListPtr), compareListEntries); + n = sorted[0]; + for (i = 0; i < (l - 1); i++) { + sorted[i]->next = sorted[i+1]; + } + sorted[i]->next = NULL; + free(sorted); + return n; +} + void destroyList(ListPtr old) { @@ -39,6 +39,7 @@ int listLength(ListPtr list); ListPtr appendList(ListPtr first, ListPtr second); ListPtr makeList(char **a, int n, ListPtr old, int begin); ListPtr reverseList(ListPtr old); +ListPtr sortList(ListPtr old); void destroyList(ListPtr old); void deepDestroyList(ListPtr old); diff --git a/mkfontscale.c b/mkfontscale.c index ea4cd27..ef3f490 100644 --- a/mkfontscale.c +++ b/mkfontscale.c @@ -978,6 +978,7 @@ doDirectory(char *dirname_given, int numEncodings, ListPtr encodingsToDo) exit(1); } fprintf(encfile, "%d\n", numEncodings); + encodingsToDo = sortList(encodingsToDo); for(lp = encodingsToDo; lp; lp = lp->next) { fprintf(encfile, "%s\n", lp->value); } |