72 lines
1.1 KiB
C
72 lines
1.1 KiB
C
|
/* Simple string sorting support, thanks to qsort(). */
|
||
|
#include "../config.h"
|
||
|
#include "HTUtils.h"
|
||
|
#include <string.h>
|
||
|
|
||
|
#define SIZE_OF_HUNK 100
|
||
|
|
||
|
static char **hunk = NULL;
|
||
|
static int size_of_hunk;
|
||
|
static int count;
|
||
|
|
||
|
void HTSortInit (void)
|
||
|
{
|
||
|
count = 0;
|
||
|
|
||
|
if (!hunk)
|
||
|
{
|
||
|
size_of_hunk = SIZE_OF_HUNK;
|
||
|
hunk = (char **)malloc (sizeof (char *) * size_of_hunk);
|
||
|
}
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
static void expand_hunk (void)
|
||
|
{
|
||
|
/* Make hunk bigger by SIZE_OF_HUNK elements. */
|
||
|
size_of_hunk += SIZE_OF_HUNK;
|
||
|
hunk = (char **)realloc (hunk, sizeof (char *) * size_of_hunk);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
void HTSortAdd (char *str)
|
||
|
{
|
||
|
/* If we don't have room, expand. */
|
||
|
if (count == size_of_hunk)
|
||
|
expand_hunk ();
|
||
|
|
||
|
hunk[count++] = str;
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
static int dsortf (char **s1, char **s2)
|
||
|
{
|
||
|
return (strcmp (*(char **)s1, *(char **)s2));
|
||
|
}
|
||
|
|
||
|
void HTSortSort (void)
|
||
|
{
|
||
|
qsort ((void *)hunk,
|
||
|
count,
|
||
|
sizeof (char *),
|
||
|
(void *)dsortf);
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
int HTSortCurrentCount (void)
|
||
|
{
|
||
|
return count;
|
||
|
}
|
||
|
|
||
|
char *HTSortFetch (int i)
|
||
|
{
|
||
|
if (i < count)
|
||
|
return hunk[i];
|
||
|
else
|
||
|
return NULL;
|
||
|
}
|