Commit fae728cb authored by Geoff Simmons's avatar Geoff Simmons

add HDR_N(), counts the headers in a trie

parent 3424c5fe
......@@ -134,6 +134,22 @@ HDR_InsertIdx(struct hdrt_node *hdrt, const char *hdr, int idx)
return hdrt;
}
int
HDR_N(struct hdrt_node *hdrt)
{
int n = 0;
if (hdrt == NULL)
return 0;
CHECK_OBJ(hdrt, HDRT_NODE_MAGIC);
if (hdrt->idx >= 0)
n++;
for (int i = 0; i < 64; i++)
if (hdrt->next[i] != NULL)
n += HDR_N(hdrt->next[i]);
return n;
}
void
HDR_Fini(struct hdrt_node *hdrt)
{
......
......@@ -40,4 +40,5 @@ struct hdrt_node {
int HDR_FindIdx(struct hdrt_node *hdrt, const char *hdr);
struct hdrt_node *HDR_InsertIdx(struct hdrt_node *hdrt, const char *hdr,
int idx);
int HDR_N(struct hdrt_node *hdrt);
void HDR_Fini(struct hdrt_node *hdrt);
......@@ -395,6 +395,44 @@ static char
return NULL;
}
static char
*test_HDR_N(void)
{
struct hdrt_node *hdrt;
printf("... testing HDR_N()\n");
MAZ(HDR_N(NULL));
hdrt = HDR_InsertIdx(NULL, "Foo", 4711);
MASSERT(HDR_N(hdrt) == 1);
hdrt = HDR_InsertIdx(NULL, "Accept-Encoding", 1);
hdrt = HDR_InsertIdx(hdrt, "Accept", 2);
hdrt = HDR_InsertIdx(hdrt, "Accept-Charset", 3);
hdrt = HDR_InsertIdx(hdrt, "Accept-Language", 4);
hdrt = HDR_InsertIdx(hdrt, "Accept-Datetime", 5);
MASSERT(HDR_N(hdrt) == 5);
hdrt = HDR_InsertIdx(NULL, "Content-Disposition", 1);
hdrt = HDR_InsertIdx(hdrt, "Content-Encoding", 2);
hdrt = HDR_InsertIdx(hdrt, "Content-Language", 3);
hdrt = HDR_InsertIdx(hdrt, "Content-Length", 4);
hdrt = HDR_InsertIdx(hdrt, "Content-Location", 5);
hdrt = HDR_InsertIdx(hdrt, "Content-MD5", 6);
hdrt = HDR_InsertIdx(hdrt, "Content-Range", 7);
hdrt = HDR_InsertIdx(hdrt, "Content-Type", 8);
MASSERT(HDR_N(hdrt) == 8);
hdrt = HDR_InsertIdx(NULL, "X-Csrf-Token", 1);
hdrt = HDR_InsertIdx(hdrt, "X-Forwarded-For", 2);
hdrt = HDR_InsertIdx(hdrt, "X-Forwarded-Host", 3);
hdrt = HDR_InsertIdx(hdrt, "X-Forwarded-Proto", 4);
MASSERT(HDR_N(hdrt) == 4);
return NULL;
}
static char
*test_HDR_Fini(void)
{
......@@ -423,6 +461,7 @@ static const char
{
mu_run_test(test_HDR_FindIdx);
mu_run_test(test_HDR_InsertIdx);
mu_run_test(test_HDR_N);
mu_run_test(test_HDR_Fini);
return NULL;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment